on master help sign in
482 files changed+60069−172766
since splitsnapshots
unifiedsplit
.circleci/config.yml+22−2 .gitignore+1 .prettierrc+4 Dockerfile+3−1 Dockerfile.dev+1−1 README.md+17−1 build-prybar.nix+72−22 default.nix+10−36 flake.lock+43 flake.nix+173 go.mod+2−1 go.sum+4−2 languages/R/main.go+1−1 languages/clojure/deps.nix+65 languages/clojure/main.go+3−3 languages/clojure/wrappedClojure.nix+18 languages/elisp/main.go+6−1 languages/julia/julia.nix+26 languages/julia/main.go+5−4 languages/julia/pry.h+1−1 languages/lua/lua.c+2−5 languages/lua/lua_test.go+15 languages/lua/main.go+2−2 languages/lua/pry.c+1−1 languages/lua/pry.h+1−1 languages/lua/testdata/test.lua+1 languages/nodejs/main.go+1−1 languages/nodejs/repl.js+127−84 languages/ocaml/main.go+11−2 languages/python2/main.go+9−2 languages/python2/pry_python2.c+2−2 languages/python2/pry_python2.h+1−1 languages/python3/main.go+14−3 languages/python3/pry_python3.c+26−11 languages/python3/pry_python3.h+4−2 languages/python310/.gitignore+3 languages/python310/compile+9 languages/ruby/main.go+3−3 languages/ruby/pry_ruby.c+4−2 languages/ruby/pry_ruby.h+1−1 languages/spidermonkey/main.go−90 languages/sqlite/main.go+6−1 languages/tcl/main.go+5−1 prybar_assets/nodejs/input-sync.js+290 prybar_assets/nodejs/module-context-hook.js+487 vendor/github.com/chzyer/readline/LICENSE → prybar_assets/nodejs/node_modules/@replit/node-fetch/LICENSE.md+1−1 prybar_assets/nodejs/node_modules/@replit/node-fetch/README.md+27 prybar_assets/nodejs/node_modules/@replit/node-fetch/index-3a548b1a.js+2269 prybar_assets/nodejs/node_modules/@replit/node-fetch/index-3a548b1a.js.map+1 prybar_assets/nodejs/node_modules/@replit/node-fetch/index.d.ts+202 prybar_assets/nodejs/node_modules/@replit/node-fetch/index.js+27 prybar_assets/nodejs/node_modules/@replit/node-fetch/index.js.map+1 prybar_assets/nodejs/node_modules/@replit/node-fetch/multipart-parser-dc9090bd.js+455 prybar_assets/nodejs/node_modules/@replit/node-fetch/multipart-parser-dc9090bd.js.map+1 prybar_assets/nodejs/node_modules/@replit/node-fetch/package.json+34 prybar_assets/nodejs/node_modules/fetch-blob/LICENSE+21 prybar_assets/nodejs/node_modules/fetch-blob/README.md+106 prybar_assets/nodejs/node_modules/fetch-blob/file.d.ts+2 prybar_assets/nodejs/node_modules/fetch-blob/file.js+49 prybar_assets/nodejs/node_modules/fetch-blob/from.d.ts+26 prybar_assets/nodejs/node_modules/fetch-blob/from.js+100 prybar_assets/nodejs/node_modules/fetch-blob/index.d.ts+3 prybar_assets/nodejs/node_modules/fetch-blob/index.js+250 prybar_assets/nodejs/node_modules/fetch-blob/package.json+56 prybar_assets/nodejs/node_modules/fetch-blob/streams.cjs+51 prybar_assets/nodejs/node_modules/formdata-polyfill/FormData.js+441 prybar_assets/nodejs/node_modules/formdata-polyfill/LICENSE+21 prybar_assets/nodejs/node_modules/formdata-polyfill/README.md+145 prybar_assets/nodejs/node_modules/formdata-polyfill/esm.min.d.ts+5 prybar_assets/nodejs/node_modules/formdata-polyfill/esm.min.js+40 prybar_assets/nodejs/node_modules/formdata-polyfill/formdata-to-blob.js+39 prybar_assets/nodejs/node_modules/formdata-polyfill/formdata.min.js+21 prybar_assets/nodejs/node_modules/formdata-polyfill/package.json+50 prybar_assets/nodejs/node_modules/node-domexception/LICENSE+21 prybar_assets/nodejs/node_modules/node-domexception/README.md+46 prybar_assets/nodejs/node_modules/node-domexception/index.js+16 prybar_assets/nodejs/node_modules/node-domexception/package.json+29 prybar_assets/nodejs/node_modules/web-streams-polyfill/LICENSE+22 prybar_assets/nodejs/node_modules/web-streams-polyfill/README.md+114 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es2018.js+4241 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es2018.js.map+1 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js+2 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js.map+1 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs+4219 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs.map+1 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es6.js+4252 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es6.js.map+1 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es6.min.js+2 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es6.min.js.map+1 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es6.mjs+4230 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es6.mjs.map+1 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.js+4382 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.js.map+1 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.min.js+2 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.min.js.map+1 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.mjs+4360 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.mjs.map+1 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es2018.js+4213 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es2018.js.map+1 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs+4191 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs.map+1 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es6.js+4224 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es6.js.map+1 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs+4202 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs.map+1 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.js+4354 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.js.map+1 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.mjs+4332 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.mjs.map+1 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/types/polyfill.d.ts+771 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/types/ts3.6/polyfill.d.ts+771 prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/types/tsdoc-metadata.json+11 prybar_assets/nodejs/node_modules/web-streams-polyfill/es2018/package.json+7 prybar_assets/nodejs/node_modules/web-streams-polyfill/es6/package.json+7 prybar_assets/nodejs/node_modules/web-streams-polyfill/package.json+76 prybar_assets/nodejs/node_modules/web-streams-polyfill/ponyfill/es2018/package.json+6 prybar_assets/nodejs/node_modules/web-streams-polyfill/ponyfill/es6/package.json+6 prybar_assets/nodejs/node_modules/web-streams-polyfill/ponyfill/package.json+6 prybar_assets/nodejs/package.json+6 prybar_assets/nodejs/readline-sync.js−1329 prybar_assets/nodejs/runCode.js+4 run_no_pty+15 run_tests+8−2 run_tests_language+34 scripts/docker-install.sh+25−14 test_files/global_bug.js+7−3 test_files/global_require.js → test_files/global_bug_submodule.js+1 test_files/main_module_scoped_to_global.js+5 test_files/main_module_scoped_to_global_submodule.js+1 test_files/module_patching.js+1 test_files/node_modules/node-fetch/package.json+13 test_files/node_modules/node-fetch/src/index.js test_files/package-lock.json+50 test_files/package.json+14 test_files/require_node_fetch.js+3 tests/clojure/run_code.exp+1−2 tests/julia/header.exp+2−2 tests/nodejs/confirm.exp+18 tests/nodejs/err.exp+1−12 tests/nodejs/global_bug.exp+1−1 tests/nodejs/header.exp+1−1 tests/nodejs/main_module_scoped_to_global.exp+10 tests/nodejs/module_patching.exp+1−1 tests/nodejs/node_fetch.exp+14 tests/nodejs/prompt_escape.exp+15 tests/nodejs/prompt_no_tty.exp+13 tests/nodejs/prompt_tty.exp+35 tests/nodejs/prompt_tty_bounds.exp+39 tests/nodejs/prompt_tty_escapes.exp+34 tests/nodejs/repl_test.go+608 tests/nodejs/run_file.exp+3−11 tests/tcl/1_plus_1.exp → tests/tcl/1_plus_1.exp_skip utils/language.go+4−3 utils/utils.go+6−1 vendor/github.com/chzyer/readline/.gitignore−1 vendor/github.com/chzyer/readline/.travis.yml−8 vendor/github.com/chzyer/readline/CHANGELOG.md−58 vendor/github.com/chzyer/readline/README.md−114 vendor/github.com/chzyer/readline/ansi_windows.go−249 vendor/github.com/chzyer/readline/complete.go−285 vendor/github.com/chzyer/readline/complete_helper.go−165 vendor/github.com/chzyer/readline/complete_segment.go−82 vendor/github.com/chzyer/readline/history.go−330 vendor/github.com/chzyer/readline/operation.go−531 vendor/github.com/chzyer/readline/password.go−33 vendor/github.com/chzyer/readline/rawreader_windows.go−125 vendor/github.com/chzyer/readline/readline.go−326 vendor/github.com/chzyer/readline/remote.go−475 vendor/github.com/chzyer/readline/runebuf.go−629 vendor/github.com/chzyer/readline/runes.go−223 vendor/github.com/chzyer/readline/search.go−164 vendor/github.com/chzyer/readline/std.go−197 vendor/github.com/chzyer/readline/std_windows.go−9 vendor/github.com/chzyer/readline/term.go−123 vendor/github.com/chzyer/readline/term_bsd.go−29 vendor/github.com/chzyer/readline/term_linux.go−33 vendor/github.com/chzyer/readline/term_solaris.go−32 vendor/github.com/chzyer/readline/term_unix.go−24 vendor/github.com/chzyer/readline/term_windows.go−171 vendor/github.com/chzyer/readline/terminal.go−238 vendor/github.com/chzyer/readline/utils.go−277 vendor/github.com/chzyer/readline/utils_unix.go−83 vendor/github.com/chzyer/readline/utils_windows.go−41 vendor/github.com/chzyer/readline/vim.go−176 vendor/github.com/chzyer/readline/windows_api.go−152 vendor/golang.org/x/sys/AUTHORS−3 vendor/golang.org/x/sys/CONTRIBUTORS−3 vendor/golang.org/x/sys/LICENSE−27 vendor/golang.org/x/sys/PATENTS−22 vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go−30 vendor/golang.org/x/sys/unix/.gitignore−2 vendor/golang.org/x/sys/unix/README.md−184 vendor/golang.org/x/sys/unix/affinity_linux.go−86 vendor/golang.org/x/sys/unix/aliases.go−15 vendor/golang.org/x/sys/unix/asm_aix_ppc64.s−17 vendor/golang.org/x/sys/unix/asm_bsd_386.s−29 vendor/golang.org/x/sys/unix/asm_bsd_amd64.s−29 vendor/golang.org/x/sys/unix/asm_bsd_arm.s−29 vendor/golang.org/x/sys/unix/asm_bsd_arm64.s−29 vendor/golang.org/x/sys/unix/asm_linux_386.s−65 vendor/golang.org/x/sys/unix/asm_linux_amd64.s−57 vendor/golang.org/x/sys/unix/asm_linux_arm.s−56 vendor/golang.org/x/sys/unix/asm_linux_arm64.s−52 vendor/golang.org/x/sys/unix/asm_linux_mips64x.s−56 vendor/golang.org/x/sys/unix/asm_linux_mipsx.s−54 vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s−44 vendor/golang.org/x/sys/unix/asm_linux_riscv64.s−47 vendor/golang.org/x/sys/unix/asm_linux_s390x.s−56 vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s−29 vendor/golang.org/x/sys/unix/asm_solaris_amd64.s−17 vendor/golang.org/x/sys/unix/asm_zos_s390x.s−426 vendor/golang.org/x/sys/unix/bluetooth_linux.go−36 vendor/golang.org/x/sys/unix/cap_freebsd.go−196 vendor/golang.org/x/sys/unix/constants.go−14 vendor/golang.org/x/sys/unix/dev_aix_ppc.go−27 vendor/golang.org/x/sys/unix/dev_aix_ppc64.go−29 vendor/golang.org/x/sys/unix/dev_darwin.go−24 vendor/golang.org/x/sys/unix/dev_dragonfly.go−30 vendor/golang.org/x/sys/unix/dev_freebsd.go−30 vendor/golang.org/x/sys/unix/dev_linux.go−42 vendor/golang.org/x/sys/unix/dev_netbsd.go−29 vendor/golang.org/x/sys/unix/dev_openbsd.go−29 vendor/golang.org/x/sys/unix/dev_zos.go−29 vendor/golang.org/x/sys/unix/dirent.go−103 vendor/golang.org/x/sys/unix/endian_big.go−10 vendor/golang.org/x/sys/unix/endian_little.go−10 vendor/golang.org/x/sys/unix/env_unix.go−32 vendor/golang.org/x/sys/unix/epoll_zos.go−221 vendor/golang.org/x/sys/unix/errors_freebsd_386.go−233 vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go−233 vendor/golang.org/x/sys/unix/errors_freebsd_arm.go−226 vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go−17 vendor/golang.org/x/sys/unix/fcntl.go−37 vendor/golang.org/x/sys/unix/fcntl_darwin.go−24 vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go−14 vendor/golang.org/x/sys/unix/fdset.go−30 vendor/golang.org/x/sys/unix/fstatfs_zos.go−164 vendor/golang.org/x/sys/unix/gccgo.go−60 vendor/golang.org/x/sys/unix/gccgo_c.c−45 vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go−21 vendor/golang.org/x/sys/unix/ioctl.go−75 vendor/golang.org/x/sys/unix/ioctl_zos.go−74 vendor/golang.org/x/sys/unix/mkall.sh−243 vendor/golang.org/x/sys/unix/mkerrors.sh−750 vendor/golang.org/x/sys/unix/pagesize_unix.go−16 vendor/golang.org/x/sys/unix/pledge_openbsd.go−163 vendor/golang.org/x/sys/unix/ptrace_darwin.go−12 vendor/golang.org/x/sys/unix/ptrace_ios.go−12 vendor/golang.org/x/sys/unix/race.go−31 vendor/golang.org/x/sys/unix/race0.go−26 vendor/golang.org/x/sys/unix/readdirent_getdents.go−13 vendor/golang.org/x/sys/unix/readdirent_getdirentries.go−20 vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go−16 vendor/golang.org/x/sys/unix/sockcmsg_linux.go−36 vendor/golang.org/x/sys/unix/sockcmsg_unix.go−93 vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go−47 vendor/golang.org/x/sys/unix/str.go−27 vendor/golang.org/x/sys/unix/syscall.go−95 vendor/golang.org/x/sys/unix/syscall_aix.go−553 vendor/golang.org/x/sys/unix/syscall_aix_ppc.go−54 vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go−85 vendor/golang.org/x/sys/unix/syscall_bsd.go−664 vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go−32 vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go−108 vendor/golang.org/x/sys/unix/syscall_darwin.go−677 vendor/golang.org/x/sys/unix/syscall_darwin_386.go−51 vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go−51 vendor/golang.org/x/sys/unix/syscall_darwin_arm.go−51 vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go−51 vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go−34 vendor/golang.org/x/sys/unix/syscall_dragonfly.go−541 vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go−57 vendor/golang.org/x/sys/unix/syscall_freebsd.go−872 vendor/golang.org/x/sys/unix/syscall_freebsd_386.go−67 vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go−67 vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go−63 vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go−63 vendor/golang.org/x/sys/unix/syscall_illumos.go−129 vendor/golang.org/x/sys/unix/syscall_linux.go−2510 vendor/golang.org/x/sys/unix/syscall_linux_386.go−388 vendor/golang.org/x/sys/unix/syscall_linux_amd64.go−195 vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go−13 vendor/golang.org/x/sys/unix/syscall_linux_arm.go−287 vendor/golang.org/x/sys/unix/syscall_linux_arm64.go−246 vendor/golang.org/x/sys/unix/syscall_linux_gc.go−15 vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go−17 vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go−14 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go−31 vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go−21 vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go−231 vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go−239 vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go−157 vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go−231 vendor/golang.org/x/sys/unix/syscall_linux_s390x.go−343 vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go−152 vendor/golang.org/x/sys/unix/syscall_netbsd.go−618 vendor/golang.org/x/sys/unix/syscall_netbsd_386.go−38 vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go−38 vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go−38 vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go−38 vendor/golang.org/x/sys/unix/syscall_openbsd.go−390 vendor/golang.org/x/sys/unix/syscall_openbsd_386.go−42 vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go−42 vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go−42 vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go−42 vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go−35 vendor/golang.org/x/sys/unix/syscall_solaris.go−746 vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go−28 vendor/golang.org/x/sys/unix/syscall_unix.go−431 vendor/golang.org/x/sys/unix/syscall_unix_gc.go−18 vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go−25 vendor/golang.org/x/sys/unix/syscall_zos_s390x.go−1781 vendor/golang.org/x/sys/unix/timestruct.go−77 vendor/golang.org/x/sys/unix/unveil_openbsd.go−42 vendor/golang.org/x/sys/unix/xattr_bsd.go−241 vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go−1385 vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go−1386 vendor/golang.org/x/sys/unix/zerrors_darwin_386.go−1789 vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go−1860 vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go−1789 vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go−1860 vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go−1738 vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go−1943 vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go−1942 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go−1841 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go−1943 vendor/golang.org/x/sys/unix/zerrors_linux.go−2808 vendor/golang.org/x/sys/unix/zerrors_linux_386.go−801 vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go−801 vendor/golang.org/x/sys/unix/zerrors_linux_arm.go−807 vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go−798 vendor/golang.org/x/sys/unix/zerrors_linux_mips.go−808 vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go−808 vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go−808 vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go−808 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go−864 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go−864 vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go−788 vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go−861 vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go−858 vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go−1780 vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go−1770 vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go−1759 vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go−1770 vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go−1665 vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go−1775 vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go−1667 vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go−1798 vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go−1863 vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go−1557 vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go−832 vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go−42 vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go−17 vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go−51 vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go−51 vendor/golang.org/x/sys/unix/zptrace_x86_linux.go−81 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go−1485 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go−1443 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go−1192 vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go−1070 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.go−40 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.s−12 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go−2431 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s−290 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go−40 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s−12 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go−2431 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s−290 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.go−40 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.s−12 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go−2417 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s−288 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go−40 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s−12 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go−2431 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s−290 vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go−1679 vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go−2016 vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go−2016 vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go−2016 vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go−2016 vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go−128 vendor/golang.org/x/sys/unix/zsyscall_linux.go−1944 vendor/golang.org/x/sys/unix/zsyscall_linux_386.go−579 vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go−746 vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go−716 vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go−603 vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go−759 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go−730 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go−730 vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go−759 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go−808 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go−808 vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go−583 vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go−578 vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go−741 vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go−1862 vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go−1862 vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go−1862 vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go−1862 vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go−1693 vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go−1693 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go−1693 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go−1693 vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go−1693 vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go−1983 vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go−1217 vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go−274 vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go−272 vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go−274 vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go−276 vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go−280 vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go−438 vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go−440 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go−438 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go−438 vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go−317 vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go−397 vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go−397 vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go−397 vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go−397 vendor/golang.org/x/sys/unix/zsysnum_linux_386.go−441 vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go−363 vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go−405 vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go−308 vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go−426 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go−356 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go−356 vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go−426 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go−405 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go−405 vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go−307 vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go−370 vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go−384 vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go−275 vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go−275 vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go−275 vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go−275 vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go−219 vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go−219 vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go−219 vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go−218 vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go−221 vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go−2670 vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go−354 vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go−358 vendor/golang.org/x/sys/unix/ztypes_darwin_386.go−517 vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go−530 vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go−517 vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go−530 vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go−471 vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go−720 vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go−723 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go−704 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go−701 vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go−40 vendor/golang.org/x/sys/unix/ztypes_linux.go−3737 vendor/golang.org/x/sys/unix/ztypes_linux_386.go−620 vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go−638 vendor/golang.org/x/sys/unix/ztypes_linux_arm.go−615 vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go−617 vendor/golang.org/x/sys/unix/ztypes_linux_mips.go−621 vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go−620 vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go−620 vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go−621 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go−627 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go−627 vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go−645 vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go−641 vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go−622 vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go−500 vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go−508 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go−505 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go−508 vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go−573 vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go−573 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go−574 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go−567 vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go−567 vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go−442 vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go−402 vendor/modules.txt−11
.circleci/config.yml+22−2
@@ -6,7 +6,7 @@ jobs:
66 steps:
77 - add_ssh_keys:
88 fingerprints:
9− - "dd:6f:07:f7:7e:b0:ab:07:1c:1a:43:ba:a0:a3:b9:6f"
9+ - "93:22:9e:64:86:b2:d7:23:41:ab:6f:e7:1a:02:35:a8"
1010 - run: apk add --no-cache --no-progress make git openssh
1111 - run:
1212 name: Keyscan Github (HACK) #https://discuss.circleci.com/t/known-hosts-in-circle-2-0/18544
@@ -14,13 +14,29 @@ jobs:
1414 - checkout
1515 - setup_remote_docker
1616 - run: make test-image
17+ nix_build:
18+ docker:
19+ - image: nixos/nix:2.3.16
20+ steps:
21+ - checkout
22+ - run: git checkout . # circle CI checkout deleted the vendored node_modules
23+ # folders, this adds them back
24+ - restore_cache:
25+ key: nix-store
26+ - run: apk add coreutils git
27+ - run: nix-build
28+ - save_cache:
29+ key: nix-store
30+ when: always
31+ paths:
32+ - /nix
1733 build_test_and_deploy:
1834 docker:
1935 - image: docker:18.09
2036 steps:
2137 - add_ssh_keys:
2238 fingerprints:
23− - "dd:6f:07:f7:7e:b0:ab:07:1c:1a:43:ba:a0:a3:b9:6f"
39+ - "93:22:9e:64:86:b2:d7:23:41:ab:6f:e7:1a:02:35:a8"
2440 - run: apk add --no-cache --no-progress make git openssh
2541 - run:
2642 name: Keyscan Github (HACK) #https://discuss.circleci.com/t/known-hosts-in-circle-2-0/18544
@@ -43,6 +59,10 @@ workflows:
4359 filters:
4460 branches:
4561 ignore: master
62+ - nix_build:
63+ filters:
64+ branches:
65+ ignore: master
4666 - build_test_and_deploy:
4767 context: Docker Hub
4868 filters:
.gitignore+1
@@ -4,3 +4,4 @@ prybar_assets/sqlite/patch.so
44deps.lst
55prybar.tar.gz
66generated_*.go
7+result*
.prettierrcnew file+4
@@ -0,0 +1,4 @@
1+{
2+ "trailingComma": "all",
3+ "singleQuote": true
4+}
Dockerfile+3−1
@@ -1,4 +1,4 @@
1−FROM ubuntu:18.04
1+FROM ubuntu:20.04
22
33COPY scripts/docker-install.sh /tmp/docker-install.sh
44RUN /tmp/docker-install.sh
@@ -8,6 +8,8 @@ COPY . /gocode/src/github.com/replit/prybar
88WORKDIR /gocode/src/github.com/replit/prybar
99
1010ENV GOPATH=/gocode LC_ALL=C.UTF-8 PATH="/gocode/src/github.com/replit/prybar:$PATH"
11+ENV GOROOT=/usr/local/go
12+ENV PATH=$PATH:$GOROOT/bin
1113
1214RUN cp languages/tcl/tcl.pc /usr/lib/pkgconfig/
1315RUN make
Dockerfile.dev+1−1
@@ -1,4 +1,4 @@
1−FROM ubuntu:18.04
1+FROM ubuntu:20.04
22
33COPY scripts/docker-install.sh /tmp/docker-install.sh
44RUN /tmp/docker-install.sh
README.md+17−1
@@ -50,19 +50,35 @@ written in the host language which starts a Prybar-compatible REPL.
5050| SQLite | ✔ | ✔ | ✔ | ✔ | ✗ | ✔ |
5151| Tcl | ✔ | ✔ | ✔ | ✗ | ✗ | - |
5252
53+## Start to Develop with Nix
54+
55+To get started developing Prybar, you can use the nix shell. Enter
56+
57+```
58+nix develop
59+```
60+
61+to drop into a shell that has all dependencies installed an ready to go.
62+
63+If you don't have nix yet, install that: https://nixos.org/
64+
5365## Build and run
5466
5567 % make help
5668 usage:
5769 make all Build all Prybar binaries
5870 make prybar-LANG Build the Prybar binary for LANG
59− make docker Run a shell with Prybar inside Docker
71+ make docker Run a shell with Prybar inside Docker
72+ (don't do this in the nix shell, although this is
73+ not needed if you use nix)
6074 make image Build a Docker image with Prybar for distribution
6175 make test Run integration tests
6276 make test-image Test Docker image for distribution
6377 make clean Remove build artifacts
6478 make help Show this message
6579
80+## You can also use Docker
81+
6682Prybar uses Docker to make it easy to get started with development.
6783First, you must [install Docker](https://docs.docker.com/install/).
6884Then, run:
build-prybar.nix+72−22
@@ -1,31 +1,81 @@
1−{ language, buildInputs ? [] }:
1+{ language, buildInputs ? [ ], binaries ? [ ], setFlags ? false
2+, pkgName ? language }:
23
3−{ lib, buildGoModule, fetchFromGitHub, bash, pkg-config }:
4+{ lib, buildGoModule, fetchFromGitHub, bash, expect, pkg-config, runCommand, git
5+, python3, copyPathToStore, rev, makeWrapper }:
46
5−buildGoModule rec {
6− name = "prybar-${language}";
7− version = "98148ff";
7+buildGoModule {
8+ pname = "prybar-${language}";
9+ version = rev;
810
9− src = fetchFromGitHub{
10− owner = "replit";
11− repo = "prybar";
12− rev = "${version}";
13− sha256 = "14l4bhdlssp22wdxx1ycz9wl64z7bf3qwpqqp3npcva969191c48";
14− };
11+ src = ./.;
1512
16− inherit buildInputs;
17− nativeBuildInputs = [ pkg-config ];
13+ inherit buildInputs;
14+ nativeBuildInputs = [ pkg-config makeWrapper ];
1815
19− subPackages = [ "languages/${language}" ];
16+ subPackages = [ "languages/${language}" ];
2017
21− vendorSha256 = null;
18+ vendorSha256 = "1nrycpyjmmhs8cl6bmrajfwczxsv8z20y7a9k7js8p7z60fz7pya";
2219
23− preBuild = ''
24− ${bash}/bin/bash ./scripts/inject.sh ${language}
25− go generate ./languages/${language}/main.go
26− '';
20+ # This prebiuild hook will setup the compiler flags on demand based on the package
21+ # If a language requires this, it MUST expost a ${pkgName}.pc file in its `lib/pkg-config`
22+ # for pkg-config to detect it. Otherwise, we can't find the required flags.
23+ preBuild = ''
24+ export CGO_LDFLAGS_ALLOW="-Wl,--compress-debug-sections=zlib"
25+ ${if setFlags then ''
26+ export NIX_CFLAGS_COMPILE="$(pkg-config --cflags ${pkgName}) $NIX_CFLAGS_COMPILE"
27+ export NIX_LDFLAGS="$(pkg-config --libs-only-L ${pkgName}) $(pkg-config --libs-only-l ${pkgName}) $NIX_LDFLAGS"
28+ '' else
29+ ""}
2730
28− postInstall = ''
29− mv $out/bin/${language} $out/bin/prybar-${language}
30− '';
31+ ${bash}/bin/bash ./scripts/inject.sh ${language}
32+ go generate ./languages/${language}/main.go
33+
34+ if [[ -f "languages/${language}/compile" ]]; then
35+ patchShebangs languages/${language}/compile
36+ languages/${language}/compile;
37+ fi
38+ '';
39+
40+ # The test file expect the binary to be in the current directory rather than bin
41+ preCheck = ''
42+ cp $GOPATH/bin/${language} ./prybar-${language}
43+ '';
44+
45+ # Add all the dependencies to the check. Binaries should include the language interpreter/binaries
46+ # for testing the language.
47+ checkInputs = [ expect ] ++ buildInputs ++ binaries;
48+
49+ # Run the end-to-end tests for this specific language
50+ checkPhase = ''
51+ runHook preCheck
52+
53+ # Nix unsets HOME but some tests rely on it, let's set it to whatever tmp dir the check
54+ # is running in.
55+ export HOME=$(echo pwd)
56+
57+ # Currently the go tests won't work in nix because of something w/ nix's sandboxing.
58+
59+ DISABLE_GO_TESTS=1 "${bash}/bin/bash" "./run_tests_language" "${language}"
60+
61+ runHook postCheck
62+ '';
63+
64+ # Delete the test binary we copied in the preCheck
65+ postCheck = ''
66+ rm -f ./prybar-${language}
67+ '';
68+
69+ postInstall = ''
70+ mv $out/bin/${language} $out/bin/prybar-${language}
71+
72+ if [ -d "./prybar_assets/${language}" ]
73+ then
74+ mkdir -p "$out/prybar_assets/${language}"
75+ cp -R "./prybar_assets/${language}" "$out/prybar_assets/"
76+
77+ wrapProgram "$out/bin/prybar-${language}" \
78+ --set PRYBAR_ASSETS_DIR "$out/prybar_assets"
79+ fi
80+ '';
3181}
default.nix+10−36
@@ -1,40 +1,14 @@
1−{ callPackage, python3, python2, lua5_1, readline, clojure, tcl }:
2−let
3− buildPrybar = attrs: callPackage(import ./build-prybar.nix attrs) {};
4−in
5−{
6− # TODO: These don't quite work yet
7−
8− # Won't build
9− # prybar-R = buildPrybar { language = "R"; buildInputs = [ pkgs.R ]; };
10−
11− # Julia 1.1 doesn't seem to be on nix
12− # prybar-julia = buildPrybar { language = "julia"; buildInputs = [ julia_13 ]; };
13−
14− # Has problem reading from prybar_assets. Seems like a bug with the impl.
15− # prybar-nodejs = buildPrybar { language = "nodejs"; buildInputs = [ ]; };
16−
17− # Ruby 2.5 is deprecated!
18− # prybar-ruby = buildPrybar { language = "ruby"; buildInputs = [ ruby_2_5 ]; };
19−
20− # Untested, spidermonkey not supported on darwin. Feel free to test on linux.
21− # prybar-spidermonkey = buildPrybar { language = "spidermonkey"; buildInputs = [ spidermonkey ]; };
1+{ system ? builtins.currentSystem }:
222
23− prybar-python2 = buildPrybar { language = "python2"; buildInputs = [ python2 ]; };
24−
25− prybar-python3 = buildPrybar { language = "python3"; buildInputs = [ python3 ]; };
26−
27− prybar-lua = buildPrybar { language = "lua"; buildInputs = [ lua5_1 readline ]; };
28−
29− prybar-clojure = buildPrybar { language = "clojure"; buildInputs = [ clojure ]; };
30−
31− prybar-elisp = buildPrybar { language = "elisp"; };
32−
33− prybar-ocaml = buildPrybar { language = "ocaml"; };
3+let
344
35− prybar-scala = buildPrybar { language = "scala"; };
5+ # flake-compat makes Nix flakes compatible with the old Nix cli commands, like nix-build and nix-shell.
6+ default = (import (fetchTarball {
7+ url =
8+ "https://github.com/edolstra/flake-compat/archive/99f1c2157fba4bfe6211a321fd0ee43199025dbf.tar.gz";
9+ sha256 = "0x2jn3vrawwv9xp15674wjz9pixwjyj3j771izayl962zziivbx2";
10+ }) { src = ./.; }).defaultNix;
3611
37− prybar-sqlite = buildPrybar { language = "sqlite"; };
12+in
3813
39− prybar-tcl = buildPrybar { language = "tcl"; buildInputs = [ tcl ]; };
40−}
14+builtins.getAttr system default.packages
flake.locknew file+43
@@ -0,0 +1,43 @@
1+{
2+ "nodes": {
3+ "flake-utils": {
4+ "locked": {
5+ "lastModified": 1667395993,
6+ "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
7+ "owner": "numtide",
8+ "repo": "flake-utils",
9+ "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
10+ "type": "github"
11+ },
12+ "original": {
13+ "owner": "numtide",
14+ "repo": "flake-utils",
15+ "type": "github"
16+ }
17+ },
18+ "nixpkgs": {
19+ "locked": {
20+ "lastModified": 1670276674,
21+ "narHash": "sha256-FqZ7b2RpoHQ/jlG6JPcCNmG/DoUPCIvyaropUDFhF3Q=",
22+ "owner": "NixOS",
23+ "repo": "nixpkgs",
24+ "rev": "52e3e80afff4b16ccb7c52e9f0f5220552f03d04",
25+ "type": "github"
26+ },
27+ "original": {
28+ "owner": "nixos",
29+ "ref": "nixos-22.11",
30+ "repo": "nixpkgs",
31+ "type": "github"
32+ }
33+ },
34+ "root": {
35+ "inputs": {
36+ "flake-utils": "flake-utils",
37+ "nixpkgs": "nixpkgs"
38+ }
39+ }
40+ },
41+ "root": "root",
42+ "version": 7
43+}
flake.nixnew file+173
@@ -0,0 +1,173 @@
1+{
2+ description = "A universal interpreter front-end";
3+
4+ inputs = {
5+ nixpkgs.url = "github:nixos/nixpkgs/nixos-22.11";
6+ flake-utils.url = "github:numtide/flake-utils";
7+ };
8+
9+ outputs = { self, nixpkgs, flake-utils }:
10+ {
11+ overlays.default = final: prev: {
12+ prybar = prev.lib.recurseIntoAttrs {
13+ inherit (self.packages.${prev.system})
14+ prybar-R prybar-clojure prybar-elisp prybar-julia prybar-lua prybar-nodejs
15+ prybar-ocaml prybar-python2 prybar-python3 prybar-python310 prybar-ruby
16+ prybar-scala prybar-sqlite prybar-tcl;
17+ };
18+ };
19+ } //
20+ flake-utils.lib.eachDefaultSystem (system:
21+ let
22+ pkgs = nixpkgs.legacyPackages.${system};
23+
24+ rev = if self ? rev then
25+ "0.0.0-${builtins.substring 0 7 self.rev}"
26+ else
27+ "0.0.0-dirty";
28+
29+ buildPrybar = attrs:
30+ pkgs.callPackage (import ./build-prybar.nix attrs) { inherit rev; };
31+
32+ julia = import ./languages/julia/julia.nix { inherit pkgs; };
33+
34+ clojureWithCP =
35+ import ./languages/clojure/wrappedClojure.nix { inherit pkgs; };
36+
37+ python310Full = pkgs.python310.override {
38+ self = python310Full;
39+ pythonAttr = "python310Full";
40+ bluezSupport = true;
41+ x11Support = true;
42+ };
43+
44+ ocaml = pkgs.ocaml-ng.ocamlPackages_4_12.ocaml;
45+ opam = pkgs.opam;
46+ findlib = pkgs.ocaml-ng.ocamlPackages_4_12.findlib;
47+ topkg = pkgs.ocaml-ng.ocamlPackages_4_12.topkg;
48+ reason = pkgs.ocaml-ng.ocamlPackages_4_12.reason;
49+
50+ in {
51+ packages = {
52+ prybar-R = buildPrybar {
53+ language = "R";
54+ buildInputs = [ pkgs.R ];
55+ pkgName = "libR";
56+ setFlags = true;
57+ };
58+
59+ prybar-nodejs = buildPrybar {
60+ language = "nodejs";
61+ binaries = [ pkgs.nodejs-16_x ];
62+ };
63+
64+ prybar-python2 = buildPrybar {
65+ language = "python2";
66+ buildInputs = [ pkgs.python2 ];
67+ };
68+
69+ prybar-python3 = buildPrybar {
70+ language = "python3";
71+ buildInputs = [ pkgs.libxcrypt pkgs.python38Full ];
72+ };
73+
74+ prybar-python310 = buildPrybar {
75+ language = "python310";
76+ buildInputs = [ pkgs.libxcrypt python310Full ];
77+ };
78+
79+ prybar-lua = buildPrybar {
80+ language = "lua";
81+ buildInputs = [ pkgs.lua5_1 pkgs.readline ];
82+ };
83+
84+ prybar-clojure = buildPrybar {
85+ language = "clojure";
86+ buildInputs = [ clojureWithCP ];
87+ binaries = [ pkgs.jdk11_headless ];
88+ };
89+
90+ prybar-elisp = buildPrybar { language = "elisp"; };
91+
92+ prybar-ocaml = buildPrybar {
93+ language = "ocaml";
94+ # This has to be in the build inputs so it set-ups the library paths before the check phase
95+ # It will not be copied over to the final package.
96+ buildInputs = [
97+ opam
98+ ocaml
99+ findlib
100+ topkg
101+ reason
102+ ];
103+ };
104+
105+ prybar-scala = buildPrybar { language = "scala"; };
106+
107+ prybar-sqlite = buildPrybar {
108+ language = "sqlite";
109+ binaries = [ pkgs.sqlite ];
110+ };
111+
112+ prybar-tcl = buildPrybar {
113+ language = "tcl";
114+ buildInputs = [ pkgs.tcl ];
115+ };
116+ }
117+ # These packages have issues on macOS
118+ // nixpkgs.lib.optionalAttrs (!pkgs.stdenv.isDarwin) {
119+ prybar-julia = buildPrybar {
120+ language = "julia";
121+ buildInputs = [ julia ];
122+ setFlags = true;
123+ binaries = [ pkgs.zlib ];
124+ };
125+
126+ # The official Ruby packages is running ruby 2.7
127+ prybar-ruby = buildPrybar {
128+ language = "ruby";
129+ buildInputs = [ pkgs.ruby ];
130+ pkgName = "ruby-2.7";
131+ setFlags = true;
132+ };
133+
134+ };
135+
136+
137+ devShells.default = pkgs.mkShell {
138+ nativeBuildInputs = [
139+ pkgs.pkg-config
140+ ];
141+ buildInputs = [
142+ pkgs.libxcrypt
143+ pkgs.R
144+ pkgs.nodejs-16_x
145+ pkgs.python2
146+ pkgs.python38Full
147+ pkgs.python310Full
148+ pkgs.lua5_1
149+ pkgs.readline
150+ clojureWithCP
151+ pkgs.jdk11_headless
152+ opam
153+ ocaml
154+ findlib
155+ topkg
156+ reason
157+ julia
158+ pkgs.zlib
159+ pkgs.ruby
160+ pkgs.sqlite
161+ pkgs.tcl
162+ pkgs.expect
163+ ];
164+ shellHook = ''
165+ export CGO_LDFLAGS_ALLOW="-Wl,--compress-debug-sections=zlib"
166+ export DISABLE_GO_TESTS=1
167+ '';
168+ };
169+
170+
171+ });
172+}
173+
go.mod+2−1
@@ -6,5 +6,6 @@ require (
66 github.com/chzyer/logex v1.1.10 // indirect
77 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e
88 github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 // indirect
9− golang.org/x/sys v0.0.0-20210412220455-f1c623a9e750 // indirect
9+ github.com/creack/pty v1.1.17
10+ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1
1011)
go.sum+4−2
@@ -4,5 +4,7 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5O
44github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
55github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8=
66github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
7−golang.org/x/sys v0.0.0-20210412220455-f1c623a9e750 h1:ZBu6861dZq7xBnG1bn5SRU0vA8nx42at4+kP07FMTog=
8−golang.org/x/sys v0.0.0-20210412220455-f1c623a9e750/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
7+github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI=
8+github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
9+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4=
10+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
languages/R/main.go+1−1
@@ -6,7 +6,7 @@ package main
66#cgo pkg-config: libR
77#include <stdlib.h>
88#include <Rembedded.h>
9−#include <RVersion.h>
9+#include <Rversion.h>
1010#include <Rinternals.h>
1111#include <R_ext/Parse.h>
1212#include <Rembedded.h>
languages/clojure/deps.nixnew file+65
@@ -0,0 +1,65 @@
1+# generated by clj2nix-1.0.6
2+{ pkgs ? import <nixpkgs> {} }:
3+
4+let repos = [
5+ "http://jcenter.bintray.com"
6+ "https://repo1.maven.org/maven2/"
7+ "https://repo.clojars.org/" ];
8+
9+ in rec {
10+ makePaths = {extraClasspaths ? null}:
11+ (pkgs.lib.concatMap
12+ (dep:
13+ builtins.map
14+ (path:
15+ if builtins.isString path then
16+ path
17+ else if builtins.hasAttr "jar" path then
18+ path.jar
19+ else if builtins.hasAttr "outPath" path then
20+ path.outPath
21+ else
22+ path
23+ )
24+ dep.paths)
25+ packages)
26+ ++ (if extraClasspaths != null then [ extraClasspaths ] else []);
27+ makeClasspaths = {extraClasspaths ? null}: builtins.concatStringsSep ":" (makePaths {inherit extraClasspaths;});
28+ packageSources = builtins.map (dep: dep.src) packages;
29+
30+ packages = [
31+ rec {
32+ name = "clojure/org.clojure";
33+ src = pkgs.fetchMavenArtifact {
34+ inherit repos;
35+ artifactId = "clojure";
36+ groupId = "org.clojure";
37+ sha512 = "4bb567b9262d998f554f44e677a8628b96e919bc8bcfb28ab2e80d9810f8adf8f13a8898142425d92f3515e58c57b16782cff12ba1b5ffb38b7d0ccd13d99bbc";
38+ version = "1.10.3";
39+ };
40+ paths = [ src ];
41+ }
42+ rec {
43+ name = "spec.alpha/org.clojure";
44+ src = pkgs.fetchMavenArtifact {
45+ inherit repos;
46+ artifactId = "spec.alpha";
47+ groupId = "org.clojure";
48+ sha512 = "0740dc3a755530f52e32d27139a9ebfd7cbdb8d4351c820de8d510fe2d52a98acd6e4dfc004566ede3d426e52ec98accdca1156965218f269e60dd1cd4242a73";
49+ version = "0.2.194";
50+ };
51+ paths = [ src ];
52+ }
53+ rec {
54+ name = "core.specs.alpha/org.clojure";
55+ src = pkgs.fetchMavenArtifact {
56+ inherit repos;
57+ artifactId = "core.specs.alpha";
58+ groupId = "org.clojure";
59+ sha512 = "c1d2a740963896d97cd6b9a8c3dcdcc84459ea66b44170c05b8923e5fbb731b4b292b217ed3447bbc9e744c9a496552f77a6c38aea232e5e69f8faa627dea4b5";
60+ version = "0.2.56";
61+ };
62+ paths = [ src ];
63+ }
64+ ];
65+}
languages/clojure/main.go+3−3
@@ -1,6 +1,6 @@
11package main
22
3−//go:generate ../../scripts/gofiles.sh generated_files.go
3+//go:generate bash ../../scripts/gofiles.sh generated_files.go
44
55import (
66 "fmt"
@@ -35,14 +35,14 @@ func findHelper(path string) string {
3535}
3636
3737func Execute(config *utils.Config) {
38− path, err := exec.LookPath("clj")
38+ path, err := exec.LookPath("clojure")
3939
4040 if err != nil {
4141 panic(err)
4242 }
4343
4444 env := os.Environ()
45− args := []string{"clj"}
45+ args := []string{"clojure"}
4646
4747 hasOption := config.Code != "" || config.Exp != "" ||
4848 config.Interactive || config.OurInteractive
languages/clojure/wrappedClojure.nixnew file+18
@@ -0,0 +1,18 @@
1+{ pkgs }:
2+
3+let
4+ cljdeps = import ./deps.nix { inherit pkgs; };
5+ classp = cljdeps.makeClasspaths {};
6+in pkgs.stdenv.mkDerivation {
7+ name = "wrapped-clojure-with-deps";
8+
9+ src = ./.;
10+ nativeBuildInputs = [ pkgs.makeWrapper ];
11+ buildInputs = [ pkgs.clojure ];
12+
13+ installPhase = ''
14+ mkdir -p $out/bin
15+
16+ makeWrapper ${pkgs.clojure}/bin/clojure $out/bin/clojure --add-flags "-Scp ${builtins.toString classp}"
17+ '';
18+}
languages/elisp/main.go+6−1
@@ -25,7 +25,12 @@ func Execute(config *utils.Config) {
2525 }
2626
2727 runDir := filepath.Dir(execPath)
28− replPath := filepath.Join(runDir, "prybar_assets", "elisp", "repl.el")
28+
29+ prybarAssetDir := os.Getenv("PRYBAR_ASSETS_DIR")
30+ if prybarAssetDir == "" {
31+ prybarAssetDir = filepath.Join(runDir, "prybar_assets")
32+ }
33+ replPath := filepath.Join(prybarAssetDir, "elisp", "repl.el")
2934
3035 args = append(
3136 args, "emacs", "-nw", "-Q", "--load", replPath,
languages/julia/julia.nixnew file+26
@@ -0,0 +1,26 @@
1+{ pkgs }:
2+
3+pkgs.stdenv.mkDerivation rec {
4+ pname = "julia-sources";
5+ version = "1.5.4";
6+
7+ src = {
8+ x86_64-linux = pkgs.fetchurl {
9+ url = "https://julialang-s3.julialang.org/bin/linux/x64/${pkgs.lib.versions.majorMinor version}/julia-${version}-linux-x86_64.tar.gz";
10+ sha256 = "1icb3rpn2qs6c3rqfb5rzby1pj6h90d9fdi62nnyi4x5s58w7pl0";
11+ };
12+ }.${pkgs.stdenv.hostPlatform.system} or (throw "Unsupported system: ${pkgs.stdenv.hostPlatform.system}");
13+
14+ installPhase = ''
15+ cp -r . $out
16+
17+ mkdir $out/lib/pkgconfig
18+ cat > $out/lib/pkgconfig/julia.pc <<- EOM
19+ Name: julia
20+ Cflags: -I$out/include/julia
21+ Version: 1.5.4
22+ Description: it's julia
23+ Libs: -L$out\/lib -ljulia
24+ EOM
25+ '';
26+}
languages/julia/main.go+5−4
@@ -3,7 +3,7 @@ package main
33// USING_CGO
44
55/*
6−#cgo CFLAGS: -I/usr/include/julia
6+#cgo pkg-config: julia
77#cgo LDFLAGS: -ljulia
88#include "pry.h"
99*/
@@ -37,10 +37,11 @@ func (p Julia) Eval(code string) {
3737 C.eval(cstr)
3838}
3939
40−func (p Julia) EvalFile(file string, args []string) {
40+func (p Julia) EvalFile(file string, args []string) int {
4141 cstr := C.CString(file)
42− C.eval_file(cstr)
43− C.free(unsafe.Pointer(cstr))
42+ defer C.free(unsafe.Pointer(cstr))
43+
44+ return int(C.eval_file(cstr))
4445}
4546
4647func (p Julia) REPL() {
languages/julia/pry.h+1−1
@@ -107,7 +107,7 @@ void cleanup() { jl_atexit_hook(0); }
107107
108108void eval(const char *str) { jl_eval_string(str); }
109109
110−void eval_file(const char *path) { exec_program(path); }
110+int eval_file(const char *path) { return exec_program(path); }
111111
112112void run_repl() { fancy_repl(); }
113113
languages/lua/lua.c+2−5
@@ -93,12 +93,9 @@ static void print_version(void) {
9393 l_message(NULL, LUA_RELEASE " " LUA_COPYRIGHT);
9494}
9595
96−static int getargs(lua_State *L, char **argv, int n) {
96+static int getargs(lua_State *L, char **argv, int n, int argc) {
9797 int narg;
9898 int i;
99− int argc = 0;
100− while (argv[argc])
101− argc++; /* count total number of arguments */
10299 narg = argc - (n + 1); /* number of arguments to the script */
103100 luaL_checkstack(L, narg + 3, "too many arguments to script");
104101 for (i = n + 1; i < argc; i++)
@@ -230,7 +227,7 @@ void dotty(lua_State *L) {
230227int handle_script(lua_State *L, char **argv, int n) {
231228 int status;
232229 const char *fname;
233− int narg = getargs(L, argv, n); /* collect arguments */
230+ int narg = getargs(L, argv, n, 1); /* collect arguments */
234231 lua_setglobal(L, "arg");
235232 fname = argv[n];
236233 if (strcmp(fname, "-") == 0 && strcmp(argv[n - 1], "--") != 0)
languages/lua/lua_test.gonew file+15
@@ -0,0 +1,15 @@
1+package main
2+
3+import (
4+ "testing"
5+)
6+
7+// Mostly a debugging aid, not sure if it'll actually fail if something goes wrong
8+func TestLuaStuff(t *testing.T) {
9+ var lua Lua
10+ lua.Open()
11+ lua.Version()
12+ for i := 0; i < 100; i++ {
13+ lua.EvalFile("testdata/test.lua", make([]string, 0))
14+ }
15+}
languages/lua/main.go+2−2
@@ -49,11 +49,11 @@ func (p Lua) Eval(code string) {
4949 C.pry_eval(ccode)
5050}
5151
52−func (p Lua) EvalFile(file string) {
52+func (p Lua) EvalFile(file string, args []string) int {
5353 cfile := C.CString(file)
5454 defer C.free(unsafe.Pointer(cfile))
5555
56− C.pry_eval_file(cfile)
56+ return int(C.pry_eval_file(cfile))
5757}
5858
5959func (p Lua) REPL() {
languages/lua/pry.c+1−1
@@ -13,4 +13,4 @@ void pry_eval(const char *code) { dostring(pry_L, code, "<eval>"); }
1313
1414void pry_do_repl(void) { dotty(pry_L); }
1515
16−void pry_eval_file(char *file) { handle_script(pry_L, &file, 0); }
16+int pry_eval_file(char *file) { return handle_script(pry_L, &file, 0); }
languages/lua/pry.h+1−1
@@ -4,7 +4,7 @@ extern lua_State *pry_L;
44
55const char *pry_get_version(void);
66void pry_eval(const char *code);
7−void pry_eval_file(char *file);
7+int pry_eval_file(char *file);
88void pry_do_repl(void);
99
1010// from the lua repl lib (lua.c)
languages/lua/testdata/test.luanew file+1
@@ -0,0 +1 @@
1+print("Hello, World!")
languages/nodejs/main.go+1−1
@@ -1,6 +1,6 @@
11package main
22
3−//go:generate ../../scripts/gofiles.sh generated_files.go
3+//go:generate bash ../../scripts/gofiles.sh generated_files.go
44
55import (
66 "io/ioutil"
languages/nodejs/repl.js+127−84
@@ -1,24 +1,83 @@
1−const util = require("util");
2−const repl = require("repl");
3−const path = require("path");
4−const fs = require("fs");
5−const vm = require("vm");
6−const rl = require(path.join(
7− process.cwd(),
8− "prybar_assets",
9− "nodejs",
10− "readline-sync.js"
1+const repl = require('repl');
2+const path = require('path');
3+const assets_dir =
4+ process.env.PRYBAR_ASSETS_DIR || path.join(process.cwd(), 'prybar_assets');
5+/**
6+ * @type {import("../../prybar_assets/nodejs/input-sync")}
7+ */
8+const rl = require(path.join(assets_dir, 'nodejs', 'input-sync.js'));
9+/**
10+ * @type {import("../../prybar_assets/nodejs/module-context-hook")}
11+ */
12+const { runCode, runModule, getRepl } = require(path.join(
13+ assets_dir,
14+ 'nodejs',
15+ 'module-context-hook.js'
1116));
12−const Module = require("module");
17+
18+// imports to builtin modules don't get added to require.cache.
19+const prybarFilenames = Object.keys(require.cache);
20+
21+for (const filename of prybarFilenames) {
22+ delete require.cache[filename];
23+}
24+
25+Error.prepareStackTrace = function prepareStackTrace(error, callSites) {
26+ // this logic is sourced from the internal repl error handler
27+
28+ // Search from the bottom of the call stack to
29+ // find the first frame with a null function name
30+ callSites.reverse();
31+
32+ const idx = callSites.findIndex((frame) => frame.getFunctionName() === null);
33+ const domainIndex = callSites.findIndex(
34+ (site) => site.getFileName() === 'domain.js'
35+ );
36+
37+ if (domainIndex !== -1 && domainIndex < idx) {
38+ // If found, get rid of it and everything below it
39+ callSites = callSites.slice(idx);
40+ }
41+
42+ callSites.reverse();
43+
44+ const lowestPrybarFileIndex = callSites.findIndex((site) =>
45+ prybarFilenames.includes(site.getFileName())
46+ );
47+
48+ callSites = callSites.slice(0, lowestPrybarFileIndex);
49+
50+ if (!(error instanceof Error)) {
51+ const tmp = new Error();
52+
53+ tmp.message = error.message;
54+ tmp.name = error.name;
55+ error = tmp;
56+ }
57+
58+ return callSites.length > 0
59+ ? `${error.toString()}\n at ${callSites.join('\n at ')}`
60+ : error.toString();
61+};
62+
63+const isInterractive = Boolean(process.env.PRYBAR_INTERACTIVE);
1364
1465let r;
1566if (!process.env.PRYBAR_QUIET) {
16− console.log("Node " + process.version + " on " + process.platform);
67+ console.log('Node ' + process.version + ' on ' + process.platform);
1768}
1869
19−// Red errors.
70+// Red errors (if stderr is a TTY)
2071function logError(msg) {
21− process.stdout.write("\u001b[0m\u001b[31m" + msg + "\u001b[0m");
72+ if (process.stderr.isTTY) {
73+ process.stderr.write(`\u001b[0m\u001b[31m${msg}\u001b[0m`);
74+ } else {
75+ process.stderr.write(msg);
76+ }
77+
78+ if (!msg.endsWith('\n')) {
79+ process.stderr.write('\n');
80+ }
2281}
2382
2483// The nodejs repl operates in raw mode and does some funky stuff to
@@ -27,20 +86,17 @@ function pauseRepl() {
2786 if (!r) return;
2887
2988 r.pause();
30− process.stdin.setRawMode(false);
3189}
3290
3391// Forces raw mode and resumes the repl.
3492function resumeRepl() {
3593 if (!r) return;
36−
37− process.stdin.setRawMode(true);
3894 r.resume();
3995}
4096
4197// Clear the line if it has anything on it.
4298function clearLine() {
43− if (r && r.line) r.clearLine();
99+ if (process.stdout.isTTY && r && r.line) r.clearLine();
44100}
45101
46102// Adapted from the internal node repl code just a lot simpler and adds
@@ -50,17 +106,17 @@ function handleError(e) {
50106 r.lastError = e;
51107 }
52108
53− if (e && typeof e === "object" && e.stack && e.name) {
54− if (e.name === "SyntaxError") {
109+ if (e && typeof e === 'object' && e.stack && e.name) {
110+ if (e.name === 'SyntaxError') {
55111 e.stack = e.stack
56− .replace(/^repl:\d+\r?\n/, "")
57− .replace(/^\s+at\s.*\n?/gm, "");
112+ .replace(/^repl:\d+\r?\n/, '')
113+ .replace(/^\s+at\s.*\n?/gm, '');
58114 }
59115
60116 logError(e.stack);
61117 } else {
62118 // For some reason needs a newline to flush.
63− logError("Thrown: " + r.writer(e) + "\n");
119+ logError('Thrown: ' + r.writer(e));
64120 }
65121
66122 if (r) {
@@ -70,16 +126,21 @@ function handleError(e) {
70126 }
71127}
72128
73−function start(context) {
74− r = repl.start({
75− prompt: process.env.PRYBAR_PS1,
76− useGlobal: true,
77− });
129+function start() {
130+ /** @type { repl.REPLServer} */
131+ r =
132+ getRepl() ||
133+ repl.start({
134+ useGlobal: true,
135+ prompt: process.env.PRYBAR_PS1,
136+ });
78137
79138 // remove the internal error and ours for red etc.
80− r._domain.removeListener("error", r._domain.listeners("error")[0]);
81− r._domain.on("error", handleError);
82− process.on("uncaughtException", handleError);
139+ r._domain.removeListener('error', r._domain.listeners('error')[0]);
140+
141+ r._domain.on('error', handleError);
142+ process.on('uncaughtException', handleError);
143+ return false;
83144}
84145
85146global.alert = console.log;
@@ -87,9 +148,7 @@ global.prompt = (p) => {
87148 pauseRepl();
88149 clearLine();
89150
90− let ret = rl.question(`${p}> `, {
91− hideEchoBack: false,
92− });
151+ let ret = rl.question(`${p}> `);
93152
94153 resumeRepl();
95154
@@ -113,66 +172,50 @@ global.confirm = (q) => {
113172};
114173
115174if (process.env.PRYBAR_CODE) {
116− vm.runInThisContext(process.env.PRYBAR_CODE);
117− if (process.env.PRYBAR_INTERACTIVE) {
118− start();
175+ try {
176+ runCode(process.env.PRYBAR_CODE, isInterractive);
177+ } catch (err) {
178+ handleError(err);
179+
180+ if (!isInterractive) {
181+ process.exit(1);
182+ }
183+ }
184+
185+ if (isInterractive) {
186+ process.once('beforeExit', start);
119187 }
120188} else if (process.env.PRYBAR_EXP) {
121− console.log(vm.runInThisContext(process.env.PRYBAR_EXP));
122− if (process.env.PRYBAR_INTERACTIVE) {
123− start();
189+ try {
190+ console.log(runCode(process.env.PRYBAR_EXP, false));
191+ } catch (err) {
192+ handleError(err);
193+
194+ if (!isInterractive) {
195+ process.exit(1);
196+ }
124197 }
125198} else if (process.env.PRYBAR_FILE) {
126− const mainPath = path.resolve(process.env.PRYBAR_FILE);
127− const main = fs.readFileSync(mainPath, "utf-8");
128− const module = new Module(mainPath, null);
129−
130− module.id = ".";
131− module.filename = mainPath;
132− module.paths = Module._nodeModulePaths(path.dirname(mainPath));
133−
134− process.mainModule = module;
135−
136− global.module = module;
137− global.require = module.require.bind(module);
138− global.__dirname = path.dirname(mainPath);
139− global.__filename = mainPath;
140−
141− console.log(
142− "\u001b[0m\u001b[90mHint: hit control+c anytime to enter REPL.\u001b[0m"
143− );
144−
145− let script;
146199 try {
147− script = vm.createScript(main, {
148− filename: mainPath,
149− displayErrors: false,
150− });
151− } catch (e) {
152− handleError(e);
153− }
200+ runModule(process.env.PRYBAR_FILE, isInterractive);
201+ } catch (err) {
202+ handleError(err);
154203
155− if (script) {
156− let res;
157− try {
158− res = script.runInThisContext({
159− displayErrors: false,
160− });
161− } catch (e) {
162− handleError(e);
204+ if (!isInterractive) {
205+ process.exit(1);
163206 }
207+ }
164208
165− module.loaded = true;
166−
167− if (typeof res !== "undefined") {
168− console.log(util.inspect(res, { colors: true }));
209+ if (isInterractive) {
210+ if (process.stdout.isTTY && process.stdin.isTTY) {
211+ console.log(
212+ '\u001b[0m\u001b[90mHint: hit control+c anytime to enter REPL.\u001b[0m'
213+ );
169214 }
170− }
171215
172− if (process.env.PRYBAR_INTERACTIVE) {
173− process.once("SIGINT", () => start());
174− process.once("beforeExit", () => start());
216+ process.once('beforeExit', start);
217+ process.once('SIGINT', start);
175218 }
176−} else if (process.env.PRYBAR_INTERACTIVE) {
219+} else if (isInterractive) {
177220 start();
178221}
languages/ocaml/main.go+11−2
@@ -1,13 +1,14 @@
11// OCaml main
22package main
33
4−//go:generate ../../scripts/gofiles.sh generated_files.go
4+//go:generate bash ../../scripts/gofiles.sh generated_files.go
55
66import (
77 "github.com/replit/prybar/utils"
88 "io/ioutil"
99 "os"
1010 "os/exec"
11+ "strings"
1112 "syscall"
1213)
1314
@@ -40,8 +41,16 @@ func Execute(config *utils.Config) {
4041 panic(err)
4142 }
4243
44+ args := []string{"ocaml"}
45+ // Fix for getting the various libs added to prybar when running through nix
46+ if value, ok := os.LookupEnv("OCAMLPATH"); ok {
47+ for _, val := range strings.Split(value, ":") {
48+ args = append(args, "-I", val)
49+ }
50+ }
51+
4352 env := os.Environ()
44− args := []string{"ocaml", findHelper("repl"), "-s", "ml"}
53+ args = append(args, findHelper("repl"), "-s", "ml")
4554
4655 if config.Quiet {
4756 args = append(args, "-q")
languages/python2/main.go+9−2
@@ -38,7 +38,7 @@ func (p Python) EvalExpression(code string) string {
3838 return C.GoString(C.pry_eval(ccode, C.Py_eval_input))
3939}
4040
41−func (p Python) EvalFile(file string, args []string) {
41+func (p Python) EvalFile(file string, args []string) int {
4242 handle := C.stdin
4343 cfile := C.CString(file)
4444 defer C.free(unsafe.Pointer(cfile))
@@ -53,7 +53,14 @@ func (p Python) EvalFile(file string, args []string) {
5353
5454 argv := C.CString(file + "\x00" + strings.Join(args, "\x00"))
5555 defer C.free(unsafe.Pointer(argv))
56− C.pry_eval_file(handle, cfile, C.int(len(args)+1), argv)
56+ status := C.pry_eval_file(handle, cfile, C.int(len(args)+1), argv)
57+
58+ // if status is non-zero an error occured.
59+ if status != 0 {
60+ return 1
61+ }
62+
63+ return 0
5764}
5865
5966func (p Python) REPLLikeEval(code string) {
languages/python2/pry_python2.c+2−2
@@ -1,6 +1,6 @@
11#include "pry_python2.h"
22
3−void pry_eval_file(FILE *f, const char *file, int argn, const char *argv)
3+int pry_eval_file(FILE *f, const char *file, int argn, const char *argv)
44{
55 const char *xargv[argn + 1];
66 const char *ptr = argv;
@@ -11,7 +11,7 @@ void pry_eval_file(FILE *f, const char *file, int argn, const char *argv)
1111 }
1212 xargv[argn] = NULL;
1313 PySys_SetArgvEx(argn, xargv, 1);
14− PyRun_AnyFile(f, file);
14+ return PyRun_AnyFile(f, file);
1515}
1616
1717const char *pry_eval(const char *code, int start)
languages/python2/pry_python2.h+1−1
@@ -1,5 +1,5 @@
11#include <Python.h>
22
3−void pry_eval_file(FILE *f, const char *file, int argn, const char *argv);
3+int pry_eval_file(FILE *f, const char *file, int argn, const char *argv);
44const char *pry_eval(const char *code, int start);
55void pry_set_prompts(const char *ps1, const char *ps2);
languages/python3/main.go+14−3
@@ -73,7 +73,7 @@ func (p Python) EvalExpression(code string) string {
7373 return C.GoString(C.pry_eval(ccode, C.Py_eval_input))
7474}
7575
76−func (p Python) EvalFile(file string, args []string) {
76+func (p Python) EvalFile(file string, args []string) int {
7777 handle := C.stdin
7878 cfile := C.CString(file)
7979 defer C.free(unsafe.Pointer(cfile))
@@ -88,7 +88,15 @@ func (p Python) EvalFile(file string, args []string) {
8888
8989 argv := C.CString(file + "\x00" + strings.Join(args, "\x00"))
9090 defer C.free(unsafe.Pointer(argv))
91− C.pry_eval_file(handle, cfile, C.int(len(args)+1), argv)
91+
92+ status := (C.pry_eval_file(handle, cfile, C.int(len(args)+1), argv))
93+
94+ // if status is non-zero an error occured.
95+ if status != 0 {
96+ return 1
97+ }
98+
99+ return 0
92100}
93101
94102func (p Python) REPLLikeEval(code string) {
@@ -104,7 +112,10 @@ func (p Python) loadModule(mod string) {
104112}
105113
106114func (p Python) REPL() {
107− C.pymain_run_interactive_hook()
115+ var exitCode C.int
116+ if C.pymain_run_interactive_hook(&exitCode) != 0 {
117+ os.Exit(int(exitCode))
118+ }
108119
109120 fn := C.CString("<stdin>")
110121 defer C.free(unsafe.Pointer(fn))
languages/python3/pry_python3.c+26−11
@@ -1,6 +1,6 @@
11#include "pry_python3.h"
22
3−void pry_eval_file(FILE *f, const char *file, int argn, const char *argv)
3+int pry_eval_file(FILE *f, const char *file, int argn, const char *argv)
44{
55 wchar_t *xargv[argn + 1];
66 const char *ptr = argv;
@@ -11,8 +11,8 @@ void pry_eval_file(FILE *f, const char *file, int argn, const char *argv)
1111 }
1212 xargv[argn] = NULL;
1313 PySys_SetArgvEx(argn, xargv, 1);
14− PyRun_AnyFile(f, file);
1514
15+ return PyRun_AnyFile(f, file);
1616}
1717
1818const char *pry_eval(const char *code, int start)
@@ -71,34 +71,49 @@ void pry_set_prompts(const char *ps1, const char *ps2)
7171}
7272
7373//From python3 sourcecode
74−void pymain_run_interactive_hook(void)
74+int
75+pymain_run_interactive_hook(int *exitcode)
7576{
7677 PyObject *sys, *hook, *result;
7778 sys = PyImport_ImportModule("sys");
78− if (sys == NULL)
79− {
79+ if (sys == NULL) {
8080 goto error;
8181 }
8282
8383 hook = PyObject_GetAttrString(sys, "__interactivehook__");
8484 Py_DECREF(sys);
85− if (hook == NULL)
86− {
85+ if (hook == NULL) {
8786 PyErr_Clear();
88− return;
87+ return 0;
88+ }
89+
90+ if (PySys_Audit("cpython.run_interactivehook", "O", hook) < 0) {
91+ goto error;
8992 }
9093
9194 result = _PyObject_CallNoArg(hook);
9295 Py_DECREF(hook);
93− if (result == NULL)
94− {
96+ if (result == NULL) {
9597 goto error;
9698 }
9799 Py_DECREF(result);
98100
99− return;
101+ return 0;
100102
101103error:
102104 PySys_WriteStderr("Failed calling sys.__interactivehook__\n");
105+ return pymain_err_print(exitcode);
106+}
107+
108+int
109+pymain_err_print(int *exitcode_p)
110+{
111+ int exitcode;
112+ if (_Py_HandleSystemExit(&exitcode)) {
113+ *exitcode_p = exitcode;
114+ return 1;
115+ }
116+
103117 PyErr_Print();
118+ return 0;
104119}
languages/python3/pry_python3.h+4−2
@@ -1,6 +1,8 @@
11#include <Python.h>
22
3−void pry_eval_file(FILE *f, const char *file, int argn, const char *argv);
3+int pry_eval_file(FILE *f, const char *file, int argn, const char *argv);
44const char *pry_eval(const char *code, int start);
55void pry_set_prompts(const char *ps1, const char *ps2);
6−void pymain_run_interactive_hook(void);
6+int pymain_run_interactive_hook(int *exitcode);
7+int pymain_err_print(int *exitcode_p);
8+PyAPI_FUNC(int) _Py_HandleSystemExit(int *exitcode_p);
languages/python310/.gitignorenew file+3
@@ -0,0 +1,3 @@
1+main.go
2+pry_python3.c
3+pry_python3.h
languages/python310/compilenew file+9
@@ -0,0 +1,9 @@
1+#!/usr/bin/env bash
2+
3+COMPILE_DIR="$(dirname "$0")"
4+
5+cp $COMPILE_DIR/../python3/* $COMPILE_DIR/
6+
7+sed -i "s/python-3.8-embed/python-3.10-embed/g" $COMPILE_DIR/main.go
8+
9+bash $COMPILE_DIR/../../scripts/inject.sh python310
languages/ruby/main.go+3−3
@@ -3,7 +3,7 @@ package main
33// USING_CGO
44
55/*
6−#cgo pkg-config: ruby-2.5
6+#cgo pkg-config: ruby-2.7
77#include "pry_ruby.h"
88*/
99import "C"
@@ -34,10 +34,10 @@ func (p Ruby) EvalExpression(code string) string {
3434 return C.GoString(res)
3535}
3636
37−func (p Ruby) EvalFile(file string, args []string) {
37+func (p Ruby) EvalFile(file string, args []string) int {
3838 cfile := C.CString(file)
3939 defer C.free(unsafe.Pointer(cfile))
40− C.pry_eval_file(cfile)
40+ return int(C.pry_eval_file(cfile))
4141}
4242
4343func (p Ruby) REPL() {
languages/ruby/pry_ruby.c+4−2
@@ -36,14 +36,16 @@ char *pry_eval(const char *code)
3636 }
3737}
3838
39−void pry_eval_file(const char *file)
39+int pry_eval_file(const char *file)
4040{
4141 char *options[] = {"ruby", file};
4242 void *node = ruby_options(2, options);
4343
44− int state;
44+ int state = 0;
4545 if (ruby_executable_node(node, &state))
4646 {
4747 state = ruby_exec_node(node);
4848 }
49+
50+ return state;
4951}
languages/ruby/pry_ruby.h+1−1
@@ -4,5 +4,5 @@
44void pry_open();
55const char *pry_ruby_version();
66char *pry_eval(const char *code);
7−void pry_eval_file(const char *file);
7+int pry_eval_file(const char *file);
88
languages/spidermonkey/main.godeleted−90
@@ -1,90 +0,0 @@
1−package main
2−
3−// USING_CGO
4−
5−/*
6−#cgo pkg-config: mozjs185
7−#include "jsapi.h"
8−
9−static JSClass global_class = {
10− "global", JSCLASS_GLOBAL_FLAGS,
11− JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
12− JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub,
13− JSCLASS_NO_OPTIONAL_MEMBERS
14−};
15−
16−JSRuntime *rt;
17−JSContext *cx;
18−JSObject *global;
19−
20−int pry_open() {
21−
22−
23− rt = JS_NewRuntime(8 * 1024 * 1024);
24− if (rt == NULL) return 1;
25−
26− cx = JS_NewContext(rt, 8192);
27− if (cx == NULL) return 1;
28−
29− JS_SetOptions(cx, JSOPTION_VAROBJFIX | JSOPTION_JIT | JSOPTION_METHODJIT);
30− JS_SetVersion(cx, JSVERSION_LATEST);
31− //JS_SetErrorReporter(cx, reportError);
32−
33−
34− global = JS_NewCompartmentAndGlobalObject(cx, &global_class, NULL);
35− if (global == NULL) return 1;
36−
37−
38− if (!JS_InitStandardClasses(cx, global)) return 1;
39− return 0;
40−}
41−
42−int pry_eval(const char* script) {
43− jsval rval;
44− JSString *str;
45− JSBool ok;
46− const char *filename = "noname";
47− uintN lineno = 0;
48−
49− ok = JS_EvaluateScript(cx, global, script, strlen(script), filename, lineno, &rval);
50− if (rval == JS_FALSE)
51− return 1;
52−
53− str = JS_ValueToString(cx, rval);
54− printf("%s\n", JS_EncodeString(cx, str));
55−}
56−
57−void pry_close() {
58− JS_DestroyContext(cx);
59− JS_DestroyRuntime(rt);
60− JS_ShutDown();
61−}
62−
63−*/
64−import "C"
65−
66−import (
67− "unsafe"
68−)
69−
70−type SpiderMonkey struct{}
71−
72−func (p SpiderMonkey) Open() {
73− C.pry_open()
74−}
75−
76−func (p SpiderMonkey) Version() string {
77− return C.GoString(C.JS_GetImplementationVersion())
78−}
79−
80−func (p SpiderMonkey) Eval(code string) {
81− ccode := C.CString(code)
82− defer C.free(unsafe.Pointer(ccode))
83− C.pry_eval(ccode)
84−}
85−
86−func (p SpiderMonkey) Close() {
87− C.pry_close()
88−}
89−
90−var Instance = SpiderMonkey{}
languages/sqlite/main.go+6−1
@@ -42,7 +42,12 @@ func preloadQuietLib(env []string) []string {
4242 panic(err)
4343 }
4444 runDir := filepath.Dir(execPath)
45− libPath := filepath.Join(runDir, "prybar_assets", "sqlite", "patch.so")
45+
46+ prybarAssetDir := os.Getenv("PRYBAR_ASSETS_DIR")
47+ if prybarAssetDir == "" {
48+ prybarAssetDir = filepath.Join(runDir, "prybar_assets")
49+ }
50+ libPath := filepath.Join(prybarAssetDir, "sqlite", "patch.so")
4651 return append(env, []string{"LD_PRELOAD=" + libPath, "PRYBAR_QUIET=1"}...)
4752}
4853
languages/tcl/main.go+5−1
@@ -63,7 +63,7 @@ func (p *Tcl) eval(code string) string {
6363 return ""
6464}
6565
66−func (p *Tcl) EvalFile(file string, args []string) {
66+func (p *Tcl) EvalFile(file string, args []string) int {
6767 cfile := C.CString(file)
6868 defer C.free(unsafe.Pointer(cfile))
6969
@@ -72,7 +72,10 @@ func (p *Tcl) EvalFile(file string, args []string) {
7272 if status != C.TCL_OK {
7373 errstr := C.GoString(C.Tcl_GetStringResult(p.interp))
7474 fmt.Fprintf(os.Stderr, "error: %s\n", errstr)
75+ return int(status)
7576 }
77+
78+ return 0
7679}
7780
7881func (p *Tcl) Eval(code string) {
@@ -86,4 +89,5 @@ func (p *Tcl) EvalExpression(code string) string {
8689func (p *Tcl) Close() {
8790 C.Tcl_Finalize()
8891}
92+
8993var Instance = &Tcl{}
prybar_assets/nodejs/input-sync.jsnew file+290
@@ -0,0 +1,290 @@
1+const { readSync, writeSync, openSync } = require("fs");
2+const { isatty } = require("tty");
3+const buf = Buffer.alloc(1);
4+const isTTY = isatty(process.stdin.fd);
5+
6+/**
7+ * The escape (excluding \x1b) to move the cursur right one.
8+ *
9+ * This is what the right arrow key translates to in raw mode.
10+ */
11+const cursorRight = "[C";
12+/**
13+ * The escape (excluding \x1b) to move the cursur left one.
14+ *
15+ * This is what the left arrow key translates to in raw mode.
16+ */
17+const cursorLeft = "[D";
18+
19+/**
20+ * The ASCII character sent when the tty is in raw mode and backspace is pressed.
21+ */
22+const del = "\x7f";
23+
24+/**
25+ * The ASCII characcter sent when the tty is in raw mode and Ctrl+C is pressed.
26+ */
27+const endOfText = "\x03";
28+/**
29+ * The ASCII character sent when the tty is in raw mode and Ctrl+D is pressed.
30+ */
31+const endOfTransmission = "\x04";
32+
33+/**
34+ * Reads a single byte from stdin to buf.
35+ * @return {boolean} Whether a byte was read or not (false on EOF)
36+ */
37+function readByteSync() {
38+ const read = readSync(stdinFd, buf);
39+
40+ return read > 0;
41+}
42+
43+/**
44+ * The file descriptor of our stdin stream.
45+ * @type {number}
46+ */
47+const stdinFd = isTTY
48+ ? // We can't just use process.stdin.fd here since node has some getter shenanigans
49+ // which cause sync reads to throw
50+ openSync("/dev/tty", "r")
51+ : openSync("/dev/stdin", "r");
52+
53+/**
54+ * Writes output to stdout.
55+ *
56+ * @param {NodeJS.ArrayBufferView} b The outpus which should be written to stdout.
57+ */
58+function writeOutput(b) {
59+ writeSync(process.stdout.fd, b);
60+}
61+
62+/**
63+ * Writes a buffer or string to stdout, only if stdin is a tty.
64+ * @param {NodeJS.ArrayBufferView} b The outpus which should be written to stdout (if stdin is a tty).
65+ */
66+function writeTTYOutput(b) {
67+ if (isTTY) {
68+ writeOutput(b);
69+ }
70+}
71+
72+/**
73+ * If stdin is a tty, ensure raw mode is on prior to executing cb,
74+ * then reset it to its previous state afterwards. If stdin isn't a tty,
75+ * cb will just be executed normally.
76+ *
77+ * @template T
78+ * @param {() => T} cb The function which is being executed.
79+ * @return {T} The return value of cb
80+ */
81+function ensureRawMode(cb) {
82+ if (!isTTY) {
83+ return cb();
84+ }
85+
86+ const previousRawMode = process.stdin.isRaw;
87+
88+ let ret;
89+
90+ try {
91+ process.stdin.setRawMode(true);
92+ ret = cb();
93+ } finally {
94+ process.stdin.setRawMode(previousRawMode);
95+ }
96+
97+ return ret;
98+}
99+
100+/**
101+ * Handles ANSI escapes from stdin.
102+ *
103+ * @return {string | -1 | 1} String if the escape isn't a left or right arrow .
104+ * Otherwise, -1 on left arrow and 1 on right arrow
105+ */
106+function handleArrowKey() {
107+ if (!readByteSync()) {
108+ return "^";
109+ }
110+
111+ let str = buf.toString("binary");
112+
113+ if (str !== "[") {
114+ return `^${str}`;
115+ }
116+
117+ if (!readByteSync()) {
118+ return `^${str}`;
119+ }
120+
121+ str += buf.toString("binary");
122+
123+ switch (str) {
124+ case cursorRight:
125+ return 1;
126+ case cursorLeft:
127+ return -1;
128+ default:
129+ return `^${str}`;
130+ }
131+}
132+
133+/**
134+ * Checks to see if the input character is what we get in raw mode for
135+ * Ctrl+C or Ctrl+D, and if so sends the proc SIGINT>
136+ *
137+ * @param {string} char The character read.
138+ */
139+function checkForSigs(char) {
140+ if (isTTY && (char === endOfText || char === endOfTransmission)) {
141+ process.exit();
142+ }
143+}
144+
145+/**
146+ * Writes a string at an index of another string, appending as needed.
147+ *
148+ * @param {string} str The base string
149+ * @param {string} other The new string which is being written
150+ * @param {number} index The index at which the new string should start at.
151+ * @return {string} str with other written at index.
152+ */
153+function insertAt(str, other, index) {
154+ return [str.slice(0, index) + other + str.slice(index), index + other.length];
155+}
156+
157+/**
158+ * The ANSI escape code used to clear the contents of the current line to the right
159+ * of the cursor.
160+ */
161+const escapeClearLineRight = "\x1b[K";
162+
163+/**
164+ * The escape used to move the cursor to a specific position in-line.
165+ *
166+ * @param {number} columnNum The position (starting at 1) in the current line which the cursor should be moved to.
167+ *
168+ */
169+function escapeMoveCursorToColumn(columnNum) {
170+ return `\x1b[${columnNum}G`;
171+}
172+
173+/**
174+ * Sets the current line to our promt + string w/ the cursor at the right index.
175+ *
176+ * @param {string} prompt The question's prompt
177+ * @param {string} current The current string (what the user has input so far)
178+ * @param {number} index The index that
179+ */
180+function displayPromptAndStr(prompt, current, index) {
181+ writeTTYOutput(
182+ // reset cursor position
183+ "\r" +
184+ // clear the rest of the line
185+ // EL (Erase in Line ): in this case, as no number is speciifed,
186+ // erases everything to the right of the cursor.
187+ escapeClearLineRight +
188+ // write the prompt
189+ prompt +
190+ // write the string
191+ current +
192+ escapeMoveCursorToColumn(prompt.length + index + 1)
193+ );
194+}
195+
196+/**
197+ * Synchronously reads from stdin until `\n` or `\r`
198+ *
199+ * @param {string} prompt The prompt to be displayed
200+ * @return {string} The input read (excluding newlines)
201+ */
202+function question(prompt) {
203+ return ensureRawMode(() => {
204+ let str = "";
205+ let index = 0;
206+
207+ if (!isTTY) {
208+ writeOutput(prompt);
209+ }
210+
211+ for (;;) {
212+ displayPromptAndStr(prompt, str, index);
213+ const didRead = readByteSync();
214+
215+ if (!didRead) {
216+ return str;
217+ }
218+
219+ const char = buf.toString("binary");
220+ checkForSigs(char);
221+
222+ if (char === "\n" || char === "\r") {
223+ writeTTYOutput("\r\n");
224+
225+ return str;
226+ } else if (isTTY && char === "\x1b") {
227+ const ret = handleArrowKey();
228+
229+ // if ret is a number, its the difference for the index
230+ if (typeof ret === "number") {
231+ // Only move the cursor if it will be in a valid position.
232+ const newIndex = index + ret;
233+ // the index can be equal to the strs length, if that's the case we're appending to the string.
234+ if (newIndex >= 0 && newIndex <= str.length) {
235+ index = newIndex;
236+ }
237+
238+ // otherwise, the escape wasn't a left or right arrow key,
239+ // meaning we got an escaped version of the code.
240+ } else {
241+ [str, index] = insertAt(str, ret, index);
242+ }
243+ } else if (isTTY && char === del) {
244+ if (index > 0) {
245+ index--;
246+ // remove the character at the old index
247+ str = str.slice(0, index) + str.slice(index + 1);
248+ }
249+ } else {
250+ [str, index] = insertAt(str, char, index);
251+ }
252+ }
253+ });
254+}
255+
256+/**
257+ * Synchronously waits for 'y' or 'n' (case insensitive) and returns a boolean
258+ * where 'y' is true and 'n' is false.
259+ *
260+ * @param {string | undefined | null} prompt The prompt.
261+ * @returns {boolean} True if the input was y; false otherwise.
262+ * @throws {Error} If EOF is received before y/n
263+ */
264+function keyInYNStrict(prompt) {
265+ return ensureRawMode(() => {
266+ writeOutput(`${prompt == null ? "Are you sure?" : prompt} [y/n]: `);
267+
268+ for (;;) {
269+ const didRead = readByteSync();
270+
271+ if (!didRead) {
272+ throw new Error("Unexpected EOF / end of input. Expected y/n.");
273+ }
274+
275+ const char = buf.toString("binary");
276+ checkForSigs(char);
277+
278+ if (char.match(/[yn]/i)) {
279+ writeTTYOutput(`${char}\r\n`);
280+
281+ return char === "y" || char === "Y";
282+ }
283+ }
284+ });
285+}
286+
287+module.exports = {
288+ question,
289+ keyInYNStrict,
290+};
prybar_assets/nodejs/module-context-hook.jsnew file+487
@@ -0,0 +1,487 @@
1+const path = require('path');
2+const BuiltinModule = require('module');
3+const vm = require('vm');
4+const { Session } = require('inspector');
5+const Module =
6+ module.constructor.length > 1 ? module.constructor : BuiltinModule;
7+const nodeRepl = require('repl');
8+
9+const kReplitPrybarInit = Symbol.for('replit.prybar.init');
10+const kReplitPrybarEvalCode = Symbol.for('replit.prybar.eval.code');
11+const kReplitPrybarEvalFile = Symbol.for('replit.prybar.eval.file');
12+let moduleMode = null;
13+const assets_dir =
14+ process.env.PRYBAR_ASSETS_DIR || path.join(process.cwd(), 'prybar_assets');
15+
16+const originalFindPath = Module._findPath;
17+Module._findPath = function(request, paths, isMain) {
18+ if (moduleMode === "cjs" && request === 'node-fetch') {
19+ // Because node-fetch version >= 3 doesn't support commonjs, we'll switch to
20+ // @replit/node-fetch if it comes to that
21+ const result = originalFindPath(request, paths, isMain);
22+ const dir = path.dirname(result);
23+ const packageJson = require(path.join(dir, "..", "package.json"));
24+ const [major] = packageJson.version.split(".").map(Number);
25+ if (major >= 3) {
26+ // Switch to @replit/node-fetch
27+ console.log("\u001b[33mAuto-switching node-fetch to @replit/node-fetch for cjs support\u001b[0m");
28+
29+ return path.join(assets_dir, "nodejs/node_modules/@replit/node-fetch/index.js");
30+ }
31+
32+ return result;
33+ } else {
34+
35+ return originalFindPath(request, paths, isMain);
36+ }
37+}
38+
39+/**
40+ * The footer we append at the end of files to run the code we want in the scope of the module its appended to.
41+ *
42+ * The code calls global[kReplitPrybarInit] with a callback to evaluate the code at `global`
43+ */
44+const interactiveFooterSnippet = `
45+global[Symbol.for('${kReplitPrybarInit.description}')](() =>
46+ eval(global[Symbol.for('${kReplitPrybarEvalCode.description}')])
47+);
48+`;
49+
50+const moduleVariables = [
51+ // these are all added as arguments of the function modules are wrapped in.
52+ // function (exports, require, module, __filename, __dirname)
53+ 'exports',
54+ 'require',
55+ 'module',
56+ '__filename',
57+ '__dirname',
58+];
59+
60+/**
61+ * Regex to get anything that looks like it could be a top-level variable.
62+ * we use this on each evaluated line strings to test words / strings that could be variables
63+ * and see if they're in the local scope. This is needed for the preview which `repl.js` shows & tab auto-complete.
64+ *
65+ * This will not match properties of values.
66+ */
67+const variableLikeRegex = /(?<=^|[^a-z_0-9$.])[a-z_$][a-z_$0-9]*/gi;
68+
69+/**
70+ * Gets a wrapped version of the eval function which takes a string argument (rather than using a symbol on global)
71+ * and
72+ *
73+ * This is intended to removve any confusion from callsites which aren't referenced in the code of the file we're
74+ * running; calls to eval from lines which don't exist.
75+ *
76+ * @param {(code: string) => any} evalFn
77+ * @returns A a wrapper of the eval function which omits callsites from our proxy logic from stack traces.
78+ */
79+function wrapEval(evalFn) {
80+ return (str) => {
81+ global[kReplitPrybarEvalCode] = str;
82+
83+ return evalFn();
84+ };
85+}
86+
87+/**
88+ * Wraps a function so that none of the callsites under the function's caller are rendered in the error's stack.
89+ * @template T
90+ * @param {T} fn
91+ * @returns {T} A wrapped
92+ */
93+function withoutStack(fn) {
94+ const wrapper = function (...args) {
95+ const oldPrepareStackTrace = Error.prepareStackTrace;
96+
97+ Error.prepareStackTrace = (error) => {
98+ return oldPrepareStackTrace(error, []);
99+ };
100+
101+ let results;
102+ try {
103+ results = fn.apply(this, args);
104+ } catch (err) {
105+ // there's some getter magic on Error.prototype.stack which prevents it from being rendered until
106+ // its value is requested.
107+ err.stack;
108+
109+ throw err;
110+ } finally {
111+ Error.prepareStackTrace = oldPrepareStackTrace;
112+ }
113+
114+ return results;
115+ };
116+
117+ return wrapper;
118+}
119+
120+function hasOwnProperty(obj, prop) {
121+ return Object.hasOwnProperty.call(obj, prop);
122+}
123+
124+let isPreview = false;
125+
126+/**
127+ * The source of the file which require appended the init hook too, if any.
128+ * @type {string | null}
129+ */
130+let hookedFileSource = null;
131+
132+/**
133+ * The function used to evalutate code in the context of the hooked module.
134+ *
135+ * @type {(code: string)=>any}
136+ */
137+let doEval = null;
138+
139+/**
140+ * Registers a function to gbe called once as `Module._compile`.
141+ * @param {(
142+ * this: typeof module,
143+ * code: string,
144+ * fileName: string,
145+ * builtin: ((code: string, fileName: string) => any),
146+ * mod: any
147+ * ) => any} fn The compile function to be used instead of _compile on its next call.
148+ */
149+function mockCompileOnce(fn) {
150+ const defaultCompiler = Module._extensions['.js'];
151+
152+ Module._extensions['.js'] = (mod, fileName) => {
153+ // Only the first import should have interp appended to it.
154+ Module._extensions['.js'] = defaultCompiler;
155+
156+ const oldCompile = mod._compile;
157+ mod.id = '.';
158+ mod.parent = null;
159+
160+ mod._compile = (code) => {
161+ mod._compile = oldCompile;
162+
163+ return fn(code, fileName, oldCompile.bind(mod), mod);
164+ };
165+
166+ return defaultCompiler(mod, fileName);
167+ };
168+}
169+
170+function initRepl(evalFn) {
171+ // wrap the eval fn so that if it errors, it won't include anything from interp in the shell.
172+ doEval = wrapEval(evalFn);
173+}
174+
175+global[kReplitPrybarInit] = initRepl;
176+
177+/**
178+ * Runs a module; adds a hook for an interactive repl if isInteractive is true.
179+ *
180+ * @param {string} moduleName The name / path of the target module
181+ * @param {boolean} isInteractive Whether the target file should init a repl or not.
182+ */
183+function runModule(moduleName, isInteractive) {
184+ // this will throw if the module doesn't exist.
185+ const absPath = require.resolve(path.resolve(process.cwd(), moduleName));
186+ // the the target module has already been `require`d this will drop it from the require cache;
187+ // otherwise this will do nothing.
188+ delete require.cache[absPath];
189+
190+ if (isInteractive) {
191+ mockCompileOnce((code, fileName, compile) => {
192+ let compiled;
193+
194+ try {
195+ // validate that the module has valid syntax without executing the code
196+ vm.compileFunction(code, moduleVariables);
197+ } catch (err) {
198+ // this error is probably unrelated to our added code
199+ // and should fail to compile again.
200+ // It's important that if this is the case, we didn't include our added code
201+ // otherwise users may see an error on a line of code that doesn't exist in the source.
202+ // (for example, an extra { which wasn't closed will show up on the last line of the file)
203+ compiled = compile(code, fileName);
204+
205+ // If we've gotten here something's up w/ interp, not the module itself.
206+ console.warn(
207+ 'running without interp',
208+ err,
209+ 'please submit a bug report.'
210+ );
211+
212+ return compiled;
213+ }
214+
215+ hookedFileSource = code;
216+ compiled = compile(code + interactiveFooterSnippet, fileName);
217+
218+ return compiled;
219+ });
220+ }
221+
222+ try {
223+ moduleMode = "cjs";
224+ require(absPath);
225+ } catch (e) {
226+ if (e.code === 'ERR_REQUIRE_ESM') {
227+ moduleMode = "esm";
228+ import(absPath);
229+ } else {
230+ throw e;
231+ }
232+ }
233+}
234+
235+/**
236+ * Executes the specified code in a fake module and return the results.
237+ *
238+ * @param {string} code The code to be executed
239+ * @param {boolean} isInterractive Whether a repl should be started in the same scope as the code or not.
240+ * @returns {any} The results of the evalutated code.
241+ */
242+function runCode(code, isInterractive) {
243+ mockCompileOnce((fileSource, __, compile) => {
244+ const fakeFileName = path.join(process.cwd(), '__replit_exec.js');
245+ global[kReplitPrybarEvalFile] = fakeFileName;
246+
247+ hookedFileSource = code;
248+ delete require.cache[fakeFileName];
249+ // we need to `eval` here rather than directly input the code for
250+ global[kReplitPrybarEvalCode] = isInterractive
251+ ? code + interactiveFooterSnippet
252+ : code;
253+
254+ return compile(
255+ fileSource,
256+ // lie to the `compile` function about the file we're compiling
257+ // so calls to `require` will be resolved from the current directory.
258+ fakeFileName
259+ );
260+ });
261+
262+ delete require.cache[require.resolve('./runCode')];
263+ return require('./runCode');
264+}
265+
266+/**
267+ * If available, returns a repl in the context of executed code or module.
268+ *
269+ * @returns {nodeRepl.REPLServer | null} A vm context if the repl init function was called; otherwise null.
270+ */
271+function getRepl() {
272+ if (doEval === null) {
273+ return null;
274+ }
275+
276+ /**
277+ * A list of variables referenced from the hooked module. This should include all locals, and
278+ * will also end up including any referenced globals.
279+ */
280+ let locals = {};
281+
282+ const variableMatches = hookedFileSource.match(variableLikeRegex);
283+ if (variableMatches) {
284+ for (const maybeVariable of variableMatches) {
285+ let value;
286+
287+ try {
288+ value = doEval(maybeVariable);
289+
290+ try {
291+ // asserts that the variable isn't a constant
292+ doEval(`${maybeVariable}=${maybeVariable}`);
293+
294+ Reflect.defineProperty(locals, maybeVariable, {
295+ value,
296+ writable: true,
297+ enumerable: true,
298+ configurable: false,
299+ });
300+ } catch (err) {
301+ // can't write to constants
302+ if (err instanceof TypeError) {
303+ Reflect.defineProperty(locals, maybeVariable, {
304+ value,
305+ writeable: false,
306+ enumerable: true,
307+ configurable: false,
308+ });
309+ continue;
310+ }
311+
312+ throw err;
313+ }
314+ } catch (err) {
315+ if (err instanceof ReferenceError || err instanceof SyntaxError) {
316+ continue;
317+ }
318+
319+ throw err;
320+ }
321+ }
322+ }
323+
324+ for (const moduleVariable of moduleVariables) {
325+ if (!hasOwnProperty(locals, moduleVariable)) {
326+ Object.defineProperty(locals, moduleVariable, {
327+ writable: true,
328+ configurable: true,
329+ value: doEval(moduleVariable),
330+ });
331+ }
332+ }
333+
334+ repl = nodeRepl.start({
335+ prompt: process.env.PRYBAR_PS1,
336+ });
337+ let isPreview = false;
338+
339+ const replContext = new Proxy(repl.context, {
340+ // Returns a list of all properties of the proxy (enumerable or not).
341+ // https://tc39.es/ecma262/multipage/ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys
342+ ownKeys(ctx) {
343+ return Array.from(
344+ new Set(
345+ Reflect.ownKeys(global).concat(
346+ Reflect.ownKeys(locals),
347+ Reflect.ownKeys(ctx)
348+ )
349+ )
350+ );
351+ },
352+ // Trap for the [[GetOwnProperty]] (used by the Object.getOwnPropertyDescriptor) function
353+ // Returns the descriptor for any variable.
354+ // https://tc39.es/ecma262/multipage/ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p
355+ getOwnPropertyDescriptor(ctx, variable) {
356+ if (hasOwnProperty(ctx, variable)) {
357+ return Reflect.getOwnPropertyDescriptor(ctx, variable);
358+ }
359+
360+ // If the variable exists locally, prioritize it over global.
361+ if (hasOwnProperty(locals, variable)) {
362+ return {
363+ enumerable: true,
364+ configurable: true,
365+ get() {
366+ return locals[variable];
367+ },
368+ set(value) {
369+ // if the variable is a constant, this will throw
370+ replContext[variable] = value;
371+ },
372+ };
373+ }
374+
375+ if (hasOwnProperty(global, variable)) {
376+ const descriptor = Reflect.getOwnPropertyDescriptor(global);
377+
378+ return {
379+ ...descriptor,
380+ configurable: true,
381+ };
382+ }
383+
384+ return undefined;
385+ },
386+
387+ // Trap for determining if the proxy has a key or not.
388+ // https://tc39.es/ecma262/multipage/ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p
389+ has(ctx, variable) {
390+ return (
391+ hasOwnProperty(locals, variable) ||
392+ hasOwnProperty(global, variable) ||
393+ hasOwnProperty(ctx, variable)
394+ );
395+ },
396+
397+ // Trap for getting a property from the proxy.
398+ // https://tc39.es/ecma262/multipage/ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver
399+ get(ctx, variable) {
400+ if (hasOwnProperty(ctx, variable)) {
401+ return ctx[variable];
402+ }
403+
404+ if (hasOwnProperty(locals, variable)) {
405+ // the inspector treats all calls to ``eval` as having side effects,
406+ // so we can't directly call `eval` if we want preview to work.
407+ if (!isPreview) {
408+ // locals may change since we last checked their values.
409+ // we should make sure to grab the most recent value if we're not getting the preview.
410+ locals[variable] = doEval(variable);
411+ }
412+
413+ return locals[variable];
414+ }
415+
416+ if (hasOwnProperty(global, variable)) {
417+ return global[variable];
418+ }
419+
420+ throw new ReferenceError(`${variable} is not defined`);
421+ },
422+
423+ // trap for setting a value in the proxy.
424+ // https://tc39.es/ecma262/multipage/ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver
425+ set: withoutStack((ctx, variable, value) => {
426+ if (hasOwnProperty(locals, variable)) {
427+ // To avoid running into potential name clashes of module variables and
428+ // variables owned by this REPL logic, we'll evaluate a callback which sets the variable
429+ // to its first argument, with an argument that has a different name.
430+
431+ doEval(`_${variable}=>${variable}=_${variable}`)(value);
432+
433+ locals[variable] = value;
434+ } else if (hasOwnProperty(global, variable)) {
435+ global[variable] = value;
436+ } else {
437+ ctx[variable] = value;
438+ }
439+
440+ return true;
441+ }),
442+ });
443+
444+ repl.context = vm.createContext(replContext);
445+
446+ for (const moduleVariable of moduleVariables) {
447+ delete repl.context[moduleVariable];
448+ }
449+
450+ const kContextId = Object.getOwnPropertySymbols(repl).find(
451+ (v) => v.description === 'contextId'
452+ );
453+
454+ repl.context.repl = repl;
455+
456+ // this should be 100% seafe since JS is synchronous.
457+ // we aren't using the repl's original context, but we create the new context directly after
458+ // repl.start creates one, so the ID of our context is the ID of the repl's context id + 1.
459+ const replContextId = ++repl[kContextId];
460+
461+ // The nodejs inspector doesn't properly handle the proxy & scope magic,
462+ // so we need to mock its eval function if we want commodities such as preview and
463+ // tab-completion to work as intended.
464+
465+ const post = Session.prototype.post;
466+ Session.prototype.post = function (method, params, callback) {
467+ if (method !== 'Runtime.evaluate' || params.contextId !== replContextId) {
468+ return post.apply(this, arguments);
469+ }
470+
471+ isPreview = true;
472+ // this is synchronous, despite the callback.
473+ return post.call(this, method, params, (err, preview) => {
474+ isPreview = false;
475+
476+ return callback(err, preview);
477+ });
478+ };
479+
480+ return repl;
481+}
482+
483+module.exports = {
484+ runCode,
485+ runModule,
486+ getRepl,
487+};
vendor/github.com/chzyer/readline/LICENSE → prybar_assets/nodejs/node_modules/@replit/node-fetch/LICENSE.mdrenamed+1−1
@@ -1,6 +1,6 @@
11The MIT License (MIT)
22
3−Copyright (c) 2015 Chzyer
3+Copyright (c) 2016 - 2020 Node Fetch Team
44
55Permission is hereby granted, free of charge, to any person obtaining a copy
66of this software and associated documentation files (the "Software"), to deal
prybar_assets/nodejs/node_modules/@replit/node-fetch/README.mdnew file+27
@@ -0,0 +1,27 @@
1+# @replit/node-fetch
2+
3+[node-fetch](https://github.com/node-fetch/node-fetch) but in CommonJS format. This module is built from `node-fetch` directly.
4+
5+## Version check
6+
7+![Latest upstream version](https://img.shields.io/npm/v/node-fetch?label=latest%20upstream)
8+![Current upstream version](https://img.shields.io/badge/current%20upstream-v3.1.0-brightgreen)
9+
10+## Differences
11+
12+1. You can `require("@replit/node-fetch")` directly.
13+2. You will not see the `ExperimentalWarning: stream/web is an experimental feature` warning.
14+3. It works on older Node.js versions that don’t support [requiring built-in modules with a `node:` prefix](https://github.com/node-fetch/node-fetch/issues/1367).
15+
16+## Build
17+
18+```bash
19+yarn
20+./build.js # Output to `lib` folder
21+```
22+
23+## Install
24+
25+```bash
26+yarn add @replit/node-fetch
27+```
prybar_assets/nodejs/node_modules/@replit/node-fetch/index-3a548b1a.jsnew file+2269
@@ -0,0 +1,2269 @@
1+/* eslint-disable */
2+'use strict';
3+
4+var http = require('http');
5+var https = require('https');
6+var zlib = require('zlib');
7+var Stream = require('stream');
8+var util = require('util');
9+var url = require('url');
10+var net = require('net');
11+
12+function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13+
14+var http__default = /*#__PURE__*/_interopDefaultLegacy(http);
15+var https__default = /*#__PURE__*/_interopDefaultLegacy(https);
16+var zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib);
17+var Stream__default = /*#__PURE__*/_interopDefaultLegacy(Stream);
18+
19+/**
20+ * Returns a `Buffer` instance from the given data URI `uri`.
21+ *
22+ * @param {String} uri Data URI to turn into a Buffer instance
23+ * @returns {Buffer} Buffer instance from Data URI
24+ * @api public
25+ */
26+function dataUriToBuffer(uri) {
27+ if (!/^data:/i.test(uri)) {
28+ throw new TypeError('`uri` does not appear to be a Data URI (must begin with "data:")');
29+ }
30+ // strip newlines
31+ uri = uri.replace(/\r?\n/g, '');
32+ // split the URI up into the "metadata" and the "data" portions
33+ const firstComma = uri.indexOf(',');
34+ if (firstComma === -1 || firstComma <= 4) {
35+ throw new TypeError('malformed data: URI');
36+ }
37+ // remove the "data:" scheme and parse the metadata
38+ const meta = uri.substring(5, firstComma).split(';');
39+ let charset = '';
40+ let base64 = false;
41+ const type = meta[0] || 'text/plain';
42+ let typeFull = type;
43+ for (let i = 1; i < meta.length; i++) {
44+ if (meta[i] === 'base64') {
45+ base64 = true;
46+ }
47+ else {
48+ typeFull += `;${meta[i]}`;
49+ if (meta[i].indexOf('charset=') === 0) {
50+ charset = meta[i].substring(8);
51+ }
52+ }
53+ }
54+ // defaults to US-ASCII only if type is not provided
55+ if (!meta[0] && !charset.length) {
56+ typeFull += ';charset=US-ASCII';
57+ charset = 'US-ASCII';
58+ }
59+ // get the encoded data portion and decode URI-encoded chars
60+ const encoding = base64 ? 'base64' : 'ascii';
61+ const data = unescape(uri.substring(firstComma + 1));
62+ const buffer = Buffer.from(data, encoding);
63+ // set `.type` and `.typeFull` properties to MIME type
64+ buffer.type = type;
65+ buffer.typeFull = typeFull;
66+ // set the `.charset` property
67+ buffer.charset = charset;
68+ return buffer;
69+}
70+
71+/* c8 ignore start */
72+// 64 KiB (same size chrome slice theirs blob into Uint8array's)
73+const POOL_SIZE$1 = 65536;
74+
75+if (!globalThis.ReadableStream) {
76+ // try {
77+ // Object.assign(globalThis, require('stream/web'))
78+ // } catch (error) {
79+ // TODO: Remove when only supporting node >= 16.5.0
80+ Object.assign(globalThis, require('web-streams-polyfill/dist/ponyfill.es2018.js'));
81+ // }
82+}
83+
84+try {
85+ const {Blob} = require('buffer');
86+ if (Blob && !Blob.prototype.stream) {
87+ Blob.prototype.stream = function name(params) {
88+ let position = 0;
89+ const blob = this;
90+
91+ return new ReadableStream({
92+ type: 'bytes',
93+ async pull(ctrl) {
94+ const chunk = blob.slice(position, Math.min(blob.size, position + POOL_SIZE$1));
95+ const buffer = await chunk.arrayBuffer();
96+ position += buffer.byteLength;
97+ ctrl.enqueue(new Uint8Array(buffer));
98+
99+ if (position === blob.size) {
100+ ctrl.close();
101+ }
102+ }
103+ })
104+ };
105+ }
106+} catch (error) {}
107+/* c8 ignore end */
108+
109+/** @typedef {import('buffer').Blob} NodeBlob} */
110+
111+// 64 KiB (same size chrome slice theirs blob into Uint8array's)
112+const POOL_SIZE = 65536;
113+
114+/** @param {(Blob | NodeBlob | Uint8Array)[]} parts */
115+async function * toIterator (parts, clone = true) {
116+ for (let part of parts) {
117+ if ('stream' in part) {
118+ yield * part.stream();
119+ } else if (ArrayBuffer.isView(part)) {
120+ if (clone) {
121+ let position = part.byteOffset;
122+ let end = part.byteOffset + part.byteLength;
123+ while (position !== end) {
124+ const size = Math.min(end - position, POOL_SIZE);
125+ const chunk = part.buffer.slice(position, position + size);
126+ position += chunk.byteLength;
127+ yield new Uint8Array(chunk);
128+ }
129+ } else {
130+ yield part;
131+ }
132+ } else {
133+ /* c8 ignore start */
134+ // For blobs that have arrayBuffer but no stream method (nodes buffer.Blob)
135+ let position = 0;
136+ while (position !== part.size) {
137+ const chunk = part.slice(position, Math.min(part.size, position + POOL_SIZE));
138+ const buffer = await chunk.arrayBuffer();
139+ position += buffer.byteLength;
140+ yield new Uint8Array(buffer);
141+ }
142+ /* c8 ignore end */
143+ }
144+ }
145+}
146+
147+const _Blob = class Blob {
148+
149+ /** @type {Array.<(Blob|Uint8Array)>} */
150+ #parts = [];
151+ #type = '';
152+ #size = 0;
153+
154+ /**
155+ * The Blob() constructor returns a new Blob object. The content
156+ * of the blob consists of the concatenation of the values given
157+ * in the parameter array.
158+ *
159+ * @param {*} blobParts
160+ * @param {{ type?: string }} [options]
161+ */
162+ constructor(blobParts = [], options = {}) {
163+ let size = 0;
164+
165+ const parts = blobParts.map(element => {
166+ let part;
167+ if (ArrayBuffer.isView(element)) {
168+ part = new Uint8Array(element.buffer.slice(element.byteOffset, element.byteOffset + element.byteLength));
169+ } else if (element instanceof ArrayBuffer) {
170+ part = new Uint8Array(element.slice(0));
171+ } else if (element instanceof Blob) {
172+ part = element;
173+ } else {
174+ part = new TextEncoder().encode(element);
175+ }
176+
177+ size += ArrayBuffer.isView(part) ? part.byteLength : part.size;
178+ return part;
179+ });
180+
181+ const type = options.type === undefined ? '' : String(options.type);
182+
183+ this.#type = /[^\u0020-\u007E]/.test(type) ? '' : type;
184+ this.#size = size;
185+ this.#parts = parts;
186+ }
187+
188+ /**
189+ * The Blob interface's size property returns the
190+ * size of the Blob in bytes.
191+ */
192+ get size() {
193+ return this.#size;
194+ }
195+
196+ /**
197+ * The type property of a Blob object returns the MIME type of the file.
198+ */
199+ get type() {
200+ return this.#type;
201+ }
202+
203+ /**
204+ * The text() method in the Blob interface returns a Promise
205+ * that resolves with a string containing the contents of
206+ * the blob, interpreted as UTF-8.
207+ *
208+ * @return {Promise<string>}
209+ */
210+ async text() {
211+ // More optimized than using this.arrayBuffer()
212+ // that requires twice as much ram
213+ const decoder = new TextDecoder();
214+ let str = '';
215+ for await (let part of toIterator(this.#parts, false)) {
216+ str += decoder.decode(part, { stream: true });
217+ }
218+ // Remaining
219+ str += decoder.decode();
220+ return str;
221+ }
222+
223+ /**
224+ * The arrayBuffer() method in the Blob interface returns a
225+ * Promise that resolves with the contents of the blob as
226+ * binary data contained in an ArrayBuffer.
227+ *
228+ * @return {Promise<ArrayBuffer>}
229+ */
230+ async arrayBuffer() {
231+ // Easier way... Just a unnecessary overhead
232+ // const view = new Uint8Array(this.size);
233+ // await this.stream().getReader({mode: 'byob'}).read(view);
234+ // return view.buffer;
235+
236+ const data = new Uint8Array(this.size);
237+ let offset = 0;
238+ for await (const chunk of toIterator(this.#parts, false)) {
239+ data.set(chunk, offset);
240+ offset += chunk.length;
241+ }
242+
243+ return data.buffer;
244+ }
245+
246+ stream() {
247+ const it = toIterator(this.#parts, true);
248+
249+ return new ReadableStream({
250+ type: 'bytes',
251+ async pull(ctrl) {
252+ const chunk = await it.next();
253+ chunk.done ? ctrl.close() : ctrl.enqueue(chunk.value);
254+ }
255+ })
256+ }
257+
258+ /**
259+ * The Blob interface's slice() method creates and returns a
260+ * new Blob object which contains data from a subset of the
261+ * blob on which it's called.
262+ *
263+ * @param {number} [start]
264+ * @param {number} [end]
265+ * @param {string} [type]
266+ */
267+ slice(start = 0, end = this.size, type = '') {
268+ const {size} = this;
269+
270+ let relativeStart = start < 0 ? Math.max(size + start, 0) : Math.min(start, size);
271+ let relativeEnd = end < 0 ? Math.max(size + end, 0) : Math.min(end, size);
272+
273+ const span = Math.max(relativeEnd - relativeStart, 0);
274+ const parts = this.#parts;
275+ const blobParts = [];
276+ let added = 0;
277+
278+ for (const part of parts) {
279+ // don't add the overflow to new blobParts
280+ if (added >= span) {
281+ break;
282+ }
283+
284+ const size = ArrayBuffer.isView(part) ? part.byteLength : part.size;
285+ if (relativeStart && size <= relativeStart) {
286+ // Skip the beginning and change the relative
287+ // start & end position as we skip the unwanted parts
288+ relativeStart -= size;
289+ relativeEnd -= size;
290+ } else {
291+ let chunk;
292+ if (ArrayBuffer.isView(part)) {
293+ chunk = part.subarray(relativeStart, Math.min(size, relativeEnd));
294+ added += chunk.byteLength;
295+ } else {
296+ chunk = part.slice(relativeStart, Math.min(size, relativeEnd));
297+ added += chunk.size;
298+ }
299+ blobParts.push(chunk);
300+ relativeStart = 0; // All next sequential parts should start at 0
301+ }
302+ }
303+
304+ const blob = new Blob([], {type: String(type).toLowerCase()});
305+ blob.#size = span;
306+ blob.#parts = blobParts;
307+
308+ return blob;
309+ }
310+
311+ get [Symbol.toStringTag]() {
312+ return 'Blob';
313+ }
314+
315+ static [Symbol.hasInstance](object) {
316+ return (
317+ object &&
318+ typeof object === 'object' &&
319+ typeof object.constructor === 'function' &&
320+ (
321+ typeof object.stream === 'function' ||
322+ typeof object.arrayBuffer === 'function'
323+ ) &&
324+ /^(Blob|File)$/.test(object[Symbol.toStringTag])
325+ );
326+ }
327+};
328+
329+Object.defineProperties(_Blob.prototype, {
330+ size: {enumerable: true},
331+ type: {enumerable: true},
332+ slice: {enumerable: true}
333+});
334+
335+/** @type {typeof globalThis.Blob} */
336+const Blob = _Blob;
337+var Blob$1 = Blob;
338+
339+const _File = class File extends Blob$1 {
340+ #lastModified = 0;
341+ #name = '';
342+
343+ /**
344+ * @param {*[]} fileBits
345+ * @param {string} fileName
346+ * @param {{lastModified?: number, type?: string}} options
347+ */// @ts-ignore
348+ constructor(fileBits, fileName, options = {}) {
349+ if (arguments.length < 2) {
350+ throw new TypeError(`Failed to construct 'File': 2 arguments required, but only ${arguments.length} present.`);
351+ }
352+ super(fileBits, options);
353+
354+ const modified = Number(options.lastModified);
355+ this.#lastModified = Number.isNaN(modified) ? Date.now() : modified;
356+ this.#name = fileName;
357+ }
358+
359+ get name() {
360+ return this.#name;
361+ }
362+
363+ get lastModified() {
364+ return this.#lastModified;
365+ }
366+
367+ get [Symbol.toStringTag]() {
368+ return "File";
369+ }
370+};
371+
372+/** @type {typeof globalThis.File} */// @ts-ignore
373+const File = _File;
374+
375+/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */
376+
377+var {toStringTag:t,iterator:i,hasInstance:h}=Symbol,
378+r=Math.random,
379+m='append,set,get,getAll,delete,keys,values,entries,forEach,constructor'.split(','),
380+f=(a,b,c)=>(a+='',/^(Blob|File)$/.test(b && b[t])?[(c=c!==void 0?c+'':b[t]=='File'?b.name:'blob',a),b.name!==c||b[t]=='blob'?new File([b],c,b):b]:[a,b+'']),
381+e=(c,f)=>(f?c:c.replace(/\r?\n|\r/g,'\r\n')).replace(/\n/g,'%0A').replace(/\r/g,'%0D').replace(/"/g,'%22'),
382+x=(n, a, e)=>{if(a.length<e){throw new TypeError(`Failed to execute '${n}' on 'FormData': ${e} arguments required, but only ${a.length} present.`)}};
383+
384+/** @type {typeof globalThis.FormData} */
385+const FormData = class FormData {
386+#d=[];
387+constructor(...a){if(a.length)throw new TypeError(`Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'.`)}
388+get [t]() {return 'FormData'}
389+[i](){return this.entries()}
390+static [h](o) {return o&&typeof o==='object'&&o[t]==='FormData'&&!m.some(m=>typeof o[m]!='function')}
391+append(...a){x('append',arguments,2);this.#d.push(f(...a));}
392+delete(a){x('delete',arguments,1);a+='';this.#d=this.#d.filter(([b])=>b!==a);}
393+get(a){x('get',arguments,1);a+='';for(var b=this.#d,l=b.length,c=0;c<l;c++)if(b[c][0]===a)return b[c][1];return null}
394+getAll(a,b){x('getAll',arguments,1);b=[];a+='';this.#d.forEach(c=>c[0]===a&&b.push(c[1]));return b}
395+has(a){x('has',arguments,1);a+='';return this.#d.some(b=>b[0]===a)}
396+forEach(a,b){x('forEach',arguments,1);for(var [c,d]of this)a.call(b,d,c,this);}
397+set(...a){x('set',arguments,2);var b=[],c=!0;a=f(...a);this.#d.forEach(d=>{d[0]===a[0]?c&&(c=!b.push(a)):b.push(d);});c&&b.push(a);this.#d=b;}
398+*entries(){yield*this.#d;}
399+*keys(){for(var[a]of this)yield a;}
400+*values(){for(var[,a]of this)yield a;}};
401+
402+/** @param {FormData} F */
403+function formDataToBlob (F,B=Blob$1){
404+var b=`${r()}${r()}`.replace(/\./g, '').slice(-28).padStart(32, '-'),c=[],p=`--${b}\r\nContent-Disposition: form-data; name="`;
405+F.forEach((v,n)=>typeof v=='string'
406+?c.push(p+e(n)+`"\r\n\r\n${v.replace(/\r(?!\n)|(?<!\r)\n/g, '\r\n')}\r\n`)
407+:c.push(p+e(n)+`"; filename="${e(v.name, 1)}"\r\nContent-Type: ${v.type||"application/octet-stream"}\r\n\r\n`, v, '\r\n'));
408+c.push(`--${b}--`);
409+return new B(c,{type:"multipart/form-data; boundary="+b})}
410+
411+class FetchBaseError extends Error {
412+ constructor(message, type) {
413+ super(message);
414+ // Hide custom error implementation details from end-users
415+ Error.captureStackTrace(this, this.constructor);
416+
417+ this.type = type;
418+ }
419+
420+ get name() {
421+ return this.constructor.name;
422+ }
423+
424+ get [Symbol.toStringTag]() {
425+ return this.constructor.name;
426+ }
427+}
428+
429+/**
430+ * @typedef {{ address?: string, code: string, dest?: string, errno: number, info?: object, message: string, path?: string, port?: number, syscall: string}} SystemError
431+*/
432+
433+/**
434+ * FetchError interface for operational errors
435+ */
436+class FetchError extends FetchBaseError {
437+ /**
438+ * @param {string} message - Error message for human
439+ * @param {string} [type] - Error type for machine
440+ * @param {SystemError} [systemError] - For Node.js system error
441+ */
442+ constructor(message, type, systemError) {
443+ super(message, type);
444+ // When err.type is `system`, err.erroredSysCall contains system error and err.code contains system error code
445+ if (systemError) {
446+ // eslint-disable-next-line no-multi-assign
447+ this.code = this.errno = systemError.code;
448+ this.erroredSysCall = systemError.syscall;
449+ }
450+ }
451+}
452+
453+/**
454+ * Is.js
455+ *
456+ * Object type checks.
457+ */
458+
459+const NAME = Symbol.toStringTag;
460+
461+/**
462+ * Check if `obj` is a URLSearchParams object
463+ * ref: https://github.com/node-fetch/node-fetch/issues/296#issuecomment-307598143
464+ * @param {*} object - Object to check for
465+ * @return {boolean}
466+ */
467+const isURLSearchParameters = object => {
468+ return (
469+ typeof object === 'object' &&
470+ typeof object.append === 'function' &&
471+ typeof object.delete === 'function' &&
472+ typeof object.get === 'function' &&
473+ typeof object.getAll === 'function' &&
474+ typeof object.has === 'function' &&
475+ typeof object.set === 'function' &&
476+ typeof object.sort === 'function' &&
477+ object[NAME] === 'URLSearchParams'
478+ );
479+};
480+
481+/**
482+ * Check if `object` is a W3C `Blob` object (which `File` inherits from)
483+ * @param {*} object - Object to check for
484+ * @return {boolean}
485+ */
486+const isBlob = object => {
487+ return (
488+ object &&
489+ typeof object === 'object' &&
490+ typeof object.arrayBuffer === 'function' &&
491+ typeof object.type === 'string' &&
492+ typeof object.stream === 'function' &&
493+ typeof object.constructor === 'function' &&
494+ /^(Blob|File)$/.test(object[NAME])
495+ );
496+};
497+
498+/**
499+ * Check if `obj` is an instance of AbortSignal.
500+ * @param {*} object - Object to check for
501+ * @return {boolean}
502+ */
503+const isAbortSignal = object => {
504+ return (
505+ typeof object === 'object' && (
506+ object[NAME] === 'AbortSignal' ||
507+ object[NAME] === 'EventTarget'
508+ )
509+ );
510+};
511+
512+const INTERNALS$2 = Symbol('Body internals');
513+
514+/**
515+ * Body mixin
516+ *
517+ * Ref: https://fetch.spec.whatwg.org/#body
518+ *
519+ * @param Stream body Readable stream
520+ * @param Object opts Response options
521+ * @return Void
522+ */
523+class Body {
524+ constructor(body, {
525+ size = 0
526+ } = {}) {
527+ let boundary = null;
528+
529+ if (body === null) {
530+ // Body is undefined or null
531+ body = null;
532+ } else if (isURLSearchParameters(body)) {
533+ // Body is a URLSearchParams
534+ body = Buffer.from(body.toString());
535+ } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (util.types.isAnyArrayBuffer(body)) {
536+ // Body is ArrayBuffer
537+ body = Buffer.from(body);
538+ } else if (ArrayBuffer.isView(body)) {
539+ // Body is ArrayBufferView
540+ body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
541+ } else if (body instanceof Stream__default["default"]) ; else if (body instanceof FormData) {
542+ // Body is FormData
543+ body = formDataToBlob(body);
544+ boundary = body.type.split('=')[1];
545+ } else {
546+ // None of the above
547+ // coerce to string then buffer
548+ body = Buffer.from(String(body));
549+ }
550+
551+ let stream = body;
552+
553+ if (Buffer.isBuffer(body)) {
554+ stream = Stream__default["default"].Readable.from(body);
555+ } else if (isBlob(body)) {
556+ stream = Stream__default["default"].Readable.from(body.stream());
557+ }
558+
559+ this[INTERNALS$2] = {
560+ body,
561+ stream,
562+ boundary,
563+ disturbed: false,
564+ error: null
565+ };
566+ this.size = size;
567+
568+ if (body instanceof Stream__default["default"]) {
569+ body.on('error', error_ => {
570+ const error = error_ instanceof FetchBaseError ?
571+ error_ :
572+ new FetchError(`Invalid response body while trying to fetch ${this.url}: ${error_.message}`, 'system', error_);
573+ this[INTERNALS$2].error = error;
574+ });
575+ }
576+ }
577+
578+ get body() {
579+ return this[INTERNALS$2].stream;
580+ }
581+
582+ get bodyUsed() {
583+ return this[INTERNALS$2].disturbed;
584+ }
585+
586+ /**
587+ * Decode response as ArrayBuffer
588+ *
589+ * @return Promise
590+ */
591+ async arrayBuffer() {
592+ const {buffer, byteOffset, byteLength} = await consumeBody(this);
593+ return buffer.slice(byteOffset, byteOffset + byteLength);
594+ }
595+
596+ async formData() {
597+ const ct = this.headers.get('content-type');
598+
599+ if (ct.startsWith('application/x-www-form-urlencoded')) {
600+ const formData = new FormData();
601+ const parameters = new URLSearchParams(await this.text());
602+
603+ for (const [name, value] of parameters) {
604+ formData.append(name, value);
605+ }
606+
607+ return formData;
608+ }
609+
610+ const {toFormData} = await Promise.resolve().then(function () { return require('./multipart-parser-dc9090bd.js'); });
611+ return toFormData(this.body, ct);
612+ }
613+
614+ /**
615+ * Return raw response as Blob
616+ *
617+ * @return Promise
618+ */
619+ async blob() {
620+ const ct = (this.headers && this.headers.get('content-type')) || (this[INTERNALS$2].body && this[INTERNALS$2].body.type) || '';
621+ const buf = await this.buffer();
622+
623+ return new Blob$1([buf], {
624+ type: ct
625+ });
626+ }
627+
628+ /**
629+ * Decode response as json
630+ *
631+ * @return Promise
632+ */
633+ async json() {
634+ const buffer = await consumeBody(this);
635+ return JSON.parse(buffer.toString());
636+ }
637+
638+ /**
639+ * Decode response as text
640+ *
641+ * @return Promise
642+ */
643+ async text() {
644+ const buffer = await consumeBody(this);
645+ return buffer.toString();
646+ }
647+
648+ /**
649+ * Decode response as buffer (non-spec api)
650+ *
651+ * @return Promise
652+ */
653+ buffer() {
654+ return consumeBody(this);
655+ }
656+}
657+
658+Body.prototype.buffer = util.deprecate(Body.prototype.buffer, 'Please use \'response.arrayBuffer()\' instead of \'response.buffer()\'', 'node-fetch#buffer');
659+
660+// In browsers, all properties are enumerable.
661+Object.defineProperties(Body.prototype, {
662+ body: {enumerable: true},
663+ bodyUsed: {enumerable: true},
664+ arrayBuffer: {enumerable: true},
665+ blob: {enumerable: true},
666+ json: {enumerable: true},
667+ text: {enumerable: true}
668+});
669+
670+/**
671+ * Consume and convert an entire Body to a Buffer.
672+ *
673+ * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
674+ *
675+ * @return Promise
676+ */
677+async function consumeBody(data) {
678+ if (data[INTERNALS$2].disturbed) {
679+ throw new TypeError(`body used already for: ${data.url}`);
680+ }
681+
682+ data[INTERNALS$2].disturbed = true;
683+
684+ if (data[INTERNALS$2].error) {
685+ throw data[INTERNALS$2].error;
686+ }
687+
688+ const {body} = data;
689+
690+ // Body is null
691+ if (body === null) {
692+ return Buffer.alloc(0);
693+ }
694+
695+ /* c8 ignore next 3 */
696+ if (!(body instanceof Stream__default["default"])) {
697+ return Buffer.alloc(0);
698+ }
699+
700+ // Body is stream
701+ // get ready to actually consume the body
702+ const accum = [];
703+ let accumBytes = 0;
704+
705+ try {
706+ for await (const chunk of body) {
707+ if (data.size > 0 && accumBytes + chunk.length > data.size) {
708+ const error = new FetchError(`content size at ${data.url} over limit: ${data.size}`, 'max-size');
709+ body.destroy(error);
710+ throw error;
711+ }
712+
713+ accumBytes += chunk.length;
714+ accum.push(chunk);
715+ }
716+ } catch (error) {
717+ const error_ = error instanceof FetchBaseError ? error : new FetchError(`Invalid response body while trying to fetch ${data.url}: ${error.message}`, 'system', error);
718+ throw error_;
719+ }
720+
721+ if (body.readableEnded === true || body._readableState.ended === true) {
722+ try {
723+ if (accum.every(c => typeof c === 'string')) {
724+ return Buffer.from(accum.join(''));
725+ }
726+
727+ return Buffer.concat(accum, accumBytes);
728+ } catch (error) {
729+ throw new FetchError(`Could not create Buffer from response body for ${data.url}: ${error.message}`, 'system', error);
730+ }
731+ } else {
732+ throw new FetchError(`Premature close of server response while trying to fetch ${data.url}`);
733+ }
734+}
735+
736+/**
737+ * Clone body given Res/Req instance
738+ *
739+ * @param Mixed instance Response or Request instance
740+ * @param String highWaterMark highWaterMark for both PassThrough body streams
741+ * @return Mixed
742+ */
743+const clone = (instance, highWaterMark) => {
744+ let p1;
745+ let p2;
746+ let {body} = instance[INTERNALS$2];
747+
748+ // Don't allow cloning a used body
749+ if (instance.bodyUsed) {
750+ throw new Error('cannot clone body after it is used');
751+ }
752+
753+ // Check that body is a stream and not form-data object
754+ // note: we can't clone the form-data object without having it as a dependency
755+ if ((body instanceof Stream__default["default"]) && (typeof body.getBoundary !== 'function')) {
756+ // Tee instance body
757+ p1 = new Stream.PassThrough({highWaterMark});
758+ p2 = new Stream.PassThrough({highWaterMark});
759+ body.pipe(p1);
760+ body.pipe(p2);
761+ // Set instance body to teed body and return the other teed body
762+ instance[INTERNALS$2].stream = p1;
763+ body = p2;
764+ }
765+
766+ return body;
767+};
768+
769+const getNonSpecFormDataBoundary = util.deprecate(
770+ body => body.getBoundary(),
771+ 'form-data doesn\'t follow the spec and requires special treatment. Use alternative package',
772+ 'https://github.com/node-fetch/node-fetch/issues/1167'
773+);
774+
775+/**
776+ * Performs the operation "extract a `Content-Type` value from |object|" as
777+ * specified in the specification:
778+ * https://fetch.spec.whatwg.org/#concept-bodyinit-extract
779+ *
780+ * This function assumes that instance.body is present.
781+ *
782+ * @param {any} body Any options.body input
783+ * @returns {string | null}
784+ */
785+const extractContentType = (body, request) => {
786+ // Body is null or undefined
787+ if (body === null) {
788+ return null;
789+ }
790+
791+ // Body is string
792+ if (typeof body === 'string') {
793+ return 'text/plain;charset=UTF-8';
794+ }
795+
796+ // Body is a URLSearchParams
797+ if (isURLSearchParameters(body)) {
798+ return 'application/x-www-form-urlencoded;charset=UTF-8';
799+ }
800+
801+ // Body is blob
802+ if (isBlob(body)) {
803+ return body.type || null;
804+ }
805+
806+ // Body is a Buffer (Buffer, ArrayBuffer or ArrayBufferView)
807+ if (Buffer.isBuffer(body) || util.types.isAnyArrayBuffer(body) || ArrayBuffer.isView(body)) {
808+ return null;
809+ }
810+
811+ if (body instanceof FormData) {
812+ return `multipart/form-data; boundary=${request[INTERNALS$2].boundary}`;
813+ }
814+
815+ // Detect form data input from form-data module
816+ if (body && typeof body.getBoundary === 'function') {
817+ return `multipart/form-data;boundary=${getNonSpecFormDataBoundary(body)}`;
818+ }
819+
820+ // Body is stream - can't really do much about this
821+ if (body instanceof Stream__default["default"]) {
822+ return null;
823+ }
824+
825+ // Body constructor defaults other things to string
826+ return 'text/plain;charset=UTF-8';
827+};
828+
829+/**
830+ * The Fetch Standard treats this as if "total bytes" is a property on the body.
831+ * For us, we have to explicitly get it with a function.
832+ *
833+ * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes
834+ *
835+ * @param {any} obj.body Body object from the Body instance.
836+ * @returns {number | null}
837+ */
838+const getTotalBytes = request => {
839+ const {body} = request[INTERNALS$2];
840+
841+ // Body is null or undefined
842+ if (body === null) {
843+ return 0;
844+ }
845+
846+ // Body is Blob
847+ if (isBlob(body)) {
848+ return body.size;
849+ }
850+
851+ // Body is Buffer
852+ if (Buffer.isBuffer(body)) {
853+ return body.length;
854+ }
855+
856+ // Detect form data input from form-data module
857+ if (body && typeof body.getLengthSync === 'function') {
858+ return body.hasKnownLength && body.hasKnownLength() ? body.getLengthSync() : null;
859+ }
860+
861+ // Body is stream
862+ return null;
863+};
864+
865+/**
866+ * Write a Body to a Node.js WritableStream (e.g. http.Request) object.
867+ *
868+ * @param {Stream.Writable} dest The stream to write to.
869+ * @param obj.body Body object from the Body instance.
870+ * @returns {void}
871+ */
872+const writeToStream = (dest, {body}) => {
873+ if (body === null) {
874+ // Body is null
875+ dest.end();
876+ } else {
877+ // Body is stream
878+ body.pipe(dest);
879+ }
880+};
881+
882+/**
883+ * Headers.js
884+ *
885+ * Headers class offers convenient helpers
886+ */
887+
888+const validateHeaderName = typeof http__default["default"].validateHeaderName === 'function' ?
889+ http__default["default"].validateHeaderName :
890+ name => {
891+ if (!/^[\^`\-\w!#$%&'*+.|~]+$/.test(name)) {
892+ const error = new TypeError(`Header name must be a valid HTTP token [${name}]`);
893+ Object.defineProperty(error, 'code', {value: 'ERR_INVALID_HTTP_TOKEN'});
894+ throw error;
895+ }
896+ };
897+
898+const validateHeaderValue = typeof http__default["default"].validateHeaderValue === 'function' ?
899+ http__default["default"].validateHeaderValue :
900+ (name, value) => {
901+ if (/[^\t\u0020-\u007E\u0080-\u00FF]/.test(value)) {
902+ const error = new TypeError(`Invalid character in header content ["${name}"]`);
903+ Object.defineProperty(error, 'code', {value: 'ERR_INVALID_CHAR'});
904+ throw error;
905+ }
906+ };
907+
908+/**
909+ * @typedef {Headers | Record<string, string> | Iterable<readonly [string, string]> | Iterable<Iterable<string>>} HeadersInit
910+ */
911+
912+/**
913+ * This Fetch API interface allows you to perform various actions on HTTP request and response headers.
914+ * These actions include retrieving, setting, adding to, and removing.
915+ * A Headers object has an associated header list, which is initially empty and consists of zero or more name and value pairs.
916+ * You can add to this using methods like append() (see Examples.)
917+ * In all methods of this interface, header names are matched by case-insensitive byte sequence.
918+ *
919+ */
920+class Headers extends URLSearchParams {
921+ /**
922+ * Headers class
923+ *
924+ * @constructor
925+ * @param {HeadersInit} [init] - Response headers
926+ */
927+ constructor(init) {
928+ // Validate and normalize init object in [name, value(s)][]
929+ /** @type {string[][]} */
930+ let result = [];
931+ if (init instanceof Headers) {
932+ const raw = init.raw();
933+ for (const [name, values] of Object.entries(raw)) {
934+ result.push(...values.map(value => [name, value]));
935+ }
936+ } else if (init == null) ; else if (typeof init === 'object' && !util.types.isBoxedPrimitive(init)) {
937+ const method = init[Symbol.iterator];
938+ // eslint-disable-next-line no-eq-null, eqeqeq
939+ if (method == null) {
940+ // Record<ByteString, ByteString>
941+ result.push(...Object.entries(init));
942+ } else {
943+ if (typeof method !== 'function') {
944+ throw new TypeError('Header pairs must be iterable');
945+ }
946+
947+ // Sequence<sequence<ByteString>>
948+ // Note: per spec we have to first exhaust the lists then process them
949+ result = [...init]
950+ .map(pair => {
951+ if (
952+ typeof pair !== 'object' || util.types.isBoxedPrimitive(pair)
953+ ) {
954+ throw new TypeError('Each header pair must be an iterable object');
955+ }
956+
957+ return [...pair];
958+ }).map(pair => {
959+ if (pair.length !== 2) {
960+ throw new TypeError('Each header pair must be a name/value tuple');
961+ }
962+
963+ return [...pair];
964+ });
965+ }
966+ } else {
967+ throw new TypeError('Failed to construct \'Headers\': The provided value is not of type \'(sequence<sequence<ByteString>> or record<ByteString, ByteString>)');
968+ }
969+
970+ // Validate and lowercase
971+ result =
972+ result.length > 0 ?
973+ result.map(([name, value]) => {
974+ validateHeaderName(name);
975+ validateHeaderValue(name, String(value));
976+ return [String(name).toLowerCase(), String(value)];
977+ }) :
978+ undefined;
979+
980+ super(result);
981+
982+ // Returning a Proxy that will lowercase key names, validate parameters and sort keys
983+ // eslint-disable-next-line no-constructor-return
984+ return new Proxy(this, {
985+ get(target, p, receiver) {
986+ switch (p) {
987+ case 'append':
988+ case 'set':
989+ return (name, value) => {
990+ validateHeaderName(name);
991+ validateHeaderValue(name, String(value));
992+ return URLSearchParams.prototype[p].call(
993+ target,
994+ String(name).toLowerCase(),
995+ String(value)
996+ );
997+ };
998+
999+ case 'delete':
1000+ case 'has':
1001+ case 'getAll':
1002+ return name => {
1003+ validateHeaderName(name);
1004+ return URLSearchParams.prototype[p].call(
1005+ target,
1006+ String(name).toLowerCase()
1007+ );
1008+ };
1009+
1010+ case 'keys':
1011+ return () => {
1012+ target.sort();
1013+ return new Set(URLSearchParams.prototype.keys.call(target)).keys();
1014+ };
1015+
1016+ default:
1017+ return Reflect.get(target, p, receiver);
1018+ }
1019+ }
1020+ /* c8 ignore next */
1021+ });
1022+ }
1023+
1024+ get [Symbol.toStringTag]() {
1025+ return this.constructor.name;
1026+ }
1027+
1028+ toString() {
1029+ return Object.prototype.toString.call(this);
1030+ }
1031+
1032+ get(name) {
1033+ const values = this.getAll(name);
1034+ if (values.length === 0) {
1035+ return null;
1036+ }
1037+
1038+ let value = values.join(', ');
1039+ if (/^content-encoding$/i.test(name)) {
1040+ value = value.toLowerCase();
1041+ }
1042+
1043+ return value;
1044+ }
1045+
1046+ forEach(callback, thisArg = undefined) {
1047+ for (const name of this.keys()) {
1048+ Reflect.apply(callback, thisArg, [this.get(name), name, this]);
1049+ }
1050+ }
1051+
1052+ * values() {
1053+ for (const name of this.keys()) {
1054+ yield this.get(name);
1055+ }
1056+ }
1057+
1058+ /**
1059+ * @type {() => IterableIterator<[string, string]>}
1060+ */
1061+ * entries() {
1062+ for (const name of this.keys()) {
1063+ yield [name, this.get(name)];
1064+ }
1065+ }
1066+
1067+ [Symbol.iterator]() {
1068+ return this.entries();
1069+ }
1070+
1071+ /**
1072+ * Node-fetch non-spec method
1073+ * returning all headers and their values as array
1074+ * @returns {Record<string, string[]>}
1075+ */
1076+ raw() {
1077+ return [...this.keys()].reduce((result, key) => {
1078+ result[key] = this.getAll(key);
1079+ return result;
1080+ }, {});
1081+ }
1082+
1083+ /**
1084+ * For better console.log(headers) and also to convert Headers into Node.js Request compatible format
1085+ */
1086+ [Symbol.for('nodejs.util.inspect.custom')]() {
1087+ return [...this.keys()].reduce((result, key) => {
1088+ const values = this.getAll(key);
1089+ // Http.request() only supports string as Host header.
1090+ // This hack makes specifying custom Host header possible.
1091+ if (key === 'host') {
1092+ result[key] = values[0];
1093+ } else {
1094+ result[key] = values.length > 1 ? values : values[0];
1095+ }
1096+
1097+ return result;
1098+ }, {});
1099+ }
1100+}
1101+
1102+/**
1103+ * Re-shaping object for Web IDL tests
1104+ * Only need to do it for overridden methods
1105+ */
1106+Object.defineProperties(
1107+ Headers.prototype,
1108+ ['get', 'entries', 'forEach', 'values'].reduce((result, property) => {
1109+ result[property] = {enumerable: true};
1110+ return result;
1111+ }, {})
1112+);
1113+
1114+/**
1115+ * Create a Headers object from an http.IncomingMessage.rawHeaders, ignoring those that do
1116+ * not conform to HTTP grammar productions.
1117+ * @param {import('http').IncomingMessage['rawHeaders']} headers
1118+ */
1119+function fromRawHeaders(headers = []) {
1120+ return new Headers(
1121+ headers
1122+ // Split into pairs
1123+ .reduce((result, value, index, array) => {
1124+ if (index % 2 === 0) {
1125+ result.push(array.slice(index, index + 2));
1126+ }
1127+
1128+ return result;
1129+ }, [])
1130+ .filter(([name, value]) => {
1131+ try {
1132+ validateHeaderName(name);
1133+ validateHeaderValue(name, String(value));
1134+ return true;
1135+ } catch {
1136+ return false;
1137+ }
1138+ })
1139+
1140+ );
1141+}
1142+
1143+const redirectStatus = new Set([301, 302, 303, 307, 308]);
1144+
1145+/**
1146+ * Redirect code matching
1147+ *
1148+ * @param {number} code - Status code
1149+ * @return {boolean}
1150+ */
1151+const isRedirect = code => {
1152+ return redirectStatus.has(code);
1153+};
1154+
1155+/**
1156+ * Response.js
1157+ *
1158+ * Response class provides content decoding
1159+ */
1160+
1161+const INTERNALS$1 = Symbol('Response internals');
1162+
1163+/**
1164+ * Response class
1165+ *
1166+ * Ref: https://fetch.spec.whatwg.org/#response-class
1167+ *
1168+ * @param Stream body Readable stream
1169+ * @param Object opts Response options
1170+ * @return Void
1171+ */
1172+class Response extends Body {
1173+ constructor(body = null, options = {}) {
1174+ super(body, options);
1175+
1176+ // eslint-disable-next-line no-eq-null, eqeqeq, no-negated-condition
1177+ const status = options.status != null ? options.status : 200;
1178+
1179+ const headers = new Headers(options.headers);
1180+
1181+ if (body !== null && !headers.has('Content-Type')) {
1182+ const contentType = extractContentType(body, this);
1183+ if (contentType) {
1184+ headers.append('Content-Type', contentType);
1185+ }
1186+ }
1187+
1188+ this[INTERNALS$1] = {
1189+ type: 'default',
1190+ url: options.url,
1191+ status,
1192+ statusText: options.statusText || '',
1193+ headers,
1194+ counter: options.counter,
1195+ highWaterMark: options.highWaterMark
1196+ };
1197+ }
1198+
1199+ get type() {
1200+ return this[INTERNALS$1].type;
1201+ }
1202+
1203+ get url() {
1204+ return this[INTERNALS$1].url || '';
1205+ }
1206+
1207+ get status() {
1208+ return this[INTERNALS$1].status;
1209+ }
1210+
1211+ /**
1212+ * Convenience property representing if the request ended normally
1213+ */
1214+ get ok() {
1215+ return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
1216+ }
1217+
1218+ get redirected() {
1219+ return this[INTERNALS$1].counter > 0;
1220+ }
1221+
1222+ get statusText() {
1223+ return this[INTERNALS$1].statusText;
1224+ }
1225+
1226+ get headers() {
1227+ return this[INTERNALS$1].headers;
1228+ }
1229+
1230+ get highWaterMark() {
1231+ return this[INTERNALS$1].highWaterMark;
1232+ }
1233+
1234+ /**
1235+ * Clone this response
1236+ *
1237+ * @return Response
1238+ */
1239+ clone() {
1240+ return new Response(clone(this, this.highWaterMark), {
1241+ type: this.type,
1242+ url: this.url,
1243+ status: this.status,
1244+ statusText: this.statusText,
1245+ headers: this.headers,
1246+ ok: this.ok,
1247+ redirected: this.redirected,
1248+ size: this.size,
1249+ highWaterMark: this.highWaterMark
1250+ });
1251+ }
1252+
1253+ /**
1254+ * @param {string} url The URL that the new response is to originate from.
1255+ * @param {number} status An optional status code for the response (e.g., 302.)
1256+ * @returns {Response} A Response object.
1257+ */
1258+ static redirect(url, status = 302) {
1259+ if (!isRedirect(status)) {
1260+ throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');
1261+ }
1262+
1263+ return new Response(null, {
1264+ headers: {
1265+ location: new URL(url).toString()
1266+ },
1267+ status
1268+ });
1269+ }
1270+
1271+ static error() {
1272+ const response = new Response(null, {status: 0, statusText: ''});
1273+ response[INTERNALS$1].type = 'error';
1274+ return response;
1275+ }
1276+
1277+ get [Symbol.toStringTag]() {
1278+ return 'Response';
1279+ }
1280+}
1281+
1282+Object.defineProperties(Response.prototype, {
1283+ type: {enumerable: true},
1284+ url: {enumerable: true},
1285+ status: {enumerable: true},
1286+ ok: {enumerable: true},
1287+ redirected: {enumerable: true},
1288+ statusText: {enumerable: true},
1289+ headers: {enumerable: true},
1290+ clone: {enumerable: true}
1291+});
1292+
1293+const getSearch = parsedURL => {
1294+ if (parsedURL.search) {
1295+ return parsedURL.search;
1296+ }
1297+
1298+ const lastOffset = parsedURL.href.length - 1;
1299+ const hash = parsedURL.hash || (parsedURL.href[lastOffset] === '#' ? '#' : '');
1300+ return parsedURL.href[lastOffset - hash.length] === '?' ? '?' : '';
1301+};
1302+
1303+/**
1304+ * @external URL
1305+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/URL|URL}
1306+ */
1307+
1308+/**
1309+ * @module utils/referrer
1310+ * @private
1311+ */
1312+
1313+/**
1314+ * @see {@link https://w3c.github.io/webappsec-referrer-policy/#strip-url|Referrer Policy §8.4. Strip url for use as a referrer}
1315+ * @param {string} URL
1316+ * @param {boolean} [originOnly=false]
1317+ */
1318+function stripURLForUseAsAReferrer(url, originOnly = false) {
1319+ // 1. If url is null, return no referrer.
1320+ if (url == null) { // eslint-disable-line no-eq-null, eqeqeq
1321+ return 'no-referrer';
1322+ }
1323+
1324+ url = new URL(url);
1325+
1326+ // 2. If url's scheme is a local scheme, then return no referrer.
1327+ if (/^(about|blob|data):$/.test(url.protocol)) {
1328+ return 'no-referrer';
1329+ }
1330+
1331+ // 3. Set url's username to the empty string.
1332+ url.username = '';
1333+
1334+ // 4. Set url's password to null.
1335+ // Note: `null` appears to be a mistake as this actually results in the password being `"null"`.
1336+ url.password = '';
1337+
1338+ // 5. Set url's fragment to null.
1339+ // Note: `null` appears to be a mistake as this actually results in the fragment being `"#null"`.
1340+ url.hash = '';
1341+
1342+ // 6. If the origin-only flag is true, then:
1343+ if (originOnly) {
1344+ // 6.1. Set url's path to null.
1345+ // Note: `null` appears to be a mistake as this actually results in the path being `"/null"`.
1346+ url.pathname = '';
1347+
1348+ // 6.2. Set url's query to null.
1349+ // Note: `null` appears to be a mistake as this actually results in the query being `"?null"`.
1350+ url.search = '';
1351+ }
1352+
1353+ // 7. Return url.
1354+ return url;
1355+}
1356+
1357+/**
1358+ * @see {@link https://w3c.github.io/webappsec-referrer-policy/#enumdef-referrerpolicy|enum ReferrerPolicy}
1359+ */
1360+const ReferrerPolicy = new Set([
1361+ '',
1362+ 'no-referrer',
1363+ 'no-referrer-when-downgrade',
1364+ 'same-origin',
1365+ 'origin',
1366+ 'strict-origin',
1367+ 'origin-when-cross-origin',
1368+ 'strict-origin-when-cross-origin',
1369+ 'unsafe-url'
1370+]);
1371+
1372+/**
1373+ * @see {@link https://w3c.github.io/webappsec-referrer-policy/#default-referrer-policy|default referrer policy}
1374+ */
1375+const DEFAULT_REFERRER_POLICY = 'strict-origin-when-cross-origin';
1376+
1377+/**
1378+ * @see {@link https://w3c.github.io/webappsec-referrer-policy/#referrer-policies|Referrer Policy §3. Referrer Policies}
1379+ * @param {string} referrerPolicy
1380+ * @returns {string} referrerPolicy
1381+ */
1382+function validateReferrerPolicy(referrerPolicy) {
1383+ if (!ReferrerPolicy.has(referrerPolicy)) {
1384+ throw new TypeError(`Invalid referrerPolicy: ${referrerPolicy}`);
1385+ }
1386+
1387+ return referrerPolicy;
1388+}
1389+
1390+/**
1391+ * @see {@link https://w3c.github.io/webappsec-secure-contexts/#is-origin-trustworthy|Referrer Policy §3.2. Is origin potentially trustworthy?}
1392+ * @param {external:URL} url
1393+ * @returns `true`: "Potentially Trustworthy", `false`: "Not Trustworthy"
1394+ */
1395+function isOriginPotentiallyTrustworthy(url) {
1396+ // 1. If origin is an opaque origin, return "Not Trustworthy".
1397+ // Not applicable
1398+
1399+ // 2. Assert: origin is a tuple origin.
1400+ // Not for implementations
1401+
1402+ // 3. If origin's scheme is either "https" or "wss", return "Potentially Trustworthy".
1403+ if (/^(http|ws)s:$/.test(url.protocol)) {
1404+ return true;
1405+ }
1406+
1407+ // 4. If origin's host component matches one of the CIDR notations 127.0.0.0/8 or ::1/128 [RFC4632], return "Potentially Trustworthy".
1408+ const hostIp = url.host.replace(/(^\[)|(]$)/g, '');
1409+ const hostIPVersion = net.isIP(hostIp);
1410+
1411+ if (hostIPVersion === 4 && /^127\./.test(hostIp)) {
1412+ return true;
1413+ }
1414+
1415+ if (hostIPVersion === 6 && /^(((0+:){7})|(::(0+:){0,6}))0*1$/.test(hostIp)) {
1416+ return true;
1417+ }
1418+
1419+ // 5. If origin's host component is "localhost" or falls within ".localhost", and the user agent conforms to the name resolution rules in [let-localhost-be-localhost], return "Potentially Trustworthy".
1420+ // We are returning FALSE here because we cannot ensure conformance to
1421+ // let-localhost-be-loalhost (https://tools.ietf.org/html/draft-west-let-localhost-be-localhost)
1422+ if (/^(.+\.)*localhost$/.test(url.host)) {
1423+ return false;
1424+ }
1425+
1426+ // 6. If origin's scheme component is file, return "Potentially Trustworthy".
1427+ if (url.protocol === 'file:') {
1428+ return true;
1429+ }
1430+
1431+ // 7. If origin's scheme component is one which the user agent considers to be authenticated, return "Potentially Trustworthy".
1432+ // Not supported
1433+
1434+ // 8. If origin has been configured as a trustworthy origin, return "Potentially Trustworthy".
1435+ // Not supported
1436+
1437+ // 9. Return "Not Trustworthy".
1438+ return false;
1439+}
1440+
1441+/**
1442+ * @see {@link https://w3c.github.io/webappsec-secure-contexts/#is-url-trustworthy|Referrer Policy §3.3. Is url potentially trustworthy?}
1443+ * @param {external:URL} url
1444+ * @returns `true`: "Potentially Trustworthy", `false`: "Not Trustworthy"
1445+ */
1446+function isUrlPotentiallyTrustworthy(url) {
1447+ // 1. If url is "about:blank" or "about:srcdoc", return "Potentially Trustworthy".
1448+ if (/^about:(blank|srcdoc)$/.test(url)) {
1449+ return true;
1450+ }
1451+
1452+ // 2. If url's scheme is "data", return "Potentially Trustworthy".
1453+ if (url.protocol === 'data:') {
1454+ return true;
1455+ }
1456+
1457+ // Note: The origin of blob: and filesystem: URLs is the origin of the context in which they were
1458+ // created. Therefore, blobs created in a trustworthy origin will themselves be potentially
1459+ // trustworthy.
1460+ if (/^(blob|filesystem):$/.test(url.protocol)) {
1461+ return true;
1462+ }
1463+
1464+ // 3. Return the result of executing §3.2 Is origin potentially trustworthy? on url's origin.
1465+ return isOriginPotentiallyTrustworthy(url);
1466+}
1467+
1468+/**
1469+ * Modifies the referrerURL to enforce any extra security policy considerations.
1470+ * @see {@link https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer|Referrer Policy §8.3. Determine request's Referrer}, step 7
1471+ * @callback module:utils/referrer~referrerURLCallback
1472+ * @param {external:URL} referrerURL
1473+ * @returns {external:URL} modified referrerURL
1474+ */
1475+
1476+/**
1477+ * Modifies the referrerOrigin to enforce any extra security policy considerations.
1478+ * @see {@link https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer|Referrer Policy §8.3. Determine request's Referrer}, step 7
1479+ * @callback module:utils/referrer~referrerOriginCallback
1480+ * @param {external:URL} referrerOrigin
1481+ * @returns {external:URL} modified referrerOrigin
1482+ */
1483+
1484+/**
1485+ * @see {@link https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer|Referrer Policy §8.3. Determine request's Referrer}
1486+ * @param {Request} request
1487+ * @param {object} o
1488+ * @param {module:utils/referrer~referrerURLCallback} o.referrerURLCallback
1489+ * @param {module:utils/referrer~referrerOriginCallback} o.referrerOriginCallback
1490+ * @returns {external:URL} Request's referrer
1491+ */
1492+function determineRequestsReferrer(request, {referrerURLCallback, referrerOriginCallback} = {}) {
1493+ // There are 2 notes in the specification about invalid pre-conditions. We return null, here, for
1494+ // these cases:
1495+ // > Note: If request's referrer is "no-referrer", Fetch will not call into this algorithm.
1496+ // > Note: If request's referrer policy is the empty string, Fetch will not call into this
1497+ // > algorithm.
1498+ if (request.referrer === 'no-referrer' || request.referrerPolicy === '') {
1499+ return null;
1500+ }
1501+
1502+ // 1. Let policy be request's associated referrer policy.
1503+ const policy = request.referrerPolicy;
1504+
1505+ // 2. Let environment be request's client.
1506+ // not applicable to node.js
1507+
1508+ // 3. Switch on request's referrer:
1509+ if (request.referrer === 'about:client') {
1510+ return 'no-referrer';
1511+ }
1512+
1513+ // "a URL": Let referrerSource be request's referrer.
1514+ const referrerSource = request.referrer;
1515+
1516+ // 4. Let request's referrerURL be the result of stripping referrerSource for use as a referrer.
1517+ let referrerURL = stripURLForUseAsAReferrer(referrerSource);
1518+
1519+ // 5. Let referrerOrigin be the result of stripping referrerSource for use as a referrer, with the
1520+ // origin-only flag set to true.
1521+ let referrerOrigin = stripURLForUseAsAReferrer(referrerSource, true);
1522+
1523+ // 6. If the result of serializing referrerURL is a string whose length is greater than 4096, set
1524+ // referrerURL to referrerOrigin.
1525+ if (referrerURL.toString().length > 4096) {
1526+ referrerURL = referrerOrigin;
1527+ }
1528+
1529+ // 7. The user agent MAY alter referrerURL or referrerOrigin at this point to enforce arbitrary
1530+ // policy considerations in the interests of minimizing data leakage. For example, the user
1531+ // agent could strip the URL down to an origin, modify its host, replace it with an empty
1532+ // string, etc.
1533+ if (referrerURLCallback) {
1534+ referrerURL = referrerURLCallback(referrerURL);
1535+ }
1536+
1537+ if (referrerOriginCallback) {
1538+ referrerOrigin = referrerOriginCallback(referrerOrigin);
1539+ }
1540+
1541+ // 8.Execute the statements corresponding to the value of policy:
1542+ const currentURL = new URL(request.url);
1543+
1544+ switch (policy) {
1545+ case 'no-referrer':
1546+ return 'no-referrer';
1547+
1548+ case 'origin':
1549+ return referrerOrigin;
1550+
1551+ case 'unsafe-url':
1552+ return referrerURL;
1553+
1554+ case 'strict-origin':
1555+ // 1. If referrerURL is a potentially trustworthy URL and request's current URL is not a
1556+ // potentially trustworthy URL, then return no referrer.
1557+ if (isUrlPotentiallyTrustworthy(referrerURL) && !isUrlPotentiallyTrustworthy(currentURL)) {
1558+ return 'no-referrer';
1559+ }
1560+
1561+ // 2. Return referrerOrigin.
1562+ return referrerOrigin.toString();
1563+
1564+ case 'strict-origin-when-cross-origin':
1565+ // 1. If the origin of referrerURL and the origin of request's current URL are the same, then
1566+ // return referrerURL.
1567+ if (referrerURL.origin === currentURL.origin) {
1568+ return referrerURL;
1569+ }
1570+
1571+ // 2. If referrerURL is a potentially trustworthy URL and request's current URL is not a
1572+ // potentially trustworthy URL, then return no referrer.
1573+ if (isUrlPotentiallyTrustworthy(referrerURL) && !isUrlPotentiallyTrustworthy(currentURL)) {
1574+ return 'no-referrer';
1575+ }
1576+
1577+ // 3. Return referrerOrigin.
1578+ return referrerOrigin;
1579+
1580+ case 'same-origin':
1581+ // 1. If the origin of referrerURL and the origin of request's current URL are the same, then
1582+ // return referrerURL.
1583+ if (referrerURL.origin === currentURL.origin) {
1584+ return referrerURL;
1585+ }
1586+
1587+ // 2. Return no referrer.
1588+ return 'no-referrer';
1589+
1590+ case 'origin-when-cross-origin':
1591+ // 1. If the origin of referrerURL and the origin of request's current URL are the same, then
1592+ // return referrerURL.
1593+ if (referrerURL.origin === currentURL.origin) {
1594+ return referrerURL;
1595+ }
1596+
1597+ // Return referrerOrigin.
1598+ return referrerOrigin;
1599+
1600+ case 'no-referrer-when-downgrade':
1601+ // 1. If referrerURL is a potentially trustworthy URL and request's current URL is not a
1602+ // potentially trustworthy URL, then return no referrer.
1603+ if (isUrlPotentiallyTrustworthy(referrerURL) && !isUrlPotentiallyTrustworthy(currentURL)) {
1604+ return 'no-referrer';
1605+ }
1606+
1607+ // 2. Return referrerURL.
1608+ return referrerURL;
1609+
1610+ default:
1611+ throw new TypeError(`Invalid referrerPolicy: ${policy}`);
1612+ }
1613+}
1614+
1615+/**
1616+ * @see {@link https://w3c.github.io/webappsec-referrer-policy/#parse-referrer-policy-from-header|Referrer Policy §8.1. Parse a referrer policy from a Referrer-Policy header}
1617+ * @param {Headers} headers Response headers
1618+ * @returns {string} policy
1619+ */
1620+function parseReferrerPolicyFromHeader(headers) {
1621+ // 1. Let policy-tokens be the result of extracting header list values given `Referrer-Policy`
1622+ // and response’s header list.
1623+ const policyTokens = (headers.get('referrer-policy') || '').split(/[,\s]+/);
1624+
1625+ // 2. Let policy be the empty string.
1626+ let policy = '';
1627+
1628+ // 3. For each token in policy-tokens, if token is a referrer policy and token is not the empty
1629+ // string, then set policy to token.
1630+ // Note: This algorithm loops over multiple policy values to allow deployment of new policy
1631+ // values with fallbacks for older user agents, as described in § 11.1 Unknown Policy Values.
1632+ for (const token of policyTokens) {
1633+ if (token && ReferrerPolicy.has(token)) {
1634+ policy = token;
1635+ }
1636+ }
1637+
1638+ // 4. Return policy.
1639+ return policy;
1640+}
1641+
1642+const INTERNALS = Symbol('Request internals');
1643+
1644+/**
1645+ * Check if `obj` is an instance of Request.
1646+ *
1647+ * @param {*} obj
1648+ * @return {boolean}
1649+ */
1650+const isRequest = object => {
1651+ return (
1652+ typeof object === 'object' &&
1653+ typeof object[INTERNALS] === 'object'
1654+ );
1655+};
1656+
1657+/**
1658+ * Request class
1659+ *
1660+ * Ref: https://fetch.spec.whatwg.org/#request-class
1661+ *
1662+ * @param Mixed input Url or Request instance
1663+ * @param Object init Custom options
1664+ * @return Void
1665+ */
1666+class Request extends Body {
1667+ constructor(input, init = {}) {
1668+ let parsedURL;
1669+
1670+ // Normalize input and force URL to be encoded as UTF-8 (https://github.com/node-fetch/node-fetch/issues/245)
1671+ if (isRequest(input)) {
1672+ parsedURL = new URL(input.url);
1673+ } else {
1674+ parsedURL = new URL(input);
1675+ input = {};
1676+ }
1677+
1678+ if (parsedURL.username !== '' || parsedURL.password !== '') {
1679+ throw new TypeError(`${parsedURL} is an url with embedded credentails.`);
1680+ }
1681+
1682+ let method = init.method || input.method || 'GET';
1683+ method = method.toUpperCase();
1684+
1685+ // eslint-disable-next-line no-eq-null, eqeqeq
1686+ if (((init.body != null || isRequest(input)) && input.body !== null) &&
1687+ (method === 'GET' || method === 'HEAD')) {
1688+ throw new TypeError('Request with GET/HEAD method cannot have body');
1689+ }
1690+
1691+ const inputBody = init.body ?
1692+ init.body :
1693+ (isRequest(input) && input.body !== null ?
1694+ clone(input) :
1695+ null);
1696+
1697+ super(inputBody, {
1698+ size: init.size || input.size || 0
1699+ });
1700+
1701+ const headers = new Headers(init.headers || input.headers || {});
1702+
1703+ if (inputBody !== null && !headers.has('Content-Type')) {
1704+ const contentType = extractContentType(inputBody, this);
1705+ if (contentType) {
1706+ headers.set('Content-Type', contentType);
1707+ }
1708+ }
1709+
1710+ let signal = isRequest(input) ?
1711+ input.signal :
1712+ null;
1713+ if ('signal' in init) {
1714+ signal = init.signal;
1715+ }
1716+
1717+ // eslint-disable-next-line no-eq-null, eqeqeq
1718+ if (signal != null && !isAbortSignal(signal)) {
1719+ throw new TypeError('Expected signal to be an instanceof AbortSignal or EventTarget');
1720+ }
1721+
1722+ // §5.4, Request constructor steps, step 15.1
1723+ // eslint-disable-next-line no-eq-null, eqeqeq
1724+ let referrer = init.referrer == null ? input.referrer : init.referrer;
1725+ if (referrer === '') {
1726+ // §5.4, Request constructor steps, step 15.2
1727+ referrer = 'no-referrer';
1728+ } else if (referrer) {
1729+ // §5.4, Request constructor steps, step 15.3.1, 15.3.2
1730+ const parsedReferrer = new URL(referrer);
1731+ // §5.4, Request constructor steps, step 15.3.3, 15.3.4
1732+ referrer = /^about:(\/\/)?client$/.test(parsedReferrer) ? 'client' : parsedReferrer;
1733+ } else {
1734+ referrer = undefined;
1735+ }
1736+
1737+ this[INTERNALS] = {
1738+ method,
1739+ redirect: init.redirect || input.redirect || 'follow',
1740+ headers,
1741+ parsedURL,
1742+ signal,
1743+ referrer
1744+ };
1745+
1746+ // Node-fetch-only options
1747+ this.follow = init.follow === undefined ? (input.follow === undefined ? 20 : input.follow) : init.follow;
1748+ this.compress = init.compress === undefined ? (input.compress === undefined ? true : input.compress) : init.compress;
1749+ this.counter = init.counter || input.counter || 0;
1750+ this.agent = init.agent || input.agent;
1751+ this.highWaterMark = init.highWaterMark || input.highWaterMark || 16384;
1752+ this.insecureHTTPParser = init.insecureHTTPParser || input.insecureHTTPParser || false;
1753+
1754+ // §5.4, Request constructor steps, step 16.
1755+ // Default is empty string per https://fetch.spec.whatwg.org/#concept-request-referrer-policy
1756+ this.referrerPolicy = init.referrerPolicy || input.referrerPolicy || '';
1757+ }
1758+
1759+ get method() {
1760+ return this[INTERNALS].method;
1761+ }
1762+
1763+ get url() {
1764+ return url.format(this[INTERNALS].parsedURL);
1765+ }
1766+
1767+ get headers() {
1768+ return this[INTERNALS].headers;
1769+ }
1770+
1771+ get redirect() {
1772+ return this[INTERNALS].redirect;
1773+ }
1774+
1775+ get signal() {
1776+ return this[INTERNALS].signal;
1777+ }
1778+
1779+ // https://fetch.spec.whatwg.org/#dom-request-referrer
1780+ get referrer() {
1781+ if (this[INTERNALS].referrer === 'no-referrer') {
1782+ return '';
1783+ }
1784+
1785+ if (this[INTERNALS].referrer === 'client') {
1786+ return 'about:client';
1787+ }
1788+
1789+ if (this[INTERNALS].referrer) {
1790+ return this[INTERNALS].referrer.toString();
1791+ }
1792+
1793+ return undefined;
1794+ }
1795+
1796+ get referrerPolicy() {
1797+ return this[INTERNALS].referrerPolicy;
1798+ }
1799+
1800+ set referrerPolicy(referrerPolicy) {
1801+ this[INTERNALS].referrerPolicy = validateReferrerPolicy(referrerPolicy);
1802+ }
1803+
1804+ /**
1805+ * Clone this request
1806+ *
1807+ * @return Request
1808+ */
1809+ clone() {
1810+ return new Request(this);
1811+ }
1812+
1813+ get [Symbol.toStringTag]() {
1814+ return 'Request';
1815+ }
1816+}
1817+
1818+Object.defineProperties(Request.prototype, {
1819+ method: {enumerable: true},
1820+ url: {enumerable: true},
1821+ headers: {enumerable: true},
1822+ redirect: {enumerable: true},
1823+ clone: {enumerable: true},
1824+ signal: {enumerable: true},
1825+ referrer: {enumerable: true},
1826+ referrerPolicy: {enumerable: true}
1827+});
1828+
1829+/**
1830+ * Convert a Request to Node.js http request options.
1831+ *
1832+ * @param Request A Request instance
1833+ * @return Object The options object to be passed to http.request
1834+ */
1835+const getNodeRequestOptions = request => {
1836+ const {parsedURL} = request[INTERNALS];
1837+ const headers = new Headers(request[INTERNALS].headers);
1838+
1839+ // Fetch step 1.3
1840+ if (!headers.has('Accept')) {
1841+ headers.set('Accept', '*/*');
1842+ }
1843+
1844+ // HTTP-network-or-cache fetch steps 2.4-2.7
1845+ let contentLengthValue = null;
1846+ if (request.body === null && /^(post|put)$/i.test(request.method)) {
1847+ contentLengthValue = '0';
1848+ }
1849+
1850+ if (request.body !== null) {
1851+ const totalBytes = getTotalBytes(request);
1852+ // Set Content-Length if totalBytes is a number (that is not NaN)
1853+ if (typeof totalBytes === 'number' && !Number.isNaN(totalBytes)) {
1854+ contentLengthValue = String(totalBytes);
1855+ }
1856+ }
1857+
1858+ if (contentLengthValue) {
1859+ headers.set('Content-Length', contentLengthValue);
1860+ }
1861+
1862+ // 4.1. Main fetch, step 2.6
1863+ // > If request's referrer policy is the empty string, then set request's referrer policy to the
1864+ // > default referrer policy.
1865+ if (request.referrerPolicy === '') {
1866+ request.referrerPolicy = DEFAULT_REFERRER_POLICY;
1867+ }
1868+
1869+ // 4.1. Main fetch, step 2.7
1870+ // > If request's referrer is not "no-referrer", set request's referrer to the result of invoking
1871+ // > determine request's referrer.
1872+ if (request.referrer && request.referrer !== 'no-referrer') {
1873+ request[INTERNALS].referrer = determineRequestsReferrer(request);
1874+ } else {
1875+ request[INTERNALS].referrer = 'no-referrer';
1876+ }
1877+
1878+ // 4.5. HTTP-network-or-cache fetch, step 6.9
1879+ // > If httpRequest's referrer is a URL, then append `Referer`/httpRequest's referrer, serialized
1880+ // > and isomorphic encoded, to httpRequest's header list.
1881+ if (request[INTERNALS].referrer instanceof URL) {
1882+ headers.set('Referer', request.referrer);
1883+ }
1884+
1885+ // HTTP-network-or-cache fetch step 2.11
1886+ if (!headers.has('User-Agent')) {
1887+ headers.set('User-Agent', 'node-fetch');
1888+ }
1889+
1890+ // HTTP-network-or-cache fetch step 2.15
1891+ if (request.compress && !headers.has('Accept-Encoding')) {
1892+ headers.set('Accept-Encoding', 'gzip,deflate,br');
1893+ }
1894+
1895+ let {agent} = request;
1896+ if (typeof agent === 'function') {
1897+ agent = agent(parsedURL);
1898+ }
1899+
1900+ if (!headers.has('Connection') && !agent) {
1901+ headers.set('Connection', 'close');
1902+ }
1903+
1904+ // HTTP-network fetch step 4.2
1905+ // chunked encoding is handled by Node.js
1906+
1907+ const search = getSearch(parsedURL);
1908+
1909+ // Pass the full URL directly to request(), but overwrite the following
1910+ // options:
1911+ const options = {
1912+ // Overwrite search to retain trailing ? (issue #776)
1913+ path: parsedURL.pathname + search,
1914+ // The following options are not expressed in the URL
1915+ method: request.method,
1916+ headers: headers[Symbol.for('nodejs.util.inspect.custom')](),
1917+ insecureHTTPParser: request.insecureHTTPParser,
1918+ agent
1919+ };
1920+
1921+ return {
1922+ parsedURL,
1923+ options
1924+ };
1925+};
1926+
1927+/**
1928+ * AbortError interface for cancelled requests
1929+ */
1930+class AbortError extends FetchBaseError {
1931+ constructor(message, type = 'aborted') {
1932+ super(message, type);
1933+ }
1934+}
1935+
1936+/**
1937+ * Index.js
1938+ *
1939+ * a request API compatible with window.fetch
1940+ *
1941+ * All spec algorithm step numbers are based on https://fetch.spec.whatwg.org/commit-snapshots/ae716822cb3a61843226cd090eefc6589446c1d2/.
1942+ */
1943+
1944+const supportedSchemas = new Set(['data:', 'http:', 'https:']);
1945+
1946+/**
1947+ * Fetch function
1948+ *
1949+ * @param {string | URL | import('./request').default} url - Absolute url or Request instance
1950+ * @param {*} [options_] - Fetch options
1951+ * @return {Promise<import('./response').default>}
1952+ */
1953+async function fetch(url, options_) {
1954+ return new Promise((resolve, reject) => {
1955+ // Build request object
1956+ const request = new Request(url, options_);
1957+ const {parsedURL, options} = getNodeRequestOptions(request);
1958+ if (!supportedSchemas.has(parsedURL.protocol)) {
1959+ throw new TypeError(`node-fetch cannot load ${url}. URL scheme "${parsedURL.protocol.replace(/:$/, '')}" is not supported.`);
1960+ }
1961+
1962+ if (parsedURL.protocol === 'data:') {
1963+ const data = dataUriToBuffer(request.url);
1964+ const response = new Response(data, {headers: {'Content-Type': data.typeFull}});
1965+ resolve(response);
1966+ return;
1967+ }
1968+
1969+ // Wrap http.request into fetch
1970+ const send = (parsedURL.protocol === 'https:' ? https__default["default"] : http__default["default"]).request;
1971+ const {signal} = request;
1972+ let response = null;
1973+
1974+ const abort = () => {
1975+ const error = new AbortError('The operation was aborted.');
1976+ reject(error);
1977+ if (request.body && request.body instanceof Stream__default["default"].Readable) {
1978+ request.body.destroy(error);
1979+ }
1980+
1981+ if (!response || !response.body) {
1982+ return;
1983+ }
1984+
1985+ response.body.emit('error', error);
1986+ };
1987+
1988+ if (signal && signal.aborted) {
1989+ abort();
1990+ return;
1991+ }
1992+
1993+ const abortAndFinalize = () => {
1994+ abort();
1995+ finalize();
1996+ };
1997+
1998+ // Send request
1999+ const request_ = send(parsedURL, options);
2000+
2001+ if (signal) {
2002+ signal.addEventListener('abort', abortAndFinalize);
2003+ }
2004+
2005+ const finalize = () => {
2006+ request_.abort();
2007+ if (signal) {
2008+ signal.removeEventListener('abort', abortAndFinalize);
2009+ }
2010+ };
2011+
2012+ request_.on('error', error => {
2013+ reject(new FetchError(`request to ${request.url} failed, reason: ${error.message}`, 'system', error));
2014+ finalize();
2015+ });
2016+
2017+ fixResponseChunkedTransferBadEnding(request_, error => {
2018+ response.body.destroy(error);
2019+ });
2020+
2021+ /* c8 ignore next 18 */
2022+ if (process.version < 'v14') {
2023+ // Before Node.js 14, pipeline() does not fully support async iterators and does not always
2024+ // properly handle when the socket close/end events are out of order.
2025+ request_.on('socket', s => {
2026+ let endedWithEventsCount;
2027+ s.prependListener('end', () => {
2028+ endedWithEventsCount = s._eventsCount;
2029+ });
2030+ s.prependListener('close', hadError => {
2031+ // if end happened before close but the socket didn't emit an error, do it now
2032+ if (response && endedWithEventsCount < s._eventsCount && !hadError) {
2033+ const error = new Error('Premature close');
2034+ error.code = 'ERR_STREAM_PREMATURE_CLOSE';
2035+ response.body.emit('error', error);
2036+ }
2037+ });
2038+ });
2039+ }
2040+
2041+ request_.on('response', response_ => {
2042+ request_.setTimeout(0);
2043+ const headers = fromRawHeaders(response_.rawHeaders);
2044+
2045+ // HTTP fetch step 5
2046+ if (isRedirect(response_.statusCode)) {
2047+ // HTTP fetch step 5.2
2048+ const location = headers.get('Location');
2049+
2050+ // HTTP fetch step 5.3
2051+ const locationURL = location === null ? null : new URL(location, request.url);
2052+
2053+ // HTTP fetch step 5.5
2054+ switch (request.redirect) {
2055+ case 'error':
2056+ reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));
2057+ finalize();
2058+ return;
2059+ case 'manual':
2060+ // Node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
2061+ if (locationURL !== null) {
2062+ headers.set('Location', locationURL);
2063+ }
2064+
2065+ break;
2066+ case 'follow': {
2067+ // HTTP-redirect fetch step 2
2068+ if (locationURL === null) {
2069+ break;
2070+ }
2071+
2072+ // HTTP-redirect fetch step 5
2073+ if (request.counter >= request.follow) {
2074+ reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
2075+ finalize();
2076+ return;
2077+ }
2078+
2079+ // HTTP-redirect fetch step 6 (counter increment)
2080+ // Create a new Request object.
2081+ const requestOptions = {
2082+ headers: new Headers(request.headers),
2083+ follow: request.follow,
2084+ counter: request.counter + 1,
2085+ agent: request.agent,
2086+ compress: request.compress,
2087+ method: request.method,
2088+ body: clone(request),
2089+ signal: request.signal,
2090+ size: request.size,
2091+ referrer: request.referrer,
2092+ referrerPolicy: request.referrerPolicy
2093+ };
2094+
2095+ // HTTP-redirect fetch step 9
2096+ if (response_.statusCode !== 303 && request.body && options_.body instanceof Stream__default["default"].Readable) {
2097+ reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
2098+ finalize();
2099+ return;
2100+ }
2101+
2102+ // HTTP-redirect fetch step 11
2103+ if (response_.statusCode === 303 || ((response_.statusCode === 301 || response_.statusCode === 302) && request.method === 'POST')) {
2104+ requestOptions.method = 'GET';
2105+ requestOptions.body = undefined;
2106+ requestOptions.headers.delete('content-length');
2107+ }
2108+
2109+ // HTTP-redirect fetch step 14
2110+ const responseReferrerPolicy = parseReferrerPolicyFromHeader(headers);
2111+ if (responseReferrerPolicy) {
2112+ requestOptions.referrerPolicy = responseReferrerPolicy;
2113+ }
2114+
2115+ // HTTP-redirect fetch step 15
2116+ resolve(fetch(new Request(locationURL, requestOptions)));
2117+ finalize();
2118+ return;
2119+ }
2120+
2121+ default:
2122+ return reject(new TypeError(`Redirect option '${request.redirect}' is not a valid value of RequestRedirect`));
2123+ }
2124+ }
2125+
2126+ // Prepare response
2127+ if (signal) {
2128+ response_.once('end', () => {
2129+ signal.removeEventListener('abort', abortAndFinalize);
2130+ });
2131+ }
2132+
2133+ let body = Stream.pipeline(response_, new Stream.PassThrough(), reject);
2134+ // see https://github.com/nodejs/node/pull/29376
2135+ if (process.version < 'v12.10') {
2136+ response_.on('aborted', abortAndFinalize);
2137+ }
2138+
2139+ const responseOptions = {
2140+ url: request.url,
2141+ status: response_.statusCode,
2142+ statusText: response_.statusMessage,
2143+ headers,
2144+ size: request.size,
2145+ counter: request.counter,
2146+ highWaterMark: request.highWaterMark
2147+ };
2148+
2149+ // HTTP-network fetch step 12.1.1.3
2150+ const codings = headers.get('Content-Encoding');
2151+
2152+ // HTTP-network fetch step 12.1.1.4: handle content codings
2153+
2154+ // in following scenarios we ignore compression support
2155+ // 1. compression support is disabled
2156+ // 2. HEAD request
2157+ // 3. no Content-Encoding header
2158+ // 4. no content response (204)
2159+ // 5. content not modified response (304)
2160+ if (!request.compress || request.method === 'HEAD' || codings === null || response_.statusCode === 204 || response_.statusCode === 304) {
2161+ response = new Response(body, responseOptions);
2162+ resolve(response);
2163+ return;
2164+ }
2165+
2166+ // For Node v6+
2167+ // Be less strict when decoding compressed responses, since sometimes
2168+ // servers send slightly invalid responses that are still accepted
2169+ // by common browsers.
2170+ // Always using Z_SYNC_FLUSH is what cURL does.
2171+ const zlibOptions = {
2172+ flush: zlib__default["default"].Z_SYNC_FLUSH,
2173+ finishFlush: zlib__default["default"].Z_SYNC_FLUSH
2174+ };
2175+
2176+ // For gzip
2177+ if (codings === 'gzip' || codings === 'x-gzip') {
2178+ body = Stream.pipeline(body, zlib__default["default"].createGunzip(zlibOptions), reject);
2179+ response = new Response(body, responseOptions);
2180+ resolve(response);
2181+ return;
2182+ }
2183+
2184+ // For deflate
2185+ if (codings === 'deflate' || codings === 'x-deflate') {
2186+ // Handle the infamous raw deflate response from old servers
2187+ // a hack for old IIS and Apache servers
2188+ const raw = Stream.pipeline(response_, new Stream.PassThrough(), reject);
2189+ raw.once('data', chunk => {
2190+ // See http://stackoverflow.com/questions/37519828
2191+ body = (chunk[0] & 0x0F) === 0x08 ? Stream.pipeline(body, zlib__default["default"].createInflate(), reject) : Stream.pipeline(body, zlib__default["default"].createInflateRaw(), reject);
2192+
2193+ response = new Response(body, responseOptions);
2194+ resolve(response);
2195+ });
2196+ return;
2197+ }
2198+
2199+ // For br
2200+ if (codings === 'br') {
2201+ body = Stream.pipeline(body, zlib__default["default"].createBrotliDecompress(), reject);
2202+ response = new Response(body, responseOptions);
2203+ resolve(response);
2204+ return;
2205+ }
2206+
2207+ // Otherwise, use response as-is
2208+ response = new Response(body, responseOptions);
2209+ resolve(response);
2210+ });
2211+
2212+ writeToStream(request_, request);
2213+ });
2214+}
2215+
2216+function fixResponseChunkedTransferBadEnding(request, errorCallback) {
2217+ const LAST_CHUNK = Buffer.from('0\r\n\r\n');
2218+
2219+ let isChunkedTransfer = false;
2220+ let properLastChunkReceived = false;
2221+ let previousChunk;
2222+
2223+ request.on('response', response => {
2224+ const {headers} = response;
2225+ isChunkedTransfer = headers['transfer-encoding'] === 'chunked' && !headers['content-length'];
2226+ });
2227+
2228+ request.on('socket', socket => {
2229+ const onSocketClose = () => {
2230+ if (isChunkedTransfer && !properLastChunkReceived) {
2231+ const error = new Error('Premature close');
2232+ error.code = 'ERR_STREAM_PREMATURE_CLOSE';
2233+ errorCallback(error);
2234+ }
2235+ };
2236+
2237+ socket.prependListener('close', onSocketClose);
2238+
2239+ request.on('abort', () => {
2240+ socket.removeListener('close', onSocketClose);
2241+ });
2242+
2243+ socket.on('data', buf => {
2244+ properLastChunkReceived = Buffer.compare(buf.slice(-5), LAST_CHUNK) === 0;
2245+
2246+ // Sometimes final 0-length chunk and end of message code are in separate packets
2247+ if (!properLastChunkReceived && previousChunk) {
2248+ properLastChunkReceived = (
2249+ Buffer.compare(previousChunk.slice(-3), LAST_CHUNK.slice(0, 3)) === 0 &&
2250+ Buffer.compare(buf.slice(-2), LAST_CHUNK.slice(3)) === 0
2251+ );
2252+ }
2253+
2254+ previousChunk = buf;
2255+ });
2256+ });
2257+}
2258+
2259+exports.AbortError = AbortError;
2260+exports.FetchError = FetchError;
2261+exports.File = File;
2262+exports.FormData = FormData;
2263+exports.Headers = Headers;
2264+exports.Request = Request;
2265+exports.Response = Response;
2266+exports.fetch = fetch;
2267+exports.isRedirect = isRedirect;
2268+/* eslint-enable */
2269+//# sourceMappingURL=index-3a548b1a.js.map
prybar_assets/nodejs/node_modules/@replit/node-fetch/index-3a548b1a.js.mapnew file+1
@@ -0,0 +1 @@
1+{"version":3,"file":"index-3a548b1a.js","sources":["../node_modules/data-uri-to-buffer/dist/index.js","../node_modules/fetch-blob/streams.cjs","../node_modules/fetch-blob/index.js","../node_modules/fetch-blob/file.js","../node_modules/formdata-polyfill/esm.min.js","../node_modules/node-fetch/src/errors/base.js","../node_modules/node-fetch/src/errors/fetch-error.js","../node_modules/node-fetch/src/utils/is.js","../node_modules/node-fetch/src/body.js","../node_modules/node-fetch/src/headers.js","../node_modules/node-fetch/src/utils/is-redirect.js","../node_modules/node-fetch/src/response.js","../node_modules/node-fetch/src/utils/get-search.js","../node_modules/node-fetch/src/utils/referrer.js","../node_modules/node-fetch/src/request.js","../node_modules/node-fetch/src/errors/abort-error.js","../node_modules/node-fetch/src/index.js"],"sourcesContent":["/**\n * Returns a `Buffer` instance from the given data URI `uri`.\n *\n * @param {String} uri Data URI to turn into a Buffer instance\n * @returns {Buffer} Buffer instance from Data URI\n * @api public\n */\nexport function dataUriToBuffer(uri) {\n if (!/^data:/i.test(uri)) {\n throw new TypeError('`uri` does not appear to be a Data URI (must begin with \"data:\")');\n }\n // strip newlines\n uri = uri.replace(/\\r?\\n/g, '');\n // split the URI up into the \"metadata\" and the \"data\" portions\n const firstComma = uri.indexOf(',');\n if (firstComma === -1 || firstComma <= 4) {\n throw new TypeError('malformed data: URI');\n }\n // remove the \"data:\" scheme and parse the metadata\n const meta = uri.substring(5, firstComma).split(';');\n let charset = '';\n let base64 = false;\n const type = meta[0] || 'text/plain';\n let typeFull = type;\n for (let i = 1; i < meta.length; i++) {\n if (meta[i] === 'base64') {\n base64 = true;\n }\n else {\n typeFull += `;${meta[i]}`;\n if (meta[i].indexOf('charset=') === 0) {\n charset = meta[i].substring(8);\n }\n }\n }\n // defaults to US-ASCII only if type is not provided\n if (!meta[0] && !charset.length) {\n typeFull += ';charset=US-ASCII';\n charset = 'US-ASCII';\n }\n // get the encoded data portion and decode URI-encoded chars\n const encoding = base64 ? 'base64' : 'ascii';\n const data = unescape(uri.substring(firstComma + 1));\n const buffer = Buffer.from(data, encoding);\n // set `.type` and `.typeFull` properties to MIME type\n buffer.type = type;\n buffer.typeFull = typeFull;\n // set the `.charset` property\n buffer.charset = charset;\n return buffer;\n}\nexport default dataUriToBuffer;\n//# sourceMappingURL=index.js.map","/* c8 ignore start */\n// 64 KiB (same size chrome slice theirs blob into Uint8array's)\nconst POOL_SIZE = 65536;\n\nif (!globalThis.ReadableStream) {\n // try {\n // Object.assign(globalThis, require('stream/web'))\n // } catch (error) {\n\t\t// TODO: Remove when only supporting node >= 16.5.0\n Object.assign(globalThis, require('web-streams-polyfill/dist/ponyfill.es2018.js'))\n // }\n}\n\ntry {\n const {Blob} = require('buffer')\n if (Blob && !Blob.prototype.stream) {\n\t\tBlob.prototype.stream = function name(params) {\n\t\t\tlet position = 0;\n\t\t\tconst blob = this;\n\n\t\t\treturn new ReadableStream({\n\t\t\t\ttype: 'bytes',\n\t\t\t\tasync pull(ctrl) {\n\t\t\t\t\tconst chunk = blob.slice(position, Math.min(blob.size, position + POOL_SIZE));\n\t\t\t\t\tconst buffer = await chunk.arrayBuffer();\n\t\t\t\t\tposition += buffer.byteLength;\n\t\t\t\t\tctrl.enqueue(new Uint8Array(buffer))\n\n\t\t\t\t\tif (position === blob.size) {\n\t\t\t\t\t\tctrl.close()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n} catch (error) {}\n/* c8 ignore end */\n","\n// TODO (jimmywarting): in the feature use conditional loading with top level await (requires 14.x)\n// Node has recently added whatwg stream into core\n\nimport './streams.cjs';\n\n/** @typedef {import('buffer').Blob} NodeBlob} */\n\n// 64 KiB (same size chrome slice theirs blob into Uint8array's)\nconst POOL_SIZE = 65536;\n\n/** @param {(Blob | NodeBlob | Uint8Array)[]} parts */\nasync function * toIterator (parts, clone = true) {\n\tfor (let part of parts) {\n\t\tif ('stream' in part) {\n\t\t\tyield * part.stream();\n\t\t} else if (ArrayBuffer.isView(part)) {\n\t\t\tif (clone) {\n\t\t\t\tlet position = part.byteOffset;\n\t\t\t\tlet end = part.byteOffset + part.byteLength;\n\t\t\t\twhile (position !== end) {\n\t\t\t\t\tconst size = Math.min(end - position, POOL_SIZE);\n\t\t\t\t\tconst chunk = part.buffer.slice(position, position + size);\n\t\t\t\t\tposition += chunk.byteLength;\n\t\t\t\t\tyield new Uint8Array(chunk);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tyield part;\n\t\t\t}\n\t\t} else {\n\t\t\t/* c8 ignore start */\n\t\t\t// For blobs that have arrayBuffer but no stream method (nodes buffer.Blob)\n\t\t\tlet position = 0;\n\t\t\twhile (position !== part.size) {\n\t\t\t\tconst chunk = part.slice(position, Math.min(part.size, position + POOL_SIZE));\n\t\t\t\tconst buffer = await chunk.arrayBuffer();\n\t\t\t\tposition += buffer.byteLength;\n\t\t\t\tyield new Uint8Array(buffer);\n\t\t\t}\n\t\t\t/* c8 ignore end */\n\t\t}\n\t}\n}\n\nconst _Blob = class Blob {\n\n\t/** @type {Array.<(Blob|Uint8Array)>} */\n\t#parts = [];\n\t#type = '';\n\t#size = 0;\n\n\t/**\n\t * The Blob() constructor returns a new Blob object. The content\n\t * of the blob consists of the concatenation of the values given\n\t * in the parameter array.\n\t *\n\t * @param {*} blobParts\n\t * @param {{ type?: string }} [options]\n\t */\n\tconstructor(blobParts = [], options = {}) {\n\t\tlet size = 0;\n\n\t\tconst parts = blobParts.map(element => {\n\t\t\tlet part;\n\t\t\tif (ArrayBuffer.isView(element)) {\n\t\t\t\tpart = new Uint8Array(element.buffer.slice(element.byteOffset, element.byteOffset + element.byteLength));\n\t\t\t} else if (element instanceof ArrayBuffer) {\n\t\t\t\tpart = new Uint8Array(element.slice(0));\n\t\t\t} else if (element instanceof Blob) {\n\t\t\t\tpart = element;\n\t\t\t} else {\n\t\t\t\tpart = new TextEncoder().encode(element);\n\t\t\t}\n\n\t\t\tsize += ArrayBuffer.isView(part) ? part.byteLength : part.size;\n\t\t\treturn part;\n\t\t});\n\n\t\tconst type = options.type === undefined ? '' : String(options.type);\n\n\t\tthis.#type = /[^\\u0020-\\u007E]/.test(type) ? '' : type;\n\t\tthis.#size = size;\n\t\tthis.#parts = parts;\n\t}\n\n\t/**\n\t * The Blob interface's size property returns the\n\t * size of the Blob in bytes.\n\t */\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\t/**\n\t * The type property of a Blob object returns the MIME type of the file.\n\t */\n\tget type() {\n\t\treturn this.#type;\n\t}\n\n\t/**\n\t * The text() method in the Blob interface returns a Promise\n\t * that resolves with a string containing the contents of\n\t * the blob, interpreted as UTF-8.\n\t *\n\t * @return {Promise<string>}\n\t */\n\tasync text() {\n\t\t// More optimized than using this.arrayBuffer()\n\t\t// that requires twice as much ram\n\t\tconst decoder = new TextDecoder();\n\t\tlet str = '';\n\t\tfor await (let part of toIterator(this.#parts, false)) {\n\t\t\tstr += decoder.decode(part, { stream: true });\n\t\t}\n\t\t// Remaining\n\t\tstr += decoder.decode();\n\t\treturn str;\n\t}\n\n\t/**\n\t * The arrayBuffer() method in the Blob interface returns a\n\t * Promise that resolves with the contents of the blob as\n\t * binary data contained in an ArrayBuffer.\n\t *\n\t * @return {Promise<ArrayBuffer>}\n\t */\n\tasync arrayBuffer() {\n\t\t// Easier way... Just a unnecessary overhead\n\t\t// const view = new Uint8Array(this.size);\n\t\t// await this.stream().getReader({mode: 'byob'}).read(view);\n\t\t// return view.buffer;\n\n\t\tconst data = new Uint8Array(this.size);\n\t\tlet offset = 0;\n\t\tfor await (const chunk of toIterator(this.#parts, false)) {\n\t\t\tdata.set(chunk, offset);\n\t\t\toffset += chunk.length;\n\t\t}\n\n\t\treturn data.buffer;\n\t}\n\n\tstream() {\n\t\tconst it = toIterator(this.#parts, true);\n\n\t\treturn new ReadableStream({\n\t\t\ttype: 'bytes',\n\t\t\tasync pull(ctrl) {\n\t\t\t\tconst chunk = await it.next();\n\t\t\t\tchunk.done ? ctrl.close() : ctrl.enqueue(chunk.value);\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t * The Blob interface's slice() method creates and returns a\n\t * new Blob object which contains data from a subset of the\n\t * blob on which it's called.\n\t *\n\t * @param {number} [start]\n\t * @param {number} [end]\n\t * @param {string} [type]\n\t */\n\tslice(start = 0, end = this.size, type = '') {\n\t\tconst {size} = this;\n\n\t\tlet relativeStart = start < 0 ? Math.max(size + start, 0) : Math.min(start, size);\n\t\tlet relativeEnd = end < 0 ? Math.max(size + end, 0) : Math.min(end, size);\n\n\t\tconst span = Math.max(relativeEnd - relativeStart, 0);\n\t\tconst parts = this.#parts;\n\t\tconst blobParts = [];\n\t\tlet added = 0;\n\n\t\tfor (const part of parts) {\n\t\t\t// don't add the overflow to new blobParts\n\t\t\tif (added >= span) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst size = ArrayBuffer.isView(part) ? part.byteLength : part.size;\n\t\t\tif (relativeStart && size <= relativeStart) {\n\t\t\t\t// Skip the beginning and change the relative\n\t\t\t\t// start & end position as we skip the unwanted parts\n\t\t\t\trelativeStart -= size;\n\t\t\t\trelativeEnd -= size;\n\t\t\t} else {\n\t\t\t\tlet chunk\n\t\t\t\tif (ArrayBuffer.isView(part)) {\n\t\t\t\t\tchunk = part.subarray(relativeStart, Math.min(size, relativeEnd));\n\t\t\t\t\tadded += chunk.byteLength\n\t\t\t\t} else {\n\t\t\t\t\tchunk = part.slice(relativeStart, Math.min(size, relativeEnd));\n\t\t\t\t\tadded += chunk.size\n\t\t\t\t}\n\t\t\t\tblobParts.push(chunk);\n\t\t\t\trelativeStart = 0; // All next sequential parts should start at 0\n\t\t\t}\n\t\t}\n\n\t\tconst blob = new Blob([], {type: String(type).toLowerCase()});\n\t\tblob.#size = span;\n\t\tblob.#parts = blobParts;\n\n\t\treturn blob;\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn 'Blob';\n\t}\n\n\tstatic [Symbol.hasInstance](object) {\n\t\treturn (\n\t\t\tobject &&\n\t\t\ttypeof object === 'object' &&\n\t\t\ttypeof object.constructor === 'function' &&\n\t\t\t(\n\t\t\t\ttypeof object.stream === 'function' ||\n\t\t\t\ttypeof object.arrayBuffer === 'function'\n\t\t\t) &&\n\t\t\t/^(Blob|File)$/.test(object[Symbol.toStringTag])\n\t\t);\n\t}\n}\n\nObject.defineProperties(_Blob.prototype, {\n\tsize: {enumerable: true},\n\ttype: {enumerable: true},\n\tslice: {enumerable: true}\n});\n\n/** @type {typeof globalThis.Blob} */\nexport const Blob = _Blob;\nexport default Blob;\n","import Blob from './index.js';\n\nconst _File = class File extends Blob {\n #lastModified = 0;\n #name = '';\n\n /**\n * @param {*[]} fileBits\n * @param {string} fileName\n * @param {{lastModified?: number, type?: string}} options\n */// @ts-ignore\n constructor(fileBits, fileName, options = {}) {\n if (arguments.length < 2) {\n throw new TypeError(`Failed to construct 'File': 2 arguments required, but only ${arguments.length} present.`);\n }\n super(fileBits, options);\n\n const modified = Number(options.lastModified);\n this.#lastModified = Number.isNaN(modified) ? Date.now() : modified\n this.#name = fileName;\n }\n\n get name() {\n return this.#name;\n }\n\n get lastModified() {\n return this.#lastModified;\n }\n\n get [Symbol.toStringTag]() {\n return \"File\";\n }\n}\n\n/** @type {typeof globalThis.File} */// @ts-ignore\nexport const File = _File;\nexport default File;\n","/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */\n\nimport C from 'fetch-blob'\nimport F from 'fetch-blob/file.js'\n\nvar {toStringTag:t,iterator:i,hasInstance:h}=Symbol,\nr=Math.random,\nm='append,set,get,getAll,delete,keys,values,entries,forEach,constructor'.split(','),\nf=(a,b,c)=>(a+='',/^(Blob|File)$/.test(b && b[t])?[(c=c!==void 0?c+'':b[t]=='File'?b.name:'blob',a),b.name!==c||b[t]=='blob'?new F([b],c,b):b]:[a,b+'']),\ne=(c,f)=>(f?c:c.replace(/\\r?\\n|\\r/g,'\\r\\n')).replace(/\\n/g,'%0A').replace(/\\r/g,'%0D').replace(/\"/g,'%22'),\nx=(n, a, e)=>{if(a.length<e){throw new TypeError(`Failed to execute '${n}' on 'FormData': ${e} arguments required, but only ${a.length} present.`)}}\n\nexport const File = F\n\n/** @type {typeof globalThis.FormData} */\nexport const FormData = class FormData {\n#d=[];\nconstructor(...a){if(a.length)throw new TypeError(`Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'.`)}\nget [t]() {return 'FormData'}\n[i](){return this.entries()}\nstatic [h](o) {return o&&typeof o==='object'&&o[t]==='FormData'&&!m.some(m=>typeof o[m]!='function')}\nappend(...a){x('append',arguments,2);this.#d.push(f(...a))}\ndelete(a){x('delete',arguments,1);a+='';this.#d=this.#d.filter(([b])=>b!==a)}\nget(a){x('get',arguments,1);a+='';for(var b=this.#d,l=b.length,c=0;c<l;c++)if(b[c][0]===a)return b[c][1];return null}\ngetAll(a,b){x('getAll',arguments,1);b=[];a+='';this.#d.forEach(c=>c[0]===a&&b.push(c[1]));return b}\nhas(a){x('has',arguments,1);a+='';return this.#d.some(b=>b[0]===a)}\nforEach(a,b){x('forEach',arguments,1);for(var [c,d]of this)a.call(b,d,c,this)}\nset(...a){x('set',arguments,2);var b=[],c=!0;a=f(...a);this.#d.forEach(d=>{d[0]===a[0]?c&&(c=!b.push(a)):b.push(d)});c&&b.push(a);this.#d=b}\n*entries(){yield*this.#d}\n*keys(){for(var[a]of this)yield a}\n*values(){for(var[,a]of this)yield a}}\n\n/** @param {FormData} F */\nexport function formDataToBlob (F,B=C){\nvar b=`${r()}${r()}`.replace(/\\./g, '').slice(-28).padStart(32, '-'),c=[],p=`--${b}\\r\\nContent-Disposition: form-data; name=\"`\nF.forEach((v,n)=>typeof v=='string'\n?c.push(p+e(n)+`\"\\r\\n\\r\\n${v.replace(/\\r(?!\\n)|(?<!\\r)\\n/g, '\\r\\n')}\\r\\n`)\n:c.push(p+e(n)+`\"; filename=\"${e(v.name, 1)}\"\\r\\nContent-Type: ${v.type||\"application/octet-stream\"}\\r\\n\\r\\n`, v, '\\r\\n'))\nc.push(`--${b}--`)\nreturn new B(c,{type:\"multipart/form-data; boundary=\"+b})}\n","export class FetchBaseError extends Error {\n\tconstructor(message, type) {\n\t\tsuper(message);\n\t\t// Hide custom error implementation details from end-users\n\t\tError.captureStackTrace(this, this.constructor);\n\n\t\tthis.type = type;\n\t}\n\n\tget name() {\n\t\treturn this.constructor.name;\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn this.constructor.name;\n\t}\n}\n","\nimport {FetchBaseError} from './base.js';\n\n/**\n * @typedef {{ address?: string, code: string, dest?: string, errno: number, info?: object, message: string, path?: string, port?: number, syscall: string}} SystemError\n*/\n\n/**\n * FetchError interface for operational errors\n */\nexport class FetchError extends FetchBaseError {\n\t/**\n\t * @param {string} message - Error message for human\n\t * @param {string} [type] - Error type for machine\n\t * @param {SystemError} [systemError] - For Node.js system error\n\t */\n\tconstructor(message, type, systemError) {\n\t\tsuper(message, type);\n\t\t// When err.type is `system`, err.erroredSysCall contains system error and err.code contains system error code\n\t\tif (systemError) {\n\t\t\t// eslint-disable-next-line no-multi-assign\n\t\t\tthis.code = this.errno = systemError.code;\n\t\t\tthis.erroredSysCall = systemError.syscall;\n\t\t}\n\t}\n}\n","/**\n * Is.js\n *\n * Object type checks.\n */\n\nconst NAME = Symbol.toStringTag;\n\n/**\n * Check if `obj` is a URLSearchParams object\n * ref: https://github.com/node-fetch/node-fetch/issues/296#issuecomment-307598143\n * @param {*} object - Object to check for\n * @return {boolean}\n */\nexport const isURLSearchParameters = object => {\n\treturn (\n\t\ttypeof object === 'object' &&\n\t\ttypeof object.append === 'function' &&\n\t\ttypeof object.delete === 'function' &&\n\t\ttypeof object.get === 'function' &&\n\t\ttypeof object.getAll === 'function' &&\n\t\ttypeof object.has === 'function' &&\n\t\ttypeof object.set === 'function' &&\n\t\ttypeof object.sort === 'function' &&\n\t\tobject[NAME] === 'URLSearchParams'\n\t);\n};\n\n/**\n * Check if `object` is a W3C `Blob` object (which `File` inherits from)\n * @param {*} object - Object to check for\n * @return {boolean}\n */\nexport const isBlob = object => {\n\treturn (\n\t\tobject &&\n\t\ttypeof object === 'object' &&\n\t\ttypeof object.arrayBuffer === 'function' &&\n\t\ttypeof object.type === 'string' &&\n\t\ttypeof object.stream === 'function' &&\n\t\ttypeof object.constructor === 'function' &&\n\t\t/^(Blob|File)$/.test(object[NAME])\n\t);\n};\n\n/**\n * Check if `obj` is an instance of AbortSignal.\n * @param {*} object - Object to check for\n * @return {boolean}\n */\nexport const isAbortSignal = object => {\n\treturn (\n\t\ttypeof object === 'object' && (\n\t\t\tobject[NAME] === 'AbortSignal' ||\n\t\t\tobject[NAME] === 'EventTarget'\n\t\t)\n\t);\n};\n","\n/**\n * Body.js\n *\n * Body interface provides common methods for Request and Response\n */\n\nimport Stream, {PassThrough} from 'node:stream';\nimport {types, deprecate} from 'node:util';\n\nimport Blob from 'fetch-blob';\nimport {FormData, formDataToBlob} from 'formdata-polyfill/esm.min.js';\n\nimport {FetchError} from './errors/fetch-error.js';\nimport {FetchBaseError} from './errors/base.js';\nimport {isBlob, isURLSearchParameters} from './utils/is.js';\n\nconst INTERNALS = Symbol('Body internals');\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nexport default class Body {\n\tconstructor(body, {\n\t\tsize = 0\n\t} = {}) {\n\t\tlet boundary = null;\n\n\t\tif (body === null) {\n\t\t\t// Body is undefined or null\n\t\t\tbody = null;\n\t\t} else if (isURLSearchParameters(body)) {\n\t\t\t// Body is a URLSearchParams\n\t\t\tbody = Buffer.from(body.toString());\n\t\t} else if (isBlob(body)) {\n\t\t\t// Body is blob\n\t\t} else if (Buffer.isBuffer(body)) {\n\t\t\t// Body is Buffer\n\t\t} else if (types.isAnyArrayBuffer(body)) {\n\t\t\t// Body is ArrayBuffer\n\t\t\tbody = Buffer.from(body);\n\t\t} else if (ArrayBuffer.isView(body)) {\n\t\t\t// Body is ArrayBufferView\n\t\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t\t} else if (body instanceof Stream) {\n\t\t\t// Body is stream\n\t\t} else if (body instanceof FormData) {\n\t\t\t// Body is FormData\n\t\t\tbody = formDataToBlob(body);\n\t\t\tboundary = body.type.split('=')[1];\n\t\t} else {\n\t\t\t// None of the above\n\t\t\t// coerce to string then buffer\n\t\t\tbody = Buffer.from(String(body));\n\t\t}\n\n\t\tlet stream = body;\n\n\t\tif (Buffer.isBuffer(body)) {\n\t\t\tstream = Stream.Readable.from(body);\n\t\t} else if (isBlob(body)) {\n\t\t\tstream = Stream.Readable.from(body.stream());\n\t\t}\n\n\t\tthis[INTERNALS] = {\n\t\t\tbody,\n\t\t\tstream,\n\t\t\tboundary,\n\t\t\tdisturbed: false,\n\t\t\terror: null\n\t\t};\n\t\tthis.size = size;\n\n\t\tif (body instanceof Stream) {\n\t\t\tbody.on('error', error_ => {\n\t\t\t\tconst error = error_ instanceof FetchBaseError ?\n\t\t\t\t\terror_ :\n\t\t\t\t\tnew FetchError(`Invalid response body while trying to fetch ${this.url}: ${error_.message}`, 'system', error_);\n\t\t\t\tthis[INTERNALS].error = error;\n\t\t\t});\n\t\t}\n\t}\n\n\tget body() {\n\t\treturn this[INTERNALS].stream;\n\t}\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t}\n\n\t/**\n\t * Decode response as ArrayBuffer\n\t *\n\t * @return Promise\n\t */\n\tasync arrayBuffer() {\n\t\tconst {buffer, byteOffset, byteLength} = await consumeBody(this);\n\t\treturn buffer.slice(byteOffset, byteOffset + byteLength);\n\t}\n\n\tasync formData() {\n\t\tconst ct = this.headers.get('content-type');\n\n\t\tif (ct.startsWith('application/x-www-form-urlencoded')) {\n\t\t\tconst formData = new FormData();\n\t\t\tconst parameters = new URLSearchParams(await this.text());\n\n\t\t\tfor (const [name, value] of parameters) {\n\t\t\t\tformData.append(name, value);\n\t\t\t}\n\n\t\t\treturn formData;\n\t\t}\n\n\t\tconst {toFormData} = await import('./utils/multipart-parser.js');\n\t\treturn toFormData(this.body, ct);\n\t}\n\n\t/**\n\t * Return raw response as Blob\n\t *\n\t * @return Promise\n\t */\n\tasync blob() {\n\t\tconst ct = (this.headers && this.headers.get('content-type')) || (this[INTERNALS].body && this[INTERNALS].body.type) || '';\n\t\tconst buf = await this.buffer();\n\n\t\treturn new Blob([buf], {\n\t\t\ttype: ct\n\t\t});\n\t}\n\n\t/**\n\t * Decode response as json\n\t *\n\t * @return Promise\n\t */\n\tasync json() {\n\t\tconst buffer = await consumeBody(this);\n\t\treturn JSON.parse(buffer.toString());\n\t}\n\n\t/**\n\t * Decode response as text\n\t *\n\t * @return Promise\n\t */\n\tasync text() {\n\t\tconst buffer = await consumeBody(this);\n\t\treturn buffer.toString();\n\t}\n\n\t/**\n\t * Decode response as buffer (non-spec api)\n\t *\n\t * @return Promise\n\t */\n\tbuffer() {\n\t\treturn consumeBody(this);\n\t}\n}\n\nBody.prototype.buffer = deprecate(Body.prototype.buffer, 'Please use \\'response.arrayBuffer()\\' instead of \\'response.buffer()\\'', 'node-fetch#buffer');\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: {enumerable: true},\n\tbodyUsed: {enumerable: true},\n\tarrayBuffer: {enumerable: true},\n\tblob: {enumerable: true},\n\tjson: {enumerable: true},\n\ttext: {enumerable: true}\n});\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return Promise\n */\nasync function consumeBody(data) {\n\tif (data[INTERNALS].disturbed) {\n\t\tthrow new TypeError(`body used already for: ${data.url}`);\n\t}\n\n\tdata[INTERNALS].disturbed = true;\n\n\tif (data[INTERNALS].error) {\n\t\tthrow data[INTERNALS].error;\n\t}\n\n\tconst {body} = data;\n\n\t// Body is null\n\tif (body === null) {\n\t\treturn Buffer.alloc(0);\n\t}\n\n\t/* c8 ignore next 3 */\n\tif (!(body instanceof Stream)) {\n\t\treturn Buffer.alloc(0);\n\t}\n\n\t// Body is stream\n\t// get ready to actually consume the body\n\tconst accum = [];\n\tlet accumBytes = 0;\n\n\ttry {\n\t\tfor await (const chunk of body) {\n\t\t\tif (data.size > 0 && accumBytes + chunk.length > data.size) {\n\t\t\t\tconst error = new FetchError(`content size at ${data.url} over limit: ${data.size}`, 'max-size');\n\t\t\t\tbody.destroy(error);\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t}\n\t} catch (error) {\n\t\tconst error_ = error instanceof FetchBaseError ? error : new FetchError(`Invalid response body while trying to fetch ${data.url}: ${error.message}`, 'system', error);\n\t\tthrow error_;\n\t}\n\n\tif (body.readableEnded === true || body._readableState.ended === true) {\n\t\ttry {\n\t\t\tif (accum.every(c => typeof c === 'string')) {\n\t\t\t\treturn Buffer.from(accum.join(''));\n\t\t\t}\n\n\t\t\treturn Buffer.concat(accum, accumBytes);\n\t\t} catch (error) {\n\t\t\tthrow new FetchError(`Could not create Buffer from response body for ${data.url}: ${error.message}`, 'system', error);\n\t\t}\n\t} else {\n\t\tthrow new FetchError(`Premature close of server response while trying to fetch ${data.url}`);\n\t}\n}\n\n/**\n * Clone body given Res/Req instance\n *\n * @param Mixed instance Response or Request instance\n * @param String highWaterMark highWaterMark for both PassThrough body streams\n * @return Mixed\n */\nexport const clone = (instance, highWaterMark) => {\n\tlet p1;\n\tlet p2;\n\tlet {body} = instance[INTERNALS];\n\n\t// Don't allow cloning a used body\n\tif (instance.bodyUsed) {\n\t\tthrow new Error('cannot clone body after it is used');\n\t}\n\n\t// Check that body is a stream and not form-data object\n\t// note: we can't clone the form-data object without having it as a dependency\n\tif ((body instanceof Stream) && (typeof body.getBoundary !== 'function')) {\n\t\t// Tee instance body\n\t\tp1 = new PassThrough({highWaterMark});\n\t\tp2 = new PassThrough({highWaterMark});\n\t\tbody.pipe(p1);\n\t\tbody.pipe(p2);\n\t\t// Set instance body to teed body and return the other teed body\n\t\tinstance[INTERNALS].stream = p1;\n\t\tbody = p2;\n\t}\n\n\treturn body;\n};\n\nconst getNonSpecFormDataBoundary = deprecate(\n\tbody => body.getBoundary(),\n\t'form-data doesn\\'t follow the spec and requires special treatment. Use alternative package',\n\t'https://github.com/node-fetch/node-fetch/issues/1167'\n);\n\n/**\n * Performs the operation \"extract a `Content-Type` value from |object|\" as\n * specified in the specification:\n * https://fetch.spec.whatwg.org/#concept-bodyinit-extract\n *\n * This function assumes that instance.body is present.\n *\n * @param {any} body Any options.body input\n * @returns {string | null}\n */\nexport const extractContentType = (body, request) => {\n\t// Body is null or undefined\n\tif (body === null) {\n\t\treturn null;\n\t}\n\n\t// Body is string\n\tif (typeof body === 'string') {\n\t\treturn 'text/plain;charset=UTF-8';\n\t}\n\n\t// Body is a URLSearchParams\n\tif (isURLSearchParameters(body)) {\n\t\treturn 'application/x-www-form-urlencoded;charset=UTF-8';\n\t}\n\n\t// Body is blob\n\tif (isBlob(body)) {\n\t\treturn body.type || null;\n\t}\n\n\t// Body is a Buffer (Buffer, ArrayBuffer or ArrayBufferView)\n\tif (Buffer.isBuffer(body) || types.isAnyArrayBuffer(body) || ArrayBuffer.isView(body)) {\n\t\treturn null;\n\t}\n\n\tif (body instanceof FormData) {\n\t\treturn `multipart/form-data; boundary=${request[INTERNALS].boundary}`;\n\t}\n\n\t// Detect form data input from form-data module\n\tif (body && typeof body.getBoundary === 'function') {\n\t\treturn `multipart/form-data;boundary=${getNonSpecFormDataBoundary(body)}`;\n\t}\n\n\t// Body is stream - can't really do much about this\n\tif (body instanceof Stream) {\n\t\treturn null;\n\t}\n\n\t// Body constructor defaults other things to string\n\treturn 'text/plain;charset=UTF-8';\n};\n\n/**\n * The Fetch Standard treats this as if \"total bytes\" is a property on the body.\n * For us, we have to explicitly get it with a function.\n *\n * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes\n *\n * @param {any} obj.body Body object from the Body instance.\n * @returns {number | null}\n */\nexport const getTotalBytes = request => {\n\tconst {body} = request[INTERNALS];\n\n\t// Body is null or undefined\n\tif (body === null) {\n\t\treturn 0;\n\t}\n\n\t// Body is Blob\n\tif (isBlob(body)) {\n\t\treturn body.size;\n\t}\n\n\t// Body is Buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn body.length;\n\t}\n\n\t// Detect form data input from form-data module\n\tif (body && typeof body.getLengthSync === 'function') {\n\t\treturn body.hasKnownLength && body.hasKnownLength() ? body.getLengthSync() : null;\n\t}\n\n\t// Body is stream\n\treturn null;\n};\n\n/**\n * Write a Body to a Node.js WritableStream (e.g. http.Request) object.\n *\n * @param {Stream.Writable} dest The stream to write to.\n * @param obj.body Body object from the Body instance.\n * @returns {void}\n */\nexport const writeToStream = (dest, {body}) => {\n\tif (body === null) {\n\t\t// Body is null\n\t\tdest.end();\n\t} else {\n\t\t// Body is stream\n\t\tbody.pipe(dest);\n\t}\n};\n","/**\n * Headers.js\n *\n * Headers class offers convenient helpers\n */\n\nimport {types} from 'node:util';\nimport http from 'node:http';\n\nconst validateHeaderName = typeof http.validateHeaderName === 'function' ?\n\thttp.validateHeaderName :\n\tname => {\n\t\tif (!/^[\\^`\\-\\w!#$%&'*+.|~]+$/.test(name)) {\n\t\t\tconst error = new TypeError(`Header name must be a valid HTTP token [${name}]`);\n\t\t\tObject.defineProperty(error, 'code', {value: 'ERR_INVALID_HTTP_TOKEN'});\n\t\t\tthrow error;\n\t\t}\n\t};\n\nconst validateHeaderValue = typeof http.validateHeaderValue === 'function' ?\n\thttp.validateHeaderValue :\n\t(name, value) => {\n\t\tif (/[^\\t\\u0020-\\u007E\\u0080-\\u00FF]/.test(value)) {\n\t\t\tconst error = new TypeError(`Invalid character in header content [\"${name}\"]`);\n\t\t\tObject.defineProperty(error, 'code', {value: 'ERR_INVALID_CHAR'});\n\t\t\tthrow error;\n\t\t}\n\t};\n\n/**\n * @typedef {Headers | Record<string, string> | Iterable<readonly [string, string]> | Iterable<Iterable<string>>} HeadersInit\n */\n\n/**\n * This Fetch API interface allows you to perform various actions on HTTP request and response headers.\n * These actions include retrieving, setting, adding to, and removing.\n * A Headers object has an associated header list, which is initially empty and consists of zero or more name and value pairs.\n * You can add to this using methods like append() (see Examples.)\n * In all methods of this interface, header names are matched by case-insensitive byte sequence.\n *\n */\nexport default class Headers extends URLSearchParams {\n\t/**\n\t * Headers class\n\t *\n\t * @constructor\n\t * @param {HeadersInit} [init] - Response headers\n\t */\n\tconstructor(init) {\n\t\t// Validate and normalize init object in [name, value(s)][]\n\t\t/** @type {string[][]} */\n\t\tlet result = [];\n\t\tif (init instanceof Headers) {\n\t\t\tconst raw = init.raw();\n\t\t\tfor (const [name, values] of Object.entries(raw)) {\n\t\t\t\tresult.push(...values.map(value => [name, value]));\n\t\t\t}\n\t\t} else if (init == null) { // eslint-disable-line no-eq-null, eqeqeq\n\t\t\t// No op\n\t\t} else if (typeof init === 'object' && !types.isBoxedPrimitive(init)) {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\t// eslint-disable-next-line no-eq-null, eqeqeq\n\t\t\tif (method == null) {\n\t\t\t\t// Record<ByteString, ByteString>\n\t\t\t\tresult.push(...Object.entries(init));\n\t\t\t} else {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// Sequence<sequence<ByteString>>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tresult = [...init]\n\t\t\t\t\t.map(pair => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof pair !== 'object' || types.isBoxedPrimitive(pair)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthrow new TypeError('Each header pair must be an iterable object');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [...pair];\n\t\t\t\t\t}).map(pair => {\n\t\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [...pair];\n\t\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Failed to construct \\'Headers\\': The provided value is not of type \\'(sequence<sequence<ByteString>> or record<ByteString, ByteString>)');\n\t\t}\n\n\t\t// Validate and lowercase\n\t\tresult =\n\t\t\tresult.length > 0 ?\n\t\t\t\tresult.map(([name, value]) => {\n\t\t\t\t\tvalidateHeaderName(name);\n\t\t\t\t\tvalidateHeaderValue(name, String(value));\n\t\t\t\t\treturn [String(name).toLowerCase(), String(value)];\n\t\t\t\t}) :\n\t\t\t\tundefined;\n\n\t\tsuper(result);\n\n\t\t// Returning a Proxy that will lowercase key names, validate parameters and sort keys\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn new Proxy(this, {\n\t\t\tget(target, p, receiver) {\n\t\t\t\tswitch (p) {\n\t\t\t\t\tcase 'append':\n\t\t\t\t\tcase 'set':\n\t\t\t\t\t\treturn (name, value) => {\n\t\t\t\t\t\t\tvalidateHeaderName(name);\n\t\t\t\t\t\t\tvalidateHeaderValue(name, String(value));\n\t\t\t\t\t\t\treturn URLSearchParams.prototype[p].call(\n\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\tString(name).toLowerCase(),\n\t\t\t\t\t\t\t\tString(value)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t};\n\n\t\t\t\t\tcase 'delete':\n\t\t\t\t\tcase 'has':\n\t\t\t\t\tcase 'getAll':\n\t\t\t\t\t\treturn name => {\n\t\t\t\t\t\t\tvalidateHeaderName(name);\n\t\t\t\t\t\t\treturn URLSearchParams.prototype[p].call(\n\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\tString(name).toLowerCase()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t};\n\n\t\t\t\t\tcase 'keys':\n\t\t\t\t\t\treturn () => {\n\t\t\t\t\t\t\ttarget.sort();\n\t\t\t\t\t\t\treturn new Set(URLSearchParams.prototype.keys.call(target)).keys();\n\t\t\t\t\t\t};\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn Reflect.get(target, p, receiver);\n\t\t\t\t}\n\t\t\t}\n\t\t\t/* c8 ignore next */\n\t\t});\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn this.constructor.name;\n\t}\n\n\ttoString() {\n\t\treturn Object.prototype.toString.call(this);\n\t}\n\n\tget(name) {\n\t\tconst values = this.getAll(name);\n\t\tif (values.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet value = values.join(', ');\n\t\tif (/^content-encoding$/i.test(name)) {\n\t\t\tvalue = value.toLowerCase();\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tforEach(callback, thisArg = undefined) {\n\t\tfor (const name of this.keys()) {\n\t\t\tReflect.apply(callback, thisArg, [this.get(name), name, this]);\n\t\t}\n\t}\n\n\t* values() {\n\t\tfor (const name of this.keys()) {\n\t\t\tyield this.get(name);\n\t\t}\n\t}\n\n\t/**\n\t * @type {() => IterableIterator<[string, string]>}\n\t */\n\t* entries() {\n\t\tfor (const name of this.keys()) {\n\t\t\tyield [name, this.get(name)];\n\t\t}\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.entries();\n\t}\n\n\t/**\n\t * Node-fetch non-spec method\n\t * returning all headers and their values as array\n\t * @returns {Record<string, string[]>}\n\t */\n\traw() {\n\t\treturn [...this.keys()].reduce((result, key) => {\n\t\t\tresult[key] = this.getAll(key);\n\t\t\treturn result;\n\t\t}, {});\n\t}\n\n\t/**\n\t * For better console.log(headers) and also to convert Headers into Node.js Request compatible format\n\t */\n\t[Symbol.for('nodejs.util.inspect.custom')]() {\n\t\treturn [...this.keys()].reduce((result, key) => {\n\t\t\tconst values = this.getAll(key);\n\t\t\t// Http.request() only supports string as Host header.\n\t\t\t// This hack makes specifying custom Host header possible.\n\t\t\tif (key === 'host') {\n\t\t\t\tresult[key] = values[0];\n\t\t\t} else {\n\t\t\t\tresult[key] = values.length > 1 ? values : values[0];\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}, {});\n\t}\n}\n\n/**\n * Re-shaping object for Web IDL tests\n * Only need to do it for overridden methods\n */\nObject.defineProperties(\n\tHeaders.prototype,\n\t['get', 'entries', 'forEach', 'values'].reduce((result, property) => {\n\t\tresult[property] = {enumerable: true};\n\t\treturn result;\n\t}, {})\n);\n\n/**\n * Create a Headers object from an http.IncomingMessage.rawHeaders, ignoring those that do\n * not conform to HTTP grammar productions.\n * @param {import('http').IncomingMessage['rawHeaders']} headers\n */\nexport function fromRawHeaders(headers = []) {\n\treturn new Headers(\n\t\theaders\n\t\t\t// Split into pairs\n\t\t\t.reduce((result, value, index, array) => {\n\t\t\t\tif (index % 2 === 0) {\n\t\t\t\t\tresult.push(array.slice(index, index + 2));\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}, [])\n\t\t\t.filter(([name, value]) => {\n\t\t\t\ttry {\n\t\t\t\t\tvalidateHeaderName(name);\n\t\t\t\t\tvalidateHeaderValue(name, String(value));\n\t\t\t\t\treturn true;\n\t\t\t\t} catch {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t})\n\n\t);\n}\n","const redirectStatus = new Set([301, 302, 303, 307, 308]);\n\n/**\n * Redirect code matching\n *\n * @param {number} code - Status code\n * @return {boolean}\n */\nexport const isRedirect = code => {\n\treturn redirectStatus.has(code);\n};\n","/**\n * Response.js\n *\n * Response class provides content decoding\n */\n\nimport Headers from './headers.js';\nimport Body, {clone, extractContentType} from './body.js';\nimport {isRedirect} from './utils/is-redirect.js';\n\nconst INTERNALS = Symbol('Response internals');\n\n/**\n * Response class\n *\n * Ref: https://fetch.spec.whatwg.org/#response-class\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nexport default class Response extends Body {\n\tconstructor(body = null, options = {}) {\n\t\tsuper(body, options);\n\n\t\t// eslint-disable-next-line no-eq-null, eqeqeq, no-negated-condition\n\t\tconst status = options.status != null ? options.status : 200;\n\n\t\tconst headers = new Headers(options.headers);\n\n\t\tif (body !== null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body, this);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS] = {\n\t\t\ttype: 'default',\n\t\t\turl: options.url,\n\t\t\tstatus,\n\t\t\tstatusText: options.statusText || '',\n\t\t\theaders,\n\t\t\tcounter: options.counter,\n\t\t\thighWaterMark: options.highWaterMark\n\t\t};\n\t}\n\n\tget type() {\n\t\treturn this[INTERNALS].type;\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS].status;\n\t}\n\n\t/**\n\t * Convenience property representing if the request ended normally\n\t */\n\tget ok() {\n\t\treturn this[INTERNALS].status >= 200 && this[INTERNALS].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS].headers;\n\t}\n\n\tget highWaterMark() {\n\t\treturn this[INTERNALS].highWaterMark;\n\t}\n\n\t/**\n\t * Clone this response\n\t *\n\t * @return Response\n\t */\n\tclone() {\n\t\treturn new Response(clone(this, this.highWaterMark), {\n\t\t\ttype: this.type,\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected,\n\t\t\tsize: this.size,\n\t\t\thighWaterMark: this.highWaterMark\n\t\t});\n\t}\n\n\t/**\n\t * @param {string} url The URL that the new response is to originate from.\n\t * @param {number} status An optional status code for the response (e.g., 302.)\n\t * @returns {Response} A Response object.\n\t */\n\tstatic redirect(url, status = 302) {\n\t\tif (!isRedirect(status)) {\n\t\t\tthrow new RangeError('Failed to execute \"redirect\" on \"response\": Invalid status code');\n\t\t}\n\n\t\treturn new Response(null, {\n\t\t\theaders: {\n\t\t\t\tlocation: new URL(url).toString()\n\t\t\t},\n\t\t\tstatus\n\t\t});\n\t}\n\n\tstatic error() {\n\t\tconst response = new Response(null, {status: 0, statusText: ''});\n\t\tresponse[INTERNALS].type = 'error';\n\t\treturn response;\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn 'Response';\n\t}\n}\n\nObject.defineProperties(Response.prototype, {\n\ttype: {enumerable: true},\n\turl: {enumerable: true},\n\tstatus: {enumerable: true},\n\tok: {enumerable: true},\n\tredirected: {enumerable: true},\n\tstatusText: {enumerable: true},\n\theaders: {enumerable: true},\n\tclone: {enumerable: true}\n});\n","export const getSearch = parsedURL => {\n\tif (parsedURL.search) {\n\t\treturn parsedURL.search;\n\t}\n\n\tconst lastOffset = parsedURL.href.length - 1;\n\tconst hash = parsedURL.hash || (parsedURL.href[lastOffset] === '#' ? '#' : '');\n\treturn parsedURL.href[lastOffset - hash.length] === '?' ? '?' : '';\n};\n","import {isIP} from 'net';\n\n/**\n * @external URL\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/URL|URL}\n */\n\n/**\n * @module utils/referrer\n * @private\n */\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#strip-url|Referrer Policy §8.4. Strip url for use as a referrer}\n * @param {string} URL\n * @param {boolean} [originOnly=false]\n */\nexport function stripURLForUseAsAReferrer(url, originOnly = false) {\n\t// 1. If url is null, return no referrer.\n\tif (url == null) { // eslint-disable-line no-eq-null, eqeqeq\n\t\treturn 'no-referrer';\n\t}\n\n\turl = new URL(url);\n\n\t// 2. If url's scheme is a local scheme, then return no referrer.\n\tif (/^(about|blob|data):$/.test(url.protocol)) {\n\t\treturn 'no-referrer';\n\t}\n\n\t// 3. Set url's username to the empty string.\n\turl.username = '';\n\n\t// 4. Set url's password to null.\n\t// Note: `null` appears to be a mistake as this actually results in the password being `\"null\"`.\n\turl.password = '';\n\n\t// 5. Set url's fragment to null.\n\t// Note: `null` appears to be a mistake as this actually results in the fragment being `\"#null\"`.\n\turl.hash = '';\n\n\t// 6. If the origin-only flag is true, then:\n\tif (originOnly) {\n\t\t// 6.1. Set url's path to null.\n\t\t// Note: `null` appears to be a mistake as this actually results in the path being `\"/null\"`.\n\t\turl.pathname = '';\n\n\t\t// 6.2. Set url's query to null.\n\t\t// Note: `null` appears to be a mistake as this actually results in the query being `\"?null\"`.\n\t\turl.search = '';\n\t}\n\n\t// 7. Return url.\n\treturn url;\n}\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#enumdef-referrerpolicy|enum ReferrerPolicy}\n */\nexport const ReferrerPolicy = new Set([\n\t'',\n\t'no-referrer',\n\t'no-referrer-when-downgrade',\n\t'same-origin',\n\t'origin',\n\t'strict-origin',\n\t'origin-when-cross-origin',\n\t'strict-origin-when-cross-origin',\n\t'unsafe-url'\n]);\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#default-referrer-policy|default referrer policy}\n */\nexport const DEFAULT_REFERRER_POLICY = 'strict-origin-when-cross-origin';\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#referrer-policies|Referrer Policy §3. Referrer Policies}\n * @param {string} referrerPolicy\n * @returns {string} referrerPolicy\n */\nexport function validateReferrerPolicy(referrerPolicy) {\n\tif (!ReferrerPolicy.has(referrerPolicy)) {\n\t\tthrow new TypeError(`Invalid referrerPolicy: ${referrerPolicy}`);\n\t}\n\n\treturn referrerPolicy;\n}\n\n/**\n * @see {@link https://w3c.github.io/webappsec-secure-contexts/#is-origin-trustworthy|Referrer Policy §3.2. Is origin potentially trustworthy?}\n * @param {external:URL} url\n * @returns `true`: \"Potentially Trustworthy\", `false`: \"Not Trustworthy\"\n */\nexport function isOriginPotentiallyTrustworthy(url) {\n\t// 1. If origin is an opaque origin, return \"Not Trustworthy\".\n\t// Not applicable\n\n\t// 2. Assert: origin is a tuple origin.\n\t// Not for implementations\n\n\t// 3. If origin's scheme is either \"https\" or \"wss\", return \"Potentially Trustworthy\".\n\tif (/^(http|ws)s:$/.test(url.protocol)) {\n\t\treturn true;\n\t}\n\n\t// 4. If origin's host component matches one of the CIDR notations 127.0.0.0/8 or ::1/128 [RFC4632], return \"Potentially Trustworthy\".\n\tconst hostIp = url.host.replace(/(^\\[)|(]$)/g, '');\n\tconst hostIPVersion = isIP(hostIp);\n\n\tif (hostIPVersion === 4 && /^127\\./.test(hostIp)) {\n\t\treturn true;\n\t}\n\n\tif (hostIPVersion === 6 && /^(((0+:){7})|(::(0+:){0,6}))0*1$/.test(hostIp)) {\n\t\treturn true;\n\t}\n\n\t// 5. If origin's host component is \"localhost\" or falls within \".localhost\", and the user agent conforms to the name resolution rules in [let-localhost-be-localhost], return \"Potentially Trustworthy\".\n\t// We are returning FALSE here because we cannot ensure conformance to\n\t// let-localhost-be-loalhost (https://tools.ietf.org/html/draft-west-let-localhost-be-localhost)\n\tif (/^(.+\\.)*localhost$/.test(url.host)) {\n\t\treturn false;\n\t}\n\n\t// 6. If origin's scheme component is file, return \"Potentially Trustworthy\".\n\tif (url.protocol === 'file:') {\n\t\treturn true;\n\t}\n\n\t// 7. If origin's scheme component is one which the user agent considers to be authenticated, return \"Potentially Trustworthy\".\n\t// Not supported\n\n\t// 8. If origin has been configured as a trustworthy origin, return \"Potentially Trustworthy\".\n\t// Not supported\n\n\t// 9. Return \"Not Trustworthy\".\n\treturn false;\n}\n\n/**\n * @see {@link https://w3c.github.io/webappsec-secure-contexts/#is-url-trustworthy|Referrer Policy §3.3. Is url potentially trustworthy?}\n * @param {external:URL} url\n * @returns `true`: \"Potentially Trustworthy\", `false`: \"Not Trustworthy\"\n */\nexport function isUrlPotentiallyTrustworthy(url) {\n\t// 1. If url is \"about:blank\" or \"about:srcdoc\", return \"Potentially Trustworthy\".\n\tif (/^about:(blank|srcdoc)$/.test(url)) {\n\t\treturn true;\n\t}\n\n\t// 2. If url's scheme is \"data\", return \"Potentially Trustworthy\".\n\tif (url.protocol === 'data:') {\n\t\treturn true;\n\t}\n\n\t// Note: The origin of blob: and filesystem: URLs is the origin of the context in which they were\n\t// created. Therefore, blobs created in a trustworthy origin will themselves be potentially\n\t// trustworthy.\n\tif (/^(blob|filesystem):$/.test(url.protocol)) {\n\t\treturn true;\n\t}\n\n\t// 3. Return the result of executing §3.2 Is origin potentially trustworthy? on url's origin.\n\treturn isOriginPotentiallyTrustworthy(url);\n}\n\n/**\n * Modifies the referrerURL to enforce any extra security policy considerations.\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer|Referrer Policy §8.3. Determine request's Referrer}, step 7\n * @callback module:utils/referrer~referrerURLCallback\n * @param {external:URL} referrerURL\n * @returns {external:URL} modified referrerURL\n */\n\n/**\n * Modifies the referrerOrigin to enforce any extra security policy considerations.\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer|Referrer Policy §8.3. Determine request's Referrer}, step 7\n * @callback module:utils/referrer~referrerOriginCallback\n * @param {external:URL} referrerOrigin\n * @returns {external:URL} modified referrerOrigin\n */\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer|Referrer Policy §8.3. Determine request's Referrer}\n * @param {Request} request\n * @param {object} o\n * @param {module:utils/referrer~referrerURLCallback} o.referrerURLCallback\n * @param {module:utils/referrer~referrerOriginCallback} o.referrerOriginCallback\n * @returns {external:URL} Request's referrer\n */\nexport function determineRequestsReferrer(request, {referrerURLCallback, referrerOriginCallback} = {}) {\n\t// There are 2 notes in the specification about invalid pre-conditions. We return null, here, for\n\t// these cases:\n\t// > Note: If request's referrer is \"no-referrer\", Fetch will not call into this algorithm.\n\t// > Note: If request's referrer policy is the empty string, Fetch will not call into this\n\t// > algorithm.\n\tif (request.referrer === 'no-referrer' || request.referrerPolicy === '') {\n\t\treturn null;\n\t}\n\n\t// 1. Let policy be request's associated referrer policy.\n\tconst policy = request.referrerPolicy;\n\n\t// 2. Let environment be request's client.\n\t// not applicable to node.js\n\n\t// 3. Switch on request's referrer:\n\tif (request.referrer === 'about:client') {\n\t\treturn 'no-referrer';\n\t}\n\n\t// \"a URL\": Let referrerSource be request's referrer.\n\tconst referrerSource = request.referrer;\n\n\t// 4. Let request's referrerURL be the result of stripping referrerSource for use as a referrer.\n\tlet referrerURL = stripURLForUseAsAReferrer(referrerSource);\n\n\t// 5. Let referrerOrigin be the result of stripping referrerSource for use as a referrer, with the\n\t// origin-only flag set to true.\n\tlet referrerOrigin = stripURLForUseAsAReferrer(referrerSource, true);\n\n\t// 6. If the result of serializing referrerURL is a string whose length is greater than 4096, set\n\t// referrerURL to referrerOrigin.\n\tif (referrerURL.toString().length > 4096) {\n\t\treferrerURL = referrerOrigin;\n\t}\n\n\t// 7. The user agent MAY alter referrerURL or referrerOrigin at this point to enforce arbitrary\n\t// policy considerations in the interests of minimizing data leakage. For example, the user\n\t// agent could strip the URL down to an origin, modify its host, replace it with an empty\n\t// string, etc.\n\tif (referrerURLCallback) {\n\t\treferrerURL = referrerURLCallback(referrerURL);\n\t}\n\n\tif (referrerOriginCallback) {\n\t\treferrerOrigin = referrerOriginCallback(referrerOrigin);\n\t}\n\n\t// 8.Execute the statements corresponding to the value of policy:\n\tconst currentURL = new URL(request.url);\n\n\tswitch (policy) {\n\t\tcase 'no-referrer':\n\t\t\treturn 'no-referrer';\n\n\t\tcase 'origin':\n\t\t\treturn referrerOrigin;\n\n\t\tcase 'unsafe-url':\n\t\t\treturn referrerURL;\n\n\t\tcase 'strict-origin':\n\t\t\t// 1. If referrerURL is a potentially trustworthy URL and request's current URL is not a\n\t\t\t// potentially trustworthy URL, then return no referrer.\n\t\t\tif (isUrlPotentiallyTrustworthy(referrerURL) && !isUrlPotentiallyTrustworthy(currentURL)) {\n\t\t\t\treturn 'no-referrer';\n\t\t\t}\n\n\t\t\t// 2. Return referrerOrigin.\n\t\t\treturn referrerOrigin.toString();\n\n\t\tcase 'strict-origin-when-cross-origin':\n\t\t\t// 1. If the origin of referrerURL and the origin of request's current URL are the same, then\n\t\t\t// return referrerURL.\n\t\t\tif (referrerURL.origin === currentURL.origin) {\n\t\t\t\treturn referrerURL;\n\t\t\t}\n\n\t\t\t// 2. If referrerURL is a potentially trustworthy URL and request's current URL is not a\n\t\t\t// potentially trustworthy URL, then return no referrer.\n\t\t\tif (isUrlPotentiallyTrustworthy(referrerURL) && !isUrlPotentiallyTrustworthy(currentURL)) {\n\t\t\t\treturn 'no-referrer';\n\t\t\t}\n\n\t\t\t// 3. Return referrerOrigin.\n\t\t\treturn referrerOrigin;\n\n\t\tcase 'same-origin':\n\t\t\t// 1. If the origin of referrerURL and the origin of request's current URL are the same, then\n\t\t\t// return referrerURL.\n\t\t\tif (referrerURL.origin === currentURL.origin) {\n\t\t\t\treturn referrerURL;\n\t\t\t}\n\n\t\t\t// 2. Return no referrer.\n\t\t\treturn 'no-referrer';\n\n\t\tcase 'origin-when-cross-origin':\n\t\t\t// 1. If the origin of referrerURL and the origin of request's current URL are the same, then\n\t\t\t// return referrerURL.\n\t\t\tif (referrerURL.origin === currentURL.origin) {\n\t\t\t\treturn referrerURL;\n\t\t\t}\n\n\t\t\t// Return referrerOrigin.\n\t\t\treturn referrerOrigin;\n\n\t\tcase 'no-referrer-when-downgrade':\n\t\t\t// 1. If referrerURL is a potentially trustworthy URL and request's current URL is not a\n\t\t\t// potentially trustworthy URL, then return no referrer.\n\t\t\tif (isUrlPotentiallyTrustworthy(referrerURL) && !isUrlPotentiallyTrustworthy(currentURL)) {\n\t\t\t\treturn 'no-referrer';\n\t\t\t}\n\n\t\t\t// 2. Return referrerURL.\n\t\t\treturn referrerURL;\n\n\t\tdefault:\n\t\t\tthrow new TypeError(`Invalid referrerPolicy: ${policy}`);\n\t}\n}\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#parse-referrer-policy-from-header|Referrer Policy §8.1. Parse a referrer policy from a Referrer-Policy header}\n * @param {Headers} headers Response headers\n * @returns {string} policy\n */\nexport function parseReferrerPolicyFromHeader(headers) {\n\t// 1. Let policy-tokens be the result of extracting header list values given `Referrer-Policy`\n\t// and response’s header list.\n\tconst policyTokens = (headers.get('referrer-policy') || '').split(/[,\\s]+/);\n\n\t// 2. Let policy be the empty string.\n\tlet policy = '';\n\n\t// 3. For each token in policy-tokens, if token is a referrer policy and token is not the empty\n\t// string, then set policy to token.\n\t// Note: This algorithm loops over multiple policy values to allow deployment of new policy\n\t// values with fallbacks for older user agents, as described in § 11.1 Unknown Policy Values.\n\tfor (const token of policyTokens) {\n\t\tif (token && ReferrerPolicy.has(token)) {\n\t\t\tpolicy = token;\n\t\t}\n\t}\n\n\t// 4. Return policy.\n\treturn policy;\n}\n","\n/**\n * Request.js\n *\n * Request class contains server only options\n *\n * All spec algorithm step numbers are based on https://fetch.spec.whatwg.org/commit-snapshots/ae716822cb3a61843226cd090eefc6589446c1d2/.\n */\n\nimport {format as formatUrl} from 'node:url';\nimport Headers from './headers.js';\nimport Body, {clone, extractContentType, getTotalBytes} from './body.js';\nimport {isAbortSignal} from './utils/is.js';\nimport {getSearch} from './utils/get-search.js';\nimport {\n\tvalidateReferrerPolicy, determineRequestsReferrer, DEFAULT_REFERRER_POLICY\n} from './utils/referrer.js';\n\nconst INTERNALS = Symbol('Request internals');\n\n/**\n * Check if `obj` is an instance of Request.\n *\n * @param {*} obj\n * @return {boolean}\n */\nconst isRequest = object => {\n\treturn (\n\t\ttypeof object === 'object' &&\n\t\ttypeof object[INTERNALS] === 'object'\n\t);\n};\n\n/**\n * Request class\n *\n * Ref: https://fetch.spec.whatwg.org/#request-class\n *\n * @param Mixed input Url or Request instance\n * @param Object init Custom options\n * @return Void\n */\nexport default class Request extends Body {\n\tconstructor(input, init = {}) {\n\t\tlet parsedURL;\n\n\t\t// Normalize input and force URL to be encoded as UTF-8 (https://github.com/node-fetch/node-fetch/issues/245)\n\t\tif (isRequest(input)) {\n\t\t\tparsedURL = new URL(input.url);\n\t\t} else {\n\t\t\tparsedURL = new URL(input);\n\t\t\tinput = {};\n\t\t}\n\n\t\tif (parsedURL.username !== '' || parsedURL.password !== '') {\n\t\t\tthrow new TypeError(`${parsedURL} is an url with embedded credentails.`);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tmethod = method.toUpperCase();\n\n\t\t// eslint-disable-next-line no-eq-null, eqeqeq\n\t\tif (((init.body != null || isRequest(input)) && input.body !== null) &&\n\t\t\t(method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tconst inputBody = init.body ?\n\t\t\tinit.body :\n\t\t\t(isRequest(input) && input.body !== null ?\n\t\t\t\tclone(input) :\n\t\t\t\tnull);\n\n\t\tsuper(inputBody, {\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody !== null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody, this);\n\t\t\tif (contentType) {\n\t\t\t\theaders.set('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ?\n\t\t\tinput.signal :\n\t\t\tnull;\n\t\tif ('signal' in init) {\n\t\t\tsignal = init.signal;\n\t\t}\n\n\t\t// eslint-disable-next-line no-eq-null, eqeqeq\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal or EventTarget');\n\t\t}\n\n\t\t// §5.4, Request constructor steps, step 15.1\n\t\t// eslint-disable-next-line no-eq-null, eqeqeq\n\t\tlet referrer = init.referrer == null ? input.referrer : init.referrer;\n\t\tif (referrer === '') {\n\t\t\t// §5.4, Request constructor steps, step 15.2\n\t\t\treferrer = 'no-referrer';\n\t\t} else if (referrer) {\n\t\t\t// §5.4, Request constructor steps, step 15.3.1, 15.3.2\n\t\t\tconst parsedReferrer = new URL(referrer);\n\t\t\t// §5.4, Request constructor steps, step 15.3.3, 15.3.4\n\t\t\treferrer = /^about:(\\/\\/)?client$/.test(parsedReferrer) ? 'client' : parsedReferrer;\n\t\t} else {\n\t\t\treferrer = undefined;\n\t\t}\n\n\t\tthis[INTERNALS] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal,\n\t\t\treferrer\n\t\t};\n\n\t\t// Node-fetch-only options\n\t\tthis.follow = init.follow === undefined ? (input.follow === undefined ? 20 : input.follow) : init.follow;\n\t\tthis.compress = init.compress === undefined ? (input.compress === undefined ? true : input.compress) : init.compress;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t\tthis.highWaterMark = init.highWaterMark || input.highWaterMark || 16384;\n\t\tthis.insecureHTTPParser = init.insecureHTTPParser || input.insecureHTTPParser || false;\n\n\t\t// §5.4, Request constructor steps, step 16.\n\t\t// Default is empty string per https://fetch.spec.whatwg.org/#concept-request-referrer-policy\n\t\tthis.referrerPolicy = init.referrerPolicy || input.referrerPolicy || '';\n\t}\n\n\tget method() {\n\t\treturn this[INTERNALS].method;\n\t}\n\n\tget url() {\n\t\treturn formatUrl(this[INTERNALS].parsedURL);\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS].redirect;\n\t}\n\n\tget signal() {\n\t\treturn this[INTERNALS].signal;\n\t}\n\n\t// https://fetch.spec.whatwg.org/#dom-request-referrer\n\tget referrer() {\n\t\tif (this[INTERNALS].referrer === 'no-referrer') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (this[INTERNALS].referrer === 'client') {\n\t\t\treturn 'about:client';\n\t\t}\n\n\t\tif (this[INTERNALS].referrer) {\n\t\t\treturn this[INTERNALS].referrer.toString();\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tget referrerPolicy() {\n\t\treturn this[INTERNALS].referrerPolicy;\n\t}\n\n\tset referrerPolicy(referrerPolicy) {\n\t\tthis[INTERNALS].referrerPolicy = validateReferrerPolicy(referrerPolicy);\n\t}\n\n\t/**\n\t * Clone this request\n\t *\n\t * @return Request\n\t */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn 'Request';\n\t}\n}\n\nObject.defineProperties(Request.prototype, {\n\tmethod: {enumerable: true},\n\turl: {enumerable: true},\n\theaders: {enumerable: true},\n\tredirect: {enumerable: true},\n\tclone: {enumerable: true},\n\tsignal: {enumerable: true},\n\treferrer: {enumerable: true},\n\treferrerPolicy: {enumerable: true}\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param Request A Request instance\n * @return Object The options object to be passed to http.request\n */\nexport const getNodeRequestOptions = request => {\n\tconst {parsedURL} = request[INTERNALS];\n\tconst headers = new Headers(request[INTERNALS].headers);\n\n\t// Fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body === null && /^(post|put)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\n\tif (request.body !== null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\t// Set Content-Length if totalBytes is a number (that is not NaN)\n\t\tif (typeof totalBytes === 'number' && !Number.isNaN(totalBytes)) {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// 4.1. Main fetch, step 2.6\n\t// > If request's referrer policy is the empty string, then set request's referrer policy to the\n\t// > default referrer policy.\n\tif (request.referrerPolicy === '') {\n\t\trequest.referrerPolicy = DEFAULT_REFERRER_POLICY;\n\t}\n\n\t// 4.1. Main fetch, step 2.7\n\t// > If request's referrer is not \"no-referrer\", set request's referrer to the result of invoking\n\t// > determine request's referrer.\n\tif (request.referrer && request.referrer !== 'no-referrer') {\n\t\trequest[INTERNALS].referrer = determineRequestsReferrer(request);\n\t} else {\n\t\trequest[INTERNALS].referrer = 'no-referrer';\n\t}\n\n\t// 4.5. HTTP-network-or-cache fetch, step 6.9\n\t// > If httpRequest's referrer is a URL, then append `Referer`/httpRequest's referrer, serialized\n\t// > and isomorphic encoded, to httpRequest's header list.\n\tif (request[INTERNALS].referrer instanceof URL) {\n\t\theaders.set('Referer', request.referrer);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip,deflate,br');\n\t}\n\n\tlet {agent} = request;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\tif (!headers.has('Connection') && !agent) {\n\t\theaders.set('Connection', 'close');\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\tconst search = getSearch(parsedURL);\n\n\t// Pass the full URL directly to request(), but overwrite the following\n\t// options:\n\tconst options = {\n\t\t// Overwrite search to retain trailing ? (issue #776)\n\t\tpath: parsedURL.pathname + search,\n\t\t// The following options are not expressed in the URL\n\t\tmethod: request.method,\n\t\theaders: headers[Symbol.for('nodejs.util.inspect.custom')](),\n\t\tinsecureHTTPParser: request.insecureHTTPParser,\n\t\tagent\n\t};\n\n\treturn {\n\t\tparsedURL,\n\t\toptions\n\t};\n};\n","import {FetchBaseError} from './base.js';\n\n/**\n * AbortError interface for cancelled requests\n */\nexport class AbortError extends FetchBaseError {\n\tconstructor(message, type = 'aborted') {\n\t\tsuper(message, type);\n\t}\n}\n","/**\n * Index.js\n *\n * a request API compatible with window.fetch\n *\n * All spec algorithm step numbers are based on https://fetch.spec.whatwg.org/commit-snapshots/ae716822cb3a61843226cd090eefc6589446c1d2/.\n */\n\nimport http from 'node:http';\nimport https from 'node:https';\nimport zlib from 'node:zlib';\nimport Stream, {PassThrough, pipeline as pump} from 'node:stream';\nimport dataUriToBuffer from 'data-uri-to-buffer';\n\nimport {writeToStream, clone} from './body.js';\nimport Response from './response.js';\nimport Headers, {fromRawHeaders} from './headers.js';\nimport Request, {getNodeRequestOptions} from './request.js';\nimport {FetchError} from './errors/fetch-error.js';\nimport {AbortError} from './errors/abort-error.js';\nimport {isRedirect} from './utils/is-redirect.js';\nimport {parseReferrerPolicyFromHeader} from './utils/referrer.js';\n\nexport {Headers, Request, Response, FetchError, AbortError, isRedirect};\n\nconst supportedSchemas = new Set(['data:', 'http:', 'https:']);\n\n/**\n * Fetch function\n *\n * @param {string | URL | import('./request').default} url - Absolute url or Request instance\n * @param {*} [options_] - Fetch options\n * @return {Promise<import('./response').default>}\n */\nexport default async function fetch(url, options_) {\n\treturn new Promise((resolve, reject) => {\n\t\t// Build request object\n\t\tconst request = new Request(url, options_);\n\t\tconst {parsedURL, options} = getNodeRequestOptions(request);\n\t\tif (!supportedSchemas.has(parsedURL.protocol)) {\n\t\t\tthrow new TypeError(`node-fetch cannot load ${url}. URL scheme \"${parsedURL.protocol.replace(/:$/, '')}\" is not supported.`);\n\t\t}\n\n\t\tif (parsedURL.protocol === 'data:') {\n\t\t\tconst data = dataUriToBuffer(request.url);\n\t\t\tconst response = new Response(data, {headers: {'Content-Type': data.typeFull}});\n\t\t\tresolve(response);\n\t\t\treturn;\n\t\t}\n\n\t\t// Wrap http.request into fetch\n\t\tconst send = (parsedURL.protocol === 'https:' ? https : http).request;\n\t\tconst {signal} = request;\n\t\tlet response = null;\n\n\t\tconst abort = () => {\n\t\t\tconst error = new AbortError('The operation was aborted.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\trequest.body.destroy(error);\n\t\t\t}\n\n\t\t\tif (!response || !response.body) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = () => {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// Send request\n\t\tconst request_ = send(parsedURL, options);\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tconst finalize = () => {\n\t\t\trequest_.abort();\n\t\t\tif (signal) {\n\t\t\t\tsignal.removeEventListener('abort', abortAndFinalize);\n\t\t\t}\n\t\t};\n\n\t\trequest_.on('error', error => {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${error.message}`, 'system', error));\n\t\t\tfinalize();\n\t\t});\n\n\t\tfixResponseChunkedTransferBadEnding(request_, error => {\n\t\t\tresponse.body.destroy(error);\n\t\t});\n\n\t\t/* c8 ignore next 18 */\n\t\tif (process.version < 'v14') {\n\t\t\t// Before Node.js 14, pipeline() does not fully support async iterators and does not always\n\t\t\t// properly handle when the socket close/end events are out of order.\n\t\t\trequest_.on('socket', s => {\n\t\t\t\tlet endedWithEventsCount;\n\t\t\t\ts.prependListener('end', () => {\n\t\t\t\t\tendedWithEventsCount = s._eventsCount;\n\t\t\t\t});\n\t\t\t\ts.prependListener('close', hadError => {\n\t\t\t\t\t// if end happened before close but the socket didn't emit an error, do it now\n\t\t\t\t\tif (response && endedWithEventsCount < s._eventsCount && !hadError) {\n\t\t\t\t\t\tconst error = new Error('Premature close');\n\t\t\t\t\t\terror.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\t\t\tresponse.body.emit('error', error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\trequest_.on('response', response_ => {\n\t\t\trequest_.setTimeout(0);\n\t\t\tconst headers = fromRawHeaders(response_.rawHeaders);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (isRedirect(response_.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tconst locationURL = location === null ? null : new URL(location, request.url);\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// Node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.\n\t\t\t\t\t\tif (locationURL !== null) {\n\t\t\t\t\t\t\theaders.set('Location', locationURL);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow': {\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOptions = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: clone(request),\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\tsize: request.size,\n\t\t\t\t\t\t\treferrer: request.referrer,\n\t\t\t\t\t\t\treferrerPolicy: request.referrerPolicy\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (response_.statusCode !== 303 && request.body && options_.body instanceof Stream.Readable) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (response_.statusCode === 303 || ((response_.statusCode === 301 || response_.statusCode === 302) && request.method === 'POST')) {\n\t\t\t\t\t\t\trequestOptions.method = 'GET';\n\t\t\t\t\t\t\trequestOptions.body = undefined;\n\t\t\t\t\t\t\trequestOptions.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 14\n\t\t\t\t\t\tconst responseReferrerPolicy = parseReferrerPolicyFromHeader(headers);\n\t\t\t\t\t\tif (responseReferrerPolicy) {\n\t\t\t\t\t\t\trequestOptions.referrerPolicy = responseReferrerPolicy;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOptions)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn reject(new TypeError(`Redirect option '${request.redirect}' is not a valid value of RequestRedirect`));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Prepare response\n\t\t\tif (signal) {\n\t\t\t\tresponse_.once('end', () => {\n\t\t\t\t\tsignal.removeEventListener('abort', abortAndFinalize);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet body = pump(response_, new PassThrough(), reject);\n\t\t\t// see https://github.com/nodejs/node/pull/29376\n\t\t\tif (process.version < 'v12.10') {\n\t\t\t\tresponse_.on('aborted', abortAndFinalize);\n\t\t\t}\n\n\t\t\tconst responseOptions = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: response_.statusCode,\n\t\t\t\tstatusText: response_.statusMessage,\n\t\t\t\theaders,\n\t\t\t\tsize: request.size,\n\t\t\t\tcounter: request.counter,\n\t\t\t\thighWaterMark: request.highWaterMark\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || response_.statusCode === 204 || response_.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, responseOptions);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// For gzip\n\t\t\tif (codings === 'gzip' || codings === 'x-gzip') {\n\t\t\t\tbody = pump(body, zlib.createGunzip(zlibOptions), reject);\n\t\t\t\tresponse = new Response(body, responseOptions);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For deflate\n\t\t\tif (codings === 'deflate' || codings === 'x-deflate') {\n\t\t\t\t// Handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = pump(response_, new PassThrough(), reject);\n\t\t\t\traw.once('data', chunk => {\n\t\t\t\t\t// See http://stackoverflow.com/questions/37519828\n\t\t\t\t\tbody = (chunk[0] & 0x0F) === 0x08 ? pump(body, zlib.createInflate(), reject) : pump(body, zlib.createInflateRaw(), reject);\n\n\t\t\t\t\tresponse = new Response(body, responseOptions);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For br\n\t\t\tif (codings === 'br') {\n\t\t\t\tbody = pump(body, zlib.createBrotliDecompress(), reject);\n\t\t\t\tresponse = new Response(body, responseOptions);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Otherwise, use response as-is\n\t\t\tresponse = new Response(body, responseOptions);\n\t\t\tresolve(response);\n\t\t});\n\n\t\twriteToStream(request_, request);\n\t});\n}\n\nfunction fixResponseChunkedTransferBadEnding(request, errorCallback) {\n\tconst LAST_CHUNK = Buffer.from('0\\r\\n\\r\\n');\n\n\tlet isChunkedTransfer = false;\n\tlet properLastChunkReceived = false;\n\tlet previousChunk;\n\n\trequest.on('response', response => {\n\t\tconst {headers} = response;\n\t\tisChunkedTransfer = headers['transfer-encoding'] === 'chunked' && !headers['content-length'];\n\t});\n\n\trequest.on('socket', socket => {\n\t\tconst onSocketClose = () => {\n\t\t\tif (isChunkedTransfer && !properLastChunkReceived) {\n\t\t\t\tconst error = new Error('Premature close');\n\t\t\t\terror.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\terrorCallback(error);\n\t\t\t}\n\t\t};\n\n\t\tsocket.prependListener('close', onSocketClose);\n\n\t\trequest.on('abort', () => {\n\t\t\tsocket.removeListener('close', onSocketClose);\n\t\t});\n\n\t\tsocket.on('data', buf => {\n\t\t\tproperLastChunkReceived = Buffer.compare(buf.slice(-5), LAST_CHUNK) === 0;\n\n\t\t\t// Sometimes final 0-length chunk and end of message code are in separate packets\n\t\t\tif (!properLastChunkReceived && previousChunk) {\n\t\t\t\tproperLastChunkReceived = (\n\t\t\t\t\tBuffer.compare(previousChunk.slice(-3), LAST_CHUNK.slice(0, 3)) === 0 &&\n\t\t\t\t\tBuffer.compare(buf.slice(-2), LAST_CHUNK.slice(3)) === 0\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tpreviousChunk = buf;\n\t\t});\n\t});\n}\n"],"names":["POOL_SIZE","Blob","F","C","INTERNALS","types","Stream","deprecate","PassThrough","http","isIP","formatUrl","https","pump","zlib"],"mappings":"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"}
prybar_assets/nodejs/node_modules/@replit/node-fetch/index.d.tsnew file+202
@@ -0,0 +1,202 @@
1+/// <reference types="node" />
2+/// <reference lib="dom" />
3+
4+import {Agent} from 'http';
5+
6+type AbortSignal = {
7+ readonly aborted: boolean;
8+
9+ addEventListener: (type: 'abort', listener: (this: AbortSignal) => void) => void;
10+ removeEventListener: (type: 'abort', listener: (this: AbortSignal) => void) => void;
11+};
12+
13+export type HeadersInit = Headers | Record<string, string> | Iterable<readonly [string, string]> | Iterable<Iterable<string>>;
14+
15+/**
16+ * This Fetch API interface allows you to perform various actions on HTTP request and response headers.
17+ * These actions include retrieving, setting, adding to, and removing.
18+ * A Headers object has an associated header list, which is initially empty and consists of zero or more name and value pairs.
19+ * You can add to this using methods like append() (see Examples.)
20+ * In all methods of this interface, header names are matched by case-insensitive byte sequence.
21+ * */
22+export class Headers {
23+ constructor(init?: HeadersInit);
24+
25+ append(name: string, value: string): void;
26+ delete(name: string): void;
27+ get(name: string): string | null;
28+ has(name: string): boolean;
29+ set(name: string, value: string): void;
30+ forEach(
31+ callbackfn: (value: string, key: string, parent: Headers) => void,
32+ thisArg?: any
33+ ): void;
34+
35+ [Symbol.iterator](): IterableIterator<[string, string]>;
36+ /**
37+ * Returns an iterator allowing to go through all key/value pairs contained in this object.
38+ */
39+ entries(): IterableIterator<[string, string]>;
40+ /**
41+ * Returns an iterator allowing to go through all keys of the key/value pairs contained in this object.
42+ */
43+ keys(): IterableIterator<string>;
44+ /**
45+ * Returns an iterator allowing to go through all values of the key/value pairs contained in this object.
46+ */
47+ values(): IterableIterator<string>;
48+
49+ /** Node-fetch extension */
50+ raw(): Record<string, string[]>;
51+}
52+
53+export interface RequestInit {
54+ /**
55+ * A BodyInit object or null to set request's body.
56+ */
57+ body?: BodyInit | null;
58+ /**
59+ * A Headers object, an object literal, or an array of two-item arrays to set request's headers.
60+ */
61+ headers?: HeadersInit;
62+ /**
63+ * A string to set request's method.
64+ */
65+ method?: string;
66+ /**
67+ * A string indicating whether request follows redirects, results in an error upon encountering a redirect, or returns the redirect (in an opaque fashion). Sets request's redirect.
68+ */
69+ redirect?: RequestRedirect;
70+ /**
71+ * An AbortSignal to set request's signal.
72+ */
73+ signal?: AbortSignal | null;
74+ /**
75+ * A string whose value is a same-origin URL, "about:client", or the empty string, to set request’s referrer.
76+ */
77+ referrer?: string;
78+ /**
79+ * A referrer policy to set request’s referrerPolicy.
80+ */
81+ referrerPolicy?: ReferrerPolicy;
82+
83+ // Node-fetch extensions to the whatwg/fetch spec
84+ agent?: Agent | ((parsedUrl: URL) => Agent);
85+ compress?: boolean;
86+ counter?: number;
87+ follow?: number;
88+ hostname?: string;
89+ port?: number;
90+ protocol?: string;
91+ size?: number;
92+ highWaterMark?: number;
93+ insecureHTTPParser?: boolean;
94+}
95+
96+export interface ResponseInit {
97+ headers?: HeadersInit;
98+ status?: number;
99+ statusText?: string;
100+}
101+
102+export type BodyInit =
103+ | Blob
104+ | Buffer
105+ | URLSearchParams
106+ | FormData
107+ | NodeJS.ReadableStream
108+ | string;
109+declare class BodyMixin {
110+ constructor(body?: BodyInit, options?: {size?: number});
111+
112+ readonly body: NodeJS.ReadableStream | null;
113+ readonly bodyUsed: boolean;
114+ readonly size: number;
115+
116+ /**
117+ * @deprecated Please use 'response.arrayBuffer()' instead of 'response.buffer()
118+ */
119+ buffer(): Promise<Buffer>;
120+ arrayBuffer(): Promise<ArrayBuffer>;
121+ formData(): Promise<FormData>;
122+ blob(): Promise<Blob>;
123+ json(): Promise<unknown>;
124+ text(): Promise<string>;
125+}
126+
127+// `Body` must not be exported as a class since it's not exported from the JavaScript code.
128+export interface Body extends Pick<BodyMixin, keyof BodyMixin> {}
129+
130+export type RequestRedirect = 'error' | 'follow' | 'manual';
131+export type ReferrerPolicy = '' | 'no-referrer' | 'no-referrer-when-downgrade' | 'same-origin' | 'origin' | 'strict-origin' | 'origin-when-cross-origin' | 'strict-origin-when-cross-origin' | 'unsafe-url';
132+export type RequestInfo = string | Request;
133+export class Request extends BodyMixin {
134+ constructor(input: RequestInfo, init?: RequestInit);
135+
136+ /**
137+ * Returns a Headers object consisting of the headers associated with request. Note that headers added in the network layer by the user agent will not be accounted for in this object, e.g., the "Host" header.
138+ */
139+ readonly headers: Headers;
140+ /**
141+ * Returns request's HTTP method, which is "GET" by default.
142+ */
143+ readonly method: string;
144+ /**
145+ * Returns the redirect mode associated with request, which is a string indicating how redirects for the request will be handled during fetching. A request will follow redirects by default.
146+ */
147+ readonly redirect: RequestRedirect;
148+ /**
149+ * Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler.
150+ */
151+ readonly signal: AbortSignal;
152+ /**
153+ * Returns the URL of request as a string.
154+ */
155+ readonly url: string;
156+ /**
157+ * A string whose value is a same-origin URL, "about:client", or the empty string, to set request’s referrer.
158+ */
159+ readonly referrer: string;
160+ /**
161+ * A referrer policy to set request’s referrerPolicy.
162+ */
163+ readonly referrerPolicy: ReferrerPolicy;
164+ clone(): Request;
165+}
166+
167+type ResponseType = 'basic' | 'cors' | 'default' | 'error' | 'opaque' | 'opaqueredirect';
168+
169+export class Response extends BodyMixin {
170+ constructor(body?: BodyInit | null, init?: ResponseInit);
171+
172+ readonly headers: Headers;
173+ readonly ok: boolean;
174+ readonly redirected: boolean;
175+ readonly status: number;
176+ readonly statusText: string;
177+ readonly type: ResponseType;
178+ readonly url: string;
179+ clone(): Response;
180+
181+ static error(): Response;
182+ static redirect(url: string, status?: number): Response;
183+}
184+
185+export class FetchError extends Error {
186+ constructor(message: string, type: string, systemError?: Record<string, unknown>);
187+
188+ name: 'FetchError';
189+ [Symbol.toStringTag]: 'FetchError';
190+ type: string;
191+ code?: string;
192+ errno?: string;
193+}
194+
195+export class AbortError extends Error {
196+ type: string;
197+ name: 'AbortError';
198+ [Symbol.toStringTag]: 'AbortError';
199+}
200+
201+export function isRedirect(code: number): boolean;
202+export default function fetch(url: RequestInfo, init?: RequestInit): Promise<Response>;
prybar_assets/nodejs/node_modules/@replit/node-fetch/index.jsnew file+27
@@ -0,0 +1,27 @@
1+/* eslint-disable */
2+'use strict';
3+
4+
5+
6+require('http');
7+require('https');
8+require('zlib');
9+require('stream');
10+var index = require('./index-3a548b1a.js');
11+module.exports = exports = index.fetch;
12+Object.defineProperty(exports, '__esModule', { value: true });
13+require('util');
14+require('url');
15+require('net');
16+
17+
18+
19+exports.AbortError = index.AbortError;
20+exports.FetchError = index.FetchError;
21+exports.Headers = index.Headers;
22+exports.Request = index.Request;
23+exports.Response = index.Response;
24+exports["default"] = index.fetch;
25+exports.isRedirect = index.isRedirect;
26+/* eslint-enable */
27+//# sourceMappingURL=index.js.map
prybar_assets/nodejs/node_modules/@replit/node-fetch/index.js.mapnew file+1
@@ -0,0 +1 @@
1+{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;"}
prybar_assets/nodejs/node_modules/@replit/node-fetch/multipart-parser-dc9090bd.jsnew file+455
@@ -0,0 +1,455 @@
1+/* eslint-disable */
2+'use strict';
3+
4+require('fs');
5+require('path');
6+var worker_threads = require('worker_threads');
7+var index = require('./index-3a548b1a.js');
8+require('http');
9+require('https');
10+require('zlib');
11+require('stream');
12+require('util');
13+require('url');
14+require('net');
15+
16+globalThis.DOMException || (() => {
17+ const port = new worker_threads.MessageChannel().port1;
18+ const ab = new ArrayBuffer(0);
19+ try { port.postMessage(ab, [ab, ab]); }
20+ catch (err) { return err.constructor }
21+})();
22+
23+let s = 0;
24+const S = {
25+ START_BOUNDARY: s++,
26+ HEADER_FIELD_START: s++,
27+ HEADER_FIELD: s++,
28+ HEADER_VALUE_START: s++,
29+ HEADER_VALUE: s++,
30+ HEADER_VALUE_ALMOST_DONE: s++,
31+ HEADERS_ALMOST_DONE: s++,
32+ PART_DATA_START: s++,
33+ PART_DATA: s++,
34+ END: s++
35+};
36+
37+let f = 1;
38+const F = {
39+ PART_BOUNDARY: f,
40+ LAST_BOUNDARY: f *= 2
41+};
42+
43+const LF = 10;
44+const CR = 13;
45+const SPACE = 32;
46+const HYPHEN = 45;
47+const COLON = 58;
48+const A = 97;
49+const Z = 122;
50+
51+const lower = c => c | 0x20;
52+
53+const noop = () => {};
54+
55+class MultipartParser {
56+ /**
57+ * @param {string} boundary
58+ */
59+ constructor(boundary) {
60+ this.index = 0;
61+ this.flags = 0;
62+
63+ this.onHeaderEnd = noop;
64+ this.onHeaderField = noop;
65+ this.onHeadersEnd = noop;
66+ this.onHeaderValue = noop;
67+ this.onPartBegin = noop;
68+ this.onPartData = noop;
69+ this.onPartEnd = noop;
70+
71+ this.boundaryChars = {};
72+
73+ boundary = '\r\n--' + boundary;
74+ const ui8a = new Uint8Array(boundary.length);
75+ for (let i = 0; i < boundary.length; i++) {
76+ ui8a[i] = boundary.charCodeAt(i);
77+ this.boundaryChars[ui8a[i]] = true;
78+ }
79+
80+ this.boundary = ui8a;
81+ this.lookbehind = new Uint8Array(this.boundary.length + 8);
82+ this.state = S.START_BOUNDARY;
83+ }
84+
85+ /**
86+ * @param {Uint8Array} data
87+ */
88+ write(data) {
89+ let i = 0;
90+ const length_ = data.length;
91+ let previousIndex = this.index;
92+ let {lookbehind, boundary, boundaryChars, index, state, flags} = this;
93+ const boundaryLength = this.boundary.length;
94+ const boundaryEnd = boundaryLength - 1;
95+ const bufferLength = data.length;
96+ let c;
97+ let cl;
98+
99+ const mark = name => {
100+ this[name + 'Mark'] = i;
101+ };
102+
103+ const clear = name => {
104+ delete this[name + 'Mark'];
105+ };
106+
107+ const callback = (callbackSymbol, start, end, ui8a) => {
108+ if (start === undefined || start !== end) {
109+ this[callbackSymbol](ui8a && ui8a.subarray(start, end));
110+ }
111+ };
112+
113+ const dataCallback = (name, clear) => {
114+ const markSymbol = name + 'Mark';
115+ if (!(markSymbol in this)) {
116+ return;
117+ }
118+
119+ if (clear) {
120+ callback(name, this[markSymbol], i, data);
121+ delete this[markSymbol];
122+ } else {
123+ callback(name, this[markSymbol], data.length, data);
124+ this[markSymbol] = 0;
125+ }
126+ };
127+
128+ for (i = 0; i < length_; i++) {
129+ c = data[i];
130+
131+ switch (state) {
132+ case S.START_BOUNDARY:
133+ if (index === boundary.length - 2) {
134+ if (c === HYPHEN) {
135+ flags |= F.LAST_BOUNDARY;
136+ } else if (c !== CR) {
137+ return;
138+ }
139+
140+ index++;
141+ break;
142+ } else if (index - 1 === boundary.length - 2) {
143+ if (flags & F.LAST_BOUNDARY && c === HYPHEN) {
144+ state = S.END;
145+ flags = 0;
146+ } else if (!(flags & F.LAST_BOUNDARY) && c === LF) {
147+ index = 0;
148+ callback('onPartBegin');
149+ state = S.HEADER_FIELD_START;
150+ } else {
151+ return;
152+ }
153+
154+ break;
155+ }
156+
157+ if (c !== boundary[index + 2]) {
158+ index = -2;
159+ }
160+
161+ if (c === boundary[index + 2]) {
162+ index++;
163+ }
164+
165+ break;
166+ case S.HEADER_FIELD_START:
167+ state = S.HEADER_FIELD;
168+ mark('onHeaderField');
169+ index = 0;
170+ // falls through
171+ case S.HEADER_FIELD:
172+ if (c === CR) {
173+ clear('onHeaderField');
174+ state = S.HEADERS_ALMOST_DONE;
175+ break;
176+ }
177+
178+ index++;
179+ if (c === HYPHEN) {
180+ break;
181+ }
182+
183+ if (c === COLON) {
184+ if (index === 1) {
185+ // empty header field
186+ return;
187+ }
188+
189+ dataCallback('onHeaderField', true);
190+ state = S.HEADER_VALUE_START;
191+ break;
192+ }
193+
194+ cl = lower(c);
195+ if (cl < A || cl > Z) {
196+ return;
197+ }
198+
199+ break;
200+ case S.HEADER_VALUE_START:
201+ if (c === SPACE) {
202+ break;
203+ }
204+
205+ mark('onHeaderValue');
206+ state = S.HEADER_VALUE;
207+ // falls through
208+ case S.HEADER_VALUE:
209+ if (c === CR) {
210+ dataCallback('onHeaderValue', true);
211+ callback('onHeaderEnd');
212+ state = S.HEADER_VALUE_ALMOST_DONE;
213+ }
214+
215+ break;
216+ case S.HEADER_VALUE_ALMOST_DONE:
217+ if (c !== LF) {
218+ return;
219+ }
220+
221+ state = S.HEADER_FIELD_START;
222+ break;
223+ case S.HEADERS_ALMOST_DONE:
224+ if (c !== LF) {
225+ return;
226+ }
227+
228+ callback('onHeadersEnd');
229+ state = S.PART_DATA_START;
230+ break;
231+ case S.PART_DATA_START:
232+ state = S.PART_DATA;
233+ mark('onPartData');
234+ // falls through
235+ case S.PART_DATA:
236+ previousIndex = index;
237+
238+ if (index === 0) {
239+ // boyer-moore derrived algorithm to safely skip non-boundary data
240+ i += boundaryEnd;
241+ while (i < bufferLength && !(data[i] in boundaryChars)) {
242+ i += boundaryLength;
243+ }
244+
245+ i -= boundaryEnd;
246+ c = data[i];
247+ }
248+
249+ if (index < boundary.length) {
250+ if (boundary[index] === c) {
251+ if (index === 0) {
252+ dataCallback('onPartData', true);
253+ }
254+
255+ index++;
256+ } else {
257+ index = 0;
258+ }
259+ } else if (index === boundary.length) {
260+ index++;
261+ if (c === CR) {
262+ // CR = part boundary
263+ flags |= F.PART_BOUNDARY;
264+ } else if (c === HYPHEN) {
265+ // HYPHEN = end boundary
266+ flags |= F.LAST_BOUNDARY;
267+ } else {
268+ index = 0;
269+ }
270+ } else if (index - 1 === boundary.length) {
271+ if (flags & F.PART_BOUNDARY) {
272+ index = 0;
273+ if (c === LF) {
274+ // unset the PART_BOUNDARY flag
275+ flags &= ~F.PART_BOUNDARY;
276+ callback('onPartEnd');
277+ callback('onPartBegin');
278+ state = S.HEADER_FIELD_START;
279+ break;
280+ }
281+ } else if (flags & F.LAST_BOUNDARY) {
282+ if (c === HYPHEN) {
283+ callback('onPartEnd');
284+ state = S.END;
285+ flags = 0;
286+ } else {
287+ index = 0;
288+ }
289+ } else {
290+ index = 0;
291+ }
292+ }
293+
294+ if (index > 0) {
295+ // when matching a possible boundary, keep a lookbehind reference
296+ // in case it turns out to be a false lead
297+ lookbehind[index - 1] = c;
298+ } else if (previousIndex > 0) {
299+ // if our boundary turned out to be rubbish, the captured lookbehind
300+ // belongs to partData
301+ const _lookbehind = new Uint8Array(lookbehind.buffer, lookbehind.byteOffset, lookbehind.byteLength);
302+ callback('onPartData', 0, previousIndex, _lookbehind);
303+ previousIndex = 0;
304+ mark('onPartData');
305+
306+ // reconsider the current character even so it interrupted the sequence
307+ // it could be the beginning of a new sequence
308+ i--;
309+ }
310+
311+ break;
312+ case S.END:
313+ break;
314+ default:
315+ throw new Error(`Unexpected state entered: ${state}`);
316+ }
317+ }
318+
319+ dataCallback('onHeaderField');
320+ dataCallback('onHeaderValue');
321+ dataCallback('onPartData');
322+
323+ // Update properties for the next call
324+ this.index = index;
325+ this.state = state;
326+ this.flags = flags;
327+ }
328+
329+ end() {
330+ if ((this.state === S.HEADER_FIELD_START && this.index === 0) ||
331+ (this.state === S.PART_DATA && this.index === this.boundary.length)) {
332+ this.onPartEnd();
333+ } else if (this.state !== S.END) {
334+ throw new Error('MultipartParser.end(): stream ended unexpectedly');
335+ }
336+ }
337+}
338+
339+function _fileName(headerValue) {
340+ // matches either a quoted-string or a token (RFC 2616 section 19.5.1)
341+ const m = headerValue.match(/\bfilename=("(.*?)"|([^()<>@,;:\\"/[\]?={}\s\t]+))($|;\s)/i);
342+ if (!m) {
343+ return;
344+ }
345+
346+ const match = m[2] || m[3] || '';
347+ let filename = match.slice(match.lastIndexOf('\\') + 1);
348+ filename = filename.replace(/%22/g, '"');
349+ filename = filename.replace(/&#(\d{4});/g, (m, code) => {
350+ return String.fromCharCode(code);
351+ });
352+ return filename;
353+}
354+
355+async function toFormData(Body, ct) {
356+ if (!/multipart/i.test(ct)) {
357+ throw new TypeError('Failed to fetch');
358+ }
359+
360+ const m = ct.match(/boundary=(?:"([^"]+)"|([^;]+))/i);
361+
362+ if (!m) {
363+ throw new TypeError('no or bad content-type header, no multipart boundary');
364+ }
365+
366+ const parser = new MultipartParser(m[1] || m[2]);
367+
368+ let headerField;
369+ let headerValue;
370+ let entryValue;
371+ let entryName;
372+ let contentType;
373+ let filename;
374+ const entryChunks = [];
375+ const formData = new index.FormData();
376+
377+ const onPartData = ui8a => {
378+ entryValue += decoder.decode(ui8a, {stream: true});
379+ };
380+
381+ const appendToFile = ui8a => {
382+ entryChunks.push(ui8a);
383+ };
384+
385+ const appendFileToFormData = () => {
386+ const file = new index.File(entryChunks, filename, {type: contentType});
387+ formData.append(entryName, file);
388+ };
389+
390+ const appendEntryToFormData = () => {
391+ formData.append(entryName, entryValue);
392+ };
393+
394+ const decoder = new TextDecoder('utf-8');
395+ decoder.decode();
396+
397+ parser.onPartBegin = function () {
398+ parser.onPartData = onPartData;
399+ parser.onPartEnd = appendEntryToFormData;
400+
401+ headerField = '';
402+ headerValue = '';
403+ entryValue = '';
404+ entryName = '';
405+ contentType = '';
406+ filename = null;
407+ entryChunks.length = 0;
408+ };
409+
410+ parser.onHeaderField = function (ui8a) {
411+ headerField += decoder.decode(ui8a, {stream: true});
412+ };
413+
414+ parser.onHeaderValue = function (ui8a) {
415+ headerValue += decoder.decode(ui8a, {stream: true});
416+ };
417+
418+ parser.onHeaderEnd = function () {
419+ headerValue += decoder.decode();
420+ headerField = headerField.toLowerCase();
421+
422+ if (headerField === 'content-disposition') {
423+ // matches either a quoted-string or a token (RFC 2616 section 19.5.1)
424+ const m = headerValue.match(/\bname=("([^"]*)"|([^()<>@,;:\\"/[\]?={}\s\t]+))/i);
425+
426+ if (m) {
427+ entryName = m[2] || m[3] || '';
428+ }
429+
430+ filename = _fileName(headerValue);
431+
432+ if (filename) {
433+ parser.onPartData = appendToFile;
434+ parser.onPartEnd = appendFileToFormData;
435+ }
436+ } else if (headerField === 'content-type') {
437+ contentType = headerValue;
438+ }
439+
440+ headerValue = '';
441+ headerField = '';
442+ };
443+
444+ for await (const chunk of Body) {
445+ parser.write(chunk);
446+ }
447+
448+ parser.end();
449+
450+ return formData;
451+}
452+
453+exports.toFormData = toFormData;
454+/* eslint-enable */
455+//# sourceMappingURL=multipart-parser-dc9090bd.js.map
prybar_assets/nodejs/node_modules/@replit/node-fetch/multipart-parser-dc9090bd.js.mapnew file+1
@@ -0,0 +1 @@
1+{"version":3,"file":"multipart-parser-dc9090bd.js","sources":["../node_modules/fetch-blob/from.js","../node_modules/node-fetch/src/utils/multipart-parser.js"],"sourcesContent":["import {statSync, createReadStream, promises as fs} from 'fs';\nimport {basename} from 'path';\nimport {MessageChannel} from 'worker_threads';\n\nimport File from './file.js';\nimport Blob from './index.js';\n\nconst {stat} = fs;\n\nconst DOMException = globalThis.DOMException || (() => {\n\tconst port = new MessageChannel().port1\n\tconst ab = new ArrayBuffer(0)\n\ttry { port.postMessage(ab, [ab, ab]) }\n\tcatch (err) { return err.constructor }\n})()\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n */\nconst blobFromSync = (path, type) => fromBlob(statSync(path), path, type);\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n */\nconst blobFrom = (path, type) => stat(path).then(stat => fromBlob(stat, path, type));\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n */\nconst fileFrom = (path, type) => stat(path).then(stat => fromFile(stat, path, type));\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n */\nconst fileFromSync = (path, type) => fromFile(statSync(path), path, type);\n\n// @ts-ignore\nconst fromBlob = (stat, path, type = '') => new Blob([new BlobDataItem({\n\tpath,\n\tsize: stat.size,\n\tlastModified: stat.mtimeMs,\n\tstart: 0\n})], {type});\n\n// @ts-ignore\nconst fromFile = (stat, path, type = '') => new File([new BlobDataItem({\n\tpath,\n\tsize: stat.size,\n\tlastModified: stat.mtimeMs,\n\tstart: 0\n})], basename(path), { type, lastModified: stat.mtimeMs });\n\n/**\n * This is a blob backed up by a file on the disk\n * with minium requirement. Its wrapped around a Blob as a blobPart\n * so you have no direct access to this.\n *\n * @private\n */\nclass BlobDataItem {\n\t#path;\n\t#start;\n\n\tconstructor(options) {\n\t\tthis.#path = options.path;\n\t\tthis.#start = options.start;\n\t\tthis.size = options.size;\n\t\tthis.lastModified = options.lastModified\n\t}\n\n\t/**\n\t * Slicing arguments is first validated and formatted\n\t * to not be out of range by Blob.prototype.slice\n\t */\n\tslice(start, end) {\n\t\treturn new BlobDataItem({\n\t\t\tpath: this.#path,\n\t\t\tlastModified: this.lastModified,\n\t\t\tsize: end - start,\n\t\t\tstart\n\t\t});\n\t}\n\n\tasync * stream() {\n\t\tconst {mtimeMs} = await stat(this.#path)\n\t\tif (mtimeMs > this.lastModified) {\n\t\t\tthrow 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');\n\t\t}\n\t\tyield * createReadStream(this.#path, {\n\t\t\tstart: this.#start,\n\t\t\tend: this.#start + this.size - 1\n\t\t});\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn 'Blob';\n\t}\n}\n\nexport default blobFromSync;\nexport {File, Blob, blobFrom, blobFromSync, fileFrom, fileFromSync};\n","import {File} from 'fetch-blob/from.js';\nimport {FormData} from 'formdata-polyfill/esm.min.js';\n\nlet s = 0;\nconst S = {\n\tSTART_BOUNDARY: s++,\n\tHEADER_FIELD_START: s++,\n\tHEADER_FIELD: s++,\n\tHEADER_VALUE_START: s++,\n\tHEADER_VALUE: s++,\n\tHEADER_VALUE_ALMOST_DONE: s++,\n\tHEADERS_ALMOST_DONE: s++,\n\tPART_DATA_START: s++,\n\tPART_DATA: s++,\n\tEND: s++\n};\n\nlet f = 1;\nconst F = {\n\tPART_BOUNDARY: f,\n\tLAST_BOUNDARY: f *= 2\n};\n\nconst LF = 10;\nconst CR = 13;\nconst SPACE = 32;\nconst HYPHEN = 45;\nconst COLON = 58;\nconst A = 97;\nconst Z = 122;\n\nconst lower = c => c | 0x20;\n\nconst noop = () => {};\n\nclass MultipartParser {\n\t/**\n\t * @param {string} boundary\n\t */\n\tconstructor(boundary) {\n\t\tthis.index = 0;\n\t\tthis.flags = 0;\n\n\t\tthis.onHeaderEnd = noop;\n\t\tthis.onHeaderField = noop;\n\t\tthis.onHeadersEnd = noop;\n\t\tthis.onHeaderValue = noop;\n\t\tthis.onPartBegin = noop;\n\t\tthis.onPartData = noop;\n\t\tthis.onPartEnd = noop;\n\n\t\tthis.boundaryChars = {};\n\n\t\tboundary = '\\r\\n--' + boundary;\n\t\tconst ui8a = new Uint8Array(boundary.length);\n\t\tfor (let i = 0; i < boundary.length; i++) {\n\t\t\tui8a[i] = boundary.charCodeAt(i);\n\t\t\tthis.boundaryChars[ui8a[i]] = true;\n\t\t}\n\n\t\tthis.boundary = ui8a;\n\t\tthis.lookbehind = new Uint8Array(this.boundary.length + 8);\n\t\tthis.state = S.START_BOUNDARY;\n\t}\n\n\t/**\n\t * @param {Uint8Array} data\n\t */\n\twrite(data) {\n\t\tlet i = 0;\n\t\tconst length_ = data.length;\n\t\tlet previousIndex = this.index;\n\t\tlet {lookbehind, boundary, boundaryChars, index, state, flags} = this;\n\t\tconst boundaryLength = this.boundary.length;\n\t\tconst boundaryEnd = boundaryLength - 1;\n\t\tconst bufferLength = data.length;\n\t\tlet c;\n\t\tlet cl;\n\n\t\tconst mark = name => {\n\t\t\tthis[name + 'Mark'] = i;\n\t\t};\n\n\t\tconst clear = name => {\n\t\t\tdelete this[name + 'Mark'];\n\t\t};\n\n\t\tconst callback = (callbackSymbol, start, end, ui8a) => {\n\t\t\tif (start === undefined || start !== end) {\n\t\t\t\tthis[callbackSymbol](ui8a && ui8a.subarray(start, end));\n\t\t\t}\n\t\t};\n\n\t\tconst dataCallback = (name, clear) => {\n\t\t\tconst markSymbol = name + 'Mark';\n\t\t\tif (!(markSymbol in this)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (clear) {\n\t\t\t\tcallback(name, this[markSymbol], i, data);\n\t\t\t\tdelete this[markSymbol];\n\t\t\t} else {\n\t\t\t\tcallback(name, this[markSymbol], data.length, data);\n\t\t\t\tthis[markSymbol] = 0;\n\t\t\t}\n\t\t};\n\n\t\tfor (i = 0; i < length_; i++) {\n\t\t\tc = data[i];\n\n\t\t\tswitch (state) {\n\t\t\t\tcase S.START_BOUNDARY:\n\t\t\t\t\tif (index === boundary.length - 2) {\n\t\t\t\t\t\tif (c === HYPHEN) {\n\t\t\t\t\t\t\tflags |= F.LAST_BOUNDARY;\n\t\t\t\t\t\t} else if (c !== CR) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (index - 1 === boundary.length - 2) {\n\t\t\t\t\t\tif (flags & F.LAST_BOUNDARY && c === HYPHEN) {\n\t\t\t\t\t\t\tstate = S.END;\n\t\t\t\t\t\t\tflags = 0;\n\t\t\t\t\t\t} else if (!(flags & F.LAST_BOUNDARY) && c === LF) {\n\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\tcallback('onPartBegin');\n\t\t\t\t\t\t\tstate = S.HEADER_FIELD_START;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (c !== boundary[index + 2]) {\n\t\t\t\t\t\tindex = -2;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (c === boundary[index + 2]) {\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.HEADER_FIELD_START:\n\t\t\t\t\tstate = S.HEADER_FIELD;\n\t\t\t\t\tmark('onHeaderField');\n\t\t\t\t\tindex = 0;\n\t\t\t\t\t// falls through\n\t\t\t\tcase S.HEADER_FIELD:\n\t\t\t\t\tif (c === CR) {\n\t\t\t\t\t\tclear('onHeaderField');\n\t\t\t\t\t\tstate = S.HEADERS_ALMOST_DONE;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tindex++;\n\t\t\t\t\tif (c === HYPHEN) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (c === COLON) {\n\t\t\t\t\t\tif (index === 1) {\n\t\t\t\t\t\t\t// empty header field\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdataCallback('onHeaderField', true);\n\t\t\t\t\t\tstate = S.HEADER_VALUE_START;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcl = lower(c);\n\t\t\t\t\tif (cl < A || cl > Z) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.HEADER_VALUE_START:\n\t\t\t\t\tif (c === SPACE) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tmark('onHeaderValue');\n\t\t\t\t\tstate = S.HEADER_VALUE;\n\t\t\t\t\t// falls through\n\t\t\t\tcase S.HEADER_VALUE:\n\t\t\t\t\tif (c === CR) {\n\t\t\t\t\t\tdataCallback('onHeaderValue', true);\n\t\t\t\t\t\tcallback('onHeaderEnd');\n\t\t\t\t\t\tstate = S.HEADER_VALUE_ALMOST_DONE;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.HEADER_VALUE_ALMOST_DONE:\n\t\t\t\t\tif (c !== LF) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tstate = S.HEADER_FIELD_START;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.HEADERS_ALMOST_DONE:\n\t\t\t\t\tif (c !== LF) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback('onHeadersEnd');\n\t\t\t\t\tstate = S.PART_DATA_START;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.PART_DATA_START:\n\t\t\t\t\tstate = S.PART_DATA;\n\t\t\t\t\tmark('onPartData');\n\t\t\t\t\t// falls through\n\t\t\t\tcase S.PART_DATA:\n\t\t\t\t\tpreviousIndex = index;\n\n\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t// boyer-moore derrived algorithm to safely skip non-boundary data\n\t\t\t\t\t\ti += boundaryEnd;\n\t\t\t\t\t\twhile (i < bufferLength && !(data[i] in boundaryChars)) {\n\t\t\t\t\t\t\ti += boundaryLength;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ti -= boundaryEnd;\n\t\t\t\t\t\tc = data[i];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (index < boundary.length) {\n\t\t\t\t\t\tif (boundary[index] === c) {\n\t\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t\tdataCallback('onPartData', true);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (index === boundary.length) {\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tif (c === CR) {\n\t\t\t\t\t\t\t// CR = part boundary\n\t\t\t\t\t\t\tflags |= F.PART_BOUNDARY;\n\t\t\t\t\t\t} else if (c === HYPHEN) {\n\t\t\t\t\t\t\t// HYPHEN = end boundary\n\t\t\t\t\t\t\tflags |= F.LAST_BOUNDARY;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (index - 1 === boundary.length) {\n\t\t\t\t\t\tif (flags & F.PART_BOUNDARY) {\n\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\tif (c === LF) {\n\t\t\t\t\t\t\t\t// unset the PART_BOUNDARY flag\n\t\t\t\t\t\t\t\tflags &= ~F.PART_BOUNDARY;\n\t\t\t\t\t\t\t\tcallback('onPartEnd');\n\t\t\t\t\t\t\t\tcallback('onPartBegin');\n\t\t\t\t\t\t\t\tstate = S.HEADER_FIELD_START;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (flags & F.LAST_BOUNDARY) {\n\t\t\t\t\t\t\tif (c === HYPHEN) {\n\t\t\t\t\t\t\t\tcallback('onPartEnd');\n\t\t\t\t\t\t\t\tstate = S.END;\n\t\t\t\t\t\t\t\tflags = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t// when matching a possible boundary, keep a lookbehind reference\n\t\t\t\t\t\t// in case it turns out to be a false lead\n\t\t\t\t\t\tlookbehind[index - 1] = c;\n\t\t\t\t\t} else if (previousIndex > 0) {\n\t\t\t\t\t\t// if our boundary turned out to be rubbish, the captured lookbehind\n\t\t\t\t\t\t// belongs to partData\n\t\t\t\t\t\tconst _lookbehind = new Uint8Array(lookbehind.buffer, lookbehind.byteOffset, lookbehind.byteLength);\n\t\t\t\t\t\tcallback('onPartData', 0, previousIndex, _lookbehind);\n\t\t\t\t\t\tpreviousIndex = 0;\n\t\t\t\t\t\tmark('onPartData');\n\n\t\t\t\t\t\t// reconsider the current character even so it interrupted the sequence\n\t\t\t\t\t\t// it could be the beginning of a new sequence\n\t\t\t\t\t\ti--;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.END:\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unexpected state entered: ${state}`);\n\t\t\t}\n\t\t}\n\n\t\tdataCallback('onHeaderField');\n\t\tdataCallback('onHeaderValue');\n\t\tdataCallback('onPartData');\n\n\t\t// Update properties for the next call\n\t\tthis.index = index;\n\t\tthis.state = state;\n\t\tthis.flags = flags;\n\t}\n\n\tend() {\n\t\tif ((this.state === S.HEADER_FIELD_START && this.index === 0) ||\n\t\t\t(this.state === S.PART_DATA && this.index === this.boundary.length)) {\n\t\t\tthis.onPartEnd();\n\t\t} else if (this.state !== S.END) {\n\t\t\tthrow new Error('MultipartParser.end(): stream ended unexpectedly');\n\t\t}\n\t}\n}\n\nfunction _fileName(headerValue) {\n\t// matches either a quoted-string or a token (RFC 2616 section 19.5.1)\n\tconst m = headerValue.match(/\\bfilename=(\"(.*?)\"|([^()<>@,;:\\\\\"/[\\]?={}\\s\\t]+))($|;\\s)/i);\n\tif (!m) {\n\t\treturn;\n\t}\n\n\tconst match = m[2] || m[3] || '';\n\tlet filename = match.slice(match.lastIndexOf('\\\\') + 1);\n\tfilename = filename.replace(/%22/g, '\"');\n\tfilename = filename.replace(/&#(\\d{4});/g, (m, code) => {\n\t\treturn String.fromCharCode(code);\n\t});\n\treturn filename;\n}\n\nexport async function toFormData(Body, ct) {\n\tif (!/multipart/i.test(ct)) {\n\t\tthrow new TypeError('Failed to fetch');\n\t}\n\n\tconst m = ct.match(/boundary=(?:\"([^\"]+)\"|([^;]+))/i);\n\n\tif (!m) {\n\t\tthrow new TypeError('no or bad content-type header, no multipart boundary');\n\t}\n\n\tconst parser = new MultipartParser(m[1] || m[2]);\n\n\tlet headerField;\n\tlet headerValue;\n\tlet entryValue;\n\tlet entryName;\n\tlet contentType;\n\tlet filename;\n\tconst entryChunks = [];\n\tconst formData = new FormData();\n\n\tconst onPartData = ui8a => {\n\t\tentryValue += decoder.decode(ui8a, {stream: true});\n\t};\n\n\tconst appendToFile = ui8a => {\n\t\tentryChunks.push(ui8a);\n\t};\n\n\tconst appendFileToFormData = () => {\n\t\tconst file = new File(entryChunks, filename, {type: contentType});\n\t\tformData.append(entryName, file);\n\t};\n\n\tconst appendEntryToFormData = () => {\n\t\tformData.append(entryName, entryValue);\n\t};\n\n\tconst decoder = new TextDecoder('utf-8');\n\tdecoder.decode();\n\n\tparser.onPartBegin = function () {\n\t\tparser.onPartData = onPartData;\n\t\tparser.onPartEnd = appendEntryToFormData;\n\n\t\theaderField = '';\n\t\theaderValue = '';\n\t\tentryValue = '';\n\t\tentryName = '';\n\t\tcontentType = '';\n\t\tfilename = null;\n\t\tentryChunks.length = 0;\n\t};\n\n\tparser.onHeaderField = function (ui8a) {\n\t\theaderField += decoder.decode(ui8a, {stream: true});\n\t};\n\n\tparser.onHeaderValue = function (ui8a) {\n\t\theaderValue += decoder.decode(ui8a, {stream: true});\n\t};\n\n\tparser.onHeaderEnd = function () {\n\t\theaderValue += decoder.decode();\n\t\theaderField = headerField.toLowerCase();\n\n\t\tif (headerField === 'content-disposition') {\n\t\t\t// matches either a quoted-string or a token (RFC 2616 section 19.5.1)\n\t\t\tconst m = headerValue.match(/\\bname=(\"([^\"]*)\"|([^()<>@,;:\\\\\"/[\\]?={}\\s\\t]+))/i);\n\n\t\t\tif (m) {\n\t\t\t\tentryName = m[2] || m[3] || '';\n\t\t\t}\n\n\t\t\tfilename = _fileName(headerValue);\n\n\t\t\tif (filename) {\n\t\t\t\tparser.onPartData = appendToFile;\n\t\t\t\tparser.onPartEnd = appendFileToFormData;\n\t\t\t}\n\t\t} else if (headerField === 'content-type') {\n\t\t\tcontentType = headerValue;\n\t\t}\n\n\t\theaderValue = '';\n\t\theaderField = '';\n\t};\n\n\tfor await (const chunk of Body) {\n\t\tparser.write(chunk);\n\t}\n\n\tparser.end();\n\n\treturn formData;\n}\n"],"names":["MessageChannel","FormData","File"],"mappings":"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"}
prybar_assets/nodejs/node_modules/@replit/node-fetch/package.jsonnew file+34
@@ -0,0 +1,34 @@
1+{
2+ "name": "@replit/node-fetch",
3+ "version": "3.1.0",
4+ "description": "A light-weight module that brings Fetch API to node.js",
5+ "main": "index.js",
6+ "sideEffects": false,
7+ "engines": {
8+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
9+ },
10+ "repository": {
11+ "type": "git",
12+ "url": "git@github.com:replit/node-fetch.git"
13+ },
14+ "keywords": [
15+ "fetch",
16+ "http",
17+ "promise",
18+ "request",
19+ "curl",
20+ "wget",
21+ "xhr",
22+ "whatwg"
23+ ],
24+ "author": "David Frank",
25+ "license": "MIT",
26+ "funding": {
27+ "type": "opencollective",
28+ "url": "https://opencollective.com/node-fetch"
29+ },
30+ "dependencies": {
31+ "formdata-polyfill": "^4.0.10",
32+ "web-streams-polyfill": "^3.1.1"
33+ }
34+}
prybar_assets/nodejs/node_modules/fetch-blob/LICENSEnew file+21
@@ -0,0 +1,21 @@
1+MIT License
2+
3+Copyright (c) 2019 David Frank
4+
5+Permission is hereby granted, free of charge, to any person obtaining a copy
6+of this software and associated documentation files (the "Software"), to deal
7+in the Software without restriction, including without limitation the rights
8+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+copies of the Software, and to permit persons to whom the Software is
10+furnished to do so, subject to the following conditions:
11+
12+The above copyright notice and this permission notice shall be included in all
13+copies or substantial portions of the Software.
14+
15+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+SOFTWARE.
prybar_assets/nodejs/node_modules/fetch-blob/README.mdnew file+106
@@ -0,0 +1,106 @@
1+# fetch-blob
2+
3+[![npm version][npm-image]][npm-url]
4+[![build status][ci-image]][ci-url]
5+[![coverage status][codecov-image]][codecov-url]
6+[![install size][install-size-image]][install-size-url]
7+
8+A Blob implementation in Node.js, originally from [node-fetch](https://github.com/node-fetch/node-fetch).
9+
10+## Installation
11+
12+```sh
13+npm install fetch-blob
14+```
15+
16+<details>
17+ <summary>Upgrading from 2x to 3x</summary>
18+
19+ Updating from 2 to 3 should be a breeze since there is not many changes to the blob specification.
20+ The major cause of a major release is coding standards.
21+ - internal WeakMaps was replaced with private fields
22+ - internal Buffer.from was replaced with TextEncoder/Decoder
23+ - internal buffers was replaced with Uint8Arrays
24+ - CommonJS was replaced with ESM
25+ - The node stream returned by calling `blob.stream()` was replaced with whatwg streams
26+ - (Read "Differences from other blobs" for more info.)
27+
28+</details>
29+
30+<details>
31+ <summary>Differences from other Blobs</summary>
32+
33+ - Unlike NodeJS `buffer.Blob` (Added in: v15.7.0) and browser native Blob this polyfilled version can't be sent via PostMessage
34+ - This blob version is more arbitrary, it can be constructed with blob parts that isn't a instance of itself
35+ it has to look and behave as a blob to be accepted as a blob part.
36+ - The benefit of this is that you can create other types of blobs that don't contain any internal data that has to be read in other ways, such as the `BlobDataItem` created in `from.js` that wraps a file path into a blob-like item and read lazily (nodejs plans to [implement this][fs-blobs] as well)
37+ - The `blob.stream()` is the most noticeable differences. It returns a WHATWG stream now. to keep it as a node stream you would have to do:
38+
39+ ```js
40+ import {Readable} from 'stream'
41+ const stream = Readable.from(blob.stream())
42+ ```
43+</details>
44+
45+## Usage
46+
47+```js
48+// Ways to import
49+// (PS it's dependency free ESM package so regular http-import from CDN works too)
50+import Blob from 'fetch-blob'
51+import File from 'fetch-blob/file.js'
52+
53+import {Blob} from 'fetch-blob'
54+import {File} from 'fetch-blob/file.js'
55+
56+const {Blob} = await import('fetch-blob')
57+
58+
59+// Ways to read the blob:
60+const blob = new Blob(['hello, world'])
61+
62+await blob.text()
63+await blob.arrayBuffer()
64+for await (let chunk of blob.stream()) { ... }
65+blob.stream().getReader().read()
66+blob.stream().getReader({mode: 'byob'}).read(view)
67+```
68+
69+### Blob part backed up by filesystem
70+
71+`fetch-blob/from.js` comes packed with tools to convert any filepath into either a Blob or a File
72+It will not read the content into memory. It will only stat the file for last modified date and file size.
73+
74+```js
75+// The default export is sync and use fs.stat to retrieve size & last modified as a blob
76+import blobFromSync from 'fetch-blob/from.js'
77+import {File, Blob, blobFrom, blobFromSync, fileFrom, fileFromSync} from 'fetch-blob/from.js'
78+
79+const fsFile = fileFromSync('./2-GiB-file.bin', 'application/octet-stream')
80+const fsBlob = await blobFrom('./2-GiB-file.mp4')
81+
82+// Not a 4 GiB memory snapshot, just holds references
83+// points to where data is located on the disk
84+const blob = new Blob([fsFile, fsBlob, 'memory', new Uint8Array(10)])
85+console.log(blob.size) // ~4 GiB
86+```
87+
88+`blobFrom|blobFromSync|fileFrom|fileFromSync(path, [mimetype])`
89+
90+### Creating Blobs backed up by other async sources
91+Our Blob & File class are more generic then any other polyfills in the way that it can accept any blob look-a-like item
92+An example of this is that our blob implementation can be constructed with parts coming from [BlobDataItem](https://github.com/node-fetch/fetch-blob/blob/8ef89adad40d255a3bbd55cf38b88597c1cd5480/from.js#L32) (aka a filepath) or from [buffer.Blob](https://nodejs.org/api/buffer.html#buffer_new_buffer_blob_sources_options), It dose not have to implement all the methods - just enough that it can be read/understood by our Blob implementation. The minium requirements is that it has `Symbol.toStringTag`, `size`, `slice()` and either a `stream()` or a `arrayBuffer()` method. If you then wrap it in our Blob or File `new Blob([blobDataItem])` then you get all of the other methods that should be implemented in a blob or file
93+
94+An example of this could be to create a file or blob like item coming from a remote HTTP request. Or from a DataBase
95+
96+See the [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/API/Blob) and [tests](https://github.com/node-fetch/fetch-blob/blob/master/test.js) for more details of how to use the Blob.
97+
98+[npm-image]: https://flat.badgen.net/npm/v/fetch-blob
99+[npm-url]: https://www.npmjs.com/package/fetch-blob
100+[ci-image]: https://github.com/node-fetch/fetch-blob/workflows/CI/badge.svg
101+[ci-url]: https://github.com/node-fetch/fetch-blob/actions
102+[codecov-image]: https://flat.badgen.net/codecov/c/github/node-fetch/fetch-blob/master
103+[codecov-url]: https://codecov.io/gh/node-fetch/fetch-blob
104+[install-size-image]: https://flat.badgen.net/packagephobia/install/fetch-blob
105+[install-size-url]: https://packagephobia.now.sh/result?p=fetch-blob
106+[fs-blobs]: https://github.com/nodejs/node/issues/37340
prybar_assets/nodejs/node_modules/fetch-blob/file.d.tsnew file+2
@@ -0,0 +1,2 @@
1+/** @type {typeof globalThis.File} */ export const File: typeof globalThis.File;
2+export default File;
prybar_assets/nodejs/node_modules/fetch-blob/file.jsnew file+49
@@ -0,0 +1,49 @@
1+import Blob from './index.js'
2+
3+const _File = class File extends Blob {
4+ #lastModified = 0
5+ #name = ''
6+
7+ /**
8+ * @param {*[]} fileBits
9+ * @param {string} fileName
10+ * @param {{lastModified?: number, type?: string}} options
11+ */// @ts-ignore
12+ constructor (fileBits, fileName, options = {}) {
13+ if (arguments.length < 2) {
14+ throw new TypeError(`Failed to construct 'File': 2 arguments required, but only ${arguments.length} present.`)
15+ }
16+ super(fileBits, options)
17+
18+ if (options === null) options = {}
19+
20+ // Simulate WebIDL type casting for NaN value in lastModified option.
21+ const lastModified = options.lastModified === undefined ? Date.now() : Number(options.lastModified)
22+ if (!Number.isNaN(lastModified)) {
23+ this.#lastModified = lastModified
24+ }
25+
26+ this.#name = String(fileName)
27+ }
28+
29+ get name () {
30+ return this.#name
31+ }
32+
33+ get lastModified () {
34+ return this.#lastModified
35+ }
36+
37+ get [Symbol.toStringTag] () {
38+ return 'File'
39+ }
40+
41+ static [Symbol.hasInstance] (object) {
42+ return !!object && object instanceof Blob &&
43+ /^(File)$/.test(object[Symbol.toStringTag])
44+ }
45+}
46+
47+/** @type {typeof globalThis.File} */// @ts-ignore
48+export const File = _File
49+export default File
prybar_assets/nodejs/node_modules/fetch-blob/from.d.tsnew file+26
@@ -0,0 +1,26 @@
1+export default blobFromSync;
2+/**
3+ * @param {string} path filepath on the disk
4+ * @param {string} [type] mimetype to use
5+ */
6+export function blobFromSync(path: string, type?: string): Blob;
7+import File from "./file.js";
8+import Blob from "./index.js";
9+/**
10+ * @param {string} path filepath on the disk
11+ * @param {string} [type] mimetype to use
12+ * @returns {Promise<Blob>}
13+ */
14+export function blobFrom(path: string, type?: string): Promise<Blob>;
15+/**
16+ * @param {string} path filepath on the disk
17+ * @param {string} [type] mimetype to use
18+ * @returns {Promise<File>}
19+ */
20+export function fileFrom(path: string, type?: string): Promise<File>;
21+/**
22+ * @param {string} path filepath on the disk
23+ * @param {string} [type] mimetype to use
24+ */
25+export function fileFromSync(path: string, type?: string): File;
26+export { File, Blob };
prybar_assets/nodejs/node_modules/fetch-blob/from.jsnew file+100
@@ -0,0 +1,100 @@
1+import { statSync, createReadStream, promises as fs } from 'node:fs'
2+import { basename } from 'node:path'
3+import DOMException from 'node-domexception'
4+
5+import File from './file.js'
6+import Blob from './index.js'
7+
8+const { stat } = fs
9+
10+/**
11+ * @param {string} path filepath on the disk
12+ * @param {string} [type] mimetype to use
13+ */
14+const blobFromSync = (path, type) => fromBlob(statSync(path), path, type)
15+
16+/**
17+ * @param {string} path filepath on the disk
18+ * @param {string} [type] mimetype to use
19+ * @returns {Promise<Blob>}
20+ */
21+const blobFrom = (path, type) => stat(path).then(stat => fromBlob(stat, path, type))
22+
23+/**
24+ * @param {string} path filepath on the disk
25+ * @param {string} [type] mimetype to use
26+ * @returns {Promise<File>}
27+ */
28+const fileFrom = (path, type) => stat(path).then(stat => fromFile(stat, path, type))
29+
30+/**
31+ * @param {string} path filepath on the disk
32+ * @param {string} [type] mimetype to use
33+ */
34+const fileFromSync = (path, type) => fromFile(statSync(path), path, type)
35+
36+// @ts-ignore
37+const fromBlob = (stat, path, type = '') => new Blob([new BlobDataItem({
38+ path,
39+ size: stat.size,
40+ lastModified: stat.mtimeMs,
41+ start: 0
42+})], { type })
43+
44+// @ts-ignore
45+const fromFile = (stat, path, type = '') => new File([new BlobDataItem({
46+ path,
47+ size: stat.size,
48+ lastModified: stat.mtimeMs,
49+ start: 0
50+})], basename(path), { type, lastModified: stat.mtimeMs })
51+
52+/**
53+ * This is a blob backed up by a file on the disk
54+ * with minium requirement. Its wrapped around a Blob as a blobPart
55+ * so you have no direct access to this.
56+ *
57+ * @private
58+ */
59+class BlobDataItem {
60+ #path
61+ #start
62+
63+ constructor (options) {
64+ this.#path = options.path
65+ this.#start = options.start
66+ this.size = options.size
67+ this.lastModified = options.lastModified
68+ }
69+
70+ /**
71+ * Slicing arguments is first validated and formatted
72+ * to not be out of range by Blob.prototype.slice
73+ */
74+ slice (start, end) {
75+ return new BlobDataItem({
76+ path: this.#path,
77+ lastModified: this.lastModified,
78+ size: end - start,
79+ start: this.#start + start
80+ })
81+ }
82+
83+ async * stream () {
84+ const { mtimeMs } = await stat(this.#path)
85+ if (mtimeMs > this.lastModified) {
86+ 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')
87+ }
88+ yield * createReadStream(this.#path, {
89+ start: this.#start,
90+ end: this.#start + this.size - 1
91+ })
92+ }
93+
94+ get [Symbol.toStringTag] () {
95+ return 'Blob'
96+ }
97+}
98+
99+export default blobFromSync
100+export { File, Blob, blobFrom, blobFromSync, fileFrom, fileFromSync }
prybar_assets/nodejs/node_modules/fetch-blob/index.d.tsnew file+3
@@ -0,0 +1,3 @@
1+/** @type {typeof globalThis.Blob} */
2+export const Blob: typeof globalThis.Blob;
3+export default Blob;
prybar_assets/nodejs/node_modules/fetch-blob/index.jsnew file+250
@@ -0,0 +1,250 @@
1+/*! fetch-blob. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */
2+
3+// TODO (jimmywarting): in the feature use conditional loading with top level await (requires 14.x)
4+// Node has recently added whatwg stream into core
5+
6+import './streams.cjs'
7+
8+// 64 KiB (same size chrome slice theirs blob into Uint8array's)
9+const POOL_SIZE = 65536
10+
11+/** @param {(Blob | Uint8Array)[]} parts */
12+async function * toIterator (parts, clone = true) {
13+ for (const part of parts) {
14+ if ('stream' in part) {
15+ yield * (/** @type {AsyncIterableIterator<Uint8Array>} */ (part.stream()))
16+ } else if (ArrayBuffer.isView(part)) {
17+ if (clone) {
18+ let position = part.byteOffset
19+ const end = part.byteOffset + part.byteLength
20+ while (position !== end) {
21+ const size = Math.min(end - position, POOL_SIZE)
22+ const chunk = part.buffer.slice(position, position + size)
23+ position += chunk.byteLength
24+ yield new Uint8Array(chunk)
25+ }
26+ } else {
27+ yield part
28+ }
29+ /* c8 ignore next 10 */
30+ } else {
31+ // For blobs that have arrayBuffer but no stream method (nodes buffer.Blob)
32+ let position = 0, b = (/** @type {Blob} */ (part))
33+ while (position !== b.size) {
34+ const chunk = b.slice(position, Math.min(b.size, position + POOL_SIZE))
35+ const buffer = await chunk.arrayBuffer()
36+ position += buffer.byteLength
37+ yield new Uint8Array(buffer)
38+ }
39+ }
40+ }
41+}
42+
43+const _Blob = class Blob {
44+ /** @type {Array.<(Blob|Uint8Array)>} */
45+ #parts = []
46+ #type = ''
47+ #size = 0
48+ #endings = 'transparent'
49+
50+ /**
51+ * The Blob() constructor returns a new Blob object. The content
52+ * of the blob consists of the concatenation of the values given
53+ * in the parameter array.
54+ *
55+ * @param {*} blobParts
56+ * @param {{ type?: string, endings?: string }} [options]
57+ */
58+ constructor (blobParts = [], options = {}) {
59+ if (typeof blobParts !== 'object' || blobParts === null) {
60+ throw new TypeError('Failed to construct \'Blob\': The provided value cannot be converted to a sequence.')
61+ }
62+
63+ if (typeof blobParts[Symbol.iterator] !== 'function') {
64+ throw new TypeError('Failed to construct \'Blob\': The object must have a callable @@iterator property.')
65+ }
66+
67+ if (typeof options !== 'object' && typeof options !== 'function') {
68+ throw new TypeError('Failed to construct \'Blob\': parameter 2 cannot convert to dictionary.')
69+ }
70+
71+ if (options === null) options = {}
72+
73+ const encoder = new TextEncoder()
74+ for (const element of blobParts) {
75+ let part
76+ if (ArrayBuffer.isView(element)) {
77+ part = new Uint8Array(element.buffer.slice(element.byteOffset, element.byteOffset + element.byteLength))
78+ } else if (element instanceof ArrayBuffer) {
79+ part = new Uint8Array(element.slice(0))
80+ } else if (element instanceof Blob) {
81+ part = element
82+ } else {
83+ part = encoder.encode(`${element}`)
84+ }
85+
86+ this.#size += ArrayBuffer.isView(part) ? part.byteLength : part.size
87+ this.#parts.push(part)
88+ }
89+
90+ this.#endings = `${options.endings === undefined ? 'transparent' : options.endings}`
91+ const type = options.type === undefined ? '' : String(options.type)
92+ this.#type = /^[\x20-\x7E]*$/.test(type) ? type : ''
93+ }
94+
95+ /**
96+ * The Blob interface's size property returns the
97+ * size of the Blob in bytes.
98+ */
99+ get size () {
100+ return this.#size
101+ }
102+
103+ /**
104+ * The type property of a Blob object returns the MIME type of the file.
105+ */
106+ get type () {
107+ return this.#type
108+ }
109+
110+ /**
111+ * The text() method in the Blob interface returns a Promise
112+ * that resolves with a string containing the contents of
113+ * the blob, interpreted as UTF-8.
114+ *
115+ * @return {Promise<string>}
116+ */
117+ async text () {
118+ // More optimized than using this.arrayBuffer()
119+ // that requires twice as much ram
120+ const decoder = new TextDecoder()
121+ let str = ''
122+ for await (const part of toIterator(this.#parts, false)) {
123+ str += decoder.decode(part, { stream: true })
124+ }
125+ // Remaining
126+ str += decoder.decode()
127+ return str
128+ }
129+
130+ /**
131+ * The arrayBuffer() method in the Blob interface returns a
132+ * Promise that resolves with the contents of the blob as
133+ * binary data contained in an ArrayBuffer.
134+ *
135+ * @return {Promise<ArrayBuffer>}
136+ */
137+ async arrayBuffer () {
138+ // Easier way... Just a unnecessary overhead
139+ // const view = new Uint8Array(this.size);
140+ // await this.stream().getReader({mode: 'byob'}).read(view);
141+ // return view.buffer;
142+
143+ const data = new Uint8Array(this.size)
144+ let offset = 0
145+ for await (const chunk of toIterator(this.#parts, false)) {
146+ data.set(chunk, offset)
147+ offset += chunk.length
148+ }
149+
150+ return data.buffer
151+ }
152+
153+ stream () {
154+ const it = toIterator(this.#parts, true)
155+
156+ return new globalThis.ReadableStream({
157+ // @ts-ignore
158+ type: 'bytes',
159+ async pull (ctrl) {
160+ const chunk = await it.next()
161+ chunk.done ? ctrl.close() : ctrl.enqueue(chunk.value)
162+ },
163+
164+ async cancel () {
165+ await it.return()
166+ }
167+ })
168+ }
169+
170+ /**
171+ * The Blob interface's slice() method creates and returns a
172+ * new Blob object which contains data from a subset of the
173+ * blob on which it's called.
174+ *
175+ * @param {number} [start]
176+ * @param {number} [end]
177+ * @param {string} [type]
178+ */
179+ slice (start = 0, end = this.size, type = '') {
180+ const { size } = this
181+
182+ let relativeStart = start < 0 ? Math.max(size + start, 0) : Math.min(start, size)
183+ let relativeEnd = end < 0 ? Math.max(size + end, 0) : Math.min(end, size)
184+
185+ const span = Math.max(relativeEnd - relativeStart, 0)
186+ const parts = this.#parts
187+ const blobParts = []
188+ let added = 0
189+
190+ for (const part of parts) {
191+ // don't add the overflow to new blobParts
192+ if (added >= span) {
193+ break
194+ }
195+
196+ const size = ArrayBuffer.isView(part) ? part.byteLength : part.size
197+ if (relativeStart && size <= relativeStart) {
198+ // Skip the beginning and change the relative
199+ // start & end position as we skip the unwanted parts
200+ relativeStart -= size
201+ relativeEnd -= size
202+ } else {
203+ let chunk
204+ if (ArrayBuffer.isView(part)) {
205+ chunk = part.subarray(relativeStart, Math.min(size, relativeEnd))
206+ added += chunk.byteLength
207+ } else {
208+ chunk = part.slice(relativeStart, Math.min(size, relativeEnd))
209+ added += chunk.size
210+ }
211+ relativeEnd -= size
212+ blobParts.push(chunk)
213+ relativeStart = 0 // All next sequential parts should start at 0
214+ }
215+ }
216+
217+ const blob = new Blob([], { type: String(type).toLowerCase() })
218+ blob.#size = span
219+ blob.#parts = blobParts
220+
221+ return blob
222+ }
223+
224+ get [Symbol.toStringTag] () {
225+ return 'Blob'
226+ }
227+
228+ static [Symbol.hasInstance] (object) {
229+ return (
230+ object &&
231+ typeof object === 'object' &&
232+ typeof object.constructor === 'function' &&
233+ (
234+ typeof object.stream === 'function' ||
235+ typeof object.arrayBuffer === 'function'
236+ ) &&
237+ /^(Blob|File)$/.test(object[Symbol.toStringTag])
238+ )
239+ }
240+}
241+
242+Object.defineProperties(_Blob.prototype, {
243+ size: { enumerable: true },
244+ type: { enumerable: true },
245+ slice: { enumerable: true }
246+})
247+
248+/** @type {typeof globalThis.Blob} */
249+export const Blob = _Blob
250+export default Blob
prybar_assets/nodejs/node_modules/fetch-blob/package.jsonnew file+56
@@ -0,0 +1,56 @@
1+{
2+ "name": "fetch-blob",
3+ "version": "3.2.0",
4+ "description": "Blob & File implementation in Node.js, originally from node-fetch.",
5+ "main": "index.js",
6+ "type": "module",
7+ "files": [
8+ "from.js",
9+ "file.js",
10+ "file.d.ts",
11+ "index.js",
12+ "index.d.ts",
13+ "from.d.ts",
14+ "streams.cjs"
15+ ],
16+ "scripts": {
17+ "test": "node --experimental-loader ./test/http-loader.js ./test/test-wpt-in-node.js",
18+ "report": "c8 --reporter json --reporter text npm run test",
19+ "coverage": "npm run report && codecov -f coverage/coverage-final.json",
20+ "prepublishOnly": "tsc --declaration --emitDeclarationOnly --allowJs index.js from.js"
21+ },
22+ "repository": "https://github.com/node-fetch/fetch-blob.git",
23+ "keywords": [
24+ "blob",
25+ "file",
26+ "node-fetch"
27+ ],
28+ "engines": {
29+ "node": "^12.20 || >= 14.13"
30+ },
31+ "author": "Jimmy Wärting <jimmy@warting.se> (https://jimmy.warting.se)",
32+ "license": "MIT",
33+ "bugs": {
34+ "url": "https://github.com/node-fetch/fetch-blob/issues"
35+ },
36+ "homepage": "https://github.com/node-fetch/fetch-blob#readme",
37+ "devDependencies": {
38+ "@types/node": "^17.0.9",
39+ "c8": "^7.11.0",
40+ "typescript": "^4.5.4"
41+ },
42+ "funding": [
43+ {
44+ "type": "github",
45+ "url": "https://github.com/sponsors/jimmywarting"
46+ },
47+ {
48+ "type": "paypal",
49+ "url": "https://paypal.me/jimmywarting"
50+ }
51+ ],
52+ "dependencies": {
53+ "node-domexception": "^1.0.0",
54+ "web-streams-polyfill": "^3.0.3"
55+ }
56+}
prybar_assets/nodejs/node_modules/fetch-blob/streams.cjsnew file+51
@@ -0,0 +1,51 @@
1+/* c8 ignore start */
2+// 64 KiB (same size chrome slice theirs blob into Uint8array's)
3+const POOL_SIZE = 65536
4+
5+if (!globalThis.ReadableStream) {
6+ // `node:stream/web` got introduced in v16.5.0 as experimental
7+ // and it's preferred over the polyfilled version. So we also
8+ // suppress the warning that gets emitted by NodeJS for using it.
9+ try {
10+ const process = require('node:process')
11+ const { emitWarning } = process
12+ try {
13+ process.emitWarning = () => {}
14+ Object.assign(globalThis, require('node:stream/web'))
15+ process.emitWarning = emitWarning
16+ } catch (error) {
17+ process.emitWarning = emitWarning
18+ throw error
19+ }
20+ } catch (error) {
21+ // fallback to polyfill implementation
22+ Object.assign(globalThis, require('web-streams-polyfill/dist/ponyfill.es2018.js'))
23+ }
24+}
25+
26+try {
27+ // Don't use node: prefix for this, require+node: is not supported until node v14.14
28+ // Only `import()` can use prefix in 12.20 and later
29+ const { Blob } = require('buffer')
30+ if (Blob && !Blob.prototype.stream) {
31+ Blob.prototype.stream = function name (params) {
32+ let position = 0
33+ const blob = this
34+
35+ return new ReadableStream({
36+ type: 'bytes',
37+ async pull (ctrl) {
38+ const chunk = blob.slice(position, Math.min(blob.size, position + POOL_SIZE))
39+ const buffer = await chunk.arrayBuffer()
40+ position += buffer.byteLength
41+ ctrl.enqueue(new Uint8Array(buffer))
42+
43+ if (position === blob.size) {
44+ ctrl.close()
45+ }
46+ }
47+ })
48+ }
49+ }
50+} catch (error) {}
51+/* c8 ignore end */
prybar_assets/nodejs/node_modules/formdata-polyfill/FormData.jsnew file+441
@@ -0,0 +1,441 @@
1+/* formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */
2+
3+/* global FormData self Blob File */
4+/* eslint-disable no-inner-declarations */
5+
6+if (typeof Blob !== 'undefined' && (typeof FormData === 'undefined' || !FormData.prototype.keys)) {
7+ const global = typeof globalThis === 'object'
8+ ? globalThis
9+ : typeof window === 'object'
10+ ? window
11+ : typeof self === 'object' ? self : this
12+
13+ // keep a reference to native implementation
14+ const _FormData = global.FormData
15+
16+ // To be monkey patched
17+ const _send = global.XMLHttpRequest && global.XMLHttpRequest.prototype.send
18+ const _fetch = global.Request && global.fetch
19+ const _sendBeacon = global.navigator && global.navigator.sendBeacon
20+ // Might be a worker thread...
21+ const _match = global.Element && global.Element.prototype
22+
23+ // Unable to patch Request/Response constructor correctly #109
24+ // only way is to use ES6 class extend
25+ // https://github.com/babel/babel/issues/1966
26+
27+ const stringTag = global.Symbol && Symbol.toStringTag
28+
29+ // Add missing stringTags to blob and files
30+ if (stringTag) {
31+ if (!Blob.prototype[stringTag]) {
32+ Blob.prototype[stringTag] = 'Blob'
33+ }
34+
35+ if ('File' in global && !File.prototype[stringTag]) {
36+ File.prototype[stringTag] = 'File'
37+ }
38+ }
39+
40+ // Fix so you can construct your own File
41+ try {
42+ new File([], '') // eslint-disable-line
43+ } catch (a) {
44+ global.File = function File (b, d, c) {
45+ const blob = new Blob(b, c || {})
46+ const t = c && void 0 !== c.lastModified ? new Date(c.lastModified) : new Date()
47+
48+ Object.defineProperties(blob, {
49+ name: {
50+ value: d
51+ },
52+ lastModified: {
53+ value: +t
54+ },
55+ toString: {
56+ value () {
57+ return '[object File]'
58+ }
59+ }
60+ })
61+
62+ if (stringTag) {
63+ Object.defineProperty(blob, stringTag, {
64+ value: 'File'
65+ })
66+ }
67+
68+ return blob
69+ }
70+ }
71+
72+ function ensureArgs (args, expected) {
73+ if (args.length < expected) {
74+ throw new TypeError(`${expected} argument required, but only ${args.length} present.`)
75+ }
76+ }
77+
78+ /**
79+ * @param {string} name
80+ * @param {string | undefined} filename
81+ * @returns {[string, File|string]}
82+ */
83+ function normalizeArgs (name, value, filename) {
84+ if (value instanceof Blob) {
85+ filename = filename !== undefined
86+ ? String(filename + '')
87+ : typeof value.name === 'string'
88+ ? value.name
89+ : 'blob'
90+
91+ if (value.name !== filename || Object.prototype.toString.call(value) === '[object Blob]') {
92+ value = new File([value], filename)
93+ }
94+ return [String(name), value]
95+ }
96+ return [String(name), String(value)]
97+ }
98+
99+ // normalize line feeds for textarea
100+ // https://html.spec.whatwg.org/multipage/form-elements.html#textarea-line-break-normalisation-transformation
101+ function normalizeLinefeeds (value) {
102+ return value.replace(/\r?\n|\r/g, '\r\n')
103+ }
104+
105+ /**
106+ * @template T
107+ * @param {ArrayLike<T>} arr
108+ * @param {{ (elm: T): void; }} cb
109+ */
110+ function each (arr, cb) {
111+ for (let i = 0; i < arr.length; i++) {
112+ cb(arr[i])
113+ }
114+ }
115+
116+ const escape = str => str.replace(/\n/g, '%0A').replace(/\r/g, '%0D').replace(/"/g, '%22')
117+
118+ /**
119+ * @implements {Iterable}
120+ */
121+ class FormDataPolyfill {
122+ /**
123+ * FormData class
124+ *
125+ * @param {HTMLFormElement=} form
126+ */
127+ constructor (form) {
128+ /** @type {[string, string|File][]} */
129+ this._data = []
130+
131+ const self = this
132+ form && each(form.elements, (/** @type {HTMLInputElement} */ elm) => {
133+ if (
134+ !elm.name ||
135+ elm.disabled ||
136+ elm.type === 'submit' ||
137+ elm.type === 'button' ||
138+ elm.matches('form fieldset[disabled] *')
139+ ) return
140+
141+ if (elm.type === 'file') {
142+ const files = elm.files && elm.files.length
143+ ? elm.files
144+ : [new File([], '', { type: 'application/octet-stream' })] // #78
145+
146+ each(files, file => {
147+ self.append(elm.name, file)
148+ })
149+ } else if (elm.type === 'select-multiple' || elm.type === 'select-one') {
150+ each(elm.options, opt => {
151+ !opt.disabled && opt.selected && self.append(elm.name, opt.value)
152+ })
153+ } else if (elm.type === 'checkbox' || elm.type === 'radio') {
154+ if (elm.checked) self.append(elm.name, elm.value)
155+ } else {
156+ const value = elm.type === 'textarea' ? normalizeLinefeeds(elm.value) : elm.value
157+ self.append(elm.name, value)
158+ }
159+ })
160+ }
161+
162+ /**
163+ * Append a field
164+ *
165+ * @param {string} name field name
166+ * @param {string|Blob|File} value string / blob / file
167+ * @param {string=} filename filename to use with blob
168+ * @return {undefined}
169+ */
170+ append (name, value, filename) {
171+ ensureArgs(arguments, 2)
172+ this._data.push(normalizeArgs(name, value, filename))
173+ }
174+
175+ /**
176+ * Delete all fields values given name
177+ *
178+ * @param {string} name Field name
179+ * @return {undefined}
180+ */
181+ delete (name) {
182+ ensureArgs(arguments, 1)
183+ const result = []
184+ name = String(name)
185+
186+ each(this._data, entry => {
187+ entry[0] !== name && result.push(entry)
188+ })
189+
190+ this._data = result
191+ }
192+
193+ /**
194+ * Iterate over all fields as [name, value]
195+ *
196+ * @return {Iterator}
197+ */
198+ * entries () {
199+ for (var i = 0; i < this._data.length; i++) {
200+ yield this._data[i]
201+ }
202+ }
203+
204+ /**
205+ * Iterate over all fields
206+ *
207+ * @param {Function} callback Executed for each item with parameters (value, name, thisArg)
208+ * @param {Object=} thisArg `this` context for callback function
209+ */
210+ forEach (callback, thisArg) {
211+ ensureArgs(arguments, 1)
212+ for (const [name, value] of this) {
213+ callback.call(thisArg, value, name, this)
214+ }
215+ }
216+
217+ /**
218+ * Return first field value given name
219+ * or null if non existent
220+ *
221+ * @param {string} name Field name
222+ * @return {string|File|null} value Fields value
223+ */
224+ get (name) {
225+ ensureArgs(arguments, 1)
226+ const entries = this._data
227+ name = String(name)
228+ for (let i = 0; i < entries.length; i++) {
229+ if (entries[i][0] === name) {
230+ return entries[i][1]
231+ }
232+ }
233+ return null
234+ }
235+
236+ /**
237+ * Return all fields values given name
238+ *
239+ * @param {string} name Fields name
240+ * @return {Array} [{String|File}]
241+ */
242+ getAll (name) {
243+ ensureArgs(arguments, 1)
244+ const result = []
245+ name = String(name)
246+ each(this._data, data => {
247+ data[0] === name && result.push(data[1])
248+ })
249+
250+ return result
251+ }
252+
253+ /**
254+ * Check for field name existence
255+ *
256+ * @param {string} name Field name
257+ * @return {boolean}
258+ */
259+ has (name) {
260+ ensureArgs(arguments, 1)
261+ name = String(name)
262+ for (let i = 0; i < this._data.length; i++) {
263+ if (this._data[i][0] === name) {
264+ return true
265+ }
266+ }
267+ return false
268+ }
269+
270+ /**
271+ * Iterate over all fields name
272+ *
273+ * @return {Iterator}
274+ */
275+ * keys () {
276+ for (const [name] of this) {
277+ yield name
278+ }
279+ }
280+
281+ /**
282+ * Overwrite all values given name
283+ *
284+ * @param {string} name Filed name
285+ * @param {string} value Field value
286+ * @param {string=} filename Filename (optional)
287+ */
288+ set (name, value, filename) {
289+ ensureArgs(arguments, 2)
290+ name = String(name)
291+ /** @type {[string, string|File][]} */
292+ const result = []
293+ const args = normalizeArgs(name, value, filename)
294+ let replace = true
295+
296+ // - replace the first occurrence with same name
297+ // - discards the remaining with same name
298+ // - while keeping the same order items where added
299+ each(this._data, data => {
300+ data[0] === name
301+ ? replace && (replace = !result.push(args))
302+ : result.push(data)
303+ })
304+
305+ replace && result.push(args)
306+
307+ this._data = result
308+ }
309+
310+ /**
311+ * Iterate over all fields
312+ *
313+ * @return {Iterator}
314+ */
315+ * values () {
316+ for (const [, value] of this) {
317+ yield value
318+ }
319+ }
320+
321+ /**
322+ * Return a native (perhaps degraded) FormData with only a `append` method
323+ * Can throw if it's not supported
324+ *
325+ * @return {FormData}
326+ */
327+ ['_asNative'] () {
328+ const fd = new _FormData()
329+
330+ for (const [name, value] of this) {
331+ fd.append(name, value)
332+ }
333+
334+ return fd
335+ }
336+
337+ /**
338+ * [_blob description]
339+ *
340+ * @return {Blob} [description]
341+ */
342+ ['_blob'] () {
343+ const boundary = '----formdata-polyfill-' + Math.random(),
344+ chunks = [],
345+ p = `--${boundary}\r\nContent-Disposition: form-data; name="`
346+ this.forEach((value, name) => typeof value == 'string'
347+ ? chunks.push(p + escape(normalizeLinefeeds(name)) + `"\r\n\r\n${normalizeLinefeeds(value)}\r\n`)
348+ : chunks.push(p + escape(normalizeLinefeeds(name)) + `"; filename="${escape(value.name)}"\r\nContent-Type: ${value.type||"application/octet-stream"}\r\n\r\n`, value, `\r\n`))
349+ chunks.push(`--${boundary}--`)
350+ return new Blob(chunks, {
351+ type: "multipart/form-data; boundary=" + boundary
352+ })
353+ }
354+
355+ /**
356+ * The class itself is iterable
357+ * alias for formdata.entries()
358+ *
359+ * @return {Iterator}
360+ */
361+ [Symbol.iterator] () {
362+ return this.entries()
363+ }
364+
365+ /**
366+ * Create the default string description.
367+ *
368+ * @return {string} [object FormData]
369+ */
370+ toString () {
371+ return '[object FormData]'
372+ }
373+ }
374+
375+ if (_match && !_match.matches) {
376+ _match.matches =
377+ _match.matchesSelector ||
378+ _match.mozMatchesSelector ||
379+ _match.msMatchesSelector ||
380+ _match.oMatchesSelector ||
381+ _match.webkitMatchesSelector ||
382+ function (s) {
383+ var matches = (this.document || this.ownerDocument).querySelectorAll(s)
384+ var i = matches.length
385+ while (--i >= 0 && matches.item(i) !== this) {}
386+ return i > -1
387+ }
388+ }
389+
390+ if (stringTag) {
391+ /**
392+ * Create the default string description.
393+ * It is accessed internally by the Object.prototype.toString().
394+ */
395+ FormDataPolyfill.prototype[stringTag] = 'FormData'
396+ }
397+
398+ // Patch xhr's send method to call _blob transparently
399+ if (_send) {
400+ const setRequestHeader = global.XMLHttpRequest.prototype.setRequestHeader
401+
402+ global.XMLHttpRequest.prototype.setRequestHeader = function (name, value) {
403+ setRequestHeader.call(this, name, value)
404+ if (name.toLowerCase() === 'content-type') this._hasContentType = true
405+ }
406+
407+ global.XMLHttpRequest.prototype.send = function (data) {
408+ // need to patch send b/c old IE don't send blob's type (#44)
409+ if (data instanceof FormDataPolyfill) {
410+ const blob = data['_blob']()
411+ if (!this._hasContentType) this.setRequestHeader('Content-Type', blob.type)
412+ _send.call(this, blob)
413+ } else {
414+ _send.call(this, data)
415+ }
416+ }
417+ }
418+
419+ // Patch fetch's function to call _blob transparently
420+ if (_fetch) {
421+ global.fetch = function (input, init) {
422+ if (init && init.body && init.body instanceof FormDataPolyfill) {
423+ init.body = init.body['_blob']()
424+ }
425+
426+ return _fetch.call(this, input, init)
427+ }
428+ }
429+
430+ // Patch navigator.sendBeacon to use native FormData
431+ if (_sendBeacon) {
432+ global.navigator.sendBeacon = function (url, data) {
433+ if (data instanceof FormDataPolyfill) {
434+ data = data['_asNative']()
435+ }
436+ return _sendBeacon.call(this, url, data)
437+ }
438+ }
439+
440+ global['FormData'] = FormDataPolyfill
441+}
prybar_assets/nodejs/node_modules/formdata-polyfill/LICENSEnew file+21
@@ -0,0 +1,21 @@
1+MIT License
2+
3+Copyright (c) 2016 Jimmy Karl Roland Wärting
4+
5+Permission is hereby granted, free of charge, to any person obtaining a copy
6+of this software and associated documentation files (the "Software"), to deal
7+in the Software without restriction, including without limitation the rights
8+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+copies of the Software, and to permit persons to whom the Software is
10+furnished to do so, subject to the following conditions:
11+
12+The above copyright notice and this permission notice shall be included in all
13+copies or substantial portions of the Software.
14+
15+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+SOFTWARE.
prybar_assets/nodejs/node_modules/formdata-polyfill/README.mdnew file+145
@@ -0,0 +1,145 @@
1+### A `FormData` polyfill for the browser ...and a module for NodeJS (`New!`)
2+
3+```bash
4+npm install formdata-polyfill
5+```
6+
7+The browser polyfill will likely have done its part already, and i hope you stop supporting old browsers c",)<br>
8+But NodeJS still laks a proper FormData<br>The good old form-data package is a very old and isn't spec compatible and dose some abnormal stuff to construct and read FormData instances that other http libraries are not happy about when it comes to follow the spec.
9+
10+### The NodeJS / ESM version
11+- The modular (~2.3 KiB minified uncompressed) version of this package is independent of any browser stuff and don't patch anything
12+- It's as pure/spec compatible as it possible gets the test are run by WPT.
13+- It's compatible with [node-fetch](https://github.com/node-fetch/node-fetch).
14+- It have higher platform dependencies as it uses classes, symbols, ESM & private fields
15+- Only dependency it has is [fetch-blob](https://github.com/node-fetch/fetch-blob)
16+
17+```js
18+// Node example
19+import fetch from 'node-fetch'
20+import File from 'fetch-blob/file.js'
21+import { fileFromSync } from 'fetch-blob/from.js'
22+import { FormData } from 'formdata-polyfill/esm.min.js'
23+
24+const file = fileFromSync('./README.md')
25+const fd = new FormData()
26+
27+fd.append('file-upload', new File(['abc'], 'hello-world.txt'))
28+fd.append('file-upload', file)
29+
30+// it's also possible to append file/blob look-a-like items
31+// if you have streams coming from other destinations
32+fd.append('file-upload', {
33+ size: 123,
34+ type: '',
35+ name: 'cat-video.mp4',
36+ stream() { return stream },
37+ [Symbol.toStringTag]: 'File'
38+})
39+
40+fetch('https://httpbin.org/post', { method: 'POST', body: fd })
41+```
42+
43+----
44+
45+It also comes with way to convert FormData into Blobs - it's not something that every developer should have to deal with.
46+It's mainly for [node-fetch](https://github.com/node-fetch/node-fetch) and other http library to ease the process of serializing a FormData into a blob and just wish to deal with Blobs instead (Both Deno and Undici adapted a version of this [formDataToBlob](https://github.com/jimmywarting/FormData/blob/5ddea9e0de2fc5e246ab1b2f9d404dee0c319c02/formdata-to-blob.js) to the core and passes all WPT tests run by the browser itself)
47+```js
48+import { Readable } from 'node:stream'
49+import { FormData, formDataToBlob } from 'formdata-polyfill/esm.min.js'
50+
51+const blob = formDataToBlob(new FormData())
52+fetch('https://httpbin.org/post', { method: 'POST', body: blob })
53+
54+// node built in http and other similar http library have to do:
55+const stream = Readable.from(blob.stream())
56+const req = http.request('http://httpbin.org/post', {
57+ method: 'post',
58+ headers: {
59+ 'Content-Length': blob.size,
60+ 'Content-Type': blob.type
61+ }
62+})
63+stream.pipe(req)
64+```
65+
66+PS: blob & file that are appended to the FormData will not be read until any of the serialized blob read-methods gets called
67+...so uploading very large files is no biggie
68+
69+### Browser polyfill
70+
71+usage:
72+
73+```js
74+import 'formdata-polyfill' // that's it
75+```
76+
77+The browser polyfill conditionally replaces the native implementation rather than fixing the missing functions,
78+since otherwise there is no way to get or delete existing values in the FormData object.
79+Therefore this also patches `XMLHttpRequest.prototype.send` and `fetch` to send the `FormData` as a blob,
80+and `navigator.sendBeacon` to send native `FormData`.
81+
82+I was unable to patch the Response/Request constructor
83+so if you are constructing them with FormData then you need to call `fd._blob()` manually.
84+
85+```js
86+new Request(url, {
87+ method: 'post',
88+ body: fd._blob ? fd._blob() : fd
89+})
90+```
91+
92+Dependencies
93+---
94+
95+If you need to support IE <= 9 then I recommend you to include eligrey's [blob.js]
96+(which i hope you don't - since IE is now dead)
97+
98+<details>
99+ <summary>Updating from 2.x to 3.x</summary>
100+
101+Previously you had to import the polyfill and use that,
102+since it didn't replace the global (existing) FormData implementation.
103+But now it transparently calls `_blob()` for you when you are sending something with fetch or XHR,
104+by way of monkey-patching the `XMLHttpRequest.prototype.send` and `fetch` functions.
105+
106+So you maybe had something like this:
107+
108+```javascript
109+var FormData = require('formdata-polyfill')
110+var fd = new FormData(form)
111+xhr.send(fd._blob())
112+```
113+
114+There is no longer anything exported from the module
115+(though you of course still need to import it to install the polyfill),
116+so you can now use the FormData object as normal:
117+
118+```javascript
119+require('formdata-polyfill')
120+var fd = new FormData(form)
121+xhr.send(fd)
122+```
123+
124+</details>
125+
126+
127+
128+Native Browser compatibility (as of 2021-05-08)
129+---
130+Based on this you can decide for yourself if you need this polyfill.
131+
132+[![screenshot](https://user-images.githubusercontent.com/1148376/117550329-0993aa80-b040-11eb-976c-14e31f1a3ba4.png)](https://developer.mozilla.org/en-US/docs/Web/API/FormData#Browser_compatibility)
133+
134+
135+
136+This normalizes support for the FormData API:
137+
138+ - `append` with filename
139+ - `delete()`, `get()`, `getAll()`, `has()`, `set()`
140+ - `entries()`, `keys()`, `values()`, and support for `for...of`
141+ - Available in web workers (just include the polyfill)
142+
143+ [npm-image]: https://img.shields.io/npm/v/formdata-polyfill.svg
144+ [npm-url]: https://www.npmjs.com/package/formdata-polyfill
145+ [blob.js]: https://github.com/eligrey/Blob.js
prybar_assets/nodejs/node_modules/formdata-polyfill/esm.min.d.tsnew file+5
@@ -0,0 +1,5 @@
1+export declare const FormData: {
2+ new (): FormData;
3+ prototype: FormData;
4+};
5+export declare function formDataToBlob(formData: FormData): Blob;
prybar_assets/nodejs/node_modules/formdata-polyfill/esm.min.jsnew file+40
@@ -0,0 +1,40 @@
1+/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */
2+
3+import C from 'fetch-blob'
4+import F from 'fetch-blob/file.js'
5+
6+var {toStringTag:t,iterator:i,hasInstance:h}=Symbol,
7+r=Math.random,
8+m='append,set,get,getAll,delete,keys,values,entries,forEach,constructor'.split(','),
9+f=(a,b,c)=>(a+='',/^(Blob|File)$/.test(b && b[t])?[(c=c!==void 0?c+'':b[t]=='File'?b.name:'blob',a),b.name!==c||b[t]=='blob'?new F([b],c,b):b]:[a,b+'']),
10+e=(c,f)=>(f?c:c.replace(/\r?\n|\r/g,'\r\n')).replace(/\n/g,'%0A').replace(/\r/g,'%0D').replace(/"/g,'%22'),
11+x=(n, a, e)=>{if(a.length<e){throw new TypeError(`Failed to execute '${n}' on 'FormData': ${e} arguments required, but only ${a.length} present.`)}}
12+
13+export const File = F
14+
15+/** @type {typeof globalThis.FormData} */
16+export const FormData = class FormData {
17+#d=[];
18+constructor(...a){if(a.length)throw new TypeError(`Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'.`)}
19+get [t]() {return 'FormData'}
20+[i](){return this.entries()}
21+static [h](o) {return o&&typeof o==='object'&&o[t]==='FormData'&&!m.some(m=>typeof o[m]!='function')}
22+append(...a){x('append',arguments,2);this.#d.push(f(...a))}
23+delete(a){x('delete',arguments,1);a+='';this.#d=this.#d.filter(([b])=>b!==a)}
24+get(a){x('get',arguments,1);a+='';for(var b=this.#d,l=b.length,c=0;c<l;c++)if(b[c][0]===a)return b[c][1];return null}
25+getAll(a,b){x('getAll',arguments,1);b=[];a+='';this.#d.forEach(c=>c[0]===a&&b.push(c[1]));return b}
26+has(a){x('has',arguments,1);a+='';return this.#d.some(b=>b[0]===a)}
27+forEach(a,b){x('forEach',arguments,1);for(var [c,d]of this)a.call(b,d,c,this)}
28+set(...a){x('set',arguments,2);var b=[],c=!0;a=f(...a);this.#d.forEach(d=>{d[0]===a[0]?c&&(c=!b.push(a)):b.push(d)});c&&b.push(a);this.#d=b}
29+*entries(){yield*this.#d}
30+*keys(){for(var[a]of this)yield a}
31+*values(){for(var[,a]of this)yield a}}
32+
33+/** @param {FormData} F */
34+export function formDataToBlob (F,B=C){
35+var b=`${r()}${r()}`.replace(/\./g, '').slice(-28).padStart(32, '-'),c=[],p=`--${b}\r\nContent-Disposition: form-data; name="`
36+F.forEach((v,n)=>typeof v=='string'
37+?c.push(p+e(n)+`"\r\n\r\n${v.replace(/\r(?!\n)|(?<!\r)\n/g, '\r\n')}\r\n`)
38+:c.push(p+e(n)+`"; filename="${e(v.name, 1)}"\r\nContent-Type: ${v.type||"application/octet-stream"}\r\n\r\n`, v, '\r\n'))
39+c.push(`--${b}--`)
40+return new B(c,{type:"multipart/form-data; boundary="+b})}
prybar_assets/nodejs/node_modules/formdata-polyfill/formdata-to-blob.jsnew file+39
@@ -0,0 +1,39 @@
1+/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */
2+
3+const escape = (str, filename) =>
4+ (filename ? str : str.replace(/\r?\n|\r/g, '\r\n'))
5+ .replace(/\n/g, '%0A')
6+ .replace(/\r/g, '%0D')
7+ .replace(/"/g, '%22')
8+
9+/**
10+ * pure function to convert any formData instance to a Blob
11+ * instances synchronous without reading all of the files
12+ *
13+ * @param {FormData|*} formData an instance of a formData Class
14+ * @param {Blob|*} [BlobClass=Blob] the Blob class to use when constructing it
15+ */
16+export function formDataToBlob (formData, BlobClass = Blob) {
17+ const boundary = ('----formdata-polyfill-' + Math.random())
18+ const chunks = []
19+ const prefix = `--${boundary}\r\nContent-Disposition: form-data; name="`
20+
21+ for (let [name, value] of formData) {
22+ if (typeof value === 'string') {
23+ chunks.push(prefix + escape(name) + `"\r\n\r\n${value.replace(/\r(?!\n)|(?<!\r)\n/g, '\r\n')}\r\n`)
24+ } else {
25+ chunks.push(
26+ prefix + escape(name) + `"; filename="${escape(value.name, 1)}"\r\n` +
27+ `Content-Type: ${value.type || 'application/octet-stream'}\r\n\r\n`,
28+ value,
29+ '\r\n'
30+ )
31+ }
32+ }
33+
34+ chunks.push(`--${boundary}--`)
35+
36+ return new BlobClass(chunks, {
37+ type: 'multipart/form-data; boundary=' + boundary
38+ })
39+}
prybar_assets/nodejs/node_modules/formdata-polyfill/formdata.min.jsnew file+21
@@ -0,0 +1,21 @@
1+/*! formdata-polyfill. MIT License. Jimmy W?rting <https://jimmy.warting.se/opensource> */
2+;(function(){var h;function l(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}var m="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};
3+function n(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var q=n(this);function r(a,b){if(b)a:{var c=q;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&m(c,a,{configurable:!0,writable:!0,value:b})}}
4+r("Symbol",function(a){function b(f){if(this instanceof b)throw new TypeError("Symbol is not a constructor");return new c(d+(f||"")+"_"+e++,f)}function c(f,g){this.A=f;m(this,"description",{configurable:!0,writable:!0,value:g})}if(a)return a;c.prototype.toString=function(){return this.A};var d="jscomp_symbol_"+(1E9*Math.random()>>>0)+"_",e=0;return b});
5+r("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;c<b.length;c++){var d=q[b[c]];"function"===typeof d&&"function"!=typeof d.prototype[a]&&m(d.prototype,a,{configurable:!0,writable:!0,value:function(){return u(l(this))}})}return a});function u(a){a={next:a};a[Symbol.iterator]=function(){return this};return a}
6+function v(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):{next:l(a)}}var w;if("function"==typeof Object.setPrototypeOf)w=Object.setPrototypeOf;else{var y;a:{var z={a:!0},A={};try{A.__proto__=z;y=A.a;break a}catch(a){}y=!1}w=y?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var B=w;function C(){this.m=!1;this.j=null;this.v=void 0;this.h=1;this.u=this.C=0;this.l=null}
7+function D(a){if(a.m)throw new TypeError("Generator is already running");a.m=!0}C.prototype.o=function(a){this.v=a};C.prototype.s=function(a){this.l={D:a,F:!0};this.h=this.C||this.u};C.prototype.return=function(a){this.l={return:a};this.h=this.u};function E(a,b){a.h=3;return{value:b}}function F(a){this.g=new C;this.G=a}F.prototype.o=function(a){D(this.g);if(this.g.j)return G(this,this.g.j.next,a,this.g.o);this.g.o(a);return H(this)};
8+function I(a,b){D(a.g);var c=a.g.j;if(c)return G(a,"return"in c?c["return"]:function(d){return{value:d,done:!0}},b,a.g.return);a.g.return(b);return H(a)}F.prototype.s=function(a){D(this.g);if(this.g.j)return G(this,this.g.j["throw"],a,this.g.o);this.g.s(a);return H(this)};
9+function G(a,b,c,d){try{var e=b.call(a.g.j,c);if(!(e instanceof Object))throw new TypeError("Iterator result "+e+" is not an object");if(!e.done)return a.g.m=!1,e;var f=e.value}catch(g){return a.g.j=null,a.g.s(g),H(a)}a.g.j=null;d.call(a.g,f);return H(a)}function H(a){for(;a.g.h;)try{var b=a.G(a.g);if(b)return a.g.m=!1,{value:b.value,done:!1}}catch(c){a.g.v=void 0,a.g.s(c)}a.g.m=!1;if(a.g.l){b=a.g.l;a.g.l=null;if(b.F)throw b.D;return{value:b.return,done:!0}}return{value:void 0,done:!0}}
10+function J(a){this.next=function(b){return a.o(b)};this.throw=function(b){return a.s(b)};this.return=function(b){return I(a,b)};this[Symbol.iterator]=function(){return this}}function K(a,b){b=new J(new F(b));B&&a.prototype&&B(b,a.prototype);return b}function L(a,b){a instanceof String&&(a+="");var c=0,d=!1,e={next:function(){if(!d&&c<a.length){var f=c++;return{value:b(f,a[f]),done:!1}}d=!0;return{done:!0,value:void 0}}};e[Symbol.iterator]=function(){return e};return e}
11+r("Array.prototype.entries",function(a){return a?a:function(){return L(this,function(b,c){return[b,c]})}});
12+if("undefined"!==typeof Blob&&("undefined"===typeof FormData||!FormData.prototype.keys)){var M=function(a,b){for(var c=0;c<a.length;c++)b(a[c])},N=function(a){return a.replace(/\r?\n|\r/g,"\r\n")},O=function(a,b,c){if(b instanceof Blob){c=void 0!==c?String(c+""):"string"===typeof b.name?b.name:"blob";if(b.name!==c||"[object Blob]"===Object.prototype.toString.call(b))b=new File([b],c);return[String(a),b]}return[String(a),String(b)]},P=function(a,b){if(a.length<b)throw new TypeError(b+" argument required, but only "+
13+a.length+" present.");},Q="object"===typeof globalThis?globalThis:"object"===typeof window?window:"object"===typeof self?self:this,R=Q.FormData,S=Q.XMLHttpRequest&&Q.XMLHttpRequest.prototype.send,T=Q.Request&&Q.fetch,U=Q.navigator&&Q.navigator.sendBeacon,V=Q.Element&&Q.Element.prototype,W=Q.Symbol&&Symbol.toStringTag;W&&(Blob.prototype[W]||(Blob.prototype[W]="Blob"),"File"in Q&&!File.prototype[W]&&(File.prototype[W]="File"));try{new File([],"")}catch(a){Q.File=function(b,c,d){b=new Blob(b,d||{});
14+Object.defineProperties(b,{name:{value:c},lastModified:{value:+(d&&void 0!==d.lastModified?new Date(d.lastModified):new Date)},toString:{value:function(){return"[object File]"}}});W&&Object.defineProperty(b,W,{value:"File"});return b}}var escape=function(a){return a.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22")},X=function(a){this.i=[];var b=this;a&&M(a.elements,function(c){if(c.name&&!c.disabled&&"submit"!==c.type&&"button"!==c.type&&!c.matches("form fieldset[disabled] *"))if("file"===
15+c.type){var d=c.files&&c.files.length?c.files:[new File([],"",{type:"application/octet-stream"})];M(d,function(e){b.append(c.name,e)})}else"select-multiple"===c.type||"select-one"===c.type?M(c.options,function(e){!e.disabled&&e.selected&&b.append(c.name,e.value)}):"checkbox"===c.type||"radio"===c.type?c.checked&&b.append(c.name,c.value):(d="textarea"===c.type?N(c.value):c.value,b.append(c.name,d))})};h=X.prototype;h.append=function(a,b,c){P(arguments,2);this.i.push(O(a,b,c))};h.delete=function(a){P(arguments,
16+1);var b=[];a=String(a);M(this.i,function(c){c[0]!==a&&b.push(c)});this.i=b};h.entries=function b(){var c,d=this;return K(b,function(e){1==e.h&&(c=0);if(3!=e.h)return c<d.i.length?e=E(e,d.i[c]):(e.h=0,e=void 0),e;c++;e.h=2})};h.forEach=function(b,c){P(arguments,1);for(var d=v(this),e=d.next();!e.done;e=d.next()){var f=v(e.value);e=f.next().value;f=f.next().value;b.call(c,f,e,this)}};h.get=function(b){P(arguments,1);var c=this.i;b=String(b);for(var d=0;d<c.length;d++)if(c[d][0]===b)return c[d][1];
17+return null};h.getAll=function(b){P(arguments,1);var c=[];b=String(b);M(this.i,function(d){d[0]===b&&c.push(d[1])});return c};h.has=function(b){P(arguments,1);b=String(b);for(var c=0;c<this.i.length;c++)if(this.i[c][0]===b)return!0;return!1};h.keys=function c(){var d=this,e,f,g,k,p;return K(c,function(t){1==t.h&&(e=v(d),f=e.next());if(3!=t.h){if(f.done){t.h=0;return}g=f.value;k=v(g);p=k.next().value;return E(t,p)}f=e.next();t.h=2})};h.set=function(c,d,e){P(arguments,2);c=String(c);var f=[],g=O(c,
18+d,e),k=!0;M(this.i,function(p){p[0]===c?k&&(k=!f.push(g)):f.push(p)});k&&f.push(g);this.i=f};h.values=function d(){var e=this,f,g,k,p,t;return K(d,function(x){1==x.h&&(f=v(e),g=f.next());if(3!=x.h){if(g.done){x.h=0;return}k=g.value;p=v(k);p.next();t=p.next().value;return E(x,t)}g=f.next();x.h=2})};X.prototype._asNative=function(){for(var d=new R,e=v(this),f=e.next();!f.done;f=e.next()){var g=v(f.value);f=g.next().value;g=g.next().value;d.append(f,g)}return d};X.prototype._blob=function(){var d="----formdata-polyfill-"+
19+Math.random(),e=[],f="--"+d+'\r\nContent-Disposition: form-data; name="';this.forEach(function(g,k){return"string"==typeof g?e.push(f+escape(N(k))+('"\r\n\r\n'+N(g)+"\r\n")):e.push(f+escape(N(k))+('"; filename="'+escape(g.name)+'"\r\nContent-Type: '+(g.type||"application/octet-stream")+"\r\n\r\n"),g,"\r\n")});e.push("--"+d+"--");return new Blob(e,{type:"multipart/form-data; boundary="+d})};X.prototype[Symbol.iterator]=function(){return this.entries()};X.prototype.toString=function(){return"[object FormData]"};
20+V&&!V.matches&&(V.matches=V.matchesSelector||V.mozMatchesSelector||V.msMatchesSelector||V.oMatchesSelector||V.webkitMatchesSelector||function(d){d=(this.document||this.ownerDocument).querySelectorAll(d);for(var e=d.length;0<=--e&&d.item(e)!==this;);return-1<e});W&&(X.prototype[W]="FormData");if(S){var Y=Q.XMLHttpRequest.prototype.setRequestHeader;Q.XMLHttpRequest.prototype.setRequestHeader=function(d,e){Y.call(this,d,e);"content-type"===d.toLowerCase()&&(this.B=!0)};Q.XMLHttpRequest.prototype.send=
21+function(d){d instanceof X?(d=d._blob(),this.B||this.setRequestHeader("Content-Type",d.type),S.call(this,d)):S.call(this,d)}}T&&(Q.fetch=function(d,e){e&&e.body&&e.body instanceof X&&(e.body=e.body._blob());return T.call(this,d,e)});U&&(Q.navigator.sendBeacon=function(d,e){e instanceof X&&(e=e._asNative());return U.call(this,d,e)});Q.FormData=X};})();
prybar_assets/nodejs/node_modules/formdata-polyfill/package.jsonnew file+50
@@ -0,0 +1,50 @@
1+{
2+ "name": "formdata-polyfill",
3+ "version": "4.0.10",
4+ "description": "HTML5 `FormData` for Browsers and Node.",
5+ "type": "module",
6+ "main": "formdata.min.js",
7+ "scripts": {
8+ "build": "node build.js",
9+ "test": "node test/test-esm.js",
10+ "test-wpt": "node --experimental-loader ./test/http-loader.js ./test/test-wpt-in-node.js",
11+ "test-polyfill": "php -S localhost:4445 & open http://localhost:4445/test/test-polyfill.html"
12+ },
13+ "repository": {
14+ "type": "git",
15+ "url": "git+https://jimmywarting@github.com/jimmywarting/FormData.git"
16+ },
17+ "files": [
18+ "esm.min.js",
19+ "esm.min.d.ts",
20+ "FormData.js",
21+ "formdata-to-blob.js",
22+ "formdata.min.js",
23+ "README.md"
24+ ],
25+ "engines": {
26+ "node": ">=12.20.0"
27+ },
28+ "keywords": [
29+ "formdata",
30+ "fetch",
31+ "node-fetch",
32+ "html5",
33+ "browser",
34+ "polyfill"
35+ ],
36+ "author": "Jimmy Wärting",
37+ "license": "MIT",
38+ "bugs": {
39+ "url": "https://github.com/jimmywarting/FormData/issues"
40+ },
41+ "homepage": "https://github.com/jimmywarting/FormData#readme",
42+ "dependencies": {
43+ "fetch-blob": "^3.1.2"
44+ },
45+ "devDependencies": {
46+ "@types/google-closure-compiler": "^0.0.19",
47+ "@types/node": "^16.7.10",
48+ "google-closure-compiler": "^20210808.0.0"
49+ }
50+}
prybar_assets/nodejs/node_modules/node-domexception/LICENSEnew file+21
@@ -0,0 +1,21 @@
1+MIT License
2+
3+Copyright (c) 2021 Jimmy Wärting
4+
5+Permission is hereby granted, free of charge, to any person obtaining a copy
6+of this software and associated documentation files (the "Software"), to deal
7+in the Software without restriction, including without limitation the rights
8+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+copies of the Software, and to permit persons to whom the Software is
10+furnished to do so, subject to the following conditions:
11+
12+The above copyright notice and this permission notice shall be included in all
13+copies or substantial portions of the Software.
14+
15+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+SOFTWARE.
prybar_assets/nodejs/node_modules/node-domexception/README.mdnew file+46
@@ -0,0 +1,46 @@
1+# DOMException
2+An implementation of the DOMException class from NodeJS
3+
4+NodeJS has DOMException built in, but it's not globally available, and you can't require/import it from somewhere.
5+
6+This package exposes the [`DOMException`](https://developer.mozilla.org/en-US/docs/Web/API/DOMException) class that comes from NodeJS itself. (including all of the legacy codes)
7+
8+<sub>(plz don't depend on this package in any other environment other than node >=10.5)</sub>
9+
10+```js
11+import DOMException from 'node-domexception'
12+import { MessageChannel } from 'worker_threads'
13+
14+async function hello() {
15+ const port = new MessageChannel().port1
16+ const ab = new ArrayBuffer()
17+ port.postMessage(ab, [ab, ab])
18+}
19+
20+hello().catch(err => {
21+ console.assert(err.name === 'DataCloneError')
22+ console.assert(err.code === 25)
23+ console.assert(err instanceof DOMException)
24+})
25+
26+const e1 = new DOMException('Something went wrong', 'BadThingsError')
27+console.assert(e1.name === 'BadThingsError')
28+console.assert(e1.code === 0)
29+
30+const e2 = new DOMException('Another exciting error message', 'NoModificationAllowedError')
31+console.assert(e2.name === 'NoModificationAllowedError')
32+console.assert(e2.code === 7)
33+
34+console.assert(DOMException.INUSE_ATTRIBUTE_ERR === 10)
35+```
36+
37+# Background
38+
39+The only possible way is to use some web-ish tools that have been introduced into NodeJS that throws a DOMException and catch the constructor. This is exactly what this package dose for you and exposes it.<br>
40+This way you will have the same class that NodeJS has and you can check if the error is a instance of DOMException.<br>
41+The instanceof check would not have worked with a custom class such as the DOMException provided by domenic which also is much larger in size since it has to re-construct the hole class from the ground up.
42+
43+The DOMException is used in many places such as the Fetch API, File & Blobs, PostMessaging and more. <br>
44+Why they decided to call it **DOM**, I don't know
45+
46+Please consider sponsoring if you find this helpful
prybar_assets/nodejs/node_modules/node-domexception/index.jsnew file+16
@@ -0,0 +1,16 @@
1+/*! node-domexception. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */
2+
3+if (!globalThis.DOMException) {
4+ try {
5+ const { MessageChannel } = require('worker_threads'),
6+ port = new MessageChannel().port1,
7+ ab = new ArrayBuffer()
8+ port.postMessage(ab, [ab, ab])
9+ } catch (err) {
10+ err.constructor.name === 'DOMException' && (
11+ globalThis.DOMException = err.constructor
12+ )
13+ }
14+}
15+
16+module.exports = globalThis.DOMException
prybar_assets/nodejs/node_modules/node-domexception/package.jsonnew file+29
@@ -0,0 +1,29 @@
1+{
2+ "name": "node-domexception",
3+ "version": "1.0.0",
4+ "description": "An implementation of the DOMException class from NodeJS",
5+ "main": "index.js",
6+ "repository": {
7+ "type": "git",
8+ "url": "git+https://github.com/jimmywarting/node-domexception.git"
9+ },
10+ "engines": {
11+ "node": ">=10.5.0"
12+ },
13+ "author": "Jimmy Wärting",
14+ "license": "MIT",
15+ "bugs": {
16+ "url": "https://github.com/jimmywarting/node-domexception/issues"
17+ },
18+ "homepage": "https://github.com/jimmywarting/node-domexception#readme",
19+ "funding": [
20+ {
21+ "type": "github",
22+ "url": "https://github.com/sponsors/jimmywarting"
23+ },
24+ {
25+ "type": "github",
26+ "url": "https://paypal.me/jimmywarting"
27+ }
28+ ]
29+}
prybar_assets/nodejs/node_modules/web-streams-polyfill/LICENSEnew file+22
@@ -0,0 +1,22 @@
1+The MIT License (MIT)
2+
3+Copyright (c) 2020 Mattias Buelens
4+Copyright (c) 2016 Diwank Singh Tomer
5+
6+Permission is hereby granted, free of charge, to any person obtaining a copy
7+of this software and associated documentation files (the "Software"), to deal
8+in the Software without restriction, including without limitation the rights
9+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+copies of the Software, and to permit persons to whom the Software is
11+furnished to do so, subject to the following conditions:
12+
13+The above copyright notice and this permission notice shall be included in all
14+copies or substantial portions of the Software.
15+
16+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+SOFTWARE.
prybar_assets/nodejs/node_modules/web-streams-polyfill/README.mdnew file+114
@@ -0,0 +1,114 @@
1+# web-streams-polyfill
2+
3+Web Streams, based on the WHATWG spec reference implementation.
4+
5+[![build status](https://api.travis-ci.com/MattiasBuelens/web-streams-polyfill.svg?branch=master)](https://travis-ci.com/MattiasBuelens/web-streams-polyfill)
6+[![npm version](https://img.shields.io/npm/v/web-streams-polyfill.svg)](https://www.npmjs.com/package/web-streams-polyfill)
7+[![license](https://img.shields.io/npm/l/web-streams-polyfill.svg)](https://github.com/MattiasBuelens/web-streams-polyfill/blob/master/LICENSE)
8+[![Join the chat at https://gitter.im/web-streams-polyfill/Lobby](https://badges.gitter.im/web-streams-polyfill/Lobby.svg)](https://gitter.im/web-streams-polyfill/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
9+
10+## Links
11+
12+ - [Official spec][spec]
13+ - [Reference implementation][ref-impl]
14+
15+## Usage
16+
17+This library comes in multiple variants:
18+* `web-streams-polyfill`: a polyfill that replaces the native stream implementations.
19+ Recommended for use in web apps supporting older browsers through a `<script>` tag.
20+* `web-streams-polyfill/es6`: a polyfill targeting ES2015+ environments.
21+ Recommended for use in web apps supporting modern browsers through a `<script>` tag.
22+* `web-streams-polyfill/es2018`: a polyfill targeting ES2018+ environments.
23+* `web-streams-polyfill/ponyfill`: a [ponyfill] that provides
24+ the stream implementations without replacing any globals.
25+ Recommended for use in legacy Node applications, or in web libraries supporting older browsers.
26+* `web-streams-polyfill/ponyfill/es6`: a ponyfill targeting ES2015+ environments.
27+ Recommended for use in Node 6+ applications, or in web libraries supporting modern browsers.
28+* `web-streams-polyfill/ponyfill/es2018`: a ponyfill targeting ES2018+ environments.
29+ Recommended for use in Node 10+ applications.
30+
31+Each variant also includes TypeScript type definitions, compatible with the DOM type definitions for streams included in TypeScript.
32+
33+Usage as a polyfill:
34+```html
35+<!-- option 1: hosted by unpkg CDN -->
36+<script src="https://unpkg.com/web-streams-polyfill/dist/polyfill.min.js"></script>
37+<!-- option 2: self hosted -->
38+<script src="/path/to/web-streams-polyfill/dist/polyfill.min.js"></script>
39+<script>
40+var readable = new ReadableStream();
41+</script>
42+```
43+Usage as a Node module:
44+```js
45+var streams = require("web-streams-polyfill/ponyfill");
46+var readable = new streams.ReadableStream();
47+```
48+Usage as a ES2015 module:
49+```js
50+import { ReadableStream } from "web-streams-polyfill/ponyfill";
51+const readable = new ReadableStream();
52+```
53+
54+### Compatibility
55+
56+The `polyfill` and `ponyfill` variants work in any ES5-compatible environment that has a global `Promise`.
57+If you need to support older browsers or Node versions that do not have a native `Promise` implementation
58+(check the [support table][promise-support]), you must first include a `Promise` polyfill
59+(e.g. [promise-polyfill][promise-polyfill]).
60+
61+The `polyfill/es6` and `ponyfill/es6` variants work in any ES2015-compatible environment.
62+
63+The `polyfill/es2018` and `ponyfill/es2018` variants work in any ES2018-compatible environment.
64+
65+[Async iterable support for `ReadableStream`][rs-asynciterator] is available in all variants, but requires an ES2018-compatible environment or a polyfill for `Symbol.asyncIterator`.
66+
67+[`WritableStreamDefaultController.signal`][ws-controller-signal] is available in all variants, but requires a global `AbortController` constructor. If necessary, consider using a polyfill such as [abortcontroller-polyfill].
68+
69+### Compliance
70+
71+The polyfill implements [version `4b6b93c` (25 Oct 2021)][spec-snapshot] of the streams specification.
72+
73+The polyfill is tested against the same [web platform tests][wpt] that are used by browsers to test their native implementations.
74+The polyfill aims to pass all tests, although it allows some exceptions for practical reasons:
75+* The `es2018` variant passes all of the tests, except for the ["bad buffers and views" tests for readable byte streams][wpt-bad-buffers].
76+ These tests require the implementation to synchronously transfer the contents of an `ArrayBuffer`, which is not yet possible from JavaScript (although there is a [proposal][proposal-arraybuffer-transfer] to make it possible).
77+ The reference implementation "cheats" on these tests [by making a copy instead][ref-impl-transferarraybuffer], but that is unacceptable for the polyfill's performance ([#3][issue-3]).
78+* The `es6` variant passes the same tests as the `es2018` variant, except for the [test for the prototype of `ReadableStream`'s async iterator][wpt-async-iterator-prototype].
79+ Retrieving the correct `%AsyncIteratorPrototype%` requires using an async generator (`async function* () {}`), which is invalid syntax before ES2018.
80+ Instead, the polyfill [creates its own version][stub-async-iterator-prototype] which is functionally equivalent to the real prototype.
81+* The `es5` variant passes the same tests as the `es6` variant, except for various tests about specific characteristics of the constructors, properties and methods.
82+ These test failures do not affect the run-time behavior of the polyfill.
83+ For example:
84+ * The `name` property of down-leveled constructors is incorrect.
85+ * The `length` property of down-leveled constructors and methods with optional arguments is incorrect.
86+ * Not all properties and methods are correctly marked as non-enumerable.
87+ * Down-leveled class methods are not correctly marked as non-constructable.
88+
89+The type definitions are compatible with the built-in stream types of TypeScript 3.3.
90+
91+### Contributors
92+
93+Thanks to these people for their work on [the original polyfill][creatorrr-polyfill]:
94+
95+ - Diwank Singh Tomer ([creatorrr](https://github.com/creatorrr))
96+ - Anders Riutta ([ariutta](https://github.com/ariutta))
97+
98+[spec]: https://streams.spec.whatwg.org
99+[ref-impl]: https://github.com/whatwg/streams
100+[ponyfill]: https://github.com/sindresorhus/ponyfill
101+[promise-support]: https://kangax.github.io/compat-table/es6/#test-Promise
102+[promise-polyfill]: https://www.npmjs.com/package/promise-polyfill
103+[rs-asynciterator]: https://streams.spec.whatwg.org/#rs-asynciterator
104+[ws-controller-signal]: https://streams.spec.whatwg.org/#ws-default-controller-signal
105+[abortcontroller-polyfill]: https://www.npmjs.com/package/abortcontroller-polyfill
106+[spec-snapshot]: https://streams.spec.whatwg.org/commit-snapshots/4b6b93c69e531e2fe45a6ed4cb1484a7ba4eb8bb/
107+[wpt]: https://github.com/web-platform-tests/wpt/tree/96ca25f0f7526282c0d47e6bf6a7edd439da1968/streams
108+[wpt-bad-buffers]: https://github.com/web-platform-tests/wpt/blob/96ca25f0f7526282c0d47e6bf6a7edd439da1968/streams/readable-byte-streams/bad-buffers-and-views.any.js
109+[proposal-arraybuffer-transfer]: https://github.com/domenic/proposal-arraybuffer-transfer
110+[ref-impl-transferarraybuffer]: https://github.com/whatwg/streams/blob/4b6b93c69e531e2fe45a6ed4cb1484a7ba4eb8bb/reference-implementation/lib/abstract-ops/ecmascript.js#L16
111+[issue-3]: https://github.com/MattiasBuelens/web-streams-polyfill/issues/3
112+[wpt-async-iterator-prototype]: https://github.com/web-platform-tests/wpt/blob/96ca25f0f7526282c0d47e6bf6a7edd439da1968/streams/readable-streams/async-iterator.any.js#L24
113+[stub-async-iterator-prototype]: https://github.com/MattiasBuelens/web-streams-polyfill/blob/v2.0.0/src/target/es5/stub/async-iterator-prototype.ts
114+[creatorrr-polyfill]: https://github.com/creatorrr/web-streams-polyfill
prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es2018.jsnew file+4241
@@ -0,0 +1,4241 @@
1+/**
2+ * web-streams-polyfill v3.2.1
3+ */
4+(function (global, factory) {
5+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
6+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
7+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.WebStreamsPolyfill = {}));
8+}(this, (function (exports) { 'use strict';
9+
10+ /// <reference lib="es2015.symbol" />
11+ const SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?
12+ Symbol :
13+ description => `Symbol(${description})`;
14+
15+ /// <reference lib="dom" />
16+ function noop() {
17+ return undefined;
18+ }
19+ function getGlobals() {
20+ if (typeof self !== 'undefined') {
21+ return self;
22+ }
23+ else if (typeof window !== 'undefined') {
24+ return window;
25+ }
26+ else if (typeof global !== 'undefined') {
27+ return global;
28+ }
29+ return undefined;
30+ }
31+ const globals = getGlobals();
32+
33+ function typeIsObject(x) {
34+ return (typeof x === 'object' && x !== null) || typeof x === 'function';
35+ }
36+ const rethrowAssertionErrorRejection = noop;
37+
38+ const originalPromise = Promise;
39+ const originalPromiseThen = Promise.prototype.then;
40+ const originalPromiseResolve = Promise.resolve.bind(originalPromise);
41+ const originalPromiseReject = Promise.reject.bind(originalPromise);
42+ function newPromise(executor) {
43+ return new originalPromise(executor);
44+ }
45+ function promiseResolvedWith(value) {
46+ return originalPromiseResolve(value);
47+ }
48+ function promiseRejectedWith(reason) {
49+ return originalPromiseReject(reason);
50+ }
51+ function PerformPromiseThen(promise, onFulfilled, onRejected) {
52+ // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an
53+ // approximation.
54+ return originalPromiseThen.call(promise, onFulfilled, onRejected);
55+ }
56+ function uponPromise(promise, onFulfilled, onRejected) {
57+ PerformPromiseThen(PerformPromiseThen(promise, onFulfilled, onRejected), undefined, rethrowAssertionErrorRejection);
58+ }
59+ function uponFulfillment(promise, onFulfilled) {
60+ uponPromise(promise, onFulfilled);
61+ }
62+ function uponRejection(promise, onRejected) {
63+ uponPromise(promise, undefined, onRejected);
64+ }
65+ function transformPromiseWith(promise, fulfillmentHandler, rejectionHandler) {
66+ return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);
67+ }
68+ function setPromiseIsHandledToTrue(promise) {
69+ PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);
70+ }
71+ const queueMicrotask = (() => {
72+ const globalQueueMicrotask = globals && globals.queueMicrotask;
73+ if (typeof globalQueueMicrotask === 'function') {
74+ return globalQueueMicrotask;
75+ }
76+ const resolvedPromise = promiseResolvedWith(undefined);
77+ return (fn) => PerformPromiseThen(resolvedPromise, fn);
78+ })();
79+ function reflectCall(F, V, args) {
80+ if (typeof F !== 'function') {
81+ throw new TypeError('Argument is not a function');
82+ }
83+ return Function.prototype.apply.call(F, V, args);
84+ }
85+ function promiseCall(F, V, args) {
86+ try {
87+ return promiseResolvedWith(reflectCall(F, V, args));
88+ }
89+ catch (value) {
90+ return promiseRejectedWith(value);
91+ }
92+ }
93+
94+ // Original from Chromium
95+ // https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js
96+ const QUEUE_MAX_ARRAY_SIZE = 16384;
97+ /**
98+ * Simple queue structure.
99+ *
100+ * Avoids scalability issues with using a packed array directly by using
101+ * multiple arrays in a linked list and keeping the array size bounded.
102+ */
103+ class SimpleQueue {
104+ constructor() {
105+ this._cursor = 0;
106+ this._size = 0;
107+ // _front and _back are always defined.
108+ this._front = {
109+ _elements: [],
110+ _next: undefined
111+ };
112+ this._back = this._front;
113+ // The cursor is used to avoid calling Array.shift().
114+ // It contains the index of the front element of the array inside the
115+ // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).
116+ this._cursor = 0;
117+ // When there is only one node, size === elements.length - cursor.
118+ this._size = 0;
119+ }
120+ get length() {
121+ return this._size;
122+ }
123+ // For exception safety, this method is structured in order:
124+ // 1. Read state
125+ // 2. Calculate required state mutations
126+ // 3. Perform state mutations
127+ push(element) {
128+ const oldBack = this._back;
129+ let newBack = oldBack;
130+ if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {
131+ newBack = {
132+ _elements: [],
133+ _next: undefined
134+ };
135+ }
136+ // push() is the mutation most likely to throw an exception, so it
137+ // goes first.
138+ oldBack._elements.push(element);
139+ if (newBack !== oldBack) {
140+ this._back = newBack;
141+ oldBack._next = newBack;
142+ }
143+ ++this._size;
144+ }
145+ // Like push(), shift() follows the read -> calculate -> mutate pattern for
146+ // exception safety.
147+ shift() { // must not be called on an empty queue
148+ const oldFront = this._front;
149+ let newFront = oldFront;
150+ const oldCursor = this._cursor;
151+ let newCursor = oldCursor + 1;
152+ const elements = oldFront._elements;
153+ const element = elements[oldCursor];
154+ if (newCursor === QUEUE_MAX_ARRAY_SIZE) {
155+ newFront = oldFront._next;
156+ newCursor = 0;
157+ }
158+ // No mutations before this point.
159+ --this._size;
160+ this._cursor = newCursor;
161+ if (oldFront !== newFront) {
162+ this._front = newFront;
163+ }
164+ // Permit shifted element to be garbage collected.
165+ elements[oldCursor] = undefined;
166+ return element;
167+ }
168+ // The tricky thing about forEach() is that it can be called
169+ // re-entrantly. The queue may be mutated inside the callback. It is easy to
170+ // see that push() within the callback has no negative effects since the end
171+ // of the queue is checked for on every iteration. If shift() is called
172+ // repeatedly within the callback then the next iteration may return an
173+ // element that has been removed. In this case the callback will be called
174+ // with undefined values until we either "catch up" with elements that still
175+ // exist or reach the back of the queue.
176+ forEach(callback) {
177+ let i = this._cursor;
178+ let node = this._front;
179+ let elements = node._elements;
180+ while (i !== elements.length || node._next !== undefined) {
181+ if (i === elements.length) {
182+ node = node._next;
183+ elements = node._elements;
184+ i = 0;
185+ if (elements.length === 0) {
186+ break;
187+ }
188+ }
189+ callback(elements[i]);
190+ ++i;
191+ }
192+ }
193+ // Return the element that would be returned if shift() was called now,
194+ // without modifying the queue.
195+ peek() { // must not be called on an empty queue
196+ const front = this._front;
197+ const cursor = this._cursor;
198+ return front._elements[cursor];
199+ }
200+ }
201+
202+ function ReadableStreamReaderGenericInitialize(reader, stream) {
203+ reader._ownerReadableStream = stream;
204+ stream._reader = reader;
205+ if (stream._state === 'readable') {
206+ defaultReaderClosedPromiseInitialize(reader);
207+ }
208+ else if (stream._state === 'closed') {
209+ defaultReaderClosedPromiseInitializeAsResolved(reader);
210+ }
211+ else {
212+ defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);
213+ }
214+ }
215+ // A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state
216+ // check.
217+ function ReadableStreamReaderGenericCancel(reader, reason) {
218+ const stream = reader._ownerReadableStream;
219+ return ReadableStreamCancel(stream, reason);
220+ }
221+ function ReadableStreamReaderGenericRelease(reader) {
222+ if (reader._ownerReadableStream._state === 'readable') {
223+ defaultReaderClosedPromiseReject(reader, new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));
224+ }
225+ else {
226+ defaultReaderClosedPromiseResetToRejected(reader, new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));
227+ }
228+ reader._ownerReadableStream._reader = undefined;
229+ reader._ownerReadableStream = undefined;
230+ }
231+ // Helper functions for the readers.
232+ function readerLockException(name) {
233+ return new TypeError('Cannot ' + name + ' a stream using a released reader');
234+ }
235+ // Helper functions for the ReadableStreamDefaultReader.
236+ function defaultReaderClosedPromiseInitialize(reader) {
237+ reader._closedPromise = newPromise((resolve, reject) => {
238+ reader._closedPromise_resolve = resolve;
239+ reader._closedPromise_reject = reject;
240+ });
241+ }
242+ function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) {
243+ defaultReaderClosedPromiseInitialize(reader);
244+ defaultReaderClosedPromiseReject(reader, reason);
245+ }
246+ function defaultReaderClosedPromiseInitializeAsResolved(reader) {
247+ defaultReaderClosedPromiseInitialize(reader);
248+ defaultReaderClosedPromiseResolve(reader);
249+ }
250+ function defaultReaderClosedPromiseReject(reader, reason) {
251+ if (reader._closedPromise_reject === undefined) {
252+ return;
253+ }
254+ setPromiseIsHandledToTrue(reader._closedPromise);
255+ reader._closedPromise_reject(reason);
256+ reader._closedPromise_resolve = undefined;
257+ reader._closedPromise_reject = undefined;
258+ }
259+ function defaultReaderClosedPromiseResetToRejected(reader, reason) {
260+ defaultReaderClosedPromiseInitializeAsRejected(reader, reason);
261+ }
262+ function defaultReaderClosedPromiseResolve(reader) {
263+ if (reader._closedPromise_resolve === undefined) {
264+ return;
265+ }
266+ reader._closedPromise_resolve(undefined);
267+ reader._closedPromise_resolve = undefined;
268+ reader._closedPromise_reject = undefined;
269+ }
270+
271+ const AbortSteps = SymbolPolyfill('[[AbortSteps]]');
272+ const ErrorSteps = SymbolPolyfill('[[ErrorSteps]]');
273+ const CancelSteps = SymbolPolyfill('[[CancelSteps]]');
274+ const PullSteps = SymbolPolyfill('[[PullSteps]]');
275+
276+ /// <reference lib="es2015.core" />
277+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill
278+ const NumberIsFinite = Number.isFinite || function (x) {
279+ return typeof x === 'number' && isFinite(x);
280+ };
281+
282+ /// <reference lib="es2015.core" />
283+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill
284+ const MathTrunc = Math.trunc || function (v) {
285+ return v < 0 ? Math.ceil(v) : Math.floor(v);
286+ };
287+
288+ // https://heycam.github.io/webidl/#idl-dictionaries
289+ function isDictionary(x) {
290+ return typeof x === 'object' || typeof x === 'function';
291+ }
292+ function assertDictionary(obj, context) {
293+ if (obj !== undefined && !isDictionary(obj)) {
294+ throw new TypeError(`${context} is not an object.`);
295+ }
296+ }
297+ // https://heycam.github.io/webidl/#idl-callback-functions
298+ function assertFunction(x, context) {
299+ if (typeof x !== 'function') {
300+ throw new TypeError(`${context} is not a function.`);
301+ }
302+ }
303+ // https://heycam.github.io/webidl/#idl-object
304+ function isObject(x) {
305+ return (typeof x === 'object' && x !== null) || typeof x === 'function';
306+ }
307+ function assertObject(x, context) {
308+ if (!isObject(x)) {
309+ throw new TypeError(`${context} is not an object.`);
310+ }
311+ }
312+ function assertRequiredArgument(x, position, context) {
313+ if (x === undefined) {
314+ throw new TypeError(`Parameter ${position} is required in '${context}'.`);
315+ }
316+ }
317+ function assertRequiredField(x, field, context) {
318+ if (x === undefined) {
319+ throw new TypeError(`${field} is required in '${context}'.`);
320+ }
321+ }
322+ // https://heycam.github.io/webidl/#idl-unrestricted-double
323+ function convertUnrestrictedDouble(value) {
324+ return Number(value);
325+ }
326+ function censorNegativeZero(x) {
327+ return x === 0 ? 0 : x;
328+ }
329+ function integerPart(x) {
330+ return censorNegativeZero(MathTrunc(x));
331+ }
332+ // https://heycam.github.io/webidl/#idl-unsigned-long-long
333+ function convertUnsignedLongLongWithEnforceRange(value, context) {
334+ const lowerBound = 0;
335+ const upperBound = Number.MAX_SAFE_INTEGER;
336+ let x = Number(value);
337+ x = censorNegativeZero(x);
338+ if (!NumberIsFinite(x)) {
339+ throw new TypeError(`${context} is not a finite number`);
340+ }
341+ x = integerPart(x);
342+ if (x < lowerBound || x > upperBound) {
343+ throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);
344+ }
345+ if (!NumberIsFinite(x) || x === 0) {
346+ return 0;
347+ }
348+ // TODO Use BigInt if supported?
349+ // let xBigInt = BigInt(integerPart(x));
350+ // xBigInt = BigInt.asUintN(64, xBigInt);
351+ // return Number(xBigInt);
352+ return x;
353+ }
354+
355+ function assertReadableStream(x, context) {
356+ if (!IsReadableStream(x)) {
357+ throw new TypeError(`${context} is not a ReadableStream.`);
358+ }
359+ }
360+
361+ // Abstract operations for the ReadableStream.
362+ function AcquireReadableStreamDefaultReader(stream) {
363+ return new ReadableStreamDefaultReader(stream);
364+ }
365+ // ReadableStream API exposed for controllers.
366+ function ReadableStreamAddReadRequest(stream, readRequest) {
367+ stream._reader._readRequests.push(readRequest);
368+ }
369+ function ReadableStreamFulfillReadRequest(stream, chunk, done) {
370+ const reader = stream._reader;
371+ const readRequest = reader._readRequests.shift();
372+ if (done) {
373+ readRequest._closeSteps();
374+ }
375+ else {
376+ readRequest._chunkSteps(chunk);
377+ }
378+ }
379+ function ReadableStreamGetNumReadRequests(stream) {
380+ return stream._reader._readRequests.length;
381+ }
382+ function ReadableStreamHasDefaultReader(stream) {
383+ const reader = stream._reader;
384+ if (reader === undefined) {
385+ return false;
386+ }
387+ if (!IsReadableStreamDefaultReader(reader)) {
388+ return false;
389+ }
390+ return true;
391+ }
392+ /**
393+ * A default reader vended by a {@link ReadableStream}.
394+ *
395+ * @public
396+ */
397+ class ReadableStreamDefaultReader {
398+ constructor(stream) {
399+ assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');
400+ assertReadableStream(stream, 'First parameter');
401+ if (IsReadableStreamLocked(stream)) {
402+ throw new TypeError('This stream has already been locked for exclusive reading by another reader');
403+ }
404+ ReadableStreamReaderGenericInitialize(this, stream);
405+ this._readRequests = new SimpleQueue();
406+ }
407+ /**
408+ * Returns a promise that will be fulfilled when the stream becomes closed,
409+ * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.
410+ */
411+ get closed() {
412+ if (!IsReadableStreamDefaultReader(this)) {
413+ return promiseRejectedWith(defaultReaderBrandCheckException('closed'));
414+ }
415+ return this._closedPromise;
416+ }
417+ /**
418+ * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.
419+ */
420+ cancel(reason = undefined) {
421+ if (!IsReadableStreamDefaultReader(this)) {
422+ return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));
423+ }
424+ if (this._ownerReadableStream === undefined) {
425+ return promiseRejectedWith(readerLockException('cancel'));
426+ }
427+ return ReadableStreamReaderGenericCancel(this, reason);
428+ }
429+ /**
430+ * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.
431+ *
432+ * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.
433+ */
434+ read() {
435+ if (!IsReadableStreamDefaultReader(this)) {
436+ return promiseRejectedWith(defaultReaderBrandCheckException('read'));
437+ }
438+ if (this._ownerReadableStream === undefined) {
439+ return promiseRejectedWith(readerLockException('read from'));
440+ }
441+ let resolvePromise;
442+ let rejectPromise;
443+ const promise = newPromise((resolve, reject) => {
444+ resolvePromise = resolve;
445+ rejectPromise = reject;
446+ });
447+ const readRequest = {
448+ _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),
449+ _closeSteps: () => resolvePromise({ value: undefined, done: true }),
450+ _errorSteps: e => rejectPromise(e)
451+ };
452+ ReadableStreamDefaultReaderRead(this, readRequest);
453+ return promise;
454+ }
455+ /**
456+ * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.
457+ * If the associated stream is errored when the lock is released, the reader will appear errored in the same way
458+ * from now on; otherwise, the reader will appear closed.
459+ *
460+ * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by
461+ * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to
462+ * do so will throw a `TypeError` and leave the reader locked to the stream.
463+ */
464+ releaseLock() {
465+ if (!IsReadableStreamDefaultReader(this)) {
466+ throw defaultReaderBrandCheckException('releaseLock');
467+ }
468+ if (this._ownerReadableStream === undefined) {
469+ return;
470+ }
471+ if (this._readRequests.length > 0) {
472+ throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');
473+ }
474+ ReadableStreamReaderGenericRelease(this);
475+ }
476+ }
477+ Object.defineProperties(ReadableStreamDefaultReader.prototype, {
478+ cancel: { enumerable: true },
479+ read: { enumerable: true },
480+ releaseLock: { enumerable: true },
481+ closed: { enumerable: true }
482+ });
483+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
484+ Object.defineProperty(ReadableStreamDefaultReader.prototype, SymbolPolyfill.toStringTag, {
485+ value: 'ReadableStreamDefaultReader',
486+ configurable: true
487+ });
488+ }
489+ // Abstract operations for the readers.
490+ function IsReadableStreamDefaultReader(x) {
491+ if (!typeIsObject(x)) {
492+ return false;
493+ }
494+ if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {
495+ return false;
496+ }
497+ return x instanceof ReadableStreamDefaultReader;
498+ }
499+ function ReadableStreamDefaultReaderRead(reader, readRequest) {
500+ const stream = reader._ownerReadableStream;
501+ stream._disturbed = true;
502+ if (stream._state === 'closed') {
503+ readRequest._closeSteps();
504+ }
505+ else if (stream._state === 'errored') {
506+ readRequest._errorSteps(stream._storedError);
507+ }
508+ else {
509+ stream._readableStreamController[PullSteps](readRequest);
510+ }
511+ }
512+ // Helper functions for the ReadableStreamDefaultReader.
513+ function defaultReaderBrandCheckException(name) {
514+ return new TypeError(`ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);
515+ }
516+
517+ /// <reference lib="es2018.asynciterable" />
518+ /* eslint-disable @typescript-eslint/no-empty-function */
519+ const AsyncIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf(async function* () { }).prototype);
520+
521+ /// <reference lib="es2018.asynciterable" />
522+ class ReadableStreamAsyncIteratorImpl {
523+ constructor(reader, preventCancel) {
524+ this._ongoingPromise = undefined;
525+ this._isFinished = false;
526+ this._reader = reader;
527+ this._preventCancel = preventCancel;
528+ }
529+ next() {
530+ const nextSteps = () => this._nextSteps();
531+ this._ongoingPromise = this._ongoingPromise ?
532+ transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :
533+ nextSteps();
534+ return this._ongoingPromise;
535+ }
536+ return(value) {
537+ const returnSteps = () => this._returnSteps(value);
538+ return this._ongoingPromise ?
539+ transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :
540+ returnSteps();
541+ }
542+ _nextSteps() {
543+ if (this._isFinished) {
544+ return Promise.resolve({ value: undefined, done: true });
545+ }
546+ const reader = this._reader;
547+ if (reader._ownerReadableStream === undefined) {
548+ return promiseRejectedWith(readerLockException('iterate'));
549+ }
550+ let resolvePromise;
551+ let rejectPromise;
552+ const promise = newPromise((resolve, reject) => {
553+ resolvePromise = resolve;
554+ rejectPromise = reject;
555+ });
556+ const readRequest = {
557+ _chunkSteps: chunk => {
558+ this._ongoingPromise = undefined;
559+ // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.
560+ // FIXME Is this a bug in the specification, or in the test?
561+ queueMicrotask(() => resolvePromise({ value: chunk, done: false }));
562+ },
563+ _closeSteps: () => {
564+ this._ongoingPromise = undefined;
565+ this._isFinished = true;
566+ ReadableStreamReaderGenericRelease(reader);
567+ resolvePromise({ value: undefined, done: true });
568+ },
569+ _errorSteps: reason => {
570+ this._ongoingPromise = undefined;
571+ this._isFinished = true;
572+ ReadableStreamReaderGenericRelease(reader);
573+ rejectPromise(reason);
574+ }
575+ };
576+ ReadableStreamDefaultReaderRead(reader, readRequest);
577+ return promise;
578+ }
579+ _returnSteps(value) {
580+ if (this._isFinished) {
581+ return Promise.resolve({ value, done: true });
582+ }
583+ this._isFinished = true;
584+ const reader = this._reader;
585+ if (reader._ownerReadableStream === undefined) {
586+ return promiseRejectedWith(readerLockException('finish iterating'));
587+ }
588+ if (!this._preventCancel) {
589+ const result = ReadableStreamReaderGenericCancel(reader, value);
590+ ReadableStreamReaderGenericRelease(reader);
591+ return transformPromiseWith(result, () => ({ value, done: true }));
592+ }
593+ ReadableStreamReaderGenericRelease(reader);
594+ return promiseResolvedWith({ value, done: true });
595+ }
596+ }
597+ const ReadableStreamAsyncIteratorPrototype = {
598+ next() {
599+ if (!IsReadableStreamAsyncIterator(this)) {
600+ return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));
601+ }
602+ return this._asyncIteratorImpl.next();
603+ },
604+ return(value) {
605+ if (!IsReadableStreamAsyncIterator(this)) {
606+ return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));
607+ }
608+ return this._asyncIteratorImpl.return(value);
609+ }
610+ };
611+ if (AsyncIteratorPrototype !== undefined) {
612+ Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);
613+ }
614+ // Abstract operations for the ReadableStream.
615+ function AcquireReadableStreamAsyncIterator(stream, preventCancel) {
616+ const reader = AcquireReadableStreamDefaultReader(stream);
617+ const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);
618+ const iterator = Object.create(ReadableStreamAsyncIteratorPrototype);
619+ iterator._asyncIteratorImpl = impl;
620+ return iterator;
621+ }
622+ function IsReadableStreamAsyncIterator(x) {
623+ if (!typeIsObject(x)) {
624+ return false;
625+ }
626+ if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {
627+ return false;
628+ }
629+ try {
630+ // noinspection SuspiciousTypeOfGuard
631+ return x._asyncIteratorImpl instanceof
632+ ReadableStreamAsyncIteratorImpl;
633+ }
634+ catch (_a) {
635+ return false;
636+ }
637+ }
638+ // Helper functions for the ReadableStream.
639+ function streamAsyncIteratorBrandCheckException(name) {
640+ return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);
641+ }
642+
643+ /// <reference lib="es2015.core" />
644+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill
645+ const NumberIsNaN = Number.isNaN || function (x) {
646+ // eslint-disable-next-line no-self-compare
647+ return x !== x;
648+ };
649+
650+ function CreateArrayFromList(elements) {
651+ // We use arrays to represent lists, so this is basically a no-op.
652+ // Do a slice though just in case we happen to depend on the unique-ness.
653+ return elements.slice();
654+ }
655+ function CopyDataBlockBytes(dest, destOffset, src, srcOffset, n) {
656+ new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);
657+ }
658+ // Not implemented correctly
659+ function TransferArrayBuffer(O) {
660+ return O;
661+ }
662+ // Not implemented correctly
663+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
664+ function IsDetachedBuffer(O) {
665+ return false;
666+ }
667+ function ArrayBufferSlice(buffer, begin, end) {
668+ // ArrayBuffer.prototype.slice is not available on IE10
669+ // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice
670+ if (buffer.slice) {
671+ return buffer.slice(begin, end);
672+ }
673+ const length = end - begin;
674+ const slice = new ArrayBuffer(length);
675+ CopyDataBlockBytes(slice, 0, buffer, begin, length);
676+ return slice;
677+ }
678+
679+ function IsNonNegativeNumber(v) {
680+ if (typeof v !== 'number') {
681+ return false;
682+ }
683+ if (NumberIsNaN(v)) {
684+ return false;
685+ }
686+ if (v < 0) {
687+ return false;
688+ }
689+ return true;
690+ }
691+ function CloneAsUint8Array(O) {
692+ const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);
693+ return new Uint8Array(buffer);
694+ }
695+
696+ function DequeueValue(container) {
697+ const pair = container._queue.shift();
698+ container._queueTotalSize -= pair.size;
699+ if (container._queueTotalSize < 0) {
700+ container._queueTotalSize = 0;
701+ }
702+ return pair.value;
703+ }
704+ function EnqueueValueWithSize(container, value, size) {
705+ if (!IsNonNegativeNumber(size) || size === Infinity) {
706+ throw new RangeError('Size must be a finite, non-NaN, non-negative number.');
707+ }
708+ container._queue.push({ value, size });
709+ container._queueTotalSize += size;
710+ }
711+ function PeekQueueValue(container) {
712+ const pair = container._queue.peek();
713+ return pair.value;
714+ }
715+ function ResetQueue(container) {
716+ container._queue = new SimpleQueue();
717+ container._queueTotalSize = 0;
718+ }
719+
720+ /**
721+ * A pull-into request in a {@link ReadableByteStreamController}.
722+ *
723+ * @public
724+ */
725+ class ReadableStreamBYOBRequest {
726+ constructor() {
727+ throw new TypeError('Illegal constructor');
728+ }
729+ /**
730+ * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.
731+ */
732+ get view() {
733+ if (!IsReadableStreamBYOBRequest(this)) {
734+ throw byobRequestBrandCheckException('view');
735+ }
736+ return this._view;
737+ }
738+ respond(bytesWritten) {
739+ if (!IsReadableStreamBYOBRequest(this)) {
740+ throw byobRequestBrandCheckException('respond');
741+ }
742+ assertRequiredArgument(bytesWritten, 1, 'respond');
743+ bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');
744+ if (this._associatedReadableByteStreamController === undefined) {
745+ throw new TypeError('This BYOB request has been invalidated');
746+ }
747+ if (IsDetachedBuffer(this._view.buffer)) ;
748+ ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);
749+ }
750+ respondWithNewView(view) {
751+ if (!IsReadableStreamBYOBRequest(this)) {
752+ throw byobRequestBrandCheckException('respondWithNewView');
753+ }
754+ assertRequiredArgument(view, 1, 'respondWithNewView');
755+ if (!ArrayBuffer.isView(view)) {
756+ throw new TypeError('You can only respond with array buffer views');
757+ }
758+ if (this._associatedReadableByteStreamController === undefined) {
759+ throw new TypeError('This BYOB request has been invalidated');
760+ }
761+ if (IsDetachedBuffer(view.buffer)) ;
762+ ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);
763+ }
764+ }
765+ Object.defineProperties(ReadableStreamBYOBRequest.prototype, {
766+ respond: { enumerable: true },
767+ respondWithNewView: { enumerable: true },
768+ view: { enumerable: true }
769+ });
770+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
771+ Object.defineProperty(ReadableStreamBYOBRequest.prototype, SymbolPolyfill.toStringTag, {
772+ value: 'ReadableStreamBYOBRequest',
773+ configurable: true
774+ });
775+ }
776+ /**
777+ * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.
778+ *
779+ * @public
780+ */
781+ class ReadableByteStreamController {
782+ constructor() {
783+ throw new TypeError('Illegal constructor');
784+ }
785+ /**
786+ * Returns the current BYOB pull request, or `null` if there isn't one.
787+ */
788+ get byobRequest() {
789+ if (!IsReadableByteStreamController(this)) {
790+ throw byteStreamControllerBrandCheckException('byobRequest');
791+ }
792+ return ReadableByteStreamControllerGetBYOBRequest(this);
793+ }
794+ /**
795+ * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is
796+ * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.
797+ */
798+ get desiredSize() {
799+ if (!IsReadableByteStreamController(this)) {
800+ throw byteStreamControllerBrandCheckException('desiredSize');
801+ }
802+ return ReadableByteStreamControllerGetDesiredSize(this);
803+ }
804+ /**
805+ * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from
806+ * the stream, but once those are read, the stream will become closed.
807+ */
808+ close() {
809+ if (!IsReadableByteStreamController(this)) {
810+ throw byteStreamControllerBrandCheckException('close');
811+ }
812+ if (this._closeRequested) {
813+ throw new TypeError('The stream has already been closed; do not close it again!');
814+ }
815+ const state = this._controlledReadableByteStream._state;
816+ if (state !== 'readable') {
817+ throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);
818+ }
819+ ReadableByteStreamControllerClose(this);
820+ }
821+ enqueue(chunk) {
822+ if (!IsReadableByteStreamController(this)) {
823+ throw byteStreamControllerBrandCheckException('enqueue');
824+ }
825+ assertRequiredArgument(chunk, 1, 'enqueue');
826+ if (!ArrayBuffer.isView(chunk)) {
827+ throw new TypeError('chunk must be an array buffer view');
828+ }
829+ if (chunk.byteLength === 0) {
830+ throw new TypeError('chunk must have non-zero byteLength');
831+ }
832+ if (chunk.buffer.byteLength === 0) {
833+ throw new TypeError(`chunk's buffer must have non-zero byteLength`);
834+ }
835+ if (this._closeRequested) {
836+ throw new TypeError('stream is closed or draining');
837+ }
838+ const state = this._controlledReadableByteStream._state;
839+ if (state !== 'readable') {
840+ throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);
841+ }
842+ ReadableByteStreamControllerEnqueue(this, chunk);
843+ }
844+ /**
845+ * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.
846+ */
847+ error(e = undefined) {
848+ if (!IsReadableByteStreamController(this)) {
849+ throw byteStreamControllerBrandCheckException('error');
850+ }
851+ ReadableByteStreamControllerError(this, e);
852+ }
853+ /** @internal */
854+ [CancelSteps](reason) {
855+ ReadableByteStreamControllerClearPendingPullIntos(this);
856+ ResetQueue(this);
857+ const result = this._cancelAlgorithm(reason);
858+ ReadableByteStreamControllerClearAlgorithms(this);
859+ return result;
860+ }
861+ /** @internal */
862+ [PullSteps](readRequest) {
863+ const stream = this._controlledReadableByteStream;
864+ if (this._queueTotalSize > 0) {
865+ const entry = this._queue.shift();
866+ this._queueTotalSize -= entry.byteLength;
867+ ReadableByteStreamControllerHandleQueueDrain(this);
868+ const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);
869+ readRequest._chunkSteps(view);
870+ return;
871+ }
872+ const autoAllocateChunkSize = this._autoAllocateChunkSize;
873+ if (autoAllocateChunkSize !== undefined) {
874+ let buffer;
875+ try {
876+ buffer = new ArrayBuffer(autoAllocateChunkSize);
877+ }
878+ catch (bufferE) {
879+ readRequest._errorSteps(bufferE);
880+ return;
881+ }
882+ const pullIntoDescriptor = {
883+ buffer,
884+ bufferByteLength: autoAllocateChunkSize,
885+ byteOffset: 0,
886+ byteLength: autoAllocateChunkSize,
887+ bytesFilled: 0,
888+ elementSize: 1,
889+ viewConstructor: Uint8Array,
890+ readerType: 'default'
891+ };
892+ this._pendingPullIntos.push(pullIntoDescriptor);
893+ }
894+ ReadableStreamAddReadRequest(stream, readRequest);
895+ ReadableByteStreamControllerCallPullIfNeeded(this);
896+ }
897+ }
898+ Object.defineProperties(ReadableByteStreamController.prototype, {
899+ close: { enumerable: true },
900+ enqueue: { enumerable: true },
901+ error: { enumerable: true },
902+ byobRequest: { enumerable: true },
903+ desiredSize: { enumerable: true }
904+ });
905+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
906+ Object.defineProperty(ReadableByteStreamController.prototype, SymbolPolyfill.toStringTag, {
907+ value: 'ReadableByteStreamController',
908+ configurable: true
909+ });
910+ }
911+ // Abstract operations for the ReadableByteStreamController.
912+ function IsReadableByteStreamController(x) {
913+ if (!typeIsObject(x)) {
914+ return false;
915+ }
916+ if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {
917+ return false;
918+ }
919+ return x instanceof ReadableByteStreamController;
920+ }
921+ function IsReadableStreamBYOBRequest(x) {
922+ if (!typeIsObject(x)) {
923+ return false;
924+ }
925+ if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {
926+ return false;
927+ }
928+ return x instanceof ReadableStreamBYOBRequest;
929+ }
930+ function ReadableByteStreamControllerCallPullIfNeeded(controller) {
931+ const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);
932+ if (!shouldPull) {
933+ return;
934+ }
935+ if (controller._pulling) {
936+ controller._pullAgain = true;
937+ return;
938+ }
939+ controller._pulling = true;
940+ // TODO: Test controller argument
941+ const pullPromise = controller._pullAlgorithm();
942+ uponPromise(pullPromise, () => {
943+ controller._pulling = false;
944+ if (controller._pullAgain) {
945+ controller._pullAgain = false;
946+ ReadableByteStreamControllerCallPullIfNeeded(controller);
947+ }
948+ }, e => {
949+ ReadableByteStreamControllerError(controller, e);
950+ });
951+ }
952+ function ReadableByteStreamControllerClearPendingPullIntos(controller) {
953+ ReadableByteStreamControllerInvalidateBYOBRequest(controller);
954+ controller._pendingPullIntos = new SimpleQueue();
955+ }
956+ function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) {
957+ let done = false;
958+ if (stream._state === 'closed') {
959+ done = true;
960+ }
961+ const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);
962+ if (pullIntoDescriptor.readerType === 'default') {
963+ ReadableStreamFulfillReadRequest(stream, filledView, done);
964+ }
965+ else {
966+ ReadableStreamFulfillReadIntoRequest(stream, filledView, done);
967+ }
968+ }
969+ function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) {
970+ const bytesFilled = pullIntoDescriptor.bytesFilled;
971+ const elementSize = pullIntoDescriptor.elementSize;
972+ return new pullIntoDescriptor.viewConstructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize);
973+ }
974+ function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) {
975+ controller._queue.push({ buffer, byteOffset, byteLength });
976+ controller._queueTotalSize += byteLength;
977+ }
978+ function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) {
979+ const elementSize = pullIntoDescriptor.elementSize;
980+ const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;
981+ const maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);
982+ const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;
983+ const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;
984+ let totalBytesToCopyRemaining = maxBytesToCopy;
985+ let ready = false;
986+ if (maxAlignedBytes > currentAlignedBytes) {
987+ totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;
988+ ready = true;
989+ }
990+ const queue = controller._queue;
991+ while (totalBytesToCopyRemaining > 0) {
992+ const headOfQueue = queue.peek();
993+ const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);
994+ const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;
995+ CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);
996+ if (headOfQueue.byteLength === bytesToCopy) {
997+ queue.shift();
998+ }
999+ else {
1000+ headOfQueue.byteOffset += bytesToCopy;
1001+ headOfQueue.byteLength -= bytesToCopy;
1002+ }
1003+ controller._queueTotalSize -= bytesToCopy;
1004+ ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);
1005+ totalBytesToCopyRemaining -= bytesToCopy;
1006+ }
1007+ return ready;
1008+ }
1009+ function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) {
1010+ pullIntoDescriptor.bytesFilled += size;
1011+ }
1012+ function ReadableByteStreamControllerHandleQueueDrain(controller) {
1013+ if (controller._queueTotalSize === 0 && controller._closeRequested) {
1014+ ReadableByteStreamControllerClearAlgorithms(controller);
1015+ ReadableStreamClose(controller._controlledReadableByteStream);
1016+ }
1017+ else {
1018+ ReadableByteStreamControllerCallPullIfNeeded(controller);
1019+ }
1020+ }
1021+ function ReadableByteStreamControllerInvalidateBYOBRequest(controller) {
1022+ if (controller._byobRequest === null) {
1023+ return;
1024+ }
1025+ controller._byobRequest._associatedReadableByteStreamController = undefined;
1026+ controller._byobRequest._view = null;
1027+ controller._byobRequest = null;
1028+ }
1029+ function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) {
1030+ while (controller._pendingPullIntos.length > 0) {
1031+ if (controller._queueTotalSize === 0) {
1032+ return;
1033+ }
1034+ const pullIntoDescriptor = controller._pendingPullIntos.peek();
1035+ if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {
1036+ ReadableByteStreamControllerShiftPendingPullInto(controller);
1037+ ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);
1038+ }
1039+ }
1040+ }
1041+ function ReadableByteStreamControllerPullInto(controller, view, readIntoRequest) {
1042+ const stream = controller._controlledReadableByteStream;
1043+ let elementSize = 1;
1044+ if (view.constructor !== DataView) {
1045+ elementSize = view.constructor.BYTES_PER_ELEMENT;
1046+ }
1047+ const ctor = view.constructor;
1048+ // try {
1049+ const buffer = TransferArrayBuffer(view.buffer);
1050+ // } catch (e) {
1051+ // readIntoRequest._errorSteps(e);
1052+ // return;
1053+ // }
1054+ const pullIntoDescriptor = {
1055+ buffer,
1056+ bufferByteLength: buffer.byteLength,
1057+ byteOffset: view.byteOffset,
1058+ byteLength: view.byteLength,
1059+ bytesFilled: 0,
1060+ elementSize,
1061+ viewConstructor: ctor,
1062+ readerType: 'byob'
1063+ };
1064+ if (controller._pendingPullIntos.length > 0) {
1065+ controller._pendingPullIntos.push(pullIntoDescriptor);
1066+ // No ReadableByteStreamControllerCallPullIfNeeded() call since:
1067+ // - No change happens on desiredSize
1068+ // - The source has already been notified of that there's at least 1 pending read(view)
1069+ ReadableStreamAddReadIntoRequest(stream, readIntoRequest);
1070+ return;
1071+ }
1072+ if (stream._state === 'closed') {
1073+ const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);
1074+ readIntoRequest._closeSteps(emptyView);
1075+ return;
1076+ }
1077+ if (controller._queueTotalSize > 0) {
1078+ if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {
1079+ const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);
1080+ ReadableByteStreamControllerHandleQueueDrain(controller);
1081+ readIntoRequest._chunkSteps(filledView);
1082+ return;
1083+ }
1084+ if (controller._closeRequested) {
1085+ const e = new TypeError('Insufficient bytes to fill elements in the given buffer');
1086+ ReadableByteStreamControllerError(controller, e);
1087+ readIntoRequest._errorSteps(e);
1088+ return;
1089+ }
1090+ }
1091+ controller._pendingPullIntos.push(pullIntoDescriptor);
1092+ ReadableStreamAddReadIntoRequest(stream, readIntoRequest);
1093+ ReadableByteStreamControllerCallPullIfNeeded(controller);
1094+ }
1095+ function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) {
1096+ const stream = controller._controlledReadableByteStream;
1097+ if (ReadableStreamHasBYOBReader(stream)) {
1098+ while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {
1099+ const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);
1100+ ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);
1101+ }
1102+ }
1103+ }
1104+ function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) {
1105+ ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);
1106+ if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {
1107+ return;
1108+ }
1109+ ReadableByteStreamControllerShiftPendingPullInto(controller);
1110+ const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;
1111+ if (remainderSize > 0) {
1112+ const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;
1113+ const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);
1114+ ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);
1115+ }
1116+ pullIntoDescriptor.bytesFilled -= remainderSize;
1117+ ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);
1118+ ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);
1119+ }
1120+ function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) {
1121+ const firstDescriptor = controller._pendingPullIntos.peek();
1122+ ReadableByteStreamControllerInvalidateBYOBRequest(controller);
1123+ const state = controller._controlledReadableByteStream._state;
1124+ if (state === 'closed') {
1125+ ReadableByteStreamControllerRespondInClosedState(controller);
1126+ }
1127+ else {
1128+ ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);
1129+ }
1130+ ReadableByteStreamControllerCallPullIfNeeded(controller);
1131+ }
1132+ function ReadableByteStreamControllerShiftPendingPullInto(controller) {
1133+ const descriptor = controller._pendingPullIntos.shift();
1134+ return descriptor;
1135+ }
1136+ function ReadableByteStreamControllerShouldCallPull(controller) {
1137+ const stream = controller._controlledReadableByteStream;
1138+ if (stream._state !== 'readable') {
1139+ return false;
1140+ }
1141+ if (controller._closeRequested) {
1142+ return false;
1143+ }
1144+ if (!controller._started) {
1145+ return false;
1146+ }
1147+ if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {
1148+ return true;
1149+ }
1150+ if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {
1151+ return true;
1152+ }
1153+ const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);
1154+ if (desiredSize > 0) {
1155+ return true;
1156+ }
1157+ return false;
1158+ }
1159+ function ReadableByteStreamControllerClearAlgorithms(controller) {
1160+ controller._pullAlgorithm = undefined;
1161+ controller._cancelAlgorithm = undefined;
1162+ }
1163+ // A client of ReadableByteStreamController may use these functions directly to bypass state check.
1164+ function ReadableByteStreamControllerClose(controller) {
1165+ const stream = controller._controlledReadableByteStream;
1166+ if (controller._closeRequested || stream._state !== 'readable') {
1167+ return;
1168+ }
1169+ if (controller._queueTotalSize > 0) {
1170+ controller._closeRequested = true;
1171+ return;
1172+ }
1173+ if (controller._pendingPullIntos.length > 0) {
1174+ const firstPendingPullInto = controller._pendingPullIntos.peek();
1175+ if (firstPendingPullInto.bytesFilled > 0) {
1176+ const e = new TypeError('Insufficient bytes to fill elements in the given buffer');
1177+ ReadableByteStreamControllerError(controller, e);
1178+ throw e;
1179+ }
1180+ }
1181+ ReadableByteStreamControllerClearAlgorithms(controller);
1182+ ReadableStreamClose(stream);
1183+ }
1184+ function ReadableByteStreamControllerEnqueue(controller, chunk) {
1185+ const stream = controller._controlledReadableByteStream;
1186+ if (controller._closeRequested || stream._state !== 'readable') {
1187+ return;
1188+ }
1189+ const buffer = chunk.buffer;
1190+ const byteOffset = chunk.byteOffset;
1191+ const byteLength = chunk.byteLength;
1192+ const transferredBuffer = TransferArrayBuffer(buffer);
1193+ if (controller._pendingPullIntos.length > 0) {
1194+ const firstPendingPullInto = controller._pendingPullIntos.peek();
1195+ if (IsDetachedBuffer(firstPendingPullInto.buffer)) ;
1196+ firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);
1197+ }
1198+ ReadableByteStreamControllerInvalidateBYOBRequest(controller);
1199+ if (ReadableStreamHasDefaultReader(stream)) {
1200+ if (ReadableStreamGetNumReadRequests(stream) === 0) {
1201+ ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
1202+ }
1203+ else {
1204+ if (controller._pendingPullIntos.length > 0) {
1205+ ReadableByteStreamControllerShiftPendingPullInto(controller);
1206+ }
1207+ const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);
1208+ ReadableStreamFulfillReadRequest(stream, transferredView, false);
1209+ }
1210+ }
1211+ else if (ReadableStreamHasBYOBReader(stream)) {
1212+ // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.
1213+ ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
1214+ ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);
1215+ }
1216+ else {
1217+ ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
1218+ }
1219+ ReadableByteStreamControllerCallPullIfNeeded(controller);
1220+ }
1221+ function ReadableByteStreamControllerError(controller, e) {
1222+ const stream = controller._controlledReadableByteStream;
1223+ if (stream._state !== 'readable') {
1224+ return;
1225+ }
1226+ ReadableByteStreamControllerClearPendingPullIntos(controller);
1227+ ResetQueue(controller);
1228+ ReadableByteStreamControllerClearAlgorithms(controller);
1229+ ReadableStreamError(stream, e);
1230+ }
1231+ function ReadableByteStreamControllerGetBYOBRequest(controller) {
1232+ if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {
1233+ const firstDescriptor = controller._pendingPullIntos.peek();
1234+ const view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled);
1235+ const byobRequest = Object.create(ReadableStreamBYOBRequest.prototype);
1236+ SetUpReadableStreamBYOBRequest(byobRequest, controller, view);
1237+ controller._byobRequest = byobRequest;
1238+ }
1239+ return controller._byobRequest;
1240+ }
1241+ function ReadableByteStreamControllerGetDesiredSize(controller) {
1242+ const state = controller._controlledReadableByteStream._state;
1243+ if (state === 'errored') {
1244+ return null;
1245+ }
1246+ if (state === 'closed') {
1247+ return 0;
1248+ }
1249+ return controller._strategyHWM - controller._queueTotalSize;
1250+ }
1251+ function ReadableByteStreamControllerRespond(controller, bytesWritten) {
1252+ const firstDescriptor = controller._pendingPullIntos.peek();
1253+ const state = controller._controlledReadableByteStream._state;
1254+ if (state === 'closed') {
1255+ if (bytesWritten !== 0) {
1256+ throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');
1257+ }
1258+ }
1259+ else {
1260+ if (bytesWritten === 0) {
1261+ throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');
1262+ }
1263+ if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {
1264+ throw new RangeError('bytesWritten out of range');
1265+ }
1266+ }
1267+ firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);
1268+ ReadableByteStreamControllerRespondInternal(controller, bytesWritten);
1269+ }
1270+ function ReadableByteStreamControllerRespondWithNewView(controller, view) {
1271+ const firstDescriptor = controller._pendingPullIntos.peek();
1272+ const state = controller._controlledReadableByteStream._state;
1273+ if (state === 'closed') {
1274+ if (view.byteLength !== 0) {
1275+ throw new TypeError('The view\'s length must be 0 when calling respondWithNewView() on a closed stream');
1276+ }
1277+ }
1278+ else {
1279+ if (view.byteLength === 0) {
1280+ throw new TypeError('The view\'s length must be greater than 0 when calling respondWithNewView() on a readable stream');
1281+ }
1282+ }
1283+ if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {
1284+ throw new RangeError('The region specified by view does not match byobRequest');
1285+ }
1286+ if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {
1287+ throw new RangeError('The buffer of view has different capacity than byobRequest');
1288+ }
1289+ if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {
1290+ throw new RangeError('The region specified by view is larger than byobRequest');
1291+ }
1292+ const viewByteLength = view.byteLength;
1293+ firstDescriptor.buffer = TransferArrayBuffer(view.buffer);
1294+ ReadableByteStreamControllerRespondInternal(controller, viewByteLength);
1295+ }
1296+ function SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize) {
1297+ controller._controlledReadableByteStream = stream;
1298+ controller._pullAgain = false;
1299+ controller._pulling = false;
1300+ controller._byobRequest = null;
1301+ // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.
1302+ controller._queue = controller._queueTotalSize = undefined;
1303+ ResetQueue(controller);
1304+ controller._closeRequested = false;
1305+ controller._started = false;
1306+ controller._strategyHWM = highWaterMark;
1307+ controller._pullAlgorithm = pullAlgorithm;
1308+ controller._cancelAlgorithm = cancelAlgorithm;
1309+ controller._autoAllocateChunkSize = autoAllocateChunkSize;
1310+ controller._pendingPullIntos = new SimpleQueue();
1311+ stream._readableStreamController = controller;
1312+ const startResult = startAlgorithm();
1313+ uponPromise(promiseResolvedWith(startResult), () => {
1314+ controller._started = true;
1315+ ReadableByteStreamControllerCallPullIfNeeded(controller);
1316+ }, r => {
1317+ ReadableByteStreamControllerError(controller, r);
1318+ });
1319+ }
1320+ function SetUpReadableByteStreamControllerFromUnderlyingSource(stream, underlyingByteSource, highWaterMark) {
1321+ const controller = Object.create(ReadableByteStreamController.prototype);
1322+ let startAlgorithm = () => undefined;
1323+ let pullAlgorithm = () => promiseResolvedWith(undefined);
1324+ let cancelAlgorithm = () => promiseResolvedWith(undefined);
1325+ if (underlyingByteSource.start !== undefined) {
1326+ startAlgorithm = () => underlyingByteSource.start(controller);
1327+ }
1328+ if (underlyingByteSource.pull !== undefined) {
1329+ pullAlgorithm = () => underlyingByteSource.pull(controller);
1330+ }
1331+ if (underlyingByteSource.cancel !== undefined) {
1332+ cancelAlgorithm = reason => underlyingByteSource.cancel(reason);
1333+ }
1334+ const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;
1335+ if (autoAllocateChunkSize === 0) {
1336+ throw new TypeError('autoAllocateChunkSize must be greater than 0');
1337+ }
1338+ SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize);
1339+ }
1340+ function SetUpReadableStreamBYOBRequest(request, controller, view) {
1341+ request._associatedReadableByteStreamController = controller;
1342+ request._view = view;
1343+ }
1344+ // Helper functions for the ReadableStreamBYOBRequest.
1345+ function byobRequestBrandCheckException(name) {
1346+ return new TypeError(`ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);
1347+ }
1348+ // Helper functions for the ReadableByteStreamController.
1349+ function byteStreamControllerBrandCheckException(name) {
1350+ return new TypeError(`ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);
1351+ }
1352+
1353+ // Abstract operations for the ReadableStream.
1354+ function AcquireReadableStreamBYOBReader(stream) {
1355+ return new ReadableStreamBYOBReader(stream);
1356+ }
1357+ // ReadableStream API exposed for controllers.
1358+ function ReadableStreamAddReadIntoRequest(stream, readIntoRequest) {
1359+ stream._reader._readIntoRequests.push(readIntoRequest);
1360+ }
1361+ function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) {
1362+ const reader = stream._reader;
1363+ const readIntoRequest = reader._readIntoRequests.shift();
1364+ if (done) {
1365+ readIntoRequest._closeSteps(chunk);
1366+ }
1367+ else {
1368+ readIntoRequest._chunkSteps(chunk);
1369+ }
1370+ }
1371+ function ReadableStreamGetNumReadIntoRequests(stream) {
1372+ return stream._reader._readIntoRequests.length;
1373+ }
1374+ function ReadableStreamHasBYOBReader(stream) {
1375+ const reader = stream._reader;
1376+ if (reader === undefined) {
1377+ return false;
1378+ }
1379+ if (!IsReadableStreamBYOBReader(reader)) {
1380+ return false;
1381+ }
1382+ return true;
1383+ }
1384+ /**
1385+ * A BYOB reader vended by a {@link ReadableStream}.
1386+ *
1387+ * @public
1388+ */
1389+ class ReadableStreamBYOBReader {
1390+ constructor(stream) {
1391+ assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');
1392+ assertReadableStream(stream, 'First parameter');
1393+ if (IsReadableStreamLocked(stream)) {
1394+ throw new TypeError('This stream has already been locked for exclusive reading by another reader');
1395+ }
1396+ if (!IsReadableByteStreamController(stream._readableStreamController)) {
1397+ throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +
1398+ 'source');
1399+ }
1400+ ReadableStreamReaderGenericInitialize(this, stream);
1401+ this._readIntoRequests = new SimpleQueue();
1402+ }
1403+ /**
1404+ * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or
1405+ * the reader's lock is released before the stream finishes closing.
1406+ */
1407+ get closed() {
1408+ if (!IsReadableStreamBYOBReader(this)) {
1409+ return promiseRejectedWith(byobReaderBrandCheckException('closed'));
1410+ }
1411+ return this._closedPromise;
1412+ }
1413+ /**
1414+ * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.
1415+ */
1416+ cancel(reason = undefined) {
1417+ if (!IsReadableStreamBYOBReader(this)) {
1418+ return promiseRejectedWith(byobReaderBrandCheckException('cancel'));
1419+ }
1420+ if (this._ownerReadableStream === undefined) {
1421+ return promiseRejectedWith(readerLockException('cancel'));
1422+ }
1423+ return ReadableStreamReaderGenericCancel(this, reason);
1424+ }
1425+ /**
1426+ * Attempts to reads bytes into view, and returns a promise resolved with the result.
1427+ *
1428+ * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.
1429+ */
1430+ read(view) {
1431+ if (!IsReadableStreamBYOBReader(this)) {
1432+ return promiseRejectedWith(byobReaderBrandCheckException('read'));
1433+ }
1434+ if (!ArrayBuffer.isView(view)) {
1435+ return promiseRejectedWith(new TypeError('view must be an array buffer view'));
1436+ }
1437+ if (view.byteLength === 0) {
1438+ return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));
1439+ }
1440+ if (view.buffer.byteLength === 0) {
1441+ return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));
1442+ }
1443+ if (IsDetachedBuffer(view.buffer)) ;
1444+ if (this._ownerReadableStream === undefined) {
1445+ return promiseRejectedWith(readerLockException('read from'));
1446+ }
1447+ let resolvePromise;
1448+ let rejectPromise;
1449+ const promise = newPromise((resolve, reject) => {
1450+ resolvePromise = resolve;
1451+ rejectPromise = reject;
1452+ });
1453+ const readIntoRequest = {
1454+ _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),
1455+ _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),
1456+ _errorSteps: e => rejectPromise(e)
1457+ };
1458+ ReadableStreamBYOBReaderRead(this, view, readIntoRequest);
1459+ return promise;
1460+ }
1461+ /**
1462+ * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.
1463+ * If the associated stream is errored when the lock is released, the reader will appear errored in the same way
1464+ * from now on; otherwise, the reader will appear closed.
1465+ *
1466+ * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by
1467+ * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to
1468+ * do so will throw a `TypeError` and leave the reader locked to the stream.
1469+ */
1470+ releaseLock() {
1471+ if (!IsReadableStreamBYOBReader(this)) {
1472+ throw byobReaderBrandCheckException('releaseLock');
1473+ }
1474+ if (this._ownerReadableStream === undefined) {
1475+ return;
1476+ }
1477+ if (this._readIntoRequests.length > 0) {
1478+ throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');
1479+ }
1480+ ReadableStreamReaderGenericRelease(this);
1481+ }
1482+ }
1483+ Object.defineProperties(ReadableStreamBYOBReader.prototype, {
1484+ cancel: { enumerable: true },
1485+ read: { enumerable: true },
1486+ releaseLock: { enumerable: true },
1487+ closed: { enumerable: true }
1488+ });
1489+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
1490+ Object.defineProperty(ReadableStreamBYOBReader.prototype, SymbolPolyfill.toStringTag, {
1491+ value: 'ReadableStreamBYOBReader',
1492+ configurable: true
1493+ });
1494+ }
1495+ // Abstract operations for the readers.
1496+ function IsReadableStreamBYOBReader(x) {
1497+ if (!typeIsObject(x)) {
1498+ return false;
1499+ }
1500+ if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {
1501+ return false;
1502+ }
1503+ return x instanceof ReadableStreamBYOBReader;
1504+ }
1505+ function ReadableStreamBYOBReaderRead(reader, view, readIntoRequest) {
1506+ const stream = reader._ownerReadableStream;
1507+ stream._disturbed = true;
1508+ if (stream._state === 'errored') {
1509+ readIntoRequest._errorSteps(stream._storedError);
1510+ }
1511+ else {
1512+ ReadableByteStreamControllerPullInto(stream._readableStreamController, view, readIntoRequest);
1513+ }
1514+ }
1515+ // Helper functions for the ReadableStreamBYOBReader.
1516+ function byobReaderBrandCheckException(name) {
1517+ return new TypeError(`ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);
1518+ }
1519+
1520+ function ExtractHighWaterMark(strategy, defaultHWM) {
1521+ const { highWaterMark } = strategy;
1522+ if (highWaterMark === undefined) {
1523+ return defaultHWM;
1524+ }
1525+ if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {
1526+ throw new RangeError('Invalid highWaterMark');
1527+ }
1528+ return highWaterMark;
1529+ }
1530+ function ExtractSizeAlgorithm(strategy) {
1531+ const { size } = strategy;
1532+ if (!size) {
1533+ return () => 1;
1534+ }
1535+ return size;
1536+ }
1537+
1538+ function convertQueuingStrategy(init, context) {
1539+ assertDictionary(init, context);
1540+ const highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;
1541+ const size = init === null || init === void 0 ? void 0 : init.size;
1542+ return {
1543+ highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),
1544+ size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)
1545+ };
1546+ }
1547+ function convertQueuingStrategySize(fn, context) {
1548+ assertFunction(fn, context);
1549+ return chunk => convertUnrestrictedDouble(fn(chunk));
1550+ }
1551+
1552+ function convertUnderlyingSink(original, context) {
1553+ assertDictionary(original, context);
1554+ const abort = original === null || original === void 0 ? void 0 : original.abort;
1555+ const close = original === null || original === void 0 ? void 0 : original.close;
1556+ const start = original === null || original === void 0 ? void 0 : original.start;
1557+ const type = original === null || original === void 0 ? void 0 : original.type;
1558+ const write = original === null || original === void 0 ? void 0 : original.write;
1559+ return {
1560+ abort: abort === undefined ?
1561+ undefined :
1562+ convertUnderlyingSinkAbortCallback(abort, original, `${context} has member 'abort' that`),
1563+ close: close === undefined ?
1564+ undefined :
1565+ convertUnderlyingSinkCloseCallback(close, original, `${context} has member 'close' that`),
1566+ start: start === undefined ?
1567+ undefined :
1568+ convertUnderlyingSinkStartCallback(start, original, `${context} has member 'start' that`),
1569+ write: write === undefined ?
1570+ undefined :
1571+ convertUnderlyingSinkWriteCallback(write, original, `${context} has member 'write' that`),
1572+ type
1573+ };
1574+ }
1575+ function convertUnderlyingSinkAbortCallback(fn, original, context) {
1576+ assertFunction(fn, context);
1577+ return (reason) => promiseCall(fn, original, [reason]);
1578+ }
1579+ function convertUnderlyingSinkCloseCallback(fn, original, context) {
1580+ assertFunction(fn, context);
1581+ return () => promiseCall(fn, original, []);
1582+ }
1583+ function convertUnderlyingSinkStartCallback(fn, original, context) {
1584+ assertFunction(fn, context);
1585+ return (controller) => reflectCall(fn, original, [controller]);
1586+ }
1587+ function convertUnderlyingSinkWriteCallback(fn, original, context) {
1588+ assertFunction(fn, context);
1589+ return (chunk, controller) => promiseCall(fn, original, [chunk, controller]);
1590+ }
1591+
1592+ function assertWritableStream(x, context) {
1593+ if (!IsWritableStream(x)) {
1594+ throw new TypeError(`${context} is not a WritableStream.`);
1595+ }
1596+ }
1597+
1598+ function isAbortSignal(value) {
1599+ if (typeof value !== 'object' || value === null) {
1600+ return false;
1601+ }
1602+ try {
1603+ return typeof value.aborted === 'boolean';
1604+ }
1605+ catch (_a) {
1606+ // AbortSignal.prototype.aborted throws if its brand check fails
1607+ return false;
1608+ }
1609+ }
1610+ const supportsAbortController = typeof AbortController === 'function';
1611+ /**
1612+ * Construct a new AbortController, if supported by the platform.
1613+ *
1614+ * @internal
1615+ */
1616+ function createAbortController() {
1617+ if (supportsAbortController) {
1618+ return new AbortController();
1619+ }
1620+ return undefined;
1621+ }
1622+
1623+ /**
1624+ * A writable stream represents a destination for data, into which you can write.
1625+ *
1626+ * @public
1627+ */
1628+ class WritableStream {
1629+ constructor(rawUnderlyingSink = {}, rawStrategy = {}) {
1630+ if (rawUnderlyingSink === undefined) {
1631+ rawUnderlyingSink = null;
1632+ }
1633+ else {
1634+ assertObject(rawUnderlyingSink, 'First parameter');
1635+ }
1636+ const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');
1637+ const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');
1638+ InitializeWritableStream(this);
1639+ const type = underlyingSink.type;
1640+ if (type !== undefined) {
1641+ throw new RangeError('Invalid type is specified');
1642+ }
1643+ const sizeAlgorithm = ExtractSizeAlgorithm(strategy);
1644+ const highWaterMark = ExtractHighWaterMark(strategy, 1);
1645+ SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);
1646+ }
1647+ /**
1648+ * Returns whether or not the writable stream is locked to a writer.
1649+ */
1650+ get locked() {
1651+ if (!IsWritableStream(this)) {
1652+ throw streamBrandCheckException$2('locked');
1653+ }
1654+ return IsWritableStreamLocked(this);
1655+ }
1656+ /**
1657+ * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be
1658+ * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort
1659+ * mechanism of the underlying sink.
1660+ *
1661+ * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled
1662+ * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel
1663+ * the stream) if the stream is currently locked.
1664+ */
1665+ abort(reason = undefined) {
1666+ if (!IsWritableStream(this)) {
1667+ return promiseRejectedWith(streamBrandCheckException$2('abort'));
1668+ }
1669+ if (IsWritableStreamLocked(this)) {
1670+ return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));
1671+ }
1672+ return WritableStreamAbort(this, reason);
1673+ }
1674+ /**
1675+ * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its
1676+ * close behavior. During this time any further attempts to write will fail (without erroring the stream).
1677+ *
1678+ * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream
1679+ * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with
1680+ * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.
1681+ */
1682+ close() {
1683+ if (!IsWritableStream(this)) {
1684+ return promiseRejectedWith(streamBrandCheckException$2('close'));
1685+ }
1686+ if (IsWritableStreamLocked(this)) {
1687+ return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));
1688+ }
1689+ if (WritableStreamCloseQueuedOrInFlight(this)) {
1690+ return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));
1691+ }
1692+ return WritableStreamClose(this);
1693+ }
1694+ /**
1695+ * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream
1696+ * is locked, no other writer can be acquired until this one is released.
1697+ *
1698+ * This functionality is especially useful for creating abstractions that desire the ability to write to a stream
1699+ * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at
1700+ * the same time, which would cause the resulting written data to be unpredictable and probably useless.
1701+ */
1702+ getWriter() {
1703+ if (!IsWritableStream(this)) {
1704+ throw streamBrandCheckException$2('getWriter');
1705+ }
1706+ return AcquireWritableStreamDefaultWriter(this);
1707+ }
1708+ }
1709+ Object.defineProperties(WritableStream.prototype, {
1710+ abort: { enumerable: true },
1711+ close: { enumerable: true },
1712+ getWriter: { enumerable: true },
1713+ locked: { enumerable: true }
1714+ });
1715+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
1716+ Object.defineProperty(WritableStream.prototype, SymbolPolyfill.toStringTag, {
1717+ value: 'WritableStream',
1718+ configurable: true
1719+ });
1720+ }
1721+ // Abstract operations for the WritableStream.
1722+ function AcquireWritableStreamDefaultWriter(stream) {
1723+ return new WritableStreamDefaultWriter(stream);
1724+ }
1725+ // Throws if and only if startAlgorithm throws.
1726+ function CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark = 1, sizeAlgorithm = () => 1) {
1727+ const stream = Object.create(WritableStream.prototype);
1728+ InitializeWritableStream(stream);
1729+ const controller = Object.create(WritableStreamDefaultController.prototype);
1730+ SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);
1731+ return stream;
1732+ }
1733+ function InitializeWritableStream(stream) {
1734+ stream._state = 'writable';
1735+ // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is
1736+ // 'erroring' or 'errored'. May be set to an undefined value.
1737+ stream._storedError = undefined;
1738+ stream._writer = undefined;
1739+ // Initialize to undefined first because the constructor of the controller checks this
1740+ // variable to validate the caller.
1741+ stream._writableStreamController = undefined;
1742+ // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data
1743+ // producer without waiting for the queued writes to finish.
1744+ stream._writeRequests = new SimpleQueue();
1745+ // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents
1746+ // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.
1747+ stream._inFlightWriteRequest = undefined;
1748+ // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer
1749+ // has been detached.
1750+ stream._closeRequest = undefined;
1751+ // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it
1752+ // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.
1753+ stream._inFlightCloseRequest = undefined;
1754+ // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.
1755+ stream._pendingAbortRequest = undefined;
1756+ // The backpressure signal set by the controller.
1757+ stream._backpressure = false;
1758+ }
1759+ function IsWritableStream(x) {
1760+ if (!typeIsObject(x)) {
1761+ return false;
1762+ }
1763+ if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {
1764+ return false;
1765+ }
1766+ return x instanceof WritableStream;
1767+ }
1768+ function IsWritableStreamLocked(stream) {
1769+ if (stream._writer === undefined) {
1770+ return false;
1771+ }
1772+ return true;
1773+ }
1774+ function WritableStreamAbort(stream, reason) {
1775+ var _a;
1776+ if (stream._state === 'closed' || stream._state === 'errored') {
1777+ return promiseResolvedWith(undefined);
1778+ }
1779+ stream._writableStreamController._abortReason = reason;
1780+ (_a = stream._writableStreamController._abortController) === null || _a === void 0 ? void 0 : _a.abort();
1781+ // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',
1782+ // but it doesn't know that signaling abort runs author code that might have changed the state.
1783+ // Widen the type again by casting to WritableStreamState.
1784+ const state = stream._state;
1785+ if (state === 'closed' || state === 'errored') {
1786+ return promiseResolvedWith(undefined);
1787+ }
1788+ if (stream._pendingAbortRequest !== undefined) {
1789+ return stream._pendingAbortRequest._promise;
1790+ }
1791+ let wasAlreadyErroring = false;
1792+ if (state === 'erroring') {
1793+ wasAlreadyErroring = true;
1794+ // reason will not be used, so don't keep a reference to it.
1795+ reason = undefined;
1796+ }
1797+ const promise = newPromise((resolve, reject) => {
1798+ stream._pendingAbortRequest = {
1799+ _promise: undefined,
1800+ _resolve: resolve,
1801+ _reject: reject,
1802+ _reason: reason,
1803+ _wasAlreadyErroring: wasAlreadyErroring
1804+ };
1805+ });
1806+ stream._pendingAbortRequest._promise = promise;
1807+ if (!wasAlreadyErroring) {
1808+ WritableStreamStartErroring(stream, reason);
1809+ }
1810+ return promise;
1811+ }
1812+ function WritableStreamClose(stream) {
1813+ const state = stream._state;
1814+ if (state === 'closed' || state === 'errored') {
1815+ return promiseRejectedWith(new TypeError(`The stream (in ${state} state) is not in the writable state and cannot be closed`));
1816+ }
1817+ const promise = newPromise((resolve, reject) => {
1818+ const closeRequest = {
1819+ _resolve: resolve,
1820+ _reject: reject
1821+ };
1822+ stream._closeRequest = closeRequest;
1823+ });
1824+ const writer = stream._writer;
1825+ if (writer !== undefined && stream._backpressure && state === 'writable') {
1826+ defaultWriterReadyPromiseResolve(writer);
1827+ }
1828+ WritableStreamDefaultControllerClose(stream._writableStreamController);
1829+ return promise;
1830+ }
1831+ // WritableStream API exposed for controllers.
1832+ function WritableStreamAddWriteRequest(stream) {
1833+ const promise = newPromise((resolve, reject) => {
1834+ const writeRequest = {
1835+ _resolve: resolve,
1836+ _reject: reject
1837+ };
1838+ stream._writeRequests.push(writeRequest);
1839+ });
1840+ return promise;
1841+ }
1842+ function WritableStreamDealWithRejection(stream, error) {
1843+ const state = stream._state;
1844+ if (state === 'writable') {
1845+ WritableStreamStartErroring(stream, error);
1846+ return;
1847+ }
1848+ WritableStreamFinishErroring(stream);
1849+ }
1850+ function WritableStreamStartErroring(stream, reason) {
1851+ const controller = stream._writableStreamController;
1852+ stream._state = 'erroring';
1853+ stream._storedError = reason;
1854+ const writer = stream._writer;
1855+ if (writer !== undefined) {
1856+ WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);
1857+ }
1858+ if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {
1859+ WritableStreamFinishErroring(stream);
1860+ }
1861+ }
1862+ function WritableStreamFinishErroring(stream) {
1863+ stream._state = 'errored';
1864+ stream._writableStreamController[ErrorSteps]();
1865+ const storedError = stream._storedError;
1866+ stream._writeRequests.forEach(writeRequest => {
1867+ writeRequest._reject(storedError);
1868+ });
1869+ stream._writeRequests = new SimpleQueue();
1870+ if (stream._pendingAbortRequest === undefined) {
1871+ WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
1872+ return;
1873+ }
1874+ const abortRequest = stream._pendingAbortRequest;
1875+ stream._pendingAbortRequest = undefined;
1876+ if (abortRequest._wasAlreadyErroring) {
1877+ abortRequest._reject(storedError);
1878+ WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
1879+ return;
1880+ }
1881+ const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);
1882+ uponPromise(promise, () => {
1883+ abortRequest._resolve();
1884+ WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
1885+ }, (reason) => {
1886+ abortRequest._reject(reason);
1887+ WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
1888+ });
1889+ }
1890+ function WritableStreamFinishInFlightWrite(stream) {
1891+ stream._inFlightWriteRequest._resolve(undefined);
1892+ stream._inFlightWriteRequest = undefined;
1893+ }
1894+ function WritableStreamFinishInFlightWriteWithError(stream, error) {
1895+ stream._inFlightWriteRequest._reject(error);
1896+ stream._inFlightWriteRequest = undefined;
1897+ WritableStreamDealWithRejection(stream, error);
1898+ }
1899+ function WritableStreamFinishInFlightClose(stream) {
1900+ stream._inFlightCloseRequest._resolve(undefined);
1901+ stream._inFlightCloseRequest = undefined;
1902+ const state = stream._state;
1903+ if (state === 'erroring') {
1904+ // The error was too late to do anything, so it is ignored.
1905+ stream._storedError = undefined;
1906+ if (stream._pendingAbortRequest !== undefined) {
1907+ stream._pendingAbortRequest._resolve();
1908+ stream._pendingAbortRequest = undefined;
1909+ }
1910+ }
1911+ stream._state = 'closed';
1912+ const writer = stream._writer;
1913+ if (writer !== undefined) {
1914+ defaultWriterClosedPromiseResolve(writer);
1915+ }
1916+ }
1917+ function WritableStreamFinishInFlightCloseWithError(stream, error) {
1918+ stream._inFlightCloseRequest._reject(error);
1919+ stream._inFlightCloseRequest = undefined;
1920+ // Never execute sink abort() after sink close().
1921+ if (stream._pendingAbortRequest !== undefined) {
1922+ stream._pendingAbortRequest._reject(error);
1923+ stream._pendingAbortRequest = undefined;
1924+ }
1925+ WritableStreamDealWithRejection(stream, error);
1926+ }
1927+ // TODO(ricea): Fix alphabetical order.
1928+ function WritableStreamCloseQueuedOrInFlight(stream) {
1929+ if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {
1930+ return false;
1931+ }
1932+ return true;
1933+ }
1934+ function WritableStreamHasOperationMarkedInFlight(stream) {
1935+ if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {
1936+ return false;
1937+ }
1938+ return true;
1939+ }
1940+ function WritableStreamMarkCloseRequestInFlight(stream) {
1941+ stream._inFlightCloseRequest = stream._closeRequest;
1942+ stream._closeRequest = undefined;
1943+ }
1944+ function WritableStreamMarkFirstWriteRequestInFlight(stream) {
1945+ stream._inFlightWriteRequest = stream._writeRequests.shift();
1946+ }
1947+ function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) {
1948+ if (stream._closeRequest !== undefined) {
1949+ stream._closeRequest._reject(stream._storedError);
1950+ stream._closeRequest = undefined;
1951+ }
1952+ const writer = stream._writer;
1953+ if (writer !== undefined) {
1954+ defaultWriterClosedPromiseReject(writer, stream._storedError);
1955+ }
1956+ }
1957+ function WritableStreamUpdateBackpressure(stream, backpressure) {
1958+ const writer = stream._writer;
1959+ if (writer !== undefined && backpressure !== stream._backpressure) {
1960+ if (backpressure) {
1961+ defaultWriterReadyPromiseReset(writer);
1962+ }
1963+ else {
1964+ defaultWriterReadyPromiseResolve(writer);
1965+ }
1966+ }
1967+ stream._backpressure = backpressure;
1968+ }
1969+ /**
1970+ * A default writer vended by a {@link WritableStream}.
1971+ *
1972+ * @public
1973+ */
1974+ class WritableStreamDefaultWriter {
1975+ constructor(stream) {
1976+ assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');
1977+ assertWritableStream(stream, 'First parameter');
1978+ if (IsWritableStreamLocked(stream)) {
1979+ throw new TypeError('This stream has already been locked for exclusive writing by another writer');
1980+ }
1981+ this._ownerWritableStream = stream;
1982+ stream._writer = this;
1983+ const state = stream._state;
1984+ if (state === 'writable') {
1985+ if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {
1986+ defaultWriterReadyPromiseInitialize(this);
1987+ }
1988+ else {
1989+ defaultWriterReadyPromiseInitializeAsResolved(this);
1990+ }
1991+ defaultWriterClosedPromiseInitialize(this);
1992+ }
1993+ else if (state === 'erroring') {
1994+ defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);
1995+ defaultWriterClosedPromiseInitialize(this);
1996+ }
1997+ else if (state === 'closed') {
1998+ defaultWriterReadyPromiseInitializeAsResolved(this);
1999+ defaultWriterClosedPromiseInitializeAsResolved(this);
2000+ }
2001+ else {
2002+ const storedError = stream._storedError;
2003+ defaultWriterReadyPromiseInitializeAsRejected(this, storedError);
2004+ defaultWriterClosedPromiseInitializeAsRejected(this, storedError);
2005+ }
2006+ }
2007+ /**
2008+ * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or
2009+ * the writer’s lock is released before the stream finishes closing.
2010+ */
2011+ get closed() {
2012+ if (!IsWritableStreamDefaultWriter(this)) {
2013+ return promiseRejectedWith(defaultWriterBrandCheckException('closed'));
2014+ }
2015+ return this._closedPromise;
2016+ }
2017+ /**
2018+ * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.
2019+ * A producer can use this information to determine the right amount of data to write.
2020+ *
2021+ * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort
2022+ * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when
2023+ * the writer’s lock is released.
2024+ */
2025+ get desiredSize() {
2026+ if (!IsWritableStreamDefaultWriter(this)) {
2027+ throw defaultWriterBrandCheckException('desiredSize');
2028+ }
2029+ if (this._ownerWritableStream === undefined) {
2030+ throw defaultWriterLockException('desiredSize');
2031+ }
2032+ return WritableStreamDefaultWriterGetDesiredSize(this);
2033+ }
2034+ /**
2035+ * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions
2036+ * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips
2037+ * back to zero or below, the getter will return a new promise that stays pending until the next transition.
2038+ *
2039+ * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become
2040+ * rejected.
2041+ */
2042+ get ready() {
2043+ if (!IsWritableStreamDefaultWriter(this)) {
2044+ return promiseRejectedWith(defaultWriterBrandCheckException('ready'));
2045+ }
2046+ return this._readyPromise;
2047+ }
2048+ /**
2049+ * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.
2050+ */
2051+ abort(reason = undefined) {
2052+ if (!IsWritableStreamDefaultWriter(this)) {
2053+ return promiseRejectedWith(defaultWriterBrandCheckException('abort'));
2054+ }
2055+ if (this._ownerWritableStream === undefined) {
2056+ return promiseRejectedWith(defaultWriterLockException('abort'));
2057+ }
2058+ return WritableStreamDefaultWriterAbort(this, reason);
2059+ }
2060+ /**
2061+ * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.
2062+ */
2063+ close() {
2064+ if (!IsWritableStreamDefaultWriter(this)) {
2065+ return promiseRejectedWith(defaultWriterBrandCheckException('close'));
2066+ }
2067+ const stream = this._ownerWritableStream;
2068+ if (stream === undefined) {
2069+ return promiseRejectedWith(defaultWriterLockException('close'));
2070+ }
2071+ if (WritableStreamCloseQueuedOrInFlight(stream)) {
2072+ return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));
2073+ }
2074+ return WritableStreamDefaultWriterClose(this);
2075+ }
2076+ /**
2077+ * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.
2078+ * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from
2079+ * now on; otherwise, the writer will appear closed.
2080+ *
2081+ * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the
2082+ * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).
2083+ * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents
2084+ * other producers from writing in an interleaved manner.
2085+ */
2086+ releaseLock() {
2087+ if (!IsWritableStreamDefaultWriter(this)) {
2088+ throw defaultWriterBrandCheckException('releaseLock');
2089+ }
2090+ const stream = this._ownerWritableStream;
2091+ if (stream === undefined) {
2092+ return;
2093+ }
2094+ WritableStreamDefaultWriterRelease(this);
2095+ }
2096+ write(chunk = undefined) {
2097+ if (!IsWritableStreamDefaultWriter(this)) {
2098+ return promiseRejectedWith(defaultWriterBrandCheckException('write'));
2099+ }
2100+ if (this._ownerWritableStream === undefined) {
2101+ return promiseRejectedWith(defaultWriterLockException('write to'));
2102+ }
2103+ return WritableStreamDefaultWriterWrite(this, chunk);
2104+ }
2105+ }
2106+ Object.defineProperties(WritableStreamDefaultWriter.prototype, {
2107+ abort: { enumerable: true },
2108+ close: { enumerable: true },
2109+ releaseLock: { enumerable: true },
2110+ write: { enumerable: true },
2111+ closed: { enumerable: true },
2112+ desiredSize: { enumerable: true },
2113+ ready: { enumerable: true }
2114+ });
2115+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
2116+ Object.defineProperty(WritableStreamDefaultWriter.prototype, SymbolPolyfill.toStringTag, {
2117+ value: 'WritableStreamDefaultWriter',
2118+ configurable: true
2119+ });
2120+ }
2121+ // Abstract operations for the WritableStreamDefaultWriter.
2122+ function IsWritableStreamDefaultWriter(x) {
2123+ if (!typeIsObject(x)) {
2124+ return false;
2125+ }
2126+ if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {
2127+ return false;
2128+ }
2129+ return x instanceof WritableStreamDefaultWriter;
2130+ }
2131+ // A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.
2132+ function WritableStreamDefaultWriterAbort(writer, reason) {
2133+ const stream = writer._ownerWritableStream;
2134+ return WritableStreamAbort(stream, reason);
2135+ }
2136+ function WritableStreamDefaultWriterClose(writer) {
2137+ const stream = writer._ownerWritableStream;
2138+ return WritableStreamClose(stream);
2139+ }
2140+ function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) {
2141+ const stream = writer._ownerWritableStream;
2142+ const state = stream._state;
2143+ if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {
2144+ return promiseResolvedWith(undefined);
2145+ }
2146+ if (state === 'errored') {
2147+ return promiseRejectedWith(stream._storedError);
2148+ }
2149+ return WritableStreamDefaultWriterClose(writer);
2150+ }
2151+ function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) {
2152+ if (writer._closedPromiseState === 'pending') {
2153+ defaultWriterClosedPromiseReject(writer, error);
2154+ }
2155+ else {
2156+ defaultWriterClosedPromiseResetToRejected(writer, error);
2157+ }
2158+ }
2159+ function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) {
2160+ if (writer._readyPromiseState === 'pending') {
2161+ defaultWriterReadyPromiseReject(writer, error);
2162+ }
2163+ else {
2164+ defaultWriterReadyPromiseResetToRejected(writer, error);
2165+ }
2166+ }
2167+ function WritableStreamDefaultWriterGetDesiredSize(writer) {
2168+ const stream = writer._ownerWritableStream;
2169+ const state = stream._state;
2170+ if (state === 'errored' || state === 'erroring') {
2171+ return null;
2172+ }
2173+ if (state === 'closed') {
2174+ return 0;
2175+ }
2176+ return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);
2177+ }
2178+ function WritableStreamDefaultWriterRelease(writer) {
2179+ const stream = writer._ownerWritableStream;
2180+ const releasedError = new TypeError(`Writer was released and can no longer be used to monitor the stream's closedness`);
2181+ WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);
2182+ // The state transitions to "errored" before the sink abort() method runs, but the writer.closed promise is not
2183+ // rejected until afterwards. This means that simply testing state will not work.
2184+ WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);
2185+ stream._writer = undefined;
2186+ writer._ownerWritableStream = undefined;
2187+ }
2188+ function WritableStreamDefaultWriterWrite(writer, chunk) {
2189+ const stream = writer._ownerWritableStream;
2190+ const controller = stream._writableStreamController;
2191+ const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);
2192+ if (stream !== writer._ownerWritableStream) {
2193+ return promiseRejectedWith(defaultWriterLockException('write to'));
2194+ }
2195+ const state = stream._state;
2196+ if (state === 'errored') {
2197+ return promiseRejectedWith(stream._storedError);
2198+ }
2199+ if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {
2200+ return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));
2201+ }
2202+ if (state === 'erroring') {
2203+ return promiseRejectedWith(stream._storedError);
2204+ }
2205+ const promise = WritableStreamAddWriteRequest(stream);
2206+ WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);
2207+ return promise;
2208+ }
2209+ const closeSentinel = {};
2210+ /**
2211+ * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.
2212+ *
2213+ * @public
2214+ */
2215+ class WritableStreamDefaultController {
2216+ constructor() {
2217+ throw new TypeError('Illegal constructor');
2218+ }
2219+ /**
2220+ * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.
2221+ *
2222+ * @deprecated
2223+ * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.
2224+ * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.
2225+ */
2226+ get abortReason() {
2227+ if (!IsWritableStreamDefaultController(this)) {
2228+ throw defaultControllerBrandCheckException$2('abortReason');
2229+ }
2230+ return this._abortReason;
2231+ }
2232+ /**
2233+ * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.
2234+ */
2235+ get signal() {
2236+ if (!IsWritableStreamDefaultController(this)) {
2237+ throw defaultControllerBrandCheckException$2('signal');
2238+ }
2239+ if (this._abortController === undefined) {
2240+ // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.
2241+ // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,
2242+ // so instead we only implement support for `signal` if we find a global `AbortController` constructor.
2243+ throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');
2244+ }
2245+ return this._abortController.signal;
2246+ }
2247+ /**
2248+ * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.
2249+ *
2250+ * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying
2251+ * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the
2252+ * normal lifecycle of interactions with the underlying sink.
2253+ */
2254+ error(e = undefined) {
2255+ if (!IsWritableStreamDefaultController(this)) {
2256+ throw defaultControllerBrandCheckException$2('error');
2257+ }
2258+ const state = this._controlledWritableStream._state;
2259+ if (state !== 'writable') {
2260+ // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so
2261+ // just treat it as a no-op.
2262+ return;
2263+ }
2264+ WritableStreamDefaultControllerError(this, e);
2265+ }
2266+ /** @internal */
2267+ [AbortSteps](reason) {
2268+ const result = this._abortAlgorithm(reason);
2269+ WritableStreamDefaultControllerClearAlgorithms(this);
2270+ return result;
2271+ }
2272+ /** @internal */
2273+ [ErrorSteps]() {
2274+ ResetQueue(this);
2275+ }
2276+ }
2277+ Object.defineProperties(WritableStreamDefaultController.prototype, {
2278+ abortReason: { enumerable: true },
2279+ signal: { enumerable: true },
2280+ error: { enumerable: true }
2281+ });
2282+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
2283+ Object.defineProperty(WritableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {
2284+ value: 'WritableStreamDefaultController',
2285+ configurable: true
2286+ });
2287+ }
2288+ // Abstract operations implementing interface required by the WritableStream.
2289+ function IsWritableStreamDefaultController(x) {
2290+ if (!typeIsObject(x)) {
2291+ return false;
2292+ }
2293+ if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {
2294+ return false;
2295+ }
2296+ return x instanceof WritableStreamDefaultController;
2297+ }
2298+ function SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {
2299+ controller._controlledWritableStream = stream;
2300+ stream._writableStreamController = controller;
2301+ // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.
2302+ controller._queue = undefined;
2303+ controller._queueTotalSize = undefined;
2304+ ResetQueue(controller);
2305+ controller._abortReason = undefined;
2306+ controller._abortController = createAbortController();
2307+ controller._started = false;
2308+ controller._strategySizeAlgorithm = sizeAlgorithm;
2309+ controller._strategyHWM = highWaterMark;
2310+ controller._writeAlgorithm = writeAlgorithm;
2311+ controller._closeAlgorithm = closeAlgorithm;
2312+ controller._abortAlgorithm = abortAlgorithm;
2313+ const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
2314+ WritableStreamUpdateBackpressure(stream, backpressure);
2315+ const startResult = startAlgorithm();
2316+ const startPromise = promiseResolvedWith(startResult);
2317+ uponPromise(startPromise, () => {
2318+ controller._started = true;
2319+ WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
2320+ }, r => {
2321+ controller._started = true;
2322+ WritableStreamDealWithRejection(stream, r);
2323+ });
2324+ }
2325+ function SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream, underlyingSink, highWaterMark, sizeAlgorithm) {
2326+ const controller = Object.create(WritableStreamDefaultController.prototype);
2327+ let startAlgorithm = () => undefined;
2328+ let writeAlgorithm = () => promiseResolvedWith(undefined);
2329+ let closeAlgorithm = () => promiseResolvedWith(undefined);
2330+ let abortAlgorithm = () => promiseResolvedWith(undefined);
2331+ if (underlyingSink.start !== undefined) {
2332+ startAlgorithm = () => underlyingSink.start(controller);
2333+ }
2334+ if (underlyingSink.write !== undefined) {
2335+ writeAlgorithm = chunk => underlyingSink.write(chunk, controller);
2336+ }
2337+ if (underlyingSink.close !== undefined) {
2338+ closeAlgorithm = () => underlyingSink.close();
2339+ }
2340+ if (underlyingSink.abort !== undefined) {
2341+ abortAlgorithm = reason => underlyingSink.abort(reason);
2342+ }
2343+ SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);
2344+ }
2345+ // ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.
2346+ function WritableStreamDefaultControllerClearAlgorithms(controller) {
2347+ controller._writeAlgorithm = undefined;
2348+ controller._closeAlgorithm = undefined;
2349+ controller._abortAlgorithm = undefined;
2350+ controller._strategySizeAlgorithm = undefined;
2351+ }
2352+ function WritableStreamDefaultControllerClose(controller) {
2353+ EnqueueValueWithSize(controller, closeSentinel, 0);
2354+ WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
2355+ }
2356+ function WritableStreamDefaultControllerGetChunkSize(controller, chunk) {
2357+ try {
2358+ return controller._strategySizeAlgorithm(chunk);
2359+ }
2360+ catch (chunkSizeE) {
2361+ WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);
2362+ return 1;
2363+ }
2364+ }
2365+ function WritableStreamDefaultControllerGetDesiredSize(controller) {
2366+ return controller._strategyHWM - controller._queueTotalSize;
2367+ }
2368+ function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) {
2369+ try {
2370+ EnqueueValueWithSize(controller, chunk, chunkSize);
2371+ }
2372+ catch (enqueueE) {
2373+ WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);
2374+ return;
2375+ }
2376+ const stream = controller._controlledWritableStream;
2377+ if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {
2378+ const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
2379+ WritableStreamUpdateBackpressure(stream, backpressure);
2380+ }
2381+ WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
2382+ }
2383+ // Abstract operations for the WritableStreamDefaultController.
2384+ function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {
2385+ const stream = controller._controlledWritableStream;
2386+ if (!controller._started) {
2387+ return;
2388+ }
2389+ if (stream._inFlightWriteRequest !== undefined) {
2390+ return;
2391+ }
2392+ const state = stream._state;
2393+ if (state === 'erroring') {
2394+ WritableStreamFinishErroring(stream);
2395+ return;
2396+ }
2397+ if (controller._queue.length === 0) {
2398+ return;
2399+ }
2400+ const value = PeekQueueValue(controller);
2401+ if (value === closeSentinel) {
2402+ WritableStreamDefaultControllerProcessClose(controller);
2403+ }
2404+ else {
2405+ WritableStreamDefaultControllerProcessWrite(controller, value);
2406+ }
2407+ }
2408+ function WritableStreamDefaultControllerErrorIfNeeded(controller, error) {
2409+ if (controller._controlledWritableStream._state === 'writable') {
2410+ WritableStreamDefaultControllerError(controller, error);
2411+ }
2412+ }
2413+ function WritableStreamDefaultControllerProcessClose(controller) {
2414+ const stream = controller._controlledWritableStream;
2415+ WritableStreamMarkCloseRequestInFlight(stream);
2416+ DequeueValue(controller);
2417+ const sinkClosePromise = controller._closeAlgorithm();
2418+ WritableStreamDefaultControllerClearAlgorithms(controller);
2419+ uponPromise(sinkClosePromise, () => {
2420+ WritableStreamFinishInFlightClose(stream);
2421+ }, reason => {
2422+ WritableStreamFinishInFlightCloseWithError(stream, reason);
2423+ });
2424+ }
2425+ function WritableStreamDefaultControllerProcessWrite(controller, chunk) {
2426+ const stream = controller._controlledWritableStream;
2427+ WritableStreamMarkFirstWriteRequestInFlight(stream);
2428+ const sinkWritePromise = controller._writeAlgorithm(chunk);
2429+ uponPromise(sinkWritePromise, () => {
2430+ WritableStreamFinishInFlightWrite(stream);
2431+ const state = stream._state;
2432+ DequeueValue(controller);
2433+ if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {
2434+ const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
2435+ WritableStreamUpdateBackpressure(stream, backpressure);
2436+ }
2437+ WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
2438+ }, reason => {
2439+ if (stream._state === 'writable') {
2440+ WritableStreamDefaultControllerClearAlgorithms(controller);
2441+ }
2442+ WritableStreamFinishInFlightWriteWithError(stream, reason);
2443+ });
2444+ }
2445+ function WritableStreamDefaultControllerGetBackpressure(controller) {
2446+ const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);
2447+ return desiredSize <= 0;
2448+ }
2449+ // A client of WritableStreamDefaultController may use these functions directly to bypass state check.
2450+ function WritableStreamDefaultControllerError(controller, error) {
2451+ const stream = controller._controlledWritableStream;
2452+ WritableStreamDefaultControllerClearAlgorithms(controller);
2453+ WritableStreamStartErroring(stream, error);
2454+ }
2455+ // Helper functions for the WritableStream.
2456+ function streamBrandCheckException$2(name) {
2457+ return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);
2458+ }
2459+ // Helper functions for the WritableStreamDefaultController.
2460+ function defaultControllerBrandCheckException$2(name) {
2461+ return new TypeError(`WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);
2462+ }
2463+ // Helper functions for the WritableStreamDefaultWriter.
2464+ function defaultWriterBrandCheckException(name) {
2465+ return new TypeError(`WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);
2466+ }
2467+ function defaultWriterLockException(name) {
2468+ return new TypeError('Cannot ' + name + ' a stream using a released writer');
2469+ }
2470+ function defaultWriterClosedPromiseInitialize(writer) {
2471+ writer._closedPromise = newPromise((resolve, reject) => {
2472+ writer._closedPromise_resolve = resolve;
2473+ writer._closedPromise_reject = reject;
2474+ writer._closedPromiseState = 'pending';
2475+ });
2476+ }
2477+ function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) {
2478+ defaultWriterClosedPromiseInitialize(writer);
2479+ defaultWriterClosedPromiseReject(writer, reason);
2480+ }
2481+ function defaultWriterClosedPromiseInitializeAsResolved(writer) {
2482+ defaultWriterClosedPromiseInitialize(writer);
2483+ defaultWriterClosedPromiseResolve(writer);
2484+ }
2485+ function defaultWriterClosedPromiseReject(writer, reason) {
2486+ if (writer._closedPromise_reject === undefined) {
2487+ return;
2488+ }
2489+ setPromiseIsHandledToTrue(writer._closedPromise);
2490+ writer._closedPromise_reject(reason);
2491+ writer._closedPromise_resolve = undefined;
2492+ writer._closedPromise_reject = undefined;
2493+ writer._closedPromiseState = 'rejected';
2494+ }
2495+ function defaultWriterClosedPromiseResetToRejected(writer, reason) {
2496+ defaultWriterClosedPromiseInitializeAsRejected(writer, reason);
2497+ }
2498+ function defaultWriterClosedPromiseResolve(writer) {
2499+ if (writer._closedPromise_resolve === undefined) {
2500+ return;
2501+ }
2502+ writer._closedPromise_resolve(undefined);
2503+ writer._closedPromise_resolve = undefined;
2504+ writer._closedPromise_reject = undefined;
2505+ writer._closedPromiseState = 'resolved';
2506+ }
2507+ function defaultWriterReadyPromiseInitialize(writer) {
2508+ writer._readyPromise = newPromise((resolve, reject) => {
2509+ writer._readyPromise_resolve = resolve;
2510+ writer._readyPromise_reject = reject;
2511+ });
2512+ writer._readyPromiseState = 'pending';
2513+ }
2514+ function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) {
2515+ defaultWriterReadyPromiseInitialize(writer);
2516+ defaultWriterReadyPromiseReject(writer, reason);
2517+ }
2518+ function defaultWriterReadyPromiseInitializeAsResolved(writer) {
2519+ defaultWriterReadyPromiseInitialize(writer);
2520+ defaultWriterReadyPromiseResolve(writer);
2521+ }
2522+ function defaultWriterReadyPromiseReject(writer, reason) {
2523+ if (writer._readyPromise_reject === undefined) {
2524+ return;
2525+ }
2526+ setPromiseIsHandledToTrue(writer._readyPromise);
2527+ writer._readyPromise_reject(reason);
2528+ writer._readyPromise_resolve = undefined;
2529+ writer._readyPromise_reject = undefined;
2530+ writer._readyPromiseState = 'rejected';
2531+ }
2532+ function defaultWriterReadyPromiseReset(writer) {
2533+ defaultWriterReadyPromiseInitialize(writer);
2534+ }
2535+ function defaultWriterReadyPromiseResetToRejected(writer, reason) {
2536+ defaultWriterReadyPromiseInitializeAsRejected(writer, reason);
2537+ }
2538+ function defaultWriterReadyPromiseResolve(writer) {
2539+ if (writer._readyPromise_resolve === undefined) {
2540+ return;
2541+ }
2542+ writer._readyPromise_resolve(undefined);
2543+ writer._readyPromise_resolve = undefined;
2544+ writer._readyPromise_reject = undefined;
2545+ writer._readyPromiseState = 'fulfilled';
2546+ }
2547+
2548+ /// <reference lib="dom" />
2549+ const NativeDOMException = typeof DOMException !== 'undefined' ? DOMException : undefined;
2550+
2551+ /// <reference types="node" />
2552+ function isDOMExceptionConstructor(ctor) {
2553+ if (!(typeof ctor === 'function' || typeof ctor === 'object')) {
2554+ return false;
2555+ }
2556+ try {
2557+ new ctor();
2558+ return true;
2559+ }
2560+ catch (_a) {
2561+ return false;
2562+ }
2563+ }
2564+ function createDOMExceptionPolyfill() {
2565+ // eslint-disable-next-line no-shadow
2566+ const ctor = function DOMException(message, name) {
2567+ this.message = message || '';
2568+ this.name = name || 'Error';
2569+ if (Error.captureStackTrace) {
2570+ Error.captureStackTrace(this, this.constructor);
2571+ }
2572+ };
2573+ ctor.prototype = Object.create(Error.prototype);
2574+ Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });
2575+ return ctor;
2576+ }
2577+ // eslint-disable-next-line no-redeclare
2578+ const DOMException$1 = isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();
2579+
2580+ function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventCancel, signal) {
2581+ const reader = AcquireReadableStreamDefaultReader(source);
2582+ const writer = AcquireWritableStreamDefaultWriter(dest);
2583+ source._disturbed = true;
2584+ let shuttingDown = false;
2585+ // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.
2586+ let currentWrite = promiseResolvedWith(undefined);
2587+ return newPromise((resolve, reject) => {
2588+ let abortAlgorithm;
2589+ if (signal !== undefined) {
2590+ abortAlgorithm = () => {
2591+ const error = new DOMException$1('Aborted', 'AbortError');
2592+ const actions = [];
2593+ if (!preventAbort) {
2594+ actions.push(() => {
2595+ if (dest._state === 'writable') {
2596+ return WritableStreamAbort(dest, error);
2597+ }
2598+ return promiseResolvedWith(undefined);
2599+ });
2600+ }
2601+ if (!preventCancel) {
2602+ actions.push(() => {
2603+ if (source._state === 'readable') {
2604+ return ReadableStreamCancel(source, error);
2605+ }
2606+ return promiseResolvedWith(undefined);
2607+ });
2608+ }
2609+ shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);
2610+ };
2611+ if (signal.aborted) {
2612+ abortAlgorithm();
2613+ return;
2614+ }
2615+ signal.addEventListener('abort', abortAlgorithm);
2616+ }
2617+ // Using reader and writer, read all chunks from this and write them to dest
2618+ // - Backpressure must be enforced
2619+ // - Shutdown must stop all activity
2620+ function pipeLoop() {
2621+ return newPromise((resolveLoop, rejectLoop) => {
2622+ function next(done) {
2623+ if (done) {
2624+ resolveLoop();
2625+ }
2626+ else {
2627+ // Use `PerformPromiseThen` instead of `uponPromise` to avoid
2628+ // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers
2629+ PerformPromiseThen(pipeStep(), next, rejectLoop);
2630+ }
2631+ }
2632+ next(false);
2633+ });
2634+ }
2635+ function pipeStep() {
2636+ if (shuttingDown) {
2637+ return promiseResolvedWith(true);
2638+ }
2639+ return PerformPromiseThen(writer._readyPromise, () => {
2640+ return newPromise((resolveRead, rejectRead) => {
2641+ ReadableStreamDefaultReaderRead(reader, {
2642+ _chunkSteps: chunk => {
2643+ currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);
2644+ resolveRead(false);
2645+ },
2646+ _closeSteps: () => resolveRead(true),
2647+ _errorSteps: rejectRead
2648+ });
2649+ });
2650+ });
2651+ }
2652+ // Errors must be propagated forward
2653+ isOrBecomesErrored(source, reader._closedPromise, storedError => {
2654+ if (!preventAbort) {
2655+ shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);
2656+ }
2657+ else {
2658+ shutdown(true, storedError);
2659+ }
2660+ });
2661+ // Errors must be propagated backward
2662+ isOrBecomesErrored(dest, writer._closedPromise, storedError => {
2663+ if (!preventCancel) {
2664+ shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);
2665+ }
2666+ else {
2667+ shutdown(true, storedError);
2668+ }
2669+ });
2670+ // Closing must be propagated forward
2671+ isOrBecomesClosed(source, reader._closedPromise, () => {
2672+ if (!preventClose) {
2673+ shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));
2674+ }
2675+ else {
2676+ shutdown();
2677+ }
2678+ });
2679+ // Closing must be propagated backward
2680+ if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {
2681+ const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');
2682+ if (!preventCancel) {
2683+ shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);
2684+ }
2685+ else {
2686+ shutdown(true, destClosed);
2687+ }
2688+ }
2689+ setPromiseIsHandledToTrue(pipeLoop());
2690+ function waitForWritesToFinish() {
2691+ // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait
2692+ // for that too.
2693+ const oldCurrentWrite = currentWrite;
2694+ return PerformPromiseThen(currentWrite, () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined);
2695+ }
2696+ function isOrBecomesErrored(stream, promise, action) {
2697+ if (stream._state === 'errored') {
2698+ action(stream._storedError);
2699+ }
2700+ else {
2701+ uponRejection(promise, action);
2702+ }
2703+ }
2704+ function isOrBecomesClosed(stream, promise, action) {
2705+ if (stream._state === 'closed') {
2706+ action();
2707+ }
2708+ else {
2709+ uponFulfillment(promise, action);
2710+ }
2711+ }
2712+ function shutdownWithAction(action, originalIsError, originalError) {
2713+ if (shuttingDown) {
2714+ return;
2715+ }
2716+ shuttingDown = true;
2717+ if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {
2718+ uponFulfillment(waitForWritesToFinish(), doTheRest);
2719+ }
2720+ else {
2721+ doTheRest();
2722+ }
2723+ function doTheRest() {
2724+ uponPromise(action(), () => finalize(originalIsError, originalError), newError => finalize(true, newError));
2725+ }
2726+ }
2727+ function shutdown(isError, error) {
2728+ if (shuttingDown) {
2729+ return;
2730+ }
2731+ shuttingDown = true;
2732+ if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {
2733+ uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));
2734+ }
2735+ else {
2736+ finalize(isError, error);
2737+ }
2738+ }
2739+ function finalize(isError, error) {
2740+ WritableStreamDefaultWriterRelease(writer);
2741+ ReadableStreamReaderGenericRelease(reader);
2742+ if (signal !== undefined) {
2743+ signal.removeEventListener('abort', abortAlgorithm);
2744+ }
2745+ if (isError) {
2746+ reject(error);
2747+ }
2748+ else {
2749+ resolve(undefined);
2750+ }
2751+ }
2752+ });
2753+ }
2754+
2755+ /**
2756+ * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.
2757+ *
2758+ * @public
2759+ */
2760+ class ReadableStreamDefaultController {
2761+ constructor() {
2762+ throw new TypeError('Illegal constructor');
2763+ }
2764+ /**
2765+ * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is
2766+ * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.
2767+ */
2768+ get desiredSize() {
2769+ if (!IsReadableStreamDefaultController(this)) {
2770+ throw defaultControllerBrandCheckException$1('desiredSize');
2771+ }
2772+ return ReadableStreamDefaultControllerGetDesiredSize(this);
2773+ }
2774+ /**
2775+ * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from
2776+ * the stream, but once those are read, the stream will become closed.
2777+ */
2778+ close() {
2779+ if (!IsReadableStreamDefaultController(this)) {
2780+ throw defaultControllerBrandCheckException$1('close');
2781+ }
2782+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {
2783+ throw new TypeError('The stream is not in a state that permits close');
2784+ }
2785+ ReadableStreamDefaultControllerClose(this);
2786+ }
2787+ enqueue(chunk = undefined) {
2788+ if (!IsReadableStreamDefaultController(this)) {
2789+ throw defaultControllerBrandCheckException$1('enqueue');
2790+ }
2791+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {
2792+ throw new TypeError('The stream is not in a state that permits enqueue');
2793+ }
2794+ return ReadableStreamDefaultControllerEnqueue(this, chunk);
2795+ }
2796+ /**
2797+ * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.
2798+ */
2799+ error(e = undefined) {
2800+ if (!IsReadableStreamDefaultController(this)) {
2801+ throw defaultControllerBrandCheckException$1('error');
2802+ }
2803+ ReadableStreamDefaultControllerError(this, e);
2804+ }
2805+ /** @internal */
2806+ [CancelSteps](reason) {
2807+ ResetQueue(this);
2808+ const result = this._cancelAlgorithm(reason);
2809+ ReadableStreamDefaultControllerClearAlgorithms(this);
2810+ return result;
2811+ }
2812+ /** @internal */
2813+ [PullSteps](readRequest) {
2814+ const stream = this._controlledReadableStream;
2815+ if (this._queue.length > 0) {
2816+ const chunk = DequeueValue(this);
2817+ if (this._closeRequested && this._queue.length === 0) {
2818+ ReadableStreamDefaultControllerClearAlgorithms(this);
2819+ ReadableStreamClose(stream);
2820+ }
2821+ else {
2822+ ReadableStreamDefaultControllerCallPullIfNeeded(this);
2823+ }
2824+ readRequest._chunkSteps(chunk);
2825+ }
2826+ else {
2827+ ReadableStreamAddReadRequest(stream, readRequest);
2828+ ReadableStreamDefaultControllerCallPullIfNeeded(this);
2829+ }
2830+ }
2831+ }
2832+ Object.defineProperties(ReadableStreamDefaultController.prototype, {
2833+ close: { enumerable: true },
2834+ enqueue: { enumerable: true },
2835+ error: { enumerable: true },
2836+ desiredSize: { enumerable: true }
2837+ });
2838+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
2839+ Object.defineProperty(ReadableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {
2840+ value: 'ReadableStreamDefaultController',
2841+ configurable: true
2842+ });
2843+ }
2844+ // Abstract operations for the ReadableStreamDefaultController.
2845+ function IsReadableStreamDefaultController(x) {
2846+ if (!typeIsObject(x)) {
2847+ return false;
2848+ }
2849+ if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {
2850+ return false;
2851+ }
2852+ return x instanceof ReadableStreamDefaultController;
2853+ }
2854+ function ReadableStreamDefaultControllerCallPullIfNeeded(controller) {
2855+ const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);
2856+ if (!shouldPull) {
2857+ return;
2858+ }
2859+ if (controller._pulling) {
2860+ controller._pullAgain = true;
2861+ return;
2862+ }
2863+ controller._pulling = true;
2864+ const pullPromise = controller._pullAlgorithm();
2865+ uponPromise(pullPromise, () => {
2866+ controller._pulling = false;
2867+ if (controller._pullAgain) {
2868+ controller._pullAgain = false;
2869+ ReadableStreamDefaultControllerCallPullIfNeeded(controller);
2870+ }
2871+ }, e => {
2872+ ReadableStreamDefaultControllerError(controller, e);
2873+ });
2874+ }
2875+ function ReadableStreamDefaultControllerShouldCallPull(controller) {
2876+ const stream = controller._controlledReadableStream;
2877+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {
2878+ return false;
2879+ }
2880+ if (!controller._started) {
2881+ return false;
2882+ }
2883+ if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {
2884+ return true;
2885+ }
2886+ const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);
2887+ if (desiredSize > 0) {
2888+ return true;
2889+ }
2890+ return false;
2891+ }
2892+ function ReadableStreamDefaultControllerClearAlgorithms(controller) {
2893+ controller._pullAlgorithm = undefined;
2894+ controller._cancelAlgorithm = undefined;
2895+ controller._strategySizeAlgorithm = undefined;
2896+ }
2897+ // A client of ReadableStreamDefaultController may use these functions directly to bypass state check.
2898+ function ReadableStreamDefaultControllerClose(controller) {
2899+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {
2900+ return;
2901+ }
2902+ const stream = controller._controlledReadableStream;
2903+ controller._closeRequested = true;
2904+ if (controller._queue.length === 0) {
2905+ ReadableStreamDefaultControllerClearAlgorithms(controller);
2906+ ReadableStreamClose(stream);
2907+ }
2908+ }
2909+ function ReadableStreamDefaultControllerEnqueue(controller, chunk) {
2910+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {
2911+ return;
2912+ }
2913+ const stream = controller._controlledReadableStream;
2914+ if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {
2915+ ReadableStreamFulfillReadRequest(stream, chunk, false);
2916+ }
2917+ else {
2918+ let chunkSize;
2919+ try {
2920+ chunkSize = controller._strategySizeAlgorithm(chunk);
2921+ }
2922+ catch (chunkSizeE) {
2923+ ReadableStreamDefaultControllerError(controller, chunkSizeE);
2924+ throw chunkSizeE;
2925+ }
2926+ try {
2927+ EnqueueValueWithSize(controller, chunk, chunkSize);
2928+ }
2929+ catch (enqueueE) {
2930+ ReadableStreamDefaultControllerError(controller, enqueueE);
2931+ throw enqueueE;
2932+ }
2933+ }
2934+ ReadableStreamDefaultControllerCallPullIfNeeded(controller);
2935+ }
2936+ function ReadableStreamDefaultControllerError(controller, e) {
2937+ const stream = controller._controlledReadableStream;
2938+ if (stream._state !== 'readable') {
2939+ return;
2940+ }
2941+ ResetQueue(controller);
2942+ ReadableStreamDefaultControllerClearAlgorithms(controller);
2943+ ReadableStreamError(stream, e);
2944+ }
2945+ function ReadableStreamDefaultControllerGetDesiredSize(controller) {
2946+ const state = controller._controlledReadableStream._state;
2947+ if (state === 'errored') {
2948+ return null;
2949+ }
2950+ if (state === 'closed') {
2951+ return 0;
2952+ }
2953+ return controller._strategyHWM - controller._queueTotalSize;
2954+ }
2955+ // This is used in the implementation of TransformStream.
2956+ function ReadableStreamDefaultControllerHasBackpressure(controller) {
2957+ if (ReadableStreamDefaultControllerShouldCallPull(controller)) {
2958+ return false;
2959+ }
2960+ return true;
2961+ }
2962+ function ReadableStreamDefaultControllerCanCloseOrEnqueue(controller) {
2963+ const state = controller._controlledReadableStream._state;
2964+ if (!controller._closeRequested && state === 'readable') {
2965+ return true;
2966+ }
2967+ return false;
2968+ }
2969+ function SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {
2970+ controller._controlledReadableStream = stream;
2971+ controller._queue = undefined;
2972+ controller._queueTotalSize = undefined;
2973+ ResetQueue(controller);
2974+ controller._started = false;
2975+ controller._closeRequested = false;
2976+ controller._pullAgain = false;
2977+ controller._pulling = false;
2978+ controller._strategySizeAlgorithm = sizeAlgorithm;
2979+ controller._strategyHWM = highWaterMark;
2980+ controller._pullAlgorithm = pullAlgorithm;
2981+ controller._cancelAlgorithm = cancelAlgorithm;
2982+ stream._readableStreamController = controller;
2983+ const startResult = startAlgorithm();
2984+ uponPromise(promiseResolvedWith(startResult), () => {
2985+ controller._started = true;
2986+ ReadableStreamDefaultControllerCallPullIfNeeded(controller);
2987+ }, r => {
2988+ ReadableStreamDefaultControllerError(controller, r);
2989+ });
2990+ }
2991+ function SetUpReadableStreamDefaultControllerFromUnderlyingSource(stream, underlyingSource, highWaterMark, sizeAlgorithm) {
2992+ const controller = Object.create(ReadableStreamDefaultController.prototype);
2993+ let startAlgorithm = () => undefined;
2994+ let pullAlgorithm = () => promiseResolvedWith(undefined);
2995+ let cancelAlgorithm = () => promiseResolvedWith(undefined);
2996+ if (underlyingSource.start !== undefined) {
2997+ startAlgorithm = () => underlyingSource.start(controller);
2998+ }
2999+ if (underlyingSource.pull !== undefined) {
3000+ pullAlgorithm = () => underlyingSource.pull(controller);
3001+ }
3002+ if (underlyingSource.cancel !== undefined) {
3003+ cancelAlgorithm = reason => underlyingSource.cancel(reason);
3004+ }
3005+ SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);
3006+ }
3007+ // Helper functions for the ReadableStreamDefaultController.
3008+ function defaultControllerBrandCheckException$1(name) {
3009+ return new TypeError(`ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);
3010+ }
3011+
3012+ function ReadableStreamTee(stream, cloneForBranch2) {
3013+ if (IsReadableByteStreamController(stream._readableStreamController)) {
3014+ return ReadableByteStreamTee(stream);
3015+ }
3016+ return ReadableStreamDefaultTee(stream);
3017+ }
3018+ function ReadableStreamDefaultTee(stream, cloneForBranch2) {
3019+ const reader = AcquireReadableStreamDefaultReader(stream);
3020+ let reading = false;
3021+ let readAgain = false;
3022+ let canceled1 = false;
3023+ let canceled2 = false;
3024+ let reason1;
3025+ let reason2;
3026+ let branch1;
3027+ let branch2;
3028+ let resolveCancelPromise;
3029+ const cancelPromise = newPromise(resolve => {
3030+ resolveCancelPromise = resolve;
3031+ });
3032+ function pullAlgorithm() {
3033+ if (reading) {
3034+ readAgain = true;
3035+ return promiseResolvedWith(undefined);
3036+ }
3037+ reading = true;
3038+ const readRequest = {
3039+ _chunkSteps: chunk => {
3040+ // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using
3041+ // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let
3042+ // successful synchronously-available reads get ahead of asynchronously-available errors.
3043+ queueMicrotask(() => {
3044+ readAgain = false;
3045+ const chunk1 = chunk;
3046+ const chunk2 = chunk;
3047+ // There is no way to access the cloning code right now in the reference implementation.
3048+ // If we add one then we'll need an implementation for serializable objects.
3049+ // if (!canceled2 && cloneForBranch2) {
3050+ // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));
3051+ // }
3052+ if (!canceled1) {
3053+ ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, chunk1);
3054+ }
3055+ if (!canceled2) {
3056+ ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, chunk2);
3057+ }
3058+ reading = false;
3059+ if (readAgain) {
3060+ pullAlgorithm();
3061+ }
3062+ });
3063+ },
3064+ _closeSteps: () => {
3065+ reading = false;
3066+ if (!canceled1) {
3067+ ReadableStreamDefaultControllerClose(branch1._readableStreamController);
3068+ }
3069+ if (!canceled2) {
3070+ ReadableStreamDefaultControllerClose(branch2._readableStreamController);
3071+ }
3072+ if (!canceled1 || !canceled2) {
3073+ resolveCancelPromise(undefined);
3074+ }
3075+ },
3076+ _errorSteps: () => {
3077+ reading = false;
3078+ }
3079+ };
3080+ ReadableStreamDefaultReaderRead(reader, readRequest);
3081+ return promiseResolvedWith(undefined);
3082+ }
3083+ function cancel1Algorithm(reason) {
3084+ canceled1 = true;
3085+ reason1 = reason;
3086+ if (canceled2) {
3087+ const compositeReason = CreateArrayFromList([reason1, reason2]);
3088+ const cancelResult = ReadableStreamCancel(stream, compositeReason);
3089+ resolveCancelPromise(cancelResult);
3090+ }
3091+ return cancelPromise;
3092+ }
3093+ function cancel2Algorithm(reason) {
3094+ canceled2 = true;
3095+ reason2 = reason;
3096+ if (canceled1) {
3097+ const compositeReason = CreateArrayFromList([reason1, reason2]);
3098+ const cancelResult = ReadableStreamCancel(stream, compositeReason);
3099+ resolveCancelPromise(cancelResult);
3100+ }
3101+ return cancelPromise;
3102+ }
3103+ function startAlgorithm() {
3104+ // do nothing
3105+ }
3106+ branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);
3107+ branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);
3108+ uponRejection(reader._closedPromise, (r) => {
3109+ ReadableStreamDefaultControllerError(branch1._readableStreamController, r);
3110+ ReadableStreamDefaultControllerError(branch2._readableStreamController, r);
3111+ if (!canceled1 || !canceled2) {
3112+ resolveCancelPromise(undefined);
3113+ }
3114+ });
3115+ return [branch1, branch2];
3116+ }
3117+ function ReadableByteStreamTee(stream) {
3118+ let reader = AcquireReadableStreamDefaultReader(stream);
3119+ let reading = false;
3120+ let readAgainForBranch1 = false;
3121+ let readAgainForBranch2 = false;
3122+ let canceled1 = false;
3123+ let canceled2 = false;
3124+ let reason1;
3125+ let reason2;
3126+ let branch1;
3127+ let branch2;
3128+ let resolveCancelPromise;
3129+ const cancelPromise = newPromise(resolve => {
3130+ resolveCancelPromise = resolve;
3131+ });
3132+ function forwardReaderError(thisReader) {
3133+ uponRejection(thisReader._closedPromise, r => {
3134+ if (thisReader !== reader) {
3135+ return;
3136+ }
3137+ ReadableByteStreamControllerError(branch1._readableStreamController, r);
3138+ ReadableByteStreamControllerError(branch2._readableStreamController, r);
3139+ if (!canceled1 || !canceled2) {
3140+ resolveCancelPromise(undefined);
3141+ }
3142+ });
3143+ }
3144+ function pullWithDefaultReader() {
3145+ if (IsReadableStreamBYOBReader(reader)) {
3146+ ReadableStreamReaderGenericRelease(reader);
3147+ reader = AcquireReadableStreamDefaultReader(stream);
3148+ forwardReaderError(reader);
3149+ }
3150+ const readRequest = {
3151+ _chunkSteps: chunk => {
3152+ // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using
3153+ // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let
3154+ // successful synchronously-available reads get ahead of asynchronously-available errors.
3155+ queueMicrotask(() => {
3156+ readAgainForBranch1 = false;
3157+ readAgainForBranch2 = false;
3158+ const chunk1 = chunk;
3159+ let chunk2 = chunk;
3160+ if (!canceled1 && !canceled2) {
3161+ try {
3162+ chunk2 = CloneAsUint8Array(chunk);
3163+ }
3164+ catch (cloneE) {
3165+ ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);
3166+ ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);
3167+ resolveCancelPromise(ReadableStreamCancel(stream, cloneE));
3168+ return;
3169+ }
3170+ }
3171+ if (!canceled1) {
3172+ ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);
3173+ }
3174+ if (!canceled2) {
3175+ ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);
3176+ }
3177+ reading = false;
3178+ if (readAgainForBranch1) {
3179+ pull1Algorithm();
3180+ }
3181+ else if (readAgainForBranch2) {
3182+ pull2Algorithm();
3183+ }
3184+ });
3185+ },
3186+ _closeSteps: () => {
3187+ reading = false;
3188+ if (!canceled1) {
3189+ ReadableByteStreamControllerClose(branch1._readableStreamController);
3190+ }
3191+ if (!canceled2) {
3192+ ReadableByteStreamControllerClose(branch2._readableStreamController);
3193+ }
3194+ if (branch1._readableStreamController._pendingPullIntos.length > 0) {
3195+ ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);
3196+ }
3197+ if (branch2._readableStreamController._pendingPullIntos.length > 0) {
3198+ ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);
3199+ }
3200+ if (!canceled1 || !canceled2) {
3201+ resolveCancelPromise(undefined);
3202+ }
3203+ },
3204+ _errorSteps: () => {
3205+ reading = false;
3206+ }
3207+ };
3208+ ReadableStreamDefaultReaderRead(reader, readRequest);
3209+ }
3210+ function pullWithBYOBReader(view, forBranch2) {
3211+ if (IsReadableStreamDefaultReader(reader)) {
3212+ ReadableStreamReaderGenericRelease(reader);
3213+ reader = AcquireReadableStreamBYOBReader(stream);
3214+ forwardReaderError(reader);
3215+ }
3216+ const byobBranch = forBranch2 ? branch2 : branch1;
3217+ const otherBranch = forBranch2 ? branch1 : branch2;
3218+ const readIntoRequest = {
3219+ _chunkSteps: chunk => {
3220+ // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using
3221+ // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let
3222+ // successful synchronously-available reads get ahead of asynchronously-available errors.
3223+ queueMicrotask(() => {
3224+ readAgainForBranch1 = false;
3225+ readAgainForBranch2 = false;
3226+ const byobCanceled = forBranch2 ? canceled2 : canceled1;
3227+ const otherCanceled = forBranch2 ? canceled1 : canceled2;
3228+ if (!otherCanceled) {
3229+ let clonedChunk;
3230+ try {
3231+ clonedChunk = CloneAsUint8Array(chunk);
3232+ }
3233+ catch (cloneE) {
3234+ ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);
3235+ ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);
3236+ resolveCancelPromise(ReadableStreamCancel(stream, cloneE));
3237+ return;
3238+ }
3239+ if (!byobCanceled) {
3240+ ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);
3241+ }
3242+ ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);
3243+ }
3244+ else if (!byobCanceled) {
3245+ ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);
3246+ }
3247+ reading = false;
3248+ if (readAgainForBranch1) {
3249+ pull1Algorithm();
3250+ }
3251+ else if (readAgainForBranch2) {
3252+ pull2Algorithm();
3253+ }
3254+ });
3255+ },
3256+ _closeSteps: chunk => {
3257+ reading = false;
3258+ const byobCanceled = forBranch2 ? canceled2 : canceled1;
3259+ const otherCanceled = forBranch2 ? canceled1 : canceled2;
3260+ if (!byobCanceled) {
3261+ ReadableByteStreamControllerClose(byobBranch._readableStreamController);
3262+ }
3263+ if (!otherCanceled) {
3264+ ReadableByteStreamControllerClose(otherBranch._readableStreamController);
3265+ }
3266+ if (chunk !== undefined) {
3267+ if (!byobCanceled) {
3268+ ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);
3269+ }
3270+ if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {
3271+ ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);
3272+ }
3273+ }
3274+ if (!byobCanceled || !otherCanceled) {
3275+ resolveCancelPromise(undefined);
3276+ }
3277+ },
3278+ _errorSteps: () => {
3279+ reading = false;
3280+ }
3281+ };
3282+ ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);
3283+ }
3284+ function pull1Algorithm() {
3285+ if (reading) {
3286+ readAgainForBranch1 = true;
3287+ return promiseResolvedWith(undefined);
3288+ }
3289+ reading = true;
3290+ const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);
3291+ if (byobRequest === null) {
3292+ pullWithDefaultReader();
3293+ }
3294+ else {
3295+ pullWithBYOBReader(byobRequest._view, false);
3296+ }
3297+ return promiseResolvedWith(undefined);
3298+ }
3299+ function pull2Algorithm() {
3300+ if (reading) {
3301+ readAgainForBranch2 = true;
3302+ return promiseResolvedWith(undefined);
3303+ }
3304+ reading = true;
3305+ const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);
3306+ if (byobRequest === null) {
3307+ pullWithDefaultReader();
3308+ }
3309+ else {
3310+ pullWithBYOBReader(byobRequest._view, true);
3311+ }
3312+ return promiseResolvedWith(undefined);
3313+ }
3314+ function cancel1Algorithm(reason) {
3315+ canceled1 = true;
3316+ reason1 = reason;
3317+ if (canceled2) {
3318+ const compositeReason = CreateArrayFromList([reason1, reason2]);
3319+ const cancelResult = ReadableStreamCancel(stream, compositeReason);
3320+ resolveCancelPromise(cancelResult);
3321+ }
3322+ return cancelPromise;
3323+ }
3324+ function cancel2Algorithm(reason) {
3325+ canceled2 = true;
3326+ reason2 = reason;
3327+ if (canceled1) {
3328+ const compositeReason = CreateArrayFromList([reason1, reason2]);
3329+ const cancelResult = ReadableStreamCancel(stream, compositeReason);
3330+ resolveCancelPromise(cancelResult);
3331+ }
3332+ return cancelPromise;
3333+ }
3334+ function startAlgorithm() {
3335+ return;
3336+ }
3337+ branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);
3338+ branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);
3339+ forwardReaderError(reader);
3340+ return [branch1, branch2];
3341+ }
3342+
3343+ function convertUnderlyingDefaultOrByteSource(source, context) {
3344+ assertDictionary(source, context);
3345+ const original = source;
3346+ const autoAllocateChunkSize = original === null || original === void 0 ? void 0 : original.autoAllocateChunkSize;
3347+ const cancel = original === null || original === void 0 ? void 0 : original.cancel;
3348+ const pull = original === null || original === void 0 ? void 0 : original.pull;
3349+ const start = original === null || original === void 0 ? void 0 : original.start;
3350+ const type = original === null || original === void 0 ? void 0 : original.type;
3351+ return {
3352+ autoAllocateChunkSize: autoAllocateChunkSize === undefined ?
3353+ undefined :
3354+ convertUnsignedLongLongWithEnforceRange(autoAllocateChunkSize, `${context} has member 'autoAllocateChunkSize' that`),
3355+ cancel: cancel === undefined ?
3356+ undefined :
3357+ convertUnderlyingSourceCancelCallback(cancel, original, `${context} has member 'cancel' that`),
3358+ pull: pull === undefined ?
3359+ undefined :
3360+ convertUnderlyingSourcePullCallback(pull, original, `${context} has member 'pull' that`),
3361+ start: start === undefined ?
3362+ undefined :
3363+ convertUnderlyingSourceStartCallback(start, original, `${context} has member 'start' that`),
3364+ type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)
3365+ };
3366+ }
3367+ function convertUnderlyingSourceCancelCallback(fn, original, context) {
3368+ assertFunction(fn, context);
3369+ return (reason) => promiseCall(fn, original, [reason]);
3370+ }
3371+ function convertUnderlyingSourcePullCallback(fn, original, context) {
3372+ assertFunction(fn, context);
3373+ return (controller) => promiseCall(fn, original, [controller]);
3374+ }
3375+ function convertUnderlyingSourceStartCallback(fn, original, context) {
3376+ assertFunction(fn, context);
3377+ return (controller) => reflectCall(fn, original, [controller]);
3378+ }
3379+ function convertReadableStreamType(type, context) {
3380+ type = `${type}`;
3381+ if (type !== 'bytes') {
3382+ throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);
3383+ }
3384+ return type;
3385+ }
3386+
3387+ function convertReaderOptions(options, context) {
3388+ assertDictionary(options, context);
3389+ const mode = options === null || options === void 0 ? void 0 : options.mode;
3390+ return {
3391+ mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)
3392+ };
3393+ }
3394+ function convertReadableStreamReaderMode(mode, context) {
3395+ mode = `${mode}`;
3396+ if (mode !== 'byob') {
3397+ throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);
3398+ }
3399+ return mode;
3400+ }
3401+
3402+ function convertIteratorOptions(options, context) {
3403+ assertDictionary(options, context);
3404+ const preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;
3405+ return { preventCancel: Boolean(preventCancel) };
3406+ }
3407+
3408+ function convertPipeOptions(options, context) {
3409+ assertDictionary(options, context);
3410+ const preventAbort = options === null || options === void 0 ? void 0 : options.preventAbort;
3411+ const preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;
3412+ const preventClose = options === null || options === void 0 ? void 0 : options.preventClose;
3413+ const signal = options === null || options === void 0 ? void 0 : options.signal;
3414+ if (signal !== undefined) {
3415+ assertAbortSignal(signal, `${context} has member 'signal' that`);
3416+ }
3417+ return {
3418+ preventAbort: Boolean(preventAbort),
3419+ preventCancel: Boolean(preventCancel),
3420+ preventClose: Boolean(preventClose),
3421+ signal
3422+ };
3423+ }
3424+ function assertAbortSignal(signal, context) {
3425+ if (!isAbortSignal(signal)) {
3426+ throw new TypeError(`${context} is not an AbortSignal.`);
3427+ }
3428+ }
3429+
3430+ function convertReadableWritablePair(pair, context) {
3431+ assertDictionary(pair, context);
3432+ const readable = pair === null || pair === void 0 ? void 0 : pair.readable;
3433+ assertRequiredField(readable, 'readable', 'ReadableWritablePair');
3434+ assertReadableStream(readable, `${context} has member 'readable' that`);
3435+ const writable = pair === null || pair === void 0 ? void 0 : pair.writable;
3436+ assertRequiredField(writable, 'writable', 'ReadableWritablePair');
3437+ assertWritableStream(writable, `${context} has member 'writable' that`);
3438+ return { readable, writable };
3439+ }
3440+
3441+ /**
3442+ * A readable stream represents a source of data, from which you can read.
3443+ *
3444+ * @public
3445+ */
3446+ class ReadableStream {
3447+ constructor(rawUnderlyingSource = {}, rawStrategy = {}) {
3448+ if (rawUnderlyingSource === undefined) {
3449+ rawUnderlyingSource = null;
3450+ }
3451+ else {
3452+ assertObject(rawUnderlyingSource, 'First parameter');
3453+ }
3454+ const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');
3455+ const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');
3456+ InitializeReadableStream(this);
3457+ if (underlyingSource.type === 'bytes') {
3458+ if (strategy.size !== undefined) {
3459+ throw new RangeError('The strategy for a byte stream cannot have a size function');
3460+ }
3461+ const highWaterMark = ExtractHighWaterMark(strategy, 0);
3462+ SetUpReadableByteStreamControllerFromUnderlyingSource(this, underlyingSource, highWaterMark);
3463+ }
3464+ else {
3465+ const sizeAlgorithm = ExtractSizeAlgorithm(strategy);
3466+ const highWaterMark = ExtractHighWaterMark(strategy, 1);
3467+ SetUpReadableStreamDefaultControllerFromUnderlyingSource(this, underlyingSource, highWaterMark, sizeAlgorithm);
3468+ }
3469+ }
3470+ /**
3471+ * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.
3472+ */
3473+ get locked() {
3474+ if (!IsReadableStream(this)) {
3475+ throw streamBrandCheckException$1('locked');
3476+ }
3477+ return IsReadableStreamLocked(this);
3478+ }
3479+ /**
3480+ * Cancels the stream, signaling a loss of interest in the stream by a consumer.
3481+ *
3482+ * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}
3483+ * method, which might or might not use it.
3484+ */
3485+ cancel(reason = undefined) {
3486+ if (!IsReadableStream(this)) {
3487+ return promiseRejectedWith(streamBrandCheckException$1('cancel'));
3488+ }
3489+ if (IsReadableStreamLocked(this)) {
3490+ return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));
3491+ }
3492+ return ReadableStreamCancel(this, reason);
3493+ }
3494+ getReader(rawOptions = undefined) {
3495+ if (!IsReadableStream(this)) {
3496+ throw streamBrandCheckException$1('getReader');
3497+ }
3498+ const options = convertReaderOptions(rawOptions, 'First parameter');
3499+ if (options.mode === undefined) {
3500+ return AcquireReadableStreamDefaultReader(this);
3501+ }
3502+ return AcquireReadableStreamBYOBReader(this);
3503+ }
3504+ pipeThrough(rawTransform, rawOptions = {}) {
3505+ if (!IsReadableStream(this)) {
3506+ throw streamBrandCheckException$1('pipeThrough');
3507+ }
3508+ assertRequiredArgument(rawTransform, 1, 'pipeThrough');
3509+ const transform = convertReadableWritablePair(rawTransform, 'First parameter');
3510+ const options = convertPipeOptions(rawOptions, 'Second parameter');
3511+ if (IsReadableStreamLocked(this)) {
3512+ throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');
3513+ }
3514+ if (IsWritableStreamLocked(transform.writable)) {
3515+ throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');
3516+ }
3517+ const promise = ReadableStreamPipeTo(this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal);
3518+ setPromiseIsHandledToTrue(promise);
3519+ return transform.readable;
3520+ }
3521+ pipeTo(destination, rawOptions = {}) {
3522+ if (!IsReadableStream(this)) {
3523+ return promiseRejectedWith(streamBrandCheckException$1('pipeTo'));
3524+ }
3525+ if (destination === undefined) {
3526+ return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);
3527+ }
3528+ if (!IsWritableStream(destination)) {
3529+ return promiseRejectedWith(new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`));
3530+ }
3531+ let options;
3532+ try {
3533+ options = convertPipeOptions(rawOptions, 'Second parameter');
3534+ }
3535+ catch (e) {
3536+ return promiseRejectedWith(e);
3537+ }
3538+ if (IsReadableStreamLocked(this)) {
3539+ return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream'));
3540+ }
3541+ if (IsWritableStreamLocked(destination)) {
3542+ return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream'));
3543+ }
3544+ return ReadableStreamPipeTo(this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal);
3545+ }
3546+ /**
3547+ * Tees this readable stream, returning a two-element array containing the two resulting branches as
3548+ * new {@link ReadableStream} instances.
3549+ *
3550+ * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.
3551+ * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be
3552+ * propagated to the stream's underlying source.
3553+ *
3554+ * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,
3555+ * this could allow interference between the two branches.
3556+ */
3557+ tee() {
3558+ if (!IsReadableStream(this)) {
3559+ throw streamBrandCheckException$1('tee');
3560+ }
3561+ const branches = ReadableStreamTee(this);
3562+ return CreateArrayFromList(branches);
3563+ }
3564+ values(rawOptions = undefined) {
3565+ if (!IsReadableStream(this)) {
3566+ throw streamBrandCheckException$1('values');
3567+ }
3568+ const options = convertIteratorOptions(rawOptions, 'First parameter');
3569+ return AcquireReadableStreamAsyncIterator(this, options.preventCancel);
3570+ }
3571+ }
3572+ Object.defineProperties(ReadableStream.prototype, {
3573+ cancel: { enumerable: true },
3574+ getReader: { enumerable: true },
3575+ pipeThrough: { enumerable: true },
3576+ pipeTo: { enumerable: true },
3577+ tee: { enumerable: true },
3578+ values: { enumerable: true },
3579+ locked: { enumerable: true }
3580+ });
3581+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
3582+ Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.toStringTag, {
3583+ value: 'ReadableStream',
3584+ configurable: true
3585+ });
3586+ }
3587+ if (typeof SymbolPolyfill.asyncIterator === 'symbol') {
3588+ Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.asyncIterator, {
3589+ value: ReadableStream.prototype.values,
3590+ writable: true,
3591+ configurable: true
3592+ });
3593+ }
3594+ // Abstract operations for the ReadableStream.
3595+ // Throws if and only if startAlgorithm throws.
3596+ function CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark = 1, sizeAlgorithm = () => 1) {
3597+ const stream = Object.create(ReadableStream.prototype);
3598+ InitializeReadableStream(stream);
3599+ const controller = Object.create(ReadableStreamDefaultController.prototype);
3600+ SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);
3601+ return stream;
3602+ }
3603+ // Throws if and only if startAlgorithm throws.
3604+ function CreateReadableByteStream(startAlgorithm, pullAlgorithm, cancelAlgorithm) {
3605+ const stream = Object.create(ReadableStream.prototype);
3606+ InitializeReadableStream(stream);
3607+ const controller = Object.create(ReadableByteStreamController.prototype);
3608+ SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);
3609+ return stream;
3610+ }
3611+ function InitializeReadableStream(stream) {
3612+ stream._state = 'readable';
3613+ stream._reader = undefined;
3614+ stream._storedError = undefined;
3615+ stream._disturbed = false;
3616+ }
3617+ function IsReadableStream(x) {
3618+ if (!typeIsObject(x)) {
3619+ return false;
3620+ }
3621+ if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {
3622+ return false;
3623+ }
3624+ return x instanceof ReadableStream;
3625+ }
3626+ function IsReadableStreamLocked(stream) {
3627+ if (stream._reader === undefined) {
3628+ return false;
3629+ }
3630+ return true;
3631+ }
3632+ // ReadableStream API exposed for controllers.
3633+ function ReadableStreamCancel(stream, reason) {
3634+ stream._disturbed = true;
3635+ if (stream._state === 'closed') {
3636+ return promiseResolvedWith(undefined);
3637+ }
3638+ if (stream._state === 'errored') {
3639+ return promiseRejectedWith(stream._storedError);
3640+ }
3641+ ReadableStreamClose(stream);
3642+ const reader = stream._reader;
3643+ if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {
3644+ reader._readIntoRequests.forEach(readIntoRequest => {
3645+ readIntoRequest._closeSteps(undefined);
3646+ });
3647+ reader._readIntoRequests = new SimpleQueue();
3648+ }
3649+ const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);
3650+ return transformPromiseWith(sourceCancelPromise, noop);
3651+ }
3652+ function ReadableStreamClose(stream) {
3653+ stream._state = 'closed';
3654+ const reader = stream._reader;
3655+ if (reader === undefined) {
3656+ return;
3657+ }
3658+ defaultReaderClosedPromiseResolve(reader);
3659+ if (IsReadableStreamDefaultReader(reader)) {
3660+ reader._readRequests.forEach(readRequest => {
3661+ readRequest._closeSteps();
3662+ });
3663+ reader._readRequests = new SimpleQueue();
3664+ }
3665+ }
3666+ function ReadableStreamError(stream, e) {
3667+ stream._state = 'errored';
3668+ stream._storedError = e;
3669+ const reader = stream._reader;
3670+ if (reader === undefined) {
3671+ return;
3672+ }
3673+ defaultReaderClosedPromiseReject(reader, e);
3674+ if (IsReadableStreamDefaultReader(reader)) {
3675+ reader._readRequests.forEach(readRequest => {
3676+ readRequest._errorSteps(e);
3677+ });
3678+ reader._readRequests = new SimpleQueue();
3679+ }
3680+ else {
3681+ reader._readIntoRequests.forEach(readIntoRequest => {
3682+ readIntoRequest._errorSteps(e);
3683+ });
3684+ reader._readIntoRequests = new SimpleQueue();
3685+ }
3686+ }
3687+ // Helper functions for the ReadableStream.
3688+ function streamBrandCheckException$1(name) {
3689+ return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);
3690+ }
3691+
3692+ function convertQueuingStrategyInit(init, context) {
3693+ assertDictionary(init, context);
3694+ const highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;
3695+ assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');
3696+ return {
3697+ highWaterMark: convertUnrestrictedDouble(highWaterMark)
3698+ };
3699+ }
3700+
3701+ // The size function must not have a prototype property nor be a constructor
3702+ const byteLengthSizeFunction = (chunk) => {
3703+ return chunk.byteLength;
3704+ };
3705+ try {
3706+ Object.defineProperty(byteLengthSizeFunction, 'name', {
3707+ value: 'size',
3708+ configurable: true
3709+ });
3710+ }
3711+ catch (_a) {
3712+ // This property is non-configurable in older browsers, so ignore if this throws.
3713+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility
3714+ }
3715+ /**
3716+ * A queuing strategy that counts the number of bytes in each chunk.
3717+ *
3718+ * @public
3719+ */
3720+ class ByteLengthQueuingStrategy {
3721+ constructor(options) {
3722+ assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');
3723+ options = convertQueuingStrategyInit(options, 'First parameter');
3724+ this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;
3725+ }
3726+ /**
3727+ * Returns the high water mark provided to the constructor.
3728+ */
3729+ get highWaterMark() {
3730+ if (!IsByteLengthQueuingStrategy(this)) {
3731+ throw byteLengthBrandCheckException('highWaterMark');
3732+ }
3733+ return this._byteLengthQueuingStrategyHighWaterMark;
3734+ }
3735+ /**
3736+ * Measures the size of `chunk` by returning the value of its `byteLength` property.
3737+ */
3738+ get size() {
3739+ if (!IsByteLengthQueuingStrategy(this)) {
3740+ throw byteLengthBrandCheckException('size');
3741+ }
3742+ return byteLengthSizeFunction;
3743+ }
3744+ }
3745+ Object.defineProperties(ByteLengthQueuingStrategy.prototype, {
3746+ highWaterMark: { enumerable: true },
3747+ size: { enumerable: true }
3748+ });
3749+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
3750+ Object.defineProperty(ByteLengthQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {
3751+ value: 'ByteLengthQueuingStrategy',
3752+ configurable: true
3753+ });
3754+ }
3755+ // Helper functions for the ByteLengthQueuingStrategy.
3756+ function byteLengthBrandCheckException(name) {
3757+ return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);
3758+ }
3759+ function IsByteLengthQueuingStrategy(x) {
3760+ if (!typeIsObject(x)) {
3761+ return false;
3762+ }
3763+ if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {
3764+ return false;
3765+ }
3766+ return x instanceof ByteLengthQueuingStrategy;
3767+ }
3768+
3769+ // The size function must not have a prototype property nor be a constructor
3770+ const countSizeFunction = () => {
3771+ return 1;
3772+ };
3773+ try {
3774+ Object.defineProperty(countSizeFunction, 'name', {
3775+ value: 'size',
3776+ configurable: true
3777+ });
3778+ }
3779+ catch (_a) {
3780+ // This property is non-configurable in older browsers, so ignore if this throws.
3781+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility
3782+ }
3783+ /**
3784+ * A queuing strategy that counts the number of chunks.
3785+ *
3786+ * @public
3787+ */
3788+ class CountQueuingStrategy {
3789+ constructor(options) {
3790+ assertRequiredArgument(options, 1, 'CountQueuingStrategy');
3791+ options = convertQueuingStrategyInit(options, 'First parameter');
3792+ this._countQueuingStrategyHighWaterMark = options.highWaterMark;
3793+ }
3794+ /**
3795+ * Returns the high water mark provided to the constructor.
3796+ */
3797+ get highWaterMark() {
3798+ if (!IsCountQueuingStrategy(this)) {
3799+ throw countBrandCheckException('highWaterMark');
3800+ }
3801+ return this._countQueuingStrategyHighWaterMark;
3802+ }
3803+ /**
3804+ * Measures the size of `chunk` by always returning 1.
3805+ * This ensures that the total queue size is a count of the number of chunks in the queue.
3806+ */
3807+ get size() {
3808+ if (!IsCountQueuingStrategy(this)) {
3809+ throw countBrandCheckException('size');
3810+ }
3811+ return countSizeFunction;
3812+ }
3813+ }
3814+ Object.defineProperties(CountQueuingStrategy.prototype, {
3815+ highWaterMark: { enumerable: true },
3816+ size: { enumerable: true }
3817+ });
3818+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
3819+ Object.defineProperty(CountQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {
3820+ value: 'CountQueuingStrategy',
3821+ configurable: true
3822+ });
3823+ }
3824+ // Helper functions for the CountQueuingStrategy.
3825+ function countBrandCheckException(name) {
3826+ return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);
3827+ }
3828+ function IsCountQueuingStrategy(x) {
3829+ if (!typeIsObject(x)) {
3830+ return false;
3831+ }
3832+ if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {
3833+ return false;
3834+ }
3835+ return x instanceof CountQueuingStrategy;
3836+ }
3837+
3838+ function convertTransformer(original, context) {
3839+ assertDictionary(original, context);
3840+ const flush = original === null || original === void 0 ? void 0 : original.flush;
3841+ const readableType = original === null || original === void 0 ? void 0 : original.readableType;
3842+ const start = original === null || original === void 0 ? void 0 : original.start;
3843+ const transform = original === null || original === void 0 ? void 0 : original.transform;
3844+ const writableType = original === null || original === void 0 ? void 0 : original.writableType;
3845+ return {
3846+ flush: flush === undefined ?
3847+ undefined :
3848+ convertTransformerFlushCallback(flush, original, `${context} has member 'flush' that`),
3849+ readableType,
3850+ start: start === undefined ?
3851+ undefined :
3852+ convertTransformerStartCallback(start, original, `${context} has member 'start' that`),
3853+ transform: transform === undefined ?
3854+ undefined :
3855+ convertTransformerTransformCallback(transform, original, `${context} has member 'transform' that`),
3856+ writableType
3857+ };
3858+ }
3859+ function convertTransformerFlushCallback(fn, original, context) {
3860+ assertFunction(fn, context);
3861+ return (controller) => promiseCall(fn, original, [controller]);
3862+ }
3863+ function convertTransformerStartCallback(fn, original, context) {
3864+ assertFunction(fn, context);
3865+ return (controller) => reflectCall(fn, original, [controller]);
3866+ }
3867+ function convertTransformerTransformCallback(fn, original, context) {
3868+ assertFunction(fn, context);
3869+ return (chunk, controller) => promiseCall(fn, original, [chunk, controller]);
3870+ }
3871+
3872+ // Class TransformStream
3873+ /**
3874+ * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},
3875+ * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.
3876+ * In a manner specific to the transform stream in question, writes to the writable side result in new data being
3877+ * made available for reading from the readable side.
3878+ *
3879+ * @public
3880+ */
3881+ class TransformStream {
3882+ constructor(rawTransformer = {}, rawWritableStrategy = {}, rawReadableStrategy = {}) {
3883+ if (rawTransformer === undefined) {
3884+ rawTransformer = null;
3885+ }
3886+ const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');
3887+ const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');
3888+ const transformer = convertTransformer(rawTransformer, 'First parameter');
3889+ if (transformer.readableType !== undefined) {
3890+ throw new RangeError('Invalid readableType specified');
3891+ }
3892+ if (transformer.writableType !== undefined) {
3893+ throw new RangeError('Invalid writableType specified');
3894+ }
3895+ const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);
3896+ const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);
3897+ const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);
3898+ const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);
3899+ let startPromise_resolve;
3900+ const startPromise = newPromise(resolve => {
3901+ startPromise_resolve = resolve;
3902+ });
3903+ InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm);
3904+ SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);
3905+ if (transformer.start !== undefined) {
3906+ startPromise_resolve(transformer.start(this._transformStreamController));
3907+ }
3908+ else {
3909+ startPromise_resolve(undefined);
3910+ }
3911+ }
3912+ /**
3913+ * The readable side of the transform stream.
3914+ */
3915+ get readable() {
3916+ if (!IsTransformStream(this)) {
3917+ throw streamBrandCheckException('readable');
3918+ }
3919+ return this._readable;
3920+ }
3921+ /**
3922+ * The writable side of the transform stream.
3923+ */
3924+ get writable() {
3925+ if (!IsTransformStream(this)) {
3926+ throw streamBrandCheckException('writable');
3927+ }
3928+ return this._writable;
3929+ }
3930+ }
3931+ Object.defineProperties(TransformStream.prototype, {
3932+ readable: { enumerable: true },
3933+ writable: { enumerable: true }
3934+ });
3935+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
3936+ Object.defineProperty(TransformStream.prototype, SymbolPolyfill.toStringTag, {
3937+ value: 'TransformStream',
3938+ configurable: true
3939+ });
3940+ }
3941+ function InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) {
3942+ function startAlgorithm() {
3943+ return startPromise;
3944+ }
3945+ function writeAlgorithm(chunk) {
3946+ return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);
3947+ }
3948+ function abortAlgorithm(reason) {
3949+ return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);
3950+ }
3951+ function closeAlgorithm() {
3952+ return TransformStreamDefaultSinkCloseAlgorithm(stream);
3953+ }
3954+ stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, writableHighWaterMark, writableSizeAlgorithm);
3955+ function pullAlgorithm() {
3956+ return TransformStreamDefaultSourcePullAlgorithm(stream);
3957+ }
3958+ function cancelAlgorithm(reason) {
3959+ TransformStreamErrorWritableAndUnblockWrite(stream, reason);
3960+ return promiseResolvedWith(undefined);
3961+ }
3962+ stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark, readableSizeAlgorithm);
3963+ // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.
3964+ stream._backpressure = undefined;
3965+ stream._backpressureChangePromise = undefined;
3966+ stream._backpressureChangePromise_resolve = undefined;
3967+ TransformStreamSetBackpressure(stream, true);
3968+ stream._transformStreamController = undefined;
3969+ }
3970+ function IsTransformStream(x) {
3971+ if (!typeIsObject(x)) {
3972+ return false;
3973+ }
3974+ if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {
3975+ return false;
3976+ }
3977+ return x instanceof TransformStream;
3978+ }
3979+ // This is a no-op if both sides are already errored.
3980+ function TransformStreamError(stream, e) {
3981+ ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e);
3982+ TransformStreamErrorWritableAndUnblockWrite(stream, e);
3983+ }
3984+ function TransformStreamErrorWritableAndUnblockWrite(stream, e) {
3985+ TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);
3986+ WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);
3987+ if (stream._backpressure) {
3988+ // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()
3989+ // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time
3990+ // _backpressure is set.
3991+ TransformStreamSetBackpressure(stream, false);
3992+ }
3993+ }
3994+ function TransformStreamSetBackpressure(stream, backpressure) {
3995+ // Passes also when called during construction.
3996+ if (stream._backpressureChangePromise !== undefined) {
3997+ stream._backpressureChangePromise_resolve();
3998+ }
3999+ stream._backpressureChangePromise = newPromise(resolve => {
4000+ stream._backpressureChangePromise_resolve = resolve;
4001+ });
4002+ stream._backpressure = backpressure;
4003+ }
4004+ // Class TransformStreamDefaultController
4005+ /**
4006+ * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.
4007+ *
4008+ * @public
4009+ */
4010+ class TransformStreamDefaultController {
4011+ constructor() {
4012+ throw new TypeError('Illegal constructor');
4013+ }
4014+ /**
4015+ * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.
4016+ */
4017+ get desiredSize() {
4018+ if (!IsTransformStreamDefaultController(this)) {
4019+ throw defaultControllerBrandCheckException('desiredSize');
4020+ }
4021+ const readableController = this._controlledTransformStream._readable._readableStreamController;
4022+ return ReadableStreamDefaultControllerGetDesiredSize(readableController);
4023+ }
4024+ enqueue(chunk = undefined) {
4025+ if (!IsTransformStreamDefaultController(this)) {
4026+ throw defaultControllerBrandCheckException('enqueue');
4027+ }
4028+ TransformStreamDefaultControllerEnqueue(this, chunk);
4029+ }
4030+ /**
4031+ * Errors both the readable side and the writable side of the controlled transform stream, making all future
4032+ * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.
4033+ */
4034+ error(reason = undefined) {
4035+ if (!IsTransformStreamDefaultController(this)) {
4036+ throw defaultControllerBrandCheckException('error');
4037+ }
4038+ TransformStreamDefaultControllerError(this, reason);
4039+ }
4040+ /**
4041+ * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the
4042+ * transformer only needs to consume a portion of the chunks written to the writable side.
4043+ */
4044+ terminate() {
4045+ if (!IsTransformStreamDefaultController(this)) {
4046+ throw defaultControllerBrandCheckException('terminate');
4047+ }
4048+ TransformStreamDefaultControllerTerminate(this);
4049+ }
4050+ }
4051+ Object.defineProperties(TransformStreamDefaultController.prototype, {
4052+ enqueue: { enumerable: true },
4053+ error: { enumerable: true },
4054+ terminate: { enumerable: true },
4055+ desiredSize: { enumerable: true }
4056+ });
4057+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
4058+ Object.defineProperty(TransformStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {
4059+ value: 'TransformStreamDefaultController',
4060+ configurable: true
4061+ });
4062+ }
4063+ // Transform Stream Default Controller Abstract Operations
4064+ function IsTransformStreamDefaultController(x) {
4065+ if (!typeIsObject(x)) {
4066+ return false;
4067+ }
4068+ if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {
4069+ return false;
4070+ }
4071+ return x instanceof TransformStreamDefaultController;
4072+ }
4073+ function SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm) {
4074+ controller._controlledTransformStream = stream;
4075+ stream._transformStreamController = controller;
4076+ controller._transformAlgorithm = transformAlgorithm;
4077+ controller._flushAlgorithm = flushAlgorithm;
4078+ }
4079+ function SetUpTransformStreamDefaultControllerFromTransformer(stream, transformer) {
4080+ const controller = Object.create(TransformStreamDefaultController.prototype);
4081+ let transformAlgorithm = (chunk) => {
4082+ try {
4083+ TransformStreamDefaultControllerEnqueue(controller, chunk);
4084+ return promiseResolvedWith(undefined);
4085+ }
4086+ catch (transformResultE) {
4087+ return promiseRejectedWith(transformResultE);
4088+ }
4089+ };
4090+ let flushAlgorithm = () => promiseResolvedWith(undefined);
4091+ if (transformer.transform !== undefined) {
4092+ transformAlgorithm = chunk => transformer.transform(chunk, controller);
4093+ }
4094+ if (transformer.flush !== undefined) {
4095+ flushAlgorithm = () => transformer.flush(controller);
4096+ }
4097+ SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);
4098+ }
4099+ function TransformStreamDefaultControllerClearAlgorithms(controller) {
4100+ controller._transformAlgorithm = undefined;
4101+ controller._flushAlgorithm = undefined;
4102+ }
4103+ function TransformStreamDefaultControllerEnqueue(controller, chunk) {
4104+ const stream = controller._controlledTransformStream;
4105+ const readableController = stream._readable._readableStreamController;
4106+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {
4107+ throw new TypeError('Readable side is not in a state that permits enqueue');
4108+ }
4109+ // We throttle transform invocations based on the backpressure of the ReadableStream, but we still
4110+ // accept TransformStreamDefaultControllerEnqueue() calls.
4111+ try {
4112+ ReadableStreamDefaultControllerEnqueue(readableController, chunk);
4113+ }
4114+ catch (e) {
4115+ // This happens when readableStrategy.size() throws.
4116+ TransformStreamErrorWritableAndUnblockWrite(stream, e);
4117+ throw stream._readable._storedError;
4118+ }
4119+ const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);
4120+ if (backpressure !== stream._backpressure) {
4121+ TransformStreamSetBackpressure(stream, true);
4122+ }
4123+ }
4124+ function TransformStreamDefaultControllerError(controller, e) {
4125+ TransformStreamError(controller._controlledTransformStream, e);
4126+ }
4127+ function TransformStreamDefaultControllerPerformTransform(controller, chunk) {
4128+ const transformPromise = controller._transformAlgorithm(chunk);
4129+ return transformPromiseWith(transformPromise, undefined, r => {
4130+ TransformStreamError(controller._controlledTransformStream, r);
4131+ throw r;
4132+ });
4133+ }
4134+ function TransformStreamDefaultControllerTerminate(controller) {
4135+ const stream = controller._controlledTransformStream;
4136+ const readableController = stream._readable._readableStreamController;
4137+ ReadableStreamDefaultControllerClose(readableController);
4138+ const error = new TypeError('TransformStream terminated');
4139+ TransformStreamErrorWritableAndUnblockWrite(stream, error);
4140+ }
4141+ // TransformStreamDefaultSink Algorithms
4142+ function TransformStreamDefaultSinkWriteAlgorithm(stream, chunk) {
4143+ const controller = stream._transformStreamController;
4144+ if (stream._backpressure) {
4145+ const backpressureChangePromise = stream._backpressureChangePromise;
4146+ return transformPromiseWith(backpressureChangePromise, () => {
4147+ const writable = stream._writable;
4148+ const state = writable._state;
4149+ if (state === 'erroring') {
4150+ throw writable._storedError;
4151+ }
4152+ return TransformStreamDefaultControllerPerformTransform(controller, chunk);
4153+ });
4154+ }
4155+ return TransformStreamDefaultControllerPerformTransform(controller, chunk);
4156+ }
4157+ function TransformStreamDefaultSinkAbortAlgorithm(stream, reason) {
4158+ // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already
4159+ // errored.
4160+ TransformStreamError(stream, reason);
4161+ return promiseResolvedWith(undefined);
4162+ }
4163+ function TransformStreamDefaultSinkCloseAlgorithm(stream) {
4164+ // stream._readable cannot change after construction, so caching it across a call to user code is safe.
4165+ const readable = stream._readable;
4166+ const controller = stream._transformStreamController;
4167+ const flushPromise = controller._flushAlgorithm();
4168+ TransformStreamDefaultControllerClearAlgorithms(controller);
4169+ // Return a promise that is fulfilled with undefined on success.
4170+ return transformPromiseWith(flushPromise, () => {
4171+ if (readable._state === 'errored') {
4172+ throw readable._storedError;
4173+ }
4174+ ReadableStreamDefaultControllerClose(readable._readableStreamController);
4175+ }, r => {
4176+ TransformStreamError(stream, r);
4177+ throw readable._storedError;
4178+ });
4179+ }
4180+ // TransformStreamDefaultSource Algorithms
4181+ function TransformStreamDefaultSourcePullAlgorithm(stream) {
4182+ // Invariant. Enforced by the promises returned by start() and pull().
4183+ TransformStreamSetBackpressure(stream, false);
4184+ // Prevent the next pull() call until there is backpressure.
4185+ return stream._backpressureChangePromise;
4186+ }
4187+ // Helper functions for the TransformStreamDefaultController.
4188+ function defaultControllerBrandCheckException(name) {
4189+ return new TypeError(`TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);
4190+ }
4191+ // Helper functions for the TransformStream.
4192+ function streamBrandCheckException(name) {
4193+ return new TypeError(`TransformStream.prototype.${name} can only be used on a TransformStream`);
4194+ }
4195+
4196+ const exports$1 = {
4197+ ReadableStream,
4198+ ReadableStreamDefaultController,
4199+ ReadableByteStreamController,
4200+ ReadableStreamBYOBRequest,
4201+ ReadableStreamDefaultReader,
4202+ ReadableStreamBYOBReader,
4203+ WritableStream,
4204+ WritableStreamDefaultController,
4205+ WritableStreamDefaultWriter,
4206+ ByteLengthQueuingStrategy,
4207+ CountQueuingStrategy,
4208+ TransformStream,
4209+ TransformStreamDefaultController
4210+ };
4211+ // Add classes to global scope
4212+ if (typeof globals !== 'undefined') {
4213+ for (const prop in exports$1) {
4214+ if (Object.prototype.hasOwnProperty.call(exports$1, prop)) {
4215+ Object.defineProperty(globals, prop, {
4216+ value: exports$1[prop],
4217+ writable: true,
4218+ configurable: true
4219+ });
4220+ }
4221+ }
4222+ }
4223+
4224+ exports.ByteLengthQueuingStrategy = ByteLengthQueuingStrategy;
4225+ exports.CountQueuingStrategy = CountQueuingStrategy;
4226+ exports.ReadableByteStreamController = ReadableByteStreamController;
4227+ exports.ReadableStream = ReadableStream;
4228+ exports.ReadableStreamBYOBReader = ReadableStreamBYOBReader;
4229+ exports.ReadableStreamBYOBRequest = ReadableStreamBYOBRequest;
4230+ exports.ReadableStreamDefaultController = ReadableStreamDefaultController;
4231+ exports.ReadableStreamDefaultReader = ReadableStreamDefaultReader;
4232+ exports.TransformStream = TransformStream;
4233+ exports.TransformStreamDefaultController = TransformStreamDefaultController;
4234+ exports.WritableStream = WritableStream;
4235+ exports.WritableStreamDefaultController = WritableStreamDefaultController;
4236+ exports.WritableStreamDefaultWriter = WritableStreamDefaultWriter;
4237+
4238+ Object.defineProperty(exports, '__esModule', { value: true });
4239+
4240+})));
4241+//# sourceMappingURL=polyfill.es2018.js.map
prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es2018.js.mapnew file+1
@@ -0,0 +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":["/// <reference lib=\"es2015.symbol\" />\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","/// <reference lib=\"dom\" />\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<T>(executor: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void\n) => void): Promise<T> {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith<T>(value: T | PromiseLike<T>): Promise<T> {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith<T = never>(reason: any): Promise<T> {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => TResult1 | PromiseLike<TResult1>,\n onRejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\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<TResult1 | TResult2>;\n}\n\nexport function uponPromise<T>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => void | PromiseLike<void>,\n onRejected?: (reason: any) => void | PromiseLike<void>): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment<T>(promise: Promise<T>, onFulfilled: (value: T) => void | PromiseLike<void>): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise<unknown>, onRejected: (reason: any) => void | PromiseLike<void>): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike<TResult1>,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise<unknown>): 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<T, A extends any[], R>(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<T, A extends any[], R>(F: (this: T, ...fnArgs: A) => R | PromiseLike<R>,\n V: T,\n args: A): Promise<R> {\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<T> {\n _elements: T[];\n _next: Node<T> | 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<T> {\n private _front: Node<T>;\n private _back: Node<T>;\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<R>(reader: ReadableStreamReader<R>, stream: ReadableStream<R>) {\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<any>, reason: any): Promise<undefined> {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader<any>) {\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<any>) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader<any>, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader<any>) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader<any>, 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<any>, 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<any>) {\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","/// <reference lib=\"es2015.core\" />\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","/// <reference lib=\"es2015.core\" />\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<T extends any>(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<T extends any>(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<T> = {\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<R>(stream: ReadableStream): ReadableStreamDefaultReader<R> {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest<R>(stream: ReadableStream<R>,\n readRequest: ReadRequest<R>): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader<R>)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest<R>(stream: ReadableStream<R>, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader<R>;\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<R>(stream: ReadableStream<R>): number {\n return (stream._reader as ReadableStreamDefaultReader<R>)._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<R> {\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<R = any> {\n /** @internal */\n _ownerReadableStream!: ReadableStream<R>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue<ReadRequest<R>>;\n\n constructor(stream: ReadableStream<R>) {\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<undefined> {\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<void> {\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<ReadableStreamDefaultReadResult<R>> {\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<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\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<R = any>(x: any): x is ReadableStreamDefaultReader<R> {\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<R>(reader: ReadableStreamDefaultReader<R>,\n readRequest: ReadRequest<R>): 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<any>);\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","/// <reference lib=\"es2018.asynciterable\" />\n\n/* eslint-disable @typescript-eslint/no-empty-function */\nexport const AsyncIteratorPrototype: AsyncIterable<any> | undefined =\n Object.getPrototypeOf(Object.getPrototypeOf(async function* (): AsyncIterableIterator<any> {}).prototype);\n","/// <reference lib=\"es2018.asynciterable\" />\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<R> extends AsyncIterator<R> {\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl<R> {\n private readonly _reader: ReadableStreamDefaultReader<R>;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise<ReadableStreamDefaultReadResult<R>> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader<R>, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise<ReadableStreamDefaultReadResult<R>> {\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<ReadableStreamDefaultReadResult<any>> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise<ReadableStreamDefaultReadResult<R>> {\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<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\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<ReadableStreamDefaultReadResult<any>> {\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<R> implements ReadableStreamAsyncIterator<R> {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl<R>;\n\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance<any> = {\n next(this: ReadableStreamAsyncIteratorInstance<any>): Promise<ReadableStreamDefaultReadResult<any>> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance<any>, value: any): Promise<ReadableStreamDefaultReadResult<any>> {\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<R>(stream: ReadableStream<R>,\n preventCancel: boolean): ReadableStreamAsyncIterator<R> {\n const reader = AcquireReadableStreamDefaultReader<R>(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance<R> = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator<R = any>(x: any): x is ReadableStreamAsyncIterator<R> {\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<any>)._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","/// <reference lib=\"es2015.core\" />\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<T extends any[]>(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<T extends ArrayBufferLike>(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<T> {\n _queue: SimpleQueue<T>;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair<T> {\n value: T;\n size: number;\n}\n\nexport function DequeueValue<T>(container: QueueContainer<QueuePair<T>>): 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<T>(container: QueueContainer<QueuePair<T>>, 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<T>(container: QueueContainer<QueuePair<T>>): 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<T>(container: QueueContainer<T>) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue<T>();\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<T extends ArrayBufferView = ArrayBufferView> {\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<T extends ArrayBufferView = ArrayBufferView> =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor<T>;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor<Uint8Array>;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor<T extends ArrayBufferView = ArrayBufferView> {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor<T>;\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<ByteQueueElement>;\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<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue<PullIntoDescriptor>;\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<void> {\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<Uint8Array>): 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<T extends ArrayBufferView>(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor<T>\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<T>(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<T extends ArrayBufferView>(\n pullIntoDescriptor: PullIntoDescriptor<T>\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<T extends ArrayBufferView>(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest<T>\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor<T>).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor<T>;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor<T> = {\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<T>(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<T>(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<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\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<void> = () => undefined;\n let pullAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise<void> = () => 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<T extends ArrayBufferView> = {\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<T extends ArrayBufferView>(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest<T>): 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<T extends ArrayBufferView> {\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<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue<ReadIntoRequest<any>>;\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<undefined> {\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<void> {\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<T extends ArrayBufferView>(view: T): Promise<ReadableStreamBYOBReadResult<T>> {\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<T>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamBYOBReadResult<T>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest<T> = {\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<T extends ArrayBufferView>(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest<T>\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<T>(strategy: QueuingStrategy<T>): QueuingStrategySizeCallback<T> {\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<T>(init: QueuingStrategy<T> | null | undefined,\n context: string): QueuingStrategy<T> {\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<T>(fn: QueuingStrategySizeCallback<T>,\n context: string): QueuingStrategySizeCallback<T> {\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<W>(original: UnderlyingSink<W> | null,\n context: string): ValidatedUnderlyingSink<W> {\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<void> {\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<void> {\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<W>(\n fn: UnderlyingSinkWriteCallback<W>,\n original: UnderlyingSink<W>,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise<void> {\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<undefined>;\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<W = any> {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter<W> | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController<W>;\n /** @internal */\n _writeRequests!: SimpleQueue<WriteRequest>;\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<W>, strategy?: QueuingStrategy<W>);\n constructor(rawUnderlyingSink: UnderlyingSink<W> | null | undefined = {},\n rawStrategy: QueuingStrategy<W> | 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<void> {\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<W> {\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<W>(stream: WritableStream<W>): WritableStreamDefaultWriter<W> {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream<W>(startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<W> = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream<W> = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController<W> = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream<W>(stream: WritableStream<W>) {\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<undefined> {\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<undefined>((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<any>): Promise<undefined> {\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<undefined>((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<undefined> {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise<undefined>((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<W = any> {\n /** @internal */\n _ownerWritableStream: WritableStream<W>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\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<undefined>;\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<W>) {\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<undefined> {\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<undefined> {\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<void> {\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<void> {\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<void>;\n write(chunk: W = undefined!): Promise<void> {\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<W = any>(x: any): x is WritableStreamDefaultWriter<W> {\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<undefined> {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise<undefined> {\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<W>(writer: WritableStreamDefaultWriter<W>, chunk: W): Promise<undefined> {\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> = 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<W = any> {\n /** @internal */\n _controlledWritableStream!: WritableStream<W>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<QueueRecord<W>>>;\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<W>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise<void>;\n /** @internal */\n _closeAlgorithm!: () => Promise<void>;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise<void>;\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<void> {\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<any> {\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<W>(stream: WritableStream<W>,\n controller: WritableStreamDefaultController<W>,\n startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\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<W>(stream: WritableStream<W>,\n underlyingSink: ValidatedUnderlyingSink<W>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void> = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise<void> = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise<void> = () => 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<any>) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose<W>(controller: WritableStreamDefaultController<W>) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize<W>(controller: WritableStreamDefaultController<W>,\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<any>): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite<W>(controller: WritableStreamDefaultController<W>,\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<W>(controller: WritableStreamDefaultController<W>) {\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<any>, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController<any>) {\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<W>(controller: WritableStreamDefaultController<W>, 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<any>): 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<any>, 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","/// <reference lib=\"dom\" />\nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// <reference types=\"node\" />\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<T>(source: ReadableStream<T>,\n dest: WritableStream<T>,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise<undefined> {\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<T>(source);\n const writer = AcquireWritableStreamDefaultWriter<T>(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<void>(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<void>> = [];\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<void>((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<boolean> {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise<boolean>((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<void> {\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<void>,\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<void>, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise<unknown>, 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<R> {\n /** @internal */\n _controlledReadableStream!: ReadableStream<R>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<R>>;\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<R>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\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<void> {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest<R>): 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<R = any>(x: any): x is ReadableStreamDefaultController<R> {\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<any>): 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<any>): 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<any>) {\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<any>) {\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<R>(\n controller: ReadableStreamDefaultController<R>,\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<any>, 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<any>\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<any>\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController<any>\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<R>(stream: ReadableStream<R>,\n controller: ReadableStreamDefaultController<R>,\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>) {\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<R>(\n stream: ReadableStream<R>,\n underlyingSource: ValidatedUnderlyingSource<R>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>\n) {\n const controller: ReadableStreamDefaultController<R> = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void> = () => undefined;\n let pullAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise<void> = () => 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<R>(stream: ReadableStream<R>,\n cloneForBranch2: boolean): [ReadableStream<R>, ReadableStream<R>] {\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<R>, ReadableStream<R>];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee<R>(stream: ReadableStream<R>,\n cloneForBranch2: boolean): [ReadableStream<R>, ReadableStream<R>] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader<R>(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<R>;\n let branch2: ReadableStream<R>;\n\n let resolveCancelPromise: (value: undefined | Promise<undefined>) => void;\n const cancelPromise = newPromise<undefined>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise<void> {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest<R> = {\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<R>,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController<R>,\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<R>);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController<R>);\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<void> {\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<void> {\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>, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController<R>, 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<Uint8Array> = 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<undefined>) => void;\n const cancelPromise = newPromise<void>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader<Uint8Array>) {\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<Uint8Array> = {\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<Uint8Array>(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<ArrayBufferView> = {\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<void> {\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<void> {\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<void> {\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<void> {\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<R>(\n source: UnderlyingSource<R> | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource<R> {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource<R> | 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<void> {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback<R>(\n fn: UnderlyingDefaultOrByteSourcePullCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): (controller: ReadableStreamController<R>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback<R>(\n fn: UnderlyingDefaultOrByteSourceStartCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback<R> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => 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<RS extends ReadableStream, WS extends WritableStream>(\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<Uint8Array> & {\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<R = any> {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader<R> | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController<R> | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>);\n constructor(rawUnderlyingSource: UnderlyingSource<R> | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy<R> | 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<void> {\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<R>;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader<R> | 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<RS extends ReadableStream>(\n transform: { readable: RS; writable: WritableStream<R> },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough<RS extends ReadableStream>(\n rawTransform: { readable: RS; writable: WritableStream<R> } | 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<R>, options?: StreamPipeOptions): Promise<void>;\n pipeTo(destination: WritableStream<R> | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise<void> {\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<R>(\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<R>, ReadableStream<R>] {\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<R>;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator<R> {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator<R>(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator<R>;\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<R>(startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<R> = () => 1): ReadableStream<R> {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream<R> = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController<R> = 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<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>\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<R>(stream: ReadableStream<R>, reason: any): Promise<undefined> {\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<R>(stream: ReadableStream<R>): 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<R>(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError<R>(stream: ReadableStream<R>, 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<R>(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<R> = ReadableStreamDefaultReader<R> | 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<ArrayBufferView> {\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<any> {\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<I, O>(original: Transformer<I, O> | null,\n context: string): ValidatedTransformer<I, O> {\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<I, O>(\n fn: TransformerFlushCallback<O>,\n original: Transformer<I, O>,\n context: string\n): (controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback<I, O>(\n fn: TransformerStartCallback<O>,\n original: Transformer<I, O>,\n context: string\n): TransformerStartCallback<O> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback<I, O>(\n fn: TransformerTransformCallback<I, O>,\n original: Transformer<I, O>,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController<O>) => 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<I = any, O = any> {\n /** @internal */\n _writable!: WritableStream<I>;\n /** @internal */\n _readable!: ReadableStream<O>;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise<void>;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController<O>;\n\n constructor(\n transformer?: Transformer<I, O>,\n writableStrategy?: QueuingStrategy<I>,\n readableStrategy?: QueuingStrategy<O>\n );\n constructor(rawTransformer: Transformer<I, O> | null | undefined = {},\n rawWritableStrategy: QueuingStrategy<I> | null | undefined = {},\n rawReadableStrategy: QueuingStrategy<O> | 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>) => void;\n const startPromise = newPromise<void>(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<O> {\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<I> {\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<I, O>(startAlgorithm: () => void | PromiseLike<void>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I> = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O> = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream<I, O> = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike<void>) => void;\n const startPromise = newPromise<void>(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController<O> = 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<I, O>(stream: TransformStream<I, O>,\n startPromise: Promise<void>,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I>,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O>) {\n function startAlgorithm(): Promise<void> {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise<void> {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise<void> {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise<void> {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise<void> {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise<void> {\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<any>,\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<O> {\n /** @internal */\n _controlledTransformStream: TransformStream<any, O>;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise<void>;\n /** @internal */\n _flushAlgorithm: () => Promise<void>;\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<O>);\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<O = any>(x: any): x is TransformStreamDefaultController<O> {\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<I, O>(stream: TransformStream<I, O>,\n controller: TransformStreamDefaultController<O>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>) {\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<I, O>(stream: TransformStream<I, O>,\n transformer: ValidatedTransformer<I, O>) {\n const controller: TransformStreamDefaultController<O> = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise<void> => {\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<void> = () => 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<any>) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue<O>(controller: TransformStreamDefaultController<O>, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController<O>;\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<any>, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform<I, O>(controller: TransformStreamDefaultController<O>,\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<O>(controller: TransformStreamDefaultController<O>) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController<O>;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm<I, O>(stream: TransformStream<I, O>, chunk: I): Promise<void> {\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<I, O>(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform<I, O>(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise<void> {\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<I, O>(stream: TransformStream<I, O>): Promise<void> {\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<O>);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise<void> {\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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"}
prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.jsnew file+2
@@ -0,0 +1,2 @@
1+!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.bytesFilled<r.elementSize)return;Pe(e);const o=r.bytesFilled%r.elementSize;if(o>0){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})}));
2+//# sourceMappingURL=polyfill.es2018.min.js.map
prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js.mapnew file+1
@@ -0,0 +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":["/// <reference lib=\"es2015.symbol\" />\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","/// <reference lib=\"dom\" />\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<T>(executor: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void\n) => void): Promise<T> {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith<T>(value: T | PromiseLike<T>): Promise<T> {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith<T = never>(reason: any): Promise<T> {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => TResult1 | PromiseLike<TResult1>,\n onRejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\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<TResult1 | TResult2>;\n}\n\nexport function uponPromise<T>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => void | PromiseLike<void>,\n onRejected?: (reason: any) => void | PromiseLike<void>): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment<T>(promise: Promise<T>, onFulfilled: (value: T) => void | PromiseLike<void>): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise<unknown>, onRejected: (reason: any) => void | PromiseLike<void>): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike<TResult1>,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise<unknown>): 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<T, A extends any[], R>(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<T, A extends any[], R>(F: (this: T, ...fnArgs: A) => R | PromiseLike<R>,\n V: T,\n args: A): Promise<R> {\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<T> {\n _elements: T[];\n _next: Node<T> | 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<T> {\n private _front: Node<T>;\n private _back: Node<T>;\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<R>(reader: ReadableStreamReader<R>, stream: ReadableStream<R>) {\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<any>, reason: any): Promise<undefined> {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader<any>) {\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<any>) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader<any>, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader<any>) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader<any>, 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<any>, 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<any>) {\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","/// <reference lib=\"es2015.core\" />\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","/// <reference lib=\"es2015.core\" />\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<T extends any>(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<T extends any>(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<T> = {\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<R>(stream: ReadableStream): ReadableStreamDefaultReader<R> {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest<R>(stream: ReadableStream<R>,\n readRequest: ReadRequest<R>): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader<R>)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest<R>(stream: ReadableStream<R>, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader<R>;\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<R>(stream: ReadableStream<R>): number {\n return (stream._reader as ReadableStreamDefaultReader<R>)._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<R> {\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<R = any> {\n /** @internal */\n _ownerReadableStream!: ReadableStream<R>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue<ReadRequest<R>>;\n\n constructor(stream: ReadableStream<R>) {\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<undefined> {\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<void> {\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<ReadableStreamDefaultReadResult<R>> {\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<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\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<R = any>(x: any): x is ReadableStreamDefaultReader<R> {\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<R>(reader: ReadableStreamDefaultReader<R>,\n readRequest: ReadRequest<R>): 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<any>);\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","/// <reference lib=\"es2018.asynciterable\" />\n\n/* eslint-disable @typescript-eslint/no-empty-function */\nexport const AsyncIteratorPrototype: AsyncIterable<any> | undefined =\n Object.getPrototypeOf(Object.getPrototypeOf(async function* (): AsyncIterableIterator<any> {}).prototype);\n","/// <reference lib=\"es2018.asynciterable\" />\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<R> extends AsyncIterator<R> {\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl<R> {\n private readonly _reader: ReadableStreamDefaultReader<R>;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise<ReadableStreamDefaultReadResult<R>> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader<R>, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise<ReadableStreamDefaultReadResult<R>> {\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<ReadableStreamDefaultReadResult<any>> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise<ReadableStreamDefaultReadResult<R>> {\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<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\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<ReadableStreamDefaultReadResult<any>> {\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<R> implements ReadableStreamAsyncIterator<R> {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl<R>;\n\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance<any> = {\n next(this: ReadableStreamAsyncIteratorInstance<any>): Promise<ReadableStreamDefaultReadResult<any>> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance<any>, value: any): Promise<ReadableStreamDefaultReadResult<any>> {\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<R>(stream: ReadableStream<R>,\n preventCancel: boolean): ReadableStreamAsyncIterator<R> {\n const reader = AcquireReadableStreamDefaultReader<R>(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance<R> = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator<R = any>(x: any): x is ReadableStreamAsyncIterator<R> {\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<any>)._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","/// <reference lib=\"es2015.core\" />\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<T extends any[]>(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<T extends ArrayBufferLike>(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<T> {\n _queue: SimpleQueue<T>;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair<T> {\n value: T;\n size: number;\n}\n\nexport function DequeueValue<T>(container: QueueContainer<QueuePair<T>>): 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<T>(container: QueueContainer<QueuePair<T>>, 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<T>(container: QueueContainer<QueuePair<T>>): 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<T>(container: QueueContainer<T>) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue<T>();\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<T extends ArrayBufferView = ArrayBufferView> {\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<T extends ArrayBufferView = ArrayBufferView> =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor<T>;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor<Uint8Array>;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor<T extends ArrayBufferView = ArrayBufferView> {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor<T>;\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<ByteQueueElement>;\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<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue<PullIntoDescriptor>;\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<void> {\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<Uint8Array>): 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<T extends ArrayBufferView>(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor<T>\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<T>(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<T extends ArrayBufferView>(\n pullIntoDescriptor: PullIntoDescriptor<T>\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<T extends ArrayBufferView>(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest<T>\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor<T>).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor<T>;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor<T> = {\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<T>(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<T>(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<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\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<void> = () => undefined;\n let pullAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise<void> = () => 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<T extends ArrayBufferView> = {\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<T extends ArrayBufferView>(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest<T>): 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<T extends ArrayBufferView> {\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<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue<ReadIntoRequest<any>>;\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<undefined> {\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<void> {\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<T extends ArrayBufferView>(view: T): Promise<ReadableStreamBYOBReadResult<T>> {\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<T>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamBYOBReadResult<T>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest<T> = {\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<T extends ArrayBufferView>(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest<T>\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<T>(strategy: QueuingStrategy<T>): QueuingStrategySizeCallback<T> {\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<T>(init: QueuingStrategy<T> | null | undefined,\n context: string): QueuingStrategy<T> {\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<T>(fn: QueuingStrategySizeCallback<T>,\n context: string): QueuingStrategySizeCallback<T> {\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<W>(original: UnderlyingSink<W> | null,\n context: string): ValidatedUnderlyingSink<W> {\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<void> {\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<void> {\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<W>(\n fn: UnderlyingSinkWriteCallback<W>,\n original: UnderlyingSink<W>,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise<void> {\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<undefined>;\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<W = any> {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter<W> | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController<W>;\n /** @internal */\n _writeRequests!: SimpleQueue<WriteRequest>;\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<W>, strategy?: QueuingStrategy<W>);\n constructor(rawUnderlyingSink: UnderlyingSink<W> | null | undefined = {},\n rawStrategy: QueuingStrategy<W> | 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<void> {\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<W> {\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<W>(stream: WritableStream<W>): WritableStreamDefaultWriter<W> {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream<W>(startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<W> = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream<W> = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController<W> = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream<W>(stream: WritableStream<W>) {\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<undefined> {\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<undefined>((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<any>): Promise<undefined> {\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<undefined>((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<undefined> {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise<undefined>((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<W = any> {\n /** @internal */\n _ownerWritableStream: WritableStream<W>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\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<undefined>;\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<W>) {\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<undefined> {\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<undefined> {\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<void> {\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<void> {\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<void>;\n write(chunk: W = undefined!): Promise<void> {\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<W = any>(x: any): x is WritableStreamDefaultWriter<W> {\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<undefined> {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise<undefined> {\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<W>(writer: WritableStreamDefaultWriter<W>, chunk: W): Promise<undefined> {\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> = 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<W = any> {\n /** @internal */\n _controlledWritableStream!: WritableStream<W>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<QueueRecord<W>>>;\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<W>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise<void>;\n /** @internal */\n _closeAlgorithm!: () => Promise<void>;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise<void>;\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<void> {\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<any> {\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<W>(stream: WritableStream<W>,\n controller: WritableStreamDefaultController<W>,\n startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\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<W>(stream: WritableStream<W>,\n underlyingSink: ValidatedUnderlyingSink<W>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void> = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise<void> = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise<void> = () => 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<any>) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose<W>(controller: WritableStreamDefaultController<W>) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize<W>(controller: WritableStreamDefaultController<W>,\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<any>): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite<W>(controller: WritableStreamDefaultController<W>,\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<W>(controller: WritableStreamDefaultController<W>) {\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<any>, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController<any>) {\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<W>(controller: WritableStreamDefaultController<W>, 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<any>): 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<any>, 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","/// <reference lib=\"dom\" />\nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// <reference types=\"node\" />\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<T>(source: ReadableStream<T>,\n dest: WritableStream<T>,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise<undefined> {\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<T>(source);\n const writer = AcquireWritableStreamDefaultWriter<T>(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<void>(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<void>> = [];\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<void>((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<boolean> {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise<boolean>((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<void> {\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<void>,\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<void>, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise<unknown>, 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<R> {\n /** @internal */\n _controlledReadableStream!: ReadableStream<R>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<R>>;\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<R>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\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<void> {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest<R>): 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<R = any>(x: any): x is ReadableStreamDefaultController<R> {\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<any>): 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<any>): 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<any>) {\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<any>) {\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<R>(\n controller: ReadableStreamDefaultController<R>,\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<any>, 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<any>\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<any>\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController<any>\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<R>(stream: ReadableStream<R>,\n controller: ReadableStreamDefaultController<R>,\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>) {\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<R>(\n stream: ReadableStream<R>,\n underlyingSource: ValidatedUnderlyingSource<R>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>\n) {\n const controller: ReadableStreamDefaultController<R> = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void> = () => undefined;\n let pullAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise<void> = () => 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<R>(stream: ReadableStream<R>,\n cloneForBranch2: boolean): [ReadableStream<R>, ReadableStream<R>] {\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<R>, ReadableStream<R>];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee<R>(stream: ReadableStream<R>,\n cloneForBranch2: boolean): [ReadableStream<R>, ReadableStream<R>] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader<R>(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<R>;\n let branch2: ReadableStream<R>;\n\n let resolveCancelPromise: (value: undefined | Promise<undefined>) => void;\n const cancelPromise = newPromise<undefined>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise<void> {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest<R> = {\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<R>,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController<R>,\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<R>);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController<R>);\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<void> {\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<void> {\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>, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController<R>, 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<Uint8Array> = 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<undefined>) => void;\n const cancelPromise = newPromise<void>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader<Uint8Array>) {\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<Uint8Array> = {\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<Uint8Array>(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<ArrayBufferView> = {\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<void> {\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<void> {\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<void> {\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<void> {\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<R>(\n source: UnderlyingSource<R> | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource<R> {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource<R> | 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<void> {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback<R>(\n fn: UnderlyingDefaultOrByteSourcePullCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): (controller: ReadableStreamController<R>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback<R>(\n fn: UnderlyingDefaultOrByteSourceStartCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback<R> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => 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<Uint8Array> & {\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<R = any> {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader<R> | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController<R> | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>);\n constructor(rawUnderlyingSource: UnderlyingSource<R> | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy<R> | 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<void> {\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<R>;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader<R> | 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<RS extends ReadableStream>(\n transform: { readable: RS; writable: WritableStream<R> },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough<RS extends ReadableStream>(\n rawTransform: { readable: RS; writable: WritableStream<R> } | 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<R>, options?: StreamPipeOptions): Promise<void>;\n pipeTo(destination: WritableStream<R> | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise<void> {\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<R>(\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<R>, ReadableStream<R>] {\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<R>;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator<R> {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator<R>(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator<R>;\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<R>(startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<R> = () => 1): ReadableStream<R> {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream<R> = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController<R> = 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<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>\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<R>(stream: ReadableStream<R>, reason: any): Promise<undefined> {\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<R>(stream: ReadableStream<R>): 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<R>(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError<R>(stream: ReadableStream<R>, 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<R>(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<R> = ReadableStreamDefaultReader<R> | 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<RS extends ReadableStream, WS extends WritableStream>(\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<ArrayBufferView> {\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<any> {\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<I, O>(original: Transformer<I, O> | null,\n context: string): ValidatedTransformer<I, O> {\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<I, O>(\n fn: TransformerFlushCallback<O>,\n original: Transformer<I, O>,\n context: string\n): (controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback<I, O>(\n fn: TransformerStartCallback<O>,\n original: Transformer<I, O>,\n context: string\n): TransformerStartCallback<O> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback<I, O>(\n fn: TransformerTransformCallback<I, O>,\n original: Transformer<I, O>,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController<O>) => 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<I = any, O = any> {\n /** @internal */\n _writable!: WritableStream<I>;\n /** @internal */\n _readable!: ReadableStream<O>;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise<void>;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController<O>;\n\n constructor(\n transformer?: Transformer<I, O>,\n writableStrategy?: QueuingStrategy<I>,\n readableStrategy?: QueuingStrategy<O>\n );\n constructor(rawTransformer: Transformer<I, O> | null | undefined = {},\n rawWritableStrategy: QueuingStrategy<I> | null | undefined = {},\n rawReadableStrategy: QueuingStrategy<O> | 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>) => void;\n const startPromise = newPromise<void>(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<O> {\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<I> {\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<I, O>(startAlgorithm: () => void | PromiseLike<void>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I> = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O> = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream<I, O> = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike<void>) => void;\n const startPromise = newPromise<void>(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController<O> = 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<I, O>(stream: TransformStream<I, O>,\n startPromise: Promise<void>,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I>,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O>) {\n function startAlgorithm(): Promise<void> {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise<void> {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise<void> {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise<void> {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise<void> {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise<void> {\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<any>,\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<O> {\n /** @internal */\n _controlledTransformStream: TransformStream<any, O>;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise<void>;\n /** @internal */\n _flushAlgorithm: () => Promise<void>;\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<O>);\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<O = any>(x: any): x is TransformStreamDefaultController<O> {\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<I, O>(stream: TransformStream<I, O>,\n controller: TransformStreamDefaultController<O>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>) {\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<I, O>(stream: TransformStream<I, O>,\n transformer: ValidatedTransformer<I, O>) {\n const controller: TransformStreamDefaultController<O> = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise<void> => {\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<void> = () => 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<any>) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue<O>(controller: TransformStreamDefaultController<O>, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController<O>;\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<any>, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform<I, O>(controller: TransformStreamDefaultController<O>,\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<O>(controller: TransformStreamDefaultController<O>) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController<O>;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm<I, O>(stream: TransformStream<I, O>, chunk: I): Promise<void> {\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<I, O>(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform<I, O>(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise<void> {\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<I, O>(stream: TransformStream<I, O>): Promise<void> {\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<O>);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise<void> {\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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"}
prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjsnew file+4219
@@ -0,0 +1,4219 @@
1+/**
2+ * web-streams-polyfill v3.2.1
3+ */
4+/// <reference lib="es2015.symbol" />
5+const SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?
6+ Symbol :
7+ description => `Symbol(${description})`;
8+
9+/// <reference lib="dom" />
10+function noop() {
11+ return undefined;
12+}
13+function getGlobals() {
14+ if (typeof self !== 'undefined') {
15+ return self;
16+ }
17+ else if (typeof window !== 'undefined') {
18+ return window;
19+ }
20+ else if (typeof global !== 'undefined') {
21+ return global;
22+ }
23+ return undefined;
24+}
25+const globals = getGlobals();
26+
27+function typeIsObject(x) {
28+ return (typeof x === 'object' && x !== null) || typeof x === 'function';
29+}
30+const rethrowAssertionErrorRejection = noop;
31+
32+const originalPromise = Promise;
33+const originalPromiseThen = Promise.prototype.then;
34+const originalPromiseResolve = Promise.resolve.bind(originalPromise);
35+const originalPromiseReject = Promise.reject.bind(originalPromise);
36+function newPromise(executor) {
37+ return new originalPromise(executor);
38+}
39+function promiseResolvedWith(value) {
40+ return originalPromiseResolve(value);
41+}
42+function promiseRejectedWith(reason) {
43+ return originalPromiseReject(reason);
44+}
45+function PerformPromiseThen(promise, onFulfilled, onRejected) {
46+ // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an
47+ // approximation.
48+ return originalPromiseThen.call(promise, onFulfilled, onRejected);
49+}
50+function uponPromise(promise, onFulfilled, onRejected) {
51+ PerformPromiseThen(PerformPromiseThen(promise, onFulfilled, onRejected), undefined, rethrowAssertionErrorRejection);
52+}
53+function uponFulfillment(promise, onFulfilled) {
54+ uponPromise(promise, onFulfilled);
55+}
56+function uponRejection(promise, onRejected) {
57+ uponPromise(promise, undefined, onRejected);
58+}
59+function transformPromiseWith(promise, fulfillmentHandler, rejectionHandler) {
60+ return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);
61+}
62+function setPromiseIsHandledToTrue(promise) {
63+ PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);
64+}
65+const queueMicrotask = (() => {
66+ const globalQueueMicrotask = globals && globals.queueMicrotask;
67+ if (typeof globalQueueMicrotask === 'function') {
68+ return globalQueueMicrotask;
69+ }
70+ const resolvedPromise = promiseResolvedWith(undefined);
71+ return (fn) => PerformPromiseThen(resolvedPromise, fn);
72+})();
73+function reflectCall(F, V, args) {
74+ if (typeof F !== 'function') {
75+ throw new TypeError('Argument is not a function');
76+ }
77+ return Function.prototype.apply.call(F, V, args);
78+}
79+function promiseCall(F, V, args) {
80+ try {
81+ return promiseResolvedWith(reflectCall(F, V, args));
82+ }
83+ catch (value) {
84+ return promiseRejectedWith(value);
85+ }
86+}
87+
88+// Original from Chromium
89+// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js
90+const QUEUE_MAX_ARRAY_SIZE = 16384;
91+/**
92+ * Simple queue structure.
93+ *
94+ * Avoids scalability issues with using a packed array directly by using
95+ * multiple arrays in a linked list and keeping the array size bounded.
96+ */
97+class SimpleQueue {
98+ constructor() {
99+ this._cursor = 0;
100+ this._size = 0;
101+ // _front and _back are always defined.
102+ this._front = {
103+ _elements: [],
104+ _next: undefined
105+ };
106+ this._back = this._front;
107+ // The cursor is used to avoid calling Array.shift().
108+ // It contains the index of the front element of the array inside the
109+ // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).
110+ this._cursor = 0;
111+ // When there is only one node, size === elements.length - cursor.
112+ this._size = 0;
113+ }
114+ get length() {
115+ return this._size;
116+ }
117+ // For exception safety, this method is structured in order:
118+ // 1. Read state
119+ // 2. Calculate required state mutations
120+ // 3. Perform state mutations
121+ push(element) {
122+ const oldBack = this._back;
123+ let newBack = oldBack;
124+ if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {
125+ newBack = {
126+ _elements: [],
127+ _next: undefined
128+ };
129+ }
130+ // push() is the mutation most likely to throw an exception, so it
131+ // goes first.
132+ oldBack._elements.push(element);
133+ if (newBack !== oldBack) {
134+ this._back = newBack;
135+ oldBack._next = newBack;
136+ }
137+ ++this._size;
138+ }
139+ // Like push(), shift() follows the read -> calculate -> mutate pattern for
140+ // exception safety.
141+ shift() { // must not be called on an empty queue
142+ const oldFront = this._front;
143+ let newFront = oldFront;
144+ const oldCursor = this._cursor;
145+ let newCursor = oldCursor + 1;
146+ const elements = oldFront._elements;
147+ const element = elements[oldCursor];
148+ if (newCursor === QUEUE_MAX_ARRAY_SIZE) {
149+ newFront = oldFront._next;
150+ newCursor = 0;
151+ }
152+ // No mutations before this point.
153+ --this._size;
154+ this._cursor = newCursor;
155+ if (oldFront !== newFront) {
156+ this._front = newFront;
157+ }
158+ // Permit shifted element to be garbage collected.
159+ elements[oldCursor] = undefined;
160+ return element;
161+ }
162+ // The tricky thing about forEach() is that it can be called
163+ // re-entrantly. The queue may be mutated inside the callback. It is easy to
164+ // see that push() within the callback has no negative effects since the end
165+ // of the queue is checked for on every iteration. If shift() is called
166+ // repeatedly within the callback then the next iteration may return an
167+ // element that has been removed. In this case the callback will be called
168+ // with undefined values until we either "catch up" with elements that still
169+ // exist or reach the back of the queue.
170+ forEach(callback) {
171+ let i = this._cursor;
172+ let node = this._front;
173+ let elements = node._elements;
174+ while (i !== elements.length || node._next !== undefined) {
175+ if (i === elements.length) {
176+ node = node._next;
177+ elements = node._elements;
178+ i = 0;
179+ if (elements.length === 0) {
180+ break;
181+ }
182+ }
183+ callback(elements[i]);
184+ ++i;
185+ }
186+ }
187+ // Return the element that would be returned if shift() was called now,
188+ // without modifying the queue.
189+ peek() { // must not be called on an empty queue
190+ const front = this._front;
191+ const cursor = this._cursor;
192+ return front._elements[cursor];
193+ }
194+}
195+
196+function ReadableStreamReaderGenericInitialize(reader, stream) {
197+ reader._ownerReadableStream = stream;
198+ stream._reader = reader;
199+ if (stream._state === 'readable') {
200+ defaultReaderClosedPromiseInitialize(reader);
201+ }
202+ else if (stream._state === 'closed') {
203+ defaultReaderClosedPromiseInitializeAsResolved(reader);
204+ }
205+ else {
206+ defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);
207+ }
208+}
209+// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state
210+// check.
211+function ReadableStreamReaderGenericCancel(reader, reason) {
212+ const stream = reader._ownerReadableStream;
213+ return ReadableStreamCancel(stream, reason);
214+}
215+function ReadableStreamReaderGenericRelease(reader) {
216+ if (reader._ownerReadableStream._state === 'readable') {
217+ defaultReaderClosedPromiseReject(reader, new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));
218+ }
219+ else {
220+ defaultReaderClosedPromiseResetToRejected(reader, new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));
221+ }
222+ reader._ownerReadableStream._reader = undefined;
223+ reader._ownerReadableStream = undefined;
224+}
225+// Helper functions for the readers.
226+function readerLockException(name) {
227+ return new TypeError('Cannot ' + name + ' a stream using a released reader');
228+}
229+// Helper functions for the ReadableStreamDefaultReader.
230+function defaultReaderClosedPromiseInitialize(reader) {
231+ reader._closedPromise = newPromise((resolve, reject) => {
232+ reader._closedPromise_resolve = resolve;
233+ reader._closedPromise_reject = reject;
234+ });
235+}
236+function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) {
237+ defaultReaderClosedPromiseInitialize(reader);
238+ defaultReaderClosedPromiseReject(reader, reason);
239+}
240+function defaultReaderClosedPromiseInitializeAsResolved(reader) {
241+ defaultReaderClosedPromiseInitialize(reader);
242+ defaultReaderClosedPromiseResolve(reader);
243+}
244+function defaultReaderClosedPromiseReject(reader, reason) {
245+ if (reader._closedPromise_reject === undefined) {
246+ return;
247+ }
248+ setPromiseIsHandledToTrue(reader._closedPromise);
249+ reader._closedPromise_reject(reason);
250+ reader._closedPromise_resolve = undefined;
251+ reader._closedPromise_reject = undefined;
252+}
253+function defaultReaderClosedPromiseResetToRejected(reader, reason) {
254+ defaultReaderClosedPromiseInitializeAsRejected(reader, reason);
255+}
256+function defaultReaderClosedPromiseResolve(reader) {
257+ if (reader._closedPromise_resolve === undefined) {
258+ return;
259+ }
260+ reader._closedPromise_resolve(undefined);
261+ reader._closedPromise_resolve = undefined;
262+ reader._closedPromise_reject = undefined;
263+}
264+
265+const AbortSteps = SymbolPolyfill('[[AbortSteps]]');
266+const ErrorSteps = SymbolPolyfill('[[ErrorSteps]]');
267+const CancelSteps = SymbolPolyfill('[[CancelSteps]]');
268+const PullSteps = SymbolPolyfill('[[PullSteps]]');
269+
270+/// <reference lib="es2015.core" />
271+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill
272+const NumberIsFinite = Number.isFinite || function (x) {
273+ return typeof x === 'number' && isFinite(x);
274+};
275+
276+/// <reference lib="es2015.core" />
277+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill
278+const MathTrunc = Math.trunc || function (v) {
279+ return v < 0 ? Math.ceil(v) : Math.floor(v);
280+};
281+
282+// https://heycam.github.io/webidl/#idl-dictionaries
283+function isDictionary(x) {
284+ return typeof x === 'object' || typeof x === 'function';
285+}
286+function assertDictionary(obj, context) {
287+ if (obj !== undefined && !isDictionary(obj)) {
288+ throw new TypeError(`${context} is not an object.`);
289+ }
290+}
291+// https://heycam.github.io/webidl/#idl-callback-functions
292+function assertFunction(x, context) {
293+ if (typeof x !== 'function') {
294+ throw new TypeError(`${context} is not a function.`);
295+ }
296+}
297+// https://heycam.github.io/webidl/#idl-object
298+function isObject(x) {
299+ return (typeof x === 'object' && x !== null) || typeof x === 'function';
300+}
301+function assertObject(x, context) {
302+ if (!isObject(x)) {
303+ throw new TypeError(`${context} is not an object.`);
304+ }
305+}
306+function assertRequiredArgument(x, position, context) {
307+ if (x === undefined) {
308+ throw new TypeError(`Parameter ${position} is required in '${context}'.`);
309+ }
310+}
311+function assertRequiredField(x, field, context) {
312+ if (x === undefined) {
313+ throw new TypeError(`${field} is required in '${context}'.`);
314+ }
315+}
316+// https://heycam.github.io/webidl/#idl-unrestricted-double
317+function convertUnrestrictedDouble(value) {
318+ return Number(value);
319+}
320+function censorNegativeZero(x) {
321+ return x === 0 ? 0 : x;
322+}
323+function integerPart(x) {
324+ return censorNegativeZero(MathTrunc(x));
325+}
326+// https://heycam.github.io/webidl/#idl-unsigned-long-long
327+function convertUnsignedLongLongWithEnforceRange(value, context) {
328+ const lowerBound = 0;
329+ const upperBound = Number.MAX_SAFE_INTEGER;
330+ let x = Number(value);
331+ x = censorNegativeZero(x);
332+ if (!NumberIsFinite(x)) {
333+ throw new TypeError(`${context} is not a finite number`);
334+ }
335+ x = integerPart(x);
336+ if (x < lowerBound || x > upperBound) {
337+ throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);
338+ }
339+ if (!NumberIsFinite(x) || x === 0) {
340+ return 0;
341+ }
342+ // TODO Use BigInt if supported?
343+ // let xBigInt = BigInt(integerPart(x));
344+ // xBigInt = BigInt.asUintN(64, xBigInt);
345+ // return Number(xBigInt);
346+ return x;
347+}
348+
349+function assertReadableStream(x, context) {
350+ if (!IsReadableStream(x)) {
351+ throw new TypeError(`${context} is not a ReadableStream.`);
352+ }
353+}
354+
355+// Abstract operations for the ReadableStream.
356+function AcquireReadableStreamDefaultReader(stream) {
357+ return new ReadableStreamDefaultReader(stream);
358+}
359+// ReadableStream API exposed for controllers.
360+function ReadableStreamAddReadRequest(stream, readRequest) {
361+ stream._reader._readRequests.push(readRequest);
362+}
363+function ReadableStreamFulfillReadRequest(stream, chunk, done) {
364+ const reader = stream._reader;
365+ const readRequest = reader._readRequests.shift();
366+ if (done) {
367+ readRequest._closeSteps();
368+ }
369+ else {
370+ readRequest._chunkSteps(chunk);
371+ }
372+}
373+function ReadableStreamGetNumReadRequests(stream) {
374+ return stream._reader._readRequests.length;
375+}
376+function ReadableStreamHasDefaultReader(stream) {
377+ const reader = stream._reader;
378+ if (reader === undefined) {
379+ return false;
380+ }
381+ if (!IsReadableStreamDefaultReader(reader)) {
382+ return false;
383+ }
384+ return true;
385+}
386+/**
387+ * A default reader vended by a {@link ReadableStream}.
388+ *
389+ * @public
390+ */
391+class ReadableStreamDefaultReader {
392+ constructor(stream) {
393+ assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');
394+ assertReadableStream(stream, 'First parameter');
395+ if (IsReadableStreamLocked(stream)) {
396+ throw new TypeError('This stream has already been locked for exclusive reading by another reader');
397+ }
398+ ReadableStreamReaderGenericInitialize(this, stream);
399+ this._readRequests = new SimpleQueue();
400+ }
401+ /**
402+ * Returns a promise that will be fulfilled when the stream becomes closed,
403+ * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.
404+ */
405+ get closed() {
406+ if (!IsReadableStreamDefaultReader(this)) {
407+ return promiseRejectedWith(defaultReaderBrandCheckException('closed'));
408+ }
409+ return this._closedPromise;
410+ }
411+ /**
412+ * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.
413+ */
414+ cancel(reason = undefined) {
415+ if (!IsReadableStreamDefaultReader(this)) {
416+ return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));
417+ }
418+ if (this._ownerReadableStream === undefined) {
419+ return promiseRejectedWith(readerLockException('cancel'));
420+ }
421+ return ReadableStreamReaderGenericCancel(this, reason);
422+ }
423+ /**
424+ * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.
425+ *
426+ * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.
427+ */
428+ read() {
429+ if (!IsReadableStreamDefaultReader(this)) {
430+ return promiseRejectedWith(defaultReaderBrandCheckException('read'));
431+ }
432+ if (this._ownerReadableStream === undefined) {
433+ return promiseRejectedWith(readerLockException('read from'));
434+ }
435+ let resolvePromise;
436+ let rejectPromise;
437+ const promise = newPromise((resolve, reject) => {
438+ resolvePromise = resolve;
439+ rejectPromise = reject;
440+ });
441+ const readRequest = {
442+ _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),
443+ _closeSteps: () => resolvePromise({ value: undefined, done: true }),
444+ _errorSteps: e => rejectPromise(e)
445+ };
446+ ReadableStreamDefaultReaderRead(this, readRequest);
447+ return promise;
448+ }
449+ /**
450+ * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.
451+ * If the associated stream is errored when the lock is released, the reader will appear errored in the same way
452+ * from now on; otherwise, the reader will appear closed.
453+ *
454+ * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by
455+ * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to
456+ * do so will throw a `TypeError` and leave the reader locked to the stream.
457+ */
458+ releaseLock() {
459+ if (!IsReadableStreamDefaultReader(this)) {
460+ throw defaultReaderBrandCheckException('releaseLock');
461+ }
462+ if (this._ownerReadableStream === undefined) {
463+ return;
464+ }
465+ if (this._readRequests.length > 0) {
466+ throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');
467+ }
468+ ReadableStreamReaderGenericRelease(this);
469+ }
470+}
471+Object.defineProperties(ReadableStreamDefaultReader.prototype, {
472+ cancel: { enumerable: true },
473+ read: { enumerable: true },
474+ releaseLock: { enumerable: true },
475+ closed: { enumerable: true }
476+});
477+if (typeof SymbolPolyfill.toStringTag === 'symbol') {
478+ Object.defineProperty(ReadableStreamDefaultReader.prototype, SymbolPolyfill.toStringTag, {
479+ value: 'ReadableStreamDefaultReader',
480+ configurable: true
481+ });
482+}
483+// Abstract operations for the readers.
484+function IsReadableStreamDefaultReader(x) {
485+ if (!typeIsObject(x)) {
486+ return false;
487+ }
488+ if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {
489+ return false;
490+ }
491+ return x instanceof ReadableStreamDefaultReader;
492+}
493+function ReadableStreamDefaultReaderRead(reader, readRequest) {
494+ const stream = reader._ownerReadableStream;
495+ stream._disturbed = true;
496+ if (stream._state === 'closed') {
497+ readRequest._closeSteps();
498+ }
499+ else if (stream._state === 'errored') {
500+ readRequest._errorSteps(stream._storedError);
501+ }
502+ else {
503+ stream._readableStreamController[PullSteps](readRequest);
504+ }
505+}
506+// Helper functions for the ReadableStreamDefaultReader.
507+function defaultReaderBrandCheckException(name) {
508+ return new TypeError(`ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);
509+}
510+
511+/// <reference lib="es2018.asynciterable" />
512+/* eslint-disable @typescript-eslint/no-empty-function */
513+const AsyncIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf(async function* () { }).prototype);
514+
515+/// <reference lib="es2018.asynciterable" />
516+class ReadableStreamAsyncIteratorImpl {
517+ constructor(reader, preventCancel) {
518+ this._ongoingPromise = undefined;
519+ this._isFinished = false;
520+ this._reader = reader;
521+ this._preventCancel = preventCancel;
522+ }
523+ next() {
524+ const nextSteps = () => this._nextSteps();
525+ this._ongoingPromise = this._ongoingPromise ?
526+ transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :
527+ nextSteps();
528+ return this._ongoingPromise;
529+ }
530+ return(value) {
531+ const returnSteps = () => this._returnSteps(value);
532+ return this._ongoingPromise ?
533+ transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :
534+ returnSteps();
535+ }
536+ _nextSteps() {
537+ if (this._isFinished) {
538+ return Promise.resolve({ value: undefined, done: true });
539+ }
540+ const reader = this._reader;
541+ if (reader._ownerReadableStream === undefined) {
542+ return promiseRejectedWith(readerLockException('iterate'));
543+ }
544+ let resolvePromise;
545+ let rejectPromise;
546+ const promise = newPromise((resolve, reject) => {
547+ resolvePromise = resolve;
548+ rejectPromise = reject;
549+ });
550+ const readRequest = {
551+ _chunkSteps: chunk => {
552+ this._ongoingPromise = undefined;
553+ // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.
554+ // FIXME Is this a bug in the specification, or in the test?
555+ queueMicrotask(() => resolvePromise({ value: chunk, done: false }));
556+ },
557+ _closeSteps: () => {
558+ this._ongoingPromise = undefined;
559+ this._isFinished = true;
560+ ReadableStreamReaderGenericRelease(reader);
561+ resolvePromise({ value: undefined, done: true });
562+ },
563+ _errorSteps: reason => {
564+ this._ongoingPromise = undefined;
565+ this._isFinished = true;
566+ ReadableStreamReaderGenericRelease(reader);
567+ rejectPromise(reason);
568+ }
569+ };
570+ ReadableStreamDefaultReaderRead(reader, readRequest);
571+ return promise;
572+ }
573+ _returnSteps(value) {
574+ if (this._isFinished) {
575+ return Promise.resolve({ value, done: true });
576+ }
577+ this._isFinished = true;
578+ const reader = this._reader;
579+ if (reader._ownerReadableStream === undefined) {
580+ return promiseRejectedWith(readerLockException('finish iterating'));
581+ }
582+ if (!this._preventCancel) {
583+ const result = ReadableStreamReaderGenericCancel(reader, value);
584+ ReadableStreamReaderGenericRelease(reader);
585+ return transformPromiseWith(result, () => ({ value, done: true }));
586+ }
587+ ReadableStreamReaderGenericRelease(reader);
588+ return promiseResolvedWith({ value, done: true });
589+ }
590+}
591+const ReadableStreamAsyncIteratorPrototype = {
592+ next() {
593+ if (!IsReadableStreamAsyncIterator(this)) {
594+ return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));
595+ }
596+ return this._asyncIteratorImpl.next();
597+ },
598+ return(value) {
599+ if (!IsReadableStreamAsyncIterator(this)) {
600+ return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));
601+ }
602+ return this._asyncIteratorImpl.return(value);
603+ }
604+};
605+if (AsyncIteratorPrototype !== undefined) {
606+ Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);
607+}
608+// Abstract operations for the ReadableStream.
609+function AcquireReadableStreamAsyncIterator(stream, preventCancel) {
610+ const reader = AcquireReadableStreamDefaultReader(stream);
611+ const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);
612+ const iterator = Object.create(ReadableStreamAsyncIteratorPrototype);
613+ iterator._asyncIteratorImpl = impl;
614+ return iterator;
615+}
616+function IsReadableStreamAsyncIterator(x) {
617+ if (!typeIsObject(x)) {
618+ return false;
619+ }
620+ if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {
621+ return false;
622+ }
623+ try {
624+ // noinspection SuspiciousTypeOfGuard
625+ return x._asyncIteratorImpl instanceof
626+ ReadableStreamAsyncIteratorImpl;
627+ }
628+ catch (_a) {
629+ return false;
630+ }
631+}
632+// Helper functions for the ReadableStream.
633+function streamAsyncIteratorBrandCheckException(name) {
634+ return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);
635+}
636+
637+/// <reference lib="es2015.core" />
638+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill
639+const NumberIsNaN = Number.isNaN || function (x) {
640+ // eslint-disable-next-line no-self-compare
641+ return x !== x;
642+};
643+
644+function CreateArrayFromList(elements) {
645+ // We use arrays to represent lists, so this is basically a no-op.
646+ // Do a slice though just in case we happen to depend on the unique-ness.
647+ return elements.slice();
648+}
649+function CopyDataBlockBytes(dest, destOffset, src, srcOffset, n) {
650+ new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);
651+}
652+// Not implemented correctly
653+function TransferArrayBuffer(O) {
654+ return O;
655+}
656+// Not implemented correctly
657+// eslint-disable-next-line @typescript-eslint/no-unused-vars
658+function IsDetachedBuffer(O) {
659+ return false;
660+}
661+function ArrayBufferSlice(buffer, begin, end) {
662+ // ArrayBuffer.prototype.slice is not available on IE10
663+ // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice
664+ if (buffer.slice) {
665+ return buffer.slice(begin, end);
666+ }
667+ const length = end - begin;
668+ const slice = new ArrayBuffer(length);
669+ CopyDataBlockBytes(slice, 0, buffer, begin, length);
670+ return slice;
671+}
672+
673+function IsNonNegativeNumber(v) {
674+ if (typeof v !== 'number') {
675+ return false;
676+ }
677+ if (NumberIsNaN(v)) {
678+ return false;
679+ }
680+ if (v < 0) {
681+ return false;
682+ }
683+ return true;
684+}
685+function CloneAsUint8Array(O) {
686+ const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);
687+ return new Uint8Array(buffer);
688+}
689+
690+function DequeueValue(container) {
691+ const pair = container._queue.shift();
692+ container._queueTotalSize -= pair.size;
693+ if (container._queueTotalSize < 0) {
694+ container._queueTotalSize = 0;
695+ }
696+ return pair.value;
697+}
698+function EnqueueValueWithSize(container, value, size) {
699+ if (!IsNonNegativeNumber(size) || size === Infinity) {
700+ throw new RangeError('Size must be a finite, non-NaN, non-negative number.');
701+ }
702+ container._queue.push({ value, size });
703+ container._queueTotalSize += size;
704+}
705+function PeekQueueValue(container) {
706+ const pair = container._queue.peek();
707+ return pair.value;
708+}
709+function ResetQueue(container) {
710+ container._queue = new SimpleQueue();
711+ container._queueTotalSize = 0;
712+}
713+
714+/**
715+ * A pull-into request in a {@link ReadableByteStreamController}.
716+ *
717+ * @public
718+ */
719+class ReadableStreamBYOBRequest {
720+ constructor() {
721+ throw new TypeError('Illegal constructor');
722+ }
723+ /**
724+ * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.
725+ */
726+ get view() {
727+ if (!IsReadableStreamBYOBRequest(this)) {
728+ throw byobRequestBrandCheckException('view');
729+ }
730+ return this._view;
731+ }
732+ respond(bytesWritten) {
733+ if (!IsReadableStreamBYOBRequest(this)) {
734+ throw byobRequestBrandCheckException('respond');
735+ }
736+ assertRequiredArgument(bytesWritten, 1, 'respond');
737+ bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');
738+ if (this._associatedReadableByteStreamController === undefined) {
739+ throw new TypeError('This BYOB request has been invalidated');
740+ }
741+ if (IsDetachedBuffer(this._view.buffer)) ;
742+ ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);
743+ }
744+ respondWithNewView(view) {
745+ if (!IsReadableStreamBYOBRequest(this)) {
746+ throw byobRequestBrandCheckException('respondWithNewView');
747+ }
748+ assertRequiredArgument(view, 1, 'respondWithNewView');
749+ if (!ArrayBuffer.isView(view)) {
750+ throw new TypeError('You can only respond with array buffer views');
751+ }
752+ if (this._associatedReadableByteStreamController === undefined) {
753+ throw new TypeError('This BYOB request has been invalidated');
754+ }
755+ if (IsDetachedBuffer(view.buffer)) ;
756+ ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);
757+ }
758+}
759+Object.defineProperties(ReadableStreamBYOBRequest.prototype, {
760+ respond: { enumerable: true },
761+ respondWithNewView: { enumerable: true },
762+ view: { enumerable: true }
763+});
764+if (typeof SymbolPolyfill.toStringTag === 'symbol') {
765+ Object.defineProperty(ReadableStreamBYOBRequest.prototype, SymbolPolyfill.toStringTag, {
766+ value: 'ReadableStreamBYOBRequest',
767+ configurable: true
768+ });
769+}
770+/**
771+ * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.
772+ *
773+ * @public
774+ */
775+class ReadableByteStreamController {
776+ constructor() {
777+ throw new TypeError('Illegal constructor');
778+ }
779+ /**
780+ * Returns the current BYOB pull request, or `null` if there isn't one.
781+ */
782+ get byobRequest() {
783+ if (!IsReadableByteStreamController(this)) {
784+ throw byteStreamControllerBrandCheckException('byobRequest');
785+ }
786+ return ReadableByteStreamControllerGetBYOBRequest(this);
787+ }
788+ /**
789+ * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is
790+ * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.
791+ */
792+ get desiredSize() {
793+ if (!IsReadableByteStreamController(this)) {
794+ throw byteStreamControllerBrandCheckException('desiredSize');
795+ }
796+ return ReadableByteStreamControllerGetDesiredSize(this);
797+ }
798+ /**
799+ * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from
800+ * the stream, but once those are read, the stream will become closed.
801+ */
802+ close() {
803+ if (!IsReadableByteStreamController(this)) {
804+ throw byteStreamControllerBrandCheckException('close');
805+ }
806+ if (this._closeRequested) {
807+ throw new TypeError('The stream has already been closed; do not close it again!');
808+ }
809+ const state = this._controlledReadableByteStream._state;
810+ if (state !== 'readable') {
811+ throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);
812+ }
813+ ReadableByteStreamControllerClose(this);
814+ }
815+ enqueue(chunk) {
816+ if (!IsReadableByteStreamController(this)) {
817+ throw byteStreamControllerBrandCheckException('enqueue');
818+ }
819+ assertRequiredArgument(chunk, 1, 'enqueue');
820+ if (!ArrayBuffer.isView(chunk)) {
821+ throw new TypeError('chunk must be an array buffer view');
822+ }
823+ if (chunk.byteLength === 0) {
824+ throw new TypeError('chunk must have non-zero byteLength');
825+ }
826+ if (chunk.buffer.byteLength === 0) {
827+ throw new TypeError(`chunk's buffer must have non-zero byteLength`);
828+ }
829+ if (this._closeRequested) {
830+ throw new TypeError('stream is closed or draining');
831+ }
832+ const state = this._controlledReadableByteStream._state;
833+ if (state !== 'readable') {
834+ throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);
835+ }
836+ ReadableByteStreamControllerEnqueue(this, chunk);
837+ }
838+ /**
839+ * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.
840+ */
841+ error(e = undefined) {
842+ if (!IsReadableByteStreamController(this)) {
843+ throw byteStreamControllerBrandCheckException('error');
844+ }
845+ ReadableByteStreamControllerError(this, e);
846+ }
847+ /** @internal */
848+ [CancelSteps](reason) {
849+ ReadableByteStreamControllerClearPendingPullIntos(this);
850+ ResetQueue(this);
851+ const result = this._cancelAlgorithm(reason);
852+ ReadableByteStreamControllerClearAlgorithms(this);
853+ return result;
854+ }
855+ /** @internal */
856+ [PullSteps](readRequest) {
857+ const stream = this._controlledReadableByteStream;
858+ if (this._queueTotalSize > 0) {
859+ const entry = this._queue.shift();
860+ this._queueTotalSize -= entry.byteLength;
861+ ReadableByteStreamControllerHandleQueueDrain(this);
862+ const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);
863+ readRequest._chunkSteps(view);
864+ return;
865+ }
866+ const autoAllocateChunkSize = this._autoAllocateChunkSize;
867+ if (autoAllocateChunkSize !== undefined) {
868+ let buffer;
869+ try {
870+ buffer = new ArrayBuffer(autoAllocateChunkSize);
871+ }
872+ catch (bufferE) {
873+ readRequest._errorSteps(bufferE);
874+ return;
875+ }
876+ const pullIntoDescriptor = {
877+ buffer,
878+ bufferByteLength: autoAllocateChunkSize,
879+ byteOffset: 0,
880+ byteLength: autoAllocateChunkSize,
881+ bytesFilled: 0,
882+ elementSize: 1,
883+ viewConstructor: Uint8Array,
884+ readerType: 'default'
885+ };
886+ this._pendingPullIntos.push(pullIntoDescriptor);
887+ }
888+ ReadableStreamAddReadRequest(stream, readRequest);
889+ ReadableByteStreamControllerCallPullIfNeeded(this);
890+ }
891+}
892+Object.defineProperties(ReadableByteStreamController.prototype, {
893+ close: { enumerable: true },
894+ enqueue: { enumerable: true },
895+ error: { enumerable: true },
896+ byobRequest: { enumerable: true },
897+ desiredSize: { enumerable: true }
898+});
899+if (typeof SymbolPolyfill.toStringTag === 'symbol') {
900+ Object.defineProperty(ReadableByteStreamController.prototype, SymbolPolyfill.toStringTag, {
901+ value: 'ReadableByteStreamController',
902+ configurable: true
903+ });
904+}
905+// Abstract operations for the ReadableByteStreamController.
906+function IsReadableByteStreamController(x) {
907+ if (!typeIsObject(x)) {
908+ return false;
909+ }
910+ if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {
911+ return false;
912+ }
913+ return x instanceof ReadableByteStreamController;
914+}
915+function IsReadableStreamBYOBRequest(x) {
916+ if (!typeIsObject(x)) {
917+ return false;
918+ }
919+ if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {
920+ return false;
921+ }
922+ return x instanceof ReadableStreamBYOBRequest;
923+}
924+function ReadableByteStreamControllerCallPullIfNeeded(controller) {
925+ const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);
926+ if (!shouldPull) {
927+ return;
928+ }
929+ if (controller._pulling) {
930+ controller._pullAgain = true;
931+ return;
932+ }
933+ controller._pulling = true;
934+ // TODO: Test controller argument
935+ const pullPromise = controller._pullAlgorithm();
936+ uponPromise(pullPromise, () => {
937+ controller._pulling = false;
938+ if (controller._pullAgain) {
939+ controller._pullAgain = false;
940+ ReadableByteStreamControllerCallPullIfNeeded(controller);
941+ }
942+ }, e => {
943+ ReadableByteStreamControllerError(controller, e);
944+ });
945+}
946+function ReadableByteStreamControllerClearPendingPullIntos(controller) {
947+ ReadableByteStreamControllerInvalidateBYOBRequest(controller);
948+ controller._pendingPullIntos = new SimpleQueue();
949+}
950+function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) {
951+ let done = false;
952+ if (stream._state === 'closed') {
953+ done = true;
954+ }
955+ const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);
956+ if (pullIntoDescriptor.readerType === 'default') {
957+ ReadableStreamFulfillReadRequest(stream, filledView, done);
958+ }
959+ else {
960+ ReadableStreamFulfillReadIntoRequest(stream, filledView, done);
961+ }
962+}
963+function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) {
964+ const bytesFilled = pullIntoDescriptor.bytesFilled;
965+ const elementSize = pullIntoDescriptor.elementSize;
966+ return new pullIntoDescriptor.viewConstructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize);
967+}
968+function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) {
969+ controller._queue.push({ buffer, byteOffset, byteLength });
970+ controller._queueTotalSize += byteLength;
971+}
972+function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) {
973+ const elementSize = pullIntoDescriptor.elementSize;
974+ const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;
975+ const maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);
976+ const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;
977+ const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;
978+ let totalBytesToCopyRemaining = maxBytesToCopy;
979+ let ready = false;
980+ if (maxAlignedBytes > currentAlignedBytes) {
981+ totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;
982+ ready = true;
983+ }
984+ const queue = controller._queue;
985+ while (totalBytesToCopyRemaining > 0) {
986+ const headOfQueue = queue.peek();
987+ const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);
988+ const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;
989+ CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);
990+ if (headOfQueue.byteLength === bytesToCopy) {
991+ queue.shift();
992+ }
993+ else {
994+ headOfQueue.byteOffset += bytesToCopy;
995+ headOfQueue.byteLength -= bytesToCopy;
996+ }
997+ controller._queueTotalSize -= bytesToCopy;
998+ ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);
999+ totalBytesToCopyRemaining -= bytesToCopy;
1000+ }
1001+ return ready;
1002+}
1003+function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) {
1004+ pullIntoDescriptor.bytesFilled += size;
1005+}
1006+function ReadableByteStreamControllerHandleQueueDrain(controller) {
1007+ if (controller._queueTotalSize === 0 && controller._closeRequested) {
1008+ ReadableByteStreamControllerClearAlgorithms(controller);
1009+ ReadableStreamClose(controller._controlledReadableByteStream);
1010+ }
1011+ else {
1012+ ReadableByteStreamControllerCallPullIfNeeded(controller);
1013+ }
1014+}
1015+function ReadableByteStreamControllerInvalidateBYOBRequest(controller) {
1016+ if (controller._byobRequest === null) {
1017+ return;
1018+ }
1019+ controller._byobRequest._associatedReadableByteStreamController = undefined;
1020+ controller._byobRequest._view = null;
1021+ controller._byobRequest = null;
1022+}
1023+function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) {
1024+ while (controller._pendingPullIntos.length > 0) {
1025+ if (controller._queueTotalSize === 0) {
1026+ return;
1027+ }
1028+ const pullIntoDescriptor = controller._pendingPullIntos.peek();
1029+ if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {
1030+ ReadableByteStreamControllerShiftPendingPullInto(controller);
1031+ ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);
1032+ }
1033+ }
1034+}
1035+function ReadableByteStreamControllerPullInto(controller, view, readIntoRequest) {
1036+ const stream = controller._controlledReadableByteStream;
1037+ let elementSize = 1;
1038+ if (view.constructor !== DataView) {
1039+ elementSize = view.constructor.BYTES_PER_ELEMENT;
1040+ }
1041+ const ctor = view.constructor;
1042+ // try {
1043+ const buffer = TransferArrayBuffer(view.buffer);
1044+ // } catch (e) {
1045+ // readIntoRequest._errorSteps(e);
1046+ // return;
1047+ // }
1048+ const pullIntoDescriptor = {
1049+ buffer,
1050+ bufferByteLength: buffer.byteLength,
1051+ byteOffset: view.byteOffset,
1052+ byteLength: view.byteLength,
1053+ bytesFilled: 0,
1054+ elementSize,
1055+ viewConstructor: ctor,
1056+ readerType: 'byob'
1057+ };
1058+ if (controller._pendingPullIntos.length > 0) {
1059+ controller._pendingPullIntos.push(pullIntoDescriptor);
1060+ // No ReadableByteStreamControllerCallPullIfNeeded() call since:
1061+ // - No change happens on desiredSize
1062+ // - The source has already been notified of that there's at least 1 pending read(view)
1063+ ReadableStreamAddReadIntoRequest(stream, readIntoRequest);
1064+ return;
1065+ }
1066+ if (stream._state === 'closed') {
1067+ const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);
1068+ readIntoRequest._closeSteps(emptyView);
1069+ return;
1070+ }
1071+ if (controller._queueTotalSize > 0) {
1072+ if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {
1073+ const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);
1074+ ReadableByteStreamControllerHandleQueueDrain(controller);
1075+ readIntoRequest._chunkSteps(filledView);
1076+ return;
1077+ }
1078+ if (controller._closeRequested) {
1079+ const e = new TypeError('Insufficient bytes to fill elements in the given buffer');
1080+ ReadableByteStreamControllerError(controller, e);
1081+ readIntoRequest._errorSteps(e);
1082+ return;
1083+ }
1084+ }
1085+ controller._pendingPullIntos.push(pullIntoDescriptor);
1086+ ReadableStreamAddReadIntoRequest(stream, readIntoRequest);
1087+ ReadableByteStreamControllerCallPullIfNeeded(controller);
1088+}
1089+function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) {
1090+ const stream = controller._controlledReadableByteStream;
1091+ if (ReadableStreamHasBYOBReader(stream)) {
1092+ while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {
1093+ const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);
1094+ ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);
1095+ }
1096+ }
1097+}
1098+function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) {
1099+ ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);
1100+ if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {
1101+ return;
1102+ }
1103+ ReadableByteStreamControllerShiftPendingPullInto(controller);
1104+ const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;
1105+ if (remainderSize > 0) {
1106+ const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;
1107+ const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);
1108+ ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);
1109+ }
1110+ pullIntoDescriptor.bytesFilled -= remainderSize;
1111+ ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);
1112+ ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);
1113+}
1114+function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) {
1115+ const firstDescriptor = controller._pendingPullIntos.peek();
1116+ ReadableByteStreamControllerInvalidateBYOBRequest(controller);
1117+ const state = controller._controlledReadableByteStream._state;
1118+ if (state === 'closed') {
1119+ ReadableByteStreamControllerRespondInClosedState(controller);
1120+ }
1121+ else {
1122+ ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);
1123+ }
1124+ ReadableByteStreamControllerCallPullIfNeeded(controller);
1125+}
1126+function ReadableByteStreamControllerShiftPendingPullInto(controller) {
1127+ const descriptor = controller._pendingPullIntos.shift();
1128+ return descriptor;
1129+}
1130+function ReadableByteStreamControllerShouldCallPull(controller) {
1131+ const stream = controller._controlledReadableByteStream;
1132+ if (stream._state !== 'readable') {
1133+ return false;
1134+ }
1135+ if (controller._closeRequested) {
1136+ return false;
1137+ }
1138+ if (!controller._started) {
1139+ return false;
1140+ }
1141+ if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {
1142+ return true;
1143+ }
1144+ if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {
1145+ return true;
1146+ }
1147+ const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);
1148+ if (desiredSize > 0) {
1149+ return true;
1150+ }
1151+ return false;
1152+}
1153+function ReadableByteStreamControllerClearAlgorithms(controller) {
1154+ controller._pullAlgorithm = undefined;
1155+ controller._cancelAlgorithm = undefined;
1156+}
1157+// A client of ReadableByteStreamController may use these functions directly to bypass state check.
1158+function ReadableByteStreamControllerClose(controller) {
1159+ const stream = controller._controlledReadableByteStream;
1160+ if (controller._closeRequested || stream._state !== 'readable') {
1161+ return;
1162+ }
1163+ if (controller._queueTotalSize > 0) {
1164+ controller._closeRequested = true;
1165+ return;
1166+ }
1167+ if (controller._pendingPullIntos.length > 0) {
1168+ const firstPendingPullInto = controller._pendingPullIntos.peek();
1169+ if (firstPendingPullInto.bytesFilled > 0) {
1170+ const e = new TypeError('Insufficient bytes to fill elements in the given buffer');
1171+ ReadableByteStreamControllerError(controller, e);
1172+ throw e;
1173+ }
1174+ }
1175+ ReadableByteStreamControllerClearAlgorithms(controller);
1176+ ReadableStreamClose(stream);
1177+}
1178+function ReadableByteStreamControllerEnqueue(controller, chunk) {
1179+ const stream = controller._controlledReadableByteStream;
1180+ if (controller._closeRequested || stream._state !== 'readable') {
1181+ return;
1182+ }
1183+ const buffer = chunk.buffer;
1184+ const byteOffset = chunk.byteOffset;
1185+ const byteLength = chunk.byteLength;
1186+ const transferredBuffer = TransferArrayBuffer(buffer);
1187+ if (controller._pendingPullIntos.length > 0) {
1188+ const firstPendingPullInto = controller._pendingPullIntos.peek();
1189+ if (IsDetachedBuffer(firstPendingPullInto.buffer)) ;
1190+ firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);
1191+ }
1192+ ReadableByteStreamControllerInvalidateBYOBRequest(controller);
1193+ if (ReadableStreamHasDefaultReader(stream)) {
1194+ if (ReadableStreamGetNumReadRequests(stream) === 0) {
1195+ ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
1196+ }
1197+ else {
1198+ if (controller._pendingPullIntos.length > 0) {
1199+ ReadableByteStreamControllerShiftPendingPullInto(controller);
1200+ }
1201+ const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);
1202+ ReadableStreamFulfillReadRequest(stream, transferredView, false);
1203+ }
1204+ }
1205+ else if (ReadableStreamHasBYOBReader(stream)) {
1206+ // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.
1207+ ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
1208+ ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);
1209+ }
1210+ else {
1211+ ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
1212+ }
1213+ ReadableByteStreamControllerCallPullIfNeeded(controller);
1214+}
1215+function ReadableByteStreamControllerError(controller, e) {
1216+ const stream = controller._controlledReadableByteStream;
1217+ if (stream._state !== 'readable') {
1218+ return;
1219+ }
1220+ ReadableByteStreamControllerClearPendingPullIntos(controller);
1221+ ResetQueue(controller);
1222+ ReadableByteStreamControllerClearAlgorithms(controller);
1223+ ReadableStreamError(stream, e);
1224+}
1225+function ReadableByteStreamControllerGetBYOBRequest(controller) {
1226+ if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {
1227+ const firstDescriptor = controller._pendingPullIntos.peek();
1228+ const view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled);
1229+ const byobRequest = Object.create(ReadableStreamBYOBRequest.prototype);
1230+ SetUpReadableStreamBYOBRequest(byobRequest, controller, view);
1231+ controller._byobRequest = byobRequest;
1232+ }
1233+ return controller._byobRequest;
1234+}
1235+function ReadableByteStreamControllerGetDesiredSize(controller) {
1236+ const state = controller._controlledReadableByteStream._state;
1237+ if (state === 'errored') {
1238+ return null;
1239+ }
1240+ if (state === 'closed') {
1241+ return 0;
1242+ }
1243+ return controller._strategyHWM - controller._queueTotalSize;
1244+}
1245+function ReadableByteStreamControllerRespond(controller, bytesWritten) {
1246+ const firstDescriptor = controller._pendingPullIntos.peek();
1247+ const state = controller._controlledReadableByteStream._state;
1248+ if (state === 'closed') {
1249+ if (bytesWritten !== 0) {
1250+ throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');
1251+ }
1252+ }
1253+ else {
1254+ if (bytesWritten === 0) {
1255+ throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');
1256+ }
1257+ if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {
1258+ throw new RangeError('bytesWritten out of range');
1259+ }
1260+ }
1261+ firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);
1262+ ReadableByteStreamControllerRespondInternal(controller, bytesWritten);
1263+}
1264+function ReadableByteStreamControllerRespondWithNewView(controller, view) {
1265+ const firstDescriptor = controller._pendingPullIntos.peek();
1266+ const state = controller._controlledReadableByteStream._state;
1267+ if (state === 'closed') {
1268+ if (view.byteLength !== 0) {
1269+ throw new TypeError('The view\'s length must be 0 when calling respondWithNewView() on a closed stream');
1270+ }
1271+ }
1272+ else {
1273+ if (view.byteLength === 0) {
1274+ throw new TypeError('The view\'s length must be greater than 0 when calling respondWithNewView() on a readable stream');
1275+ }
1276+ }
1277+ if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {
1278+ throw new RangeError('The region specified by view does not match byobRequest');
1279+ }
1280+ if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {
1281+ throw new RangeError('The buffer of view has different capacity than byobRequest');
1282+ }
1283+ if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {
1284+ throw new RangeError('The region specified by view is larger than byobRequest');
1285+ }
1286+ const viewByteLength = view.byteLength;
1287+ firstDescriptor.buffer = TransferArrayBuffer(view.buffer);
1288+ ReadableByteStreamControllerRespondInternal(controller, viewByteLength);
1289+}
1290+function SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize) {
1291+ controller._controlledReadableByteStream = stream;
1292+ controller._pullAgain = false;
1293+ controller._pulling = false;
1294+ controller._byobRequest = null;
1295+ // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.
1296+ controller._queue = controller._queueTotalSize = undefined;
1297+ ResetQueue(controller);
1298+ controller._closeRequested = false;
1299+ controller._started = false;
1300+ controller._strategyHWM = highWaterMark;
1301+ controller._pullAlgorithm = pullAlgorithm;
1302+ controller._cancelAlgorithm = cancelAlgorithm;
1303+ controller._autoAllocateChunkSize = autoAllocateChunkSize;
1304+ controller._pendingPullIntos = new SimpleQueue();
1305+ stream._readableStreamController = controller;
1306+ const startResult = startAlgorithm();
1307+ uponPromise(promiseResolvedWith(startResult), () => {
1308+ controller._started = true;
1309+ ReadableByteStreamControllerCallPullIfNeeded(controller);
1310+ }, r => {
1311+ ReadableByteStreamControllerError(controller, r);
1312+ });
1313+}
1314+function SetUpReadableByteStreamControllerFromUnderlyingSource(stream, underlyingByteSource, highWaterMark) {
1315+ const controller = Object.create(ReadableByteStreamController.prototype);
1316+ let startAlgorithm = () => undefined;
1317+ let pullAlgorithm = () => promiseResolvedWith(undefined);
1318+ let cancelAlgorithm = () => promiseResolvedWith(undefined);
1319+ if (underlyingByteSource.start !== undefined) {
1320+ startAlgorithm = () => underlyingByteSource.start(controller);
1321+ }
1322+ if (underlyingByteSource.pull !== undefined) {
1323+ pullAlgorithm = () => underlyingByteSource.pull(controller);
1324+ }
1325+ if (underlyingByteSource.cancel !== undefined) {
1326+ cancelAlgorithm = reason => underlyingByteSource.cancel(reason);
1327+ }
1328+ const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;
1329+ if (autoAllocateChunkSize === 0) {
1330+ throw new TypeError('autoAllocateChunkSize must be greater than 0');
1331+ }
1332+ SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize);
1333+}
1334+function SetUpReadableStreamBYOBRequest(request, controller, view) {
1335+ request._associatedReadableByteStreamController = controller;
1336+ request._view = view;
1337+}
1338+// Helper functions for the ReadableStreamBYOBRequest.
1339+function byobRequestBrandCheckException(name) {
1340+ return new TypeError(`ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);
1341+}
1342+// Helper functions for the ReadableByteStreamController.
1343+function byteStreamControllerBrandCheckException(name) {
1344+ return new TypeError(`ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);
1345+}
1346+
1347+// Abstract operations for the ReadableStream.
1348+function AcquireReadableStreamBYOBReader(stream) {
1349+ return new ReadableStreamBYOBReader(stream);
1350+}
1351+// ReadableStream API exposed for controllers.
1352+function ReadableStreamAddReadIntoRequest(stream, readIntoRequest) {
1353+ stream._reader._readIntoRequests.push(readIntoRequest);
1354+}
1355+function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) {
1356+ const reader = stream._reader;
1357+ const readIntoRequest = reader._readIntoRequests.shift();
1358+ if (done) {
1359+ readIntoRequest._closeSteps(chunk);
1360+ }
1361+ else {
1362+ readIntoRequest._chunkSteps(chunk);
1363+ }
1364+}
1365+function ReadableStreamGetNumReadIntoRequests(stream) {
1366+ return stream._reader._readIntoRequests.length;
1367+}
1368+function ReadableStreamHasBYOBReader(stream) {
1369+ const reader = stream._reader;
1370+ if (reader === undefined) {
1371+ return false;
1372+ }
1373+ if (!IsReadableStreamBYOBReader(reader)) {
1374+ return false;
1375+ }
1376+ return true;
1377+}
1378+/**
1379+ * A BYOB reader vended by a {@link ReadableStream}.
1380+ *
1381+ * @public
1382+ */
1383+class ReadableStreamBYOBReader {
1384+ constructor(stream) {
1385+ assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');
1386+ assertReadableStream(stream, 'First parameter');
1387+ if (IsReadableStreamLocked(stream)) {
1388+ throw new TypeError('This stream has already been locked for exclusive reading by another reader');
1389+ }
1390+ if (!IsReadableByteStreamController(stream._readableStreamController)) {
1391+ throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +
1392+ 'source');
1393+ }
1394+ ReadableStreamReaderGenericInitialize(this, stream);
1395+ this._readIntoRequests = new SimpleQueue();
1396+ }
1397+ /**
1398+ * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or
1399+ * the reader's lock is released before the stream finishes closing.
1400+ */
1401+ get closed() {
1402+ if (!IsReadableStreamBYOBReader(this)) {
1403+ return promiseRejectedWith(byobReaderBrandCheckException('closed'));
1404+ }
1405+ return this._closedPromise;
1406+ }
1407+ /**
1408+ * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.
1409+ */
1410+ cancel(reason = undefined) {
1411+ if (!IsReadableStreamBYOBReader(this)) {
1412+ return promiseRejectedWith(byobReaderBrandCheckException('cancel'));
1413+ }
1414+ if (this._ownerReadableStream === undefined) {
1415+ return promiseRejectedWith(readerLockException('cancel'));
1416+ }
1417+ return ReadableStreamReaderGenericCancel(this, reason);
1418+ }
1419+ /**
1420+ * Attempts to reads bytes into view, and returns a promise resolved with the result.
1421+ *
1422+ * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.
1423+ */
1424+ read(view) {
1425+ if (!IsReadableStreamBYOBReader(this)) {
1426+ return promiseRejectedWith(byobReaderBrandCheckException('read'));
1427+ }
1428+ if (!ArrayBuffer.isView(view)) {
1429+ return promiseRejectedWith(new TypeError('view must be an array buffer view'));
1430+ }
1431+ if (view.byteLength === 0) {
1432+ return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));
1433+ }
1434+ if (view.buffer.byteLength === 0) {
1435+ return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));
1436+ }
1437+ if (IsDetachedBuffer(view.buffer)) ;
1438+ if (this._ownerReadableStream === undefined) {
1439+ return promiseRejectedWith(readerLockException('read from'));
1440+ }
1441+ let resolvePromise;
1442+ let rejectPromise;
1443+ const promise = newPromise((resolve, reject) => {
1444+ resolvePromise = resolve;
1445+ rejectPromise = reject;
1446+ });
1447+ const readIntoRequest = {
1448+ _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),
1449+ _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),
1450+ _errorSteps: e => rejectPromise(e)
1451+ };
1452+ ReadableStreamBYOBReaderRead(this, view, readIntoRequest);
1453+ return promise;
1454+ }
1455+ /**
1456+ * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.
1457+ * If the associated stream is errored when the lock is released, the reader will appear errored in the same way
1458+ * from now on; otherwise, the reader will appear closed.
1459+ *
1460+ * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by
1461+ * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to
1462+ * do so will throw a `TypeError` and leave the reader locked to the stream.
1463+ */
1464+ releaseLock() {
1465+ if (!IsReadableStreamBYOBReader(this)) {
1466+ throw byobReaderBrandCheckException('releaseLock');
1467+ }
1468+ if (this._ownerReadableStream === undefined) {
1469+ return;
1470+ }
1471+ if (this._readIntoRequests.length > 0) {
1472+ throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');
1473+ }
1474+ ReadableStreamReaderGenericRelease(this);
1475+ }
1476+}
1477+Object.defineProperties(ReadableStreamBYOBReader.prototype, {
1478+ cancel: { enumerable: true },
1479+ read: { enumerable: true },
1480+ releaseLock: { enumerable: true },
1481+ closed: { enumerable: true }
1482+});
1483+if (typeof SymbolPolyfill.toStringTag === 'symbol') {
1484+ Object.defineProperty(ReadableStreamBYOBReader.prototype, SymbolPolyfill.toStringTag, {
1485+ value: 'ReadableStreamBYOBReader',
1486+ configurable: true
1487+ });
1488+}
1489+// Abstract operations for the readers.
1490+function IsReadableStreamBYOBReader(x) {
1491+ if (!typeIsObject(x)) {
1492+ return false;
1493+ }
1494+ if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {
1495+ return false;
1496+ }
1497+ return x instanceof ReadableStreamBYOBReader;
1498+}
1499+function ReadableStreamBYOBReaderRead(reader, view, readIntoRequest) {
1500+ const stream = reader._ownerReadableStream;
1501+ stream._disturbed = true;
1502+ if (stream._state === 'errored') {
1503+ readIntoRequest._errorSteps(stream._storedError);
1504+ }
1505+ else {
1506+ ReadableByteStreamControllerPullInto(stream._readableStreamController, view, readIntoRequest);
1507+ }
1508+}
1509+// Helper functions for the ReadableStreamBYOBReader.
1510+function byobReaderBrandCheckException(name) {
1511+ return new TypeError(`ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);
1512+}
1513+
1514+function ExtractHighWaterMark(strategy, defaultHWM) {
1515+ const { highWaterMark } = strategy;
1516+ if (highWaterMark === undefined) {
1517+ return defaultHWM;
1518+ }
1519+ if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {
1520+ throw new RangeError('Invalid highWaterMark');
1521+ }
1522+ return highWaterMark;
1523+}
1524+function ExtractSizeAlgorithm(strategy) {
1525+ const { size } = strategy;
1526+ if (!size) {
1527+ return () => 1;
1528+ }
1529+ return size;
1530+}
1531+
1532+function convertQueuingStrategy(init, context) {
1533+ assertDictionary(init, context);
1534+ const highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;
1535+ const size = init === null || init === void 0 ? void 0 : init.size;
1536+ return {
1537+ highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),
1538+ size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)
1539+ };
1540+}
1541+function convertQueuingStrategySize(fn, context) {
1542+ assertFunction(fn, context);
1543+ return chunk => convertUnrestrictedDouble(fn(chunk));
1544+}
1545+
1546+function convertUnderlyingSink(original, context) {
1547+ assertDictionary(original, context);
1548+ const abort = original === null || original === void 0 ? void 0 : original.abort;
1549+ const close = original === null || original === void 0 ? void 0 : original.close;
1550+ const start = original === null || original === void 0 ? void 0 : original.start;
1551+ const type = original === null || original === void 0 ? void 0 : original.type;
1552+ const write = original === null || original === void 0 ? void 0 : original.write;
1553+ return {
1554+ abort: abort === undefined ?
1555+ undefined :
1556+ convertUnderlyingSinkAbortCallback(abort, original, `${context} has member 'abort' that`),
1557+ close: close === undefined ?
1558+ undefined :
1559+ convertUnderlyingSinkCloseCallback(close, original, `${context} has member 'close' that`),
1560+ start: start === undefined ?
1561+ undefined :
1562+ convertUnderlyingSinkStartCallback(start, original, `${context} has member 'start' that`),
1563+ write: write === undefined ?
1564+ undefined :
1565+ convertUnderlyingSinkWriteCallback(write, original, `${context} has member 'write' that`),
1566+ type
1567+ };
1568+}
1569+function convertUnderlyingSinkAbortCallback(fn, original, context) {
1570+ assertFunction(fn, context);
1571+ return (reason) => promiseCall(fn, original, [reason]);
1572+}
1573+function convertUnderlyingSinkCloseCallback(fn, original, context) {
1574+ assertFunction(fn, context);
1575+ return () => promiseCall(fn, original, []);
1576+}
1577+function convertUnderlyingSinkStartCallback(fn, original, context) {
1578+ assertFunction(fn, context);
1579+ return (controller) => reflectCall(fn, original, [controller]);
1580+}
1581+function convertUnderlyingSinkWriteCallback(fn, original, context) {
1582+ assertFunction(fn, context);
1583+ return (chunk, controller) => promiseCall(fn, original, [chunk, controller]);
1584+}
1585+
1586+function assertWritableStream(x, context) {
1587+ if (!IsWritableStream(x)) {
1588+ throw new TypeError(`${context} is not a WritableStream.`);
1589+ }
1590+}
1591+
1592+function isAbortSignal(value) {
1593+ if (typeof value !== 'object' || value === null) {
1594+ return false;
1595+ }
1596+ try {
1597+ return typeof value.aborted === 'boolean';
1598+ }
1599+ catch (_a) {
1600+ // AbortSignal.prototype.aborted throws if its brand check fails
1601+ return false;
1602+ }
1603+}
1604+const supportsAbortController = typeof AbortController === 'function';
1605+/**
1606+ * Construct a new AbortController, if supported by the platform.
1607+ *
1608+ * @internal
1609+ */
1610+function createAbortController() {
1611+ if (supportsAbortController) {
1612+ return new AbortController();
1613+ }
1614+ return undefined;
1615+}
1616+
1617+/**
1618+ * A writable stream represents a destination for data, into which you can write.
1619+ *
1620+ * @public
1621+ */
1622+class WritableStream {
1623+ constructor(rawUnderlyingSink = {}, rawStrategy = {}) {
1624+ if (rawUnderlyingSink === undefined) {
1625+ rawUnderlyingSink = null;
1626+ }
1627+ else {
1628+ assertObject(rawUnderlyingSink, 'First parameter');
1629+ }
1630+ const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');
1631+ const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');
1632+ InitializeWritableStream(this);
1633+ const type = underlyingSink.type;
1634+ if (type !== undefined) {
1635+ throw new RangeError('Invalid type is specified');
1636+ }
1637+ const sizeAlgorithm = ExtractSizeAlgorithm(strategy);
1638+ const highWaterMark = ExtractHighWaterMark(strategy, 1);
1639+ SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);
1640+ }
1641+ /**
1642+ * Returns whether or not the writable stream is locked to a writer.
1643+ */
1644+ get locked() {
1645+ if (!IsWritableStream(this)) {
1646+ throw streamBrandCheckException$2('locked');
1647+ }
1648+ return IsWritableStreamLocked(this);
1649+ }
1650+ /**
1651+ * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be
1652+ * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort
1653+ * mechanism of the underlying sink.
1654+ *
1655+ * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled
1656+ * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel
1657+ * the stream) if the stream is currently locked.
1658+ */
1659+ abort(reason = undefined) {
1660+ if (!IsWritableStream(this)) {
1661+ return promiseRejectedWith(streamBrandCheckException$2('abort'));
1662+ }
1663+ if (IsWritableStreamLocked(this)) {
1664+ return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));
1665+ }
1666+ return WritableStreamAbort(this, reason);
1667+ }
1668+ /**
1669+ * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its
1670+ * close behavior. During this time any further attempts to write will fail (without erroring the stream).
1671+ *
1672+ * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream
1673+ * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with
1674+ * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.
1675+ */
1676+ close() {
1677+ if (!IsWritableStream(this)) {
1678+ return promiseRejectedWith(streamBrandCheckException$2('close'));
1679+ }
1680+ if (IsWritableStreamLocked(this)) {
1681+ return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));
1682+ }
1683+ if (WritableStreamCloseQueuedOrInFlight(this)) {
1684+ return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));
1685+ }
1686+ return WritableStreamClose(this);
1687+ }
1688+ /**
1689+ * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream
1690+ * is locked, no other writer can be acquired until this one is released.
1691+ *
1692+ * This functionality is especially useful for creating abstractions that desire the ability to write to a stream
1693+ * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at
1694+ * the same time, which would cause the resulting written data to be unpredictable and probably useless.
1695+ */
1696+ getWriter() {
1697+ if (!IsWritableStream(this)) {
1698+ throw streamBrandCheckException$2('getWriter');
1699+ }
1700+ return AcquireWritableStreamDefaultWriter(this);
1701+ }
1702+}
1703+Object.defineProperties(WritableStream.prototype, {
1704+ abort: { enumerable: true },
1705+ close: { enumerable: true },
1706+ getWriter: { enumerable: true },
1707+ locked: { enumerable: true }
1708+});
1709+if (typeof SymbolPolyfill.toStringTag === 'symbol') {
1710+ Object.defineProperty(WritableStream.prototype, SymbolPolyfill.toStringTag, {
1711+ value: 'WritableStream',
1712+ configurable: true
1713+ });
1714+}
1715+// Abstract operations for the WritableStream.
1716+function AcquireWritableStreamDefaultWriter(stream) {
1717+ return new WritableStreamDefaultWriter(stream);
1718+}
1719+// Throws if and only if startAlgorithm throws.
1720+function CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark = 1, sizeAlgorithm = () => 1) {
1721+ const stream = Object.create(WritableStream.prototype);
1722+ InitializeWritableStream(stream);
1723+ const controller = Object.create(WritableStreamDefaultController.prototype);
1724+ SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);
1725+ return stream;
1726+}
1727+function InitializeWritableStream(stream) {
1728+ stream._state = 'writable';
1729+ // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is
1730+ // 'erroring' or 'errored'. May be set to an undefined value.
1731+ stream._storedError = undefined;
1732+ stream._writer = undefined;
1733+ // Initialize to undefined first because the constructor of the controller checks this
1734+ // variable to validate the caller.
1735+ stream._writableStreamController = undefined;
1736+ // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data
1737+ // producer without waiting for the queued writes to finish.
1738+ stream._writeRequests = new SimpleQueue();
1739+ // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents
1740+ // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.
1741+ stream._inFlightWriteRequest = undefined;
1742+ // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer
1743+ // has been detached.
1744+ stream._closeRequest = undefined;
1745+ // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it
1746+ // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.
1747+ stream._inFlightCloseRequest = undefined;
1748+ // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.
1749+ stream._pendingAbortRequest = undefined;
1750+ // The backpressure signal set by the controller.
1751+ stream._backpressure = false;
1752+}
1753+function IsWritableStream(x) {
1754+ if (!typeIsObject(x)) {
1755+ return false;
1756+ }
1757+ if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {
1758+ return false;
1759+ }
1760+ return x instanceof WritableStream;
1761+}
1762+function IsWritableStreamLocked(stream) {
1763+ if (stream._writer === undefined) {
1764+ return false;
1765+ }
1766+ return true;
1767+}
1768+function WritableStreamAbort(stream, reason) {
1769+ var _a;
1770+ if (stream._state === 'closed' || stream._state === 'errored') {
1771+ return promiseResolvedWith(undefined);
1772+ }
1773+ stream._writableStreamController._abortReason = reason;
1774+ (_a = stream._writableStreamController._abortController) === null || _a === void 0 ? void 0 : _a.abort();
1775+ // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',
1776+ // but it doesn't know that signaling abort runs author code that might have changed the state.
1777+ // Widen the type again by casting to WritableStreamState.
1778+ const state = stream._state;
1779+ if (state === 'closed' || state === 'errored') {
1780+ return promiseResolvedWith(undefined);
1781+ }
1782+ if (stream._pendingAbortRequest !== undefined) {
1783+ return stream._pendingAbortRequest._promise;
1784+ }
1785+ let wasAlreadyErroring = false;
1786+ if (state === 'erroring') {
1787+ wasAlreadyErroring = true;
1788+ // reason will not be used, so don't keep a reference to it.
1789+ reason = undefined;
1790+ }
1791+ const promise = newPromise((resolve, reject) => {
1792+ stream._pendingAbortRequest = {
1793+ _promise: undefined,
1794+ _resolve: resolve,
1795+ _reject: reject,
1796+ _reason: reason,
1797+ _wasAlreadyErroring: wasAlreadyErroring
1798+ };
1799+ });
1800+ stream._pendingAbortRequest._promise = promise;
1801+ if (!wasAlreadyErroring) {
1802+ WritableStreamStartErroring(stream, reason);
1803+ }
1804+ return promise;
1805+}
1806+function WritableStreamClose(stream) {
1807+ const state = stream._state;
1808+ if (state === 'closed' || state === 'errored') {
1809+ return promiseRejectedWith(new TypeError(`The stream (in ${state} state) is not in the writable state and cannot be closed`));
1810+ }
1811+ const promise = newPromise((resolve, reject) => {
1812+ const closeRequest = {
1813+ _resolve: resolve,
1814+ _reject: reject
1815+ };
1816+ stream._closeRequest = closeRequest;
1817+ });
1818+ const writer = stream._writer;
1819+ if (writer !== undefined && stream._backpressure && state === 'writable') {
1820+ defaultWriterReadyPromiseResolve(writer);
1821+ }
1822+ WritableStreamDefaultControllerClose(stream._writableStreamController);
1823+ return promise;
1824+}
1825+// WritableStream API exposed for controllers.
1826+function WritableStreamAddWriteRequest(stream) {
1827+ const promise = newPromise((resolve, reject) => {
1828+ const writeRequest = {
1829+ _resolve: resolve,
1830+ _reject: reject
1831+ };
1832+ stream._writeRequests.push(writeRequest);
1833+ });
1834+ return promise;
1835+}
1836+function WritableStreamDealWithRejection(stream, error) {
1837+ const state = stream._state;
1838+ if (state === 'writable') {
1839+ WritableStreamStartErroring(stream, error);
1840+ return;
1841+ }
1842+ WritableStreamFinishErroring(stream);
1843+}
1844+function WritableStreamStartErroring(stream, reason) {
1845+ const controller = stream._writableStreamController;
1846+ stream._state = 'erroring';
1847+ stream._storedError = reason;
1848+ const writer = stream._writer;
1849+ if (writer !== undefined) {
1850+ WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);
1851+ }
1852+ if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {
1853+ WritableStreamFinishErroring(stream);
1854+ }
1855+}
1856+function WritableStreamFinishErroring(stream) {
1857+ stream._state = 'errored';
1858+ stream._writableStreamController[ErrorSteps]();
1859+ const storedError = stream._storedError;
1860+ stream._writeRequests.forEach(writeRequest => {
1861+ writeRequest._reject(storedError);
1862+ });
1863+ stream._writeRequests = new SimpleQueue();
1864+ if (stream._pendingAbortRequest === undefined) {
1865+ WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
1866+ return;
1867+ }
1868+ const abortRequest = stream._pendingAbortRequest;
1869+ stream._pendingAbortRequest = undefined;
1870+ if (abortRequest._wasAlreadyErroring) {
1871+ abortRequest._reject(storedError);
1872+ WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
1873+ return;
1874+ }
1875+ const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);
1876+ uponPromise(promise, () => {
1877+ abortRequest._resolve();
1878+ WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
1879+ }, (reason) => {
1880+ abortRequest._reject(reason);
1881+ WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
1882+ });
1883+}
1884+function WritableStreamFinishInFlightWrite(stream) {
1885+ stream._inFlightWriteRequest._resolve(undefined);
1886+ stream._inFlightWriteRequest = undefined;
1887+}
1888+function WritableStreamFinishInFlightWriteWithError(stream, error) {
1889+ stream._inFlightWriteRequest._reject(error);
1890+ stream._inFlightWriteRequest = undefined;
1891+ WritableStreamDealWithRejection(stream, error);
1892+}
1893+function WritableStreamFinishInFlightClose(stream) {
1894+ stream._inFlightCloseRequest._resolve(undefined);
1895+ stream._inFlightCloseRequest = undefined;
1896+ const state = stream._state;
1897+ if (state === 'erroring') {
1898+ // The error was too late to do anything, so it is ignored.
1899+ stream._storedError = undefined;
1900+ if (stream._pendingAbortRequest !== undefined) {
1901+ stream._pendingAbortRequest._resolve();
1902+ stream._pendingAbortRequest = undefined;
1903+ }
1904+ }
1905+ stream._state = 'closed';
1906+ const writer = stream._writer;
1907+ if (writer !== undefined) {
1908+ defaultWriterClosedPromiseResolve(writer);
1909+ }
1910+}
1911+function WritableStreamFinishInFlightCloseWithError(stream, error) {
1912+ stream._inFlightCloseRequest._reject(error);
1913+ stream._inFlightCloseRequest = undefined;
1914+ // Never execute sink abort() after sink close().
1915+ if (stream._pendingAbortRequest !== undefined) {
1916+ stream._pendingAbortRequest._reject(error);
1917+ stream._pendingAbortRequest = undefined;
1918+ }
1919+ WritableStreamDealWithRejection(stream, error);
1920+}
1921+// TODO(ricea): Fix alphabetical order.
1922+function WritableStreamCloseQueuedOrInFlight(stream) {
1923+ if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {
1924+ return false;
1925+ }
1926+ return true;
1927+}
1928+function WritableStreamHasOperationMarkedInFlight(stream) {
1929+ if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {
1930+ return false;
1931+ }
1932+ return true;
1933+}
1934+function WritableStreamMarkCloseRequestInFlight(stream) {
1935+ stream._inFlightCloseRequest = stream._closeRequest;
1936+ stream._closeRequest = undefined;
1937+}
1938+function WritableStreamMarkFirstWriteRequestInFlight(stream) {
1939+ stream._inFlightWriteRequest = stream._writeRequests.shift();
1940+}
1941+function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) {
1942+ if (stream._closeRequest !== undefined) {
1943+ stream._closeRequest._reject(stream._storedError);
1944+ stream._closeRequest = undefined;
1945+ }
1946+ const writer = stream._writer;
1947+ if (writer !== undefined) {
1948+ defaultWriterClosedPromiseReject(writer, stream._storedError);
1949+ }
1950+}
1951+function WritableStreamUpdateBackpressure(stream, backpressure) {
1952+ const writer = stream._writer;
1953+ if (writer !== undefined && backpressure !== stream._backpressure) {
1954+ if (backpressure) {
1955+ defaultWriterReadyPromiseReset(writer);
1956+ }
1957+ else {
1958+ defaultWriterReadyPromiseResolve(writer);
1959+ }
1960+ }
1961+ stream._backpressure = backpressure;
1962+}
1963+/**
1964+ * A default writer vended by a {@link WritableStream}.
1965+ *
1966+ * @public
1967+ */
1968+class WritableStreamDefaultWriter {
1969+ constructor(stream) {
1970+ assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');
1971+ assertWritableStream(stream, 'First parameter');
1972+ if (IsWritableStreamLocked(stream)) {
1973+ throw new TypeError('This stream has already been locked for exclusive writing by another writer');
1974+ }
1975+ this._ownerWritableStream = stream;
1976+ stream._writer = this;
1977+ const state = stream._state;
1978+ if (state === 'writable') {
1979+ if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {
1980+ defaultWriterReadyPromiseInitialize(this);
1981+ }
1982+ else {
1983+ defaultWriterReadyPromiseInitializeAsResolved(this);
1984+ }
1985+ defaultWriterClosedPromiseInitialize(this);
1986+ }
1987+ else if (state === 'erroring') {
1988+ defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);
1989+ defaultWriterClosedPromiseInitialize(this);
1990+ }
1991+ else if (state === 'closed') {
1992+ defaultWriterReadyPromiseInitializeAsResolved(this);
1993+ defaultWriterClosedPromiseInitializeAsResolved(this);
1994+ }
1995+ else {
1996+ const storedError = stream._storedError;
1997+ defaultWriterReadyPromiseInitializeAsRejected(this, storedError);
1998+ defaultWriterClosedPromiseInitializeAsRejected(this, storedError);
1999+ }
2000+ }
2001+ /**
2002+ * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or
2003+ * the writer’s lock is released before the stream finishes closing.
2004+ */
2005+ get closed() {
2006+ if (!IsWritableStreamDefaultWriter(this)) {
2007+ return promiseRejectedWith(defaultWriterBrandCheckException('closed'));
2008+ }
2009+ return this._closedPromise;
2010+ }
2011+ /**
2012+ * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.
2013+ * A producer can use this information to determine the right amount of data to write.
2014+ *
2015+ * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort
2016+ * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when
2017+ * the writer’s lock is released.
2018+ */
2019+ get desiredSize() {
2020+ if (!IsWritableStreamDefaultWriter(this)) {
2021+ throw defaultWriterBrandCheckException('desiredSize');
2022+ }
2023+ if (this._ownerWritableStream === undefined) {
2024+ throw defaultWriterLockException('desiredSize');
2025+ }
2026+ return WritableStreamDefaultWriterGetDesiredSize(this);
2027+ }
2028+ /**
2029+ * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions
2030+ * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips
2031+ * back to zero or below, the getter will return a new promise that stays pending until the next transition.
2032+ *
2033+ * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become
2034+ * rejected.
2035+ */
2036+ get ready() {
2037+ if (!IsWritableStreamDefaultWriter(this)) {
2038+ return promiseRejectedWith(defaultWriterBrandCheckException('ready'));
2039+ }
2040+ return this._readyPromise;
2041+ }
2042+ /**
2043+ * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.
2044+ */
2045+ abort(reason = undefined) {
2046+ if (!IsWritableStreamDefaultWriter(this)) {
2047+ return promiseRejectedWith(defaultWriterBrandCheckException('abort'));
2048+ }
2049+ if (this._ownerWritableStream === undefined) {
2050+ return promiseRejectedWith(defaultWriterLockException('abort'));
2051+ }
2052+ return WritableStreamDefaultWriterAbort(this, reason);
2053+ }
2054+ /**
2055+ * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.
2056+ */
2057+ close() {
2058+ if (!IsWritableStreamDefaultWriter(this)) {
2059+ return promiseRejectedWith(defaultWriterBrandCheckException('close'));
2060+ }
2061+ const stream = this._ownerWritableStream;
2062+ if (stream === undefined) {
2063+ return promiseRejectedWith(defaultWriterLockException('close'));
2064+ }
2065+ if (WritableStreamCloseQueuedOrInFlight(stream)) {
2066+ return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));
2067+ }
2068+ return WritableStreamDefaultWriterClose(this);
2069+ }
2070+ /**
2071+ * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.
2072+ * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from
2073+ * now on; otherwise, the writer will appear closed.
2074+ *
2075+ * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the
2076+ * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).
2077+ * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents
2078+ * other producers from writing in an interleaved manner.
2079+ */
2080+ releaseLock() {
2081+ if (!IsWritableStreamDefaultWriter(this)) {
2082+ throw defaultWriterBrandCheckException('releaseLock');
2083+ }
2084+ const stream = this._ownerWritableStream;
2085+ if (stream === undefined) {
2086+ return;
2087+ }
2088+ WritableStreamDefaultWriterRelease(this);
2089+ }
2090+ write(chunk = undefined) {
2091+ if (!IsWritableStreamDefaultWriter(this)) {
2092+ return promiseRejectedWith(defaultWriterBrandCheckException('write'));
2093+ }
2094+ if (this._ownerWritableStream === undefined) {
2095+ return promiseRejectedWith(defaultWriterLockException('write to'));
2096+ }
2097+ return WritableStreamDefaultWriterWrite(this, chunk);
2098+ }
2099+}
2100+Object.defineProperties(WritableStreamDefaultWriter.prototype, {
2101+ abort: { enumerable: true },
2102+ close: { enumerable: true },
2103+ releaseLock: { enumerable: true },
2104+ write: { enumerable: true },
2105+ closed: { enumerable: true },
2106+ desiredSize: { enumerable: true },
2107+ ready: { enumerable: true }
2108+});
2109+if (typeof SymbolPolyfill.toStringTag === 'symbol') {
2110+ Object.defineProperty(WritableStreamDefaultWriter.prototype, SymbolPolyfill.toStringTag, {
2111+ value: 'WritableStreamDefaultWriter',
2112+ configurable: true
2113+ });
2114+}
2115+// Abstract operations for the WritableStreamDefaultWriter.
2116+function IsWritableStreamDefaultWriter(x) {
2117+ if (!typeIsObject(x)) {
2118+ return false;
2119+ }
2120+ if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {
2121+ return false;
2122+ }
2123+ return x instanceof WritableStreamDefaultWriter;
2124+}
2125+// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.
2126+function WritableStreamDefaultWriterAbort(writer, reason) {
2127+ const stream = writer._ownerWritableStream;
2128+ return WritableStreamAbort(stream, reason);
2129+}
2130+function WritableStreamDefaultWriterClose(writer) {
2131+ const stream = writer._ownerWritableStream;
2132+ return WritableStreamClose(stream);
2133+}
2134+function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) {
2135+ const stream = writer._ownerWritableStream;
2136+ const state = stream._state;
2137+ if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {
2138+ return promiseResolvedWith(undefined);
2139+ }
2140+ if (state === 'errored') {
2141+ return promiseRejectedWith(stream._storedError);
2142+ }
2143+ return WritableStreamDefaultWriterClose(writer);
2144+}
2145+function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) {
2146+ if (writer._closedPromiseState === 'pending') {
2147+ defaultWriterClosedPromiseReject(writer, error);
2148+ }
2149+ else {
2150+ defaultWriterClosedPromiseResetToRejected(writer, error);
2151+ }
2152+}
2153+function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) {
2154+ if (writer._readyPromiseState === 'pending') {
2155+ defaultWriterReadyPromiseReject(writer, error);
2156+ }
2157+ else {
2158+ defaultWriterReadyPromiseResetToRejected(writer, error);
2159+ }
2160+}
2161+function WritableStreamDefaultWriterGetDesiredSize(writer) {
2162+ const stream = writer._ownerWritableStream;
2163+ const state = stream._state;
2164+ if (state === 'errored' || state === 'erroring') {
2165+ return null;
2166+ }
2167+ if (state === 'closed') {
2168+ return 0;
2169+ }
2170+ return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);
2171+}
2172+function WritableStreamDefaultWriterRelease(writer) {
2173+ const stream = writer._ownerWritableStream;
2174+ const releasedError = new TypeError(`Writer was released and can no longer be used to monitor the stream's closedness`);
2175+ WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);
2176+ // The state transitions to "errored" before the sink abort() method runs, but the writer.closed promise is not
2177+ // rejected until afterwards. This means that simply testing state will not work.
2178+ WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);
2179+ stream._writer = undefined;
2180+ writer._ownerWritableStream = undefined;
2181+}
2182+function WritableStreamDefaultWriterWrite(writer, chunk) {
2183+ const stream = writer._ownerWritableStream;
2184+ const controller = stream._writableStreamController;
2185+ const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);
2186+ if (stream !== writer._ownerWritableStream) {
2187+ return promiseRejectedWith(defaultWriterLockException('write to'));
2188+ }
2189+ const state = stream._state;
2190+ if (state === 'errored') {
2191+ return promiseRejectedWith(stream._storedError);
2192+ }
2193+ if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {
2194+ return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));
2195+ }
2196+ if (state === 'erroring') {
2197+ return promiseRejectedWith(stream._storedError);
2198+ }
2199+ const promise = WritableStreamAddWriteRequest(stream);
2200+ WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);
2201+ return promise;
2202+}
2203+const closeSentinel = {};
2204+/**
2205+ * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.
2206+ *
2207+ * @public
2208+ */
2209+class WritableStreamDefaultController {
2210+ constructor() {
2211+ throw new TypeError('Illegal constructor');
2212+ }
2213+ /**
2214+ * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.
2215+ *
2216+ * @deprecated
2217+ * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.
2218+ * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.
2219+ */
2220+ get abortReason() {
2221+ if (!IsWritableStreamDefaultController(this)) {
2222+ throw defaultControllerBrandCheckException$2('abortReason');
2223+ }
2224+ return this._abortReason;
2225+ }
2226+ /**
2227+ * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.
2228+ */
2229+ get signal() {
2230+ if (!IsWritableStreamDefaultController(this)) {
2231+ throw defaultControllerBrandCheckException$2('signal');
2232+ }
2233+ if (this._abortController === undefined) {
2234+ // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.
2235+ // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,
2236+ // so instead we only implement support for `signal` if we find a global `AbortController` constructor.
2237+ throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');
2238+ }
2239+ return this._abortController.signal;
2240+ }
2241+ /**
2242+ * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.
2243+ *
2244+ * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying
2245+ * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the
2246+ * normal lifecycle of interactions with the underlying sink.
2247+ */
2248+ error(e = undefined) {
2249+ if (!IsWritableStreamDefaultController(this)) {
2250+ throw defaultControllerBrandCheckException$2('error');
2251+ }
2252+ const state = this._controlledWritableStream._state;
2253+ if (state !== 'writable') {
2254+ // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so
2255+ // just treat it as a no-op.
2256+ return;
2257+ }
2258+ WritableStreamDefaultControllerError(this, e);
2259+ }
2260+ /** @internal */
2261+ [AbortSteps](reason) {
2262+ const result = this._abortAlgorithm(reason);
2263+ WritableStreamDefaultControllerClearAlgorithms(this);
2264+ return result;
2265+ }
2266+ /** @internal */
2267+ [ErrorSteps]() {
2268+ ResetQueue(this);
2269+ }
2270+}
2271+Object.defineProperties(WritableStreamDefaultController.prototype, {
2272+ abortReason: { enumerable: true },
2273+ signal: { enumerable: true },
2274+ error: { enumerable: true }
2275+});
2276+if (typeof SymbolPolyfill.toStringTag === 'symbol') {
2277+ Object.defineProperty(WritableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {
2278+ value: 'WritableStreamDefaultController',
2279+ configurable: true
2280+ });
2281+}
2282+// Abstract operations implementing interface required by the WritableStream.
2283+function IsWritableStreamDefaultController(x) {
2284+ if (!typeIsObject(x)) {
2285+ return false;
2286+ }
2287+ if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {
2288+ return false;
2289+ }
2290+ return x instanceof WritableStreamDefaultController;
2291+}
2292+function SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {
2293+ controller._controlledWritableStream = stream;
2294+ stream._writableStreamController = controller;
2295+ // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.
2296+ controller._queue = undefined;
2297+ controller._queueTotalSize = undefined;
2298+ ResetQueue(controller);
2299+ controller._abortReason = undefined;
2300+ controller._abortController = createAbortController();
2301+ controller._started = false;
2302+ controller._strategySizeAlgorithm = sizeAlgorithm;
2303+ controller._strategyHWM = highWaterMark;
2304+ controller._writeAlgorithm = writeAlgorithm;
2305+ controller._closeAlgorithm = closeAlgorithm;
2306+ controller._abortAlgorithm = abortAlgorithm;
2307+ const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
2308+ WritableStreamUpdateBackpressure(stream, backpressure);
2309+ const startResult = startAlgorithm();
2310+ const startPromise = promiseResolvedWith(startResult);
2311+ uponPromise(startPromise, () => {
2312+ controller._started = true;
2313+ WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
2314+ }, r => {
2315+ controller._started = true;
2316+ WritableStreamDealWithRejection(stream, r);
2317+ });
2318+}
2319+function SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream, underlyingSink, highWaterMark, sizeAlgorithm) {
2320+ const controller = Object.create(WritableStreamDefaultController.prototype);
2321+ let startAlgorithm = () => undefined;
2322+ let writeAlgorithm = () => promiseResolvedWith(undefined);
2323+ let closeAlgorithm = () => promiseResolvedWith(undefined);
2324+ let abortAlgorithm = () => promiseResolvedWith(undefined);
2325+ if (underlyingSink.start !== undefined) {
2326+ startAlgorithm = () => underlyingSink.start(controller);
2327+ }
2328+ if (underlyingSink.write !== undefined) {
2329+ writeAlgorithm = chunk => underlyingSink.write(chunk, controller);
2330+ }
2331+ if (underlyingSink.close !== undefined) {
2332+ closeAlgorithm = () => underlyingSink.close();
2333+ }
2334+ if (underlyingSink.abort !== undefined) {
2335+ abortAlgorithm = reason => underlyingSink.abort(reason);
2336+ }
2337+ SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);
2338+}
2339+// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.
2340+function WritableStreamDefaultControllerClearAlgorithms(controller) {
2341+ controller._writeAlgorithm = undefined;
2342+ controller._closeAlgorithm = undefined;
2343+ controller._abortAlgorithm = undefined;
2344+ controller._strategySizeAlgorithm = undefined;
2345+}
2346+function WritableStreamDefaultControllerClose(controller) {
2347+ EnqueueValueWithSize(controller, closeSentinel, 0);
2348+ WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
2349+}
2350+function WritableStreamDefaultControllerGetChunkSize(controller, chunk) {
2351+ try {
2352+ return controller._strategySizeAlgorithm(chunk);
2353+ }
2354+ catch (chunkSizeE) {
2355+ WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);
2356+ return 1;
2357+ }
2358+}
2359+function WritableStreamDefaultControllerGetDesiredSize(controller) {
2360+ return controller._strategyHWM - controller._queueTotalSize;
2361+}
2362+function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) {
2363+ try {
2364+ EnqueueValueWithSize(controller, chunk, chunkSize);
2365+ }
2366+ catch (enqueueE) {
2367+ WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);
2368+ return;
2369+ }
2370+ const stream = controller._controlledWritableStream;
2371+ if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {
2372+ const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
2373+ WritableStreamUpdateBackpressure(stream, backpressure);
2374+ }
2375+ WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
2376+}
2377+// Abstract operations for the WritableStreamDefaultController.
2378+function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {
2379+ const stream = controller._controlledWritableStream;
2380+ if (!controller._started) {
2381+ return;
2382+ }
2383+ if (stream._inFlightWriteRequest !== undefined) {
2384+ return;
2385+ }
2386+ const state = stream._state;
2387+ if (state === 'erroring') {
2388+ WritableStreamFinishErroring(stream);
2389+ return;
2390+ }
2391+ if (controller._queue.length === 0) {
2392+ return;
2393+ }
2394+ const value = PeekQueueValue(controller);
2395+ if (value === closeSentinel) {
2396+ WritableStreamDefaultControllerProcessClose(controller);
2397+ }
2398+ else {
2399+ WritableStreamDefaultControllerProcessWrite(controller, value);
2400+ }
2401+}
2402+function WritableStreamDefaultControllerErrorIfNeeded(controller, error) {
2403+ if (controller._controlledWritableStream._state === 'writable') {
2404+ WritableStreamDefaultControllerError(controller, error);
2405+ }
2406+}
2407+function WritableStreamDefaultControllerProcessClose(controller) {
2408+ const stream = controller._controlledWritableStream;
2409+ WritableStreamMarkCloseRequestInFlight(stream);
2410+ DequeueValue(controller);
2411+ const sinkClosePromise = controller._closeAlgorithm();
2412+ WritableStreamDefaultControllerClearAlgorithms(controller);
2413+ uponPromise(sinkClosePromise, () => {
2414+ WritableStreamFinishInFlightClose(stream);
2415+ }, reason => {
2416+ WritableStreamFinishInFlightCloseWithError(stream, reason);
2417+ });
2418+}
2419+function WritableStreamDefaultControllerProcessWrite(controller, chunk) {
2420+ const stream = controller._controlledWritableStream;
2421+ WritableStreamMarkFirstWriteRequestInFlight(stream);
2422+ const sinkWritePromise = controller._writeAlgorithm(chunk);
2423+ uponPromise(sinkWritePromise, () => {
2424+ WritableStreamFinishInFlightWrite(stream);
2425+ const state = stream._state;
2426+ DequeueValue(controller);
2427+ if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {
2428+ const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
2429+ WritableStreamUpdateBackpressure(stream, backpressure);
2430+ }
2431+ WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
2432+ }, reason => {
2433+ if (stream._state === 'writable') {
2434+ WritableStreamDefaultControllerClearAlgorithms(controller);
2435+ }
2436+ WritableStreamFinishInFlightWriteWithError(stream, reason);
2437+ });
2438+}
2439+function WritableStreamDefaultControllerGetBackpressure(controller) {
2440+ const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);
2441+ return desiredSize <= 0;
2442+}
2443+// A client of WritableStreamDefaultController may use these functions directly to bypass state check.
2444+function WritableStreamDefaultControllerError(controller, error) {
2445+ const stream = controller._controlledWritableStream;
2446+ WritableStreamDefaultControllerClearAlgorithms(controller);
2447+ WritableStreamStartErroring(stream, error);
2448+}
2449+// Helper functions for the WritableStream.
2450+function streamBrandCheckException$2(name) {
2451+ return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);
2452+}
2453+// Helper functions for the WritableStreamDefaultController.
2454+function defaultControllerBrandCheckException$2(name) {
2455+ return new TypeError(`WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);
2456+}
2457+// Helper functions for the WritableStreamDefaultWriter.
2458+function defaultWriterBrandCheckException(name) {
2459+ return new TypeError(`WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);
2460+}
2461+function defaultWriterLockException(name) {
2462+ return new TypeError('Cannot ' + name + ' a stream using a released writer');
2463+}
2464+function defaultWriterClosedPromiseInitialize(writer) {
2465+ writer._closedPromise = newPromise((resolve, reject) => {
2466+ writer._closedPromise_resolve = resolve;
2467+ writer._closedPromise_reject = reject;
2468+ writer._closedPromiseState = 'pending';
2469+ });
2470+}
2471+function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) {
2472+ defaultWriterClosedPromiseInitialize(writer);
2473+ defaultWriterClosedPromiseReject(writer, reason);
2474+}
2475+function defaultWriterClosedPromiseInitializeAsResolved(writer) {
2476+ defaultWriterClosedPromiseInitialize(writer);
2477+ defaultWriterClosedPromiseResolve(writer);
2478+}
2479+function defaultWriterClosedPromiseReject(writer, reason) {
2480+ if (writer._closedPromise_reject === undefined) {
2481+ return;
2482+ }
2483+ setPromiseIsHandledToTrue(writer._closedPromise);
2484+ writer._closedPromise_reject(reason);
2485+ writer._closedPromise_resolve = undefined;
2486+ writer._closedPromise_reject = undefined;
2487+ writer._closedPromiseState = 'rejected';
2488+}
2489+function defaultWriterClosedPromiseResetToRejected(writer, reason) {
2490+ defaultWriterClosedPromiseInitializeAsRejected(writer, reason);
2491+}
2492+function defaultWriterClosedPromiseResolve(writer) {
2493+ if (writer._closedPromise_resolve === undefined) {
2494+ return;
2495+ }
2496+ writer._closedPromise_resolve(undefined);
2497+ writer._closedPromise_resolve = undefined;
2498+ writer._closedPromise_reject = undefined;
2499+ writer._closedPromiseState = 'resolved';
2500+}
2501+function defaultWriterReadyPromiseInitialize(writer) {
2502+ writer._readyPromise = newPromise((resolve, reject) => {
2503+ writer._readyPromise_resolve = resolve;
2504+ writer._readyPromise_reject = reject;
2505+ });
2506+ writer._readyPromiseState = 'pending';
2507+}
2508+function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) {
2509+ defaultWriterReadyPromiseInitialize(writer);
2510+ defaultWriterReadyPromiseReject(writer, reason);
2511+}
2512+function defaultWriterReadyPromiseInitializeAsResolved(writer) {
2513+ defaultWriterReadyPromiseInitialize(writer);
2514+ defaultWriterReadyPromiseResolve(writer);
2515+}
2516+function defaultWriterReadyPromiseReject(writer, reason) {
2517+ if (writer._readyPromise_reject === undefined) {
2518+ return;
2519+ }
2520+ setPromiseIsHandledToTrue(writer._readyPromise);
2521+ writer._readyPromise_reject(reason);
2522+ writer._readyPromise_resolve = undefined;
2523+ writer._readyPromise_reject = undefined;
2524+ writer._readyPromiseState = 'rejected';
2525+}
2526+function defaultWriterReadyPromiseReset(writer) {
2527+ defaultWriterReadyPromiseInitialize(writer);
2528+}
2529+function defaultWriterReadyPromiseResetToRejected(writer, reason) {
2530+ defaultWriterReadyPromiseInitializeAsRejected(writer, reason);
2531+}
2532+function defaultWriterReadyPromiseResolve(writer) {
2533+ if (writer._readyPromise_resolve === undefined) {
2534+ return;
2535+ }
2536+ writer._readyPromise_resolve(undefined);
2537+ writer._readyPromise_resolve = undefined;
2538+ writer._readyPromise_reject = undefined;
2539+ writer._readyPromiseState = 'fulfilled';
2540+}
2541+
2542+/// <reference lib="dom" />
2543+const NativeDOMException = typeof DOMException !== 'undefined' ? DOMException : undefined;
2544+
2545+/// <reference types="node" />
2546+function isDOMExceptionConstructor(ctor) {
2547+ if (!(typeof ctor === 'function' || typeof ctor === 'object')) {
2548+ return false;
2549+ }
2550+ try {
2551+ new ctor();
2552+ return true;
2553+ }
2554+ catch (_a) {
2555+ return false;
2556+ }
2557+}
2558+function createDOMExceptionPolyfill() {
2559+ // eslint-disable-next-line no-shadow
2560+ const ctor = function DOMException(message, name) {
2561+ this.message = message || '';
2562+ this.name = name || 'Error';
2563+ if (Error.captureStackTrace) {
2564+ Error.captureStackTrace(this, this.constructor);
2565+ }
2566+ };
2567+ ctor.prototype = Object.create(Error.prototype);
2568+ Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });
2569+ return ctor;
2570+}
2571+// eslint-disable-next-line no-redeclare
2572+const DOMException$1 = isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();
2573+
2574+function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventCancel, signal) {
2575+ const reader = AcquireReadableStreamDefaultReader(source);
2576+ const writer = AcquireWritableStreamDefaultWriter(dest);
2577+ source._disturbed = true;
2578+ let shuttingDown = false;
2579+ // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.
2580+ let currentWrite = promiseResolvedWith(undefined);
2581+ return newPromise((resolve, reject) => {
2582+ let abortAlgorithm;
2583+ if (signal !== undefined) {
2584+ abortAlgorithm = () => {
2585+ const error = new DOMException$1('Aborted', 'AbortError');
2586+ const actions = [];
2587+ if (!preventAbort) {
2588+ actions.push(() => {
2589+ if (dest._state === 'writable') {
2590+ return WritableStreamAbort(dest, error);
2591+ }
2592+ return promiseResolvedWith(undefined);
2593+ });
2594+ }
2595+ if (!preventCancel) {
2596+ actions.push(() => {
2597+ if (source._state === 'readable') {
2598+ return ReadableStreamCancel(source, error);
2599+ }
2600+ return promiseResolvedWith(undefined);
2601+ });
2602+ }
2603+ shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);
2604+ };
2605+ if (signal.aborted) {
2606+ abortAlgorithm();
2607+ return;
2608+ }
2609+ signal.addEventListener('abort', abortAlgorithm);
2610+ }
2611+ // Using reader and writer, read all chunks from this and write them to dest
2612+ // - Backpressure must be enforced
2613+ // - Shutdown must stop all activity
2614+ function pipeLoop() {
2615+ return newPromise((resolveLoop, rejectLoop) => {
2616+ function next(done) {
2617+ if (done) {
2618+ resolveLoop();
2619+ }
2620+ else {
2621+ // Use `PerformPromiseThen` instead of `uponPromise` to avoid
2622+ // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers
2623+ PerformPromiseThen(pipeStep(), next, rejectLoop);
2624+ }
2625+ }
2626+ next(false);
2627+ });
2628+ }
2629+ function pipeStep() {
2630+ if (shuttingDown) {
2631+ return promiseResolvedWith(true);
2632+ }
2633+ return PerformPromiseThen(writer._readyPromise, () => {
2634+ return newPromise((resolveRead, rejectRead) => {
2635+ ReadableStreamDefaultReaderRead(reader, {
2636+ _chunkSteps: chunk => {
2637+ currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);
2638+ resolveRead(false);
2639+ },
2640+ _closeSteps: () => resolveRead(true),
2641+ _errorSteps: rejectRead
2642+ });
2643+ });
2644+ });
2645+ }
2646+ // Errors must be propagated forward
2647+ isOrBecomesErrored(source, reader._closedPromise, storedError => {
2648+ if (!preventAbort) {
2649+ shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);
2650+ }
2651+ else {
2652+ shutdown(true, storedError);
2653+ }
2654+ });
2655+ // Errors must be propagated backward
2656+ isOrBecomesErrored(dest, writer._closedPromise, storedError => {
2657+ if (!preventCancel) {
2658+ shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);
2659+ }
2660+ else {
2661+ shutdown(true, storedError);
2662+ }
2663+ });
2664+ // Closing must be propagated forward
2665+ isOrBecomesClosed(source, reader._closedPromise, () => {
2666+ if (!preventClose) {
2667+ shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));
2668+ }
2669+ else {
2670+ shutdown();
2671+ }
2672+ });
2673+ // Closing must be propagated backward
2674+ if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {
2675+ const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');
2676+ if (!preventCancel) {
2677+ shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);
2678+ }
2679+ else {
2680+ shutdown(true, destClosed);
2681+ }
2682+ }
2683+ setPromiseIsHandledToTrue(pipeLoop());
2684+ function waitForWritesToFinish() {
2685+ // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait
2686+ // for that too.
2687+ const oldCurrentWrite = currentWrite;
2688+ return PerformPromiseThen(currentWrite, () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined);
2689+ }
2690+ function isOrBecomesErrored(stream, promise, action) {
2691+ if (stream._state === 'errored') {
2692+ action(stream._storedError);
2693+ }
2694+ else {
2695+ uponRejection(promise, action);
2696+ }
2697+ }
2698+ function isOrBecomesClosed(stream, promise, action) {
2699+ if (stream._state === 'closed') {
2700+ action();
2701+ }
2702+ else {
2703+ uponFulfillment(promise, action);
2704+ }
2705+ }
2706+ function shutdownWithAction(action, originalIsError, originalError) {
2707+ if (shuttingDown) {
2708+ return;
2709+ }
2710+ shuttingDown = true;
2711+ if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {
2712+ uponFulfillment(waitForWritesToFinish(), doTheRest);
2713+ }
2714+ else {
2715+ doTheRest();
2716+ }
2717+ function doTheRest() {
2718+ uponPromise(action(), () => finalize(originalIsError, originalError), newError => finalize(true, newError));
2719+ }
2720+ }
2721+ function shutdown(isError, error) {
2722+ if (shuttingDown) {
2723+ return;
2724+ }
2725+ shuttingDown = true;
2726+ if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {
2727+ uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));
2728+ }
2729+ else {
2730+ finalize(isError, error);
2731+ }
2732+ }
2733+ function finalize(isError, error) {
2734+ WritableStreamDefaultWriterRelease(writer);
2735+ ReadableStreamReaderGenericRelease(reader);
2736+ if (signal !== undefined) {
2737+ signal.removeEventListener('abort', abortAlgorithm);
2738+ }
2739+ if (isError) {
2740+ reject(error);
2741+ }
2742+ else {
2743+ resolve(undefined);
2744+ }
2745+ }
2746+ });
2747+}
2748+
2749+/**
2750+ * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.
2751+ *
2752+ * @public
2753+ */
2754+class ReadableStreamDefaultController {
2755+ constructor() {
2756+ throw new TypeError('Illegal constructor');
2757+ }
2758+ /**
2759+ * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is
2760+ * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.
2761+ */
2762+ get desiredSize() {
2763+ if (!IsReadableStreamDefaultController(this)) {
2764+ throw defaultControllerBrandCheckException$1('desiredSize');
2765+ }
2766+ return ReadableStreamDefaultControllerGetDesiredSize(this);
2767+ }
2768+ /**
2769+ * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from
2770+ * the stream, but once those are read, the stream will become closed.
2771+ */
2772+ close() {
2773+ if (!IsReadableStreamDefaultController(this)) {
2774+ throw defaultControllerBrandCheckException$1('close');
2775+ }
2776+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {
2777+ throw new TypeError('The stream is not in a state that permits close');
2778+ }
2779+ ReadableStreamDefaultControllerClose(this);
2780+ }
2781+ enqueue(chunk = undefined) {
2782+ if (!IsReadableStreamDefaultController(this)) {
2783+ throw defaultControllerBrandCheckException$1('enqueue');
2784+ }
2785+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {
2786+ throw new TypeError('The stream is not in a state that permits enqueue');
2787+ }
2788+ return ReadableStreamDefaultControllerEnqueue(this, chunk);
2789+ }
2790+ /**
2791+ * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.
2792+ */
2793+ error(e = undefined) {
2794+ if (!IsReadableStreamDefaultController(this)) {
2795+ throw defaultControllerBrandCheckException$1('error');
2796+ }
2797+ ReadableStreamDefaultControllerError(this, e);
2798+ }
2799+ /** @internal */
2800+ [CancelSteps](reason) {
2801+ ResetQueue(this);
2802+ const result = this._cancelAlgorithm(reason);
2803+ ReadableStreamDefaultControllerClearAlgorithms(this);
2804+ return result;
2805+ }
2806+ /** @internal */
2807+ [PullSteps](readRequest) {
2808+ const stream = this._controlledReadableStream;
2809+ if (this._queue.length > 0) {
2810+ const chunk = DequeueValue(this);
2811+ if (this._closeRequested && this._queue.length === 0) {
2812+ ReadableStreamDefaultControllerClearAlgorithms(this);
2813+ ReadableStreamClose(stream);
2814+ }
2815+ else {
2816+ ReadableStreamDefaultControllerCallPullIfNeeded(this);
2817+ }
2818+ readRequest._chunkSteps(chunk);
2819+ }
2820+ else {
2821+ ReadableStreamAddReadRequest(stream, readRequest);
2822+ ReadableStreamDefaultControllerCallPullIfNeeded(this);
2823+ }
2824+ }
2825+}
2826+Object.defineProperties(ReadableStreamDefaultController.prototype, {
2827+ close: { enumerable: true },
2828+ enqueue: { enumerable: true },
2829+ error: { enumerable: true },
2830+ desiredSize: { enumerable: true }
2831+});
2832+if (typeof SymbolPolyfill.toStringTag === 'symbol') {
2833+ Object.defineProperty(ReadableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {
2834+ value: 'ReadableStreamDefaultController',
2835+ configurable: true
2836+ });
2837+}
2838+// Abstract operations for the ReadableStreamDefaultController.
2839+function IsReadableStreamDefaultController(x) {
2840+ if (!typeIsObject(x)) {
2841+ return false;
2842+ }
2843+ if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {
2844+ return false;
2845+ }
2846+ return x instanceof ReadableStreamDefaultController;
2847+}
2848+function ReadableStreamDefaultControllerCallPullIfNeeded(controller) {
2849+ const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);
2850+ if (!shouldPull) {
2851+ return;
2852+ }
2853+ if (controller._pulling) {
2854+ controller._pullAgain = true;
2855+ return;
2856+ }
2857+ controller._pulling = true;
2858+ const pullPromise = controller._pullAlgorithm();
2859+ uponPromise(pullPromise, () => {
2860+ controller._pulling = false;
2861+ if (controller._pullAgain) {
2862+ controller._pullAgain = false;
2863+ ReadableStreamDefaultControllerCallPullIfNeeded(controller);
2864+ }
2865+ }, e => {
2866+ ReadableStreamDefaultControllerError(controller, e);
2867+ });
2868+}
2869+function ReadableStreamDefaultControllerShouldCallPull(controller) {
2870+ const stream = controller._controlledReadableStream;
2871+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {
2872+ return false;
2873+ }
2874+ if (!controller._started) {
2875+ return false;
2876+ }
2877+ if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {
2878+ return true;
2879+ }
2880+ const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);
2881+ if (desiredSize > 0) {
2882+ return true;
2883+ }
2884+ return false;
2885+}
2886+function ReadableStreamDefaultControllerClearAlgorithms(controller) {
2887+ controller._pullAlgorithm = undefined;
2888+ controller._cancelAlgorithm = undefined;
2889+ controller._strategySizeAlgorithm = undefined;
2890+}
2891+// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.
2892+function ReadableStreamDefaultControllerClose(controller) {
2893+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {
2894+ return;
2895+ }
2896+ const stream = controller._controlledReadableStream;
2897+ controller._closeRequested = true;
2898+ if (controller._queue.length === 0) {
2899+ ReadableStreamDefaultControllerClearAlgorithms(controller);
2900+ ReadableStreamClose(stream);
2901+ }
2902+}
2903+function ReadableStreamDefaultControllerEnqueue(controller, chunk) {
2904+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {
2905+ return;
2906+ }
2907+ const stream = controller._controlledReadableStream;
2908+ if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {
2909+ ReadableStreamFulfillReadRequest(stream, chunk, false);
2910+ }
2911+ else {
2912+ let chunkSize;
2913+ try {
2914+ chunkSize = controller._strategySizeAlgorithm(chunk);
2915+ }
2916+ catch (chunkSizeE) {
2917+ ReadableStreamDefaultControllerError(controller, chunkSizeE);
2918+ throw chunkSizeE;
2919+ }
2920+ try {
2921+ EnqueueValueWithSize(controller, chunk, chunkSize);
2922+ }
2923+ catch (enqueueE) {
2924+ ReadableStreamDefaultControllerError(controller, enqueueE);
2925+ throw enqueueE;
2926+ }
2927+ }
2928+ ReadableStreamDefaultControllerCallPullIfNeeded(controller);
2929+}
2930+function ReadableStreamDefaultControllerError(controller, e) {
2931+ const stream = controller._controlledReadableStream;
2932+ if (stream._state !== 'readable') {
2933+ return;
2934+ }
2935+ ResetQueue(controller);
2936+ ReadableStreamDefaultControllerClearAlgorithms(controller);
2937+ ReadableStreamError(stream, e);
2938+}
2939+function ReadableStreamDefaultControllerGetDesiredSize(controller) {
2940+ const state = controller._controlledReadableStream._state;
2941+ if (state === 'errored') {
2942+ return null;
2943+ }
2944+ if (state === 'closed') {
2945+ return 0;
2946+ }
2947+ return controller._strategyHWM - controller._queueTotalSize;
2948+}
2949+// This is used in the implementation of TransformStream.
2950+function ReadableStreamDefaultControllerHasBackpressure(controller) {
2951+ if (ReadableStreamDefaultControllerShouldCallPull(controller)) {
2952+ return false;
2953+ }
2954+ return true;
2955+}
2956+function ReadableStreamDefaultControllerCanCloseOrEnqueue(controller) {
2957+ const state = controller._controlledReadableStream._state;
2958+ if (!controller._closeRequested && state === 'readable') {
2959+ return true;
2960+ }
2961+ return false;
2962+}
2963+function SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {
2964+ controller._controlledReadableStream = stream;
2965+ controller._queue = undefined;
2966+ controller._queueTotalSize = undefined;
2967+ ResetQueue(controller);
2968+ controller._started = false;
2969+ controller._closeRequested = false;
2970+ controller._pullAgain = false;
2971+ controller._pulling = false;
2972+ controller._strategySizeAlgorithm = sizeAlgorithm;
2973+ controller._strategyHWM = highWaterMark;
2974+ controller._pullAlgorithm = pullAlgorithm;
2975+ controller._cancelAlgorithm = cancelAlgorithm;
2976+ stream._readableStreamController = controller;
2977+ const startResult = startAlgorithm();
2978+ uponPromise(promiseResolvedWith(startResult), () => {
2979+ controller._started = true;
2980+ ReadableStreamDefaultControllerCallPullIfNeeded(controller);
2981+ }, r => {
2982+ ReadableStreamDefaultControllerError(controller, r);
2983+ });
2984+}
2985+function SetUpReadableStreamDefaultControllerFromUnderlyingSource(stream, underlyingSource, highWaterMark, sizeAlgorithm) {
2986+ const controller = Object.create(ReadableStreamDefaultController.prototype);
2987+ let startAlgorithm = () => undefined;
2988+ let pullAlgorithm = () => promiseResolvedWith(undefined);
2989+ let cancelAlgorithm = () => promiseResolvedWith(undefined);
2990+ if (underlyingSource.start !== undefined) {
2991+ startAlgorithm = () => underlyingSource.start(controller);
2992+ }
2993+ if (underlyingSource.pull !== undefined) {
2994+ pullAlgorithm = () => underlyingSource.pull(controller);
2995+ }
2996+ if (underlyingSource.cancel !== undefined) {
2997+ cancelAlgorithm = reason => underlyingSource.cancel(reason);
2998+ }
2999+ SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);
3000+}
3001+// Helper functions for the ReadableStreamDefaultController.
3002+function defaultControllerBrandCheckException$1(name) {
3003+ return new TypeError(`ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);
3004+}
3005+
3006+function ReadableStreamTee(stream, cloneForBranch2) {
3007+ if (IsReadableByteStreamController(stream._readableStreamController)) {
3008+ return ReadableByteStreamTee(stream);
3009+ }
3010+ return ReadableStreamDefaultTee(stream);
3011+}
3012+function ReadableStreamDefaultTee(stream, cloneForBranch2) {
3013+ const reader = AcquireReadableStreamDefaultReader(stream);
3014+ let reading = false;
3015+ let readAgain = false;
3016+ let canceled1 = false;
3017+ let canceled2 = false;
3018+ let reason1;
3019+ let reason2;
3020+ let branch1;
3021+ let branch2;
3022+ let resolveCancelPromise;
3023+ const cancelPromise = newPromise(resolve => {
3024+ resolveCancelPromise = resolve;
3025+ });
3026+ function pullAlgorithm() {
3027+ if (reading) {
3028+ readAgain = true;
3029+ return promiseResolvedWith(undefined);
3030+ }
3031+ reading = true;
3032+ const readRequest = {
3033+ _chunkSteps: chunk => {
3034+ // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using
3035+ // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let
3036+ // successful synchronously-available reads get ahead of asynchronously-available errors.
3037+ queueMicrotask(() => {
3038+ readAgain = false;
3039+ const chunk1 = chunk;
3040+ const chunk2 = chunk;
3041+ // There is no way to access the cloning code right now in the reference implementation.
3042+ // If we add one then we'll need an implementation for serializable objects.
3043+ // if (!canceled2 && cloneForBranch2) {
3044+ // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));
3045+ // }
3046+ if (!canceled1) {
3047+ ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, chunk1);
3048+ }
3049+ if (!canceled2) {
3050+ ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, chunk2);
3051+ }
3052+ reading = false;
3053+ if (readAgain) {
3054+ pullAlgorithm();
3055+ }
3056+ });
3057+ },
3058+ _closeSteps: () => {
3059+ reading = false;
3060+ if (!canceled1) {
3061+ ReadableStreamDefaultControllerClose(branch1._readableStreamController);
3062+ }
3063+ if (!canceled2) {
3064+ ReadableStreamDefaultControllerClose(branch2._readableStreamController);
3065+ }
3066+ if (!canceled1 || !canceled2) {
3067+ resolveCancelPromise(undefined);
3068+ }
3069+ },
3070+ _errorSteps: () => {
3071+ reading = false;
3072+ }
3073+ };
3074+ ReadableStreamDefaultReaderRead(reader, readRequest);
3075+ return promiseResolvedWith(undefined);
3076+ }
3077+ function cancel1Algorithm(reason) {
3078+ canceled1 = true;
3079+ reason1 = reason;
3080+ if (canceled2) {
3081+ const compositeReason = CreateArrayFromList([reason1, reason2]);
3082+ const cancelResult = ReadableStreamCancel(stream, compositeReason);
3083+ resolveCancelPromise(cancelResult);
3084+ }
3085+ return cancelPromise;
3086+ }
3087+ function cancel2Algorithm(reason) {
3088+ canceled2 = true;
3089+ reason2 = reason;
3090+ if (canceled1) {
3091+ const compositeReason = CreateArrayFromList([reason1, reason2]);
3092+ const cancelResult = ReadableStreamCancel(stream, compositeReason);
3093+ resolveCancelPromise(cancelResult);
3094+ }
3095+ return cancelPromise;
3096+ }
3097+ function startAlgorithm() {
3098+ // do nothing
3099+ }
3100+ branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);
3101+ branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);
3102+ uponRejection(reader._closedPromise, (r) => {
3103+ ReadableStreamDefaultControllerError(branch1._readableStreamController, r);
3104+ ReadableStreamDefaultControllerError(branch2._readableStreamController, r);
3105+ if (!canceled1 || !canceled2) {
3106+ resolveCancelPromise(undefined);
3107+ }
3108+ });
3109+ return [branch1, branch2];
3110+}
3111+function ReadableByteStreamTee(stream) {
3112+ let reader = AcquireReadableStreamDefaultReader(stream);
3113+ let reading = false;
3114+ let readAgainForBranch1 = false;
3115+ let readAgainForBranch2 = false;
3116+ let canceled1 = false;
3117+ let canceled2 = false;
3118+ let reason1;
3119+ let reason2;
3120+ let branch1;
3121+ let branch2;
3122+ let resolveCancelPromise;
3123+ const cancelPromise = newPromise(resolve => {
3124+ resolveCancelPromise = resolve;
3125+ });
3126+ function forwardReaderError(thisReader) {
3127+ uponRejection(thisReader._closedPromise, r => {
3128+ if (thisReader !== reader) {
3129+ return;
3130+ }
3131+ ReadableByteStreamControllerError(branch1._readableStreamController, r);
3132+ ReadableByteStreamControllerError(branch2._readableStreamController, r);
3133+ if (!canceled1 || !canceled2) {
3134+ resolveCancelPromise(undefined);
3135+ }
3136+ });
3137+ }
3138+ function pullWithDefaultReader() {
3139+ if (IsReadableStreamBYOBReader(reader)) {
3140+ ReadableStreamReaderGenericRelease(reader);
3141+ reader = AcquireReadableStreamDefaultReader(stream);
3142+ forwardReaderError(reader);
3143+ }
3144+ const readRequest = {
3145+ _chunkSteps: chunk => {
3146+ // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using
3147+ // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let
3148+ // successful synchronously-available reads get ahead of asynchronously-available errors.
3149+ queueMicrotask(() => {
3150+ readAgainForBranch1 = false;
3151+ readAgainForBranch2 = false;
3152+ const chunk1 = chunk;
3153+ let chunk2 = chunk;
3154+ if (!canceled1 && !canceled2) {
3155+ try {
3156+ chunk2 = CloneAsUint8Array(chunk);
3157+ }
3158+ catch (cloneE) {
3159+ ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);
3160+ ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);
3161+ resolveCancelPromise(ReadableStreamCancel(stream, cloneE));
3162+ return;
3163+ }
3164+ }
3165+ if (!canceled1) {
3166+ ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);
3167+ }
3168+ if (!canceled2) {
3169+ ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);
3170+ }
3171+ reading = false;
3172+ if (readAgainForBranch1) {
3173+ pull1Algorithm();
3174+ }
3175+ else if (readAgainForBranch2) {
3176+ pull2Algorithm();
3177+ }
3178+ });
3179+ },
3180+ _closeSteps: () => {
3181+ reading = false;
3182+ if (!canceled1) {
3183+ ReadableByteStreamControllerClose(branch1._readableStreamController);
3184+ }
3185+ if (!canceled2) {
3186+ ReadableByteStreamControllerClose(branch2._readableStreamController);
3187+ }
3188+ if (branch1._readableStreamController._pendingPullIntos.length > 0) {
3189+ ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);
3190+ }
3191+ if (branch2._readableStreamController._pendingPullIntos.length > 0) {
3192+ ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);
3193+ }
3194+ if (!canceled1 || !canceled2) {
3195+ resolveCancelPromise(undefined);
3196+ }
3197+ },
3198+ _errorSteps: () => {
3199+ reading = false;
3200+ }
3201+ };
3202+ ReadableStreamDefaultReaderRead(reader, readRequest);
3203+ }
3204+ function pullWithBYOBReader(view, forBranch2) {
3205+ if (IsReadableStreamDefaultReader(reader)) {
3206+ ReadableStreamReaderGenericRelease(reader);
3207+ reader = AcquireReadableStreamBYOBReader(stream);
3208+ forwardReaderError(reader);
3209+ }
3210+ const byobBranch = forBranch2 ? branch2 : branch1;
3211+ const otherBranch = forBranch2 ? branch1 : branch2;
3212+ const readIntoRequest = {
3213+ _chunkSteps: chunk => {
3214+ // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using
3215+ // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let
3216+ // successful synchronously-available reads get ahead of asynchronously-available errors.
3217+ queueMicrotask(() => {
3218+ readAgainForBranch1 = false;
3219+ readAgainForBranch2 = false;
3220+ const byobCanceled = forBranch2 ? canceled2 : canceled1;
3221+ const otherCanceled = forBranch2 ? canceled1 : canceled2;
3222+ if (!otherCanceled) {
3223+ let clonedChunk;
3224+ try {
3225+ clonedChunk = CloneAsUint8Array(chunk);
3226+ }
3227+ catch (cloneE) {
3228+ ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);
3229+ ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);
3230+ resolveCancelPromise(ReadableStreamCancel(stream, cloneE));
3231+ return;
3232+ }
3233+ if (!byobCanceled) {
3234+ ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);
3235+ }
3236+ ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);
3237+ }
3238+ else if (!byobCanceled) {
3239+ ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);
3240+ }
3241+ reading = false;
3242+ if (readAgainForBranch1) {
3243+ pull1Algorithm();
3244+ }
3245+ else if (readAgainForBranch2) {
3246+ pull2Algorithm();
3247+ }
3248+ });
3249+ },
3250+ _closeSteps: chunk => {
3251+ reading = false;
3252+ const byobCanceled = forBranch2 ? canceled2 : canceled1;
3253+ const otherCanceled = forBranch2 ? canceled1 : canceled2;
3254+ if (!byobCanceled) {
3255+ ReadableByteStreamControllerClose(byobBranch._readableStreamController);
3256+ }
3257+ if (!otherCanceled) {
3258+ ReadableByteStreamControllerClose(otherBranch._readableStreamController);
3259+ }
3260+ if (chunk !== undefined) {
3261+ if (!byobCanceled) {
3262+ ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);
3263+ }
3264+ if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {
3265+ ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);
3266+ }
3267+ }
3268+ if (!byobCanceled || !otherCanceled) {
3269+ resolveCancelPromise(undefined);
3270+ }
3271+ },
3272+ _errorSteps: () => {
3273+ reading = false;
3274+ }
3275+ };
3276+ ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);
3277+ }
3278+ function pull1Algorithm() {
3279+ if (reading) {
3280+ readAgainForBranch1 = true;
3281+ return promiseResolvedWith(undefined);
3282+ }
3283+ reading = true;
3284+ const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);
3285+ if (byobRequest === null) {
3286+ pullWithDefaultReader();
3287+ }
3288+ else {
3289+ pullWithBYOBReader(byobRequest._view, false);
3290+ }
3291+ return promiseResolvedWith(undefined);
3292+ }
3293+ function pull2Algorithm() {
3294+ if (reading) {
3295+ readAgainForBranch2 = true;
3296+ return promiseResolvedWith(undefined);
3297+ }
3298+ reading = true;
3299+ const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);
3300+ if (byobRequest === null) {
3301+ pullWithDefaultReader();
3302+ }
3303+ else {
3304+ pullWithBYOBReader(byobRequest._view, true);
3305+ }
3306+ return promiseResolvedWith(undefined);
3307+ }
3308+ function cancel1Algorithm(reason) {
3309+ canceled1 = true;
3310+ reason1 = reason;
3311+ if (canceled2) {
3312+ const compositeReason = CreateArrayFromList([reason1, reason2]);
3313+ const cancelResult = ReadableStreamCancel(stream, compositeReason);
3314+ resolveCancelPromise(cancelResult);
3315+ }
3316+ return cancelPromise;
3317+ }
3318+ function cancel2Algorithm(reason) {
3319+ canceled2 = true;
3320+ reason2 = reason;
3321+ if (canceled1) {
3322+ const compositeReason = CreateArrayFromList([reason1, reason2]);
3323+ const cancelResult = ReadableStreamCancel(stream, compositeReason);
3324+ resolveCancelPromise(cancelResult);
3325+ }
3326+ return cancelPromise;
3327+ }
3328+ function startAlgorithm() {
3329+ return;
3330+ }
3331+ branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);
3332+ branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);
3333+ forwardReaderError(reader);
3334+ return [branch1, branch2];
3335+}
3336+
3337+function convertUnderlyingDefaultOrByteSource(source, context) {
3338+ assertDictionary(source, context);
3339+ const original = source;
3340+ const autoAllocateChunkSize = original === null || original === void 0 ? void 0 : original.autoAllocateChunkSize;
3341+ const cancel = original === null || original === void 0 ? void 0 : original.cancel;
3342+ const pull = original === null || original === void 0 ? void 0 : original.pull;
3343+ const start = original === null || original === void 0 ? void 0 : original.start;
3344+ const type = original === null || original === void 0 ? void 0 : original.type;
3345+ return {
3346+ autoAllocateChunkSize: autoAllocateChunkSize === undefined ?
3347+ undefined :
3348+ convertUnsignedLongLongWithEnforceRange(autoAllocateChunkSize, `${context} has member 'autoAllocateChunkSize' that`),
3349+ cancel: cancel === undefined ?
3350+ undefined :
3351+ convertUnderlyingSourceCancelCallback(cancel, original, `${context} has member 'cancel' that`),
3352+ pull: pull === undefined ?
3353+ undefined :
3354+ convertUnderlyingSourcePullCallback(pull, original, `${context} has member 'pull' that`),
3355+ start: start === undefined ?
3356+ undefined :
3357+ convertUnderlyingSourceStartCallback(start, original, `${context} has member 'start' that`),
3358+ type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)
3359+ };
3360+}
3361+function convertUnderlyingSourceCancelCallback(fn, original, context) {
3362+ assertFunction(fn, context);
3363+ return (reason) => promiseCall(fn, original, [reason]);
3364+}
3365+function convertUnderlyingSourcePullCallback(fn, original, context) {
3366+ assertFunction(fn, context);
3367+ return (controller) => promiseCall(fn, original, [controller]);
3368+}
3369+function convertUnderlyingSourceStartCallback(fn, original, context) {
3370+ assertFunction(fn, context);
3371+ return (controller) => reflectCall(fn, original, [controller]);
3372+}
3373+function convertReadableStreamType(type, context) {
3374+ type = `${type}`;
3375+ if (type !== 'bytes') {
3376+ throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);
3377+ }
3378+ return type;
3379+}
3380+
3381+function convertReaderOptions(options, context) {
3382+ assertDictionary(options, context);
3383+ const mode = options === null || options === void 0 ? void 0 : options.mode;
3384+ return {
3385+ mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)
3386+ };
3387+}
3388+function convertReadableStreamReaderMode(mode, context) {
3389+ mode = `${mode}`;
3390+ if (mode !== 'byob') {
3391+ throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);
3392+ }
3393+ return mode;
3394+}
3395+
3396+function convertIteratorOptions(options, context) {
3397+ assertDictionary(options, context);
3398+ const preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;
3399+ return { preventCancel: Boolean(preventCancel) };
3400+}
3401+
3402+function convertPipeOptions(options, context) {
3403+ assertDictionary(options, context);
3404+ const preventAbort = options === null || options === void 0 ? void 0 : options.preventAbort;
3405+ const preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;
3406+ const preventClose = options === null || options === void 0 ? void 0 : options.preventClose;
3407+ const signal = options === null || options === void 0 ? void 0 : options.signal;
3408+ if (signal !== undefined) {
3409+ assertAbortSignal(signal, `${context} has member 'signal' that`);
3410+ }
3411+ return {
3412+ preventAbort: Boolean(preventAbort),
3413+ preventCancel: Boolean(preventCancel),
3414+ preventClose: Boolean(preventClose),
3415+ signal
3416+ };
3417+}
3418+function assertAbortSignal(signal, context) {
3419+ if (!isAbortSignal(signal)) {
3420+ throw new TypeError(`${context} is not an AbortSignal.`);
3421+ }
3422+}
3423+
3424+function convertReadableWritablePair(pair, context) {
3425+ assertDictionary(pair, context);
3426+ const readable = pair === null || pair === void 0 ? void 0 : pair.readable;
3427+ assertRequiredField(readable, 'readable', 'ReadableWritablePair');
3428+ assertReadableStream(readable, `${context} has member 'readable' that`);
3429+ const writable = pair === null || pair === void 0 ? void 0 : pair.writable;
3430+ assertRequiredField(writable, 'writable', 'ReadableWritablePair');
3431+ assertWritableStream(writable, `${context} has member 'writable' that`);
3432+ return { readable, writable };
3433+}
3434+
3435+/**
3436+ * A readable stream represents a source of data, from which you can read.
3437+ *
3438+ * @public
3439+ */
3440+class ReadableStream {
3441+ constructor(rawUnderlyingSource = {}, rawStrategy = {}) {
3442+ if (rawUnderlyingSource === undefined) {
3443+ rawUnderlyingSource = null;
3444+ }
3445+ else {
3446+ assertObject(rawUnderlyingSource, 'First parameter');
3447+ }
3448+ const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');
3449+ const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');
3450+ InitializeReadableStream(this);
3451+ if (underlyingSource.type === 'bytes') {
3452+ if (strategy.size !== undefined) {
3453+ throw new RangeError('The strategy for a byte stream cannot have a size function');
3454+ }
3455+ const highWaterMark = ExtractHighWaterMark(strategy, 0);
3456+ SetUpReadableByteStreamControllerFromUnderlyingSource(this, underlyingSource, highWaterMark);
3457+ }
3458+ else {
3459+ const sizeAlgorithm = ExtractSizeAlgorithm(strategy);
3460+ const highWaterMark = ExtractHighWaterMark(strategy, 1);
3461+ SetUpReadableStreamDefaultControllerFromUnderlyingSource(this, underlyingSource, highWaterMark, sizeAlgorithm);
3462+ }
3463+ }
3464+ /**
3465+ * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.
3466+ */
3467+ get locked() {
3468+ if (!IsReadableStream(this)) {
3469+ throw streamBrandCheckException$1('locked');
3470+ }
3471+ return IsReadableStreamLocked(this);
3472+ }
3473+ /**
3474+ * Cancels the stream, signaling a loss of interest in the stream by a consumer.
3475+ *
3476+ * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}
3477+ * method, which might or might not use it.
3478+ */
3479+ cancel(reason = undefined) {
3480+ if (!IsReadableStream(this)) {
3481+ return promiseRejectedWith(streamBrandCheckException$1('cancel'));
3482+ }
3483+ if (IsReadableStreamLocked(this)) {
3484+ return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));
3485+ }
3486+ return ReadableStreamCancel(this, reason);
3487+ }
3488+ getReader(rawOptions = undefined) {
3489+ if (!IsReadableStream(this)) {
3490+ throw streamBrandCheckException$1('getReader');
3491+ }
3492+ const options = convertReaderOptions(rawOptions, 'First parameter');
3493+ if (options.mode === undefined) {
3494+ return AcquireReadableStreamDefaultReader(this);
3495+ }
3496+ return AcquireReadableStreamBYOBReader(this);
3497+ }
3498+ pipeThrough(rawTransform, rawOptions = {}) {
3499+ if (!IsReadableStream(this)) {
3500+ throw streamBrandCheckException$1('pipeThrough');
3501+ }
3502+ assertRequiredArgument(rawTransform, 1, 'pipeThrough');
3503+ const transform = convertReadableWritablePair(rawTransform, 'First parameter');
3504+ const options = convertPipeOptions(rawOptions, 'Second parameter');
3505+ if (IsReadableStreamLocked(this)) {
3506+ throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');
3507+ }
3508+ if (IsWritableStreamLocked(transform.writable)) {
3509+ throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');
3510+ }
3511+ const promise = ReadableStreamPipeTo(this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal);
3512+ setPromiseIsHandledToTrue(promise);
3513+ return transform.readable;
3514+ }
3515+ pipeTo(destination, rawOptions = {}) {
3516+ if (!IsReadableStream(this)) {
3517+ return promiseRejectedWith(streamBrandCheckException$1('pipeTo'));
3518+ }
3519+ if (destination === undefined) {
3520+ return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);
3521+ }
3522+ if (!IsWritableStream(destination)) {
3523+ return promiseRejectedWith(new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`));
3524+ }
3525+ let options;
3526+ try {
3527+ options = convertPipeOptions(rawOptions, 'Second parameter');
3528+ }
3529+ catch (e) {
3530+ return promiseRejectedWith(e);
3531+ }
3532+ if (IsReadableStreamLocked(this)) {
3533+ return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream'));
3534+ }
3535+ if (IsWritableStreamLocked(destination)) {
3536+ return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream'));
3537+ }
3538+ return ReadableStreamPipeTo(this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal);
3539+ }
3540+ /**
3541+ * Tees this readable stream, returning a two-element array containing the two resulting branches as
3542+ * new {@link ReadableStream} instances.
3543+ *
3544+ * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.
3545+ * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be
3546+ * propagated to the stream's underlying source.
3547+ *
3548+ * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,
3549+ * this could allow interference between the two branches.
3550+ */
3551+ tee() {
3552+ if (!IsReadableStream(this)) {
3553+ throw streamBrandCheckException$1('tee');
3554+ }
3555+ const branches = ReadableStreamTee(this);
3556+ return CreateArrayFromList(branches);
3557+ }
3558+ values(rawOptions = undefined) {
3559+ if (!IsReadableStream(this)) {
3560+ throw streamBrandCheckException$1('values');
3561+ }
3562+ const options = convertIteratorOptions(rawOptions, 'First parameter');
3563+ return AcquireReadableStreamAsyncIterator(this, options.preventCancel);
3564+ }
3565+}
3566+Object.defineProperties(ReadableStream.prototype, {
3567+ cancel: { enumerable: true },
3568+ getReader: { enumerable: true },
3569+ pipeThrough: { enumerable: true },
3570+ pipeTo: { enumerable: true },
3571+ tee: { enumerable: true },
3572+ values: { enumerable: true },
3573+ locked: { enumerable: true }
3574+});
3575+if (typeof SymbolPolyfill.toStringTag === 'symbol') {
3576+ Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.toStringTag, {
3577+ value: 'ReadableStream',
3578+ configurable: true
3579+ });
3580+}
3581+if (typeof SymbolPolyfill.asyncIterator === 'symbol') {
3582+ Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.asyncIterator, {
3583+ value: ReadableStream.prototype.values,
3584+ writable: true,
3585+ configurable: true
3586+ });
3587+}
3588+// Abstract operations for the ReadableStream.
3589+// Throws if and only if startAlgorithm throws.
3590+function CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark = 1, sizeAlgorithm = () => 1) {
3591+ const stream = Object.create(ReadableStream.prototype);
3592+ InitializeReadableStream(stream);
3593+ const controller = Object.create(ReadableStreamDefaultController.prototype);
3594+ SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);
3595+ return stream;
3596+}
3597+// Throws if and only if startAlgorithm throws.
3598+function CreateReadableByteStream(startAlgorithm, pullAlgorithm, cancelAlgorithm) {
3599+ const stream = Object.create(ReadableStream.prototype);
3600+ InitializeReadableStream(stream);
3601+ const controller = Object.create(ReadableByteStreamController.prototype);
3602+ SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);
3603+ return stream;
3604+}
3605+function InitializeReadableStream(stream) {
3606+ stream._state = 'readable';
3607+ stream._reader = undefined;
3608+ stream._storedError = undefined;
3609+ stream._disturbed = false;
3610+}
3611+function IsReadableStream(x) {
3612+ if (!typeIsObject(x)) {
3613+ return false;
3614+ }
3615+ if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {
3616+ return false;
3617+ }
3618+ return x instanceof ReadableStream;
3619+}
3620+function IsReadableStreamLocked(stream) {
3621+ if (stream._reader === undefined) {
3622+ return false;
3623+ }
3624+ return true;
3625+}
3626+// ReadableStream API exposed for controllers.
3627+function ReadableStreamCancel(stream, reason) {
3628+ stream._disturbed = true;
3629+ if (stream._state === 'closed') {
3630+ return promiseResolvedWith(undefined);
3631+ }
3632+ if (stream._state === 'errored') {
3633+ return promiseRejectedWith(stream._storedError);
3634+ }
3635+ ReadableStreamClose(stream);
3636+ const reader = stream._reader;
3637+ if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {
3638+ reader._readIntoRequests.forEach(readIntoRequest => {
3639+ readIntoRequest._closeSteps(undefined);
3640+ });
3641+ reader._readIntoRequests = new SimpleQueue();
3642+ }
3643+ const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);
3644+ return transformPromiseWith(sourceCancelPromise, noop);
3645+}
3646+function ReadableStreamClose(stream) {
3647+ stream._state = 'closed';
3648+ const reader = stream._reader;
3649+ if (reader === undefined) {
3650+ return;
3651+ }
3652+ defaultReaderClosedPromiseResolve(reader);
3653+ if (IsReadableStreamDefaultReader(reader)) {
3654+ reader._readRequests.forEach(readRequest => {
3655+ readRequest._closeSteps();
3656+ });
3657+ reader._readRequests = new SimpleQueue();
3658+ }
3659+}
3660+function ReadableStreamError(stream, e) {
3661+ stream._state = 'errored';
3662+ stream._storedError = e;
3663+ const reader = stream._reader;
3664+ if (reader === undefined) {
3665+ return;
3666+ }
3667+ defaultReaderClosedPromiseReject(reader, e);
3668+ if (IsReadableStreamDefaultReader(reader)) {
3669+ reader._readRequests.forEach(readRequest => {
3670+ readRequest._errorSteps(e);
3671+ });
3672+ reader._readRequests = new SimpleQueue();
3673+ }
3674+ else {
3675+ reader._readIntoRequests.forEach(readIntoRequest => {
3676+ readIntoRequest._errorSteps(e);
3677+ });
3678+ reader._readIntoRequests = new SimpleQueue();
3679+ }
3680+}
3681+// Helper functions for the ReadableStream.
3682+function streamBrandCheckException$1(name) {
3683+ return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);
3684+}
3685+
3686+function convertQueuingStrategyInit(init, context) {
3687+ assertDictionary(init, context);
3688+ const highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;
3689+ assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');
3690+ return {
3691+ highWaterMark: convertUnrestrictedDouble(highWaterMark)
3692+ };
3693+}
3694+
3695+// The size function must not have a prototype property nor be a constructor
3696+const byteLengthSizeFunction = (chunk) => {
3697+ return chunk.byteLength;
3698+};
3699+try {
3700+ Object.defineProperty(byteLengthSizeFunction, 'name', {
3701+ value: 'size',
3702+ configurable: true
3703+ });
3704+}
3705+catch (_a) {
3706+ // This property is non-configurable in older browsers, so ignore if this throws.
3707+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility
3708+}
3709+/**
3710+ * A queuing strategy that counts the number of bytes in each chunk.
3711+ *
3712+ * @public
3713+ */
3714+class ByteLengthQueuingStrategy {
3715+ constructor(options) {
3716+ assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');
3717+ options = convertQueuingStrategyInit(options, 'First parameter');
3718+ this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;
3719+ }
3720+ /**
3721+ * Returns the high water mark provided to the constructor.
3722+ */
3723+ get highWaterMark() {
3724+ if (!IsByteLengthQueuingStrategy(this)) {
3725+ throw byteLengthBrandCheckException('highWaterMark');
3726+ }
3727+ return this._byteLengthQueuingStrategyHighWaterMark;
3728+ }
3729+ /**
3730+ * Measures the size of `chunk` by returning the value of its `byteLength` property.
3731+ */
3732+ get size() {
3733+ if (!IsByteLengthQueuingStrategy(this)) {
3734+ throw byteLengthBrandCheckException('size');
3735+ }
3736+ return byteLengthSizeFunction;
3737+ }
3738+}
3739+Object.defineProperties(ByteLengthQueuingStrategy.prototype, {
3740+ highWaterMark: { enumerable: true },
3741+ size: { enumerable: true }
3742+});
3743+if (typeof SymbolPolyfill.toStringTag === 'symbol') {
3744+ Object.defineProperty(ByteLengthQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {
3745+ value: 'ByteLengthQueuingStrategy',
3746+ configurable: true
3747+ });
3748+}
3749+// Helper functions for the ByteLengthQueuingStrategy.
3750+function byteLengthBrandCheckException(name) {
3751+ return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);
3752+}
3753+function IsByteLengthQueuingStrategy(x) {
3754+ if (!typeIsObject(x)) {
3755+ return false;
3756+ }
3757+ if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {
3758+ return false;
3759+ }
3760+ return x instanceof ByteLengthQueuingStrategy;
3761+}
3762+
3763+// The size function must not have a prototype property nor be a constructor
3764+const countSizeFunction = () => {
3765+ return 1;
3766+};
3767+try {
3768+ Object.defineProperty(countSizeFunction, 'name', {
3769+ value: 'size',
3770+ configurable: true
3771+ });
3772+}
3773+catch (_a) {
3774+ // This property is non-configurable in older browsers, so ignore if this throws.
3775+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility
3776+}
3777+/**
3778+ * A queuing strategy that counts the number of chunks.
3779+ *
3780+ * @public
3781+ */
3782+class CountQueuingStrategy {
3783+ constructor(options) {
3784+ assertRequiredArgument(options, 1, 'CountQueuingStrategy');
3785+ options = convertQueuingStrategyInit(options, 'First parameter');
3786+ this._countQueuingStrategyHighWaterMark = options.highWaterMark;
3787+ }
3788+ /**
3789+ * Returns the high water mark provided to the constructor.
3790+ */
3791+ get highWaterMark() {
3792+ if (!IsCountQueuingStrategy(this)) {
3793+ throw countBrandCheckException('highWaterMark');
3794+ }
3795+ return this._countQueuingStrategyHighWaterMark;
3796+ }
3797+ /**
3798+ * Measures the size of `chunk` by always returning 1.
3799+ * This ensures that the total queue size is a count of the number of chunks in the queue.
3800+ */
3801+ get size() {
3802+ if (!IsCountQueuingStrategy(this)) {
3803+ throw countBrandCheckException('size');
3804+ }
3805+ return countSizeFunction;
3806+ }
3807+}
3808+Object.defineProperties(CountQueuingStrategy.prototype, {
3809+ highWaterMark: { enumerable: true },
3810+ size: { enumerable: true }
3811+});
3812+if (typeof SymbolPolyfill.toStringTag === 'symbol') {
3813+ Object.defineProperty(CountQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {
3814+ value: 'CountQueuingStrategy',
3815+ configurable: true
3816+ });
3817+}
3818+// Helper functions for the CountQueuingStrategy.
3819+function countBrandCheckException(name) {
3820+ return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);
3821+}
3822+function IsCountQueuingStrategy(x) {
3823+ if (!typeIsObject(x)) {
3824+ return false;
3825+ }
3826+ if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {
3827+ return false;
3828+ }
3829+ return x instanceof CountQueuingStrategy;
3830+}
3831+
3832+function convertTransformer(original, context) {
3833+ assertDictionary(original, context);
3834+ const flush = original === null || original === void 0 ? void 0 : original.flush;
3835+ const readableType = original === null || original === void 0 ? void 0 : original.readableType;
3836+ const start = original === null || original === void 0 ? void 0 : original.start;
3837+ const transform = original === null || original === void 0 ? void 0 : original.transform;
3838+ const writableType = original === null || original === void 0 ? void 0 : original.writableType;
3839+ return {
3840+ flush: flush === undefined ?
3841+ undefined :
3842+ convertTransformerFlushCallback(flush, original, `${context} has member 'flush' that`),
3843+ readableType,
3844+ start: start === undefined ?
3845+ undefined :
3846+ convertTransformerStartCallback(start, original, `${context} has member 'start' that`),
3847+ transform: transform === undefined ?
3848+ undefined :
3849+ convertTransformerTransformCallback(transform, original, `${context} has member 'transform' that`),
3850+ writableType
3851+ };
3852+}
3853+function convertTransformerFlushCallback(fn, original, context) {
3854+ assertFunction(fn, context);
3855+ return (controller) => promiseCall(fn, original, [controller]);
3856+}
3857+function convertTransformerStartCallback(fn, original, context) {
3858+ assertFunction(fn, context);
3859+ return (controller) => reflectCall(fn, original, [controller]);
3860+}
3861+function convertTransformerTransformCallback(fn, original, context) {
3862+ assertFunction(fn, context);
3863+ return (chunk, controller) => promiseCall(fn, original, [chunk, controller]);
3864+}
3865+
3866+// Class TransformStream
3867+/**
3868+ * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},
3869+ * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.
3870+ * In a manner specific to the transform stream in question, writes to the writable side result in new data being
3871+ * made available for reading from the readable side.
3872+ *
3873+ * @public
3874+ */
3875+class TransformStream {
3876+ constructor(rawTransformer = {}, rawWritableStrategy = {}, rawReadableStrategy = {}) {
3877+ if (rawTransformer === undefined) {
3878+ rawTransformer = null;
3879+ }
3880+ const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');
3881+ const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');
3882+ const transformer = convertTransformer(rawTransformer, 'First parameter');
3883+ if (transformer.readableType !== undefined) {
3884+ throw new RangeError('Invalid readableType specified');
3885+ }
3886+ if (transformer.writableType !== undefined) {
3887+ throw new RangeError('Invalid writableType specified');
3888+ }
3889+ const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);
3890+ const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);
3891+ const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);
3892+ const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);
3893+ let startPromise_resolve;
3894+ const startPromise = newPromise(resolve => {
3895+ startPromise_resolve = resolve;
3896+ });
3897+ InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm);
3898+ SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);
3899+ if (transformer.start !== undefined) {
3900+ startPromise_resolve(transformer.start(this._transformStreamController));
3901+ }
3902+ else {
3903+ startPromise_resolve(undefined);
3904+ }
3905+ }
3906+ /**
3907+ * The readable side of the transform stream.
3908+ */
3909+ get readable() {
3910+ if (!IsTransformStream(this)) {
3911+ throw streamBrandCheckException('readable');
3912+ }
3913+ return this._readable;
3914+ }
3915+ /**
3916+ * The writable side of the transform stream.
3917+ */
3918+ get writable() {
3919+ if (!IsTransformStream(this)) {
3920+ throw streamBrandCheckException('writable');
3921+ }
3922+ return this._writable;
3923+ }
3924+}
3925+Object.defineProperties(TransformStream.prototype, {
3926+ readable: { enumerable: true },
3927+ writable: { enumerable: true }
3928+});
3929+if (typeof SymbolPolyfill.toStringTag === 'symbol') {
3930+ Object.defineProperty(TransformStream.prototype, SymbolPolyfill.toStringTag, {
3931+ value: 'TransformStream',
3932+ configurable: true
3933+ });
3934+}
3935+function InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) {
3936+ function startAlgorithm() {
3937+ return startPromise;
3938+ }
3939+ function writeAlgorithm(chunk) {
3940+ return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);
3941+ }
3942+ function abortAlgorithm(reason) {
3943+ return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);
3944+ }
3945+ function closeAlgorithm() {
3946+ return TransformStreamDefaultSinkCloseAlgorithm(stream);
3947+ }
3948+ stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, writableHighWaterMark, writableSizeAlgorithm);
3949+ function pullAlgorithm() {
3950+ return TransformStreamDefaultSourcePullAlgorithm(stream);
3951+ }
3952+ function cancelAlgorithm(reason) {
3953+ TransformStreamErrorWritableAndUnblockWrite(stream, reason);
3954+ return promiseResolvedWith(undefined);
3955+ }
3956+ stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark, readableSizeAlgorithm);
3957+ // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.
3958+ stream._backpressure = undefined;
3959+ stream._backpressureChangePromise = undefined;
3960+ stream._backpressureChangePromise_resolve = undefined;
3961+ TransformStreamSetBackpressure(stream, true);
3962+ stream._transformStreamController = undefined;
3963+}
3964+function IsTransformStream(x) {
3965+ if (!typeIsObject(x)) {
3966+ return false;
3967+ }
3968+ if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {
3969+ return false;
3970+ }
3971+ return x instanceof TransformStream;
3972+}
3973+// This is a no-op if both sides are already errored.
3974+function TransformStreamError(stream, e) {
3975+ ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e);
3976+ TransformStreamErrorWritableAndUnblockWrite(stream, e);
3977+}
3978+function TransformStreamErrorWritableAndUnblockWrite(stream, e) {
3979+ TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);
3980+ WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);
3981+ if (stream._backpressure) {
3982+ // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()
3983+ // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time
3984+ // _backpressure is set.
3985+ TransformStreamSetBackpressure(stream, false);
3986+ }
3987+}
3988+function TransformStreamSetBackpressure(stream, backpressure) {
3989+ // Passes also when called during construction.
3990+ if (stream._backpressureChangePromise !== undefined) {
3991+ stream._backpressureChangePromise_resolve();
3992+ }
3993+ stream._backpressureChangePromise = newPromise(resolve => {
3994+ stream._backpressureChangePromise_resolve = resolve;
3995+ });
3996+ stream._backpressure = backpressure;
3997+}
3998+// Class TransformStreamDefaultController
3999+/**
4000+ * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.
4001+ *
4002+ * @public
4003+ */
4004+class TransformStreamDefaultController {
4005+ constructor() {
4006+ throw new TypeError('Illegal constructor');
4007+ }
4008+ /**
4009+ * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.
4010+ */
4011+ get desiredSize() {
4012+ if (!IsTransformStreamDefaultController(this)) {
4013+ throw defaultControllerBrandCheckException('desiredSize');
4014+ }
4015+ const readableController = this._controlledTransformStream._readable._readableStreamController;
4016+ return ReadableStreamDefaultControllerGetDesiredSize(readableController);
4017+ }
4018+ enqueue(chunk = undefined) {
4019+ if (!IsTransformStreamDefaultController(this)) {
4020+ throw defaultControllerBrandCheckException('enqueue');
4021+ }
4022+ TransformStreamDefaultControllerEnqueue(this, chunk);
4023+ }
4024+ /**
4025+ * Errors both the readable side and the writable side of the controlled transform stream, making all future
4026+ * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.
4027+ */
4028+ error(reason = undefined) {
4029+ if (!IsTransformStreamDefaultController(this)) {
4030+ throw defaultControllerBrandCheckException('error');
4031+ }
4032+ TransformStreamDefaultControllerError(this, reason);
4033+ }
4034+ /**
4035+ * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the
4036+ * transformer only needs to consume a portion of the chunks written to the writable side.
4037+ */
4038+ terminate() {
4039+ if (!IsTransformStreamDefaultController(this)) {
4040+ throw defaultControllerBrandCheckException('terminate');
4041+ }
4042+ TransformStreamDefaultControllerTerminate(this);
4043+ }
4044+}
4045+Object.defineProperties(TransformStreamDefaultController.prototype, {
4046+ enqueue: { enumerable: true },
4047+ error: { enumerable: true },
4048+ terminate: { enumerable: true },
4049+ desiredSize: { enumerable: true }
4050+});
4051+if (typeof SymbolPolyfill.toStringTag === 'symbol') {
4052+ Object.defineProperty(TransformStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {
4053+ value: 'TransformStreamDefaultController',
4054+ configurable: true
4055+ });
4056+}
4057+// Transform Stream Default Controller Abstract Operations
4058+function IsTransformStreamDefaultController(x) {
4059+ if (!typeIsObject(x)) {
4060+ return false;
4061+ }
4062+ if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {
4063+ return false;
4064+ }
4065+ return x instanceof TransformStreamDefaultController;
4066+}
4067+function SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm) {
4068+ controller._controlledTransformStream = stream;
4069+ stream._transformStreamController = controller;
4070+ controller._transformAlgorithm = transformAlgorithm;
4071+ controller._flushAlgorithm = flushAlgorithm;
4072+}
4073+function SetUpTransformStreamDefaultControllerFromTransformer(stream, transformer) {
4074+ const controller = Object.create(TransformStreamDefaultController.prototype);
4075+ let transformAlgorithm = (chunk) => {
4076+ try {
4077+ TransformStreamDefaultControllerEnqueue(controller, chunk);
4078+ return promiseResolvedWith(undefined);
4079+ }
4080+ catch (transformResultE) {
4081+ return promiseRejectedWith(transformResultE);
4082+ }
4083+ };
4084+ let flushAlgorithm = () => promiseResolvedWith(undefined);
4085+ if (transformer.transform !== undefined) {
4086+ transformAlgorithm = chunk => transformer.transform(chunk, controller);
4087+ }
4088+ if (transformer.flush !== undefined) {
4089+ flushAlgorithm = () => transformer.flush(controller);
4090+ }
4091+ SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);
4092+}
4093+function TransformStreamDefaultControllerClearAlgorithms(controller) {
4094+ controller._transformAlgorithm = undefined;
4095+ controller._flushAlgorithm = undefined;
4096+}
4097+function TransformStreamDefaultControllerEnqueue(controller, chunk) {
4098+ const stream = controller._controlledTransformStream;
4099+ const readableController = stream._readable._readableStreamController;
4100+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {
4101+ throw new TypeError('Readable side is not in a state that permits enqueue');
4102+ }
4103+ // We throttle transform invocations based on the backpressure of the ReadableStream, but we still
4104+ // accept TransformStreamDefaultControllerEnqueue() calls.
4105+ try {
4106+ ReadableStreamDefaultControllerEnqueue(readableController, chunk);
4107+ }
4108+ catch (e) {
4109+ // This happens when readableStrategy.size() throws.
4110+ TransformStreamErrorWritableAndUnblockWrite(stream, e);
4111+ throw stream._readable._storedError;
4112+ }
4113+ const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);
4114+ if (backpressure !== stream._backpressure) {
4115+ TransformStreamSetBackpressure(stream, true);
4116+ }
4117+}
4118+function TransformStreamDefaultControllerError(controller, e) {
4119+ TransformStreamError(controller._controlledTransformStream, e);
4120+}
4121+function TransformStreamDefaultControllerPerformTransform(controller, chunk) {
4122+ const transformPromise = controller._transformAlgorithm(chunk);
4123+ return transformPromiseWith(transformPromise, undefined, r => {
4124+ TransformStreamError(controller._controlledTransformStream, r);
4125+ throw r;
4126+ });
4127+}
4128+function TransformStreamDefaultControllerTerminate(controller) {
4129+ const stream = controller._controlledTransformStream;
4130+ const readableController = stream._readable._readableStreamController;
4131+ ReadableStreamDefaultControllerClose(readableController);
4132+ const error = new TypeError('TransformStream terminated');
4133+ TransformStreamErrorWritableAndUnblockWrite(stream, error);
4134+}
4135+// TransformStreamDefaultSink Algorithms
4136+function TransformStreamDefaultSinkWriteAlgorithm(stream, chunk) {
4137+ const controller = stream._transformStreamController;
4138+ if (stream._backpressure) {
4139+ const backpressureChangePromise = stream._backpressureChangePromise;
4140+ return transformPromiseWith(backpressureChangePromise, () => {
4141+ const writable = stream._writable;
4142+ const state = writable._state;
4143+ if (state === 'erroring') {
4144+ throw writable._storedError;
4145+ }
4146+ return TransformStreamDefaultControllerPerformTransform(controller, chunk);
4147+ });
4148+ }
4149+ return TransformStreamDefaultControllerPerformTransform(controller, chunk);
4150+}
4151+function TransformStreamDefaultSinkAbortAlgorithm(stream, reason) {
4152+ // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already
4153+ // errored.
4154+ TransformStreamError(stream, reason);
4155+ return promiseResolvedWith(undefined);
4156+}
4157+function TransformStreamDefaultSinkCloseAlgorithm(stream) {
4158+ // stream._readable cannot change after construction, so caching it across a call to user code is safe.
4159+ const readable = stream._readable;
4160+ const controller = stream._transformStreamController;
4161+ const flushPromise = controller._flushAlgorithm();
4162+ TransformStreamDefaultControllerClearAlgorithms(controller);
4163+ // Return a promise that is fulfilled with undefined on success.
4164+ return transformPromiseWith(flushPromise, () => {
4165+ if (readable._state === 'errored') {
4166+ throw readable._storedError;
4167+ }
4168+ ReadableStreamDefaultControllerClose(readable._readableStreamController);
4169+ }, r => {
4170+ TransformStreamError(stream, r);
4171+ throw readable._storedError;
4172+ });
4173+}
4174+// TransformStreamDefaultSource Algorithms
4175+function TransformStreamDefaultSourcePullAlgorithm(stream) {
4176+ // Invariant. Enforced by the promises returned by start() and pull().
4177+ TransformStreamSetBackpressure(stream, false);
4178+ // Prevent the next pull() call until there is backpressure.
4179+ return stream._backpressureChangePromise;
4180+}
4181+// Helper functions for the TransformStreamDefaultController.
4182+function defaultControllerBrandCheckException(name) {
4183+ return new TypeError(`TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);
4184+}
4185+// Helper functions for the TransformStream.
4186+function streamBrandCheckException(name) {
4187+ return new TypeError(`TransformStream.prototype.${name} can only be used on a TransformStream`);
4188+}
4189+
4190+const exports = {
4191+ ReadableStream,
4192+ ReadableStreamDefaultController,
4193+ ReadableByteStreamController,
4194+ ReadableStreamBYOBRequest,
4195+ ReadableStreamDefaultReader,
4196+ ReadableStreamBYOBReader,
4197+ WritableStream,
4198+ WritableStreamDefaultController,
4199+ WritableStreamDefaultWriter,
4200+ ByteLengthQueuingStrategy,
4201+ CountQueuingStrategy,
4202+ TransformStream,
4203+ TransformStreamDefaultController
4204+};
4205+// Add classes to global scope
4206+if (typeof globals !== 'undefined') {
4207+ for (const prop in exports) {
4208+ if (Object.prototype.hasOwnProperty.call(exports, prop)) {
4209+ Object.defineProperty(globals, prop, {
4210+ value: exports[prop],
4211+ writable: true,
4212+ configurable: true
4213+ });
4214+ }
4215+ }
4216+}
4217+
4218+export { ByteLengthQueuingStrategy, CountQueuingStrategy, ReadableByteStreamController, ReadableStream, ReadableStreamBYOBReader, ReadableStreamBYOBRequest, ReadableStreamDefaultController, ReadableStreamDefaultReader, TransformStream, TransformStreamDefaultController, WritableStream, WritableStreamDefaultController, WritableStreamDefaultWriter };
4219+//# sourceMappingURL=polyfill.es2018.mjs.map
prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs.mapnew file+1
@@ -0,0 +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":["/// <reference lib=\"es2015.symbol\" />\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","/// <reference lib=\"dom\" />\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<T>(executor: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void\n) => void): Promise<T> {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith<T>(value: T | PromiseLike<T>): Promise<T> {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith<T = never>(reason: any): Promise<T> {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => TResult1 | PromiseLike<TResult1>,\n onRejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\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<TResult1 | TResult2>;\n}\n\nexport function uponPromise<T>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => void | PromiseLike<void>,\n onRejected?: (reason: any) => void | PromiseLike<void>): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment<T>(promise: Promise<T>, onFulfilled: (value: T) => void | PromiseLike<void>): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise<unknown>, onRejected: (reason: any) => void | PromiseLike<void>): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike<TResult1>,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise<unknown>): 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<T, A extends any[], R>(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<T, A extends any[], R>(F: (this: T, ...fnArgs: A) => R | PromiseLike<R>,\n V: T,\n args: A): Promise<R> {\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<T> {\n _elements: T[];\n _next: Node<T> | 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<T> {\n private _front: Node<T>;\n private _back: Node<T>;\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<R>(reader: ReadableStreamReader<R>, stream: ReadableStream<R>) {\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<any>, reason: any): Promise<undefined> {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader<any>) {\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<any>) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader<any>, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader<any>) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader<any>, 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<any>, 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<any>) {\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","/// <reference lib=\"es2015.core\" />\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","/// <reference lib=\"es2015.core\" />\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<T extends any>(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<T extends any>(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<T> = {\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<R>(stream: ReadableStream): ReadableStreamDefaultReader<R> {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest<R>(stream: ReadableStream<R>,\n readRequest: ReadRequest<R>): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader<R>)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest<R>(stream: ReadableStream<R>, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader<R>;\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<R>(stream: ReadableStream<R>): number {\n return (stream._reader as ReadableStreamDefaultReader<R>)._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<R> {\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<R = any> {\n /** @internal */\n _ownerReadableStream!: ReadableStream<R>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue<ReadRequest<R>>;\n\n constructor(stream: ReadableStream<R>) {\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<undefined> {\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<void> {\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<ReadableStreamDefaultReadResult<R>> {\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<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\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<R = any>(x: any): x is ReadableStreamDefaultReader<R> {\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<R>(reader: ReadableStreamDefaultReader<R>,\n readRequest: ReadRequest<R>): 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<any>);\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","/// <reference lib=\"es2018.asynciterable\" />\n\n/* eslint-disable @typescript-eslint/no-empty-function */\nexport const AsyncIteratorPrototype: AsyncIterable<any> | undefined =\n Object.getPrototypeOf(Object.getPrototypeOf(async function* (): AsyncIterableIterator<any> {}).prototype);\n","/// <reference lib=\"es2018.asynciterable\" />\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<R> extends AsyncIterator<R> {\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl<R> {\n private readonly _reader: ReadableStreamDefaultReader<R>;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise<ReadableStreamDefaultReadResult<R>> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader<R>, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise<ReadableStreamDefaultReadResult<R>> {\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<ReadableStreamDefaultReadResult<any>> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise<ReadableStreamDefaultReadResult<R>> {\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<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\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<ReadableStreamDefaultReadResult<any>> {\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<R> implements ReadableStreamAsyncIterator<R> {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl<R>;\n\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance<any> = {\n next(this: ReadableStreamAsyncIteratorInstance<any>): Promise<ReadableStreamDefaultReadResult<any>> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance<any>, value: any): Promise<ReadableStreamDefaultReadResult<any>> {\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<R>(stream: ReadableStream<R>,\n preventCancel: boolean): ReadableStreamAsyncIterator<R> {\n const reader = AcquireReadableStreamDefaultReader<R>(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance<R> = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator<R = any>(x: any): x is ReadableStreamAsyncIterator<R> {\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<any>)._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","/// <reference lib=\"es2015.core\" />\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<T extends any[]>(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<T extends ArrayBufferLike>(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<T> {\n _queue: SimpleQueue<T>;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair<T> {\n value: T;\n size: number;\n}\n\nexport function DequeueValue<T>(container: QueueContainer<QueuePair<T>>): 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<T>(container: QueueContainer<QueuePair<T>>, 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<T>(container: QueueContainer<QueuePair<T>>): 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<T>(container: QueueContainer<T>) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue<T>();\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<T extends ArrayBufferView = ArrayBufferView> {\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<T extends ArrayBufferView = ArrayBufferView> =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor<T>;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor<Uint8Array>;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor<T extends ArrayBufferView = ArrayBufferView> {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor<T>;\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<ByteQueueElement>;\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<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue<PullIntoDescriptor>;\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<void> {\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<Uint8Array>): 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<T extends ArrayBufferView>(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor<T>\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<T>(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<T extends ArrayBufferView>(\n pullIntoDescriptor: PullIntoDescriptor<T>\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<T extends ArrayBufferView>(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest<T>\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor<T>).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor<T>;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor<T> = {\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<T>(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<T>(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<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\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<void> = () => undefined;\n let pullAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise<void> = () => 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<T extends ArrayBufferView> = {\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<T extends ArrayBufferView>(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest<T>): 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<T extends ArrayBufferView> {\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<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue<ReadIntoRequest<any>>;\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<undefined> {\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<void> {\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<T extends ArrayBufferView>(view: T): Promise<ReadableStreamBYOBReadResult<T>> {\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<T>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamBYOBReadResult<T>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest<T> = {\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<T extends ArrayBufferView>(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest<T>\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<T>(strategy: QueuingStrategy<T>): QueuingStrategySizeCallback<T> {\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<T>(init: QueuingStrategy<T> | null | undefined,\n context: string): QueuingStrategy<T> {\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<T>(fn: QueuingStrategySizeCallback<T>,\n context: string): QueuingStrategySizeCallback<T> {\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<W>(original: UnderlyingSink<W> | null,\n context: string): ValidatedUnderlyingSink<W> {\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<void> {\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<void> {\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<W>(\n fn: UnderlyingSinkWriteCallback<W>,\n original: UnderlyingSink<W>,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise<void> {\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<undefined>;\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<W = any> {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter<W> | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController<W>;\n /** @internal */\n _writeRequests!: SimpleQueue<WriteRequest>;\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<W>, strategy?: QueuingStrategy<W>);\n constructor(rawUnderlyingSink: UnderlyingSink<W> | null | undefined = {},\n rawStrategy: QueuingStrategy<W> | 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<void> {\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<W> {\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<W>(stream: WritableStream<W>): WritableStreamDefaultWriter<W> {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream<W>(startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<W> = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream<W> = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController<W> = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream<W>(stream: WritableStream<W>) {\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<undefined> {\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<undefined>((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<any>): Promise<undefined> {\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<undefined>((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<undefined> {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise<undefined>((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<W = any> {\n /** @internal */\n _ownerWritableStream: WritableStream<W>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\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<undefined>;\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<W>) {\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<undefined> {\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<undefined> {\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<void> {\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<void> {\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<void>;\n write(chunk: W = undefined!): Promise<void> {\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<W = any>(x: any): x is WritableStreamDefaultWriter<W> {\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<undefined> {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise<undefined> {\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<W>(writer: WritableStreamDefaultWriter<W>, chunk: W): Promise<undefined> {\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> = 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<W = any> {\n /** @internal */\n _controlledWritableStream!: WritableStream<W>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<QueueRecord<W>>>;\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<W>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise<void>;\n /** @internal */\n _closeAlgorithm!: () => Promise<void>;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise<void>;\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<void> {\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<any> {\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<W>(stream: WritableStream<W>,\n controller: WritableStreamDefaultController<W>,\n startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\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<W>(stream: WritableStream<W>,\n underlyingSink: ValidatedUnderlyingSink<W>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void> = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise<void> = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise<void> = () => 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<any>) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose<W>(controller: WritableStreamDefaultController<W>) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize<W>(controller: WritableStreamDefaultController<W>,\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<any>): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite<W>(controller: WritableStreamDefaultController<W>,\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<W>(controller: WritableStreamDefaultController<W>) {\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<any>, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController<any>) {\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<W>(controller: WritableStreamDefaultController<W>, 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<any>): 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<any>, 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","/// <reference lib=\"dom\" />\nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// <reference types=\"node\" />\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<T>(source: ReadableStream<T>,\n dest: WritableStream<T>,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise<undefined> {\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<T>(source);\n const writer = AcquireWritableStreamDefaultWriter<T>(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<void>(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<void>> = [];\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<void>((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<boolean> {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise<boolean>((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<void> {\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<void>,\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<void>, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise<unknown>, 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<R> {\n /** @internal */\n _controlledReadableStream!: ReadableStream<R>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<R>>;\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<R>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\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<void> {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest<R>): 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<R = any>(x: any): x is ReadableStreamDefaultController<R> {\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<any>): 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<any>): 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<any>) {\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<any>) {\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<R>(\n controller: ReadableStreamDefaultController<R>,\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<any>, 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<any>\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<any>\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController<any>\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<R>(stream: ReadableStream<R>,\n controller: ReadableStreamDefaultController<R>,\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>) {\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<R>(\n stream: ReadableStream<R>,\n underlyingSource: ValidatedUnderlyingSource<R>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>\n) {\n const controller: ReadableStreamDefaultController<R> = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void> = () => undefined;\n let pullAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise<void> = () => 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<R>(stream: ReadableStream<R>,\n cloneForBranch2: boolean): [ReadableStream<R>, ReadableStream<R>] {\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<R>, ReadableStream<R>];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee<R>(stream: ReadableStream<R>,\n cloneForBranch2: boolean): [ReadableStream<R>, ReadableStream<R>] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader<R>(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<R>;\n let branch2: ReadableStream<R>;\n\n let resolveCancelPromise: (value: undefined | Promise<undefined>) => void;\n const cancelPromise = newPromise<undefined>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise<void> {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest<R> = {\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<R>,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController<R>,\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<R>);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController<R>);\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<void> {\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<void> {\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>, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController<R>, 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<Uint8Array> = 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<undefined>) => void;\n const cancelPromise = newPromise<void>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader<Uint8Array>) {\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<Uint8Array> = {\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<Uint8Array>(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<ArrayBufferView> = {\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<void> {\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<void> {\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<void> {\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<void> {\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<R>(\n source: UnderlyingSource<R> | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource<R> {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource<R> | 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<void> {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback<R>(\n fn: UnderlyingDefaultOrByteSourcePullCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): (controller: ReadableStreamController<R>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback<R>(\n fn: UnderlyingDefaultOrByteSourceStartCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback<R> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => 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<RS extends ReadableStream, WS extends WritableStream>(\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<Uint8Array> & {\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<R = any> {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader<R> | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController<R> | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>);\n constructor(rawUnderlyingSource: UnderlyingSource<R> | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy<R> | 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<void> {\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<R>;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader<R> | 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<RS extends ReadableStream>(\n transform: { readable: RS; writable: WritableStream<R> },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough<RS extends ReadableStream>(\n rawTransform: { readable: RS; writable: WritableStream<R> } | 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<R>, options?: StreamPipeOptions): Promise<void>;\n pipeTo(destination: WritableStream<R> | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise<void> {\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<R>(\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<R>, ReadableStream<R>] {\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<R>;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator<R> {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator<R>(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator<R>;\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<R>(startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<R> = () => 1): ReadableStream<R> {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream<R> = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController<R> = 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<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>\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<R>(stream: ReadableStream<R>, reason: any): Promise<undefined> {\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<R>(stream: ReadableStream<R>): 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<R>(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError<R>(stream: ReadableStream<R>, 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<R>(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<R> = ReadableStreamDefaultReader<R> | 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<ArrayBufferView> {\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<any> {\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<I, O>(original: Transformer<I, O> | null,\n context: string): ValidatedTransformer<I, O> {\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<I, O>(\n fn: TransformerFlushCallback<O>,\n original: Transformer<I, O>,\n context: string\n): (controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback<I, O>(\n fn: TransformerStartCallback<O>,\n original: Transformer<I, O>,\n context: string\n): TransformerStartCallback<O> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback<I, O>(\n fn: TransformerTransformCallback<I, O>,\n original: Transformer<I, O>,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController<O>) => 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<I = any, O = any> {\n /** @internal */\n _writable!: WritableStream<I>;\n /** @internal */\n _readable!: ReadableStream<O>;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise<void>;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController<O>;\n\n constructor(\n transformer?: Transformer<I, O>,\n writableStrategy?: QueuingStrategy<I>,\n readableStrategy?: QueuingStrategy<O>\n );\n constructor(rawTransformer: Transformer<I, O> | null | undefined = {},\n rawWritableStrategy: QueuingStrategy<I> | null | undefined = {},\n rawReadableStrategy: QueuingStrategy<O> | 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>) => void;\n const startPromise = newPromise<void>(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<O> {\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<I> {\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<I, O>(startAlgorithm: () => void | PromiseLike<void>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I> = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O> = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream<I, O> = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike<void>) => void;\n const startPromise = newPromise<void>(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController<O> = 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<I, O>(stream: TransformStream<I, O>,\n startPromise: Promise<void>,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I>,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O>) {\n function startAlgorithm(): Promise<void> {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise<void> {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise<void> {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise<void> {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise<void> {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise<void> {\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<any>,\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<O> {\n /** @internal */\n _controlledTransformStream: TransformStream<any, O>;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise<void>;\n /** @internal */\n _flushAlgorithm: () => Promise<void>;\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<O>);\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<O = any>(x: any): x is TransformStreamDefaultController<O> {\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<I, O>(stream: TransformStream<I, O>,\n controller: TransformStreamDefaultController<O>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>) {\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<I, O>(stream: TransformStream<I, O>,\n transformer: ValidatedTransformer<I, O>) {\n const controller: TransformStreamDefaultController<O> = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise<void> => {\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<void> = () => 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<any>) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue<O>(controller: TransformStreamDefaultController<O>, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController<O>;\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<any>, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform<I, O>(controller: TransformStreamDefaultController<O>,\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<O>(controller: TransformStreamDefaultController<O>) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController<O>;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm<I, O>(stream: TransformStream<I, O>, chunk: I): Promise<void> {\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<I, O>(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform<I, O>(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise<void> {\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<I, O>(stream: TransformStream<I, O>): Promise<void> {\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<O>);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise<void> {\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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"}
prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es6.jsnew file+4252
@@ -0,0 +1,4252 @@
1+/**
2+ * web-streams-polyfill v3.2.1
3+ */
4+(function (global, factory) {
5+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
6+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
7+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.WebStreamsPolyfill = {}));
8+}(this, (function (exports) { 'use strict';
9+
10+ /// <reference lib="es2015.symbol" />
11+ const SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?
12+ Symbol :
13+ description => `Symbol(${description})`;
14+
15+ /// <reference lib="dom" />
16+ function noop() {
17+ return undefined;
18+ }
19+ function getGlobals() {
20+ if (typeof self !== 'undefined') {
21+ return self;
22+ }
23+ else if (typeof window !== 'undefined') {
24+ return window;
25+ }
26+ else if (typeof global !== 'undefined') {
27+ return global;
28+ }
29+ return undefined;
30+ }
31+ const globals = getGlobals();
32+
33+ function typeIsObject(x) {
34+ return (typeof x === 'object' && x !== null) || typeof x === 'function';
35+ }
36+ const rethrowAssertionErrorRejection = noop;
37+
38+ const originalPromise = Promise;
39+ const originalPromiseThen = Promise.prototype.then;
40+ const originalPromiseResolve = Promise.resolve.bind(originalPromise);
41+ const originalPromiseReject = Promise.reject.bind(originalPromise);
42+ function newPromise(executor) {
43+ return new originalPromise(executor);
44+ }
45+ function promiseResolvedWith(value) {
46+ return originalPromiseResolve(value);
47+ }
48+ function promiseRejectedWith(reason) {
49+ return originalPromiseReject(reason);
50+ }
51+ function PerformPromiseThen(promise, onFulfilled, onRejected) {
52+ // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an
53+ // approximation.
54+ return originalPromiseThen.call(promise, onFulfilled, onRejected);
55+ }
56+ function uponPromise(promise, onFulfilled, onRejected) {
57+ PerformPromiseThen(PerformPromiseThen(promise, onFulfilled, onRejected), undefined, rethrowAssertionErrorRejection);
58+ }
59+ function uponFulfillment(promise, onFulfilled) {
60+ uponPromise(promise, onFulfilled);
61+ }
62+ function uponRejection(promise, onRejected) {
63+ uponPromise(promise, undefined, onRejected);
64+ }
65+ function transformPromiseWith(promise, fulfillmentHandler, rejectionHandler) {
66+ return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);
67+ }
68+ function setPromiseIsHandledToTrue(promise) {
69+ PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);
70+ }
71+ const queueMicrotask = (() => {
72+ const globalQueueMicrotask = globals && globals.queueMicrotask;
73+ if (typeof globalQueueMicrotask === 'function') {
74+ return globalQueueMicrotask;
75+ }
76+ const resolvedPromise = promiseResolvedWith(undefined);
77+ return (fn) => PerformPromiseThen(resolvedPromise, fn);
78+ })();
79+ function reflectCall(F, V, args) {
80+ if (typeof F !== 'function') {
81+ throw new TypeError('Argument is not a function');
82+ }
83+ return Function.prototype.apply.call(F, V, args);
84+ }
85+ function promiseCall(F, V, args) {
86+ try {
87+ return promiseResolvedWith(reflectCall(F, V, args));
88+ }
89+ catch (value) {
90+ return promiseRejectedWith(value);
91+ }
92+ }
93+
94+ // Original from Chromium
95+ // https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js
96+ const QUEUE_MAX_ARRAY_SIZE = 16384;
97+ /**
98+ * Simple queue structure.
99+ *
100+ * Avoids scalability issues with using a packed array directly by using
101+ * multiple arrays in a linked list and keeping the array size bounded.
102+ */
103+ class SimpleQueue {
104+ constructor() {
105+ this._cursor = 0;
106+ this._size = 0;
107+ // _front and _back are always defined.
108+ this._front = {
109+ _elements: [],
110+ _next: undefined
111+ };
112+ this._back = this._front;
113+ // The cursor is used to avoid calling Array.shift().
114+ // It contains the index of the front element of the array inside the
115+ // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).
116+ this._cursor = 0;
117+ // When there is only one node, size === elements.length - cursor.
118+ this._size = 0;
119+ }
120+ get length() {
121+ return this._size;
122+ }
123+ // For exception safety, this method is structured in order:
124+ // 1. Read state
125+ // 2. Calculate required state mutations
126+ // 3. Perform state mutations
127+ push(element) {
128+ const oldBack = this._back;
129+ let newBack = oldBack;
130+ if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {
131+ newBack = {
132+ _elements: [],
133+ _next: undefined
134+ };
135+ }
136+ // push() is the mutation most likely to throw an exception, so it
137+ // goes first.
138+ oldBack._elements.push(element);
139+ if (newBack !== oldBack) {
140+ this._back = newBack;
141+ oldBack._next = newBack;
142+ }
143+ ++this._size;
144+ }
145+ // Like push(), shift() follows the read -> calculate -> mutate pattern for
146+ // exception safety.
147+ shift() { // must not be called on an empty queue
148+ const oldFront = this._front;
149+ let newFront = oldFront;
150+ const oldCursor = this._cursor;
151+ let newCursor = oldCursor + 1;
152+ const elements = oldFront._elements;
153+ const element = elements[oldCursor];
154+ if (newCursor === QUEUE_MAX_ARRAY_SIZE) {
155+ newFront = oldFront._next;
156+ newCursor = 0;
157+ }
158+ // No mutations before this point.
159+ --this._size;
160+ this._cursor = newCursor;
161+ if (oldFront !== newFront) {
162+ this._front = newFront;
163+ }
164+ // Permit shifted element to be garbage collected.
165+ elements[oldCursor] = undefined;
166+ return element;
167+ }
168+ // The tricky thing about forEach() is that it can be called
169+ // re-entrantly. The queue may be mutated inside the callback. It is easy to
170+ // see that push() within the callback has no negative effects since the end
171+ // of the queue is checked for on every iteration. If shift() is called
172+ // repeatedly within the callback then the next iteration may return an
173+ // element that has been removed. In this case the callback will be called
174+ // with undefined values until we either "catch up" with elements that still
175+ // exist or reach the back of the queue.
176+ forEach(callback) {
177+ let i = this._cursor;
178+ let node = this._front;
179+ let elements = node._elements;
180+ while (i !== elements.length || node._next !== undefined) {
181+ if (i === elements.length) {
182+ node = node._next;
183+ elements = node._elements;
184+ i = 0;
185+ if (elements.length === 0) {
186+ break;
187+ }
188+ }
189+ callback(elements[i]);
190+ ++i;
191+ }
192+ }
193+ // Return the element that would be returned if shift() was called now,
194+ // without modifying the queue.
195+ peek() { // must not be called on an empty queue
196+ const front = this._front;
197+ const cursor = this._cursor;
198+ return front._elements[cursor];
199+ }
200+ }
201+
202+ function ReadableStreamReaderGenericInitialize(reader, stream) {
203+ reader._ownerReadableStream = stream;
204+ stream._reader = reader;
205+ if (stream._state === 'readable') {
206+ defaultReaderClosedPromiseInitialize(reader);
207+ }
208+ else if (stream._state === 'closed') {
209+ defaultReaderClosedPromiseInitializeAsResolved(reader);
210+ }
211+ else {
212+ defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);
213+ }
214+ }
215+ // A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state
216+ // check.
217+ function ReadableStreamReaderGenericCancel(reader, reason) {
218+ const stream = reader._ownerReadableStream;
219+ return ReadableStreamCancel(stream, reason);
220+ }
221+ function ReadableStreamReaderGenericRelease(reader) {
222+ if (reader._ownerReadableStream._state === 'readable') {
223+ defaultReaderClosedPromiseReject(reader, new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));
224+ }
225+ else {
226+ defaultReaderClosedPromiseResetToRejected(reader, new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));
227+ }
228+ reader._ownerReadableStream._reader = undefined;
229+ reader._ownerReadableStream = undefined;
230+ }
231+ // Helper functions for the readers.
232+ function readerLockException(name) {
233+ return new TypeError('Cannot ' + name + ' a stream using a released reader');
234+ }
235+ // Helper functions for the ReadableStreamDefaultReader.
236+ function defaultReaderClosedPromiseInitialize(reader) {
237+ reader._closedPromise = newPromise((resolve, reject) => {
238+ reader._closedPromise_resolve = resolve;
239+ reader._closedPromise_reject = reject;
240+ });
241+ }
242+ function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) {
243+ defaultReaderClosedPromiseInitialize(reader);
244+ defaultReaderClosedPromiseReject(reader, reason);
245+ }
246+ function defaultReaderClosedPromiseInitializeAsResolved(reader) {
247+ defaultReaderClosedPromiseInitialize(reader);
248+ defaultReaderClosedPromiseResolve(reader);
249+ }
250+ function defaultReaderClosedPromiseReject(reader, reason) {
251+ if (reader._closedPromise_reject === undefined) {
252+ return;
253+ }
254+ setPromiseIsHandledToTrue(reader._closedPromise);
255+ reader._closedPromise_reject(reason);
256+ reader._closedPromise_resolve = undefined;
257+ reader._closedPromise_reject = undefined;
258+ }
259+ function defaultReaderClosedPromiseResetToRejected(reader, reason) {
260+ defaultReaderClosedPromiseInitializeAsRejected(reader, reason);
261+ }
262+ function defaultReaderClosedPromiseResolve(reader) {
263+ if (reader._closedPromise_resolve === undefined) {
264+ return;
265+ }
266+ reader._closedPromise_resolve(undefined);
267+ reader._closedPromise_resolve = undefined;
268+ reader._closedPromise_reject = undefined;
269+ }
270+
271+ const AbortSteps = SymbolPolyfill('[[AbortSteps]]');
272+ const ErrorSteps = SymbolPolyfill('[[ErrorSteps]]');
273+ const CancelSteps = SymbolPolyfill('[[CancelSteps]]');
274+ const PullSteps = SymbolPolyfill('[[PullSteps]]');
275+
276+ /// <reference lib="es2015.core" />
277+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill
278+ const NumberIsFinite = Number.isFinite || function (x) {
279+ return typeof x === 'number' && isFinite(x);
280+ };
281+
282+ /// <reference lib="es2015.core" />
283+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill
284+ const MathTrunc = Math.trunc || function (v) {
285+ return v < 0 ? Math.ceil(v) : Math.floor(v);
286+ };
287+
288+ // https://heycam.github.io/webidl/#idl-dictionaries
289+ function isDictionary(x) {
290+ return typeof x === 'object' || typeof x === 'function';
291+ }
292+ function assertDictionary(obj, context) {
293+ if (obj !== undefined && !isDictionary(obj)) {
294+ throw new TypeError(`${context} is not an object.`);
295+ }
296+ }
297+ // https://heycam.github.io/webidl/#idl-callback-functions
298+ function assertFunction(x, context) {
299+ if (typeof x !== 'function') {
300+ throw new TypeError(`${context} is not a function.`);
301+ }
302+ }
303+ // https://heycam.github.io/webidl/#idl-object
304+ function isObject(x) {
305+ return (typeof x === 'object' && x !== null) || typeof x === 'function';
306+ }
307+ function assertObject(x, context) {
308+ if (!isObject(x)) {
309+ throw new TypeError(`${context} is not an object.`);
310+ }
311+ }
312+ function assertRequiredArgument(x, position, context) {
313+ if (x === undefined) {
314+ throw new TypeError(`Parameter ${position} is required in '${context}'.`);
315+ }
316+ }
317+ function assertRequiredField(x, field, context) {
318+ if (x === undefined) {
319+ throw new TypeError(`${field} is required in '${context}'.`);
320+ }
321+ }
322+ // https://heycam.github.io/webidl/#idl-unrestricted-double
323+ function convertUnrestrictedDouble(value) {
324+ return Number(value);
325+ }
326+ function censorNegativeZero(x) {
327+ return x === 0 ? 0 : x;
328+ }
329+ function integerPart(x) {
330+ return censorNegativeZero(MathTrunc(x));
331+ }
332+ // https://heycam.github.io/webidl/#idl-unsigned-long-long
333+ function convertUnsignedLongLongWithEnforceRange(value, context) {
334+ const lowerBound = 0;
335+ const upperBound = Number.MAX_SAFE_INTEGER;
336+ let x = Number(value);
337+ x = censorNegativeZero(x);
338+ if (!NumberIsFinite(x)) {
339+ throw new TypeError(`${context} is not a finite number`);
340+ }
341+ x = integerPart(x);
342+ if (x < lowerBound || x > upperBound) {
343+ throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);
344+ }
345+ if (!NumberIsFinite(x) || x === 0) {
346+ return 0;
347+ }
348+ // TODO Use BigInt if supported?
349+ // let xBigInt = BigInt(integerPart(x));
350+ // xBigInt = BigInt.asUintN(64, xBigInt);
351+ // return Number(xBigInt);
352+ return x;
353+ }
354+
355+ function assertReadableStream(x, context) {
356+ if (!IsReadableStream(x)) {
357+ throw new TypeError(`${context} is not a ReadableStream.`);
358+ }
359+ }
360+
361+ // Abstract operations for the ReadableStream.
362+ function AcquireReadableStreamDefaultReader(stream) {
363+ return new ReadableStreamDefaultReader(stream);
364+ }
365+ // ReadableStream API exposed for controllers.
366+ function ReadableStreamAddReadRequest(stream, readRequest) {
367+ stream._reader._readRequests.push(readRequest);
368+ }
369+ function ReadableStreamFulfillReadRequest(stream, chunk, done) {
370+ const reader = stream._reader;
371+ const readRequest = reader._readRequests.shift();
372+ if (done) {
373+ readRequest._closeSteps();
374+ }
375+ else {
376+ readRequest._chunkSteps(chunk);
377+ }
378+ }
379+ function ReadableStreamGetNumReadRequests(stream) {
380+ return stream._reader._readRequests.length;
381+ }
382+ function ReadableStreamHasDefaultReader(stream) {
383+ const reader = stream._reader;
384+ if (reader === undefined) {
385+ return false;
386+ }
387+ if (!IsReadableStreamDefaultReader(reader)) {
388+ return false;
389+ }
390+ return true;
391+ }
392+ /**
393+ * A default reader vended by a {@link ReadableStream}.
394+ *
395+ * @public
396+ */
397+ class ReadableStreamDefaultReader {
398+ constructor(stream) {
399+ assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');
400+ assertReadableStream(stream, 'First parameter');
401+ if (IsReadableStreamLocked(stream)) {
402+ throw new TypeError('This stream has already been locked for exclusive reading by another reader');
403+ }
404+ ReadableStreamReaderGenericInitialize(this, stream);
405+ this._readRequests = new SimpleQueue();
406+ }
407+ /**
408+ * Returns a promise that will be fulfilled when the stream becomes closed,
409+ * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.
410+ */
411+ get closed() {
412+ if (!IsReadableStreamDefaultReader(this)) {
413+ return promiseRejectedWith(defaultReaderBrandCheckException('closed'));
414+ }
415+ return this._closedPromise;
416+ }
417+ /**
418+ * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.
419+ */
420+ cancel(reason = undefined) {
421+ if (!IsReadableStreamDefaultReader(this)) {
422+ return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));
423+ }
424+ if (this._ownerReadableStream === undefined) {
425+ return promiseRejectedWith(readerLockException('cancel'));
426+ }
427+ return ReadableStreamReaderGenericCancel(this, reason);
428+ }
429+ /**
430+ * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.
431+ *
432+ * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.
433+ */
434+ read() {
435+ if (!IsReadableStreamDefaultReader(this)) {
436+ return promiseRejectedWith(defaultReaderBrandCheckException('read'));
437+ }
438+ if (this._ownerReadableStream === undefined) {
439+ return promiseRejectedWith(readerLockException('read from'));
440+ }
441+ let resolvePromise;
442+ let rejectPromise;
443+ const promise = newPromise((resolve, reject) => {
444+ resolvePromise = resolve;
445+ rejectPromise = reject;
446+ });
447+ const readRequest = {
448+ _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),
449+ _closeSteps: () => resolvePromise({ value: undefined, done: true }),
450+ _errorSteps: e => rejectPromise(e)
451+ };
452+ ReadableStreamDefaultReaderRead(this, readRequest);
453+ return promise;
454+ }
455+ /**
456+ * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.
457+ * If the associated stream is errored when the lock is released, the reader will appear errored in the same way
458+ * from now on; otherwise, the reader will appear closed.
459+ *
460+ * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by
461+ * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to
462+ * do so will throw a `TypeError` and leave the reader locked to the stream.
463+ */
464+ releaseLock() {
465+ if (!IsReadableStreamDefaultReader(this)) {
466+ throw defaultReaderBrandCheckException('releaseLock');
467+ }
468+ if (this._ownerReadableStream === undefined) {
469+ return;
470+ }
471+ if (this._readRequests.length > 0) {
472+ throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');
473+ }
474+ ReadableStreamReaderGenericRelease(this);
475+ }
476+ }
477+ Object.defineProperties(ReadableStreamDefaultReader.prototype, {
478+ cancel: { enumerable: true },
479+ read: { enumerable: true },
480+ releaseLock: { enumerable: true },
481+ closed: { enumerable: true }
482+ });
483+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
484+ Object.defineProperty(ReadableStreamDefaultReader.prototype, SymbolPolyfill.toStringTag, {
485+ value: 'ReadableStreamDefaultReader',
486+ configurable: true
487+ });
488+ }
489+ // Abstract operations for the readers.
490+ function IsReadableStreamDefaultReader(x) {
491+ if (!typeIsObject(x)) {
492+ return false;
493+ }
494+ if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {
495+ return false;
496+ }
497+ return x instanceof ReadableStreamDefaultReader;
498+ }
499+ function ReadableStreamDefaultReaderRead(reader, readRequest) {
500+ const stream = reader._ownerReadableStream;
501+ stream._disturbed = true;
502+ if (stream._state === 'closed') {
503+ readRequest._closeSteps();
504+ }
505+ else if (stream._state === 'errored') {
506+ readRequest._errorSteps(stream._storedError);
507+ }
508+ else {
509+ stream._readableStreamController[PullSteps](readRequest);
510+ }
511+ }
512+ // Helper functions for the ReadableStreamDefaultReader.
513+ function defaultReaderBrandCheckException(name) {
514+ return new TypeError(`ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);
515+ }
516+
517+ /// <reference lib="es2018.asynciterable" />
518+ let AsyncIteratorPrototype;
519+ if (typeof SymbolPolyfill.asyncIterator === 'symbol') {
520+ // We're running inside a ES2018+ environment, but we're compiling to an older syntax.
521+ // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.
522+ AsyncIteratorPrototype = {
523+ // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )
524+ // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator
525+ [SymbolPolyfill.asyncIterator]() {
526+ return this;
527+ }
528+ };
529+ Object.defineProperty(AsyncIteratorPrototype, SymbolPolyfill.asyncIterator, { enumerable: false });
530+ }
531+
532+ /// <reference lib="es2018.asynciterable" />
533+ class ReadableStreamAsyncIteratorImpl {
534+ constructor(reader, preventCancel) {
535+ this._ongoingPromise = undefined;
536+ this._isFinished = false;
537+ this._reader = reader;
538+ this._preventCancel = preventCancel;
539+ }
540+ next() {
541+ const nextSteps = () => this._nextSteps();
542+ this._ongoingPromise = this._ongoingPromise ?
543+ transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :
544+ nextSteps();
545+ return this._ongoingPromise;
546+ }
547+ return(value) {
548+ const returnSteps = () => this._returnSteps(value);
549+ return this._ongoingPromise ?
550+ transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :
551+ returnSteps();
552+ }
553+ _nextSteps() {
554+ if (this._isFinished) {
555+ return Promise.resolve({ value: undefined, done: true });
556+ }
557+ const reader = this._reader;
558+ if (reader._ownerReadableStream === undefined) {
559+ return promiseRejectedWith(readerLockException('iterate'));
560+ }
561+ let resolvePromise;
562+ let rejectPromise;
563+ const promise = newPromise((resolve, reject) => {
564+ resolvePromise = resolve;
565+ rejectPromise = reject;
566+ });
567+ const readRequest = {
568+ _chunkSteps: chunk => {
569+ this._ongoingPromise = undefined;
570+ // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.
571+ // FIXME Is this a bug in the specification, or in the test?
572+ queueMicrotask(() => resolvePromise({ value: chunk, done: false }));
573+ },
574+ _closeSteps: () => {
575+ this._ongoingPromise = undefined;
576+ this._isFinished = true;
577+ ReadableStreamReaderGenericRelease(reader);
578+ resolvePromise({ value: undefined, done: true });
579+ },
580+ _errorSteps: reason => {
581+ this._ongoingPromise = undefined;
582+ this._isFinished = true;
583+ ReadableStreamReaderGenericRelease(reader);
584+ rejectPromise(reason);
585+ }
586+ };
587+ ReadableStreamDefaultReaderRead(reader, readRequest);
588+ return promise;
589+ }
590+ _returnSteps(value) {
591+ if (this._isFinished) {
592+ return Promise.resolve({ value, done: true });
593+ }
594+ this._isFinished = true;
595+ const reader = this._reader;
596+ if (reader._ownerReadableStream === undefined) {
597+ return promiseRejectedWith(readerLockException('finish iterating'));
598+ }
599+ if (!this._preventCancel) {
600+ const result = ReadableStreamReaderGenericCancel(reader, value);
601+ ReadableStreamReaderGenericRelease(reader);
602+ return transformPromiseWith(result, () => ({ value, done: true }));
603+ }
604+ ReadableStreamReaderGenericRelease(reader);
605+ return promiseResolvedWith({ value, done: true });
606+ }
607+ }
608+ const ReadableStreamAsyncIteratorPrototype = {
609+ next() {
610+ if (!IsReadableStreamAsyncIterator(this)) {
611+ return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));
612+ }
613+ return this._asyncIteratorImpl.next();
614+ },
615+ return(value) {
616+ if (!IsReadableStreamAsyncIterator(this)) {
617+ return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));
618+ }
619+ return this._asyncIteratorImpl.return(value);
620+ }
621+ };
622+ if (AsyncIteratorPrototype !== undefined) {
623+ Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);
624+ }
625+ // Abstract operations for the ReadableStream.
626+ function AcquireReadableStreamAsyncIterator(stream, preventCancel) {
627+ const reader = AcquireReadableStreamDefaultReader(stream);
628+ const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);
629+ const iterator = Object.create(ReadableStreamAsyncIteratorPrototype);
630+ iterator._asyncIteratorImpl = impl;
631+ return iterator;
632+ }
633+ function IsReadableStreamAsyncIterator(x) {
634+ if (!typeIsObject(x)) {
635+ return false;
636+ }
637+ if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {
638+ return false;
639+ }
640+ try {
641+ // noinspection SuspiciousTypeOfGuard
642+ return x._asyncIteratorImpl instanceof
643+ ReadableStreamAsyncIteratorImpl;
644+ }
645+ catch (_a) {
646+ return false;
647+ }
648+ }
649+ // Helper functions for the ReadableStream.
650+ function streamAsyncIteratorBrandCheckException(name) {
651+ return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);
652+ }
653+
654+ /// <reference lib="es2015.core" />
655+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill
656+ const NumberIsNaN = Number.isNaN || function (x) {
657+ // eslint-disable-next-line no-self-compare
658+ return x !== x;
659+ };
660+
661+ function CreateArrayFromList(elements) {
662+ // We use arrays to represent lists, so this is basically a no-op.
663+ // Do a slice though just in case we happen to depend on the unique-ness.
664+ return elements.slice();
665+ }
666+ function CopyDataBlockBytes(dest, destOffset, src, srcOffset, n) {
667+ new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);
668+ }
669+ // Not implemented correctly
670+ function TransferArrayBuffer(O) {
671+ return O;
672+ }
673+ // Not implemented correctly
674+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
675+ function IsDetachedBuffer(O) {
676+ return false;
677+ }
678+ function ArrayBufferSlice(buffer, begin, end) {
679+ // ArrayBuffer.prototype.slice is not available on IE10
680+ // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice
681+ if (buffer.slice) {
682+ return buffer.slice(begin, end);
683+ }
684+ const length = end - begin;
685+ const slice = new ArrayBuffer(length);
686+ CopyDataBlockBytes(slice, 0, buffer, begin, length);
687+ return slice;
688+ }
689+
690+ function IsNonNegativeNumber(v) {
691+ if (typeof v !== 'number') {
692+ return false;
693+ }
694+ if (NumberIsNaN(v)) {
695+ return false;
696+ }
697+ if (v < 0) {
698+ return false;
699+ }
700+ return true;
701+ }
702+ function CloneAsUint8Array(O) {
703+ const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);
704+ return new Uint8Array(buffer);
705+ }
706+
707+ function DequeueValue(container) {
708+ const pair = container._queue.shift();
709+ container._queueTotalSize -= pair.size;
710+ if (container._queueTotalSize < 0) {
711+ container._queueTotalSize = 0;
712+ }
713+ return pair.value;
714+ }
715+ function EnqueueValueWithSize(container, value, size) {
716+ if (!IsNonNegativeNumber(size) || size === Infinity) {
717+ throw new RangeError('Size must be a finite, non-NaN, non-negative number.');
718+ }
719+ container._queue.push({ value, size });
720+ container._queueTotalSize += size;
721+ }
722+ function PeekQueueValue(container) {
723+ const pair = container._queue.peek();
724+ return pair.value;
725+ }
726+ function ResetQueue(container) {
727+ container._queue = new SimpleQueue();
728+ container._queueTotalSize = 0;
729+ }
730+
731+ /**
732+ * A pull-into request in a {@link ReadableByteStreamController}.
733+ *
734+ * @public
735+ */
736+ class ReadableStreamBYOBRequest {
737+ constructor() {
738+ throw new TypeError('Illegal constructor');
739+ }
740+ /**
741+ * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.
742+ */
743+ get view() {
744+ if (!IsReadableStreamBYOBRequest(this)) {
745+ throw byobRequestBrandCheckException('view');
746+ }
747+ return this._view;
748+ }
749+ respond(bytesWritten) {
750+ if (!IsReadableStreamBYOBRequest(this)) {
751+ throw byobRequestBrandCheckException('respond');
752+ }
753+ assertRequiredArgument(bytesWritten, 1, 'respond');
754+ bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');
755+ if (this._associatedReadableByteStreamController === undefined) {
756+ throw new TypeError('This BYOB request has been invalidated');
757+ }
758+ if (IsDetachedBuffer(this._view.buffer)) ;
759+ ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);
760+ }
761+ respondWithNewView(view) {
762+ if (!IsReadableStreamBYOBRequest(this)) {
763+ throw byobRequestBrandCheckException('respondWithNewView');
764+ }
765+ assertRequiredArgument(view, 1, 'respondWithNewView');
766+ if (!ArrayBuffer.isView(view)) {
767+ throw new TypeError('You can only respond with array buffer views');
768+ }
769+ if (this._associatedReadableByteStreamController === undefined) {
770+ throw new TypeError('This BYOB request has been invalidated');
771+ }
772+ if (IsDetachedBuffer(view.buffer)) ;
773+ ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);
774+ }
775+ }
776+ Object.defineProperties(ReadableStreamBYOBRequest.prototype, {
777+ respond: { enumerable: true },
778+ respondWithNewView: { enumerable: true },
779+ view: { enumerable: true }
780+ });
781+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
782+ Object.defineProperty(ReadableStreamBYOBRequest.prototype, SymbolPolyfill.toStringTag, {
783+ value: 'ReadableStreamBYOBRequest',
784+ configurable: true
785+ });
786+ }
787+ /**
788+ * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.
789+ *
790+ * @public
791+ */
792+ class ReadableByteStreamController {
793+ constructor() {
794+ throw new TypeError('Illegal constructor');
795+ }
796+ /**
797+ * Returns the current BYOB pull request, or `null` if there isn't one.
798+ */
799+ get byobRequest() {
800+ if (!IsReadableByteStreamController(this)) {
801+ throw byteStreamControllerBrandCheckException('byobRequest');
802+ }
803+ return ReadableByteStreamControllerGetBYOBRequest(this);
804+ }
805+ /**
806+ * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is
807+ * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.
808+ */
809+ get desiredSize() {
810+ if (!IsReadableByteStreamController(this)) {
811+ throw byteStreamControllerBrandCheckException('desiredSize');
812+ }
813+ return ReadableByteStreamControllerGetDesiredSize(this);
814+ }
815+ /**
816+ * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from
817+ * the stream, but once those are read, the stream will become closed.
818+ */
819+ close() {
820+ if (!IsReadableByteStreamController(this)) {
821+ throw byteStreamControllerBrandCheckException('close');
822+ }
823+ if (this._closeRequested) {
824+ throw new TypeError('The stream has already been closed; do not close it again!');
825+ }
826+ const state = this._controlledReadableByteStream._state;
827+ if (state !== 'readable') {
828+ throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);
829+ }
830+ ReadableByteStreamControllerClose(this);
831+ }
832+ enqueue(chunk) {
833+ if (!IsReadableByteStreamController(this)) {
834+ throw byteStreamControllerBrandCheckException('enqueue');
835+ }
836+ assertRequiredArgument(chunk, 1, 'enqueue');
837+ if (!ArrayBuffer.isView(chunk)) {
838+ throw new TypeError('chunk must be an array buffer view');
839+ }
840+ if (chunk.byteLength === 0) {
841+ throw new TypeError('chunk must have non-zero byteLength');
842+ }
843+ if (chunk.buffer.byteLength === 0) {
844+ throw new TypeError(`chunk's buffer must have non-zero byteLength`);
845+ }
846+ if (this._closeRequested) {
847+ throw new TypeError('stream is closed or draining');
848+ }
849+ const state = this._controlledReadableByteStream._state;
850+ if (state !== 'readable') {
851+ throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);
852+ }
853+ ReadableByteStreamControllerEnqueue(this, chunk);
854+ }
855+ /**
856+ * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.
857+ */
858+ error(e = undefined) {
859+ if (!IsReadableByteStreamController(this)) {
860+ throw byteStreamControllerBrandCheckException('error');
861+ }
862+ ReadableByteStreamControllerError(this, e);
863+ }
864+ /** @internal */
865+ [CancelSteps](reason) {
866+ ReadableByteStreamControllerClearPendingPullIntos(this);
867+ ResetQueue(this);
868+ const result = this._cancelAlgorithm(reason);
869+ ReadableByteStreamControllerClearAlgorithms(this);
870+ return result;
871+ }
872+ /** @internal */
873+ [PullSteps](readRequest) {
874+ const stream = this._controlledReadableByteStream;
875+ if (this._queueTotalSize > 0) {
876+ const entry = this._queue.shift();
877+ this._queueTotalSize -= entry.byteLength;
878+ ReadableByteStreamControllerHandleQueueDrain(this);
879+ const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);
880+ readRequest._chunkSteps(view);
881+ return;
882+ }
883+ const autoAllocateChunkSize = this._autoAllocateChunkSize;
884+ if (autoAllocateChunkSize !== undefined) {
885+ let buffer;
886+ try {
887+ buffer = new ArrayBuffer(autoAllocateChunkSize);
888+ }
889+ catch (bufferE) {
890+ readRequest._errorSteps(bufferE);
891+ return;
892+ }
893+ const pullIntoDescriptor = {
894+ buffer,
895+ bufferByteLength: autoAllocateChunkSize,
896+ byteOffset: 0,
897+ byteLength: autoAllocateChunkSize,
898+ bytesFilled: 0,
899+ elementSize: 1,
900+ viewConstructor: Uint8Array,
901+ readerType: 'default'
902+ };
903+ this._pendingPullIntos.push(pullIntoDescriptor);
904+ }
905+ ReadableStreamAddReadRequest(stream, readRequest);
906+ ReadableByteStreamControllerCallPullIfNeeded(this);
907+ }
908+ }
909+ Object.defineProperties(ReadableByteStreamController.prototype, {
910+ close: { enumerable: true },
911+ enqueue: { enumerable: true },
912+ error: { enumerable: true },
913+ byobRequest: { enumerable: true },
914+ desiredSize: { enumerable: true }
915+ });
916+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
917+ Object.defineProperty(ReadableByteStreamController.prototype, SymbolPolyfill.toStringTag, {
918+ value: 'ReadableByteStreamController',
919+ configurable: true
920+ });
921+ }
922+ // Abstract operations for the ReadableByteStreamController.
923+ function IsReadableByteStreamController(x) {
924+ if (!typeIsObject(x)) {
925+ return false;
926+ }
927+ if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {
928+ return false;
929+ }
930+ return x instanceof ReadableByteStreamController;
931+ }
932+ function IsReadableStreamBYOBRequest(x) {
933+ if (!typeIsObject(x)) {
934+ return false;
935+ }
936+ if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {
937+ return false;
938+ }
939+ return x instanceof ReadableStreamBYOBRequest;
940+ }
941+ function ReadableByteStreamControllerCallPullIfNeeded(controller) {
942+ const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);
943+ if (!shouldPull) {
944+ return;
945+ }
946+ if (controller._pulling) {
947+ controller._pullAgain = true;
948+ return;
949+ }
950+ controller._pulling = true;
951+ // TODO: Test controller argument
952+ const pullPromise = controller._pullAlgorithm();
953+ uponPromise(pullPromise, () => {
954+ controller._pulling = false;
955+ if (controller._pullAgain) {
956+ controller._pullAgain = false;
957+ ReadableByteStreamControllerCallPullIfNeeded(controller);
958+ }
959+ }, e => {
960+ ReadableByteStreamControllerError(controller, e);
961+ });
962+ }
963+ function ReadableByteStreamControllerClearPendingPullIntos(controller) {
964+ ReadableByteStreamControllerInvalidateBYOBRequest(controller);
965+ controller._pendingPullIntos = new SimpleQueue();
966+ }
967+ function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) {
968+ let done = false;
969+ if (stream._state === 'closed') {
970+ done = true;
971+ }
972+ const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);
973+ if (pullIntoDescriptor.readerType === 'default') {
974+ ReadableStreamFulfillReadRequest(stream, filledView, done);
975+ }
976+ else {
977+ ReadableStreamFulfillReadIntoRequest(stream, filledView, done);
978+ }
979+ }
980+ function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) {
981+ const bytesFilled = pullIntoDescriptor.bytesFilled;
982+ const elementSize = pullIntoDescriptor.elementSize;
983+ return new pullIntoDescriptor.viewConstructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize);
984+ }
985+ function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) {
986+ controller._queue.push({ buffer, byteOffset, byteLength });
987+ controller._queueTotalSize += byteLength;
988+ }
989+ function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) {
990+ const elementSize = pullIntoDescriptor.elementSize;
991+ const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;
992+ const maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);
993+ const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;
994+ const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;
995+ let totalBytesToCopyRemaining = maxBytesToCopy;
996+ let ready = false;
997+ if (maxAlignedBytes > currentAlignedBytes) {
998+ totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;
999+ ready = true;
1000+ }
1001+ const queue = controller._queue;
1002+ while (totalBytesToCopyRemaining > 0) {
1003+ const headOfQueue = queue.peek();
1004+ const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);
1005+ const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;
1006+ CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);
1007+ if (headOfQueue.byteLength === bytesToCopy) {
1008+ queue.shift();
1009+ }
1010+ else {
1011+ headOfQueue.byteOffset += bytesToCopy;
1012+ headOfQueue.byteLength -= bytesToCopy;
1013+ }
1014+ controller._queueTotalSize -= bytesToCopy;
1015+ ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);
1016+ totalBytesToCopyRemaining -= bytesToCopy;
1017+ }
1018+ return ready;
1019+ }
1020+ function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) {
1021+ pullIntoDescriptor.bytesFilled += size;
1022+ }
1023+ function ReadableByteStreamControllerHandleQueueDrain(controller) {
1024+ if (controller._queueTotalSize === 0 && controller._closeRequested) {
1025+ ReadableByteStreamControllerClearAlgorithms(controller);
1026+ ReadableStreamClose(controller._controlledReadableByteStream);
1027+ }
1028+ else {
1029+ ReadableByteStreamControllerCallPullIfNeeded(controller);
1030+ }
1031+ }
1032+ function ReadableByteStreamControllerInvalidateBYOBRequest(controller) {
1033+ if (controller._byobRequest === null) {
1034+ return;
1035+ }
1036+ controller._byobRequest._associatedReadableByteStreamController = undefined;
1037+ controller._byobRequest._view = null;
1038+ controller._byobRequest = null;
1039+ }
1040+ function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) {
1041+ while (controller._pendingPullIntos.length > 0) {
1042+ if (controller._queueTotalSize === 0) {
1043+ return;
1044+ }
1045+ const pullIntoDescriptor = controller._pendingPullIntos.peek();
1046+ if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {
1047+ ReadableByteStreamControllerShiftPendingPullInto(controller);
1048+ ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);
1049+ }
1050+ }
1051+ }
1052+ function ReadableByteStreamControllerPullInto(controller, view, readIntoRequest) {
1053+ const stream = controller._controlledReadableByteStream;
1054+ let elementSize = 1;
1055+ if (view.constructor !== DataView) {
1056+ elementSize = view.constructor.BYTES_PER_ELEMENT;
1057+ }
1058+ const ctor = view.constructor;
1059+ // try {
1060+ const buffer = TransferArrayBuffer(view.buffer);
1061+ // } catch (e) {
1062+ // readIntoRequest._errorSteps(e);
1063+ // return;
1064+ // }
1065+ const pullIntoDescriptor = {
1066+ buffer,
1067+ bufferByteLength: buffer.byteLength,
1068+ byteOffset: view.byteOffset,
1069+ byteLength: view.byteLength,
1070+ bytesFilled: 0,
1071+ elementSize,
1072+ viewConstructor: ctor,
1073+ readerType: 'byob'
1074+ };
1075+ if (controller._pendingPullIntos.length > 0) {
1076+ controller._pendingPullIntos.push(pullIntoDescriptor);
1077+ // No ReadableByteStreamControllerCallPullIfNeeded() call since:
1078+ // - No change happens on desiredSize
1079+ // - The source has already been notified of that there's at least 1 pending read(view)
1080+ ReadableStreamAddReadIntoRequest(stream, readIntoRequest);
1081+ return;
1082+ }
1083+ if (stream._state === 'closed') {
1084+ const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);
1085+ readIntoRequest._closeSteps(emptyView);
1086+ return;
1087+ }
1088+ if (controller._queueTotalSize > 0) {
1089+ if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {
1090+ const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);
1091+ ReadableByteStreamControllerHandleQueueDrain(controller);
1092+ readIntoRequest._chunkSteps(filledView);
1093+ return;
1094+ }
1095+ if (controller._closeRequested) {
1096+ const e = new TypeError('Insufficient bytes to fill elements in the given buffer');
1097+ ReadableByteStreamControllerError(controller, e);
1098+ readIntoRequest._errorSteps(e);
1099+ return;
1100+ }
1101+ }
1102+ controller._pendingPullIntos.push(pullIntoDescriptor);
1103+ ReadableStreamAddReadIntoRequest(stream, readIntoRequest);
1104+ ReadableByteStreamControllerCallPullIfNeeded(controller);
1105+ }
1106+ function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) {
1107+ const stream = controller._controlledReadableByteStream;
1108+ if (ReadableStreamHasBYOBReader(stream)) {
1109+ while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {
1110+ const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);
1111+ ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);
1112+ }
1113+ }
1114+ }
1115+ function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) {
1116+ ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);
1117+ if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {
1118+ return;
1119+ }
1120+ ReadableByteStreamControllerShiftPendingPullInto(controller);
1121+ const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;
1122+ if (remainderSize > 0) {
1123+ const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;
1124+ const remainder = ArrayBufferSlice(pullIntoDescriptor.buffer, end - remainderSize, end);
1125+ ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);
1126+ }
1127+ pullIntoDescriptor.bytesFilled -= remainderSize;
1128+ ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);
1129+ ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);
1130+ }
1131+ function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) {
1132+ const firstDescriptor = controller._pendingPullIntos.peek();
1133+ ReadableByteStreamControllerInvalidateBYOBRequest(controller);
1134+ const state = controller._controlledReadableByteStream._state;
1135+ if (state === 'closed') {
1136+ ReadableByteStreamControllerRespondInClosedState(controller);
1137+ }
1138+ else {
1139+ ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);
1140+ }
1141+ ReadableByteStreamControllerCallPullIfNeeded(controller);
1142+ }
1143+ function ReadableByteStreamControllerShiftPendingPullInto(controller) {
1144+ const descriptor = controller._pendingPullIntos.shift();
1145+ return descriptor;
1146+ }
1147+ function ReadableByteStreamControllerShouldCallPull(controller) {
1148+ const stream = controller._controlledReadableByteStream;
1149+ if (stream._state !== 'readable') {
1150+ return false;
1151+ }
1152+ if (controller._closeRequested) {
1153+ return false;
1154+ }
1155+ if (!controller._started) {
1156+ return false;
1157+ }
1158+ if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {
1159+ return true;
1160+ }
1161+ if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {
1162+ return true;
1163+ }
1164+ const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);
1165+ if (desiredSize > 0) {
1166+ return true;
1167+ }
1168+ return false;
1169+ }
1170+ function ReadableByteStreamControllerClearAlgorithms(controller) {
1171+ controller._pullAlgorithm = undefined;
1172+ controller._cancelAlgorithm = undefined;
1173+ }
1174+ // A client of ReadableByteStreamController may use these functions directly to bypass state check.
1175+ function ReadableByteStreamControllerClose(controller) {
1176+ const stream = controller._controlledReadableByteStream;
1177+ if (controller._closeRequested || stream._state !== 'readable') {
1178+ return;
1179+ }
1180+ if (controller._queueTotalSize > 0) {
1181+ controller._closeRequested = true;
1182+ return;
1183+ }
1184+ if (controller._pendingPullIntos.length > 0) {
1185+ const firstPendingPullInto = controller._pendingPullIntos.peek();
1186+ if (firstPendingPullInto.bytesFilled > 0) {
1187+ const e = new TypeError('Insufficient bytes to fill elements in the given buffer');
1188+ ReadableByteStreamControllerError(controller, e);
1189+ throw e;
1190+ }
1191+ }
1192+ ReadableByteStreamControllerClearAlgorithms(controller);
1193+ ReadableStreamClose(stream);
1194+ }
1195+ function ReadableByteStreamControllerEnqueue(controller, chunk) {
1196+ const stream = controller._controlledReadableByteStream;
1197+ if (controller._closeRequested || stream._state !== 'readable') {
1198+ return;
1199+ }
1200+ const buffer = chunk.buffer;
1201+ const byteOffset = chunk.byteOffset;
1202+ const byteLength = chunk.byteLength;
1203+ const transferredBuffer = TransferArrayBuffer(buffer);
1204+ if (controller._pendingPullIntos.length > 0) {
1205+ const firstPendingPullInto = controller._pendingPullIntos.peek();
1206+ if (IsDetachedBuffer(firstPendingPullInto.buffer)) ;
1207+ firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);
1208+ }
1209+ ReadableByteStreamControllerInvalidateBYOBRequest(controller);
1210+ if (ReadableStreamHasDefaultReader(stream)) {
1211+ if (ReadableStreamGetNumReadRequests(stream) === 0) {
1212+ ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
1213+ }
1214+ else {
1215+ if (controller._pendingPullIntos.length > 0) {
1216+ ReadableByteStreamControllerShiftPendingPullInto(controller);
1217+ }
1218+ const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);
1219+ ReadableStreamFulfillReadRequest(stream, transferredView, false);
1220+ }
1221+ }
1222+ else if (ReadableStreamHasBYOBReader(stream)) {
1223+ // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.
1224+ ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
1225+ ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);
1226+ }
1227+ else {
1228+ ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
1229+ }
1230+ ReadableByteStreamControllerCallPullIfNeeded(controller);
1231+ }
1232+ function ReadableByteStreamControllerError(controller, e) {
1233+ const stream = controller._controlledReadableByteStream;
1234+ if (stream._state !== 'readable') {
1235+ return;
1236+ }
1237+ ReadableByteStreamControllerClearPendingPullIntos(controller);
1238+ ResetQueue(controller);
1239+ ReadableByteStreamControllerClearAlgorithms(controller);
1240+ ReadableStreamError(stream, e);
1241+ }
1242+ function ReadableByteStreamControllerGetBYOBRequest(controller) {
1243+ if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {
1244+ const firstDescriptor = controller._pendingPullIntos.peek();
1245+ const view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled);
1246+ const byobRequest = Object.create(ReadableStreamBYOBRequest.prototype);
1247+ SetUpReadableStreamBYOBRequest(byobRequest, controller, view);
1248+ controller._byobRequest = byobRequest;
1249+ }
1250+ return controller._byobRequest;
1251+ }
1252+ function ReadableByteStreamControllerGetDesiredSize(controller) {
1253+ const state = controller._controlledReadableByteStream._state;
1254+ if (state === 'errored') {
1255+ return null;
1256+ }
1257+ if (state === 'closed') {
1258+ return 0;
1259+ }
1260+ return controller._strategyHWM - controller._queueTotalSize;
1261+ }
1262+ function ReadableByteStreamControllerRespond(controller, bytesWritten) {
1263+ const firstDescriptor = controller._pendingPullIntos.peek();
1264+ const state = controller._controlledReadableByteStream._state;
1265+ if (state === 'closed') {
1266+ if (bytesWritten !== 0) {
1267+ throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');
1268+ }
1269+ }
1270+ else {
1271+ if (bytesWritten === 0) {
1272+ throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');
1273+ }
1274+ if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {
1275+ throw new RangeError('bytesWritten out of range');
1276+ }
1277+ }
1278+ firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);
1279+ ReadableByteStreamControllerRespondInternal(controller, bytesWritten);
1280+ }
1281+ function ReadableByteStreamControllerRespondWithNewView(controller, view) {
1282+ const firstDescriptor = controller._pendingPullIntos.peek();
1283+ const state = controller._controlledReadableByteStream._state;
1284+ if (state === 'closed') {
1285+ if (view.byteLength !== 0) {
1286+ throw new TypeError('The view\'s length must be 0 when calling respondWithNewView() on a closed stream');
1287+ }
1288+ }
1289+ else {
1290+ if (view.byteLength === 0) {
1291+ throw new TypeError('The view\'s length must be greater than 0 when calling respondWithNewView() on a readable stream');
1292+ }
1293+ }
1294+ if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {
1295+ throw new RangeError('The region specified by view does not match byobRequest');
1296+ }
1297+ if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {
1298+ throw new RangeError('The buffer of view has different capacity than byobRequest');
1299+ }
1300+ if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {
1301+ throw new RangeError('The region specified by view is larger than byobRequest');
1302+ }
1303+ const viewByteLength = view.byteLength;
1304+ firstDescriptor.buffer = TransferArrayBuffer(view.buffer);
1305+ ReadableByteStreamControllerRespondInternal(controller, viewByteLength);
1306+ }
1307+ function SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize) {
1308+ controller._controlledReadableByteStream = stream;
1309+ controller._pullAgain = false;
1310+ controller._pulling = false;
1311+ controller._byobRequest = null;
1312+ // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.
1313+ controller._queue = controller._queueTotalSize = undefined;
1314+ ResetQueue(controller);
1315+ controller._closeRequested = false;
1316+ controller._started = false;
1317+ controller._strategyHWM = highWaterMark;
1318+ controller._pullAlgorithm = pullAlgorithm;
1319+ controller._cancelAlgorithm = cancelAlgorithm;
1320+ controller._autoAllocateChunkSize = autoAllocateChunkSize;
1321+ controller._pendingPullIntos = new SimpleQueue();
1322+ stream._readableStreamController = controller;
1323+ const startResult = startAlgorithm();
1324+ uponPromise(promiseResolvedWith(startResult), () => {
1325+ controller._started = true;
1326+ ReadableByteStreamControllerCallPullIfNeeded(controller);
1327+ }, r => {
1328+ ReadableByteStreamControllerError(controller, r);
1329+ });
1330+ }
1331+ function SetUpReadableByteStreamControllerFromUnderlyingSource(stream, underlyingByteSource, highWaterMark) {
1332+ const controller = Object.create(ReadableByteStreamController.prototype);
1333+ let startAlgorithm = () => undefined;
1334+ let pullAlgorithm = () => promiseResolvedWith(undefined);
1335+ let cancelAlgorithm = () => promiseResolvedWith(undefined);
1336+ if (underlyingByteSource.start !== undefined) {
1337+ startAlgorithm = () => underlyingByteSource.start(controller);
1338+ }
1339+ if (underlyingByteSource.pull !== undefined) {
1340+ pullAlgorithm = () => underlyingByteSource.pull(controller);
1341+ }
1342+ if (underlyingByteSource.cancel !== undefined) {
1343+ cancelAlgorithm = reason => underlyingByteSource.cancel(reason);
1344+ }
1345+ const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;
1346+ if (autoAllocateChunkSize === 0) {
1347+ throw new TypeError('autoAllocateChunkSize must be greater than 0');
1348+ }
1349+ SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize);
1350+ }
1351+ function SetUpReadableStreamBYOBRequest(request, controller, view) {
1352+ request._associatedReadableByteStreamController = controller;
1353+ request._view = view;
1354+ }
1355+ // Helper functions for the ReadableStreamBYOBRequest.
1356+ function byobRequestBrandCheckException(name) {
1357+ return new TypeError(`ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);
1358+ }
1359+ // Helper functions for the ReadableByteStreamController.
1360+ function byteStreamControllerBrandCheckException(name) {
1361+ return new TypeError(`ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);
1362+ }
1363+
1364+ // Abstract operations for the ReadableStream.
1365+ function AcquireReadableStreamBYOBReader(stream) {
1366+ return new ReadableStreamBYOBReader(stream);
1367+ }
1368+ // ReadableStream API exposed for controllers.
1369+ function ReadableStreamAddReadIntoRequest(stream, readIntoRequest) {
1370+ stream._reader._readIntoRequests.push(readIntoRequest);
1371+ }
1372+ function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) {
1373+ const reader = stream._reader;
1374+ const readIntoRequest = reader._readIntoRequests.shift();
1375+ if (done) {
1376+ readIntoRequest._closeSteps(chunk);
1377+ }
1378+ else {
1379+ readIntoRequest._chunkSteps(chunk);
1380+ }
1381+ }
1382+ function ReadableStreamGetNumReadIntoRequests(stream) {
1383+ return stream._reader._readIntoRequests.length;
1384+ }
1385+ function ReadableStreamHasBYOBReader(stream) {
1386+ const reader = stream._reader;
1387+ if (reader === undefined) {
1388+ return false;
1389+ }
1390+ if (!IsReadableStreamBYOBReader(reader)) {
1391+ return false;
1392+ }
1393+ return true;
1394+ }
1395+ /**
1396+ * A BYOB reader vended by a {@link ReadableStream}.
1397+ *
1398+ * @public
1399+ */
1400+ class ReadableStreamBYOBReader {
1401+ constructor(stream) {
1402+ assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');
1403+ assertReadableStream(stream, 'First parameter');
1404+ if (IsReadableStreamLocked(stream)) {
1405+ throw new TypeError('This stream has already been locked for exclusive reading by another reader');
1406+ }
1407+ if (!IsReadableByteStreamController(stream._readableStreamController)) {
1408+ throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +
1409+ 'source');
1410+ }
1411+ ReadableStreamReaderGenericInitialize(this, stream);
1412+ this._readIntoRequests = new SimpleQueue();
1413+ }
1414+ /**
1415+ * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or
1416+ * the reader's lock is released before the stream finishes closing.
1417+ */
1418+ get closed() {
1419+ if (!IsReadableStreamBYOBReader(this)) {
1420+ return promiseRejectedWith(byobReaderBrandCheckException('closed'));
1421+ }
1422+ return this._closedPromise;
1423+ }
1424+ /**
1425+ * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.
1426+ */
1427+ cancel(reason = undefined) {
1428+ if (!IsReadableStreamBYOBReader(this)) {
1429+ return promiseRejectedWith(byobReaderBrandCheckException('cancel'));
1430+ }
1431+ if (this._ownerReadableStream === undefined) {
1432+ return promiseRejectedWith(readerLockException('cancel'));
1433+ }
1434+ return ReadableStreamReaderGenericCancel(this, reason);
1435+ }
1436+ /**
1437+ * Attempts to reads bytes into view, and returns a promise resolved with the result.
1438+ *
1439+ * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.
1440+ */
1441+ read(view) {
1442+ if (!IsReadableStreamBYOBReader(this)) {
1443+ return promiseRejectedWith(byobReaderBrandCheckException('read'));
1444+ }
1445+ if (!ArrayBuffer.isView(view)) {
1446+ return promiseRejectedWith(new TypeError('view must be an array buffer view'));
1447+ }
1448+ if (view.byteLength === 0) {
1449+ return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));
1450+ }
1451+ if (view.buffer.byteLength === 0) {
1452+ return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));
1453+ }
1454+ if (IsDetachedBuffer(view.buffer)) ;
1455+ if (this._ownerReadableStream === undefined) {
1456+ return promiseRejectedWith(readerLockException('read from'));
1457+ }
1458+ let resolvePromise;
1459+ let rejectPromise;
1460+ const promise = newPromise((resolve, reject) => {
1461+ resolvePromise = resolve;
1462+ rejectPromise = reject;
1463+ });
1464+ const readIntoRequest = {
1465+ _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),
1466+ _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),
1467+ _errorSteps: e => rejectPromise(e)
1468+ };
1469+ ReadableStreamBYOBReaderRead(this, view, readIntoRequest);
1470+ return promise;
1471+ }
1472+ /**
1473+ * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.
1474+ * If the associated stream is errored when the lock is released, the reader will appear errored in the same way
1475+ * from now on; otherwise, the reader will appear closed.
1476+ *
1477+ * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by
1478+ * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to
1479+ * do so will throw a `TypeError` and leave the reader locked to the stream.
1480+ */
1481+ releaseLock() {
1482+ if (!IsReadableStreamBYOBReader(this)) {
1483+ throw byobReaderBrandCheckException('releaseLock');
1484+ }
1485+ if (this._ownerReadableStream === undefined) {
1486+ return;
1487+ }
1488+ if (this._readIntoRequests.length > 0) {
1489+ throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');
1490+ }
1491+ ReadableStreamReaderGenericRelease(this);
1492+ }
1493+ }
1494+ Object.defineProperties(ReadableStreamBYOBReader.prototype, {
1495+ cancel: { enumerable: true },
1496+ read: { enumerable: true },
1497+ releaseLock: { enumerable: true },
1498+ closed: { enumerable: true }
1499+ });
1500+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
1501+ Object.defineProperty(ReadableStreamBYOBReader.prototype, SymbolPolyfill.toStringTag, {
1502+ value: 'ReadableStreamBYOBReader',
1503+ configurable: true
1504+ });
1505+ }
1506+ // Abstract operations for the readers.
1507+ function IsReadableStreamBYOBReader(x) {
1508+ if (!typeIsObject(x)) {
1509+ return false;
1510+ }
1511+ if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {
1512+ return false;
1513+ }
1514+ return x instanceof ReadableStreamBYOBReader;
1515+ }
1516+ function ReadableStreamBYOBReaderRead(reader, view, readIntoRequest) {
1517+ const stream = reader._ownerReadableStream;
1518+ stream._disturbed = true;
1519+ if (stream._state === 'errored') {
1520+ readIntoRequest._errorSteps(stream._storedError);
1521+ }
1522+ else {
1523+ ReadableByteStreamControllerPullInto(stream._readableStreamController, view, readIntoRequest);
1524+ }
1525+ }
1526+ // Helper functions for the ReadableStreamBYOBReader.
1527+ function byobReaderBrandCheckException(name) {
1528+ return new TypeError(`ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);
1529+ }
1530+
1531+ function ExtractHighWaterMark(strategy, defaultHWM) {
1532+ const { highWaterMark } = strategy;
1533+ if (highWaterMark === undefined) {
1534+ return defaultHWM;
1535+ }
1536+ if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {
1537+ throw new RangeError('Invalid highWaterMark');
1538+ }
1539+ return highWaterMark;
1540+ }
1541+ function ExtractSizeAlgorithm(strategy) {
1542+ const { size } = strategy;
1543+ if (!size) {
1544+ return () => 1;
1545+ }
1546+ return size;
1547+ }
1548+
1549+ function convertQueuingStrategy(init, context) {
1550+ assertDictionary(init, context);
1551+ const highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;
1552+ const size = init === null || init === void 0 ? void 0 : init.size;
1553+ return {
1554+ highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),
1555+ size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)
1556+ };
1557+ }
1558+ function convertQueuingStrategySize(fn, context) {
1559+ assertFunction(fn, context);
1560+ return chunk => convertUnrestrictedDouble(fn(chunk));
1561+ }
1562+
1563+ function convertUnderlyingSink(original, context) {
1564+ assertDictionary(original, context);
1565+ const abort = original === null || original === void 0 ? void 0 : original.abort;
1566+ const close = original === null || original === void 0 ? void 0 : original.close;
1567+ const start = original === null || original === void 0 ? void 0 : original.start;
1568+ const type = original === null || original === void 0 ? void 0 : original.type;
1569+ const write = original === null || original === void 0 ? void 0 : original.write;
1570+ return {
1571+ abort: abort === undefined ?
1572+ undefined :
1573+ convertUnderlyingSinkAbortCallback(abort, original, `${context} has member 'abort' that`),
1574+ close: close === undefined ?
1575+ undefined :
1576+ convertUnderlyingSinkCloseCallback(close, original, `${context} has member 'close' that`),
1577+ start: start === undefined ?
1578+ undefined :
1579+ convertUnderlyingSinkStartCallback(start, original, `${context} has member 'start' that`),
1580+ write: write === undefined ?
1581+ undefined :
1582+ convertUnderlyingSinkWriteCallback(write, original, `${context} has member 'write' that`),
1583+ type
1584+ };
1585+ }
1586+ function convertUnderlyingSinkAbortCallback(fn, original, context) {
1587+ assertFunction(fn, context);
1588+ return (reason) => promiseCall(fn, original, [reason]);
1589+ }
1590+ function convertUnderlyingSinkCloseCallback(fn, original, context) {
1591+ assertFunction(fn, context);
1592+ return () => promiseCall(fn, original, []);
1593+ }
1594+ function convertUnderlyingSinkStartCallback(fn, original, context) {
1595+ assertFunction(fn, context);
1596+ return (controller) => reflectCall(fn, original, [controller]);
1597+ }
1598+ function convertUnderlyingSinkWriteCallback(fn, original, context) {
1599+ assertFunction(fn, context);
1600+ return (chunk, controller) => promiseCall(fn, original, [chunk, controller]);
1601+ }
1602+
1603+ function assertWritableStream(x, context) {
1604+ if (!IsWritableStream(x)) {
1605+ throw new TypeError(`${context} is not a WritableStream.`);
1606+ }
1607+ }
1608+
1609+ function isAbortSignal(value) {
1610+ if (typeof value !== 'object' || value === null) {
1611+ return false;
1612+ }
1613+ try {
1614+ return typeof value.aborted === 'boolean';
1615+ }
1616+ catch (_a) {
1617+ // AbortSignal.prototype.aborted throws if its brand check fails
1618+ return false;
1619+ }
1620+ }
1621+ const supportsAbortController = typeof AbortController === 'function';
1622+ /**
1623+ * Construct a new AbortController, if supported by the platform.
1624+ *
1625+ * @internal
1626+ */
1627+ function createAbortController() {
1628+ if (supportsAbortController) {
1629+ return new AbortController();
1630+ }
1631+ return undefined;
1632+ }
1633+
1634+ /**
1635+ * A writable stream represents a destination for data, into which you can write.
1636+ *
1637+ * @public
1638+ */
1639+ class WritableStream {
1640+ constructor(rawUnderlyingSink = {}, rawStrategy = {}) {
1641+ if (rawUnderlyingSink === undefined) {
1642+ rawUnderlyingSink = null;
1643+ }
1644+ else {
1645+ assertObject(rawUnderlyingSink, 'First parameter');
1646+ }
1647+ const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');
1648+ const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');
1649+ InitializeWritableStream(this);
1650+ const type = underlyingSink.type;
1651+ if (type !== undefined) {
1652+ throw new RangeError('Invalid type is specified');
1653+ }
1654+ const sizeAlgorithm = ExtractSizeAlgorithm(strategy);
1655+ const highWaterMark = ExtractHighWaterMark(strategy, 1);
1656+ SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);
1657+ }
1658+ /**
1659+ * Returns whether or not the writable stream is locked to a writer.
1660+ */
1661+ get locked() {
1662+ if (!IsWritableStream(this)) {
1663+ throw streamBrandCheckException$2('locked');
1664+ }
1665+ return IsWritableStreamLocked(this);
1666+ }
1667+ /**
1668+ * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be
1669+ * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort
1670+ * mechanism of the underlying sink.
1671+ *
1672+ * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled
1673+ * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel
1674+ * the stream) if the stream is currently locked.
1675+ */
1676+ abort(reason = undefined) {
1677+ if (!IsWritableStream(this)) {
1678+ return promiseRejectedWith(streamBrandCheckException$2('abort'));
1679+ }
1680+ if (IsWritableStreamLocked(this)) {
1681+ return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));
1682+ }
1683+ return WritableStreamAbort(this, reason);
1684+ }
1685+ /**
1686+ * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its
1687+ * close behavior. During this time any further attempts to write will fail (without erroring the stream).
1688+ *
1689+ * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream
1690+ * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with
1691+ * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.
1692+ */
1693+ close() {
1694+ if (!IsWritableStream(this)) {
1695+ return promiseRejectedWith(streamBrandCheckException$2('close'));
1696+ }
1697+ if (IsWritableStreamLocked(this)) {
1698+ return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));
1699+ }
1700+ if (WritableStreamCloseQueuedOrInFlight(this)) {
1701+ return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));
1702+ }
1703+ return WritableStreamClose(this);
1704+ }
1705+ /**
1706+ * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream
1707+ * is locked, no other writer can be acquired until this one is released.
1708+ *
1709+ * This functionality is especially useful for creating abstractions that desire the ability to write to a stream
1710+ * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at
1711+ * the same time, which would cause the resulting written data to be unpredictable and probably useless.
1712+ */
1713+ getWriter() {
1714+ if (!IsWritableStream(this)) {
1715+ throw streamBrandCheckException$2('getWriter');
1716+ }
1717+ return AcquireWritableStreamDefaultWriter(this);
1718+ }
1719+ }
1720+ Object.defineProperties(WritableStream.prototype, {
1721+ abort: { enumerable: true },
1722+ close: { enumerable: true },
1723+ getWriter: { enumerable: true },
1724+ locked: { enumerable: true }
1725+ });
1726+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
1727+ Object.defineProperty(WritableStream.prototype, SymbolPolyfill.toStringTag, {
1728+ value: 'WritableStream',
1729+ configurable: true
1730+ });
1731+ }
1732+ // Abstract operations for the WritableStream.
1733+ function AcquireWritableStreamDefaultWriter(stream) {
1734+ return new WritableStreamDefaultWriter(stream);
1735+ }
1736+ // Throws if and only if startAlgorithm throws.
1737+ function CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark = 1, sizeAlgorithm = () => 1) {
1738+ const stream = Object.create(WritableStream.prototype);
1739+ InitializeWritableStream(stream);
1740+ const controller = Object.create(WritableStreamDefaultController.prototype);
1741+ SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);
1742+ return stream;
1743+ }
1744+ function InitializeWritableStream(stream) {
1745+ stream._state = 'writable';
1746+ // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is
1747+ // 'erroring' or 'errored'. May be set to an undefined value.
1748+ stream._storedError = undefined;
1749+ stream._writer = undefined;
1750+ // Initialize to undefined first because the constructor of the controller checks this
1751+ // variable to validate the caller.
1752+ stream._writableStreamController = undefined;
1753+ // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data
1754+ // producer without waiting for the queued writes to finish.
1755+ stream._writeRequests = new SimpleQueue();
1756+ // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents
1757+ // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.
1758+ stream._inFlightWriteRequest = undefined;
1759+ // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer
1760+ // has been detached.
1761+ stream._closeRequest = undefined;
1762+ // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it
1763+ // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.
1764+ stream._inFlightCloseRequest = undefined;
1765+ // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.
1766+ stream._pendingAbortRequest = undefined;
1767+ // The backpressure signal set by the controller.
1768+ stream._backpressure = false;
1769+ }
1770+ function IsWritableStream(x) {
1771+ if (!typeIsObject(x)) {
1772+ return false;
1773+ }
1774+ if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {
1775+ return false;
1776+ }
1777+ return x instanceof WritableStream;
1778+ }
1779+ function IsWritableStreamLocked(stream) {
1780+ if (stream._writer === undefined) {
1781+ return false;
1782+ }
1783+ return true;
1784+ }
1785+ function WritableStreamAbort(stream, reason) {
1786+ var _a;
1787+ if (stream._state === 'closed' || stream._state === 'errored') {
1788+ return promiseResolvedWith(undefined);
1789+ }
1790+ stream._writableStreamController._abortReason = reason;
1791+ (_a = stream._writableStreamController._abortController) === null || _a === void 0 ? void 0 : _a.abort();
1792+ // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',
1793+ // but it doesn't know that signaling abort runs author code that might have changed the state.
1794+ // Widen the type again by casting to WritableStreamState.
1795+ const state = stream._state;
1796+ if (state === 'closed' || state === 'errored') {
1797+ return promiseResolvedWith(undefined);
1798+ }
1799+ if (stream._pendingAbortRequest !== undefined) {
1800+ return stream._pendingAbortRequest._promise;
1801+ }
1802+ let wasAlreadyErroring = false;
1803+ if (state === 'erroring') {
1804+ wasAlreadyErroring = true;
1805+ // reason will not be used, so don't keep a reference to it.
1806+ reason = undefined;
1807+ }
1808+ const promise = newPromise((resolve, reject) => {
1809+ stream._pendingAbortRequest = {
1810+ _promise: undefined,
1811+ _resolve: resolve,
1812+ _reject: reject,
1813+ _reason: reason,
1814+ _wasAlreadyErroring: wasAlreadyErroring
1815+ };
1816+ });
1817+ stream._pendingAbortRequest._promise = promise;
1818+ if (!wasAlreadyErroring) {
1819+ WritableStreamStartErroring(stream, reason);
1820+ }
1821+ return promise;
1822+ }
1823+ function WritableStreamClose(stream) {
1824+ const state = stream._state;
1825+ if (state === 'closed' || state === 'errored') {
1826+ return promiseRejectedWith(new TypeError(`The stream (in ${state} state) is not in the writable state and cannot be closed`));
1827+ }
1828+ const promise = newPromise((resolve, reject) => {
1829+ const closeRequest = {
1830+ _resolve: resolve,
1831+ _reject: reject
1832+ };
1833+ stream._closeRequest = closeRequest;
1834+ });
1835+ const writer = stream._writer;
1836+ if (writer !== undefined && stream._backpressure && state === 'writable') {
1837+ defaultWriterReadyPromiseResolve(writer);
1838+ }
1839+ WritableStreamDefaultControllerClose(stream._writableStreamController);
1840+ return promise;
1841+ }
1842+ // WritableStream API exposed for controllers.
1843+ function WritableStreamAddWriteRequest(stream) {
1844+ const promise = newPromise((resolve, reject) => {
1845+ const writeRequest = {
1846+ _resolve: resolve,
1847+ _reject: reject
1848+ };
1849+ stream._writeRequests.push(writeRequest);
1850+ });
1851+ return promise;
1852+ }
1853+ function WritableStreamDealWithRejection(stream, error) {
1854+ const state = stream._state;
1855+ if (state === 'writable') {
1856+ WritableStreamStartErroring(stream, error);
1857+ return;
1858+ }
1859+ WritableStreamFinishErroring(stream);
1860+ }
1861+ function WritableStreamStartErroring(stream, reason) {
1862+ const controller = stream._writableStreamController;
1863+ stream._state = 'erroring';
1864+ stream._storedError = reason;
1865+ const writer = stream._writer;
1866+ if (writer !== undefined) {
1867+ WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);
1868+ }
1869+ if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {
1870+ WritableStreamFinishErroring(stream);
1871+ }
1872+ }
1873+ function WritableStreamFinishErroring(stream) {
1874+ stream._state = 'errored';
1875+ stream._writableStreamController[ErrorSteps]();
1876+ const storedError = stream._storedError;
1877+ stream._writeRequests.forEach(writeRequest => {
1878+ writeRequest._reject(storedError);
1879+ });
1880+ stream._writeRequests = new SimpleQueue();
1881+ if (stream._pendingAbortRequest === undefined) {
1882+ WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
1883+ return;
1884+ }
1885+ const abortRequest = stream._pendingAbortRequest;
1886+ stream._pendingAbortRequest = undefined;
1887+ if (abortRequest._wasAlreadyErroring) {
1888+ abortRequest._reject(storedError);
1889+ WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
1890+ return;
1891+ }
1892+ const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);
1893+ uponPromise(promise, () => {
1894+ abortRequest._resolve();
1895+ WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
1896+ }, (reason) => {
1897+ abortRequest._reject(reason);
1898+ WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
1899+ });
1900+ }
1901+ function WritableStreamFinishInFlightWrite(stream) {
1902+ stream._inFlightWriteRequest._resolve(undefined);
1903+ stream._inFlightWriteRequest = undefined;
1904+ }
1905+ function WritableStreamFinishInFlightWriteWithError(stream, error) {
1906+ stream._inFlightWriteRequest._reject(error);
1907+ stream._inFlightWriteRequest = undefined;
1908+ WritableStreamDealWithRejection(stream, error);
1909+ }
1910+ function WritableStreamFinishInFlightClose(stream) {
1911+ stream._inFlightCloseRequest._resolve(undefined);
1912+ stream._inFlightCloseRequest = undefined;
1913+ const state = stream._state;
1914+ if (state === 'erroring') {
1915+ // The error was too late to do anything, so it is ignored.
1916+ stream._storedError = undefined;
1917+ if (stream._pendingAbortRequest !== undefined) {
1918+ stream._pendingAbortRequest._resolve();
1919+ stream._pendingAbortRequest = undefined;
1920+ }
1921+ }
1922+ stream._state = 'closed';
1923+ const writer = stream._writer;
1924+ if (writer !== undefined) {
1925+ defaultWriterClosedPromiseResolve(writer);
1926+ }
1927+ }
1928+ function WritableStreamFinishInFlightCloseWithError(stream, error) {
1929+ stream._inFlightCloseRequest._reject(error);
1930+ stream._inFlightCloseRequest = undefined;
1931+ // Never execute sink abort() after sink close().
1932+ if (stream._pendingAbortRequest !== undefined) {
1933+ stream._pendingAbortRequest._reject(error);
1934+ stream._pendingAbortRequest = undefined;
1935+ }
1936+ WritableStreamDealWithRejection(stream, error);
1937+ }
1938+ // TODO(ricea): Fix alphabetical order.
1939+ function WritableStreamCloseQueuedOrInFlight(stream) {
1940+ if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {
1941+ return false;
1942+ }
1943+ return true;
1944+ }
1945+ function WritableStreamHasOperationMarkedInFlight(stream) {
1946+ if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {
1947+ return false;
1948+ }
1949+ return true;
1950+ }
1951+ function WritableStreamMarkCloseRequestInFlight(stream) {
1952+ stream._inFlightCloseRequest = stream._closeRequest;
1953+ stream._closeRequest = undefined;
1954+ }
1955+ function WritableStreamMarkFirstWriteRequestInFlight(stream) {
1956+ stream._inFlightWriteRequest = stream._writeRequests.shift();
1957+ }
1958+ function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) {
1959+ if (stream._closeRequest !== undefined) {
1960+ stream._closeRequest._reject(stream._storedError);
1961+ stream._closeRequest = undefined;
1962+ }
1963+ const writer = stream._writer;
1964+ if (writer !== undefined) {
1965+ defaultWriterClosedPromiseReject(writer, stream._storedError);
1966+ }
1967+ }
1968+ function WritableStreamUpdateBackpressure(stream, backpressure) {
1969+ const writer = stream._writer;
1970+ if (writer !== undefined && backpressure !== stream._backpressure) {
1971+ if (backpressure) {
1972+ defaultWriterReadyPromiseReset(writer);
1973+ }
1974+ else {
1975+ defaultWriterReadyPromiseResolve(writer);
1976+ }
1977+ }
1978+ stream._backpressure = backpressure;
1979+ }
1980+ /**
1981+ * A default writer vended by a {@link WritableStream}.
1982+ *
1983+ * @public
1984+ */
1985+ class WritableStreamDefaultWriter {
1986+ constructor(stream) {
1987+ assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');
1988+ assertWritableStream(stream, 'First parameter');
1989+ if (IsWritableStreamLocked(stream)) {
1990+ throw new TypeError('This stream has already been locked for exclusive writing by another writer');
1991+ }
1992+ this._ownerWritableStream = stream;
1993+ stream._writer = this;
1994+ const state = stream._state;
1995+ if (state === 'writable') {
1996+ if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {
1997+ defaultWriterReadyPromiseInitialize(this);
1998+ }
1999+ else {
2000+ defaultWriterReadyPromiseInitializeAsResolved(this);
2001+ }
2002+ defaultWriterClosedPromiseInitialize(this);
2003+ }
2004+ else if (state === 'erroring') {
2005+ defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);
2006+ defaultWriterClosedPromiseInitialize(this);
2007+ }
2008+ else if (state === 'closed') {
2009+ defaultWriterReadyPromiseInitializeAsResolved(this);
2010+ defaultWriterClosedPromiseInitializeAsResolved(this);
2011+ }
2012+ else {
2013+ const storedError = stream._storedError;
2014+ defaultWriterReadyPromiseInitializeAsRejected(this, storedError);
2015+ defaultWriterClosedPromiseInitializeAsRejected(this, storedError);
2016+ }
2017+ }
2018+ /**
2019+ * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or
2020+ * the writer’s lock is released before the stream finishes closing.
2021+ */
2022+ get closed() {
2023+ if (!IsWritableStreamDefaultWriter(this)) {
2024+ return promiseRejectedWith(defaultWriterBrandCheckException('closed'));
2025+ }
2026+ return this._closedPromise;
2027+ }
2028+ /**
2029+ * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.
2030+ * A producer can use this information to determine the right amount of data to write.
2031+ *
2032+ * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort
2033+ * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when
2034+ * the writer’s lock is released.
2035+ */
2036+ get desiredSize() {
2037+ if (!IsWritableStreamDefaultWriter(this)) {
2038+ throw defaultWriterBrandCheckException('desiredSize');
2039+ }
2040+ if (this._ownerWritableStream === undefined) {
2041+ throw defaultWriterLockException('desiredSize');
2042+ }
2043+ return WritableStreamDefaultWriterGetDesiredSize(this);
2044+ }
2045+ /**
2046+ * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions
2047+ * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips
2048+ * back to zero or below, the getter will return a new promise that stays pending until the next transition.
2049+ *
2050+ * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become
2051+ * rejected.
2052+ */
2053+ get ready() {
2054+ if (!IsWritableStreamDefaultWriter(this)) {
2055+ return promiseRejectedWith(defaultWriterBrandCheckException('ready'));
2056+ }
2057+ return this._readyPromise;
2058+ }
2059+ /**
2060+ * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.
2061+ */
2062+ abort(reason = undefined) {
2063+ if (!IsWritableStreamDefaultWriter(this)) {
2064+ return promiseRejectedWith(defaultWriterBrandCheckException('abort'));
2065+ }
2066+ if (this._ownerWritableStream === undefined) {
2067+ return promiseRejectedWith(defaultWriterLockException('abort'));
2068+ }
2069+ return WritableStreamDefaultWriterAbort(this, reason);
2070+ }
2071+ /**
2072+ * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.
2073+ */
2074+ close() {
2075+ if (!IsWritableStreamDefaultWriter(this)) {
2076+ return promiseRejectedWith(defaultWriterBrandCheckException('close'));
2077+ }
2078+ const stream = this._ownerWritableStream;
2079+ if (stream === undefined) {
2080+ return promiseRejectedWith(defaultWriterLockException('close'));
2081+ }
2082+ if (WritableStreamCloseQueuedOrInFlight(stream)) {
2083+ return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));
2084+ }
2085+ return WritableStreamDefaultWriterClose(this);
2086+ }
2087+ /**
2088+ * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.
2089+ * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from
2090+ * now on; otherwise, the writer will appear closed.
2091+ *
2092+ * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the
2093+ * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).
2094+ * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents
2095+ * other producers from writing in an interleaved manner.
2096+ */
2097+ releaseLock() {
2098+ if (!IsWritableStreamDefaultWriter(this)) {
2099+ throw defaultWriterBrandCheckException('releaseLock');
2100+ }
2101+ const stream = this._ownerWritableStream;
2102+ if (stream === undefined) {
2103+ return;
2104+ }
2105+ WritableStreamDefaultWriterRelease(this);
2106+ }
2107+ write(chunk = undefined) {
2108+ if (!IsWritableStreamDefaultWriter(this)) {
2109+ return promiseRejectedWith(defaultWriterBrandCheckException('write'));
2110+ }
2111+ if (this._ownerWritableStream === undefined) {
2112+ return promiseRejectedWith(defaultWriterLockException('write to'));
2113+ }
2114+ return WritableStreamDefaultWriterWrite(this, chunk);
2115+ }
2116+ }
2117+ Object.defineProperties(WritableStreamDefaultWriter.prototype, {
2118+ abort: { enumerable: true },
2119+ close: { enumerable: true },
2120+ releaseLock: { enumerable: true },
2121+ write: { enumerable: true },
2122+ closed: { enumerable: true },
2123+ desiredSize: { enumerable: true },
2124+ ready: { enumerable: true }
2125+ });
2126+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
2127+ Object.defineProperty(WritableStreamDefaultWriter.prototype, SymbolPolyfill.toStringTag, {
2128+ value: 'WritableStreamDefaultWriter',
2129+ configurable: true
2130+ });
2131+ }
2132+ // Abstract operations for the WritableStreamDefaultWriter.
2133+ function IsWritableStreamDefaultWriter(x) {
2134+ if (!typeIsObject(x)) {
2135+ return false;
2136+ }
2137+ if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {
2138+ return false;
2139+ }
2140+ return x instanceof WritableStreamDefaultWriter;
2141+ }
2142+ // A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.
2143+ function WritableStreamDefaultWriterAbort(writer, reason) {
2144+ const stream = writer._ownerWritableStream;
2145+ return WritableStreamAbort(stream, reason);
2146+ }
2147+ function WritableStreamDefaultWriterClose(writer) {
2148+ const stream = writer._ownerWritableStream;
2149+ return WritableStreamClose(stream);
2150+ }
2151+ function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) {
2152+ const stream = writer._ownerWritableStream;
2153+ const state = stream._state;
2154+ if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {
2155+ return promiseResolvedWith(undefined);
2156+ }
2157+ if (state === 'errored') {
2158+ return promiseRejectedWith(stream._storedError);
2159+ }
2160+ return WritableStreamDefaultWriterClose(writer);
2161+ }
2162+ function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) {
2163+ if (writer._closedPromiseState === 'pending') {
2164+ defaultWriterClosedPromiseReject(writer, error);
2165+ }
2166+ else {
2167+ defaultWriterClosedPromiseResetToRejected(writer, error);
2168+ }
2169+ }
2170+ function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) {
2171+ if (writer._readyPromiseState === 'pending') {
2172+ defaultWriterReadyPromiseReject(writer, error);
2173+ }
2174+ else {
2175+ defaultWriterReadyPromiseResetToRejected(writer, error);
2176+ }
2177+ }
2178+ function WritableStreamDefaultWriterGetDesiredSize(writer) {
2179+ const stream = writer._ownerWritableStream;
2180+ const state = stream._state;
2181+ if (state === 'errored' || state === 'erroring') {
2182+ return null;
2183+ }
2184+ if (state === 'closed') {
2185+ return 0;
2186+ }
2187+ return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);
2188+ }
2189+ function WritableStreamDefaultWriterRelease(writer) {
2190+ const stream = writer._ownerWritableStream;
2191+ const releasedError = new TypeError(`Writer was released and can no longer be used to monitor the stream's closedness`);
2192+ WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);
2193+ // The state transitions to "errored" before the sink abort() method runs, but the writer.closed promise is not
2194+ // rejected until afterwards. This means that simply testing state will not work.
2195+ WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);
2196+ stream._writer = undefined;
2197+ writer._ownerWritableStream = undefined;
2198+ }
2199+ function WritableStreamDefaultWriterWrite(writer, chunk) {
2200+ const stream = writer._ownerWritableStream;
2201+ const controller = stream._writableStreamController;
2202+ const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);
2203+ if (stream !== writer._ownerWritableStream) {
2204+ return promiseRejectedWith(defaultWriterLockException('write to'));
2205+ }
2206+ const state = stream._state;
2207+ if (state === 'errored') {
2208+ return promiseRejectedWith(stream._storedError);
2209+ }
2210+ if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {
2211+ return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));
2212+ }
2213+ if (state === 'erroring') {
2214+ return promiseRejectedWith(stream._storedError);
2215+ }
2216+ const promise = WritableStreamAddWriteRequest(stream);
2217+ WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);
2218+ return promise;
2219+ }
2220+ const closeSentinel = {};
2221+ /**
2222+ * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.
2223+ *
2224+ * @public
2225+ */
2226+ class WritableStreamDefaultController {
2227+ constructor() {
2228+ throw new TypeError('Illegal constructor');
2229+ }
2230+ /**
2231+ * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.
2232+ *
2233+ * @deprecated
2234+ * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.
2235+ * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.
2236+ */
2237+ get abortReason() {
2238+ if (!IsWritableStreamDefaultController(this)) {
2239+ throw defaultControllerBrandCheckException$2('abortReason');
2240+ }
2241+ return this._abortReason;
2242+ }
2243+ /**
2244+ * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.
2245+ */
2246+ get signal() {
2247+ if (!IsWritableStreamDefaultController(this)) {
2248+ throw defaultControllerBrandCheckException$2('signal');
2249+ }
2250+ if (this._abortController === undefined) {
2251+ // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.
2252+ // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,
2253+ // so instead we only implement support for `signal` if we find a global `AbortController` constructor.
2254+ throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');
2255+ }
2256+ return this._abortController.signal;
2257+ }
2258+ /**
2259+ * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.
2260+ *
2261+ * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying
2262+ * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the
2263+ * normal lifecycle of interactions with the underlying sink.
2264+ */
2265+ error(e = undefined) {
2266+ if (!IsWritableStreamDefaultController(this)) {
2267+ throw defaultControllerBrandCheckException$2('error');
2268+ }
2269+ const state = this._controlledWritableStream._state;
2270+ if (state !== 'writable') {
2271+ // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so
2272+ // just treat it as a no-op.
2273+ return;
2274+ }
2275+ WritableStreamDefaultControllerError(this, e);
2276+ }
2277+ /** @internal */
2278+ [AbortSteps](reason) {
2279+ const result = this._abortAlgorithm(reason);
2280+ WritableStreamDefaultControllerClearAlgorithms(this);
2281+ return result;
2282+ }
2283+ /** @internal */
2284+ [ErrorSteps]() {
2285+ ResetQueue(this);
2286+ }
2287+ }
2288+ Object.defineProperties(WritableStreamDefaultController.prototype, {
2289+ abortReason: { enumerable: true },
2290+ signal: { enumerable: true },
2291+ error: { enumerable: true }
2292+ });
2293+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
2294+ Object.defineProperty(WritableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {
2295+ value: 'WritableStreamDefaultController',
2296+ configurable: true
2297+ });
2298+ }
2299+ // Abstract operations implementing interface required by the WritableStream.
2300+ function IsWritableStreamDefaultController(x) {
2301+ if (!typeIsObject(x)) {
2302+ return false;
2303+ }
2304+ if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {
2305+ return false;
2306+ }
2307+ return x instanceof WritableStreamDefaultController;
2308+ }
2309+ function SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {
2310+ controller._controlledWritableStream = stream;
2311+ stream._writableStreamController = controller;
2312+ // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.
2313+ controller._queue = undefined;
2314+ controller._queueTotalSize = undefined;
2315+ ResetQueue(controller);
2316+ controller._abortReason = undefined;
2317+ controller._abortController = createAbortController();
2318+ controller._started = false;
2319+ controller._strategySizeAlgorithm = sizeAlgorithm;
2320+ controller._strategyHWM = highWaterMark;
2321+ controller._writeAlgorithm = writeAlgorithm;
2322+ controller._closeAlgorithm = closeAlgorithm;
2323+ controller._abortAlgorithm = abortAlgorithm;
2324+ const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
2325+ WritableStreamUpdateBackpressure(stream, backpressure);
2326+ const startResult = startAlgorithm();
2327+ const startPromise = promiseResolvedWith(startResult);
2328+ uponPromise(startPromise, () => {
2329+ controller._started = true;
2330+ WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
2331+ }, r => {
2332+ controller._started = true;
2333+ WritableStreamDealWithRejection(stream, r);
2334+ });
2335+ }
2336+ function SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream, underlyingSink, highWaterMark, sizeAlgorithm) {
2337+ const controller = Object.create(WritableStreamDefaultController.prototype);
2338+ let startAlgorithm = () => undefined;
2339+ let writeAlgorithm = () => promiseResolvedWith(undefined);
2340+ let closeAlgorithm = () => promiseResolvedWith(undefined);
2341+ let abortAlgorithm = () => promiseResolvedWith(undefined);
2342+ if (underlyingSink.start !== undefined) {
2343+ startAlgorithm = () => underlyingSink.start(controller);
2344+ }
2345+ if (underlyingSink.write !== undefined) {
2346+ writeAlgorithm = chunk => underlyingSink.write(chunk, controller);
2347+ }
2348+ if (underlyingSink.close !== undefined) {
2349+ closeAlgorithm = () => underlyingSink.close();
2350+ }
2351+ if (underlyingSink.abort !== undefined) {
2352+ abortAlgorithm = reason => underlyingSink.abort(reason);
2353+ }
2354+ SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);
2355+ }
2356+ // ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.
2357+ function WritableStreamDefaultControllerClearAlgorithms(controller) {
2358+ controller._writeAlgorithm = undefined;
2359+ controller._closeAlgorithm = undefined;
2360+ controller._abortAlgorithm = undefined;
2361+ controller._strategySizeAlgorithm = undefined;
2362+ }
2363+ function WritableStreamDefaultControllerClose(controller) {
2364+ EnqueueValueWithSize(controller, closeSentinel, 0);
2365+ WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
2366+ }
2367+ function WritableStreamDefaultControllerGetChunkSize(controller, chunk) {
2368+ try {
2369+ return controller._strategySizeAlgorithm(chunk);
2370+ }
2371+ catch (chunkSizeE) {
2372+ WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);
2373+ return 1;
2374+ }
2375+ }
2376+ function WritableStreamDefaultControllerGetDesiredSize(controller) {
2377+ return controller._strategyHWM - controller._queueTotalSize;
2378+ }
2379+ function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) {
2380+ try {
2381+ EnqueueValueWithSize(controller, chunk, chunkSize);
2382+ }
2383+ catch (enqueueE) {
2384+ WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);
2385+ return;
2386+ }
2387+ const stream = controller._controlledWritableStream;
2388+ if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {
2389+ const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
2390+ WritableStreamUpdateBackpressure(stream, backpressure);
2391+ }
2392+ WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
2393+ }
2394+ // Abstract operations for the WritableStreamDefaultController.
2395+ function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {
2396+ const stream = controller._controlledWritableStream;
2397+ if (!controller._started) {
2398+ return;
2399+ }
2400+ if (stream._inFlightWriteRequest !== undefined) {
2401+ return;
2402+ }
2403+ const state = stream._state;
2404+ if (state === 'erroring') {
2405+ WritableStreamFinishErroring(stream);
2406+ return;
2407+ }
2408+ if (controller._queue.length === 0) {
2409+ return;
2410+ }
2411+ const value = PeekQueueValue(controller);
2412+ if (value === closeSentinel) {
2413+ WritableStreamDefaultControllerProcessClose(controller);
2414+ }
2415+ else {
2416+ WritableStreamDefaultControllerProcessWrite(controller, value);
2417+ }
2418+ }
2419+ function WritableStreamDefaultControllerErrorIfNeeded(controller, error) {
2420+ if (controller._controlledWritableStream._state === 'writable') {
2421+ WritableStreamDefaultControllerError(controller, error);
2422+ }
2423+ }
2424+ function WritableStreamDefaultControllerProcessClose(controller) {
2425+ const stream = controller._controlledWritableStream;
2426+ WritableStreamMarkCloseRequestInFlight(stream);
2427+ DequeueValue(controller);
2428+ const sinkClosePromise = controller._closeAlgorithm();
2429+ WritableStreamDefaultControllerClearAlgorithms(controller);
2430+ uponPromise(sinkClosePromise, () => {
2431+ WritableStreamFinishInFlightClose(stream);
2432+ }, reason => {
2433+ WritableStreamFinishInFlightCloseWithError(stream, reason);
2434+ });
2435+ }
2436+ function WritableStreamDefaultControllerProcessWrite(controller, chunk) {
2437+ const stream = controller._controlledWritableStream;
2438+ WritableStreamMarkFirstWriteRequestInFlight(stream);
2439+ const sinkWritePromise = controller._writeAlgorithm(chunk);
2440+ uponPromise(sinkWritePromise, () => {
2441+ WritableStreamFinishInFlightWrite(stream);
2442+ const state = stream._state;
2443+ DequeueValue(controller);
2444+ if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {
2445+ const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
2446+ WritableStreamUpdateBackpressure(stream, backpressure);
2447+ }
2448+ WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
2449+ }, reason => {
2450+ if (stream._state === 'writable') {
2451+ WritableStreamDefaultControllerClearAlgorithms(controller);
2452+ }
2453+ WritableStreamFinishInFlightWriteWithError(stream, reason);
2454+ });
2455+ }
2456+ function WritableStreamDefaultControllerGetBackpressure(controller) {
2457+ const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);
2458+ return desiredSize <= 0;
2459+ }
2460+ // A client of WritableStreamDefaultController may use these functions directly to bypass state check.
2461+ function WritableStreamDefaultControllerError(controller, error) {
2462+ const stream = controller._controlledWritableStream;
2463+ WritableStreamDefaultControllerClearAlgorithms(controller);
2464+ WritableStreamStartErroring(stream, error);
2465+ }
2466+ // Helper functions for the WritableStream.
2467+ function streamBrandCheckException$2(name) {
2468+ return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);
2469+ }
2470+ // Helper functions for the WritableStreamDefaultController.
2471+ function defaultControllerBrandCheckException$2(name) {
2472+ return new TypeError(`WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);
2473+ }
2474+ // Helper functions for the WritableStreamDefaultWriter.
2475+ function defaultWriterBrandCheckException(name) {
2476+ return new TypeError(`WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);
2477+ }
2478+ function defaultWriterLockException(name) {
2479+ return new TypeError('Cannot ' + name + ' a stream using a released writer');
2480+ }
2481+ function defaultWriterClosedPromiseInitialize(writer) {
2482+ writer._closedPromise = newPromise((resolve, reject) => {
2483+ writer._closedPromise_resolve = resolve;
2484+ writer._closedPromise_reject = reject;
2485+ writer._closedPromiseState = 'pending';
2486+ });
2487+ }
2488+ function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) {
2489+ defaultWriterClosedPromiseInitialize(writer);
2490+ defaultWriterClosedPromiseReject(writer, reason);
2491+ }
2492+ function defaultWriterClosedPromiseInitializeAsResolved(writer) {
2493+ defaultWriterClosedPromiseInitialize(writer);
2494+ defaultWriterClosedPromiseResolve(writer);
2495+ }
2496+ function defaultWriterClosedPromiseReject(writer, reason) {
2497+ if (writer._closedPromise_reject === undefined) {
2498+ return;
2499+ }
2500+ setPromiseIsHandledToTrue(writer._closedPromise);
2501+ writer._closedPromise_reject(reason);
2502+ writer._closedPromise_resolve = undefined;
2503+ writer._closedPromise_reject = undefined;
2504+ writer._closedPromiseState = 'rejected';
2505+ }
2506+ function defaultWriterClosedPromiseResetToRejected(writer, reason) {
2507+ defaultWriterClosedPromiseInitializeAsRejected(writer, reason);
2508+ }
2509+ function defaultWriterClosedPromiseResolve(writer) {
2510+ if (writer._closedPromise_resolve === undefined) {
2511+ return;
2512+ }
2513+ writer._closedPromise_resolve(undefined);
2514+ writer._closedPromise_resolve = undefined;
2515+ writer._closedPromise_reject = undefined;
2516+ writer._closedPromiseState = 'resolved';
2517+ }
2518+ function defaultWriterReadyPromiseInitialize(writer) {
2519+ writer._readyPromise = newPromise((resolve, reject) => {
2520+ writer._readyPromise_resolve = resolve;
2521+ writer._readyPromise_reject = reject;
2522+ });
2523+ writer._readyPromiseState = 'pending';
2524+ }
2525+ function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) {
2526+ defaultWriterReadyPromiseInitialize(writer);
2527+ defaultWriterReadyPromiseReject(writer, reason);
2528+ }
2529+ function defaultWriterReadyPromiseInitializeAsResolved(writer) {
2530+ defaultWriterReadyPromiseInitialize(writer);
2531+ defaultWriterReadyPromiseResolve(writer);
2532+ }
2533+ function defaultWriterReadyPromiseReject(writer, reason) {
2534+ if (writer._readyPromise_reject === undefined) {
2535+ return;
2536+ }
2537+ setPromiseIsHandledToTrue(writer._readyPromise);
2538+ writer._readyPromise_reject(reason);
2539+ writer._readyPromise_resolve = undefined;
2540+ writer._readyPromise_reject = undefined;
2541+ writer._readyPromiseState = 'rejected';
2542+ }
2543+ function defaultWriterReadyPromiseReset(writer) {
2544+ defaultWriterReadyPromiseInitialize(writer);
2545+ }
2546+ function defaultWriterReadyPromiseResetToRejected(writer, reason) {
2547+ defaultWriterReadyPromiseInitializeAsRejected(writer, reason);
2548+ }
2549+ function defaultWriterReadyPromiseResolve(writer) {
2550+ if (writer._readyPromise_resolve === undefined) {
2551+ return;
2552+ }
2553+ writer._readyPromise_resolve(undefined);
2554+ writer._readyPromise_resolve = undefined;
2555+ writer._readyPromise_reject = undefined;
2556+ writer._readyPromiseState = 'fulfilled';
2557+ }
2558+
2559+ /// <reference lib="dom" />
2560+ const NativeDOMException = typeof DOMException !== 'undefined' ? DOMException : undefined;
2561+
2562+ /// <reference types="node" />
2563+ function isDOMExceptionConstructor(ctor) {
2564+ if (!(typeof ctor === 'function' || typeof ctor === 'object')) {
2565+ return false;
2566+ }
2567+ try {
2568+ new ctor();
2569+ return true;
2570+ }
2571+ catch (_a) {
2572+ return false;
2573+ }
2574+ }
2575+ function createDOMExceptionPolyfill() {
2576+ // eslint-disable-next-line no-shadow
2577+ const ctor = function DOMException(message, name) {
2578+ this.message = message || '';
2579+ this.name = name || 'Error';
2580+ if (Error.captureStackTrace) {
2581+ Error.captureStackTrace(this, this.constructor);
2582+ }
2583+ };
2584+ ctor.prototype = Object.create(Error.prototype);
2585+ Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });
2586+ return ctor;
2587+ }
2588+ // eslint-disable-next-line no-redeclare
2589+ const DOMException$1 = isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();
2590+
2591+ function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventCancel, signal) {
2592+ const reader = AcquireReadableStreamDefaultReader(source);
2593+ const writer = AcquireWritableStreamDefaultWriter(dest);
2594+ source._disturbed = true;
2595+ let shuttingDown = false;
2596+ // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.
2597+ let currentWrite = promiseResolvedWith(undefined);
2598+ return newPromise((resolve, reject) => {
2599+ let abortAlgorithm;
2600+ if (signal !== undefined) {
2601+ abortAlgorithm = () => {
2602+ const error = new DOMException$1('Aborted', 'AbortError');
2603+ const actions = [];
2604+ if (!preventAbort) {
2605+ actions.push(() => {
2606+ if (dest._state === 'writable') {
2607+ return WritableStreamAbort(dest, error);
2608+ }
2609+ return promiseResolvedWith(undefined);
2610+ });
2611+ }
2612+ if (!preventCancel) {
2613+ actions.push(() => {
2614+ if (source._state === 'readable') {
2615+ return ReadableStreamCancel(source, error);
2616+ }
2617+ return promiseResolvedWith(undefined);
2618+ });
2619+ }
2620+ shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);
2621+ };
2622+ if (signal.aborted) {
2623+ abortAlgorithm();
2624+ return;
2625+ }
2626+ signal.addEventListener('abort', abortAlgorithm);
2627+ }
2628+ // Using reader and writer, read all chunks from this and write them to dest
2629+ // - Backpressure must be enforced
2630+ // - Shutdown must stop all activity
2631+ function pipeLoop() {
2632+ return newPromise((resolveLoop, rejectLoop) => {
2633+ function next(done) {
2634+ if (done) {
2635+ resolveLoop();
2636+ }
2637+ else {
2638+ // Use `PerformPromiseThen` instead of `uponPromise` to avoid
2639+ // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers
2640+ PerformPromiseThen(pipeStep(), next, rejectLoop);
2641+ }
2642+ }
2643+ next(false);
2644+ });
2645+ }
2646+ function pipeStep() {
2647+ if (shuttingDown) {
2648+ return promiseResolvedWith(true);
2649+ }
2650+ return PerformPromiseThen(writer._readyPromise, () => {
2651+ return newPromise((resolveRead, rejectRead) => {
2652+ ReadableStreamDefaultReaderRead(reader, {
2653+ _chunkSteps: chunk => {
2654+ currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);
2655+ resolveRead(false);
2656+ },
2657+ _closeSteps: () => resolveRead(true),
2658+ _errorSteps: rejectRead
2659+ });
2660+ });
2661+ });
2662+ }
2663+ // Errors must be propagated forward
2664+ isOrBecomesErrored(source, reader._closedPromise, storedError => {
2665+ if (!preventAbort) {
2666+ shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);
2667+ }
2668+ else {
2669+ shutdown(true, storedError);
2670+ }
2671+ });
2672+ // Errors must be propagated backward
2673+ isOrBecomesErrored(dest, writer._closedPromise, storedError => {
2674+ if (!preventCancel) {
2675+ shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);
2676+ }
2677+ else {
2678+ shutdown(true, storedError);
2679+ }
2680+ });
2681+ // Closing must be propagated forward
2682+ isOrBecomesClosed(source, reader._closedPromise, () => {
2683+ if (!preventClose) {
2684+ shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));
2685+ }
2686+ else {
2687+ shutdown();
2688+ }
2689+ });
2690+ // Closing must be propagated backward
2691+ if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {
2692+ const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');
2693+ if (!preventCancel) {
2694+ shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);
2695+ }
2696+ else {
2697+ shutdown(true, destClosed);
2698+ }
2699+ }
2700+ setPromiseIsHandledToTrue(pipeLoop());
2701+ function waitForWritesToFinish() {
2702+ // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait
2703+ // for that too.
2704+ const oldCurrentWrite = currentWrite;
2705+ return PerformPromiseThen(currentWrite, () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined);
2706+ }
2707+ function isOrBecomesErrored(stream, promise, action) {
2708+ if (stream._state === 'errored') {
2709+ action(stream._storedError);
2710+ }
2711+ else {
2712+ uponRejection(promise, action);
2713+ }
2714+ }
2715+ function isOrBecomesClosed(stream, promise, action) {
2716+ if (stream._state === 'closed') {
2717+ action();
2718+ }
2719+ else {
2720+ uponFulfillment(promise, action);
2721+ }
2722+ }
2723+ function shutdownWithAction(action, originalIsError, originalError) {
2724+ if (shuttingDown) {
2725+ return;
2726+ }
2727+ shuttingDown = true;
2728+ if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {
2729+ uponFulfillment(waitForWritesToFinish(), doTheRest);
2730+ }
2731+ else {
2732+ doTheRest();
2733+ }
2734+ function doTheRest() {
2735+ uponPromise(action(), () => finalize(originalIsError, originalError), newError => finalize(true, newError));
2736+ }
2737+ }
2738+ function shutdown(isError, error) {
2739+ if (shuttingDown) {
2740+ return;
2741+ }
2742+ shuttingDown = true;
2743+ if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {
2744+ uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));
2745+ }
2746+ else {
2747+ finalize(isError, error);
2748+ }
2749+ }
2750+ function finalize(isError, error) {
2751+ WritableStreamDefaultWriterRelease(writer);
2752+ ReadableStreamReaderGenericRelease(reader);
2753+ if (signal !== undefined) {
2754+ signal.removeEventListener('abort', abortAlgorithm);
2755+ }
2756+ if (isError) {
2757+ reject(error);
2758+ }
2759+ else {
2760+ resolve(undefined);
2761+ }
2762+ }
2763+ });
2764+ }
2765+
2766+ /**
2767+ * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.
2768+ *
2769+ * @public
2770+ */
2771+ class ReadableStreamDefaultController {
2772+ constructor() {
2773+ throw new TypeError('Illegal constructor');
2774+ }
2775+ /**
2776+ * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is
2777+ * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.
2778+ */
2779+ get desiredSize() {
2780+ if (!IsReadableStreamDefaultController(this)) {
2781+ throw defaultControllerBrandCheckException$1('desiredSize');
2782+ }
2783+ return ReadableStreamDefaultControllerGetDesiredSize(this);
2784+ }
2785+ /**
2786+ * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from
2787+ * the stream, but once those are read, the stream will become closed.
2788+ */
2789+ close() {
2790+ if (!IsReadableStreamDefaultController(this)) {
2791+ throw defaultControllerBrandCheckException$1('close');
2792+ }
2793+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {
2794+ throw new TypeError('The stream is not in a state that permits close');
2795+ }
2796+ ReadableStreamDefaultControllerClose(this);
2797+ }
2798+ enqueue(chunk = undefined) {
2799+ if (!IsReadableStreamDefaultController(this)) {
2800+ throw defaultControllerBrandCheckException$1('enqueue');
2801+ }
2802+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {
2803+ throw new TypeError('The stream is not in a state that permits enqueue');
2804+ }
2805+ return ReadableStreamDefaultControllerEnqueue(this, chunk);
2806+ }
2807+ /**
2808+ * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.
2809+ */
2810+ error(e = undefined) {
2811+ if (!IsReadableStreamDefaultController(this)) {
2812+ throw defaultControllerBrandCheckException$1('error');
2813+ }
2814+ ReadableStreamDefaultControllerError(this, e);
2815+ }
2816+ /** @internal */
2817+ [CancelSteps](reason) {
2818+ ResetQueue(this);
2819+ const result = this._cancelAlgorithm(reason);
2820+ ReadableStreamDefaultControllerClearAlgorithms(this);
2821+ return result;
2822+ }
2823+ /** @internal */
2824+ [PullSteps](readRequest) {
2825+ const stream = this._controlledReadableStream;
2826+ if (this._queue.length > 0) {
2827+ const chunk = DequeueValue(this);
2828+ if (this._closeRequested && this._queue.length === 0) {
2829+ ReadableStreamDefaultControllerClearAlgorithms(this);
2830+ ReadableStreamClose(stream);
2831+ }
2832+ else {
2833+ ReadableStreamDefaultControllerCallPullIfNeeded(this);
2834+ }
2835+ readRequest._chunkSteps(chunk);
2836+ }
2837+ else {
2838+ ReadableStreamAddReadRequest(stream, readRequest);
2839+ ReadableStreamDefaultControllerCallPullIfNeeded(this);
2840+ }
2841+ }
2842+ }
2843+ Object.defineProperties(ReadableStreamDefaultController.prototype, {
2844+ close: { enumerable: true },
2845+ enqueue: { enumerable: true },
2846+ error: { enumerable: true },
2847+ desiredSize: { enumerable: true }
2848+ });
2849+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
2850+ Object.defineProperty(ReadableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {
2851+ value: 'ReadableStreamDefaultController',
2852+ configurable: true
2853+ });
2854+ }
2855+ // Abstract operations for the ReadableStreamDefaultController.
2856+ function IsReadableStreamDefaultController(x) {
2857+ if (!typeIsObject(x)) {
2858+ return false;
2859+ }
2860+ if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {
2861+ return false;
2862+ }
2863+ return x instanceof ReadableStreamDefaultController;
2864+ }
2865+ function ReadableStreamDefaultControllerCallPullIfNeeded(controller) {
2866+ const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);
2867+ if (!shouldPull) {
2868+ return;
2869+ }
2870+ if (controller._pulling) {
2871+ controller._pullAgain = true;
2872+ return;
2873+ }
2874+ controller._pulling = true;
2875+ const pullPromise = controller._pullAlgorithm();
2876+ uponPromise(pullPromise, () => {
2877+ controller._pulling = false;
2878+ if (controller._pullAgain) {
2879+ controller._pullAgain = false;
2880+ ReadableStreamDefaultControllerCallPullIfNeeded(controller);
2881+ }
2882+ }, e => {
2883+ ReadableStreamDefaultControllerError(controller, e);
2884+ });
2885+ }
2886+ function ReadableStreamDefaultControllerShouldCallPull(controller) {
2887+ const stream = controller._controlledReadableStream;
2888+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {
2889+ return false;
2890+ }
2891+ if (!controller._started) {
2892+ return false;
2893+ }
2894+ if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {
2895+ return true;
2896+ }
2897+ const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);
2898+ if (desiredSize > 0) {
2899+ return true;
2900+ }
2901+ return false;
2902+ }
2903+ function ReadableStreamDefaultControllerClearAlgorithms(controller) {
2904+ controller._pullAlgorithm = undefined;
2905+ controller._cancelAlgorithm = undefined;
2906+ controller._strategySizeAlgorithm = undefined;
2907+ }
2908+ // A client of ReadableStreamDefaultController may use these functions directly to bypass state check.
2909+ function ReadableStreamDefaultControllerClose(controller) {
2910+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {
2911+ return;
2912+ }
2913+ const stream = controller._controlledReadableStream;
2914+ controller._closeRequested = true;
2915+ if (controller._queue.length === 0) {
2916+ ReadableStreamDefaultControllerClearAlgorithms(controller);
2917+ ReadableStreamClose(stream);
2918+ }
2919+ }
2920+ function ReadableStreamDefaultControllerEnqueue(controller, chunk) {
2921+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {
2922+ return;
2923+ }
2924+ const stream = controller._controlledReadableStream;
2925+ if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {
2926+ ReadableStreamFulfillReadRequest(stream, chunk, false);
2927+ }
2928+ else {
2929+ let chunkSize;
2930+ try {
2931+ chunkSize = controller._strategySizeAlgorithm(chunk);
2932+ }
2933+ catch (chunkSizeE) {
2934+ ReadableStreamDefaultControllerError(controller, chunkSizeE);
2935+ throw chunkSizeE;
2936+ }
2937+ try {
2938+ EnqueueValueWithSize(controller, chunk, chunkSize);
2939+ }
2940+ catch (enqueueE) {
2941+ ReadableStreamDefaultControllerError(controller, enqueueE);
2942+ throw enqueueE;
2943+ }
2944+ }
2945+ ReadableStreamDefaultControllerCallPullIfNeeded(controller);
2946+ }
2947+ function ReadableStreamDefaultControllerError(controller, e) {
2948+ const stream = controller._controlledReadableStream;
2949+ if (stream._state !== 'readable') {
2950+ return;
2951+ }
2952+ ResetQueue(controller);
2953+ ReadableStreamDefaultControllerClearAlgorithms(controller);
2954+ ReadableStreamError(stream, e);
2955+ }
2956+ function ReadableStreamDefaultControllerGetDesiredSize(controller) {
2957+ const state = controller._controlledReadableStream._state;
2958+ if (state === 'errored') {
2959+ return null;
2960+ }
2961+ if (state === 'closed') {
2962+ return 0;
2963+ }
2964+ return controller._strategyHWM - controller._queueTotalSize;
2965+ }
2966+ // This is used in the implementation of TransformStream.
2967+ function ReadableStreamDefaultControllerHasBackpressure(controller) {
2968+ if (ReadableStreamDefaultControllerShouldCallPull(controller)) {
2969+ return false;
2970+ }
2971+ return true;
2972+ }
2973+ function ReadableStreamDefaultControllerCanCloseOrEnqueue(controller) {
2974+ const state = controller._controlledReadableStream._state;
2975+ if (!controller._closeRequested && state === 'readable') {
2976+ return true;
2977+ }
2978+ return false;
2979+ }
2980+ function SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {
2981+ controller._controlledReadableStream = stream;
2982+ controller._queue = undefined;
2983+ controller._queueTotalSize = undefined;
2984+ ResetQueue(controller);
2985+ controller._started = false;
2986+ controller._closeRequested = false;
2987+ controller._pullAgain = false;
2988+ controller._pulling = false;
2989+ controller._strategySizeAlgorithm = sizeAlgorithm;
2990+ controller._strategyHWM = highWaterMark;
2991+ controller._pullAlgorithm = pullAlgorithm;
2992+ controller._cancelAlgorithm = cancelAlgorithm;
2993+ stream._readableStreamController = controller;
2994+ const startResult = startAlgorithm();
2995+ uponPromise(promiseResolvedWith(startResult), () => {
2996+ controller._started = true;
2997+ ReadableStreamDefaultControllerCallPullIfNeeded(controller);
2998+ }, r => {
2999+ ReadableStreamDefaultControllerError(controller, r);
3000+ });
3001+ }
3002+ function SetUpReadableStreamDefaultControllerFromUnderlyingSource(stream, underlyingSource, highWaterMark, sizeAlgorithm) {
3003+ const controller = Object.create(ReadableStreamDefaultController.prototype);
3004+ let startAlgorithm = () => undefined;
3005+ let pullAlgorithm = () => promiseResolvedWith(undefined);
3006+ let cancelAlgorithm = () => promiseResolvedWith(undefined);
3007+ if (underlyingSource.start !== undefined) {
3008+ startAlgorithm = () => underlyingSource.start(controller);
3009+ }
3010+ if (underlyingSource.pull !== undefined) {
3011+ pullAlgorithm = () => underlyingSource.pull(controller);
3012+ }
3013+ if (underlyingSource.cancel !== undefined) {
3014+ cancelAlgorithm = reason => underlyingSource.cancel(reason);
3015+ }
3016+ SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);
3017+ }
3018+ // Helper functions for the ReadableStreamDefaultController.
3019+ function defaultControllerBrandCheckException$1(name) {
3020+ return new TypeError(`ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);
3021+ }
3022+
3023+ function ReadableStreamTee(stream, cloneForBranch2) {
3024+ if (IsReadableByteStreamController(stream._readableStreamController)) {
3025+ return ReadableByteStreamTee(stream);
3026+ }
3027+ return ReadableStreamDefaultTee(stream);
3028+ }
3029+ function ReadableStreamDefaultTee(stream, cloneForBranch2) {
3030+ const reader = AcquireReadableStreamDefaultReader(stream);
3031+ let reading = false;
3032+ let readAgain = false;
3033+ let canceled1 = false;
3034+ let canceled2 = false;
3035+ let reason1;
3036+ let reason2;
3037+ let branch1;
3038+ let branch2;
3039+ let resolveCancelPromise;
3040+ const cancelPromise = newPromise(resolve => {
3041+ resolveCancelPromise = resolve;
3042+ });
3043+ function pullAlgorithm() {
3044+ if (reading) {
3045+ readAgain = true;
3046+ return promiseResolvedWith(undefined);
3047+ }
3048+ reading = true;
3049+ const readRequest = {
3050+ _chunkSteps: chunk => {
3051+ // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using
3052+ // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let
3053+ // successful synchronously-available reads get ahead of asynchronously-available errors.
3054+ queueMicrotask(() => {
3055+ readAgain = false;
3056+ const chunk1 = chunk;
3057+ const chunk2 = chunk;
3058+ // There is no way to access the cloning code right now in the reference implementation.
3059+ // If we add one then we'll need an implementation for serializable objects.
3060+ // if (!canceled2 && cloneForBranch2) {
3061+ // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));
3062+ // }
3063+ if (!canceled1) {
3064+ ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, chunk1);
3065+ }
3066+ if (!canceled2) {
3067+ ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, chunk2);
3068+ }
3069+ reading = false;
3070+ if (readAgain) {
3071+ pullAlgorithm();
3072+ }
3073+ });
3074+ },
3075+ _closeSteps: () => {
3076+ reading = false;
3077+ if (!canceled1) {
3078+ ReadableStreamDefaultControllerClose(branch1._readableStreamController);
3079+ }
3080+ if (!canceled2) {
3081+ ReadableStreamDefaultControllerClose(branch2._readableStreamController);
3082+ }
3083+ if (!canceled1 || !canceled2) {
3084+ resolveCancelPromise(undefined);
3085+ }
3086+ },
3087+ _errorSteps: () => {
3088+ reading = false;
3089+ }
3090+ };
3091+ ReadableStreamDefaultReaderRead(reader, readRequest);
3092+ return promiseResolvedWith(undefined);
3093+ }
3094+ function cancel1Algorithm(reason) {
3095+ canceled1 = true;
3096+ reason1 = reason;
3097+ if (canceled2) {
3098+ const compositeReason = CreateArrayFromList([reason1, reason2]);
3099+ const cancelResult = ReadableStreamCancel(stream, compositeReason);
3100+ resolveCancelPromise(cancelResult);
3101+ }
3102+ return cancelPromise;
3103+ }
3104+ function cancel2Algorithm(reason) {
3105+ canceled2 = true;
3106+ reason2 = reason;
3107+ if (canceled1) {
3108+ const compositeReason = CreateArrayFromList([reason1, reason2]);
3109+ const cancelResult = ReadableStreamCancel(stream, compositeReason);
3110+ resolveCancelPromise(cancelResult);
3111+ }
3112+ return cancelPromise;
3113+ }
3114+ function startAlgorithm() {
3115+ // do nothing
3116+ }
3117+ branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);
3118+ branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);
3119+ uponRejection(reader._closedPromise, (r) => {
3120+ ReadableStreamDefaultControllerError(branch1._readableStreamController, r);
3121+ ReadableStreamDefaultControllerError(branch2._readableStreamController, r);
3122+ if (!canceled1 || !canceled2) {
3123+ resolveCancelPromise(undefined);
3124+ }
3125+ });
3126+ return [branch1, branch2];
3127+ }
3128+ function ReadableByteStreamTee(stream) {
3129+ let reader = AcquireReadableStreamDefaultReader(stream);
3130+ let reading = false;
3131+ let readAgainForBranch1 = false;
3132+ let readAgainForBranch2 = false;
3133+ let canceled1 = false;
3134+ let canceled2 = false;
3135+ let reason1;
3136+ let reason2;
3137+ let branch1;
3138+ let branch2;
3139+ let resolveCancelPromise;
3140+ const cancelPromise = newPromise(resolve => {
3141+ resolveCancelPromise = resolve;
3142+ });
3143+ function forwardReaderError(thisReader) {
3144+ uponRejection(thisReader._closedPromise, r => {
3145+ if (thisReader !== reader) {
3146+ return;
3147+ }
3148+ ReadableByteStreamControllerError(branch1._readableStreamController, r);
3149+ ReadableByteStreamControllerError(branch2._readableStreamController, r);
3150+ if (!canceled1 || !canceled2) {
3151+ resolveCancelPromise(undefined);
3152+ }
3153+ });
3154+ }
3155+ function pullWithDefaultReader() {
3156+ if (IsReadableStreamBYOBReader(reader)) {
3157+ ReadableStreamReaderGenericRelease(reader);
3158+ reader = AcquireReadableStreamDefaultReader(stream);
3159+ forwardReaderError(reader);
3160+ }
3161+ const readRequest = {
3162+ _chunkSteps: chunk => {
3163+ // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using
3164+ // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let
3165+ // successful synchronously-available reads get ahead of asynchronously-available errors.
3166+ queueMicrotask(() => {
3167+ readAgainForBranch1 = false;
3168+ readAgainForBranch2 = false;
3169+ const chunk1 = chunk;
3170+ let chunk2 = chunk;
3171+ if (!canceled1 && !canceled2) {
3172+ try {
3173+ chunk2 = CloneAsUint8Array(chunk);
3174+ }
3175+ catch (cloneE) {
3176+ ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);
3177+ ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);
3178+ resolveCancelPromise(ReadableStreamCancel(stream, cloneE));
3179+ return;
3180+ }
3181+ }
3182+ if (!canceled1) {
3183+ ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);
3184+ }
3185+ if (!canceled2) {
3186+ ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);
3187+ }
3188+ reading = false;
3189+ if (readAgainForBranch1) {
3190+ pull1Algorithm();
3191+ }
3192+ else if (readAgainForBranch2) {
3193+ pull2Algorithm();
3194+ }
3195+ });
3196+ },
3197+ _closeSteps: () => {
3198+ reading = false;
3199+ if (!canceled1) {
3200+ ReadableByteStreamControllerClose(branch1._readableStreamController);
3201+ }
3202+ if (!canceled2) {
3203+ ReadableByteStreamControllerClose(branch2._readableStreamController);
3204+ }
3205+ if (branch1._readableStreamController._pendingPullIntos.length > 0) {
3206+ ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);
3207+ }
3208+ if (branch2._readableStreamController._pendingPullIntos.length > 0) {
3209+ ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);
3210+ }
3211+ if (!canceled1 || !canceled2) {
3212+ resolveCancelPromise(undefined);
3213+ }
3214+ },
3215+ _errorSteps: () => {
3216+ reading = false;
3217+ }
3218+ };
3219+ ReadableStreamDefaultReaderRead(reader, readRequest);
3220+ }
3221+ function pullWithBYOBReader(view, forBranch2) {
3222+ if (IsReadableStreamDefaultReader(reader)) {
3223+ ReadableStreamReaderGenericRelease(reader);
3224+ reader = AcquireReadableStreamBYOBReader(stream);
3225+ forwardReaderError(reader);
3226+ }
3227+ const byobBranch = forBranch2 ? branch2 : branch1;
3228+ const otherBranch = forBranch2 ? branch1 : branch2;
3229+ const readIntoRequest = {
3230+ _chunkSteps: chunk => {
3231+ // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using
3232+ // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let
3233+ // successful synchronously-available reads get ahead of asynchronously-available errors.
3234+ queueMicrotask(() => {
3235+ readAgainForBranch1 = false;
3236+ readAgainForBranch2 = false;
3237+ const byobCanceled = forBranch2 ? canceled2 : canceled1;
3238+ const otherCanceled = forBranch2 ? canceled1 : canceled2;
3239+ if (!otherCanceled) {
3240+ let clonedChunk;
3241+ try {
3242+ clonedChunk = CloneAsUint8Array(chunk);
3243+ }
3244+ catch (cloneE) {
3245+ ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);
3246+ ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);
3247+ resolveCancelPromise(ReadableStreamCancel(stream, cloneE));
3248+ return;
3249+ }
3250+ if (!byobCanceled) {
3251+ ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);
3252+ }
3253+ ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);
3254+ }
3255+ else if (!byobCanceled) {
3256+ ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);
3257+ }
3258+ reading = false;
3259+ if (readAgainForBranch1) {
3260+ pull1Algorithm();
3261+ }
3262+ else if (readAgainForBranch2) {
3263+ pull2Algorithm();
3264+ }
3265+ });
3266+ },
3267+ _closeSteps: chunk => {
3268+ reading = false;
3269+ const byobCanceled = forBranch2 ? canceled2 : canceled1;
3270+ const otherCanceled = forBranch2 ? canceled1 : canceled2;
3271+ if (!byobCanceled) {
3272+ ReadableByteStreamControllerClose(byobBranch._readableStreamController);
3273+ }
3274+ if (!otherCanceled) {
3275+ ReadableByteStreamControllerClose(otherBranch._readableStreamController);
3276+ }
3277+ if (chunk !== undefined) {
3278+ if (!byobCanceled) {
3279+ ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);
3280+ }
3281+ if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {
3282+ ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);
3283+ }
3284+ }
3285+ if (!byobCanceled || !otherCanceled) {
3286+ resolveCancelPromise(undefined);
3287+ }
3288+ },
3289+ _errorSteps: () => {
3290+ reading = false;
3291+ }
3292+ };
3293+ ReadableStreamBYOBReaderRead(reader, view, readIntoRequest);
3294+ }
3295+ function pull1Algorithm() {
3296+ if (reading) {
3297+ readAgainForBranch1 = true;
3298+ return promiseResolvedWith(undefined);
3299+ }
3300+ reading = true;
3301+ const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);
3302+ if (byobRequest === null) {
3303+ pullWithDefaultReader();
3304+ }
3305+ else {
3306+ pullWithBYOBReader(byobRequest._view, false);
3307+ }
3308+ return promiseResolvedWith(undefined);
3309+ }
3310+ function pull2Algorithm() {
3311+ if (reading) {
3312+ readAgainForBranch2 = true;
3313+ return promiseResolvedWith(undefined);
3314+ }
3315+ reading = true;
3316+ const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);
3317+ if (byobRequest === null) {
3318+ pullWithDefaultReader();
3319+ }
3320+ else {
3321+ pullWithBYOBReader(byobRequest._view, true);
3322+ }
3323+ return promiseResolvedWith(undefined);
3324+ }
3325+ function cancel1Algorithm(reason) {
3326+ canceled1 = true;
3327+ reason1 = reason;
3328+ if (canceled2) {
3329+ const compositeReason = CreateArrayFromList([reason1, reason2]);
3330+ const cancelResult = ReadableStreamCancel(stream, compositeReason);
3331+ resolveCancelPromise(cancelResult);
3332+ }
3333+ return cancelPromise;
3334+ }
3335+ function cancel2Algorithm(reason) {
3336+ canceled2 = true;
3337+ reason2 = reason;
3338+ if (canceled1) {
3339+ const compositeReason = CreateArrayFromList([reason1, reason2]);
3340+ const cancelResult = ReadableStreamCancel(stream, compositeReason);
3341+ resolveCancelPromise(cancelResult);
3342+ }
3343+ return cancelPromise;
3344+ }
3345+ function startAlgorithm() {
3346+ return;
3347+ }
3348+ branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);
3349+ branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);
3350+ forwardReaderError(reader);
3351+ return [branch1, branch2];
3352+ }
3353+
3354+ function convertUnderlyingDefaultOrByteSource(source, context) {
3355+ assertDictionary(source, context);
3356+ const original = source;
3357+ const autoAllocateChunkSize = original === null || original === void 0 ? void 0 : original.autoAllocateChunkSize;
3358+ const cancel = original === null || original === void 0 ? void 0 : original.cancel;
3359+ const pull = original === null || original === void 0 ? void 0 : original.pull;
3360+ const start = original === null || original === void 0 ? void 0 : original.start;
3361+ const type = original === null || original === void 0 ? void 0 : original.type;
3362+ return {
3363+ autoAllocateChunkSize: autoAllocateChunkSize === undefined ?
3364+ undefined :
3365+ convertUnsignedLongLongWithEnforceRange(autoAllocateChunkSize, `${context} has member 'autoAllocateChunkSize' that`),
3366+ cancel: cancel === undefined ?
3367+ undefined :
3368+ convertUnderlyingSourceCancelCallback(cancel, original, `${context} has member 'cancel' that`),
3369+ pull: pull === undefined ?
3370+ undefined :
3371+ convertUnderlyingSourcePullCallback(pull, original, `${context} has member 'pull' that`),
3372+ start: start === undefined ?
3373+ undefined :
3374+ convertUnderlyingSourceStartCallback(start, original, `${context} has member 'start' that`),
3375+ type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)
3376+ };
3377+ }
3378+ function convertUnderlyingSourceCancelCallback(fn, original, context) {
3379+ assertFunction(fn, context);
3380+ return (reason) => promiseCall(fn, original, [reason]);
3381+ }
3382+ function convertUnderlyingSourcePullCallback(fn, original, context) {
3383+ assertFunction(fn, context);
3384+ return (controller) => promiseCall(fn, original, [controller]);
3385+ }
3386+ function convertUnderlyingSourceStartCallback(fn, original, context) {
3387+ assertFunction(fn, context);
3388+ return (controller) => reflectCall(fn, original, [controller]);
3389+ }
3390+ function convertReadableStreamType(type, context) {
3391+ type = `${type}`;
3392+ if (type !== 'bytes') {
3393+ throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);
3394+ }
3395+ return type;
3396+ }
3397+
3398+ function convertReaderOptions(options, context) {
3399+ assertDictionary(options, context);
3400+ const mode = options === null || options === void 0 ? void 0 : options.mode;
3401+ return {
3402+ mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)
3403+ };
3404+ }
3405+ function convertReadableStreamReaderMode(mode, context) {
3406+ mode = `${mode}`;
3407+ if (mode !== 'byob') {
3408+ throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);
3409+ }
3410+ return mode;
3411+ }
3412+
3413+ function convertIteratorOptions(options, context) {
3414+ assertDictionary(options, context);
3415+ const preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;
3416+ return { preventCancel: Boolean(preventCancel) };
3417+ }
3418+
3419+ function convertPipeOptions(options, context) {
3420+ assertDictionary(options, context);
3421+ const preventAbort = options === null || options === void 0 ? void 0 : options.preventAbort;
3422+ const preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;
3423+ const preventClose = options === null || options === void 0 ? void 0 : options.preventClose;
3424+ const signal = options === null || options === void 0 ? void 0 : options.signal;
3425+ if (signal !== undefined) {
3426+ assertAbortSignal(signal, `${context} has member 'signal' that`);
3427+ }
3428+ return {
3429+ preventAbort: Boolean(preventAbort),
3430+ preventCancel: Boolean(preventCancel),
3431+ preventClose: Boolean(preventClose),
3432+ signal
3433+ };
3434+ }
3435+ function assertAbortSignal(signal, context) {
3436+ if (!isAbortSignal(signal)) {
3437+ throw new TypeError(`${context} is not an AbortSignal.`);
3438+ }
3439+ }
3440+
3441+ function convertReadableWritablePair(pair, context) {
3442+ assertDictionary(pair, context);
3443+ const readable = pair === null || pair === void 0 ? void 0 : pair.readable;
3444+ assertRequiredField(readable, 'readable', 'ReadableWritablePair');
3445+ assertReadableStream(readable, `${context} has member 'readable' that`);
3446+ const writable = pair === null || pair === void 0 ? void 0 : pair.writable;
3447+ assertRequiredField(writable, 'writable', 'ReadableWritablePair');
3448+ assertWritableStream(writable, `${context} has member 'writable' that`);
3449+ return { readable, writable };
3450+ }
3451+
3452+ /**
3453+ * A readable stream represents a source of data, from which you can read.
3454+ *
3455+ * @public
3456+ */
3457+ class ReadableStream {
3458+ constructor(rawUnderlyingSource = {}, rawStrategy = {}) {
3459+ if (rawUnderlyingSource === undefined) {
3460+ rawUnderlyingSource = null;
3461+ }
3462+ else {
3463+ assertObject(rawUnderlyingSource, 'First parameter');
3464+ }
3465+ const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');
3466+ const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');
3467+ InitializeReadableStream(this);
3468+ if (underlyingSource.type === 'bytes') {
3469+ if (strategy.size !== undefined) {
3470+ throw new RangeError('The strategy for a byte stream cannot have a size function');
3471+ }
3472+ const highWaterMark = ExtractHighWaterMark(strategy, 0);
3473+ SetUpReadableByteStreamControllerFromUnderlyingSource(this, underlyingSource, highWaterMark);
3474+ }
3475+ else {
3476+ const sizeAlgorithm = ExtractSizeAlgorithm(strategy);
3477+ const highWaterMark = ExtractHighWaterMark(strategy, 1);
3478+ SetUpReadableStreamDefaultControllerFromUnderlyingSource(this, underlyingSource, highWaterMark, sizeAlgorithm);
3479+ }
3480+ }
3481+ /**
3482+ * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.
3483+ */
3484+ get locked() {
3485+ if (!IsReadableStream(this)) {
3486+ throw streamBrandCheckException$1('locked');
3487+ }
3488+ return IsReadableStreamLocked(this);
3489+ }
3490+ /**
3491+ * Cancels the stream, signaling a loss of interest in the stream by a consumer.
3492+ *
3493+ * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}
3494+ * method, which might or might not use it.
3495+ */
3496+ cancel(reason = undefined) {
3497+ if (!IsReadableStream(this)) {
3498+ return promiseRejectedWith(streamBrandCheckException$1('cancel'));
3499+ }
3500+ if (IsReadableStreamLocked(this)) {
3501+ return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));
3502+ }
3503+ return ReadableStreamCancel(this, reason);
3504+ }
3505+ getReader(rawOptions = undefined) {
3506+ if (!IsReadableStream(this)) {
3507+ throw streamBrandCheckException$1('getReader');
3508+ }
3509+ const options = convertReaderOptions(rawOptions, 'First parameter');
3510+ if (options.mode === undefined) {
3511+ return AcquireReadableStreamDefaultReader(this);
3512+ }
3513+ return AcquireReadableStreamBYOBReader(this);
3514+ }
3515+ pipeThrough(rawTransform, rawOptions = {}) {
3516+ if (!IsReadableStream(this)) {
3517+ throw streamBrandCheckException$1('pipeThrough');
3518+ }
3519+ assertRequiredArgument(rawTransform, 1, 'pipeThrough');
3520+ const transform = convertReadableWritablePair(rawTransform, 'First parameter');
3521+ const options = convertPipeOptions(rawOptions, 'Second parameter');
3522+ if (IsReadableStreamLocked(this)) {
3523+ throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');
3524+ }
3525+ if (IsWritableStreamLocked(transform.writable)) {
3526+ throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');
3527+ }
3528+ const promise = ReadableStreamPipeTo(this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal);
3529+ setPromiseIsHandledToTrue(promise);
3530+ return transform.readable;
3531+ }
3532+ pipeTo(destination, rawOptions = {}) {
3533+ if (!IsReadableStream(this)) {
3534+ return promiseRejectedWith(streamBrandCheckException$1('pipeTo'));
3535+ }
3536+ if (destination === undefined) {
3537+ return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);
3538+ }
3539+ if (!IsWritableStream(destination)) {
3540+ return promiseRejectedWith(new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`));
3541+ }
3542+ let options;
3543+ try {
3544+ options = convertPipeOptions(rawOptions, 'Second parameter');
3545+ }
3546+ catch (e) {
3547+ return promiseRejectedWith(e);
3548+ }
3549+ if (IsReadableStreamLocked(this)) {
3550+ return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream'));
3551+ }
3552+ if (IsWritableStreamLocked(destination)) {
3553+ return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream'));
3554+ }
3555+ return ReadableStreamPipeTo(this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal);
3556+ }
3557+ /**
3558+ * Tees this readable stream, returning a two-element array containing the two resulting branches as
3559+ * new {@link ReadableStream} instances.
3560+ *
3561+ * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.
3562+ * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be
3563+ * propagated to the stream's underlying source.
3564+ *
3565+ * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,
3566+ * this could allow interference between the two branches.
3567+ */
3568+ tee() {
3569+ if (!IsReadableStream(this)) {
3570+ throw streamBrandCheckException$1('tee');
3571+ }
3572+ const branches = ReadableStreamTee(this);
3573+ return CreateArrayFromList(branches);
3574+ }
3575+ values(rawOptions = undefined) {
3576+ if (!IsReadableStream(this)) {
3577+ throw streamBrandCheckException$1('values');
3578+ }
3579+ const options = convertIteratorOptions(rawOptions, 'First parameter');
3580+ return AcquireReadableStreamAsyncIterator(this, options.preventCancel);
3581+ }
3582+ }
3583+ Object.defineProperties(ReadableStream.prototype, {
3584+ cancel: { enumerable: true },
3585+ getReader: { enumerable: true },
3586+ pipeThrough: { enumerable: true },
3587+ pipeTo: { enumerable: true },
3588+ tee: { enumerable: true },
3589+ values: { enumerable: true },
3590+ locked: { enumerable: true }
3591+ });
3592+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
3593+ Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.toStringTag, {
3594+ value: 'ReadableStream',
3595+ configurable: true
3596+ });
3597+ }
3598+ if (typeof SymbolPolyfill.asyncIterator === 'symbol') {
3599+ Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.asyncIterator, {
3600+ value: ReadableStream.prototype.values,
3601+ writable: true,
3602+ configurable: true
3603+ });
3604+ }
3605+ // Abstract operations for the ReadableStream.
3606+ // Throws if and only if startAlgorithm throws.
3607+ function CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark = 1, sizeAlgorithm = () => 1) {
3608+ const stream = Object.create(ReadableStream.prototype);
3609+ InitializeReadableStream(stream);
3610+ const controller = Object.create(ReadableStreamDefaultController.prototype);
3611+ SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);
3612+ return stream;
3613+ }
3614+ // Throws if and only if startAlgorithm throws.
3615+ function CreateReadableByteStream(startAlgorithm, pullAlgorithm, cancelAlgorithm) {
3616+ const stream = Object.create(ReadableStream.prototype);
3617+ InitializeReadableStream(stream);
3618+ const controller = Object.create(ReadableByteStreamController.prototype);
3619+ SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);
3620+ return stream;
3621+ }
3622+ function InitializeReadableStream(stream) {
3623+ stream._state = 'readable';
3624+ stream._reader = undefined;
3625+ stream._storedError = undefined;
3626+ stream._disturbed = false;
3627+ }
3628+ function IsReadableStream(x) {
3629+ if (!typeIsObject(x)) {
3630+ return false;
3631+ }
3632+ if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {
3633+ return false;
3634+ }
3635+ return x instanceof ReadableStream;
3636+ }
3637+ function IsReadableStreamLocked(stream) {
3638+ if (stream._reader === undefined) {
3639+ return false;
3640+ }
3641+ return true;
3642+ }
3643+ // ReadableStream API exposed for controllers.
3644+ function ReadableStreamCancel(stream, reason) {
3645+ stream._disturbed = true;
3646+ if (stream._state === 'closed') {
3647+ return promiseResolvedWith(undefined);
3648+ }
3649+ if (stream._state === 'errored') {
3650+ return promiseRejectedWith(stream._storedError);
3651+ }
3652+ ReadableStreamClose(stream);
3653+ const reader = stream._reader;
3654+ if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {
3655+ reader._readIntoRequests.forEach(readIntoRequest => {
3656+ readIntoRequest._closeSteps(undefined);
3657+ });
3658+ reader._readIntoRequests = new SimpleQueue();
3659+ }
3660+ const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);
3661+ return transformPromiseWith(sourceCancelPromise, noop);
3662+ }
3663+ function ReadableStreamClose(stream) {
3664+ stream._state = 'closed';
3665+ const reader = stream._reader;
3666+ if (reader === undefined) {
3667+ return;
3668+ }
3669+ defaultReaderClosedPromiseResolve(reader);
3670+ if (IsReadableStreamDefaultReader(reader)) {
3671+ reader._readRequests.forEach(readRequest => {
3672+ readRequest._closeSteps();
3673+ });
3674+ reader._readRequests = new SimpleQueue();
3675+ }
3676+ }
3677+ function ReadableStreamError(stream, e) {
3678+ stream._state = 'errored';
3679+ stream._storedError = e;
3680+ const reader = stream._reader;
3681+ if (reader === undefined) {
3682+ return;
3683+ }
3684+ defaultReaderClosedPromiseReject(reader, e);
3685+ if (IsReadableStreamDefaultReader(reader)) {
3686+ reader._readRequests.forEach(readRequest => {
3687+ readRequest._errorSteps(e);
3688+ });
3689+ reader._readRequests = new SimpleQueue();
3690+ }
3691+ else {
3692+ reader._readIntoRequests.forEach(readIntoRequest => {
3693+ readIntoRequest._errorSteps(e);
3694+ });
3695+ reader._readIntoRequests = new SimpleQueue();
3696+ }
3697+ }
3698+ // Helper functions for the ReadableStream.
3699+ function streamBrandCheckException$1(name) {
3700+ return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);
3701+ }
3702+
3703+ function convertQueuingStrategyInit(init, context) {
3704+ assertDictionary(init, context);
3705+ const highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;
3706+ assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');
3707+ return {
3708+ highWaterMark: convertUnrestrictedDouble(highWaterMark)
3709+ };
3710+ }
3711+
3712+ // The size function must not have a prototype property nor be a constructor
3713+ const byteLengthSizeFunction = (chunk) => {
3714+ return chunk.byteLength;
3715+ };
3716+ try {
3717+ Object.defineProperty(byteLengthSizeFunction, 'name', {
3718+ value: 'size',
3719+ configurable: true
3720+ });
3721+ }
3722+ catch (_a) {
3723+ // This property is non-configurable in older browsers, so ignore if this throws.
3724+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility
3725+ }
3726+ /**
3727+ * A queuing strategy that counts the number of bytes in each chunk.
3728+ *
3729+ * @public
3730+ */
3731+ class ByteLengthQueuingStrategy {
3732+ constructor(options) {
3733+ assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');
3734+ options = convertQueuingStrategyInit(options, 'First parameter');
3735+ this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;
3736+ }
3737+ /**
3738+ * Returns the high water mark provided to the constructor.
3739+ */
3740+ get highWaterMark() {
3741+ if (!IsByteLengthQueuingStrategy(this)) {
3742+ throw byteLengthBrandCheckException('highWaterMark');
3743+ }
3744+ return this._byteLengthQueuingStrategyHighWaterMark;
3745+ }
3746+ /**
3747+ * Measures the size of `chunk` by returning the value of its `byteLength` property.
3748+ */
3749+ get size() {
3750+ if (!IsByteLengthQueuingStrategy(this)) {
3751+ throw byteLengthBrandCheckException('size');
3752+ }
3753+ return byteLengthSizeFunction;
3754+ }
3755+ }
3756+ Object.defineProperties(ByteLengthQueuingStrategy.prototype, {
3757+ highWaterMark: { enumerable: true },
3758+ size: { enumerable: true }
3759+ });
3760+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
3761+ Object.defineProperty(ByteLengthQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {
3762+ value: 'ByteLengthQueuingStrategy',
3763+ configurable: true
3764+ });
3765+ }
3766+ // Helper functions for the ByteLengthQueuingStrategy.
3767+ function byteLengthBrandCheckException(name) {
3768+ return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);
3769+ }
3770+ function IsByteLengthQueuingStrategy(x) {
3771+ if (!typeIsObject(x)) {
3772+ return false;
3773+ }
3774+ if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {
3775+ return false;
3776+ }
3777+ return x instanceof ByteLengthQueuingStrategy;
3778+ }
3779+
3780+ // The size function must not have a prototype property nor be a constructor
3781+ const countSizeFunction = () => {
3782+ return 1;
3783+ };
3784+ try {
3785+ Object.defineProperty(countSizeFunction, 'name', {
3786+ value: 'size',
3787+ configurable: true
3788+ });
3789+ }
3790+ catch (_a) {
3791+ // This property is non-configurable in older browsers, so ignore if this throws.
3792+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility
3793+ }
3794+ /**
3795+ * A queuing strategy that counts the number of chunks.
3796+ *
3797+ * @public
3798+ */
3799+ class CountQueuingStrategy {
3800+ constructor(options) {
3801+ assertRequiredArgument(options, 1, 'CountQueuingStrategy');
3802+ options = convertQueuingStrategyInit(options, 'First parameter');
3803+ this._countQueuingStrategyHighWaterMark = options.highWaterMark;
3804+ }
3805+ /**
3806+ * Returns the high water mark provided to the constructor.
3807+ */
3808+ get highWaterMark() {
3809+ if (!IsCountQueuingStrategy(this)) {
3810+ throw countBrandCheckException('highWaterMark');
3811+ }
3812+ return this._countQueuingStrategyHighWaterMark;
3813+ }
3814+ /**
3815+ * Measures the size of `chunk` by always returning 1.
3816+ * This ensures that the total queue size is a count of the number of chunks in the queue.
3817+ */
3818+ get size() {
3819+ if (!IsCountQueuingStrategy(this)) {
3820+ throw countBrandCheckException('size');
3821+ }
3822+ return countSizeFunction;
3823+ }
3824+ }
3825+ Object.defineProperties(CountQueuingStrategy.prototype, {
3826+ highWaterMark: { enumerable: true },
3827+ size: { enumerable: true }
3828+ });
3829+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
3830+ Object.defineProperty(CountQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {
3831+ value: 'CountQueuingStrategy',
3832+ configurable: true
3833+ });
3834+ }
3835+ // Helper functions for the CountQueuingStrategy.
3836+ function countBrandCheckException(name) {
3837+ return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);
3838+ }
3839+ function IsCountQueuingStrategy(x) {
3840+ if (!typeIsObject(x)) {
3841+ return false;
3842+ }
3843+ if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {
3844+ return false;
3845+ }
3846+ return x instanceof CountQueuingStrategy;
3847+ }
3848+
3849+ function convertTransformer(original, context) {
3850+ assertDictionary(original, context);
3851+ const flush = original === null || original === void 0 ? void 0 : original.flush;
3852+ const readableType = original === null || original === void 0 ? void 0 : original.readableType;
3853+ const start = original === null || original === void 0 ? void 0 : original.start;
3854+ const transform = original === null || original === void 0 ? void 0 : original.transform;
3855+ const writableType = original === null || original === void 0 ? void 0 : original.writableType;
3856+ return {
3857+ flush: flush === undefined ?
3858+ undefined :
3859+ convertTransformerFlushCallback(flush, original, `${context} has member 'flush' that`),
3860+ readableType,
3861+ start: start === undefined ?
3862+ undefined :
3863+ convertTransformerStartCallback(start, original, `${context} has member 'start' that`),
3864+ transform: transform === undefined ?
3865+ undefined :
3866+ convertTransformerTransformCallback(transform, original, `${context} has member 'transform' that`),
3867+ writableType
3868+ };
3869+ }
3870+ function convertTransformerFlushCallback(fn, original, context) {
3871+ assertFunction(fn, context);
3872+ return (controller) => promiseCall(fn, original, [controller]);
3873+ }
3874+ function convertTransformerStartCallback(fn, original, context) {
3875+ assertFunction(fn, context);
3876+ return (controller) => reflectCall(fn, original, [controller]);
3877+ }
3878+ function convertTransformerTransformCallback(fn, original, context) {
3879+ assertFunction(fn, context);
3880+ return (chunk, controller) => promiseCall(fn, original, [chunk, controller]);
3881+ }
3882+
3883+ // Class TransformStream
3884+ /**
3885+ * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},
3886+ * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.
3887+ * In a manner specific to the transform stream in question, writes to the writable side result in new data being
3888+ * made available for reading from the readable side.
3889+ *
3890+ * @public
3891+ */
3892+ class TransformStream {
3893+ constructor(rawTransformer = {}, rawWritableStrategy = {}, rawReadableStrategy = {}) {
3894+ if (rawTransformer === undefined) {
3895+ rawTransformer = null;
3896+ }
3897+ const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');
3898+ const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');
3899+ const transformer = convertTransformer(rawTransformer, 'First parameter');
3900+ if (transformer.readableType !== undefined) {
3901+ throw new RangeError('Invalid readableType specified');
3902+ }
3903+ if (transformer.writableType !== undefined) {
3904+ throw new RangeError('Invalid writableType specified');
3905+ }
3906+ const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);
3907+ const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);
3908+ const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);
3909+ const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);
3910+ let startPromise_resolve;
3911+ const startPromise = newPromise(resolve => {
3912+ startPromise_resolve = resolve;
3913+ });
3914+ InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm);
3915+ SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);
3916+ if (transformer.start !== undefined) {
3917+ startPromise_resolve(transformer.start(this._transformStreamController));
3918+ }
3919+ else {
3920+ startPromise_resolve(undefined);
3921+ }
3922+ }
3923+ /**
3924+ * The readable side of the transform stream.
3925+ */
3926+ get readable() {
3927+ if (!IsTransformStream(this)) {
3928+ throw streamBrandCheckException('readable');
3929+ }
3930+ return this._readable;
3931+ }
3932+ /**
3933+ * The writable side of the transform stream.
3934+ */
3935+ get writable() {
3936+ if (!IsTransformStream(this)) {
3937+ throw streamBrandCheckException('writable');
3938+ }
3939+ return this._writable;
3940+ }
3941+ }
3942+ Object.defineProperties(TransformStream.prototype, {
3943+ readable: { enumerable: true },
3944+ writable: { enumerable: true }
3945+ });
3946+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
3947+ Object.defineProperty(TransformStream.prototype, SymbolPolyfill.toStringTag, {
3948+ value: 'TransformStream',
3949+ configurable: true
3950+ });
3951+ }
3952+ function InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) {
3953+ function startAlgorithm() {
3954+ return startPromise;
3955+ }
3956+ function writeAlgorithm(chunk) {
3957+ return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);
3958+ }
3959+ function abortAlgorithm(reason) {
3960+ return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);
3961+ }
3962+ function closeAlgorithm() {
3963+ return TransformStreamDefaultSinkCloseAlgorithm(stream);
3964+ }
3965+ stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, writableHighWaterMark, writableSizeAlgorithm);
3966+ function pullAlgorithm() {
3967+ return TransformStreamDefaultSourcePullAlgorithm(stream);
3968+ }
3969+ function cancelAlgorithm(reason) {
3970+ TransformStreamErrorWritableAndUnblockWrite(stream, reason);
3971+ return promiseResolvedWith(undefined);
3972+ }
3973+ stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark, readableSizeAlgorithm);
3974+ // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.
3975+ stream._backpressure = undefined;
3976+ stream._backpressureChangePromise = undefined;
3977+ stream._backpressureChangePromise_resolve = undefined;
3978+ TransformStreamSetBackpressure(stream, true);
3979+ stream._transformStreamController = undefined;
3980+ }
3981+ function IsTransformStream(x) {
3982+ if (!typeIsObject(x)) {
3983+ return false;
3984+ }
3985+ if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {
3986+ return false;
3987+ }
3988+ return x instanceof TransformStream;
3989+ }
3990+ // This is a no-op if both sides are already errored.
3991+ function TransformStreamError(stream, e) {
3992+ ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e);
3993+ TransformStreamErrorWritableAndUnblockWrite(stream, e);
3994+ }
3995+ function TransformStreamErrorWritableAndUnblockWrite(stream, e) {
3996+ TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);
3997+ WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);
3998+ if (stream._backpressure) {
3999+ // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()
4000+ // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time
4001+ // _backpressure is set.
4002+ TransformStreamSetBackpressure(stream, false);
4003+ }
4004+ }
4005+ function TransformStreamSetBackpressure(stream, backpressure) {
4006+ // Passes also when called during construction.
4007+ if (stream._backpressureChangePromise !== undefined) {
4008+ stream._backpressureChangePromise_resolve();
4009+ }
4010+ stream._backpressureChangePromise = newPromise(resolve => {
4011+ stream._backpressureChangePromise_resolve = resolve;
4012+ });
4013+ stream._backpressure = backpressure;
4014+ }
4015+ // Class TransformStreamDefaultController
4016+ /**
4017+ * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.
4018+ *
4019+ * @public
4020+ */
4021+ class TransformStreamDefaultController {
4022+ constructor() {
4023+ throw new TypeError('Illegal constructor');
4024+ }
4025+ /**
4026+ * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.
4027+ */
4028+ get desiredSize() {
4029+ if (!IsTransformStreamDefaultController(this)) {
4030+ throw defaultControllerBrandCheckException('desiredSize');
4031+ }
4032+ const readableController = this._controlledTransformStream._readable._readableStreamController;
4033+ return ReadableStreamDefaultControllerGetDesiredSize(readableController);
4034+ }
4035+ enqueue(chunk = undefined) {
4036+ if (!IsTransformStreamDefaultController(this)) {
4037+ throw defaultControllerBrandCheckException('enqueue');
4038+ }
4039+ TransformStreamDefaultControllerEnqueue(this, chunk);
4040+ }
4041+ /**
4042+ * Errors both the readable side and the writable side of the controlled transform stream, making all future
4043+ * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.
4044+ */
4045+ error(reason = undefined) {
4046+ if (!IsTransformStreamDefaultController(this)) {
4047+ throw defaultControllerBrandCheckException('error');
4048+ }
4049+ TransformStreamDefaultControllerError(this, reason);
4050+ }
4051+ /**
4052+ * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the
4053+ * transformer only needs to consume a portion of the chunks written to the writable side.
4054+ */
4055+ terminate() {
4056+ if (!IsTransformStreamDefaultController(this)) {
4057+ throw defaultControllerBrandCheckException('terminate');
4058+ }
4059+ TransformStreamDefaultControllerTerminate(this);
4060+ }
4061+ }
4062+ Object.defineProperties(TransformStreamDefaultController.prototype, {
4063+ enqueue: { enumerable: true },
4064+ error: { enumerable: true },
4065+ terminate: { enumerable: true },
4066+ desiredSize: { enumerable: true }
4067+ });
4068+ if (typeof SymbolPolyfill.toStringTag === 'symbol') {
4069+ Object.defineProperty(TransformStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {
4070+ value: 'TransformStreamDefaultController',
4071+ configurable: true
4072+ });
4073+ }
4074+ // Transform Stream Default Controller Abstract Operations
4075+ function IsTransformStreamDefaultController(x) {
4076+ if (!typeIsObject(x)) {
4077+ return false;
4078+ }
4079+ if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {
4080+ return false;
4081+ }
4082+ return x instanceof TransformStreamDefaultController;
4083+ }
4084+ function SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm) {
4085+ controller._controlledTransformStream = stream;
4086+ stream._transformStreamController = controller;
4087+ controller._transformAlgorithm = transformAlgorithm;
4088+ controller._flushAlgorithm = flushAlgorithm;
4089+ }
4090+ function SetUpTransformStreamDefaultControllerFromTransformer(stream, transformer) {
4091+ const controller = Object.create(TransformStreamDefaultController.prototype);
4092+ let transformAlgorithm = (chunk) => {
4093+ try {
4094+ TransformStreamDefaultControllerEnqueue(controller, chunk);
4095+ return promiseResolvedWith(undefined);
4096+ }
4097+ catch (transformResultE) {
4098+ return promiseRejectedWith(transformResultE);
4099+ }
4100+ };
4101+ let flushAlgorithm = () => promiseResolvedWith(undefined);
4102+ if (transformer.transform !== undefined) {
4103+ transformAlgorithm = chunk => transformer.transform(chunk, controller);
4104+ }
4105+ if (transformer.flush !== undefined) {
4106+ flushAlgorithm = () => transformer.flush(controller);
4107+ }
4108+ SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);
4109+ }
4110+ function TransformStreamDefaultControllerClearAlgorithms(controller) {
4111+ controller._transformAlgorithm = undefined;
4112+ controller._flushAlgorithm = undefined;
4113+ }
4114+ function TransformStreamDefaultControllerEnqueue(controller, chunk) {
4115+ const stream = controller._controlledTransformStream;
4116+ const readableController = stream._readable._readableStreamController;
4117+ if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {
4118+ throw new TypeError('Readable side is not in a state that permits enqueue');
4119+ }
4120+ // We throttle transform invocations based on the backpressure of the ReadableStream, but we still
4121+ // accept TransformStreamDefaultControllerEnqueue() calls.
4122+ try {
4123+ ReadableStreamDefaultControllerEnqueue(readableController, chunk);
4124+ }
4125+ catch (e) {
4126+ // This happens when readableStrategy.size() throws.
4127+ TransformStreamErrorWritableAndUnblockWrite(stream, e);
4128+ throw stream._readable._storedError;
4129+ }
4130+ const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);
4131+ if (backpressure !== stream._backpressure) {
4132+ TransformStreamSetBackpressure(stream, true);
4133+ }
4134+ }
4135+ function TransformStreamDefaultControllerError(controller, e) {
4136+ TransformStreamError(controller._controlledTransformStream, e);
4137+ }
4138+ function TransformStreamDefaultControllerPerformTransform(controller, chunk) {
4139+ const transformPromise = controller._transformAlgorithm(chunk);
4140+ return transformPromiseWith(transformPromise, undefined, r => {
4141+ TransformStreamError(controller._controlledTransformStream, r);
4142+ throw r;
4143+ });
4144+ }
4145+ function TransformStreamDefaultControllerTerminate(controller) {
4146+ const stream = controller._controlledTransformStream;
4147+ const readableController = stream._readable._readableStreamController;
4148+ ReadableStreamDefaultControllerClose(readableController);
4149+ const error = new TypeError('TransformStream terminated');
4150+ TransformStreamErrorWritableAndUnblockWrite(stream, error);
4151+ }
4152+ // TransformStreamDefaultSink Algorithms
4153+ function TransformStreamDefaultSinkWriteAlgorithm(stream, chunk) {
4154+ const controller = stream._transformStreamController;
4155+ if (stream._backpressure) {
4156+ const backpressureChangePromise = stream._backpressureChangePromise;
4157+ return transformPromiseWith(backpressureChangePromise, () => {
4158+ const writable = stream._writable;
4159+ const state = writable._state;
4160+ if (state === 'erroring') {
4161+ throw writable._storedError;
4162+ }
4163+ return TransformStreamDefaultControllerPerformTransform(controller, chunk);
4164+ });
4165+ }
4166+ return TransformStreamDefaultControllerPerformTransform(controller, chunk);
4167+ }
4168+ function TransformStreamDefaultSinkAbortAlgorithm(stream, reason) {
4169+ // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already
4170+ // errored.
4171+ TransformStreamError(stream, reason);
4172+ return promiseResolvedWith(undefined);
4173+ }
4174+ function TransformStreamDefaultSinkCloseAlgorithm(stream) {
4175+ // stream._readable cannot change after construction, so caching it across a call to user code is safe.
4176+ const readable = stream._readable;
4177+ const controller = stream._transformStreamController;
4178+ const flushPromise = controller._flushAlgorithm();
4179+ TransformStreamDefaultControllerClearAlgorithms(controller);
4180+ // Return a promise that is fulfilled with undefined on success.
4181+ return transformPromiseWith(flushPromise, () => {
4182+ if (readable._state === 'errored') {
4183+ throw readable._storedError;
4184+ }
4185+ ReadableStreamDefaultControllerClose(readable._readableStreamController);
4186+ }, r => {
4187+ TransformStreamError(stream, r);
4188+ throw readable._storedError;
4189+ });
4190+ }
4191+ // TransformStreamDefaultSource Algorithms
4192+ function TransformStreamDefaultSourcePullAlgorithm(stream) {
4193+ // Invariant. Enforced by the promises returned by start() and pull().
4194+ TransformStreamSetBackpressure(stream, false);
4195+ // Prevent the next pull() call until there is backpressure.
4196+ return stream._backpressureChangePromise;
4197+ }
4198+ // Helper functions for the TransformStreamDefaultController.
4199+ function defaultControllerBrandCheckException(name) {
4200+ return new TypeError(`TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);
4201+ }
4202+ // Helper functions for the TransformStream.
4203+ function streamBrandCheckException(name) {
4204+ return new TypeError(`TransformStream.prototype.${name} can only be used on a TransformStream`);
4205+ }
4206+
4207+ const exports$1 = {
4208+ ReadableStream,
4209+ ReadableStreamDefaultController,
4210+ ReadableByteStreamController,
4211+ ReadableStreamBYOBRequest,
4212+ ReadableStreamDefaultReader,
4213+ ReadableStreamBYOBReader,
4214+ WritableStream,
4215+ WritableStreamDefaultController,
4216+ WritableStreamDefaultWriter,
4217+ ByteLengthQueuingStrategy,
4218+ CountQueuingStrategy,
4219+ TransformStream,
4220+ TransformStreamDefaultController
4221+ };
4222+ // Add classes to global scope
4223+ if (typeof globals !== 'undefined') {
4224+ for (const prop in exports$1) {
4225+ if (Object.prototype.hasOwnProperty.call(exports$1, prop)) {
4226+ Object.defineProperty(globals, prop, {
4227+ value: exports$1[prop],
4228+ writable: true,
4229+ configurable: true
4230+ });
4231+ }
4232+ }
4233+ }
4234+
4235+ exports.ByteLengthQueuingStrategy = ByteLengthQueuingStrategy;
4236+ exports.CountQueuingStrategy = CountQueuingStrategy;
4237+ exports.ReadableByteStreamController = ReadableByteStreamController;
4238+ exports.ReadableStream = ReadableStream;
4239+ exports.ReadableStreamBYOBReader = ReadableStreamBYOBReader;
4240+ exports.ReadableStreamBYOBRequest = ReadableStreamBYOBRequest;
4241+ exports.ReadableStreamDefaultController = ReadableStreamDefaultController;
4242+ exports.ReadableStreamDefaultReader = ReadableStreamDefaultReader;
4243+ exports.TransformStream = TransformStream;
4244+ exports.TransformStreamDefaultController = TransformStreamDefaultController;
4245+ exports.WritableStream = WritableStream;
4246+ exports.WritableStreamDefaultController = WritableStreamDefaultController;
4247+ exports.WritableStreamDefaultWriter = WritableStreamDefaultWriter;
4248+
4249+ Object.defineProperty(exports, '__esModule', { value: true });
4250+
4251+})));
4252+//# sourceMappingURL=polyfill.es6.js.map
prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es6.js.mapnew file+1
@@ -0,0 +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":["/// <reference lib=\"es2015.symbol\" />\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","/// <reference lib=\"dom\" />\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<T>(executor: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void\n) => void): Promise<T> {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith<T>(value: T | PromiseLike<T>): Promise<T> {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith<T = never>(reason: any): Promise<T> {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => TResult1 | PromiseLike<TResult1>,\n onRejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\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<TResult1 | TResult2>;\n}\n\nexport function uponPromise<T>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => void | PromiseLike<void>,\n onRejected?: (reason: any) => void | PromiseLike<void>): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment<T>(promise: Promise<T>, onFulfilled: (value: T) => void | PromiseLike<void>): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise<unknown>, onRejected: (reason: any) => void | PromiseLike<void>): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike<TResult1>,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise<unknown>): 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<T, A extends any[], R>(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<T, A extends any[], R>(F: (this: T, ...fnArgs: A) => R | PromiseLike<R>,\n V: T,\n args: A): Promise<R> {\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<T> {\n _elements: T[];\n _next: Node<T> | 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<T> {\n private _front: Node<T>;\n private _back: Node<T>;\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<R>(reader: ReadableStreamReader<R>, stream: ReadableStream<R>) {\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<any>, reason: any): Promise<undefined> {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader<any>) {\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<any>) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader<any>, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader<any>) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader<any>, 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<any>, 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<any>) {\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","/// <reference lib=\"es2015.core\" />\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","/// <reference lib=\"es2015.core\" />\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<T extends any>(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<T extends any>(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<T> = {\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<R>(stream: ReadableStream): ReadableStreamDefaultReader<R> {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest<R>(stream: ReadableStream<R>,\n readRequest: ReadRequest<R>): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader<R>)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest<R>(stream: ReadableStream<R>, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader<R>;\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<R>(stream: ReadableStream<R>): number {\n return (stream._reader as ReadableStreamDefaultReader<R>)._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<R> {\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<R = any> {\n /** @internal */\n _ownerReadableStream!: ReadableStream<R>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue<ReadRequest<R>>;\n\n constructor(stream: ReadableStream<R>) {\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<undefined> {\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<void> {\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<ReadableStreamDefaultReadResult<R>> {\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<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\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<R = any>(x: any): x is ReadableStreamDefaultReader<R> {\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<R>(reader: ReadableStreamDefaultReader<R>,\n readRequest: ReadRequest<R>): 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<any>);\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","/// <reference lib=\"es2018.asynciterable\" />\n\nexport let AsyncIteratorPrototype: AsyncIterable<any> | 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<any>) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// <reference lib=\"es2018.asynciterable\" />\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<R> extends AsyncIterator<R> {\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl<R> {\n private readonly _reader: ReadableStreamDefaultReader<R>;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise<ReadableStreamDefaultReadResult<R>> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader<R>, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise<ReadableStreamDefaultReadResult<R>> {\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<ReadableStreamDefaultReadResult<any>> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise<ReadableStreamDefaultReadResult<R>> {\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<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\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<ReadableStreamDefaultReadResult<any>> {\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<R> implements ReadableStreamAsyncIterator<R> {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl<R>;\n\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance<any> = {\n next(this: ReadableStreamAsyncIteratorInstance<any>): Promise<ReadableStreamDefaultReadResult<any>> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance<any>, value: any): Promise<ReadableStreamDefaultReadResult<any>> {\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<R>(stream: ReadableStream<R>,\n preventCancel: boolean): ReadableStreamAsyncIterator<R> {\n const reader = AcquireReadableStreamDefaultReader<R>(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance<R> = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator<R = any>(x: any): x is ReadableStreamAsyncIterator<R> {\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<any>)._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","/// <reference lib=\"es2015.core\" />\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<T extends any[]>(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<T extends ArrayBufferLike>(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<T> {\n _queue: SimpleQueue<T>;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair<T> {\n value: T;\n size: number;\n}\n\nexport function DequeueValue<T>(container: QueueContainer<QueuePair<T>>): 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<T>(container: QueueContainer<QueuePair<T>>, 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<T>(container: QueueContainer<QueuePair<T>>): 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<T>(container: QueueContainer<T>) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue<T>();\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<T extends ArrayBufferView = ArrayBufferView> {\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<T extends ArrayBufferView = ArrayBufferView> =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor<T>;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor<Uint8Array>;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor<T extends ArrayBufferView = ArrayBufferView> {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor<T>;\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<ByteQueueElement>;\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<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue<PullIntoDescriptor>;\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<void> {\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<Uint8Array>): 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<T extends ArrayBufferView>(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor<T>\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<T>(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<T extends ArrayBufferView>(\n pullIntoDescriptor: PullIntoDescriptor<T>\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<T extends ArrayBufferView>(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest<T>\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor<T>).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor<T>;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor<T> = {\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<T>(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<T>(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<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\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<void> = () => undefined;\n let pullAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise<void> = () => 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<T extends ArrayBufferView> = {\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<T extends ArrayBufferView>(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest<T>): 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<T extends ArrayBufferView> {\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<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue<ReadIntoRequest<any>>;\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<undefined> {\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<void> {\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<T extends ArrayBufferView>(view: T): Promise<ReadableStreamBYOBReadResult<T>> {\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<T>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamBYOBReadResult<T>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest<T> = {\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<T extends ArrayBufferView>(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest<T>\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<T>(strategy: QueuingStrategy<T>): QueuingStrategySizeCallback<T> {\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<T>(init: QueuingStrategy<T> | null | undefined,\n context: string): QueuingStrategy<T> {\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<T>(fn: QueuingStrategySizeCallback<T>,\n context: string): QueuingStrategySizeCallback<T> {\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<W>(original: UnderlyingSink<W> | null,\n context: string): ValidatedUnderlyingSink<W> {\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<void> {\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<void> {\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<W>(\n fn: UnderlyingSinkWriteCallback<W>,\n original: UnderlyingSink<W>,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise<void> {\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<undefined>;\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<W = any> {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter<W> | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController<W>;\n /** @internal */\n _writeRequests!: SimpleQueue<WriteRequest>;\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<W>, strategy?: QueuingStrategy<W>);\n constructor(rawUnderlyingSink: UnderlyingSink<W> | null | undefined = {},\n rawStrategy: QueuingStrategy<W> | 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<void> {\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<W> {\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<W>(stream: WritableStream<W>): WritableStreamDefaultWriter<W> {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream<W>(startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<W> = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream<W> = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController<W> = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream<W>(stream: WritableStream<W>) {\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<undefined> {\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<undefined>((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<any>): Promise<undefined> {\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<undefined>((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<undefined> {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise<undefined>((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<W = any> {\n /** @internal */\n _ownerWritableStream: WritableStream<W>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\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<undefined>;\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<W>) {\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<undefined> {\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<undefined> {\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<void> {\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<void> {\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<void>;\n write(chunk: W = undefined!): Promise<void> {\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<W = any>(x: any): x is WritableStreamDefaultWriter<W> {\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<undefined> {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise<undefined> {\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<W>(writer: WritableStreamDefaultWriter<W>, chunk: W): Promise<undefined> {\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> = 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<W = any> {\n /** @internal */\n _controlledWritableStream!: WritableStream<W>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<QueueRecord<W>>>;\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<W>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise<void>;\n /** @internal */\n _closeAlgorithm!: () => Promise<void>;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise<void>;\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<void> {\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<any> {\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<W>(stream: WritableStream<W>,\n controller: WritableStreamDefaultController<W>,\n startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\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<W>(stream: WritableStream<W>,\n underlyingSink: ValidatedUnderlyingSink<W>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void> = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise<void> = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise<void> = () => 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<any>) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose<W>(controller: WritableStreamDefaultController<W>) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize<W>(controller: WritableStreamDefaultController<W>,\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<any>): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite<W>(controller: WritableStreamDefaultController<W>,\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<W>(controller: WritableStreamDefaultController<W>) {\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<any>, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController<any>) {\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<W>(controller: WritableStreamDefaultController<W>, 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<any>): 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<any>, 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","/// <reference lib=\"dom\" />\nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// <reference types=\"node\" />\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<T>(source: ReadableStream<T>,\n dest: WritableStream<T>,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise<undefined> {\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<T>(source);\n const writer = AcquireWritableStreamDefaultWriter<T>(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<void>(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<void>> = [];\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<void>((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<boolean> {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise<boolean>((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<void> {\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<void>,\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<void>, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise<unknown>, 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<R> {\n /** @internal */\n _controlledReadableStream!: ReadableStream<R>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<R>>;\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<R>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\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<void> {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest<R>): 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<R = any>(x: any): x is ReadableStreamDefaultController<R> {\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<any>): 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<any>): 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<any>) {\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<any>) {\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<R>(\n controller: ReadableStreamDefaultController<R>,\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<any>, 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<any>\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<any>\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController<any>\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<R>(stream: ReadableStream<R>,\n controller: ReadableStreamDefaultController<R>,\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>) {\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<R>(\n stream: ReadableStream<R>,\n underlyingSource: ValidatedUnderlyingSource<R>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>\n) {\n const controller: ReadableStreamDefaultController<R> = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void> = () => undefined;\n let pullAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise<void> = () => 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<R>(stream: ReadableStream<R>,\n cloneForBranch2: boolean): [ReadableStream<R>, ReadableStream<R>] {\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<R>, ReadableStream<R>];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee<R>(stream: ReadableStream<R>,\n cloneForBranch2: boolean): [ReadableStream<R>, ReadableStream<R>] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader<R>(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<R>;\n let branch2: ReadableStream<R>;\n\n let resolveCancelPromise: (value: undefined | Promise<undefined>) => void;\n const cancelPromise = newPromise<undefined>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise<void> {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest<R> = {\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<R>,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController<R>,\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<R>);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController<R>);\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<void> {\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<void> {\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>, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController<R>, 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<Uint8Array> = 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<undefined>) => void;\n const cancelPromise = newPromise<void>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader<Uint8Array>) {\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<Uint8Array> = {\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<Uint8Array>(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<ArrayBufferView> = {\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<void> {\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<void> {\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<void> {\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<void> {\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<R>(\n source: UnderlyingSource<R> | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource<R> {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource<R> | 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<void> {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback<R>(\n fn: UnderlyingDefaultOrByteSourcePullCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): (controller: ReadableStreamController<R>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback<R>(\n fn: UnderlyingDefaultOrByteSourceStartCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback<R> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => 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<RS extends ReadableStream, WS extends WritableStream>(\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<Uint8Array> & {\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<R = any> {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader<R> | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController<R> | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>);\n constructor(rawUnderlyingSource: UnderlyingSource<R> | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy<R> | 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<void> {\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<R>;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader<R> | 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<RS extends ReadableStream>(\n transform: { readable: RS; writable: WritableStream<R> },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough<RS extends ReadableStream>(\n rawTransform: { readable: RS; writable: WritableStream<R> } | 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<R>, options?: StreamPipeOptions): Promise<void>;\n pipeTo(destination: WritableStream<R> | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise<void> {\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<R>(\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<R>, ReadableStream<R>] {\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<R>;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator<R> {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator<R>(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator<R>;\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<R>(startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<R> = () => 1): ReadableStream<R> {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream<R> = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController<R> = 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<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>\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<R>(stream: ReadableStream<R>, reason: any): Promise<undefined> {\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<R>(stream: ReadableStream<R>): 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<R>(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError<R>(stream: ReadableStream<R>, 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<R>(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<R> = ReadableStreamDefaultReader<R> | 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<ArrayBufferView> {\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<any> {\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<I, O>(original: Transformer<I, O> | null,\n context: string): ValidatedTransformer<I, O> {\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<I, O>(\n fn: TransformerFlushCallback<O>,\n original: Transformer<I, O>,\n context: string\n): (controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback<I, O>(\n fn: TransformerStartCallback<O>,\n original: Transformer<I, O>,\n context: string\n): TransformerStartCallback<O> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback<I, O>(\n fn: TransformerTransformCallback<I, O>,\n original: Transformer<I, O>,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController<O>) => 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<I = any, O = any> {\n /** @internal */\n _writable!: WritableStream<I>;\n /** @internal */\n _readable!: ReadableStream<O>;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise<void>;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController<O>;\n\n constructor(\n transformer?: Transformer<I, O>,\n writableStrategy?: QueuingStrategy<I>,\n readableStrategy?: QueuingStrategy<O>\n );\n constructor(rawTransformer: Transformer<I, O> | null | undefined = {},\n rawWritableStrategy: QueuingStrategy<I> | null | undefined = {},\n rawReadableStrategy: QueuingStrategy<O> | 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>) => void;\n const startPromise = newPromise<void>(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<O> {\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<I> {\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<I, O>(startAlgorithm: () => void | PromiseLike<void>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I> = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O> = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream<I, O> = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike<void>) => void;\n const startPromise = newPromise<void>(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController<O> = 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<I, O>(stream: TransformStream<I, O>,\n startPromise: Promise<void>,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I>,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O>) {\n function startAlgorithm(): Promise<void> {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise<void> {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise<void> {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise<void> {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise<void> {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise<void> {\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<any>,\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<O> {\n /** @internal */\n _controlledTransformStream: TransformStream<any, O>;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise<void>;\n /** @internal */\n _flushAlgorithm: () => Promise<void>;\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<O>);\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<O = any>(x: any): x is TransformStreamDefaultController<O> {\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<I, O>(stream: TransformStream<I, O>,\n controller: TransformStreamDefaultController<O>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>) {\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<I, O>(stream: TransformStream<I, O>,\n transformer: ValidatedTransformer<I, O>) {\n const controller: TransformStreamDefaultController<O> = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise<void> => {\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<void> = () => 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<any>) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue<O>(controller: TransformStreamDefaultController<O>, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController<O>;\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<any>, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform<I, O>(controller: TransformStreamDefaultController<O>,\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<O>(controller: TransformStreamDefaultController<O>) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController<O>;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm<I, O>(stream: TransformStream<I, O>, chunk: I): Promise<void> {\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<I, O>(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform<I, O>(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise<void> {\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<I, O>(stream: TransformStream<I, O>): Promise<void> {\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<O>);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise<void> {\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":";;;;;;;;;IAAA;IAEA,MAAM,cAAc,GAClB,OAAO,MAAM,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;QACjE,MAAM;QACN,WAAW,IAAI,UAAU,WAAW,GAAoB;;ICL5D;aAEgB,IAAI;QAClB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,SAAS,UAAU;QACjB,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;YAC/B,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACxC,OAAO,MAAM,CAAC;SACf;aAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACxC,OAAO,MAAM,CAAC;SACf;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,MAAM,OAAO,GAAG,UAAU,EAAE;;aCdnB,YAAY,CAAC,CAAM;QACjC,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,OAAO,CAAC,KAAK,UAAU,CAAC;IAC1E,CAAC;IAEM,MAAM,8BAA8B,GAUrC,IAAI;;ICbV,MAAM,eAAe,GAAG,OAAO,CAAC;IAChC,MAAM,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;IACnD,MAAM,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACrE,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;aAEnD,UAAU,CAAI,QAGrB;QACP,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;aAEe,mBAAmB,CAAI,KAAyB;QAC9D,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;aAEe,mBAAmB,CAAY,MAAW;QACxD,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;aAEe,kBAAkB,CAChC,OAAmB,EACnB,WAA4D,EAC5D,UAA8D;;;QAG9D,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAiC,CAAC;IACpG,CAAC;aAEe,WAAW,CACzB,OAAmB,EACnB,WAAoD,EACpD,UAAsD;QACtD,kBAAkB,CAChB,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EACpD,SAAS,EACT,8BAA8B,CAC/B,CAAC;IACJ,CAAC;aAEe,eAAe,CAAI,OAAmB,EAAE,WAAmD;QACzG,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACpC,CAAC;aAEe,aAAa,CAAC,OAAyB,EAAE,UAAqD;QAC5G,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC;aAEe,oBAAoB,CAClC,OAAmB,EACnB,kBAAmE,EACnE,gBAAoE;QACpE,OAAO,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;IAC3E,CAAC;aAEe,yBAAyB,CAAC,OAAyB;QACjE,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,8BAA8B,CAAC,CAAC;IACzE,CAAC;IAEM,MAAM,cAAc,GAA6B,CAAC;QACvD,MAAM,oBAAoB,GAAG,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;QAC/D,IAAI,OAAO,oBAAoB,KAAK,UAAU,EAAE;YAC9C,OAAO,oBAAoB,CAAC;SAC7B;QAED,MAAM,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACvD,OAAO,CAAC,EAAc,KAAK,kBAAkB,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC,GAAG,CAAC;aAEW,WAAW,CAAwB,CAA+B,EAAE,CAAI,EAAE,IAAO;QAC/F,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;YAC3B,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;SACnD;QACD,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACnD,CAAC;aAEe,WAAW,CAAwB,CAAgD,EAChD,CAAI,EACJ,IAAO;QAIxD,IAAI;YACF,OAAO,mBAAmB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;SACrD;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;SACnC;IACH;;ICzFA;IACA;IAEA,MAAM,oBAAoB,GAAG,KAAK,CAAC;IAOnC;;;;;;UAMa,WAAW;QAMtB;YAHQ,YAAO,GAAG,CAAC,CAAC;YACZ,UAAK,GAAG,CAAC,CAAC;;YAIhB,IAAI,CAAC,MAAM,GAAG;gBACZ,SAAS,EAAE,EAAE;gBACb,KAAK,EAAE,SAAS;aACjB,CAAC;YACF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;;;;YAIzB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;;YAEjB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;SAChB;QAED,IAAI,MAAM;YACR,OAAO,IAAI,CAAC,KAAK,CAAC;SACnB;;;;;QAMD,IAAI,CAAC,OAAU;YACb,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;YAC3B,IAAI,OAAO,GAAG,OAAO,CACe;YACpC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,oBAAoB,GAAG,CAAC,EAAE;gBACzD,OAAO,GAAG;oBACR,SAAS,EAAE,EAAE;oBACb,KAAK,EAAE,SAAS;iBACjB,CAAC;aACH;;;YAID,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,OAAO,KAAK,OAAO,EAAE;gBACvB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;gBACrB,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;aACzB;YACD,EAAE,IAAI,CAAC,KAAK,CAAC;SACd;;;QAID,KAAK;YAGH,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;YAC7B,IAAI,QAAQ,GAAG,QAAQ,CAAC;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;YAC/B,IAAI,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;YAE9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC;YACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEpC,IAAI,SAAS,KAAK,oBAAoB,EAAE;gBAGtC,QAAQ,GAAG,QAAQ,CAAC,KAAM,CAAC;gBAC3B,SAAS,GAAG,CAAC,CAAC;aACf;;YAGD,EAAE,IAAI,CAAC,KAAK,CAAC;YACb,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACzB,IAAI,QAAQ,KAAK,QAAQ,EAAE;gBACzB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;aACxB;;YAGD,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAU,CAAC;YAEjC,OAAO,OAAO,CAAC;SAChB;;;;;;;;;QAUD,OAAO,CAAC,QAA8B;YACpC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YACrB,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;YACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAC9B,OAAO,CAAC,KAAK,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;gBACxD,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,EAAE;oBAGzB,IAAI,GAAG,IAAI,CAAC,KAAM,CAAC;oBACnB,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC1B,CAAC,GAAG,CAAC,CAAC;oBACN,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;wBACzB,MAAM;qBACP;iBACF;gBACD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtB,EAAE,CAAC,CAAC;aACL;SACF;;;QAID,IAAI;YAGF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAC5B,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SAChC;;;aCrIa,qCAAqC,CAAI,MAA+B,EAAE,MAAyB;QACjH,MAAM,CAAC,oBAAoB,GAAG,MAAM,CAAC;QACrC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;QAExB,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;YAChC,oCAAoC,CAAC,MAAM,CAAC,CAAC;SAC9C;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;YACrC,8CAA8C,CAAC,MAAM,CAAC,CAAC;SACxD;aAAM;YAGL,8CAA8C,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;SAC7E;IACH,CAAC;IAED;IACA;aAEgB,iCAAiC,CAAC,MAAiC,EAAE,MAAW;QAC9F,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CACb;QAC7B,OAAO,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;aAEe,kCAAkC,CAAC,MAAiC;QAIlF,IAAI,MAAM,CAAC,oBAAoB,CAAC,MAAM,KAAK,UAAU,EAAE;YACrD,gCAAgC,CAC9B,MAAM,EACN,IAAI,SAAS,CAAC,kFAAkF,CAAC,CAAC,CAAC;SACtG;aAAM;YACL,yCAAyC,CACvC,MAAM,EACN,IAAI,SAAS,CAAC,kFAAkF,CAAC,CAAC,CAAC;SACtG;QAED,MAAM,CAAC,oBAAoB,CAAC,OAAO,GAAG,SAAS,CAAC;QAChD,MAAM,CAAC,oBAAoB,GAAG,SAAU,CAAC;IAC3C,CAAC;IAED;aAEgB,mBAAmB,CAAC,IAAY;QAC9C,OAAO,IAAI,SAAS,CAAC,SAAS,GAAG,IAAI,GAAG,mCAAmC,CAAC,CAAC;IAC/E,CAAC;IAED;aAEgB,oCAAoC,CAAC,MAAiC;QACpF,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM;YACjD,MAAM,CAAC,sBAAsB,GAAG,OAAO,CAAC;YACxC,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC;SACvC,CAAC,CAAC;IACL,CAAC;aAEe,8CAA8C,CAAC,MAAiC,EAAE,MAAW;QAC3G,oCAAoC,CAAC,MAAM,CAAC,CAAC;QAC7C,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;aAEe,8CAA8C,CAAC,MAAiC;QAC9F,oCAAoC,CAAC,MAAM,CAAC,CAAC;QAC7C,iCAAiC,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;aAEe,gCAAgC,CAAC,MAAiC,EAAE,MAAW;QAC7F,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;YAC9C,OAAO;SACR;QAED,yBAAyB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACjD,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;QAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAC3C,CAAC;aAEe,yCAAyC,CAAC,MAAiC,EAAE,MAAW;QAItG,8CAA8C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;aAEe,iCAAiC,CAAC,MAAiC;QACjF,IAAI,MAAM,CAAC,sBAAsB,KAAK,SAAS,EAAE;YAC/C,OAAO;SACR;QAED,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;QAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAC3C;;ICjGO,MAAM,UAAU,GAAGA,cAAM,CAAC,gBAAgB,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAGA,cAAM,CAAC,gBAAgB,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAGA,cAAM,CAAC,iBAAiB,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAGA,cAAM,CAAC,eAAe,CAAC;;ICHhD;IAEA;IACA,MAAM,cAAc,GAA2B,MAAM,CAAC,QAAQ,IAAI,UAAU,CAAC;QAC3E,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;;ICLD;IAEA;IACA,MAAM,SAAS,GAAsB,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;;ICFD;aACgB,YAAY,CAAC,CAAM;QACjC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,UAAU,CAAC;IAC1D,CAAC;aAEe,gBAAgB,CAAC,GAAY,EACZ,OAAe;QAC9C,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;YAC3C,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,oBAAoB,CAAC,CAAC;SACrD;IACH,CAAC;IAID;aACgB,cAAc,CAAC,CAAU,EAAE,OAAe;QACxD,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;YAC3B,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,qBAAqB,CAAC,CAAC;SACtD;IACH,CAAC;IAED;aACgB,QAAQ,CAAC,CAAM;QAC7B,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,OAAO,CAAC,KAAK,UAAU,CAAC;IAC1E,CAAC;aAEe,YAAY,CAAC,CAAU,EACV,OAAe;QAC1C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAChB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,oBAAoB,CAAC,CAAC;SACrD;IACH,CAAC;aAEe,sBAAsB,CAAgB,CAAgB,EAChB,QAAgB,EAChB,OAAe;QACnE,IAAI,CAAC,KAAK,SAAS,EAAE;YACnB,MAAM,IAAI,SAAS,CAAC,aAAa,QAAQ,oBAAoB,OAAO,IAAI,CAAC,CAAC;SAC3E;IACH,CAAC;aAEe,mBAAmB,CAAgB,CAAgB,EAChB,KAAa,EACb,OAAe;QAChE,IAAI,CAAC,KAAK,SAAS,EAAE;YACnB,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,oBAAoB,OAAO,IAAI,CAAC,CAAC;SAC9D;IACH,CAAC;IAED;aACgB,yBAAyB,CAAC,KAAc;QACtD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,SAAS,kBAAkB,CAAC,CAAS;QACnC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,SAAS,WAAW,CAAC,CAAS;QAC5B,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED;aACgB,uCAAuC,CAAC,KAAc,EAAE,OAAe;QACrF,MAAM,UAAU,GAAG,CAAC,CAAC;QACrB,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAE3C,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAE1B,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;YACtB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,yBAAyB,CAAC,CAAC;SAC1D;QAED,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAEnB,IAAI,CAAC,GAAG,UAAU,IAAI,CAAC,GAAG,UAAU,EAAE;YACpC,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,qCAAqC,UAAU,OAAO,UAAU,aAAa,CAAC,CAAC;SAC9G;QAED,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACjC,OAAO,CAAC,CAAC;SACV;;;;;QAOD,OAAO,CAAC,CAAC;IACX;;aC3FgB,oBAAoB,CAAC,CAAU,EAAE,OAAe;QAC9D,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,2BAA2B,CAAC,CAAC;SAC5D;IACH;;ICsBA;aAEgB,kCAAkC,CAAI,MAAsB;QAC1E,OAAO,IAAI,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED;aAEgB,4BAA4B,CAAI,MAAyB,EACzB,WAA2B;QAIxE,MAAM,CAAC,OAA2C,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtF,CAAC;aAEe,gCAAgC,CAAI,MAAyB,EAAE,KAAoB,EAAE,IAAa;QAChH,MAAM,MAAM,GAAG,MAAM,CAAC,OAAyC,CAEvB;QAExC,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,EAAG,CAAC;QAClD,IAAI,IAAI,EAAE;YACR,WAAW,CAAC,WAAW,EAAE,CAAC;SAC3B;aAAM;YACL,WAAW,CAAC,WAAW,CAAC,KAAM,CAAC,CAAC;SACjC;IACH,CAAC;aAEe,gCAAgC,CAAI,MAAyB;QAC3E,OAAQ,MAAM,CAAC,OAA0C,CAAC,aAAa,CAAC,MAAM,CAAC;IACjF,CAAC;aAEe,8BAA8B,CAAC,MAAsB;QACnE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,EAAE;YAC1C,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAYD;;;;;UAKa,2BAA2B;QAYtC,YAAY,MAAyB;YACnC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAC;YACjE,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;YAEhD,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE;gBAClC,MAAM,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;aACpG;YAED,qCAAqC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAEpD,IAAI,CAAC,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;SACxC;;;;;QAMD,IAAI,MAAM;YACR,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;;;;QAKD,MAAM,CAAC,SAAc,SAAS;YAC5B,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC;aACxE;YAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;gBAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC3D;YAED,OAAO,iCAAiC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SACxD;;;;;;QAOD,IAAI;YACF,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,MAAM,CAAC,CAAC,CAAC;aACtE;YAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;gBAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC;aAC9D;YAED,IAAI,cAAqE,CAAC;YAC1E,IAAI,aAAqC,CAAC;YAC1C,MAAM,OAAO,GAAG,UAAU,CAAqC,CAAC,OAAO,EAAE,MAAM;gBAC7E,cAAc,GAAG,OAAO,CAAC;gBACzB,aAAa,GAAG,MAAM,CAAC;aACxB,CAAC,CAAC;YACH,MAAM,WAAW,GAAmB;gBAClC,WAAW,EAAE,KAAK,IAAI,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBACnE,WAAW,EAAE,MAAM,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBACnE,WAAW,EAAE,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;aACnC,CAAC;YACF,+BAA+B,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACnD,OAAO,OAAO,CAAC;SAChB;;;;;;;;;;QAWD,WAAW;YACT,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,MAAM,gCAAgC,CAAC,aAAa,CAAC,CAAC;aACvD;YAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;gBAC3C,OAAO;aACR;YAED,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjC,MAAM,IAAI,SAAS,CAAC,qFAAqF,CAAC,CAAC;aAC5G;YAED,kCAAkC,CAAC,IAAI,CAAC,CAAC;SAC1C;KACF;IAED,MAAM,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,SAAS,EAAE;QAC7D,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC5B,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC1B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAC7B,CAAC,CAAC;IACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,2BAA2B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;YAC/E,KAAK,EAAE,6BAA6B;YACpC,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IAED;aAEgB,6BAA6B,CAAU,CAAM;QAC3D,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE;YAC7D,OAAO,KAAK,CAAC;SACd;QAED,OAAO,CAAC,YAAY,2BAA2B,CAAC;IAClD,CAAC;aAEe,+BAA+B,CAAI,MAAsC,EACtC,WAA2B;QAC5E,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;QAE7B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;YAC9B,WAAW,CAAC,WAAW,EAAE,CAAC;SAC3B;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;YACtC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SAC9C;aAAM;YAEL,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,WAA+B,CAAC,CAAC;SAC9E;IACH,CAAC;IAED;IAEA,SAAS,gCAAgC,CAAC,IAAY;QACpD,OAAO,IAAI,SAAS,CAClB,yCAAyC,IAAI,oDAAoD,CAAC,CAAC;IACvG;;ICvPA;IAEO,IAAI,sBAAsD,CAAC;IAElE,IAAI,OAAOA,cAAM,CAAC,aAAa,KAAK,QAAQ,EAAE;;;QAG5C,sBAAsB,GAAG;;;YAGvB,CAACA,cAAM,CAAC,aAAa,CAAC;gBACpB,OAAO,IAAI,CAAC;aACb;SACF,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,sBAAsB,EAAEA,cAAM,CAAC,aAAa,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;;;ICd7F;UAqCa,+BAA+B;QAM1C,YAAY,MAAsC,EAAE,aAAsB;YAHlE,oBAAe,GAA4D,SAAS,CAAC;YACrF,gBAAW,GAAG,KAAK,CAAC;YAG1B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;SACrC;QAED,IAAI;YACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;gBACzC,oBAAoB,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,SAAS,CAAC;gBAChE,SAAS,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,eAAe,CAAC;SAC7B;QAED,MAAM,CAAC,KAAU;YACf,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,eAAe;gBACzB,oBAAoB,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,WAAW,CAAC;gBACpE,WAAW,EAAE,CAAC;SACjB;QAEO,UAAU;YAChB,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aAC1D;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAC5B,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;gBAC7C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;aAC5D;YAED,IAAI,cAAqE,CAAC;YAC1E,IAAI,aAAqC,CAAC;YAC1C,MAAM,OAAO,GAAG,UAAU,CAAqC,CAAC,OAAO,EAAE,MAAM;gBAC7E,cAAc,GAAG,OAAO,CAAC;gBACzB,aAAa,GAAG,MAAM,CAAC;aACxB,CAAC,CAAC;YACH,MAAM,WAAW,GAAmB;gBAClC,WAAW,EAAE,KAAK;oBAChB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;;;oBAGjC,cAAc,CAAC,MAAM,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;iBACrE;gBACD,WAAW,EAAE;oBACX,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;oBACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBACxB,kCAAkC,CAAC,MAAM,CAAC,CAAC;oBAC3C,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;iBAClD;gBACD,WAAW,EAAE,MAAM;oBACjB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;oBACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBACxB,kCAAkC,CAAC,MAAM,CAAC,CAAC;oBAC3C,aAAa,CAAC,MAAM,CAAC,CAAC;iBACvB;aACF,CAAC;YACF,+BAA+B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACrD,OAAO,OAAO,CAAC;SAChB;QAEO,YAAY,CAAC,KAAU;YAC7B,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aAC/C;YACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAExB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAC5B,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;gBAC7C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAAC;aAG5B;YAE1C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxB,MAAM,MAAM,GAAG,iCAAiC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAChE,kCAAkC,CAAC,MAAM,CAAC,CAAC;gBAC3C,OAAO,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;aACpE;YAED,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;SACnD;KACF;IAWD,MAAM,oCAAoC,GAA6C;QACrF,IAAI;YACF,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,OAAO,mBAAmB,CAAC,sCAAsC,CAAC,MAAM,CAAC,CAAC,CAAC;aAC5E;YACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;SACvC;QAED,MAAM,CAAiD,KAAU;YAC/D,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,OAAO,mBAAmB,CAAC,sCAAsC,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC9E;YACD,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC9C;KACK,CAAC;IACT,IAAI,sBAAsB,KAAK,SAAS,EAAE;QACxC,MAAM,CAAC,cAAc,CAAC,oCAAoC,EAAE,sBAAsB,CAAC,CAAC;KACrF;IAED;aAEgB,kCAAkC,CAAI,MAAyB,EACzB,aAAsB;QAC1E,MAAM,MAAM,GAAG,kCAAkC,CAAI,MAAM,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,+BAA+B,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACxE,MAAM,QAAQ,GAA2C,MAAM,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;QAC7G,QAAQ,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACnC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,SAAS,6BAA6B,CAAU,CAAM;QACpD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,oBAAoB,CAAC,EAAE;YAClE,OAAO,KAAK,CAAC;SACd;QAED,IAAI;;YAEF,OAAQ,CAA8C,CAAC,kBAAkB;gBACvE,+BAA+B,CAAC;SACnC;QAAC,WAAM;YACN,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAED;IAEA,SAAS,sCAAsC,CAAC,IAAY;QAC1D,OAAO,IAAI,SAAS,CAAC,+BAA+B,IAAI,mDAAmD,CAAC,CAAC;IAC/G;;IC5LA;IAEA;IACA,MAAM,WAAW,GAAwB,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC;;QAElE,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;;aCNe,mBAAmB,CAAkB,QAAW;;;QAG9D,OAAO,QAAQ,CAAC,KAAK,EAAO,CAAC;IAC/B,CAAC;aAEe,kBAAkB,CAAC,IAAiB,EACjB,UAAkB,EAClB,GAAgB,EAChB,SAAiB,EACjB,CAAS;QAC1C,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;IAED;aACgB,mBAAmB,CAA4B,CAAI;QACjE,OAAO,CAAC,CAAC;IACX,CAAC;IAQD;IACA;aACgB,gBAAgB,CAAC,CAAkB;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;aAEe,gBAAgB,CAAC,MAAuB,EAAE,KAAa,EAAE,GAAW;;;QAGlF,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SACjC;QACD,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QACtC,kBAAkB,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC;IACf;;aCtCgB,mBAAmB,CAAC,CAAS;QAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YACzB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;YAClB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,GAAG,CAAC,EAAE;YACT,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC;IACd,CAAC;aAEe,iBAAiB,CAAC,CAAkB;QAClD,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QACrF,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC;;aCRgB,YAAY,CAAI,SAAuC;QAIrE,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,EAAG,CAAC;QACvC,SAAS,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC;QACvC,IAAI,SAAS,CAAC,eAAe,GAAG,CAAC,EAAE;YACjC,SAAS,CAAC,eAAe,GAAG,CAAC,CAAC;SAC/B;QAED,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;aAEe,oBAAoB,CAAI,SAAuC,EAAE,KAAQ,EAAE,IAAY;QAGrG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,QAAQ,EAAE;YACnD,MAAM,IAAI,UAAU,CAAC,sDAAsD,CAAC,CAAC;SAC9E;QAED,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,SAAS,CAAC,eAAe,IAAI,IAAI,CAAC;IACpC,CAAC;aAEe,cAAc,CAAI,SAAuC;QAIvE,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;aAEe,UAAU,CAAI,SAA4B;QAGxD,SAAS,CAAC,MAAM,GAAG,IAAI,WAAW,EAAK,CAAC;QACxC,SAAS,CAAC,eAAe,GAAG,CAAC,CAAC;IAChC;;ICdA;;;;;UAKa,yBAAyB;QAMpC;YACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;SAC5C;;;;QAKD,IAAI,IAAI;YACN,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,8BAA8B,CAAC,MAAM,CAAC,CAAC;aAC9C;YAED,OAAO,IAAI,CAAC,KAAK,CAAC;SACnB;QAUD,OAAO,CAAC,YAAgC;YACtC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,8BAA8B,CAAC,SAAS,CAAC,CAAC;aACjD;YACD,sBAAsB,CAAC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;YACnD,YAAY,GAAG,uCAAuC,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;YAExF,IAAI,IAAI,CAAC,uCAAuC,KAAK,SAAS,EAAE;gBAC9D,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;aAC/D;YAED,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAM,CAAC,MAAM,CAAC,EAAE,CAKA;YAE1C,mCAAmC,CAAC,IAAI,CAAC,uCAAuC,EAAE,YAAY,CAAC,CAAC;SACjG;QAUD,kBAAkB,CAAC,IAAiC;YAClD,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,8BAA8B,CAAC,oBAAoB,CAAC,CAAC;aAC5D;YACD,sBAAsB,CAAC,IAAI,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC;YAEtD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBAC7B,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;aACrE;YAED,IAAI,IAAI,CAAC,uCAAuC,KAAK,SAAS,EAAE;gBAC9D,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;aAC/D;YAED,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAElC;YAED,8CAA8C,CAAC,IAAI,CAAC,uCAAuC,EAAE,IAAI,CAAC,CAAC;SACpG;KACF;IAED,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,SAAS,EAAE;QAC3D,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC7B,kBAAkB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACxC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAC3B,CAAC,CAAC;IACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,yBAAyB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;YAC7E,KAAK,EAAE,2BAA2B;YAClC,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IAyCD;;;;;UAKa,4BAA4B;QA4BvC;YACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;SAC5C;;;;QAKD,IAAI,WAAW;YACb,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;gBACzC,MAAM,uCAAuC,CAAC,aAAa,CAAC,CAAC;aAC9D;YAED,OAAO,0CAA0C,CAAC,IAAI,CAAC,CAAC;SACzD;;;;;QAMD,IAAI,WAAW;YACb,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;gBACzC,MAAM,uCAAuC,CAAC,aAAa,CAAC,CAAC;aAC9D;YAED,OAAO,0CAA0C,CAAC,IAAI,CAAC,CAAC;SACzD;;;;;QAMD,KAAK;YACH,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;gBACzC,MAAM,uCAAuC,CAAC,OAAO,CAAC,CAAC;aACxD;YAED,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,MAAM,IAAI,SAAS,CAAC,4DAA4D,CAAC,CAAC;aACnF;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC;YACxD,IAAI,KAAK,KAAK,UAAU,EAAE;gBACxB,MAAM,IAAI,SAAS,CAAC,kBAAkB,KAAK,2DAA2D,CAAC,CAAC;aACzG;YAED,iCAAiC,CAAC,IAAI,CAAC,CAAC;SACzC;QAOD,OAAO,CAAC,KAAkC;YACxC,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;gBACzC,MAAM,uCAAuC,CAAC,SAAS,CAAC,CAAC;aAC1D;YAED,sBAAsB,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC9B,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;aAC3D;YACD,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,EAAE;gBAC1B,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;aAC5D;YACD,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE;gBACjC,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;aACrE;YAED,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;aACrD;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC;YACxD,IAAI,KAAK,KAAK,UAAU,EAAE;gBACxB,MAAM,IAAI,SAAS,CAAC,kBAAkB,KAAK,gEAAgE,CAAC,CAAC;aAC9G;YAED,mCAAmC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAClD;;;;QAKD,KAAK,CAAC,IAAS,SAAS;YACtB,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;gBACzC,MAAM,uCAAuC,CAAC,OAAO,CAAC,CAAC;aACxD;YAED,iCAAiC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;SAC5C;;QAGD,CAAC,WAAW,CAAC,CAAC,MAAW;YACvB,iDAAiD,CAAC,IAAI,CAAC,CAAC;YAExD,UAAU,CAAC,IAAI,CAAC,CAAC;YAEjB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC7C,2CAA2C,CAAC,IAAI,CAAC,CAAC;YAClD,OAAO,MAAM,CAAC;SACf;;QAGD,CAAC,SAAS,CAAC,CAAC,WAAoC;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,6BAA6B,CACF;YAE/C,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE;gBAG5B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAG,CAAC;gBACnC,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,UAAU,CAAC;gBAEzC,4CAA4C,CAAC,IAAI,CAAC,CAAC;gBAEnD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBAE9E,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC9B,OAAO;aACR;YAED,MAAM,qBAAqB,GAAG,IAAI,CAAC,sBAAsB,CAAC;YAC1D,IAAI,qBAAqB,KAAK,SAAS,EAAE;gBACvC,IAAI,MAAmB,CAAC;gBACxB,IAAI;oBACF,MAAM,GAAG,IAAI,WAAW,CAAC,qBAAqB,CAAC,CAAC;iBACjD;gBAAC,OAAO,OAAO,EAAE;oBAChB,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBACjC,OAAO;iBACR;gBAED,MAAM,kBAAkB,GAA8B;oBACpD,MAAM;oBACN,gBAAgB,EAAE,qBAAqB;oBACvC,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,qBAAqB;oBACjC,WAAW,EAAE,CAAC;oBACd,WAAW,EAAE,CAAC;oBACd,eAAe,EAAE,UAAU;oBAC3B,UAAU,EAAE,SAAS;iBACtB,CAAC;gBAEF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aACjD;YAED,4BAA4B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAClD,4CAA4C,CAAC,IAAI,CAAC,CAAC;SACpD;KACF;IAED,MAAM,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,SAAS,EAAE;QAC9D,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC3B,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC7B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC3B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACjC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAClC,CAAC,CAAC;IACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,4BAA4B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;YAChF,KAAK,EAAE,8BAA8B;YACrC,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IAED;aAEgB,8BAA8B,CAAC,CAAM;QACnD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,+BAA+B,CAAC,EAAE;YAC7E,OAAO,KAAK,CAAC;SACd;QAED,OAAO,CAAC,YAAY,4BAA4B,CAAC;IACnD,CAAC;IAED,SAAS,2BAA2B,CAAC,CAAM;QACzC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,yCAAyC,CAAC,EAAE;YACvF,OAAO,KAAK,CAAC;SACd;QAED,OAAO,CAAC,YAAY,yBAAyB,CAAC;IAChD,CAAC;IAED,SAAS,4CAA4C,CAAC,UAAwC;QAC5F,MAAM,UAAU,GAAG,0CAA0C,CAAC,UAAU,CAAC,CAAC;QAC1E,IAAI,CAAC,UAAU,EAAE;YACf,OAAO;SACR;QAED,IAAI,UAAU,CAAC,QAAQ,EAAE;YACvB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;YAC7B,OAAO;SAGsB;QAE/B,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;;QAG3B,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;QAChD,WAAW,CACT,WAAW,EACX;YACE,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;YAE5B,IAAI,UAAU,CAAC,UAAU,EAAE;gBACzB,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;gBAC9B,4CAA4C,CAAC,UAAU,CAAC,CAAC;aAC1D;SACF,EACD,CAAC;YACC,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;SAClD,CACF,CAAC;IACJ,CAAC;IAED,SAAS,iDAAiD,CAAC,UAAwC;QACjG,iDAAiD,CAAC,UAAU,CAAC,CAAC;QAC9D,UAAU,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;IACnD,CAAC;IAED,SAAS,oDAAoD,CAC3D,MAA0B,EAC1B,kBAAyC;QAIzC,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;YAE9B,IAAI,GAAG,IAAI,CAAC;SACb;QAED,MAAM,UAAU,GAAG,qDAAqD,CAAI,kBAAkB,CAAC,CAAC;QAChG,IAAI,kBAAkB,CAAC,UAAU,KAAK,SAAS,EAAE;YAC/C,gCAAgC,CAAC,MAAM,EAAE,UAAmC,EAAE,IAAI,CAAC,CAAC;SACrF;aAAM;YAEL,oCAAoC,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;SAChE;IACH,CAAC;IAED,SAAS,qDAAqD,CAC5D,kBAAyC;QAEzC,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC;QACnD,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAGV;QAExC,OAAO,IAAI,kBAAkB,CAAC,eAAe,CAC3C,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,UAAU,EAAE,WAAW,GAAG,WAAW,CAAM,CAAC;IAC9F,CAAC;IAED,SAAS,+CAA+C,CAAC,UAAwC,EACxC,MAAuB,EACvB,UAAkB,EAClB,UAAkB;QACzE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;QAC3D,UAAU,CAAC,eAAe,IAAI,UAAU,CAAC;IAC3C,CAAC;IAED,SAAS,2DAA2D,CAAC,UAAwC,EACxC,kBAAsC;QACzG,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC;QAEnD,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,WAAW,GAAG,kBAAkB,CAAC,WAAW,GAAG,WAAW,CAAC;QAE1G,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,EAC1B,kBAAkB,CAAC,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAChG,MAAM,cAAc,GAAG,kBAAkB,CAAC,WAAW,GAAG,cAAc,CAAC;QACvE,MAAM,eAAe,GAAG,cAAc,GAAG,cAAc,GAAG,WAAW,CAAC;QAEtE,IAAI,yBAAyB,GAAG,cAAc,CAAC;QAC/C,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,eAAe,GAAG,mBAAmB,EAAE;YACzC,yBAAyB,GAAG,eAAe,GAAG,kBAAkB,CAAC,WAAW,CAAC;YAC7E,KAAK,GAAG,IAAI,CAAC;SACd;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;QAEhC,OAAO,yBAAyB,GAAG,CAAC,EAAE;YACpC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAEjC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;YAEhF,MAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC;YACjF,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAElH,IAAI,WAAW,CAAC,UAAU,KAAK,WAAW,EAAE;gBAC1C,KAAK,CAAC,KAAK,EAAE,CAAC;aACf;iBAAM;gBACL,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC;gBACtC,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC;aACvC;YACD,UAAU,CAAC,eAAe,IAAI,WAAW,CAAC;YAE1C,sDAAsD,CAAC,UAAU,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;YAEpG,yBAAyB,IAAI,WAAW,CAAC;SAC1C;QAQD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,sDAAsD,CAAC,UAAwC,EACxC,IAAY,EACZ,kBAAsC;QAGpG,kBAAkB,CAAC,WAAW,IAAI,IAAI,CAAC;IACzC,CAAC;IAED,SAAS,4CAA4C,CAAC,UAAwC;QAG5F,IAAI,UAAU,CAAC,eAAe,KAAK,CAAC,IAAI,UAAU,CAAC,eAAe,EAAE;YAClE,2CAA2C,CAAC,UAAU,CAAC,CAAC;YACxD,mBAAmB,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;SAC/D;aAAM;YACL,4CAA4C,CAAC,UAAU,CAAC,CAAC;SAC1D;IACH,CAAC;IAED,SAAS,iDAAiD,CAAC,UAAwC;QACjG,IAAI,UAAU,CAAC,YAAY,KAAK,IAAI,EAAE;YACpC,OAAO;SACR;QAED,UAAU,CAAC,YAAY,CAAC,uCAAuC,GAAG,SAAU,CAAC;QAC7E,UAAU,CAAC,YAAY,CAAC,KAAK,GAAG,IAAK,CAAC;QACtC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;IACjC,CAAC;IAED,SAAS,gEAAgE,CAAC,UAAwC;QAGhH,OAAO,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9C,IAAI,UAAU,CAAC,eAAe,KAAK,CAAC,EAAE;gBACpC,OAAO;aACR;YAED,MAAM,kBAAkB,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;YAE/D,IAAI,2DAA2D,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE;gBAC/F,gDAAgD,CAAC,UAAU,CAAC,CAAC;gBAE7D,oDAAoD,CAClD,UAAU,CAAC,6BAA6B,EACxC,kBAAkB,CACnB,CAAC;aACH;SACF;IACH,CAAC;aAEe,oCAAoC,CAClD,UAAwC,EACxC,IAAO,EACP,eAAmC;QAEnC,MAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;QAExD,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE;YACjC,WAAW,GAAI,IAAI,CAAC,WAA6C,CAAC,iBAAiB,CAAC;SACrF;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAA4C,CAAC;;QAG/D,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;;;;QAMhD,MAAM,kBAAkB,GAA8B;YACpD,MAAM;YACN,gBAAgB,EAAE,MAAM,CAAC,UAAU;YACnC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,CAAC;YACd,WAAW;YACX,eAAe,EAAE,IAAI;YACrB,UAAU,EAAE,MAAM;SACnB,CAAC;QAEF,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3C,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;;;;YAMtD,gCAAgC,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YAC1D,OAAO;SACR;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;YAC9B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACxF,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACvC,OAAO;SACR;QAED,IAAI,UAAU,CAAC,eAAe,GAAG,CAAC,EAAE;YAClC,IAAI,2DAA2D,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE;gBAC/F,MAAM,UAAU,GAAG,qDAAqD,CAAI,kBAAkB,CAAC,CAAC;gBAEhG,4CAA4C,CAAC,UAAU,CAAC,CAAC;gBAEzD,eAAe,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBACxC,OAAO;aACR;YAED,IAAI,UAAU,CAAC,eAAe,EAAE;gBAC9B,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC,yDAAyD,CAAC,CAAC;gBACnF,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;gBAEjD,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC/B,OAAO;aACR;SACF;QAED,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEtD,gCAAgC,CAAI,MAAM,EAAE,eAAe,CAAC,CAAC;QAC7D,4CAA4C,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED,SAAS,gDAAgD,CAAC,UAAwC,EACxC,eAAmC;QAG3F,MAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;QACxD,IAAI,2BAA2B,CAAC,MAAM,CAAC,EAAE;YACvC,OAAO,oCAAoC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBACvD,MAAM,kBAAkB,GAAG,gDAAgD,CAAC,UAAU,CAAC,CAAC;gBACxF,oDAAoD,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;aAClF;SACF;IACH,CAAC;IAED,SAAS,kDAAkD,CAAC,UAAwC,EACxC,YAAoB,EACpB,kBAAsC;QAGhG,sDAAsD,CAAC,UAAU,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;QAErG,IAAI,kBAAkB,CAAC,WAAW,GAAG,kBAAkB,CAAC,WAAW,EAAE;YACnE,OAAO;SACR;QAED,gDAAgD,CAAC,UAAU,CAAC,CAAC;QAE7D,MAAM,aAAa,GAAG,kBAAkB,CAAC,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC;QACtF,IAAI,aAAa,GAAG,CAAC,EAAE;YACrB,MAAM,GAAG,GAAG,kBAAkB,CAAC,UAAU,GAAG,kBAAkB,CAAC,WAAW,CAAC;YAC3E,MAAM,SAAS,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,aAAa,EAAE,GAAG,CAAC,CAAC;YACxF,+CAA+C,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;SACjG;QAED,kBAAkB,CAAC,WAAW,IAAI,aAAa,CAAC;QAChD,oDAAoD,CAAC,UAAU,CAAC,6BAA6B,EAAE,kBAAkB,CAAC,CAAC;QAEnH,gEAAgE,CAAC,UAAU,CAAC,CAAC;IAC/E,CAAC;IAED,SAAS,2CAA2C,CAAC,UAAwC,EAAE,YAAoB;QACjH,MAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CACJ;QAEvD,iDAAiD,CAAC,UAAU,CAAC,CAAC;QAE9D,MAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;QAC9D,IAAI,KAAK,KAAK,QAAQ,EAAE;YAEtB,gDAAgD,CAAC,UAA2B,CAAC,CAAC;SAC/E;aAAM;YAGL,kDAAkD,CAAC,UAAU,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;SAC/F;QAED,4CAA4C,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED,SAAS,gDAAgD,CACvD,UAAwC;QAGxC,MAAM,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,EAAG,CAAC;QACzD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,SAAS,0CAA0C,CAAC,UAAwC;QAC1F,MAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;QAExD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;YAChC,OAAO,KAAK,CAAC;SACd;QAED,IAAI,UAAU,CAAC,eAAe,EAAE;YAC9B,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;YACxB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,8BAA8B,CAAC,MAAM,CAAC,IAAI,gCAAgC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAC1F,OAAO,IAAI,CAAC;SACb;QAED,IAAI,2BAA2B,CAAC,MAAM,CAAC,IAAI,oCAAoC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAC3F,OAAO,IAAI,CAAC;SACb;QAED,MAAM,WAAW,GAAG,0CAA0C,CAAC,UAAU,CAAC,CAC7C;QAC7B,IAAI,WAAY,GAAG,CAAC,EAAE;YACpB,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,2CAA2C,CAAC,UAAwC;QAC3F,UAAU,CAAC,cAAc,GAAG,SAAU,CAAC;QACvC,UAAU,CAAC,gBAAgB,GAAG,SAAU,CAAC;IAC3C,CAAC;IAED;aAEgB,iCAAiC,CAAC,UAAwC;QACxF,MAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;QAExD,IAAI,UAAU,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;YAC9D,OAAO;SACR;QAED,IAAI,UAAU,CAAC,eAAe,GAAG,CAAC,EAAE;YAClC,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC;YAElC,OAAO;SACR;QAED,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3C,MAAM,oBAAoB,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;YACjE,IAAI,oBAAoB,CAAC,WAAW,GAAG,CAAC,EAAE;gBACxC,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC,yDAAyD,CAAC,CAAC;gBACnF,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;gBAEjD,MAAM,CAAC,CAAC;aACT;SACF;QAED,2CAA2C,CAAC,UAAU,CAAC,CAAC;QACxD,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;aAEe,mCAAmC,CAAC,UAAwC,EAAE,KAAsB;QAClH,MAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;QAExD,IAAI,UAAU,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;YAC9D,OAAO;SACR;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACpC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QAIpC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAEtD,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3C,MAAM,oBAAoB,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;YACjE,IAAI,gBAAgB,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAIlD;YACD,oBAAoB,CAAC,MAAM,GAAG,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;SAChF;QAED,iDAAiD,CAAC,UAAU,CAAC,CAAC;QAE9D,IAAI,8BAA8B,CAAC,MAAM,CAAC,EAAE;YAC1C,IAAI,gCAAgC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAElD,+CAA+C,CAAC,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;aACxG;iBAAM;gBAEL,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;oBAE3C,gDAAgD,CAAC,UAAU,CAAC,CAAC;iBAC9D;gBACD,MAAM,eAAe,GAAG,IAAI,UAAU,CAAC,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;gBAClF,gCAAgC,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;aAClE;SACF;aAAM,IAAI,2BAA2B,CAAC,MAAM,CAAC,EAAE;;YAE9C,+CAA+C,CAAC,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YACvG,gEAAgE,CAAC,UAAU,CAAC,CAAC;SAC9E;aAAM;YAEL,+CAA+C,CAAC,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;SACxG;QAED,4CAA4C,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;aAEe,iCAAiC,CAAC,UAAwC,EAAE,CAAM;QAChG,MAAM,MAAM,GAAG,UAAU,CAAC,6BAA6B,CAAC;QAExD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;YAChC,OAAO;SACR;QAED,iDAAiD,CAAC,UAAU,CAAC,CAAC;QAE9D,UAAU,CAAC,UAAU,CAAC,CAAC;QACvB,2CAA2C,CAAC,UAAU,CAAC,CAAC;QACxD,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACjC,CAAC;aAEe,0CAA0C,CACxD,UAAwC;QAExC,IAAI,UAAU,CAAC,YAAY,KAAK,IAAI,IAAI,UAAU,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/E,MAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;YAC5D,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;YAEtF,MAAM,WAAW,GAA8B,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;YAClG,8BAA8B,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YAC9D,UAAU,CAAC,YAAY,GAAG,WAAW,CAAC;SACvC;QACD,OAAO,UAAU,CAAC,YAAY,CAAC;IACjC,CAAC;IAED,SAAS,0CAA0C,CAAC,UAAwC;QAC1F,MAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;QAE9D,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,OAAO,IAAI,CAAC;SACb;QACD,IAAI,KAAK,KAAK,QAAQ,EAAE;YACtB,OAAO,CAAC,CAAC;SACV;QAED,OAAO,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,eAAe,CAAC;IAC9D,CAAC;aAEe,mCAAmC,CAAC,UAAwC,EAAE,YAAoB;QAGhH,MAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;QAE9D,IAAI,KAAK,KAAK,QAAQ,EAAE;YACtB,IAAI,YAAY,KAAK,CAAC,EAAE;gBACtB,MAAM,IAAI,SAAS,CAAC,kEAAkE,CAAC,CAAC;aACzF;SACF;aAAM;YAEL,IAAI,YAAY,KAAK,CAAC,EAAE;gBACtB,MAAM,IAAI,SAAS,CAAC,iFAAiF,CAAC,CAAC;aACxG;YACD,IAAI,eAAe,CAAC,WAAW,GAAG,YAAY,GAAG,eAAe,CAAC,UAAU,EAAE;gBAC3E,MAAM,IAAI,UAAU,CAAC,2BAA2B,CAAC,CAAC;aACnD;SACF;QAED,eAAe,CAAC,MAAM,GAAG,mBAAmB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAErE,2CAA2C,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACxE,CAAC;aAEe,8CAA8C,CAAC,UAAwC,EACxC,IAAqB;QAIlF,MAAM,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC;QAE9D,IAAI,KAAK,KAAK,QAAQ,EAAE;YACtB,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;gBACzB,MAAM,IAAI,SAAS,CAAC,mFAAmF,CAAC,CAAC;aAC1G;SACF;aAAM;YAEL,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;gBACzB,MAAM,IAAI,SAAS,CACjB,kGAAkG,CACnG,CAAC;aACH;SACF;QAED,IAAI,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,WAAW,KAAK,IAAI,CAAC,UAAU,EAAE;YAChF,MAAM,IAAI,UAAU,CAAC,yDAAyD,CAAC,CAAC;SACjF;QACD,IAAI,eAAe,CAAC,gBAAgB,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YAC/D,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;SACpF;QACD,IAAI,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE;YAC9E,MAAM,IAAI,UAAU,CAAC,yDAAyD,CAAC,CAAC;SACjF;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;QACvC,eAAe,CAAC,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,2CAA2C,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC1E,CAAC;aAEe,iCAAiC,CAAC,MAA0B,EAC1B,UAAwC,EACxC,cAA8C,EAC9C,aAAkC,EAClC,eAA+C,EAC/C,aAAqB,EACrB,qBAAyC;QAOzF,UAAU,CAAC,6BAA6B,GAAG,MAAM,CAAC;QAElD,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;QAC9B,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;QAE5B,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC;;QAG/B,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;QAC5D,UAAU,CAAC,UAAU,CAAC,CAAC;QAEvB,UAAU,CAAC,eAAe,GAAG,KAAK,CAAC;QACnC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;QAE5B,UAAU,CAAC,YAAY,GAAG,aAAa,CAAC;QAExC,UAAU,CAAC,cAAc,GAAG,aAAa,CAAC;QAC1C,UAAU,CAAC,gBAAgB,GAAG,eAAe,CAAC;QAE9C,UAAU,CAAC,sBAAsB,GAAG,qBAAqB,CAAC;QAE1D,UAAU,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;QAEjD,MAAM,CAAC,yBAAyB,GAAG,UAAU,CAAC;QAE9C,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;QACrC,WAAW,CACT,mBAAmB,CAAC,WAAW,CAAC,EAChC;YACE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAGK;YAE/B,4CAA4C,CAAC,UAAU,CAAC,CAAC;SAC1D,EACD,CAAC;YACC,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;SAClD,CACF,CAAC;IACJ,CAAC;aAEe,qDAAqD,CACnE,MAA0B,EAC1B,oBAAmD,EACnD,aAAqB;QAErB,MAAM,UAAU,GAAiC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;QAEvG,IAAI,cAAc,GAAmC,MAAM,SAAS,CAAC;QACrE,IAAI,aAAa,GAAwB,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC9E,IAAI,eAAe,GAAmC,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAE3F,IAAI,oBAAoB,CAAC,KAAK,KAAK,SAAS,EAAE;YAC5C,cAAc,GAAG,MAAM,oBAAoB,CAAC,KAAM,CAAC,UAAU,CAAC,CAAC;SAChE;QACD,IAAI,oBAAoB,CAAC,IAAI,KAAK,SAAS,EAAE;YAC3C,aAAa,GAAG,MAAM,oBAAoB,CAAC,IAAK,CAAC,UAAU,CAAC,CAAC;SAC9D;QACD,IAAI,oBAAoB,CAAC,MAAM,KAAK,SAAS,EAAE;YAC7C,eAAe,GAAG,MAAM,IAAI,oBAAoB,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC;SAClE;QAED,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,qBAAqB,CAAC;QACzE,IAAI,qBAAqB,KAAK,CAAC,EAAE;YAC/B,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;SACrE;QAED,iCAAiC,CAC/B,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,CACzG,CAAC;IACJ,CAAC;IAED,SAAS,8BAA8B,CAAC,OAAkC,EAClC,UAAwC,EACxC,IAAqB;QAK3D,OAAO,CAAC,uCAAuC,GAAG,UAAU,CAAC;QAC7D,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IACvB,CAAC;IAED;IAEA,SAAS,8BAA8B,CAAC,IAAY;QAClD,OAAO,IAAI,SAAS,CAClB,uCAAuC,IAAI,kDAAkD,CAAC,CAAC;IACnG,CAAC;IAED;IAEA,SAAS,uCAAuC,CAAC,IAAY;QAC3D,OAAO,IAAI,SAAS,CAClB,0CAA0C,IAAI,qDAAqD,CAAC,CAAC;IACzG;;ICv/BA;aAEgB,+BAA+B,CAAC,MAA0B;QACxE,OAAO,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED;aAEgB,gCAAgC,CAA4B,MAA0B,EAC1B,eAAmC;QAI5G,MAAM,CAAC,OAAqC,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACxF,CAAC;aAEe,oCAAoC,CAAC,MAA0B,EAC1B,KAAsB,EACtB,IAAa;QAChE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAmC,CAEb;QAE5C,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAG,CAAC;QAC1D,IAAI,IAAI,EAAE;YACR,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACpC;aAAM;YACL,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACpC;IACH,CAAC;aAEe,oCAAoC,CAAC,MAA0B;QAC7E,OAAQ,MAAM,CAAC,OAAoC,CAAC,iBAAiB,CAAC,MAAM,CAAC;IAC/E,CAAC;aAEe,2BAA2B,CAAC,MAA0B;QACpE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,EAAE;YACvC,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAYD;;;;;UAKa,wBAAwB;QAYnC,YAAY,MAA0B;YACpC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,0BAA0B,CAAC,CAAC;YAC9D,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;YAEhD,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE;gBAClC,MAAM,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;aACpG;YAED,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE;gBACrE,MAAM,IAAI,SAAS,CAAC,uFAAuF;oBACzG,QAAQ,CAAC,CAAC;aACb;YAED,qCAAqC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAEpD,IAAI,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;SAC5C;;;;;QAMD,IAAI,MAAM;YACR,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;;;;QAKD,MAAM,CAAC,SAAc,SAAS;YAC5B,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;gBACrC,OAAO,mBAAmB,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC,CAAC;aACrE;YAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;gBAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC3D;YAED,OAAO,iCAAiC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SACxD;;;;;;QAOD,IAAI,CAA4B,IAAO;YACrC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;gBACrC,OAAO,mBAAmB,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC;aACnE;YAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBAC7B,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC,CAAC;aAChF;YACD,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;gBACzB,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC,CAAC;aACjF;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE;gBAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC,CAAC;aAC1F;YACD,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAElC;YAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;gBAC3C,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC;aAC9D;YAED,IAAI,cAAkE,CAAC;YACvE,IAAI,aAAqC,CAAC;YAC1C,MAAM,OAAO,GAAG,UAAU,CAAkC,CAAC,OAAO,EAAE,MAAM;gBAC1E,cAAc,GAAG,OAAO,CAAC;gBACzB,aAAa,GAAG,MAAM,CAAC;aACxB,CAAC,CAAC;YACH,MAAM,eAAe,GAAuB;gBAC1C,WAAW,EAAE,KAAK,IAAI,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBACnE,WAAW,EAAE,KAAK,IAAI,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBAClE,WAAW,EAAE,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;aACnC,CAAC;YACF,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;YAC1D,OAAO,OAAO,CAAC;SAChB;;;;;;;;;;QAWD,WAAW;YACT,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE;gBACrC,MAAM,6BAA6B,CAAC,aAAa,CAAC,CAAC;aACpD;YAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;gBAC3C,OAAO;aACR;YAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrC,MAAM,IAAI,SAAS,CAAC,qFAAqF,CAAC,CAAC;aAC5G;YAED,kCAAkC,CAAC,IAAI,CAAC,CAAC;SAC1C;KACF;IAED,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,SAAS,EAAE;QAC1D,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC5B,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC1B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAC7B,CAAC,CAAC;IACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,wBAAwB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;YAC5E,KAAK,EAAE,0BAA0B;YACjC,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IAED;aAEgB,0BAA0B,CAAC,CAAM;QAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,mBAAmB,CAAC,EAAE;YACjE,OAAO,KAAK,CAAC;SACd;QAED,OAAO,CAAC,YAAY,wBAAwB,CAAC;IAC/C,CAAC;aAEe,4BAA4B,CAC1C,MAAgC,EAChC,IAAO,EACP,eAAmC;QAEnC,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;QAE7B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;YAC/B,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SAClD;aAAM;YACL,oCAAoC,CAClC,MAAM,CAAC,yBAAyD,EAChE,IAAI,EACJ,eAAe,CAChB,CAAC;SACH;IACH,CAAC;IAED;IAEA,SAAS,6BAA6B,CAAC,IAAY;QACjD,OAAO,IAAI,SAAS,CAClB,sCAAsC,IAAI,iDAAiD,CAAC,CAAC;IACjG;;aCjRgB,oBAAoB,CAAC,QAAyB,EAAE,UAAkB;QAChF,MAAM,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAC;QAEnC,IAAI,aAAa,KAAK,SAAS,EAAE;YAC/B,OAAO,UAAU,CAAC;SACnB;QAED,IAAI,WAAW,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE;YACnD,MAAM,IAAI,UAAU,CAAC,uBAAuB,CAAC,CAAC;SAC/C;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;aAEe,oBAAoB,CAAI,QAA4B;QAClE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QAE1B,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,MAAM,CAAC,CAAC;SAChB;QAED,OAAO,IAAI,CAAC;IACd;;aCtBgB,sBAAsB,CAAI,IAA2C,EAC3C,OAAe;QACvD,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,aAAa,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC;QACxB,OAAO;YACL,aAAa,EAAE,aAAa,KAAK,SAAS,GAAG,SAAS,GAAG,yBAAyB,CAAC,aAAa,CAAC;YACjG,IAAI,EAAE,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,0BAA0B,CAAC,IAAI,EAAE,GAAG,OAAO,yBAAyB,CAAC;SAC7G,CAAC;IACJ,CAAC;IAED,SAAS,0BAA0B,CAAI,EAAkC,EAClC,OAAe;QACpD,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,KAAK,IAAI,yBAAyB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD;;aCNgB,qBAAqB,CAAI,QAAkC,EAClC,OAAe;QACtD,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;QAC9B,MAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;QAC9B,MAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;QAC9B,MAAM,IAAI,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;QAC5B,MAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;QAC9B,OAAO;YACL,KAAK,EAAE,KAAK,KAAK,SAAS;gBACxB,SAAS;gBACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAE,GAAG,OAAO,0BAA0B,CAAC;YAC5F,KAAK,EAAE,KAAK,KAAK,SAAS;gBACxB,SAAS;gBACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAE,GAAG,OAAO,0BAA0B,CAAC;YAC5F,KAAK,EAAE,KAAK,KAAK,SAAS;gBACxB,SAAS;gBACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAE,GAAG,OAAO,0BAA0B,CAAC;YAC5F,KAAK,EAAE,KAAK,KAAK,SAAS;gBACxB,SAAS;gBACT,kCAAkC,CAAC,KAAK,EAAE,QAAS,EAAE,GAAG,OAAO,0BAA0B,CAAC;YAC5F,IAAI;SACL,CAAC;IACJ,CAAC;IAED,SAAS,kCAAkC,CACzC,EAA+B,EAC/B,QAAwB,EACxB,OAAe;QAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,MAAW,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS,kCAAkC,CACzC,EAA+B,EAC/B,QAAwB,EACxB,OAAe;QAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,MAAM,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS,kCAAkC,CACzC,EAA+B,EAC/B,QAAwB,EACxB,OAAe;QAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,UAA2C,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,SAAS,kCAAkC,CACzC,EAAkC,EAClC,QAA2B,EAC3B,OAAe;QAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,KAAQ,EAAE,UAA2C,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IACnH;;aCrEgB,oBAAoB,CAAC,CAAU,EAAE,OAAe;QAC9D,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,2BAA2B,CAAC,CAAC;SAC5D;IACH;;aCsBgB,aAAa,CAAC,KAAc;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;YAC/C,OAAO,KAAK,CAAC;SACd;QACD,IAAI;YACF,OAAO,OAAQ,KAAqB,CAAC,OAAO,KAAK,SAAS,CAAC;SAC5D;QAAC,WAAM;;YAEN,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAsBD,MAAM,uBAAuB,GAAG,OAAQ,eAAuB,KAAK,UAAU,CAAC;IAE/E;;;;;aAKgB,qBAAqB;QACnC,IAAI,uBAAuB,EAAE;YAC3B,OAAO,IAAK,eAA8C,EAAE,CAAC;SAC9D;QACD,OAAO,SAAS,CAAC;IACnB;;ICnBA;;;;;IAKA,MAAM,cAAc;QAuBlB,YAAY,oBAA0D,EAAE,EAC5D,cAAqD,EAAE;YACjE,IAAI,iBAAiB,KAAK,SAAS,EAAE;gBACnC,iBAAiB,GAAG,IAAI,CAAC;aAC1B;iBAAM;gBACL,YAAY,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;aACpD;YAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;YACzE,MAAM,cAAc,GAAG,qBAAqB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;YAEnF,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAE/B,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;YACjC,IAAI,IAAI,KAAK,SAAS,EAAE;gBACtB,MAAM,IAAI,UAAU,CAAC,2BAA2B,CAAC,CAAC;aACnD;YAED,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACrD,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAExD,sDAAsD,CAAC,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;SAC5G;;;;QAKD,IAAI,MAAM;YACR,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,MAAMC,2BAAyB,CAAC,QAAQ,CAAC,CAAC;aAC3C;YAED,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;SACrC;;;;;;;;;;QAWD,KAAK,CAAC,SAAc,SAAS;YAC3B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;aAChE;YAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;gBAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC,CAAC;aAC9F;YAED,OAAO,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SAC1C;;;;;;;;;QAUD,KAAK;YACH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;aAChE;YAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;gBAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC,CAAC;aAC9F;YAED,IAAI,mCAAmC,CAAC,IAAI,CAAC,EAAE;gBAC7C,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC,CAAC;aACrF;YAED,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;SAClC;;;;;;;;;QAUD,SAAS;YACP,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,MAAMA,2BAAyB,CAAC,WAAW,CAAC,CAAC;aAC9C;YAED,OAAO,kCAAkC,CAAC,IAAI,CAAC,CAAC;SACjD;KACF;IAED,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,EAAE;QAChD,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC3B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC3B,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC/B,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAC7B,CAAC,CAAC;IACH,IAAI,OAAOD,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;YAClE,KAAK,EAAE,gBAAgB;YACvB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IAqBD;IAEA,SAAS,kCAAkC,CAAI,MAAyB;QACtE,OAAO,IAAI,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED;IACA,SAAS,oBAAoB,CAAI,cAA8C,EAC9C,cAA2C,EAC3C,cAAmC,EACnC,cAA8C,EAC9C,aAAa,GAAG,CAAC,EACjB,gBAAgD,MAAM,CAAC;QAGtF,MAAM,MAAM,GAAsB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1E,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAEjC,MAAM,UAAU,GAAuC,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;QAEhH,oCAAoC,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAClE,cAAc,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;QACnF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,wBAAwB,CAAI,MAAyB;QAC5D,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;;;QAI3B,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;QAEhC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;;;QAI3B,MAAM,CAAC,yBAAyB,GAAG,SAAU,CAAC;;;QAI9C,MAAM,CAAC,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC;;;QAI1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;;;QAIzC,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;;;QAIjC,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;;QAGzC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;;QAGxC,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC;IAC/B,CAAC;IAED,SAAS,gBAAgB,CAAC,CAAU;QAClC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;YACzE,OAAO,KAAK,CAAC;SACd;QAED,OAAO,CAAC,YAAY,cAAc,CAAC;IACrC,CAAC;IAED,SAAS,sBAAsB,CAAC,MAAsB;QAGpD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;YAChC,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,mBAAmB,CAAC,MAAsB,EAAE,MAAW;;QAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;YAC7D,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QACD,MAAM,CAAC,yBAAyB,CAAC,YAAY,GAAG,MAAM,CAAC;QACvD,MAAA,MAAM,CAAC,yBAAyB,CAAC,gBAAgB,0CAAE,KAAK,EAAE,CAAC;;;;QAK3D,MAAM,KAAK,GAAG,MAAM,CAAC,MAA6B,CAAC;QAEnD,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;YAC7C,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QACD,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC7C,OAAO,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC;SAGO;QAErD,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,IAAI,KAAK,KAAK,UAAU,EAAE;YACxB,kBAAkB,GAAG,IAAI,CAAC;;YAE1B,MAAM,GAAG,SAAS,CAAC;SACpB;QAED,MAAM,OAAO,GAAG,UAAU,CAAY,CAAC,OAAO,EAAE,MAAM;YACpD,MAAM,CAAC,oBAAoB,GAAG;gBAC5B,QAAQ,EAAE,SAAU;gBACpB,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,MAAM;gBACf,mBAAmB,EAAE,kBAAkB;aACxC,CAAC;SACH,CAAC,CAAC;QACH,MAAM,CAAC,oBAAqB,CAAC,QAAQ,GAAG,OAAO,CAAC;QAEhD,IAAI,CAAC,kBAAkB,EAAE;YACvB,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SAC7C;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,SAAS,mBAAmB,CAAC,MAA2B;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;YAC7C,OAAO,mBAAmB,CAAC,IAAI,SAAS,CACtC,kBAAkB,KAAK,2DAA2D,CAAC,CAAC,CAAC;SAIpC;QAErD,MAAM,OAAO,GAAG,UAAU,CAAY,CAAC,OAAO,EAAE,MAAM;YACpD,MAAM,YAAY,GAAiB;gBACjC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,MAAM;aAChB,CAAC;YAEF,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;SACrC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,aAAa,IAAI,KAAK,KAAK,UAAU,EAAE;YACxE,gCAAgC,CAAC,MAAM,CAAC,CAAC;SAC1C;QAED,oCAAoC,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAEvE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;IAEA,SAAS,6BAA6B,CAAC,MAAsB;QAI3D,MAAM,OAAO,GAAG,UAAU,CAAY,CAAC,OAAO,EAAE,MAAM;YACpD,MAAM,YAAY,GAAiB;gBACjC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,MAAM;aAChB,CAAC;YAEF,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAC1C,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,SAAS,+BAA+B,CAAC,MAAsB,EAAE,KAAU;QACzE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAE5B,IAAI,KAAK,KAAK,UAAU,EAAE;YACxB,2BAA2B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC3C,OAAO;SAGoB;QAC7B,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,SAAS,2BAA2B,CAAC,MAAsB,EAAE,MAAW;QAItE,MAAM,UAAU,GAAG,MAAM,CAAC,yBAAyB,CAClB;QAEjC,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;QAC3B,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,qDAAqD,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACvE;QAED,IAAI,CAAC,wCAAwC,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,EAAE;YAC5E,4BAA4B,CAAC,MAAM,CAAC,CAAC;SACtC;IACH,CAAC;IAED,SAAS,4BAA4B,CAAC,MAAsB;QAG1D,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,MAAM,CAAC,yBAAyB,CAAC,UAAU,CAAC,EAAE,CAAC;QAE/C,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY;YACxC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACnC,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC;QAE1C,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC7C,iDAAiD,CAAC,MAAM,CAAC,CAAC;YAC1D,OAAO;SACR;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAAC;QACjD,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;QAExC,IAAI,YAAY,CAAC,mBAAmB,EAAE;YACpC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAClC,iDAAiD,CAAC,MAAM,CAAC,CAAC;YAC1D,OAAO;SACR;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACnF,WAAW,CACT,OAAO,EACP;YACE,YAAY,CAAC,QAAQ,EAAE,CAAC;YACxB,iDAAiD,CAAC,MAAM,CAAC,CAAC;SAC3D,EACD,CAAC,MAAW;YACV,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7B,iDAAiD,CAAC,MAAM,CAAC,CAAC;SAC3D,CAAC,CAAC;IACP,CAAC;IAED,SAAS,iCAAiC,CAAC,MAAsB;QAE/D,MAAM,CAAC,qBAAsB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAC3C,CAAC;IAED,SAAS,0CAA0C,CAAC,MAAsB,EAAE,KAAU;QAEpF,MAAM,CAAC,qBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAE6B;QAErE,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,SAAS,iCAAiC,CAAC,MAAsB;QAE/D,MAAM,CAAC,qBAAsB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;QAEzC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAE0B;QAErD,IAAI,KAAK,KAAK,UAAU,EAAE;;YAExB,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;YAChC,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;gBAC7C,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC;gBACvC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;aACzC;SACF;QAED,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;QAEzB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,iCAAiC,CAAC,MAAM,CAAC,CAAC;SAIF;IAC5C,CAAC;IAED,SAAS,0CAA0C,CAAC,MAAsB,EAAE,KAAU;QAEpF,MAAM,CAAC,qBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAE6B;;QAGrE,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC7C,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;SACzC;QACD,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED;IACA,SAAS,mCAAmC,CAAC,MAAsB;QACjE,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;YACpF,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,wCAAwC,CAAC,MAAsB;QACtE,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;YAC5F,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,sCAAsC,CAAC,MAAsB;QAGpE,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC,aAAa,CAAC;QACpD,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;IACnC,CAAC;IAED,SAAS,2CAA2C,CAAC,MAAsB;QAGzE,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAC/D,CAAC;IAED,SAAS,iDAAiD,CAAC,MAAsB;QAE/E,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE;YAGtC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;SAClC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;SAC/D;IACH,CAAC;IAED,SAAS,gCAAgC,CAAC,MAAsB,EAAE,YAAqB;QAIrF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,YAAY,KAAK,MAAM,CAAC,aAAa,EAAE;YACjE,IAAI,YAAY,EAAE;gBAChB,8BAA8B,CAAC,MAAM,CAAC,CAAC;aACxC;iBAAM;gBAGL,gCAAgC,CAAC,MAAM,CAAC,CAAC;aAC1C;SACF;QAED,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;IACtC,CAAC;IAED;;;;;UAKa,2BAA2B;QAoBtC,YAAY,MAAyB;YACnC,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,6BAA6B,CAAC,CAAC;YACjE,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;YAEhD,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE;gBAClC,MAAM,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;aACpG;YAED,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;YACnC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YAEtB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;YAE5B,IAAI,KAAK,KAAK,UAAU,EAAE;gBACxB,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE;oBACxE,mCAAmC,CAAC,IAAI,CAAC,CAAC;iBAC3C;qBAAM;oBACL,6CAA6C,CAAC,IAAI,CAAC,CAAC;iBACrD;gBAED,oCAAoC,CAAC,IAAI,CAAC,CAAC;aAC5C;iBAAM,IAAI,KAAK,KAAK,UAAU,EAAE;gBAC/B,6CAA6C,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;gBACzE,oCAAoC,CAAC,IAAI,CAAC,CAAC;aAC5C;iBAAM,IAAI,KAAK,KAAK,QAAQ,EAAE;gBAC7B,6CAA6C,CAAC,IAAI,CAAC,CAAC;gBACpD,8CAA8C,CAAC,IAAI,CAAC,CAAC;aACtD;iBAAM;gBAGL,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;gBACxC,6CAA6C,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBACjE,8CAA8C,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;aACnE;SACF;;;;;QAMD,IAAI,MAAM;YACR,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;;;;;;;;;QAUD,IAAI,WAAW;YACb,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;;;;;;;;;QAUD,IAAI,KAAK;YACP,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;;;;QAKD,KAAK,CAAC,SAAc,SAAS;YAC3B,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;aACvE;YAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;gBAC3C,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;aACjE;YAED,OAAO,gCAAgC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SACvD;;;;QAKD,KAAK;YACH,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;aACvE;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAEzC,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;aACjE;YAED,IAAI,mCAAmC,CAAC,MAAM,CAAC,EAAE;gBAC/C,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC,CAAC;aACrF;YAED,OAAO,gCAAgC,CAAC,IAAI,CAAC,CAAC;SAC/C;;;;;;;;;;;QAYD,WAAW;YACT,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,MAAM,gCAAgC,CAAC,aAAa,CAAC,CAAC;aACvD;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAEzC,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB,OAAO;aAG4B;YAErC,kCAAkC,CAAC,IAAI,CAAC,CAAC;SAC1C;QAYD,KAAK,CAAC,QAAW,SAAU;YACzB,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE;gBACxC,OAAO,mBAAmB,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC,CAAC;aACvE;YAED,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;gBAC3C,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC;aACpE;YAED,OAAO,gCAAgC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACtD;KACF;IAED,MAAM,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,SAAS,EAAE;QAC7D,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC3B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC3B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACjC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC3B,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC5B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACjC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAC5B,CAAC,CAAC;IACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,2BAA2B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;YAC/E,KAAK,EAAE,6BAA6B;YACpC,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IAED;IAEA,SAAS,6BAA6B,CAAU,CAAM;QACpD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,sBAAsB,CAAC,EAAE;YACpE,OAAO,KAAK,CAAC;SACd;QAED,OAAO,CAAC,YAAY,2BAA2B,CAAC;IAClD,CAAC;IAED;IAEA,SAAS,gCAAgC,CAAC,MAAmC,EAAE,MAAW;QACxF,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;QAE7B,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS,gCAAgC,CAAC,MAAmC;QAC3E,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;QAE7B,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,SAAS,oDAAoD,CAAC,MAAmC;QAC/F,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;QAE7B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,mCAAmC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE;YACrE,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAED,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SAGG;QAErD,OAAO,gCAAgC,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,SAAS,sDAAsD,CAAC,MAAmC,EAAE,KAAU;QAC7G,IAAI,MAAM,CAAC,mBAAmB,KAAK,SAAS,EAAE;YAC5C,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SACjD;aAAM;YACL,yCAAyC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SAC1D;IACH,CAAC;IAED,SAAS,qDAAqD,CAAC,MAAmC,EAAE,KAAU;QAC5G,IAAI,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE;YAC3C,+BAA+B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SAChD;aAAM;YACL,wCAAwC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SACzD;IACH,CAAC;IAED,SAAS,yCAAyC,CAAC,MAAmC;QACpF,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAE5B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU,EAAE;YAC/C,OAAO,IAAI,CAAC;SACb;QAED,IAAI,KAAK,KAAK,QAAQ,EAAE;YACtB,OAAO,CAAC,CAAC;SACV;QAED,OAAO,6CAA6C,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACzF,CAAC;IAED,SAAS,kCAAkC,CAAC,MAAmC;QAC7E,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAER;QAElC,MAAM,aAAa,GAAG,IAAI,SAAS,CACjC,kFAAkF,CAAC,CAAC;QAEtF,qDAAqD,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;;;QAI7E,sDAAsD,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAE9E,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;QAC3B,MAAM,CAAC,oBAAoB,GAAG,SAAU,CAAC;IAC3C,CAAC;IAED,SAAS,gCAAgC,CAAI,MAAsC,EAAE,KAAQ;QAC3F,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAEb;QAE7B,MAAM,UAAU,GAAG,MAAM,CAAC,yBAAyB,CAAC;QAEpD,MAAM,SAAS,GAAG,2CAA2C,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAEjF,IAAI,MAAM,KAAK,MAAM,CAAC,oBAAoB,EAAE;YAC1C,OAAO,mBAAmB,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC;SACpE;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SACjD;QACD,IAAI,mCAAmC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE;YACrE,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,0DAA0D,CAAC,CAAC,CAAC;SACvG;QACD,IAAI,KAAK,KAAK,UAAU,EAAE;YACxB,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SAGrB;QAE7B,MAAM,OAAO,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;QAEtD,oCAAoC,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAEnE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,aAAa,GAAkB,EAAS,CAAC;IAI/C;;;;;UAKa,+BAA+B;QAwB1C;YACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;SAC5C;;;;;;;;QASD,IAAI,WAAW;YACb,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;gBAC5C,MAAME,sCAAoC,CAAC,aAAa,CAAC,CAAC;aAC3D;YACD,OAAO,IAAI,CAAC,YAAY,CAAC;SAC1B;;;;QAKD,IAAI,MAAM;YACR,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;;;;;;;;QASD,KAAK,CAAC,IAAS,SAAS;YACtB,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;gBAC5C,MAAMA,sCAAoC,CAAC,OAAO,CAAC,CAAC;aACrD;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;YACpD,IAAI,KAAK,KAAK,UAAU,EAAE;;;gBAGxB,OAAO;aACR;YAED,oCAAoC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;SAC/C;;QAGD,CAAC,UAAU,CAAC,CAAC,MAAW;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC5C,8CAA8C,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC;SACf;;QAGD,CAAC,UAAU,CAAC;YACV,UAAU,CAAC,IAAI,CAAC,CAAC;SAClB;KACF;IAED,MAAM,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,SAAS,EAAE;QACjE,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC5B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAC5B,CAAC,CAAC;IACH,IAAI,OAAOF,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,+BAA+B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;YACnF,KAAK,EAAE,iCAAiC;YACxC,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IAED;IAEA,SAAS,iCAAiC,CAAC,CAAM;QAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;YACzE,OAAO,KAAK,CAAC;SACd;QAED,OAAO,CAAC,YAAY,+BAA+B,CAAC;IACtD,CAAC;IAED,SAAS,oCAAoC,CAAI,MAAyB,EACzB,UAA8C,EAC9C,cAA8C,EAC9C,cAA2C,EAC3C,cAAmC,EACnC,cAA8C,EAC9C,aAAqB,EACrB,aAA6C;QAI5F,UAAU,CAAC,yBAAyB,GAAG,MAAM,CAAC;QAC9C,MAAM,CAAC,yBAAyB,GAAG,UAAU,CAAC;;QAG9C,UAAU,CAAC,MAAM,GAAG,SAAU,CAAC;QAC/B,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;QACxC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEvB,UAAU,CAAC,YAAY,GAAG,SAAS,CAAC;QACpC,UAAU,CAAC,gBAAgB,GAAG,qBAAqB,EAAE,CAAC;QACtD,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;QAE5B,UAAU,CAAC,sBAAsB,GAAG,aAAa,CAAC;QAClD,UAAU,CAAC,YAAY,GAAG,aAAa,CAAC;QAExC,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;QAC5C,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;QAC5C,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;QAE5C,MAAM,YAAY,GAAG,8CAA8C,CAAC,UAAU,CAAC,CAAC;QAChF,gCAAgC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAEvD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACtD,WAAW,CACT,YAAY,EACZ;YAEE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC3B,mDAAmD,CAAC,UAAU,CAAC,CAAC;SACjE,EACD,CAAC;YAEC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC3B,+BAA+B,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;SAC5C,CACF,CAAC;IACJ,CAAC;IAED,SAAS,sDAAsD,CAAI,MAAyB,EACzB,cAA0C,EAC1C,aAAqB,EACrB,aAA6C;QAC9G,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;QAE5E,IAAI,cAAc,GAAmC,MAAM,SAAS,CAAC;QACrE,IAAI,cAAc,GAAgC,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACvF,IAAI,cAAc,GAAwB,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC/E,IAAI,cAAc,GAAmC,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAE1F,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;YACtC,cAAc,GAAG,MAAM,cAAc,CAAC,KAAM,CAAC,UAAU,CAAC,CAAC;SAC1D;QACD,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;YACtC,cAAc,GAAG,KAAK,IAAI,cAAc,CAAC,KAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;SACpE;QACD,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;YACtC,cAAc,GAAG,MAAM,cAAc,CAAC,KAAM,EAAE,CAAC;SAChD;QACD,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;YACtC,cAAc,GAAG,MAAM,IAAI,cAAc,CAAC,KAAM,CAAC,MAAM,CAAC,CAAC;SAC1D;QAED,oCAAoC,CAClC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,CACjH,CAAC;IACJ,CAAC;IAED;IACA,SAAS,8CAA8C,CAAC,UAAgD;QACtG,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;QACxC,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;QACxC,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;QACxC,UAAU,CAAC,sBAAsB,GAAG,SAAU,CAAC;IACjD,CAAC;IAED,SAAS,oCAAoC,CAAI,UAA8C;QAC7F,oBAAoB,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QACnD,mDAAmD,CAAC,UAAU,CAAC,CAAC;IAClE,CAAC;IAED,SAAS,2CAA2C,CAAI,UAA8C,EAC9C,KAAQ;QAC9D,IAAI;YACF,OAAO,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;SACjD;QAAC,OAAO,UAAU,EAAE;YACnB,4CAA4C,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACrE,OAAO,CAAC,CAAC;SACV;IACH,CAAC;IAED,SAAS,6CAA6C,CAAC,UAAgD;QACrG,OAAO,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,eAAe,CAAC;IAC9D,CAAC;IAED,SAAS,oCAAoC,CAAI,UAA8C,EAC9C,KAAQ,EACR,SAAiB;QAChE,IAAI;YACF,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;SACpD;QAAC,OAAO,QAAQ,EAAE;YACjB,4CAA4C,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACnE,OAAO;SACR;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;QACpD,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;YAChF,MAAM,YAAY,GAAG,8CAA8C,CAAC,UAAU,CAAC,CAAC;YAChF,gCAAgC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;SACxD;QAED,mDAAmD,CAAC,UAAU,CAAC,CAAC;IAClE,CAAC;IAED;IAEA,SAAS,mDAAmD,CAAI,UAA8C;QAC5G,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;QAEpD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;YACxB,OAAO;SACR;QAED,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;YAC9C,OAAO;SACR;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CACuB;QAClD,IAAI,KAAK,KAAK,UAAU,EAAE;YACxB,4BAA4B,CAAC,MAAM,CAAC,CAAC;YACrC,OAAO;SACR;QAED,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YAClC,OAAO;SACR;QAED,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,aAAa,EAAE;YAC3B,2CAA2C,CAAC,UAAU,CAAC,CAAC;SACzD;aAAM;YACL,2CAA2C,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SAChE;IACH,CAAC;IAED,SAAS,4CAA4C,CAAC,UAAgD,EAAE,KAAU;QAChH,IAAI,UAAU,CAAC,yBAAyB,CAAC,MAAM,KAAK,UAAU,EAAE;YAC9D,oCAAoC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SACzD;IACH,CAAC;IAED,SAAS,2CAA2C,CAAC,UAAgD;QACnG,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;QAEpD,sCAAsC,CAAC,MAAM,CAAC,CAAC;QAE/C,YAAY,CAAC,UAAU,CAAC,CACe;QAEvC,MAAM,gBAAgB,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;QACtD,8CAA8C,CAAC,UAAU,CAAC,CAAC;QAC3D,WAAW,CACT,gBAAgB,EAChB;YACE,iCAAiC,CAAC,MAAM,CAAC,CAAC;SAC3C,EACD,MAAM;YACJ,0CAA0C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SAC5D,CACF,CAAC;IACJ,CAAC;IAED,SAAS,2CAA2C,CAAI,UAA8C,EAAE,KAAQ;QAC9G,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;QAEpD,2CAA2C,CAAC,MAAM,CAAC,CAAC;QAEpD,MAAM,gBAAgB,GAAG,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC3D,WAAW,CACT,gBAAgB,EAChB;YACE,iCAAiC,CAAC,MAAM,CAAC,CAAC;YAE1C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAC0B;YAErD,YAAY,CAAC,UAAU,CAAC,CAAC;YAEzB,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,UAAU,EAAE;gBACxE,MAAM,YAAY,GAAG,8CAA8C,CAAC,UAAU,CAAC,CAAC;gBAChF,gCAAgC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;aACxD;YAED,mDAAmD,CAAC,UAAU,CAAC,CAAC;SACjE,EACD,MAAM;YACJ,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;gBAChC,8CAA8C,CAAC,UAAU,CAAC,CAAC;aAC5D;YACD,0CAA0C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SAC5D,CACF,CAAC;IACJ,CAAC;IAED,SAAS,8CAA8C,CAAC,UAAgD;QACtG,MAAM,WAAW,GAAG,6CAA6C,CAAC,UAAU,CAAC,CAAC;QAC9E,OAAO,WAAW,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;IAEA,SAAS,oCAAoC,CAAC,UAAgD,EAAE,KAAU;QACxG,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAEd;QAErC,8CAA8C,CAAC,UAAU,CAAC,CAAC;QAC3D,2BAA2B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED;IAEA,SAASC,2BAAyB,CAAC,IAAY;QAC7C,OAAO,IAAI,SAAS,CAAC,4BAA4B,IAAI,uCAAuC,CAAC,CAAC;IAChG,CAAC;IAED;IAEA,SAASC,sCAAoC,CAAC,IAAY;QACxD,OAAO,IAAI,SAAS,CAClB,6CAA6C,IAAI,wDAAwD,CAAC,CAAC;IAC/G,CAAC;IAGD;IAEA,SAAS,gCAAgC,CAAC,IAAY;QACpD,OAAO,IAAI,SAAS,CAClB,yCAAyC,IAAI,oDAAoD,CAAC,CAAC;IACvG,CAAC;IAED,SAAS,0BAA0B,CAAC,IAAY;QAC9C,OAAO,IAAI,SAAS,CAAC,SAAS,GAAG,IAAI,GAAG,mCAAmC,CAAC,CAAC;IAC/E,CAAC;IAED,SAAS,oCAAoC,CAAC,MAAmC;QAC/E,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM;YACjD,MAAM,CAAC,sBAAsB,GAAG,OAAO,CAAC;YACxC,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC;YACtC,MAAM,CAAC,mBAAmB,GAAG,SAAS,CAAC;SACxC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,8CAA8C,CAAC,MAAmC,EAAE,MAAW;QACtG,oCAAoC,CAAC,MAAM,CAAC,CAAC;QAC7C,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,SAAS,8CAA8C,CAAC,MAAmC;QACzF,oCAAoC,CAAC,MAAM,CAAC,CAAC;QAC7C,iCAAiC,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,SAAS,gCAAgC,CAAC,MAAmC,EAAE,MAAW;QACxF,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;YAC9C,OAAO;SAEwC;QAEjD,yBAAyB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACjD,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;QAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;QACzC,MAAM,CAAC,mBAAmB,GAAG,UAAU,CAAC;IAC1C,CAAC;IAED,SAAS,yCAAyC,CAAC,MAAmC,EAAE,MAAW;QAKjG,8CAA8C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;IAED,SAAS,iCAAiC,CAAC,MAAmC;QAC5E,IAAI,MAAM,CAAC,sBAAsB,KAAK,SAAS,EAAE;YAC/C,OAAO;SAEwC;QAEjD,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,sBAAsB,GAAG,SAAS,CAAC;QAC1C,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;QACzC,MAAM,CAAC,mBAAmB,GAAG,UAAU,CAAC;IAC1C,CAAC;IAED,SAAS,mCAAmC,CAAC,MAAmC;QAC9E,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM;YAChD,MAAM,CAAC,qBAAqB,GAAG,OAAO,CAAC;YACvC,MAAM,CAAC,oBAAoB,GAAG,MAAM,CAAC;SACtC,CAAC,CAAC;QACH,MAAM,CAAC,kBAAkB,GAAG,SAAS,CAAC;IACxC,CAAC;IAED,SAAS,6CAA6C,CAAC,MAAmC,EAAE,MAAW;QACrG,mCAAmC,CAAC,MAAM,CAAC,CAAC;QAC5C,+BAA+B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,SAAS,6CAA6C,CAAC,MAAmC;QACxF,mCAAmC,CAAC,MAAM,CAAC,CAAC;QAC5C,gCAAgC,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,SAAS,+BAA+B,CAAC,MAAmC,EAAE,MAAW;QACvF,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC7C,OAAO;SACR;QAED,yBAAyB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;QACzC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;QACxC,MAAM,CAAC,kBAAkB,GAAG,UAAU,CAAC;IACzC,CAAC;IAED,SAAS,8BAA8B,CAAC,MAAmC;QAIzE,mCAAmC,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,SAAS,wCAAwC,CAAC,MAAmC,EAAE,MAAW;QAIhG,6CAA6C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,SAAS,gCAAgC,CAAC,MAAmC;QAC3E,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE;YAC9C,OAAO;SACR;QAED,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,CAAC,qBAAqB,GAAG,SAAS,CAAC;QACzC,MAAM,CAAC,oBAAoB,GAAG,SAAS,CAAC;QACxC,MAAM,CAAC,kBAAkB,GAAG,WAAW,CAAC;IAC1C;;ICj4CA;IACO,MAAM,kBAAkB,GAC7B,OAAO,YAAY,KAAK,WAAW,GAAG,YAAY,GAAG,SAAS;;ICFhE;IAaA,SAAS,yBAAyB,CAAC,IAAa;QAC9C,IAAI,EAAE,OAAO,IAAI,KAAK,UAAU,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE;YAC7D,OAAO,KAAK,CAAC;SACd;QACD,IAAI;YACF,IAAK,IAAgC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;SACb;QAAC,WAAM;YACN,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAED,SAAS,0BAA0B;;QAEjC,MAAM,IAAI,GAAG,SAAS,YAAY,CAAqB,OAAgB,EAAE,IAAa;YACpF,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,OAAO,CAAC;YAC5B,IAAI,KAAK,CAAC,iBAAiB,EAAE;gBAC3B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;aACjD;SACK,CAAC;QACT,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChD,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;QAC1G,OAAO,IAAI,CAAC;IACd,CAAC;IAED;IACA,MAAMC,cAAY,GAChB,yBAAyB,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,GAAG,0BAA0B,EAAE;;aCbnF,oBAAoB,CAAI,MAAyB,EACzB,IAAuB,EACvB,YAAqB,EACrB,YAAqB,EACrB,aAAsB,EACtB,MAA+B;QAUrE,MAAM,MAAM,GAAG,kCAAkC,CAAI,MAAM,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,kCAAkC,CAAI,IAAI,CAAC,CAAC;QAE3D,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QAEzB,IAAI,YAAY,GAAG,KAAK,CAAC;;QAGzB,IAAI,YAAY,GAAG,mBAAmB,CAAO,SAAS,CAAC,CAAC;QAExD,OAAO,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM;YAChC,IAAI,cAA0B,CAAC;YAC/B,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB,cAAc,GAAG;oBACf,MAAM,KAAK,GAAG,IAAIA,cAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;oBACxD,MAAM,OAAO,GAA+B,EAAE,CAAC;oBAC/C,IAAI,CAAC,YAAY,EAAE;wBACjB,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE;gCAC9B,OAAO,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;6BACzC;4BACD,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;yBACvC,CAAC,CAAC;qBACJ;oBACD,IAAI,CAAC,aAAa,EAAE;wBAClB,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;gCAChC,OAAO,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;6BAC5C;4BACD,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;yBACvC,CAAC,CAAC;qBACJ;oBACD,kBAAkB,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;iBACrF,CAAC;gBAEF,IAAI,MAAM,CAAC,OAAO,EAAE;oBAClB,cAAc,EAAE,CAAC;oBACjB,OAAO;iBACR;gBAED,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;aAClD;;;;YAKD,SAAS,QAAQ;gBACf,OAAO,UAAU,CAAO,CAAC,WAAW,EAAE,UAAU;oBAC9C,SAAS,IAAI,CAAC,IAAa;wBACzB,IAAI,IAAI,EAAE;4BACR,WAAW,EAAE,CAAC;yBACf;6BAAM;;;4BAGL,kBAAkB,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;yBAClD;qBACF;oBAED,IAAI,CAAC,KAAK,CAAC,CAAC;iBACb,CAAC,CAAC;aACJ;YAED,SAAS,QAAQ;gBACf,IAAI,YAAY,EAAE;oBAChB,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;iBAClC;gBAED,OAAO,kBAAkB,CAAC,MAAM,CAAC,aAAa,EAAE;oBAC9C,OAAO,UAAU,CAAU,CAAC,WAAW,EAAE,UAAU;wBACjD,+BAA+B,CAC7B,MAAM,EACN;4BACE,WAAW,EAAE,KAAK;gCAChB,YAAY,GAAG,kBAAkB,CAAC,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;gCACpG,WAAW,CAAC,KAAK,CAAC,CAAC;6BACpB;4BACD,WAAW,EAAE,MAAM,WAAW,CAAC,IAAI,CAAC;4BACpC,WAAW,EAAE,UAAU;yBACxB,CACF,CAAC;qBACH,CAAC,CAAC;iBACJ,CAAC,CAAC;aACJ;;YAGD,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,WAAW;gBAC3D,IAAI,CAAC,YAAY,EAAE;oBACjB,kBAAkB,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;iBACrF;qBAAM;oBACL,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;iBAC7B;aACF,CAAC,CAAC;;YAGH,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,cAAc,EAAE,WAAW;gBACzD,IAAI,CAAC,aAAa,EAAE;oBAClB,kBAAkB,CAAC,MAAM,oBAAoB,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;iBACxF;qBAAM;oBACL,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;iBAC7B;aACF,CAAC,CAAC;;YAGH,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE;gBAC/C,IAAI,CAAC,YAAY,EAAE;oBACjB,kBAAkB,CAAC,MAAM,oDAAoD,CAAC,MAAM,CAAC,CAAC,CAAC;iBACxF;qBAAM;oBACL,QAAQ,EAAE,CAAC;iBACZ;aACF,CAAC,CAAC;;YAGH,IAAI,mCAAmC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;gBACzE,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAC;gBAEhH,IAAI,CAAC,aAAa,EAAE;oBAClB,kBAAkB,CAAC,MAAM,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;iBACtF;qBAAM;oBACL,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;iBAC5B;aACF;YAED,yBAAyB,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEtC,SAAS,qBAAqB;;;gBAG5B,MAAM,eAAe,GAAG,YAAY,CAAC;gBACrC,OAAO,kBAAkB,CACvB,YAAY,EACZ,MAAM,eAAe,KAAK,YAAY,GAAG,qBAAqB,EAAE,GAAG,SAAS,CAC7E,CAAC;aACH;YAED,SAAS,kBAAkB,CAAC,MAAuC,EACvC,OAAsB,EACtB,MAA6B;gBACvD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;oBAC/B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;iBAC7B;qBAAM;oBACL,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;iBAChC;aACF;YAED,SAAS,iBAAiB,CAAC,MAAuC,EAAE,OAAsB,EAAE,MAAkB;gBAC5G,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;oBAC9B,MAAM,EAAE,CAAC;iBACV;qBAAM;oBACL,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;iBAClC;aACF;YAED,SAAS,kBAAkB,CAAC,MAA8B,EAAE,eAAyB,EAAE,aAAmB;gBACxG,IAAI,YAAY,EAAE;oBAChB,OAAO;iBACR;gBACD,YAAY,GAAG,IAAI,CAAC;gBAEpB,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,EAAE;oBAC5E,eAAe,CAAC,qBAAqB,EAAE,EAAE,SAAS,CAAC,CAAC;iBACrD;qBAAM;oBACL,SAAS,EAAE,CAAC;iBACb;gBAED,SAAS,SAAS;oBAChB,WAAW,CACT,MAAM,EAAE,EACR,MAAM,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,EAC9C,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CACrC,CAAC;iBACH;aACF;YAED,SAAS,QAAQ,CAAC,OAAiB,EAAE,KAAW;gBAC9C,IAAI,YAAY,EAAE;oBAChB,OAAO;iBACR;gBACD,YAAY,GAAG,IAAI,CAAC;gBAEpB,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,EAAE;oBAC5E,eAAe,CAAC,qBAAqB,EAAE,EAAE,MAAM,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;iBAC1E;qBAAM;oBACL,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;iBAC1B;aACF;YAED,SAAS,QAAQ,CAAC,OAAiB,EAAE,KAAW;gBAC9C,kCAAkC,CAAC,MAAM,CAAC,CAAC;gBAC3C,kCAAkC,CAAC,MAAM,CAAC,CAAC;gBAE3C,IAAI,MAAM,KAAK,SAAS,EAAE;oBACxB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;iBACrD;gBACD,IAAI,OAAO,EAAE;oBACX,MAAM,CAAC,KAAK,CAAC,CAAC;iBACf;qBAAM;oBACL,OAAO,CAAC,SAAS,CAAC,CAAC;iBACpB;aACF;SACF,CAAC,CAAC;IACL;;ICnOA;;;;;UAKa,+BAA+B;QAwB1C;YACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;SAC5C;;;;;QAMD,IAAI,WAAW;YACb,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;gBAC5C,MAAMD,sCAAoC,CAAC,aAAa,CAAC,CAAC;aAC3D;YAED,OAAO,6CAA6C,CAAC,IAAI,CAAC,CAAC;SAC5D;;;;;QAMD,KAAK;YACH,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;gBAC5C,MAAMA,sCAAoC,CAAC,OAAO,CAAC,CAAC;aACrD;YAED,IAAI,CAAC,gDAAgD,CAAC,IAAI,CAAC,EAAE;gBAC3D,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;aACxE;YAED,oCAAoC,CAAC,IAAI,CAAC,CAAC;SAC5C;QAMD,OAAO,CAAC,QAAW,SAAU;YAC3B,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;gBAC5C,MAAMA,sCAAoC,CAAC,SAAS,CAAC,CAAC;aACvD;YAED,IAAI,CAAC,gDAAgD,CAAC,IAAI,CAAC,EAAE;gBAC3D,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAC;aAC1E;YAED,OAAO,sCAAsC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC5D;;;;QAKD,KAAK,CAAC,IAAS,SAAS;YACtB,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,EAAE;gBAC5C,MAAMA,sCAAoC,CAAC,OAAO,CAAC,CAAC;aACrD;YAED,oCAAoC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;SAC/C;;QAGD,CAAC,WAAW,CAAC,CAAC,MAAW;YACvB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC7C,8CAA8C,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC;SACf;;QAGD,CAAC,SAAS,CAAC,CAAC,WAA2B;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC;YAE9C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBAEjC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;oBACpD,8CAA8C,CAAC,IAAI,CAAC,CAAC;oBACrD,mBAAmB,CAAC,MAAM,CAAC,CAAC;iBAC7B;qBAAM;oBACL,+CAA+C,CAAC,IAAI,CAAC,CAAC;iBACvD;gBAED,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aAChC;iBAAM;gBACL,4BAA4B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBAClD,+CAA+C,CAAC,IAAI,CAAC,CAAC;aACvD;SACF;KACF;IAED,MAAM,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,SAAS,EAAE;QACjE,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC3B,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC7B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC3B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAClC,CAAC,CAAC;IACH,IAAI,OAAOF,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,+BAA+B,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;YACnF,KAAK,EAAE,iCAAiC;YACxC,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IAED;IAEA,SAAS,iCAAiC,CAAU,CAAM;QACxD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;YACzE,OAAO,KAAK,CAAC;SACd;QAED,OAAO,CAAC,YAAY,+BAA+B,CAAC;IACtD,CAAC;IAED,SAAS,+CAA+C,CAAC,UAAgD;QACvG,MAAM,UAAU,GAAG,6CAA6C,CAAC,UAAU,CAAC,CAAC;QAC7E,IAAI,CAAC,UAAU,EAAE;YACf,OAAO;SACR;QAED,IAAI,UAAU,CAAC,QAAQ,EAAE;YACvB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;YAC7B,OAAO;SAGsB;QAE/B,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;QAE3B,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;QAChD,WAAW,CACT,WAAW,EACX;YACE,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;YAE5B,IAAI,UAAU,CAAC,UAAU,EAAE;gBACzB,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;gBAC9B,+CAA+C,CAAC,UAAU,CAAC,CAAC;aAC7D;SACF,EACD,CAAC;YACC,oCAAoC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;SACrD,CACF,CAAC;IACJ,CAAC;IAED,SAAS,6CAA6C,CAAC,UAAgD;QACrG,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;QAEpD,IAAI,CAAC,gDAAgD,CAAC,UAAU,CAAC,EAAE;YACjE,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;YACxB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,sBAAsB,CAAC,MAAM,CAAC,IAAI,gCAAgC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAClF,OAAO,IAAI,CAAC;SACb;QAED,MAAM,WAAW,GAAG,6CAA6C,CAAC,UAAU,CAAC,CAChD;QAC7B,IAAI,WAAY,GAAG,CAAC,EAAE;YACpB,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,8CAA8C,CAAC,UAAgD;QACtG,UAAU,CAAC,cAAc,GAAG,SAAU,CAAC;QACvC,UAAU,CAAC,gBAAgB,GAAG,SAAU,CAAC;QACzC,UAAU,CAAC,sBAAsB,GAAG,SAAU,CAAC;IACjD,CAAC;IAED;aAEgB,oCAAoC,CAAC,UAAgD;QACnG,IAAI,CAAC,gDAAgD,CAAC,UAAU,CAAC,EAAE;YACjE,OAAO;SACR;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;QAEpD,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC;QAElC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YAClC,8CAA8C,CAAC,UAAU,CAAC,CAAC;YAC3D,mBAAmB,CAAC,MAAM,CAAC,CAAC;SAC7B;IACH,CAAC;aAEe,sCAAsC,CACpD,UAA8C,EAC9C,KAAQ;QAER,IAAI,CAAC,gDAAgD,CAAC,UAAU,CAAC,EAAE;YACjE,OAAO;SACR;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;QAEpD,IAAI,sBAAsB,CAAC,MAAM,CAAC,IAAI,gCAAgC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAClF,gCAAgC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SACxD;aAAM;YACL,IAAI,SAAS,CAAC;YACd,IAAI;gBACF,SAAS,GAAG,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;aACtD;YAAC,OAAO,UAAU,EAAE;gBACnB,oCAAoC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBAC7D,MAAM,UAAU,CAAC;aAClB;YAED,IAAI;gBACF,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;aACpD;YAAC,OAAO,QAAQ,EAAE;gBACjB,oCAAoC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAC3D,MAAM,QAAQ,CAAC;aAChB;SACF;QAED,+CAA+C,CAAC,UAAU,CAAC,CAAC;IAC9D,CAAC;aAEe,oCAAoC,CAAC,UAAgD,EAAE,CAAM;QAC3G,MAAM,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC;QAEpD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;YAChC,OAAO;SACR;QAED,UAAU,CAAC,UAAU,CAAC,CAAC;QAEvB,8CAA8C,CAAC,UAAU,CAAC,CAAC;QAC3D,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACjC,CAAC;aAEe,6CAA6C,CAC3D,UAAgD;QAEhD,MAAM,KAAK,GAAG,UAAU,CAAC,yBAAyB,CAAC,MAAM,CAAC;QAE1D,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,OAAO,IAAI,CAAC;SACb;QACD,IAAI,KAAK,KAAK,QAAQ,EAAE;YACtB,OAAO,CAAC,CAAC;SACV;QAED,OAAO,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,eAAe,CAAC;IAC9D,CAAC;IAED;aACgB,8CAA8C,CAC5D,UAAgD;QAEhD,IAAI,6CAA6C,CAAC,UAAU,CAAC,EAAE;YAC7D,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC;IACd,CAAC;aAEe,gDAAgD,CAC9D,UAAgD;QAEhD,MAAM,KAAK,GAAG,UAAU,CAAC,yBAAyB,CAAC,MAAM,CAAC;QAE1D,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,KAAK,KAAK,UAAU,EAAE;YACvD,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;IACf,CAAC;aAEe,oCAAoC,CAAI,MAAyB,EACzB,UAA8C,EAC9C,cAA8C,EAC9C,aAAkC,EAClC,eAA+C,EAC/C,aAAqB,EACrB,aAA6C;QAGnG,UAAU,CAAC,yBAAyB,GAAG,MAAM,CAAC;QAE9C,UAAU,CAAC,MAAM,GAAG,SAAU,CAAC;QAC/B,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;QACxC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEvB,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC5B,UAAU,CAAC,eAAe,GAAG,KAAK,CAAC;QACnC,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;QAC9B,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;QAE5B,UAAU,CAAC,sBAAsB,GAAG,aAAa,CAAC;QAClD,UAAU,CAAC,YAAY,GAAG,aAAa,CAAC;QAExC,UAAU,CAAC,cAAc,GAAG,aAAa,CAAC;QAC1C,UAAU,CAAC,gBAAgB,GAAG,eAAe,CAAC;QAE9C,MAAM,CAAC,yBAAyB,GAAG,UAAU,CAAC;QAE9C,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;QACrC,WAAW,CACT,mBAAmB,CAAC,WAAW,CAAC,EAChC;YACE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAGK;YAE/B,+CAA+C,CAAC,UAAU,CAAC,CAAC;SAC7D,EACD,CAAC;YACC,oCAAoC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;SACrD,CACF,CAAC;IACJ,CAAC;aAEe,wDAAwD,CACtE,MAAyB,EACzB,gBAA8C,EAC9C,aAAqB,EACrB,aAA6C;QAE7C,MAAM,UAAU,GAAuC,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;QAEhH,IAAI,cAAc,GAAmC,MAAM,SAAS,CAAC;QACrE,IAAI,aAAa,GAAwB,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC9E,IAAI,eAAe,GAAmC,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAE3F,IAAI,gBAAgB,CAAC,KAAK,KAAK,SAAS,EAAE;YACxC,cAAc,GAAG,MAAM,gBAAgB,CAAC,KAAM,CAAC,UAAU,CAAC,CAAC;SAC5D;QACD,IAAI,gBAAgB,CAAC,IAAI,KAAK,SAAS,EAAE;YACvC,aAAa,GAAG,MAAM,gBAAgB,CAAC,IAAK,CAAC,UAAU,CAAC,CAAC;SAC1D;QACD,IAAI,gBAAgB,CAAC,MAAM,KAAK,SAAS,EAAE;YACzC,eAAe,GAAG,MAAM,IAAI,gBAAgB,CAAC,MAAO,CAAC,MAAM,CAAC,CAAC;SAC9D;QAED,oCAAoC,CAClC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,CACjG,CAAC;IACJ,CAAC;IAED;IAEA,SAASE,sCAAoC,CAAC,IAAY;QACxD,OAAO,IAAI,SAAS,CAClB,6CAA6C,IAAI,wDAAwD,CAAC,CAAC;IAC/G;;aCtWgB,iBAAiB,CAAI,MAAyB,EACzB,eAAwB;QAG3D,IAAI,8BAA8B,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE;YACpE,OAAO,qBAAqB,CAAC,MAAuC,CACjB,CAAC;SACrD;QACD,OAAO,wBAAwB,CAAC,MAAuB,CAAC,CAAC;IAC3D,CAAC;aAEe,wBAAwB,CAAI,MAAyB,EACzB,eAAwB;QAIlE,MAAM,MAAM,GAAG,kCAAkC,CAAI,MAAM,CAAC,CAAC;QAE7D,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,OAAY,CAAC;QACjB,IAAI,OAAY,CAAC;QACjB,IAAI,OAA0B,CAAC;QAC/B,IAAI,OAA0B,CAAC;QAE/B,IAAI,oBAAqE,CAAC;QAC1E,MAAM,aAAa,GAAG,UAAU,CAAY,OAAO;YACjD,oBAAoB,GAAG,OAAO,CAAC;SAChC,CAAC,CAAC;QAEH,SAAS,aAAa;YACpB,IAAI,OAAO,EAAE;gBACX,SAAS,GAAG,IAAI,CAAC;gBACjB,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;aACvC;YAED,OAAO,GAAG,IAAI,CAAC;YAEf,MAAM,WAAW,GAAmB;gBAClC,WAAW,EAAE,KAAK;;;;oBAIhB,cAAc,CAAC;wBACb,SAAS,GAAG,KAAK,CAAC;wBAClB,MAAM,MAAM,GAAG,KAAK,CAAC;wBACrB,MAAM,MAAM,GAAG,KAAK,CAAC;;;;;;wBAQrB,IAAI,CAAC,SAAS,EAAE;4BACd,sCAAsC,CACpC,OAAO,CAAC,yBAA+D,EACvE,MAAM,CACP,CAAC;yBACH;wBACD,IAAI,CAAC,SAAS,EAAE;4BACd,sCAAsC,CACpC,OAAO,CAAC,yBAA+D,EACvE,MAAM,CACP,CAAC;yBACH;wBAED,OAAO,GAAG,KAAK,CAAC;wBAChB,IAAI,SAAS,EAAE;4BACb,aAAa,EAAE,CAAC;yBACjB;qBACF,CAAC,CAAC;iBACJ;gBACD,WAAW,EAAE;oBACX,OAAO,GAAG,KAAK,CAAC;oBAChB,IAAI,CAAC,SAAS,EAAE;wBACd,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,CAAC,CAAC;qBAC/G;oBACD,IAAI,CAAC,SAAS,EAAE;wBACd,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,CAAC,CAAC;qBAC/G;oBAED,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;wBAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;qBACjC;iBACF;gBACD,WAAW,EAAE;oBACX,OAAO,GAAG,KAAK,CAAC;iBACjB;aACF,CAAC;YACF,+BAA+B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAErD,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAED,SAAS,gBAAgB,CAAC,MAAW;YACnC,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,GAAG,MAAM,CAAC;YACjB,IAAI,SAAS,EAAE;gBACb,MAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChE,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;gBACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;aACpC;YACD,OAAO,aAAa,CAAC;SACtB;QAED,SAAS,gBAAgB,CAAC,MAAW;YACnC,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,GAAG,MAAM,CAAC;YACjB,IAAI,SAAS,EAAE;gBACb,MAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChE,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;gBACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;aACpC;YACD,OAAO,aAAa,CAAC;SACtB;QAED,SAAS,cAAc;;SAEtB;QAED,OAAO,GAAG,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;QAChF,OAAO,GAAG,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;QAEhF,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAM;YAC1C,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,EAAE,CAAC,CAAC,CAAC;YACjH,oCAAoC,CAAC,OAAO,CAAC,yBAA+D,EAAE,CAAC,CAAC,CAAC;YACjH,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;gBAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;aACjC;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5B,CAAC;aAEe,qBAAqB,CAAC,MAA0B;QAI9D,IAAI,MAAM,GAAqC,kCAAkC,CAAC,MAAM,CAAC,CAAC;QAC1F,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAChC,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAChC,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,OAAY,CAAC;QACjB,IAAI,OAAY,CAAC;QACjB,IAAI,OAA2B,CAAC;QAChC,IAAI,OAA2B,CAAC;QAEhC,IAAI,oBAAqE,CAAC;QAC1E,MAAM,aAAa,GAAG,UAAU,CAAO,OAAO;YAC5C,oBAAoB,GAAG,OAAO,CAAC;SAChC,CAAC,CAAC;QAEH,SAAS,kBAAkB,CAAC,UAA4C;YACtE,aAAa,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;gBACxC,IAAI,UAAU,KAAK,MAAM,EAAE;oBACzB,OAAO;iBACR;gBACD,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;gBACxE,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;gBACxE,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;oBAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;iBACjC;aACF,CAAC,CAAC;SACJ;QAED,SAAS,qBAAqB;YAC5B,IAAI,0BAA0B,CAAC,MAAM,CAAC,EAAE;gBAEtC,kCAAkC,CAAC,MAAM,CAAC,CAAC;gBAE3C,MAAM,GAAG,kCAAkC,CAAC,MAAM,CAAC,CAAC;gBACpD,kBAAkB,CAAC,MAAM,CAAC,CAAC;aAC5B;YAED,MAAM,WAAW,GAA4B;gBAC3C,WAAW,EAAE,KAAK;;;;oBAIhB,cAAc,CAAC;wBACb,mBAAmB,GAAG,KAAK,CAAC;wBAC5B,mBAAmB,GAAG,KAAK,CAAC;wBAE5B,MAAM,MAAM,GAAG,KAAK,CAAC;wBACrB,IAAI,MAAM,GAAG,KAAK,CAAC;wBACnB,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;4BAC5B,IAAI;gCACF,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;6BACnC;4BAAC,OAAO,MAAM,EAAE;gCACf,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;gCAC7E,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;gCAC7E,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;gCAC3D,OAAO;6BACR;yBACF;wBAED,IAAI,CAAC,SAAS,EAAE;4BACd,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;yBAChF;wBACD,IAAI,CAAC,SAAS,EAAE;4BACd,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;yBAChF;wBAED,OAAO,GAAG,KAAK,CAAC;wBAChB,IAAI,mBAAmB,EAAE;4BACvB,cAAc,EAAE,CAAC;yBAClB;6BAAM,IAAI,mBAAmB,EAAE;4BAC9B,cAAc,EAAE,CAAC;yBAClB;qBACF,CAAC,CAAC;iBACJ;gBACD,WAAW,EAAE;oBACX,OAAO,GAAG,KAAK,CAAC;oBAChB,IAAI,CAAC,SAAS,EAAE;wBACd,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;qBACtE;oBACD,IAAI,CAAC,SAAS,EAAE;wBACd,iCAAiC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;qBACtE;oBACD,IAAI,OAAO,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;wBAClE,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;qBAC3E;oBACD,IAAI,OAAO,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;wBAClE,mCAAmC,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;qBAC3E;oBACD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;wBAC5B,oBAAoB,CAAC,SAAS,CAAC,CAAC;qBACjC;iBACF;gBACD,WAAW,EAAE;oBACX,OAAO,GAAG,KAAK,CAAC;iBACjB;aACF,CAAC;YACF,+BAA+B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;SACtD;QAED,SAAS,kBAAkB,CAAC,IAAqB,EAAE,UAAmB;YACpE,IAAI,6BAA6B,CAAa,MAAM,CAAC,EAAE;gBAErD,kCAAkC,CAAC,MAAM,CAAC,CAAC;gBAE3C,MAAM,GAAG,+BAA+B,CAAC,MAAM,CAAC,CAAC;gBACjD,kBAAkB,CAAC,MAAM,CAAC,CAAC;aAC5B;YAED,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;YAClD,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;YAEnD,MAAM,eAAe,GAAqC;gBACxD,WAAW,EAAE,KAAK;;;;oBAIhB,cAAc,CAAC;wBACb,mBAAmB,GAAG,KAAK,CAAC;wBAC5B,mBAAmB,GAAG,KAAK,CAAC;wBAE5B,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;wBACxD,MAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;wBAEzD,IAAI,CAAC,aAAa,EAAE;4BAClB,IAAI,WAAW,CAAC;4BAChB,IAAI;gCACF,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;6BACxC;4BAAC,OAAO,MAAM,EAAE;gCACf,iCAAiC,CAAC,UAAU,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;gCAChF,iCAAiC,CAAC,WAAW,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;gCACjF,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;gCAC3D,OAAO;6BACR;4BACD,IAAI,CAAC,YAAY,EAAE;gCACjB,8CAA8C,CAAC,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;6BAC7F;4BACD,mCAAmC,CAAC,WAAW,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC;yBACzF;6BAAM,IAAI,CAAC,YAAY,EAAE;4BACxB,8CAA8C,CAAC,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;yBAC7F;wBAED,OAAO,GAAG,KAAK,CAAC;wBAChB,IAAI,mBAAmB,EAAE;4BACvB,cAAc,EAAE,CAAC;yBAClB;6BAAM,IAAI,mBAAmB,EAAE;4BAC9B,cAAc,EAAE,CAAC;yBAClB;qBACF,CAAC,CAAC;iBACJ;gBACD,WAAW,EAAE,KAAK;oBAChB,OAAO,GAAG,KAAK,CAAC;oBAEhB,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;oBACxD,MAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;oBAEzD,IAAI,CAAC,YAAY,EAAE;wBACjB,iCAAiC,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;qBACzE;oBACD,IAAI,CAAC,aAAa,EAAE;wBAClB,iCAAiC,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;qBAC1E;oBAED,IAAI,KAAK,KAAK,SAAS,EAAE;wBAGvB,IAAI,CAAC,YAAY,EAAE;4BACjB,8CAA8C,CAAC,UAAU,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;yBAC7F;wBACD,IAAI,CAAC,aAAa,IAAI,WAAW,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;4BACxF,mCAAmC,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;yBAC/E;qBACF;oBAED,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,EAAE;wBACnC,oBAAoB,CAAC,SAAS,CAAC,CAAC;qBACjC;iBACF;gBACD,WAAW,EAAE;oBACX,OAAO,GAAG,KAAK,CAAC;iBACjB;aACF,CAAC;YACF,4BAA4B,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;SAC7D;QAED,SAAS,cAAc;YACrB,IAAI,OAAO,EAAE;gBACX,mBAAmB,GAAG,IAAI,CAAC;gBAC3B,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;aACvC;YAED,OAAO,GAAG,IAAI,CAAC;YAEf,MAAM,WAAW,GAAG,0CAA0C,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAClG,IAAI,WAAW,KAAK,IAAI,EAAE;gBACxB,qBAAqB,EAAE,CAAC;aACzB;iBAAM;gBACL,kBAAkB,CAAC,WAAW,CAAC,KAAM,EAAE,KAAK,CAAC,CAAC;aAC/C;YAED,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAED,SAAS,cAAc;YACrB,IAAI,OAAO,EAAE;gBACX,mBAAmB,GAAG,IAAI,CAAC;gBAC3B,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;aACvC;YAED,OAAO,GAAG,IAAI,CAAC;YAEf,MAAM,WAAW,GAAG,0CAA0C,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAClG,IAAI,WAAW,KAAK,IAAI,EAAE;gBACxB,qBAAqB,EAAE,CAAC;aACzB;iBAAM;gBACL,kBAAkB,CAAC,WAAW,CAAC,KAAM,EAAE,IAAI,CAAC,CAAC;aAC9C;YAED,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAED,SAAS,gBAAgB,CAAC,MAAW;YACnC,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,GAAG,MAAM,CAAC;YACjB,IAAI,SAAS,EAAE;gBACb,MAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChE,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;gBACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;aACpC;YACD,OAAO,aAAa,CAAC;SACtB;QAED,SAAS,gBAAgB,CAAC,MAAW;YACnC,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,GAAG,MAAM,CAAC;YACjB,IAAI,SAAS,EAAE;gBACb,MAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBAChE,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;gBACnE,oBAAoB,CAAC,YAAY,CAAC,CAAC;aACpC;YACD,OAAO,aAAa,CAAC;SACtB;QAED,SAAS,cAAc;YACrB,OAAO;SACR;QAED,OAAO,GAAG,wBAAwB,CAAC,cAAc,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;QACrF,OAAO,GAAG,wBAAwB,CAAC,cAAc,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;QAErF,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAE3B,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5B;;aCvagB,oCAAoC,CAClD,MAAyD,EACzD,OAAe;QAEf,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAmD,CAAC;QACrE,MAAM,qBAAqB,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,qBAAqB,CAAC;QAC9D,MAAM,MAAM,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,CAAC;QAChC,MAAM,IAAI,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;QAC5B,MAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;QAC9B,MAAM,IAAI,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC;QAC5B,OAAO;YACL,qBAAqB,EAAE,qBAAqB,KAAK,SAAS;gBACxD,SAAS;gBACT,uCAAuC,CACrC,qBAAqB,EACrB,GAAG,OAAO,0CAA0C,CACrD;YACH,MAAM,EAAE,MAAM,KAAK,SAAS;gBAC1B,SAAS;gBACT,qCAAqC,CAAC,MAAM,EAAE,QAAS,EAAE,GAAG,OAAO,2BAA2B,CAAC;YACjG,IAAI,EAAE,IAAI,KAAK,SAAS;gBACtB,SAAS;gBACT,mCAAmC,CAAC,IAAI,EAAE,QAAS,EAAE,GAAG,OAAO,yBAAyB,CAAC;YAC3F,KAAK,EAAE,KAAK,KAAK,SAAS;gBACxB,SAAS;gBACT,oCAAoC,CAAC,KAAK,EAAE,QAAS,EAAE,GAAG,OAAO,0BAA0B,CAAC;YAC9F,IAAI,EAAE,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,yBAAyB,CAAC,IAAI,EAAE,GAAG,OAAO,yBAAyB,CAAC;SAC5G,CAAC;IACJ,CAAC;IAED,SAAS,qCAAqC,CAC5C,EAAkC,EAClC,QAAuC,EACvC,OAAe;QAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,MAAW,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS,mCAAmC,CAC1C,EAAgD,EAChD,QAA0C,EAC1C,OAAe;QAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,UAAuC,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,SAAS,oCAAoC,CAC3C,EAAiD,EACjD,QAA0C,EAC1C,OAAe;QAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,UAAuC,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,SAAS,yBAAyB,CAAC,IAAY,EAAE,OAAe;QAC9D,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;QACjB,IAAI,IAAI,KAAK,OAAO,EAAE;YACpB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,KAAK,IAAI,2DAA2D,CAAC,CAAC;SACrG;QACD,OAAO,IAAI,CAAC;IACd;;aC1EgB,oBAAoB,CAAC,OAA0D,EAC1D,OAAe;QAClD,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,+BAA+B,CAAC,IAAI,EAAE,GAAG,OAAO,yBAAyB,CAAC;SAClH,CAAC;IACJ,CAAC;IAED,SAAS,+BAA+B,CAAC,IAAY,EAAE,OAAe;QACpE,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;QACjB,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,KAAK,IAAI,iEAAiE,CAAC,CAAC;SAC3G;QACD,OAAO,IAAI,CAAC;IACd;;aCZgB,sBAAsB,CAAC,OAAyD,EACzD,OAAe;QACpD,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnC,MAAM,aAAa,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC;QAC7C,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;IACnD;;aCPgB,kBAAkB,CAAC,OAA6C,EAC7C,OAAe;QAChD,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnC,MAAM,YAAY,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC;QAC3C,MAAM,aAAa,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC;QAC7C,MAAM,YAAY,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC;QAC3C,MAAM,MAAM,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAC;QAC/B,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,iBAAiB,CAAC,MAAM,EAAE,GAAG,OAAO,2BAA2B,CAAC,CAAC;SAClE;QACD,OAAO;YACL,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC;YACnC,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC;YACrC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC;YACnC,MAAM;SACP,CAAC;IACJ,CAAC;IAED,SAAS,iBAAiB,CAAC,MAAe,EAAE,OAAe;QACzD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;YAC1B,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,yBAAyB,CAAC,CAAC;SAC1D;IACH;;aCpBgB,2BAA2B,CACzC,IAAuD,EACvD,OAAe;QAEf,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEhC,MAAM,QAAQ,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC;QAChC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC;QAClE,oBAAoB,CAAC,QAAQ,EAAE,GAAG,OAAO,6BAA6B,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC;QAChC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC;QAClE,oBAAoB,CAAC,QAAQ,EAAE,GAAG,OAAO,6BAA6B,CAAC,CAAC;QAExE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAChC;;ICiDA;;;;;UAKa,cAAc;QAczB,YAAY,sBAAqF,EAAE,EACvF,cAAqD,EAAE;YACjE,IAAI,mBAAmB,KAAK,SAAS,EAAE;gBACrC,mBAAmB,GAAG,IAAI,CAAC;aAC5B;iBAAM;gBACL,YAAY,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;aACtD;YAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;YACzE,MAAM,gBAAgB,GAAG,oCAAoC,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;YAEtG,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAE/B,IAAI,gBAAgB,CAAC,IAAI,KAAK,OAAO,EAAE;gBACrC,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;oBAC/B,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;iBACpF;gBACD,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACxD,qDAAqD,CACnD,IAAqC,EACrC,gBAAgB,EAChB,aAAa,CACd,CAAC;aACH;iBAAM;gBAEL,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;gBACrD,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACxD,wDAAwD,CACtD,IAAI,EACJ,gBAAgB,EAChB,aAAa,EACb,aAAa,CACd,CAAC;aACH;SACF;;;;QAKD,IAAI,MAAM;YACR,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,MAAMD,2BAAyB,CAAC,QAAQ,CAAC,CAAC;aAC3C;YAED,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;SACrC;;;;;;;QAQD,MAAM,CAAC,SAAc,SAAS;YAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;aACjE;YAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;gBAChC,OAAO,mBAAmB,CAAC,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC,CAAC;aAC/F;YAED,OAAO,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SAC3C;QAqBD,SAAS,CACP,aAAgE,SAAS;YAEzE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,MAAMA,2BAAyB,CAAC,WAAW,CAAC,CAAC;aAC9C;YAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;YAEpE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC9B,OAAO,kCAAkC,CAAC,IAAI,CAAC,CAAC;aAGlB;YAChC,OAAO,+BAA+B,CAAC,IAAqC,CAAC,CAAC;SAC/E;QAaD,WAAW,CACT,YAA8E,EAC9E,aAAmD,EAAE;YAErD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,MAAMA,2BAAyB,CAAC,aAAa,CAAC,CAAC;aAChD;YACD,sBAAsB,CAAC,YAAY,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;YAEvD,MAAM,SAAS,GAAG,2BAA2B,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;YAC/E,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;YAEnE,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;gBAChC,MAAM,IAAI,SAAS,CAAC,gFAAgF,CAAC,CAAC;aACvG;YACD,IAAI,sBAAsB,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;gBAC9C,MAAM,IAAI,SAAS,CAAC,gFAAgF,CAAC,CAAC;aACvG;YAED,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;YAEF,yBAAyB,CAAC,OAAO,CAAC,CAAC;YAEnC,OAAO,SAAS,CAAC,QAAQ,CAAC;SAC3B;QAUD,MAAM,CAAC,WAAiD,EACjD,aAAmD,EAAE;YAC1D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,OAAO,mBAAmB,CAACA,2BAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;aACjE;YAED,IAAI,WAAW,KAAK,SAAS,EAAE;gBAC7B,OAAO,mBAAmB,CAAC,sCAAsC,CAAC,CAAC;aACpE;YACD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE;gBAClC,OAAO,mBAAmB,CACxB,IAAI,SAAS,CAAC,2EAA2E,CAAC,CAC3F,CAAC;aACH;YAED,IAAI,OAAmC,CAAC;YACxC,IAAI;gBACF,OAAO,GAAG,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;aAC9D;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC;aAC/B;YAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;gBAChC,OAAO,mBAAmB,CACxB,IAAI,SAAS,CAAC,2EAA2E,CAAC,CAC3F,CAAC;aACH;YACD,IAAI,sBAAsB,CAAC,WAAW,CAAC,EAAE;gBACvC,OAAO,mBAAmB,CACxB,IAAI,SAAS,CAAC,2EAA2E,CAAC,CAC3F,CAAC;aACH;YAED,OAAO,oBAAoB,CACzB,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CACrG,CAAC;SACH;;;;;;;;;;;;QAaD,GAAG;YACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,MAAMA,2BAAyB,CAAC,KAAK,CAAC,CAAC;aACxC;YAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAW,CAAC,CAAC;YAChD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;SACtC;QAcD,MAAM,CAAC,aAA+D,SAAS;YAC7E,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBAC3B,MAAMA,2BAAyB,CAAC,QAAQ,CAAC,CAAC;aAC3C;YAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;YACtE,OAAO,kCAAkC,CAAI,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;SAC3E;KAMF;IAED,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,EAAE;QAChD,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC5B,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC/B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACjC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC5B,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACzB,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC5B,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAC7B,CAAC,CAAC;IACH,IAAI,OAAOD,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;YAClE,KAAK,EAAE,gBAAgB;YACvB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IACD,IAAI,OAAOA,cAAM,CAAC,aAAa,KAAK,QAAQ,EAAE;QAC5C,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAEA,cAAM,CAAC,aAAa,EAAE;YACpE,KAAK,EAAE,cAAc,CAAC,SAAS,CAAC,MAAM;YACtC,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IAkBD;IAEA;aACgB,oBAAoB,CAAI,cAA8C,EAC9C,aAAkC,EAClC,eAA+C,EAC/C,aAAa,GAAG,CAAC,EACjB,gBAAgD,MAAM,CAAC;QAG7F,MAAM,MAAM,GAAsB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1E,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAEjC,MAAM,UAAU,GAAuC,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;QAChH,oCAAoC,CAClC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,CACjG,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;aACgB,wBAAwB,CACtC,cAA8C,EAC9C,aAAkC,EAClC,eAA+C;QAE/C,MAAM,MAAM,GAAuB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC3E,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAEjC,MAAM,UAAU,GAAiC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;QACvG,iCAAiC,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAEpH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,wBAAwB,CAAC,MAAsB;QACtD,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;QAC3B,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;QAC3B,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;QAChC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;IAC5B,CAAC;aAEe,gBAAgB,CAAC,CAAU;QACzC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE;YACzE,OAAO,KAAK,CAAC;SACd;QAED,OAAO,CAAC,YAAY,cAAc,CAAC;IACrC,CAAC;aAQe,sBAAsB,CAAC,MAAsB;QAG3D,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;YAChC,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;aAEgB,oBAAoB,CAAI,MAAyB,EAAE,MAAW;QAC5E,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QAEzB,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;YAC9B,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;YAC/B,OAAO,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SACjD;QAED,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,0BAA0B,CAAC,MAAM,CAAC,EAAE;YAC9D,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,eAAe;gBAC9C,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;aACxC,CAAC,CAAC;YACH,MAAM,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;SAC9C;QAED,MAAM,mBAAmB,GAAG,MAAM,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;QAClF,OAAO,oBAAoB,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;aAEe,mBAAmB,CAAI,MAAyB;QAG9D,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;QAEzB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO;SACR;QAED,iCAAiC,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,6BAA6B,CAAI,MAAM,CAAC,EAAE;YAC5C,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW;gBACtC,WAAW,CAAC,WAAW,EAAE,CAAC;aAC3B,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;SAC1C;IACH,CAAC;aAEe,mBAAmB,CAAI,MAAyB,EAAE,CAAM;QAItE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;QAExB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAE9B,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO;SACR;QAED,gCAAgC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE5C,IAAI,6BAA6B,CAAI,MAAM,CAAC,EAAE;YAC5C,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW;gBACtC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aAC5B,CAAC,CAAC;YAEH,MAAM,CAAC,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;SAC1C;aAAM;YAGL,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,eAAe;gBAC9C,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aAChC,CAAC,CAAC;YAEH,MAAM,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;SAC9C;IACH,CAAC;IAmBD;IAEA,SAASC,2BAAyB,CAAC,IAAY;QAC7C,OAAO,IAAI,SAAS,CAAC,4BAA4B,IAAI,uCAAuC,CAAC,CAAC;IAChG;;aCjhBgB,0BAA0B,CAAC,IAA4C,EAC5C,OAAe;QACxD,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,aAAa,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAC;QAC1C,mBAAmB,CAAC,aAAa,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAAC;QAC3E,OAAO;YACL,aAAa,EAAE,yBAAyB,CAAC,aAAa,CAAC;SACxD,CAAC;IACJ;;ICNA;IACA,MAAM,sBAAsB,GAAG,CAAC,KAAsB;QACpD,OAAO,KAAK,CAAC,UAAU,CAAC;IAC1B,CAAC,CAAC;IACF,IAAI;QACF,MAAM,CAAC,cAAc,CAAC,sBAAsB,EAAE,MAAM,EAAE;YACpD,KAAK,EAAE,MAAM;YACb,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IAAC,WAAM;;;KAGP;IAED;;;;;UAKqB,yBAAyB;QAI5C,YAAY,OAA4B;YACtC,sBAAsB,CAAC,OAAO,EAAE,CAAC,EAAE,2BAA2B,CAAC,CAAC;YAChE,OAAO,GAAG,0BAA0B,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;YACjE,IAAI,CAAC,uCAAuC,GAAG,OAAO,CAAC,aAAa,CAAC;SACtE;;;;QAKD,IAAI,aAAa;YACf,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,6BAA6B,CAAC,eAAe,CAAC,CAAC;aACtD;YACD,OAAO,IAAI,CAAC,uCAAuC,CAAC;SACrD;;;;QAKD,IAAI,IAAI;YACN,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,6BAA6B,CAAC,MAAM,CAAC,CAAC;aAC7C;YACD,OAAO,sBAAsB,CAAC;SAC/B;KACF;IAED,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,SAAS,EAAE;QAC3D,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACnC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAC3B,CAAC,CAAC;IACH,IAAI,OAAOD,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,yBAAyB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;YAC7E,KAAK,EAAE,2BAA2B;YAClC,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IAED;IAEA,SAAS,6BAA6B,CAAC,IAAY;QACjD,OAAO,IAAI,SAAS,CAAC,uCAAuC,IAAI,kDAAkD,CAAC,CAAC;IACtH,CAAC;aAEe,2BAA2B,CAAC,CAAM;QAChD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,yCAAyC,CAAC,EAAE;YACvF,OAAO,KAAK,CAAC;SACd;QAED,OAAO,CAAC,YAAY,yBAAyB,CAAC;IAChD;;IC7EA;IACA,MAAM,iBAAiB,GAAG;QACxB,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,IAAI;QACF,MAAM,CAAC,cAAc,CAAC,iBAAiB,EAAE,MAAM,EAAE;YAC/C,KAAK,EAAE,MAAM;YACb,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IAAC,WAAM;;;KAGP;IAED;;;;;UAKqB,oBAAoB;QAIvC,YAAY,OAA4B;YACtC,sBAAsB,CAAC,OAAO,EAAE,CAAC,EAAE,sBAAsB,CAAC,CAAC;YAC3D,OAAO,GAAG,0BAA0B,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;YACjE,IAAI,CAAC,kCAAkC,GAAG,OAAO,CAAC,aAAa,CAAC;SACjE;;;;QAKD,IAAI,aAAa;YACf,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;gBACjC,MAAM,wBAAwB,CAAC,eAAe,CAAC,CAAC;aACjD;YACD,OAAO,IAAI,CAAC,kCAAkC,CAAC;SAChD;;;;;QAMD,IAAI,IAAI;YACN,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;gBACjC,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;aACxC;YACD,OAAO,iBAAiB,CAAC;SAC1B;KACF;IAED,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,SAAS,EAAE;QACtD,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACnC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAC3B,CAAC,CAAC;IACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,oBAAoB,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;YACxE,KAAK,EAAE,sBAAsB;YAC7B,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IAED;IAEA,SAAS,wBAAwB,CAAC,IAAY;QAC5C,OAAO,IAAI,SAAS,CAAC,kCAAkC,IAAI,6CAA6C,CAAC,CAAC;IAC5G,CAAC;aAEe,sBAAsB,CAAC,CAAM;QAC3C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,oCAAoC,CAAC,EAAE;YAClF,OAAO,KAAK,CAAC;SACd;QAED,OAAO,CAAC,YAAY,oBAAoB,CAAC;IAC3C;;aCxEgB,kBAAkB,CAAO,QAAkC,EAClC,OAAe;QACtD,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;QAC9B,MAAM,YAAY,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,CAAC;QAC5C,MAAM,KAAK,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;QAC9B,MAAM,SAAS,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,SAAS,CAAC;QACtC,MAAM,YAAY,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,CAAC;QAC5C,OAAO;YACL,KAAK,EAAE,KAAK,KAAK,SAAS;gBACxB,SAAS;gBACT,+BAA+B,CAAC,KAAK,EAAE,QAAS,EAAE,GAAG,OAAO,0BAA0B,CAAC;YACzF,YAAY;YACZ,KAAK,EAAE,KAAK,KAAK,SAAS;gBACxB,SAAS;gBACT,+BAA+B,CAAC,KAAK,EAAE,QAAS,EAAE,GAAG,OAAO,0BAA0B,CAAC;YACzF,SAAS,EAAE,SAAS,KAAK,SAAS;gBAChC,SAAS;gBACT,mCAAmC,CAAC,SAAS,EAAE,QAAS,EAAE,GAAG,OAAO,8BAA8B,CAAC;YACrG,YAAY;SACb,CAAC;IACJ,CAAC;IAED,SAAS,+BAA+B,CACtC,EAA+B,EAC/B,QAA2B,EAC3B,OAAe;QAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,UAA+C,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IACtG,CAAC;IAED,SAAS,+BAA+B,CACtC,EAA+B,EAC/B,QAA2B,EAC3B,OAAe;QAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,UAA+C,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IACtG,CAAC;IAED,SAAS,mCAAmC,CAC1C,EAAsC,EACtC,QAA2B,EAC3B,OAAe;QAEf,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,KAAQ,EAAE,UAA+C,KAAK,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IACvH;;ICjCA;IAEA;;;;;;;;UAQa,eAAe;QAmB1B,YAAY,iBAAuD,EAAE,EACzD,sBAA6D,EAAE,EAC/D,sBAA6D,EAAE;YACzE,IAAI,cAAc,KAAK,SAAS,EAAE;gBAChC,cAAc,GAAG,IAAI,CAAC;aACvB;YAED,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;YACzF,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;YAExF,MAAM,WAAW,GAAG,kBAAkB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;YAC1E,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,EAAE;gBAC1C,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;aACxD;YACD,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,EAAE;gBAC1C,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;aACxD;YAED,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YACxE,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;YACrE,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YACxE,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;YAErE,IAAI,oBAAgE,CAAC;YACrE,MAAM,YAAY,GAAG,UAAU,CAAO,OAAO;gBAC3C,oBAAoB,GAAG,OAAO,CAAC;aAChC,CAAC,CAAC;YAEH,yBAAyB,CACvB,IAAI,EAAE,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,CAC/G,CAAC;YACF,oDAAoD,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAExE,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE;gBACnC,oBAAoB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;aAC1E;iBAAM;gBACL,oBAAoB,CAAC,SAAS,CAAC,CAAC;aACjC;SACF;;;;QAKD,IAAI,QAAQ;YACV,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;gBAC5B,MAAM,yBAAyB,CAAC,UAAU,CAAC,CAAC;aAC7C;YAED,OAAO,IAAI,CAAC,SAAS,CAAC;SACvB;;;;QAKD,IAAI,QAAQ;YACV,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;gBAC5B,MAAM,yBAAyB,CAAC,UAAU,CAAC,CAAC;aAC7C;YAED,OAAO,IAAI,CAAC,SAAS,CAAC;SACvB;KACF;IAED,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS,EAAE;QACjD,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC9B,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAC/B,CAAC,CAAC;IACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;YACnE,KAAK,EAAE,iBAAiB;YACxB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IAwCD,SAAS,yBAAyB,CAAO,MAA6B,EAC7B,YAA2B,EAC3B,qBAA6B,EAC7B,qBAAqD,EACrD,qBAA6B,EAC7B,qBAAqD;QAC5F,SAAS,cAAc;YACrB,OAAO,YAAY,CAAC;SACrB;QAED,SAAS,cAAc,CAAC,KAAQ;YAC9B,OAAO,wCAAwC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SAChE;QAED,SAAS,cAAc,CAAC,MAAW;YACjC,OAAO,wCAAwC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACjE;QAED,SAAS,cAAc;YACrB,OAAO,wCAAwC,CAAC,MAAM,CAAC,CAAC;SACzD;QAED,MAAM,CAAC,SAAS,GAAG,oBAAoB,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAC9D,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;QAEtF,SAAS,aAAa;YACpB,OAAO,yCAAyC,CAAC,MAAM,CAAC,CAAC;SAC1D;QAED,SAAS,eAAe,CAAC,MAAW;YAClC,2CAA2C,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5D,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QAED,MAAM,CAAC,SAAS,GAAG,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EACrE,qBAAqB,CAAC,CAAC;;QAG/D,MAAM,CAAC,aAAa,GAAG,SAAU,CAAC;QAClC,MAAM,CAAC,0BAA0B,GAAG,SAAU,CAAC;QAC/C,MAAM,CAAC,kCAAkC,GAAG,SAAU,CAAC;QACvD,8BAA8B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE7C,MAAM,CAAC,0BAA0B,GAAG,SAAU,CAAC;IACjD,CAAC;IAED,SAAS,iBAAiB,CAAC,CAAU;QACnC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,4BAA4B,CAAC,EAAE;YAC1E,OAAO,KAAK,CAAC;SACd;QAED,OAAO,CAAC,YAAY,eAAe,CAAC;IACtC,CAAC;IAED;IACA,SAAS,oBAAoB,CAAC,MAAuB,EAAE,CAAM;QAC3D,oCAAoC,CAClC,MAAM,CAAC,SAAS,CAAC,yBAAiE,EAClF,CAAC,CACF,CAAC;QACF,2CAA2C,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,SAAS,2CAA2C,CAAC,MAAuB,EAAE,CAAM;QAClF,+CAA+C,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;QACnF,4CAA4C,CAAC,MAAM,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;QAC5F,IAAI,MAAM,CAAC,aAAa,EAAE;;;;YAIxB,8BAA8B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SAC/C;IACH,CAAC;IAED,SAAS,8BAA8B,CAAC,MAAuB,EAAE,YAAqB;;QAIpF,IAAI,MAAM,CAAC,0BAA0B,KAAK,SAAS,EAAE;YACnD,MAAM,CAAC,kCAAkC,EAAE,CAAC;SAC7C;QAED,MAAM,CAAC,0BAA0B,GAAG,UAAU,CAAC,OAAO;YACpD,MAAM,CAAC,kCAAkC,GAAG,OAAO,CAAC;SACrD,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;IACtC,CAAC;IAED;IAEA;;;;;UAKa,gCAAgC;QAQ3C;YACE,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;SAC5C;;;;QAKD,IAAI,WAAW;YACb,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;gBAC7C,MAAM,oCAAoC,CAAC,aAAa,CAAC,CAAC;aAC3D;YAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,yBAAyB,CAAC;YAC/F,OAAO,6CAA6C,CAAC,kBAAwD,CAAC,CAAC;SAChH;QAMD,OAAO,CAAC,QAAW,SAAU;YAC3B,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;gBAC7C,MAAM,oCAAoC,CAAC,SAAS,CAAC,CAAC;aACvD;YAED,uCAAuC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACtD;;;;;QAMD,KAAK,CAAC,SAAc,SAAS;YAC3B,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;gBAC7C,MAAM,oCAAoC,CAAC,OAAO,CAAC,CAAC;aACrD;YAED,qCAAqC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SACrD;;;;;QAMD,SAAS;YACP,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE;gBAC7C,MAAM,oCAAoC,CAAC,WAAW,CAAC,CAAC;aACzD;YAED,yCAAyC,CAAC,IAAI,CAAC,CAAC;SACjD;KACF;IAED,MAAM,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,SAAS,EAAE;QAClE,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC7B,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC3B,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC/B,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAClC,CAAC,CAAC;IACH,IAAI,OAAOA,cAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,gCAAgC,CAAC,SAAS,EAAEA,cAAM,CAAC,WAAW,EAAE;YACpF,KAAK,EAAE,kCAAkC;YACzC,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;KACJ;IAED;IAEA,SAAS,kCAAkC,CAAU,CAAM;QACzD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,4BAA4B,CAAC,EAAE;YAC1E,OAAO,KAAK,CAAC;SACd;QAED,OAAO,CAAC,YAAY,gCAAgC,CAAC;IACvD,CAAC;IAED,SAAS,qCAAqC,CAAO,MAA6B,EAC7B,UAA+C,EAC/C,kBAA+C,EAC/C,cAAmC;QAItF,UAAU,CAAC,0BAA0B,GAAG,MAAM,CAAC;QAC/C,MAAM,CAAC,0BAA0B,GAAG,UAAU,CAAC;QAE/C,UAAU,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;QACpD,UAAU,CAAC,eAAe,GAAG,cAAc,CAAC;IAC9C,CAAC;IAED,SAAS,oDAAoD,CAAO,MAA6B,EAC7B,WAAuC;QACzG,MAAM,UAAU,GAAwC,MAAM,CAAC,MAAM,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC;QAElH,IAAI,kBAAkB,GAAG,CAAC,KAAQ;YAChC,IAAI;gBACF,uCAAuC,CAAC,UAAU,EAAE,KAAqB,CAAC,CAAC;gBAC3E,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;aACvC;YAAC,OAAO,gBAAgB,EAAE;gBACzB,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;aAC9C;SACF,CAAC;QAEF,IAAI,cAAc,GAAwB,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAE/E,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE;YACvC,kBAAkB,GAAG,KAAK,IAAI,WAAW,CAAC,SAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;SACzE;QACD,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE;YACnC,cAAc,GAAG,MAAM,WAAW,CAAC,KAAM,CAAC,UAAU,CAAC,CAAC;SACvD;QAED,qCAAqC,CAAC,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;IAChG,CAAC;IAED,SAAS,+CAA+C,CAAC,UAAiD;QACxG,UAAU,CAAC,mBAAmB,GAAG,SAAU,CAAC;QAC5C,UAAU,CAAC,eAAe,GAAG,SAAU,CAAC;IAC1C,CAAC;IAED,SAAS,uCAAuC,CAAI,UAA+C,EAAE,KAAQ;QAC3G,MAAM,MAAM,GAAG,UAAU,CAAC,0BAA0B,CAAC;QACrD,MAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,yBAA+D,CAAC;QAC5G,IAAI,CAAC,gDAAgD,CAAC,kBAAkB,CAAC,EAAE;YACzE,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;SAC7E;;;QAKD,IAAI;YACF,sCAAsC,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;SACnE;QAAC,OAAO,CAAC,EAAE;;YAEV,2CAA2C,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAEvD,MAAM,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;SACrC;QAED,MAAM,YAAY,GAAG,8CAA8C,CAAC,kBAAkB,CAAC,CAAC;QACxF,IAAI,YAAY,KAAK,MAAM,CAAC,aAAa,EAAE;YAEzC,8BAA8B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SAC9C;IACH,CAAC;IAED,SAAS,qCAAqC,CAAC,UAAiD,EAAE,CAAM;QACtG,oBAAoB,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,SAAS,gDAAgD,CAAO,UAA+C,EAC/C,KAAQ;QACtE,MAAM,gBAAgB,GAAG,UAAU,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC/D,OAAO,oBAAoB,CAAC,gBAAgB,EAAE,SAAS,EAAE,CAAC;YACxD,oBAAoB,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;YAC/D,MAAM,CAAC,CAAC;SACT,CAAC,CAAC;IACL,CAAC;IAED,SAAS,yCAAyC,CAAI,UAA+C;QACnG,MAAM,MAAM,GAAG,UAAU,CAAC,0BAA0B,CAAC;QACrD,MAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,yBAA+D,CAAC;QAE5G,oCAAoC,CAAC,kBAAkB,CAAC,CAAC;QAEzD,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;QAC1D,2CAA2C,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED;IAEA,SAAS,wCAAwC,CAAO,MAA6B,EAAE,KAAQ;QAG7F,MAAM,UAAU,GAAG,MAAM,CAAC,0BAA0B,CAAC;QAErD,IAAI,MAAM,CAAC,aAAa,EAAE;YACxB,MAAM,yBAAyB,GAAG,MAAM,CAAC,0BAA0B,CACnB;YAChD,OAAO,oBAAoB,CAAC,yBAAyB,EAAE;gBACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;gBAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC9B,IAAI,KAAK,KAAK,UAAU,EAAE;oBACxB,MAAM,QAAQ,CAAC,YAAY,CAAC;iBAED;gBAC7B,OAAO,gDAAgD,CAAO,UAAU,EAAE,KAAK,CAAC,CAAC;aAClF,CAAC,CAAC;SACJ;QAED,OAAO,gDAAgD,CAAO,UAAU,EAAE,KAAK,CAAC,CAAC;IACnF,CAAC;IAED,SAAS,wCAAwC,CAAC,MAAuB,EAAE,MAAW;;;QAGpF,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,SAAS,wCAAwC,CAAO,MAA6B;;QAEnF,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;QAElC,MAAM,UAAU,GAAG,MAAM,CAAC,0BAA0B,CAAC;QACrD,MAAM,YAAY,GAAG,UAAU,CAAC,eAAe,EAAE,CAAC;QAClD,+CAA+C,CAAC,UAAU,CAAC,CAAC;;QAG5D,OAAO,oBAAoB,CAAC,YAAY,EAAE;YACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;gBACjC,MAAM,QAAQ,CAAC,YAAY,CAAC;aAC7B;YACD,oCAAoC,CAAC,QAAQ,CAAC,yBAA+D,CAAC,CAAC;SAChH,EAAE,CAAC;YACF,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAChC,MAAM,QAAQ,CAAC,YAAY,CAAC;SAC7B,CAAC,CAAC;IACL,CAAC;IAED;IAEA,SAAS,yCAAyC,CAAC,MAAuB;;QAMxE,8BAA8B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;;QAG9C,OAAO,MAAM,CAAC,0BAA0B,CAAC;IAC3C,CAAC;IAED;IAEA,SAAS,oCAAoC,CAAC,IAAY;QACxD,OAAO,IAAI,SAAS,CAClB,8CAA8C,IAAI,yDAAyD,CAAC,CAAC;IACjH,CAAC;IAED;IAEA,SAAS,yBAAyB,CAAC,IAAY;QAC7C,OAAO,IAAI,SAAS,CAClB,6BAA6B,IAAI,wCAAwC,CAAC,CAAC;IAC/E;;ICzfA,MAAMI,SAAO,GAAG;QACd,cAAc;QACd,+BAA+B;QAC/B,4BAA4B;QAC5B,yBAAyB;QACzB,2BAA2B;QAC3B,wBAAwB;QAExB,cAAc;QACd,+BAA+B;QAC/B,2BAA2B;QAE3B,yBAAyB;QACzB,oBAAoB;QAEpB,eAAe;QACf,gCAAgC;KACjC,CAAC;IAEF;IACA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;QAClC,KAAK,MAAM,IAAI,IAAIA,SAAO,EAAE;YAC1B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAACA,SAAO,EAAE,IAAI,CAAC,EAAE;gBACvD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE;oBACnC,KAAK,EAAEA,SAAO,CAAC,IAA8B,CAAC;oBAC9C,QAAQ,EAAE,IAAI;oBACd,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAC;aACJ;SACF;;;;;;;;;;;;;;;;;;;;;;;"}
prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es6.min.jsnew file+2
@@ -0,0 +1,2 @@
1+!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.bytesFilled<r.elementSize)return;Pe(e);const o=r.bytesFilled%r.elementSize;if(o>0){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})}));
2+//# sourceMappingURL=polyfill.es6.min.js.map
prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es6.min.js.mapnew file+1
@@ -0,0 +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":["/// <reference lib=\"es2015.symbol\" />\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","/// <reference lib=\"dom\" />\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<T>(executor: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void\n) => void): Promise<T> {\n return new originalPromise(executor);\n}\n\nexport function promiseResolvedWith<T>(value: T | PromiseLike<T>): Promise<T> {\n return originalPromiseResolve(value);\n}\n\nexport function promiseRejectedWith<T = never>(reason: any): Promise<T> {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => TResult1 | PromiseLike<TResult1>,\n onRejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\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<TResult1 | TResult2>;\n}\n\nexport function uponPromise<T>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => void | PromiseLike<void>,\n onRejected?: (reason: any) => void | PromiseLike<void>): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment<T>(promise: Promise<T>, onFulfilled: (value: T) => void | PromiseLike<void>): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise<unknown>, onRejected: (reason: any) => void | PromiseLike<void>): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike<TResult1>,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise<unknown>): 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<T, A extends any[], R>(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<T, A extends any[], R>(F: (this: T, ...fnArgs: A) => R | PromiseLike<R>,\n V: T,\n args: A): Promise<R> {\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<T> {\n _elements: T[];\n _next: Node<T> | 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<T> {\n private _front: Node<T>;\n private _back: Node<T>;\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<R>(reader: ReadableStreamReader<R>, stream: ReadableStream<R>) {\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<any>, reason: any): Promise<undefined> {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader<any>) {\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<any>) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader<any>, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader<any>) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader<any>, 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<any>, 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<any>) {\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","/// <reference lib=\"es2015.core\" />\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","/// <reference lib=\"es2015.core\" />\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<T extends any>(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<T extends any>(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<T> = {\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<R>(stream: ReadableStream): ReadableStreamDefaultReader<R> {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest<R>(stream: ReadableStream<R>,\n readRequest: ReadRequest<R>): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader<R>)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest<R>(stream: ReadableStream<R>, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader<R>;\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<R>(stream: ReadableStream<R>): number {\n return (stream._reader as ReadableStreamDefaultReader<R>)._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<R> {\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<R = any> {\n /** @internal */\n _ownerReadableStream!: ReadableStream<R>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue<ReadRequest<R>>;\n\n constructor(stream: ReadableStream<R>) {\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<undefined> {\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<void> {\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<ReadableStreamDefaultReadResult<R>> {\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<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\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<R = any>(x: any): x is ReadableStreamDefaultReader<R> {\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<R>(reader: ReadableStreamDefaultReader<R>,\n readRequest: ReadRequest<R>): 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<any>);\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","/// <reference lib=\"es2018.asynciterable\" />\n\nexport let AsyncIteratorPrototype: AsyncIterable<any> | 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<any>) {\n return this;\n }\n };\n Object.defineProperty(AsyncIteratorPrototype, Symbol.asyncIterator, { enumerable: false });\n}\n","/// <reference lib=\"es2018.asynciterable\" />\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<R> extends AsyncIterator<R> {\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl<R> {\n private readonly _reader: ReadableStreamDefaultReader<R>;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise<ReadableStreamDefaultReadResult<R>> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader<R>, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise<ReadableStreamDefaultReadResult<R>> {\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<ReadableStreamDefaultReadResult<any>> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise<ReadableStreamDefaultReadResult<R>> {\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<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\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<ReadableStreamDefaultReadResult<any>> {\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<R> implements ReadableStreamAsyncIterator<R> {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl<R>;\n\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance<any> = {\n next(this: ReadableStreamAsyncIteratorInstance<any>): Promise<ReadableStreamDefaultReadResult<any>> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance<any>, value: any): Promise<ReadableStreamDefaultReadResult<any>> {\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<R>(stream: ReadableStream<R>,\n preventCancel: boolean): ReadableStreamAsyncIterator<R> {\n const reader = AcquireReadableStreamDefaultReader<R>(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance<R> = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator<R = any>(x: any): x is ReadableStreamAsyncIterator<R> {\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<any>)._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","/// <reference lib=\"es2015.core\" />\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<T extends any[]>(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<T extends ArrayBufferLike>(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<T> {\n _queue: SimpleQueue<T>;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair<T> {\n value: T;\n size: number;\n}\n\nexport function DequeueValue<T>(container: QueueContainer<QueuePair<T>>): 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<T>(container: QueueContainer<QueuePair<T>>, 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<T>(container: QueueContainer<QueuePair<T>>): 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<T>(container: QueueContainer<T>) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue<T>();\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<T extends ArrayBufferView = ArrayBufferView> {\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<T extends ArrayBufferView = ArrayBufferView> =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor<T>;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor<Uint8Array>;\n readerType: 'default';\n}\n\ninterface BYOBPullIntoDescriptor<T extends ArrayBufferView = ArrayBufferView> {\n buffer: ArrayBufferLike;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor<T>;\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<ByteQueueElement>;\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<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue<PullIntoDescriptor>;\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<void> {\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<Uint8Array>): 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<T extends ArrayBufferView>(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor<T>\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<T>(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<T extends ArrayBufferView>(\n pullIntoDescriptor: PullIntoDescriptor<T>\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<T extends ArrayBufferView>(\n controller: ReadableByteStreamController,\n view: T,\n readIntoRequest: ReadIntoRequest<T>\n): void {\n const stream = controller._controlledReadableByteStream;\n\n let elementSize = 1;\n if (view.constructor !== DataView) {\n elementSize = (view.constructor as ArrayBufferViewConstructor<T>).BYTES_PER_ELEMENT;\n }\n\n const ctor = view.constructor as ArrayBufferViewConstructor<T>;\n\n // try {\n const buffer = TransferArrayBuffer(view.buffer);\n // } catch (e) {\n // readIntoRequest._errorSteps(e);\n // return;\n // }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor<T> = {\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<T>(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<T>(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<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\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<void> = () => undefined;\n let pullAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise<void> = () => 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<T extends ArrayBufferView> = {\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<T extends ArrayBufferView>(stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest<T>): 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<T extends ArrayBufferView> {\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<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue<ReadIntoRequest<any>>;\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<undefined> {\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<void> {\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<T extends ArrayBufferView>(view: T): Promise<ReadableStreamBYOBReadResult<T>> {\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<T>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamBYOBReadResult<T>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest<T> = {\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<T extends ArrayBufferView>(\n reader: ReadableStreamBYOBReader,\n view: T,\n readIntoRequest: ReadIntoRequest<T>\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<T>(strategy: QueuingStrategy<T>): QueuingStrategySizeCallback<T> {\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<T>(init: QueuingStrategy<T> | null | undefined,\n context: string): QueuingStrategy<T> {\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<T>(fn: QueuingStrategySizeCallback<T>,\n context: string): QueuingStrategySizeCallback<T> {\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<W>(original: UnderlyingSink<W> | null,\n context: string): ValidatedUnderlyingSink<W> {\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<void> {\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<void> {\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<W>(\n fn: UnderlyingSinkWriteCallback<W>,\n original: UnderlyingSink<W>,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise<void> {\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<undefined>;\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<W = any> {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter<W> | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController<W>;\n /** @internal */\n _writeRequests!: SimpleQueue<WriteRequest>;\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<W>, strategy?: QueuingStrategy<W>);\n constructor(rawUnderlyingSink: UnderlyingSink<W> | null | undefined = {},\n rawStrategy: QueuingStrategy<W> | 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<void> {\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<W> {\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<W>(stream: WritableStream<W>): WritableStreamDefaultWriter<W> {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream<W>(startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<W> = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream<W> = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController<W> = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream<W>(stream: WritableStream<W>) {\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<undefined> {\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<undefined>((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<any>): Promise<undefined> {\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<undefined>((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<undefined> {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise<undefined>((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<W = any> {\n /** @internal */\n _ownerWritableStream: WritableStream<W>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\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<undefined>;\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<W>) {\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<undefined> {\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<undefined> {\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<void> {\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<void> {\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<void>;\n write(chunk: W = undefined!): Promise<void> {\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<W = any>(x: any): x is WritableStreamDefaultWriter<W> {\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<undefined> {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise<undefined> {\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<W>(writer: WritableStreamDefaultWriter<W>, chunk: W): Promise<undefined> {\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> = 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<W = any> {\n /** @internal */\n _controlledWritableStream!: WritableStream<W>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<QueueRecord<W>>>;\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<W>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise<void>;\n /** @internal */\n _closeAlgorithm!: () => Promise<void>;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise<void>;\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<void> {\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<any> {\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<W>(stream: WritableStream<W>,\n controller: WritableStreamDefaultController<W>,\n startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\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<W>(stream: WritableStream<W>,\n underlyingSink: ValidatedUnderlyingSink<W>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void> = () => undefined;\n let writeAlgorithm: (chunk: W) => Promise<void> = () => promiseResolvedWith(undefined);\n let closeAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let abortAlgorithm: (reason: any) => Promise<void> = () => 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<any>) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose<W>(controller: WritableStreamDefaultController<W>) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize<W>(controller: WritableStreamDefaultController<W>,\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<any>): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite<W>(controller: WritableStreamDefaultController<W>,\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<W>(controller: WritableStreamDefaultController<W>) {\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<any>, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController<any>) {\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<W>(controller: WritableStreamDefaultController<W>, 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<any>): 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<any>, 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","/// <reference lib=\"dom\" />\nexport const NativeDOMException: typeof DOMException | undefined =\n typeof DOMException !== 'undefined' ? DOMException : undefined;\n","/// <reference types=\"node\" />\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<T>(source: ReadableStream<T>,\n dest: WritableStream<T>,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise<undefined> {\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<T>(source);\n const writer = AcquireWritableStreamDefaultWriter<T>(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<void>(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<void>> = [];\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<void>((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<boolean> {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise<boolean>((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<void> {\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<void>,\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<void>, action: () => void) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise<unknown>, 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<R> {\n /** @internal */\n _controlledReadableStream!: ReadableStream<R>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<R>>;\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<R>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\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<void> {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest<R>): 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<R = any>(x: any): x is ReadableStreamDefaultController<R> {\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<any>): 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<any>): 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<any>) {\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<any>) {\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<R>(\n controller: ReadableStreamDefaultController<R>,\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<any>, 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<any>\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<any>\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController<any>\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<R>(stream: ReadableStream<R>,\n controller: ReadableStreamDefaultController<R>,\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>) {\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<R>(\n stream: ReadableStream<R>,\n underlyingSource: ValidatedUnderlyingSource<R>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>\n) {\n const controller: ReadableStreamDefaultController<R> = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void> = () => undefined;\n let pullAlgorithm: () => Promise<void> = () => promiseResolvedWith(undefined);\n let cancelAlgorithm: (reason: any) => Promise<void> = () => 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<R>(stream: ReadableStream<R>,\n cloneForBranch2: boolean): [ReadableStream<R>, ReadableStream<R>] {\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<R>, ReadableStream<R>];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee<R>(stream: ReadableStream<R>,\n cloneForBranch2: boolean): [ReadableStream<R>, ReadableStream<R>] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader<R>(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<R>;\n let branch2: ReadableStream<R>;\n\n let resolveCancelPromise: (value: undefined | Promise<undefined>) => void;\n const cancelPromise = newPromise<undefined>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise<void> {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest<R> = {\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<R>,\n chunk1\n );\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(\n branch2._readableStreamController as ReadableStreamDefaultController<R>,\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<R>);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController as ReadableStreamDefaultController<R>);\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<void> {\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<void> {\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>, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController as ReadableStreamDefaultController<R>, 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<Uint8Array> = 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<undefined>) => void;\n const cancelPromise = newPromise<void>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader<Uint8Array>) {\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<Uint8Array> = {\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<Uint8Array>(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<ArrayBufferView> = {\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<void> {\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<void> {\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<void> {\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<void> {\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<R>(\n source: UnderlyingSource<R> | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource<R> {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource<R> | 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<void> {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback<R>(\n fn: UnderlyingDefaultOrByteSourcePullCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): (controller: ReadableStreamController<R>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback<R>(\n fn: UnderlyingDefaultOrByteSourceStartCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback<R> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => 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<Uint8Array> & {\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<R = any> {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader<R> | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController<R> | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>);\n constructor(rawUnderlyingSource: UnderlyingSource<R> | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy<R> | 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<void> {\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<R>;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader<R> | 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<RS extends ReadableStream>(\n transform: { readable: RS; writable: WritableStream<R> },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough<RS extends ReadableStream>(\n rawTransform: { readable: RS; writable: WritableStream<R> } | 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<R>, options?: StreamPipeOptions): Promise<void>;\n pipeTo(destination: WritableStream<R> | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise<void> {\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<R>(\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<R>, ReadableStream<R>] {\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<R>;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator<R> {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator<R>(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator]: (options?: ReadableStreamIteratorOptions) => ReadableStreamAsyncIterator<R>;\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<R>(startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<R> = () => 1): ReadableStream<R> {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: ReadableStream<R> = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController<R> = 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<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>\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<R>(stream: ReadableStream<R>, reason: any): Promise<undefined> {\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<R>(stream: ReadableStream<R>): 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<R>(reader)) {\n reader._readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n reader._readRequests = new SimpleQueue();\n }\n}\n\nexport function ReadableStreamError<R>(stream: ReadableStream<R>, 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<R>(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<R> = ReadableStreamDefaultReader<R> | 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<RS extends ReadableStream, WS extends WritableStream>(\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<ArrayBufferView> {\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<any> {\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<I, O>(original: Transformer<I, O> | null,\n context: string): ValidatedTransformer<I, O> {\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<I, O>(\n fn: TransformerFlushCallback<O>,\n original: Transformer<I, O>,\n context: string\n): (controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback<I, O>(\n fn: TransformerStartCallback<O>,\n original: Transformer<I, O>,\n context: string\n): TransformerStartCallback<O> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback<I, O>(\n fn: TransformerTransformCallback<I, O>,\n original: Transformer<I, O>,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController<O>) => 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<I = any, O = any> {\n /** @internal */\n _writable!: WritableStream<I>;\n /** @internal */\n _readable!: ReadableStream<O>;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise<void>;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController<O>;\n\n constructor(\n transformer?: Transformer<I, O>,\n writableStrategy?: QueuingStrategy<I>,\n readableStrategy?: QueuingStrategy<O>\n );\n constructor(rawTransformer: Transformer<I, O> | null | undefined = {},\n rawWritableStrategy: QueuingStrategy<I> | null | undefined = {},\n rawReadableStrategy: QueuingStrategy<O> | 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>) => void;\n const startPromise = newPromise<void>(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<O> {\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<I> {\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<I, O>(startAlgorithm: () => void | PromiseLike<void>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I> = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O> = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream<I, O> = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike<void>) => void;\n const startPromise = newPromise<void>(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController<O> = 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<I, O>(stream: TransformStream<I, O>,\n startPromise: Promise<void>,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I>,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O>) {\n function startAlgorithm(): Promise<void> {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise<void> {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise<void> {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise<void> {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise<void> {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise<void> {\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<any>,\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<O> {\n /** @internal */\n _controlledTransformStream: TransformStream<any, O>;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise<void>;\n /** @internal */\n _flushAlgorithm: () => Promise<void>;\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<O>);\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<O = any>(x: any): x is TransformStreamDefaultController<O> {\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<I, O>(stream: TransformStream<I, O>,\n controller: TransformStreamDefaultController<O>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>) {\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<I, O>(stream: TransformStream<I, O>,\n transformer: ValidatedTransformer<I, O>) {\n const controller: TransformStreamDefaultController<O> = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm = (chunk: I): Promise<void> => {\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<void> = () => 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<any>) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue<O>(controller: TransformStreamDefaultController<O>, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController<O>;\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<any>, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform<I, O>(controller: TransformStreamDefaultController<O>,\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<O>(controller: TransformStreamDefaultController<O>) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController as ReadableStreamDefaultController<O>;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm<I, O>(stream: TransformStream<I, O>, chunk: I): Promise<void> {\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<I, O>(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform<I, O>(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream: TransformStream, reason: any): Promise<void> {\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<I, O>(stream: TransformStream<I, O>): Promise<void> {\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<O>);\n }, r => {\n TransformStreamError(stream, r);\n throw readable._storedError;\n });\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise<void> {\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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"}
prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es6.mjsnew file+4230

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.es6.mjs.mapnew file+1

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.jsnew file+4382

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.js.mapnew file+1

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.min.jsnew file+2

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.min.js.mapnew file+1

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.mjsnew file+4360

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/polyfill.mjs.mapnew file+1

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es2018.jsnew file+4213

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es2018.js.mapnew file+1

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjsnew file+4191

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs.mapnew file+1

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es6.jsnew file+4224

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es6.js.mapnew file+1

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjsnew file+4202

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs.mapnew file+1

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.jsnew file+4354

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.js.mapnew file+1

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.mjsnew file+4332

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/ponyfill.mjs.mapnew file+1

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/types/polyfill.d.tsnew file+771

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/types/ts3.6/polyfill.d.tsnew file+771

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/dist/types/tsdoc-metadata.jsonnew file+11

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/es2018/package.jsonnew file+7

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/es6/package.jsonnew file+7

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/package.jsonnew file+76

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/ponyfill/es2018/package.jsonnew file+6

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/ponyfill/es6/package.jsonnew file+6

This diff is too big to show here.

prybar_assets/nodejs/node_modules/web-streams-polyfill/ponyfill/package.jsonnew file+6

This diff is too big to show here.

prybar_assets/nodejs/package.jsonnew file+6

This diff is too big to show here.

prybar_assets/nodejs/readline-sync.jsdeleted−1329

This diff is too big to show here.

prybar_assets/nodejs/runCode.jsnew file+4

This diff is too big to show here.

run_no_ptynew file+15

This diff is too big to show here.

run_tests+8−2

This diff is too big to show here.

run_tests_languagenew file+34

This diff is too big to show here.

scripts/docker-install.sh+25−14

This diff is too big to show here.

test_files/global_bug.js+7−3

This diff is too big to show here.

test_files/global_require.js → test_files/global_bug_submodule.jsrenamed+1

This diff is too big to show here.

test_files/main_module_scoped_to_global.jsnew file+5

This diff is too big to show here.

test_files/main_module_scoped_to_global_submodule.jsnew file+1

This diff is too big to show here.

test_files/module_patching.js+1

This diff is too big to show here.

test_files/node_modules/node-fetch/package.jsonnew file+13

This diff is too big to show here.

test_files/node_modules/node-fetch/src/index.jsnew file

No changes to the content.

test_files/package-lock.jsonnew file+50

This diff is too big to show here.

test_files/package.jsonnew file+14

This diff is too big to show here.

test_files/require_node_fetch.jsnew file+3

This diff is too big to show here.

tests/clojure/run_code.exp+1−2

This diff is too big to show here.

tests/julia/header.exp+2−2

This diff is too big to show here.

tests/nodejs/confirm.expnew file+18

This diff is too big to show here.

tests/nodejs/err.exp+1−12

This diff is too big to show here.

tests/nodejs/global_bug.exp+1−1

This diff is too big to show here.

tests/nodejs/header.exp+1−1

This diff is too big to show here.

tests/nodejs/main_module_scoped_to_global.expnew file+10

This diff is too big to show here.

tests/nodejs/module_patching.exp+1−1

This diff is too big to show here.

tests/nodejs/node_fetch.expnew file+14

This diff is too big to show here.

tests/nodejs/prompt_escape.expnew file+15

This diff is too big to show here.

tests/nodejs/prompt_no_tty.expnew file+13

This diff is too big to show here.

tests/nodejs/prompt_tty.expnew file+35

This diff is too big to show here.

tests/nodejs/prompt_tty_bounds.expnew file+39

This diff is too big to show here.

tests/nodejs/prompt_tty_escapes.expnew file+34

This diff is too big to show here.

tests/nodejs/repl_test.gonew file+608

This diff is too big to show here.

tests/nodejs/run_file.exp+3−11

This diff is too big to show here.

tests/tcl/1_plus_1.exp → tests/tcl/1_plus_1.exp_skiprenamed

The content is the same.

utils/language.go+4−3

This diff is too big to show here.

utils/utils.go+6−1

This diff is too big to show here.

vendor/github.com/chzyer/readline/.gitignoredeleted−1

This diff is too big to show here.

vendor/github.com/chzyer/readline/.travis.ymldeleted−8

This diff is too big to show here.

vendor/github.com/chzyer/readline/CHANGELOG.mddeleted−58

This diff is too big to show here.

vendor/github.com/chzyer/readline/README.mddeleted−114

This diff is too big to show here.

vendor/github.com/chzyer/readline/ansi_windows.godeleted−249

This diff is too big to show here.

vendor/github.com/chzyer/readline/complete.godeleted−285

This diff is too big to show here.

vendor/github.com/chzyer/readline/complete_helper.godeleted−165

This diff is too big to show here.

vendor/github.com/chzyer/readline/complete_segment.godeleted−82

This diff is too big to show here.

vendor/github.com/chzyer/readline/history.godeleted−330

This diff is too big to show here.

vendor/github.com/chzyer/readline/operation.godeleted−531

This diff is too big to show here.

vendor/github.com/chzyer/readline/password.godeleted−33

This diff is too big to show here.

vendor/github.com/chzyer/readline/rawreader_windows.godeleted−125

This diff is too big to show here.

vendor/github.com/chzyer/readline/readline.godeleted−326

This diff is too big to show here.

vendor/github.com/chzyer/readline/remote.godeleted−475

This diff is too big to show here.

vendor/github.com/chzyer/readline/runebuf.godeleted−629

This diff is too big to show here.

vendor/github.com/chzyer/readline/runes.godeleted−223

This diff is too big to show here.

vendor/github.com/chzyer/readline/search.godeleted−164

This diff is too big to show here.

vendor/github.com/chzyer/readline/std.godeleted−197

This diff is too big to show here.

vendor/github.com/chzyer/readline/std_windows.godeleted−9

This diff is too big to show here.

vendor/github.com/chzyer/readline/term.godeleted−123

This diff is too big to show here.

vendor/github.com/chzyer/readline/term_bsd.godeleted−29

This diff is too big to show here.

vendor/github.com/chzyer/readline/term_linux.godeleted−33

This diff is too big to show here.

vendor/github.com/chzyer/readline/term_solaris.godeleted−32

This diff is too big to show here.

vendor/github.com/chzyer/readline/term_unix.godeleted−24

This diff is too big to show here.

vendor/github.com/chzyer/readline/term_windows.godeleted−171

This diff is too big to show here.

vendor/github.com/chzyer/readline/terminal.godeleted−238

This diff is too big to show here.

vendor/github.com/chzyer/readline/utils.godeleted−277

This diff is too big to show here.

vendor/github.com/chzyer/readline/utils_unix.godeleted−83

This diff is too big to show here.

vendor/github.com/chzyer/readline/utils_windows.godeleted−41

This diff is too big to show here.

vendor/github.com/chzyer/readline/vim.godeleted−176

This diff is too big to show here.

vendor/github.com/chzyer/readline/windows_api.godeleted−152

This diff is too big to show here.

vendor/golang.org/x/sys/AUTHORSdeleted−3

This diff is too big to show here.

vendor/golang.org/x/sys/CONTRIBUTORSdeleted−3

This diff is too big to show here.

vendor/golang.org/x/sys/LICENSEdeleted−27

This diff is too big to show here.

vendor/golang.org/x/sys/PATENTSdeleted−22

This diff is too big to show here.

vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.godeleted−30

This diff is too big to show here.

vendor/golang.org/x/sys/unix/.gitignoredeleted−2

This diff is too big to show here.

vendor/golang.org/x/sys/unix/README.mddeleted−184

This diff is too big to show here.

vendor/golang.org/x/sys/unix/affinity_linux.godeleted−86

This diff is too big to show here.

vendor/golang.org/x/sys/unix/aliases.godeleted−15

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_aix_ppc64.sdeleted−17

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_bsd_386.sdeleted−29

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_bsd_amd64.sdeleted−29

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_bsd_arm.sdeleted−29

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_bsd_arm64.sdeleted−29

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_linux_386.sdeleted−65

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_linux_amd64.sdeleted−57

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_linux_arm.sdeleted−56

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_linux_arm64.sdeleted−52

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_linux_mips64x.sdeleted−56

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_linux_mipsx.sdeleted−54

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_linux_ppc64x.sdeleted−44

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_linux_riscv64.sdeleted−47

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_linux_s390x.sdeleted−56

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_openbsd_mips64.sdeleted−29

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_solaris_amd64.sdeleted−17

This diff is too big to show here.

vendor/golang.org/x/sys/unix/asm_zos_s390x.sdeleted−426

This diff is too big to show here.

vendor/golang.org/x/sys/unix/bluetooth_linux.godeleted−36

This diff is too big to show here.

vendor/golang.org/x/sys/unix/cap_freebsd.godeleted−196

This diff is too big to show here.

vendor/golang.org/x/sys/unix/constants.godeleted−14

This diff is too big to show here.

vendor/golang.org/x/sys/unix/dev_aix_ppc.godeleted−27

This diff is too big to show here.

vendor/golang.org/x/sys/unix/dev_aix_ppc64.godeleted−29

This diff is too big to show here.

vendor/golang.org/x/sys/unix/dev_darwin.godeleted−24

This diff is too big to show here.

vendor/golang.org/x/sys/unix/dev_dragonfly.godeleted−30

This diff is too big to show here.

vendor/golang.org/x/sys/unix/dev_freebsd.godeleted−30

This diff is too big to show here.

vendor/golang.org/x/sys/unix/dev_linux.godeleted−42

This diff is too big to show here.

vendor/golang.org/x/sys/unix/dev_netbsd.godeleted−29

This diff is too big to show here.

vendor/golang.org/x/sys/unix/dev_openbsd.godeleted−29

This diff is too big to show here.

vendor/golang.org/x/sys/unix/dev_zos.godeleted−29

This diff is too big to show here.

vendor/golang.org/x/sys/unix/dirent.godeleted−103

This diff is too big to show here.

vendor/golang.org/x/sys/unix/endian_big.godeleted−10

This diff is too big to show here.

vendor/golang.org/x/sys/unix/endian_little.godeleted−10

This diff is too big to show here.

vendor/golang.org/x/sys/unix/env_unix.godeleted−32

This diff is too big to show here.

vendor/golang.org/x/sys/unix/epoll_zos.godeleted−221

This diff is too big to show here.

vendor/golang.org/x/sys/unix/errors_freebsd_386.godeleted−233

This diff is too big to show here.

vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go−233

This diff is too big to show here.

vendor/golang.org/x/sys/unix/errors_freebsd_arm.go−226

This diff is too big to show here.

vendor/golang.org/x/sys/unix/errors_freebsd_arm64.go−17

This diff is too big to show here.

vendor/golang.org/x/sys/unix/fcntl.go−37

This diff is too big to show here.

vendor/golang.org/x/sys/unix/fcntl_darwin.go−24

This diff is too big to show here.

vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go−14

This diff is too big to show here.

vendor/golang.org/x/sys/unix/fdset.go−30

This diff is too big to show here.

vendor/golang.org/x/sys/unix/fstatfs_zos.go−164

This diff is too big to show here.

vendor/golang.org/x/sys/unix/gccgo.go−60

This diff is too big to show here.

vendor/golang.org/x/sys/unix/gccgo_c.c−45

This diff is too big to show here.

vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go−21

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ioctl.go−75

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ioctl_zos.go−74

This diff is too big to show here.

vendor/golang.org/x/sys/unix/mkall.sh−243

This diff is too big to show here.

vendor/golang.org/x/sys/unix/mkerrors.sh−750

This diff is too big to show here.

vendor/golang.org/x/sys/unix/pagesize_unix.go−16

This diff is too big to show here.

vendor/golang.org/x/sys/unix/pledge_openbsd.go−163

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ptrace_darwin.go−12

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ptrace_ios.go−12

This diff is too big to show here.

vendor/golang.org/x/sys/unix/race.go−31

This diff is too big to show here.

vendor/golang.org/x/sys/unix/race0.go−26

This diff is too big to show here.

vendor/golang.org/x/sys/unix/readdirent_getdents.go−13

This diff is too big to show here.

vendor/golang.org/x/sys/unix/readdirent_getdirentries.go−20

This diff is too big to show here.

vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go−16

This diff is too big to show here.

vendor/golang.org/x/sys/unix/sockcmsg_linux.go−36

This diff is too big to show here.

vendor/golang.org/x/sys/unix/sockcmsg_unix.go−93

This diff is too big to show here.

vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go−47

This diff is too big to show here.

vendor/golang.org/x/sys/unix/str.go−27

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall.go−95

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_aix.go−553

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_aix_ppc.go−54

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go−85

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_bsd.go−664

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go−32

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go−108

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_darwin.go−677

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_darwin_386.go−51

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go−51

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_darwin_arm.go−51

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go−51

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go−34

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_dragonfly.go−541

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go−57

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_freebsd.go−872

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_freebsd_386.go−67

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go−67

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go−63

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go−63

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_illumos.go−129

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux.go−2510

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_386.go−388

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_amd64.go−195

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go−13

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_arm.go−287

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_arm64.go−246

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_gc.go−15

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go−17

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go−14

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go−31

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go−21

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go−231

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go−239

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go−157

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go−231

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_s390x.go−343

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go−152

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_netbsd.go−618

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_netbsd_386.go−38

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go−38

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go−38

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go−38

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_openbsd.go−390

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_openbsd_386.go−42

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go−42

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go−42

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go−42

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go−35

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_solaris.go−746

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go−28

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_unix.go−431

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_unix_gc.go−18

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go−25

This diff is too big to show here.

vendor/golang.org/x/sys/unix/syscall_zos_s390x.go−1781

This diff is too big to show here.

vendor/golang.org/x/sys/unix/timestruct.go−77

This diff is too big to show here.

vendor/golang.org/x/sys/unix/unveil_openbsd.go−42

This diff is too big to show here.

vendor/golang.org/x/sys/unix/xattr_bsd.go−241

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go−1385

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go−1386

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_darwin_386.go−1789

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go−1860

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go−1789

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go−1860

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go−1738

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go−1943

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go−1942

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go−1841

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go−1943

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_linux.go−2808

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_linux_386.go−801

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go−801

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_linux_arm.go−807

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go−798

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_linux_mips.go−808

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go−808

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go−808

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go−808

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go−864

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go−864

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go−788

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go−861

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go−858

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go−1780

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go−1770

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go−1759

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go−1770

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go−1665

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go−1775

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go−1667

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go−1798

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go−1863

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go−1557

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go−832

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go−42

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go−17

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go−51

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go−51

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zptrace_x86_linux.go−81

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go−1485

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go−1443

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go−1192

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go−1070

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.go−40

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.s−12

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go−2431

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s−290

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go−40

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s−12

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go−2431

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s−290

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.go−40

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.s−12

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go−2417

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s−288

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go−40

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s−12

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go−2431

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s−290

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go−1679

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go−2016

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go−2016

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go−2016

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go−2016

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go−128

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_linux.go−1944

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_linux_386.go−579

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go−746

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go−716

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go−603

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go−759

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go−730

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go−730

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go−759

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go−808

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go−808

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go−583

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go−578

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go−741

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go−1862

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go−1862

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go−1862

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go−1862

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go−1693

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go−1693

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go−1693

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go−1693

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go−1693

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go−1983

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go−1217

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go−274

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go−272

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go−274

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go−276

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go−280

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go−438

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go−440

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go−438

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go−438

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go−317

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go−397

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go−397

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go−397

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go−397

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_linux_386.go−441

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go−363

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go−405

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go−308

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go−426

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go−356

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go−356

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go−426

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go−405

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go−405

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go−307

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go−370

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go−384

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go−275

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go−275

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go−275

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go−275

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go−219

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go−219

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go−219

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go−218

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go−221

This diff is too big to show here.

vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go−2670

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go−354

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go−358

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_darwin_386.go−517

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go−530

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go−517

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go−530

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go−471

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go−720

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go−723

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go−704

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go−701

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_illumos_amd64.go−40

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_linux.go−3737

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_linux_386.go−620

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go−638

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_linux_arm.go−615

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go−617

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_linux_mips.go−621

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go−620

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go−620

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go−621

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go−627

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go−627

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go−645

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go−641

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go−622

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go−500

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go−508

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go−505

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go−508

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go−573

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go−573

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go−574

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go−567

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go−567

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go−442

This diff is too big to show here.

vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go−402

This diff is too big to show here.

vendor/modules.txt−11

This diff is too big to show here.