This script should not be not be installed directly. It is a library for other scripts to include with the meta directive // @require https://update.greatest.deepsurf.us/scripts/29319/191261/web-streams-polyfill.js
- (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.default = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
- 'use strict';
-
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
-
- var _require = _dereq_('./spec/reference-implementation/lib/readable-stream');
-
- var ReadableStream = _require.ReadableStream;
-
- var _require2 = _dereq_('./spec/reference-implementation/lib/writable-stream');
-
- var WritableStream = _require2.WritableStream,
- ByteLengthQueuingStrategy = _dereq_('./spec/reference-implementation/lib/byte-length-queuing-strategy'),
- CountQueuingStrategy = _dereq_('./spec/reference-implementation/lib/count-queuing-strategy'),
- TransformStream = _dereq_('./spec/reference-implementation/lib/transform-stream').TransformStream;
- exports.ByteLengthQueuingStrategy = ByteLengthQueuingStrategy;
- exports.CountQueuingStrategy = CountQueuingStrategy;
- exports.TransformStream = TransformStream;
- exports.ReadableStream = ReadableStream;
- exports.WritableStream = WritableStream;
-
-
- var interfaces = {
- ReadableStream: ReadableStream,
- WritableStream: WritableStream,
- ByteLengthQueuingStrategy: ByteLengthQueuingStrategy,
- CountQueuingStrategy: CountQueuingStrategy,
- TransformStream: TransformStream
- };
-
- // Export
- exports.default = interfaces;
-
- // Add classes to window
-
- if (typeof window !== "undefined") Object.assign(window, interfaces);
-
- },{"./spec/reference-implementation/lib/byte-length-queuing-strategy":7,"./spec/reference-implementation/lib/count-queuing-strategy":8,"./spec/reference-implementation/lib/readable-stream":11,"./spec/reference-implementation/lib/transform-stream":12,"./spec/reference-implementation/lib/writable-stream":14}],2:[function(_dereq_,module,exports){
- // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
- //
- // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
- //
- // Originally from narwhal.js (http://narwhaljs.org)
- // Copyright (c) 2009 Thomas Robinson <280north.com>
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the 'Software'), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
- // when used in node, this will actually load the util module we depend on
- // versus loading the builtin util module as happens otherwise
- // this is a bug in node module loading as far as I am concerned
- var util = _dereq_('util/');
-
- var pSlice = Array.prototype.slice;
- var hasOwn = Object.prototype.hasOwnProperty;
-
- // 1. The assert module provides functions that throw
- // AssertionError's when particular conditions are not met. The
- // assert module must conform to the following interface.
-
- var assert = module.exports = ok;
-
- // 2. The AssertionError is defined in assert.
- // new assert.AssertionError({ message: message,
- // actual: actual,
- // expected: expected })
-
- assert.AssertionError = function AssertionError(options) {
- this.name = 'AssertionError';
- this.actual = options.actual;
- this.expected = options.expected;
- this.operator = options.operator;
- if (options.message) {
- this.message = options.message;
- this.generatedMessage = false;
- } else {
- this.message = getMessage(this);
- this.generatedMessage = true;
- }
- var stackStartFunction = options.stackStartFunction || fail;
-
- if (Error.captureStackTrace) {
- Error.captureStackTrace(this, stackStartFunction);
- }
- else {
- // non v8 browsers so we can have a stacktrace
- var err = new Error();
- if (err.stack) {
- var out = err.stack;
-
- // try to strip useless frames
- var fn_name = stackStartFunction.name;
- var idx = out.indexOf('\n' + fn_name);
- if (idx >= 0) {
- // once we have located the function frame
- // we need to strip out everything before it (and its line)
- var next_line = out.indexOf('\n', idx + 1);
- out = out.substring(next_line + 1);
- }
-
- this.stack = out;
- }
- }
- };
-
- // assert.AssertionError instanceof Error
- util.inherits(assert.AssertionError, Error);
-
- function replacer(key, value) {
- if (util.isUndefined(value)) {
- return '' + value;
- }
- if (util.isNumber(value) && !isFinite(value)) {
- return value.toString();
- }
- if (util.isFunction(value) || util.isRegExp(value)) {
- return value.toString();
- }
- return value;
- }
-
- function truncate(s, n) {
- if (util.isString(s)) {
- return s.length < n ? s : s.slice(0, n);
- } else {
- return s;
- }
- }
-
- function getMessage(self) {
- return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
- self.operator + ' ' +
- truncate(JSON.stringify(self.expected, replacer), 128);
- }
-
- // At present only the three keys mentioned above are used and
- // understood by the spec. Implementations or sub modules can pass
- // other keys to the AssertionError's constructor - they will be
- // ignored.
-
- // 3. All of the following functions must throw an AssertionError
- // when a corresponding condition is not met, with a message that
- // may be undefined if not provided. All assertion methods provide
- // both the actual and expected values to the assertion error for
- // display purposes.
-
- function fail(actual, expected, message, operator, stackStartFunction) {
- throw new assert.AssertionError({
- message: message,
- actual: actual,
- expected: expected,
- operator: operator,
- stackStartFunction: stackStartFunction
- });
- }
-
- // EXTENSION! allows for well behaved errors defined elsewhere.
- assert.fail = fail;
-
- // 4. Pure assertion tests whether a value is truthy, as determined
- // by !!guard.
- // assert.ok(guard, message_opt);
- // This statement is equivalent to assert.equal(true, !!guard,
- // message_opt);. To test strictly for the value true, use
- // assert.strictEqual(true, guard, message_opt);.
-
- function ok(value, message) {
- if (!value) fail(value, true, message, '==', assert.ok);
- }
- assert.ok = ok;
-
- // 5. The equality assertion tests shallow, coercive equality with
- // ==.
- // assert.equal(actual, expected, message_opt);
-
- assert.equal = function equal(actual, expected, message) {
- if (actual != expected) fail(actual, expected, message, '==', assert.equal);
- };
-
- // 6. The non-equality assertion tests for whether two objects are not equal
- // with != assert.notEqual(actual, expected, message_opt);
-
- assert.notEqual = function notEqual(actual, expected, message) {
- if (actual == expected) {
- fail(actual, expected, message, '!=', assert.notEqual);
- }
- };
-
- // 7. The equivalence assertion tests a deep equality relation.
- // assert.deepEqual(actual, expected, message_opt);
-
- assert.deepEqual = function deepEqual(actual, expected, message) {
- if (!_deepEqual(actual, expected)) {
- fail(actual, expected, message, 'deepEqual', assert.deepEqual);
- }
- };
-
- function _deepEqual(actual, expected) {
- // 7.1. All identical values are equivalent, as determined by ===.
- if (actual === expected) {
- return true;
-
- } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
- if (actual.length != expected.length) return false;
-
- for (var i = 0; i < actual.length; i++) {
- if (actual[i] !== expected[i]) return false;
- }
-
- return true;
-
- // 7.2. If the expected value is a Date object, the actual value is
- // equivalent if it is also a Date object that refers to the same time.
- } else if (util.isDate(actual) && util.isDate(expected)) {
- return actual.getTime() === expected.getTime();
-
- // 7.3 If the expected value is a RegExp object, the actual value is
- // equivalent if it is also a RegExp object with the same source and
- // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
- } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
- return actual.source === expected.source &&
- actual.global === expected.global &&
- actual.multiline === expected.multiline &&
- actual.lastIndex === expected.lastIndex &&
- actual.ignoreCase === expected.ignoreCase;
-
- // 7.4. Other pairs that do not both pass typeof value == 'object',
- // equivalence is determined by ==.
- } else if (!util.isObject(actual) && !util.isObject(expected)) {
- return actual == expected;
-
- // 7.5 For all other Object pairs, including Array objects, equivalence is
- // determined by having the same number of owned properties (as verified
- // with Object.prototype.hasOwnProperty.call), the same set of keys
- // (although not necessarily the same order), equivalent values for every
- // corresponding key, and an identical 'prototype' property. Note: this
- // accounts for both named and indexed properties on Arrays.
- } else {
- return objEquiv(actual, expected);
- }
- }
-
- function isArguments(object) {
- return Object.prototype.toString.call(object) == '[object Arguments]';
- }
-
- function objEquiv(a, b) {
- if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
- return false;
- // an identical 'prototype' property.
- if (a.prototype !== b.prototype) return false;
- // if one is a primitive, the other must be same
- if (util.isPrimitive(a) || util.isPrimitive(b)) {
- return a === b;
- }
- var aIsArgs = isArguments(a),
- bIsArgs = isArguments(b);
- if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
- return false;
- if (aIsArgs) {
- a = pSlice.call(a);
- b = pSlice.call(b);
- return _deepEqual(a, b);
- }
- var ka = objectKeys(a),
- kb = objectKeys(b),
- key, i;
- // having the same number of owned properties (keys incorporates
- // hasOwnProperty)
- if (ka.length != kb.length)
- return false;
- //the same set of keys (although not necessarily the same order),
- ka.sort();
- kb.sort();
- //~~~cheap key test
- for (i = ka.length - 1; i >= 0; i--) {
- if (ka[i] != kb[i])
- return false;
- }
- //equivalent values for every corresponding key, and
- //~~~possibly expensive deep test
- for (i = ka.length - 1; i >= 0; i--) {
- key = ka[i];
- if (!_deepEqual(a[key], b[key])) return false;
- }
- return true;
- }
-
- // 8. The non-equivalence assertion tests for any deep inequality.
- // assert.notDeepEqual(actual, expected, message_opt);
-
- assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
- if (_deepEqual(actual, expected)) {
- fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
- }
- };
-
- // 9. The strict equality assertion tests strict equality, as determined by ===.
- // assert.strictEqual(actual, expected, message_opt);
-
- assert.strictEqual = function strictEqual(actual, expected, message) {
- if (actual !== expected) {
- fail(actual, expected, message, '===', assert.strictEqual);
- }
- };
-
- // 10. The strict non-equality assertion tests for strict inequality, as
- // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
-
- assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
- if (actual === expected) {
- fail(actual, expected, message, '!==', assert.notStrictEqual);
- }
- };
-
- function expectedException(actual, expected) {
- if (!actual || !expected) {
- return false;
- }
-
- if (Object.prototype.toString.call(expected) == '[object RegExp]') {
- return expected.test(actual);
- } else if (actual instanceof expected) {
- return true;
- } else if (expected.call({}, actual) === true) {
- return true;
- }
-
- return false;
- }
-
- function _throws(shouldThrow, block, expected, message) {
- var actual;
-
- if (util.isString(expected)) {
- message = expected;
- expected = null;
- }
-
- try {
- block();
- } catch (e) {
- actual = e;
- }
-
- message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
- (message ? ' ' + message : '.');
-
- if (shouldThrow && !actual) {
- fail(actual, expected, 'Missing expected exception' + message);
- }
-
- if (!shouldThrow && expectedException(actual, expected)) {
- fail(actual, expected, 'Got unwanted exception' + message);
- }
-
- if ((shouldThrow && actual && expected &&
- !expectedException(actual, expected)) || (!shouldThrow && actual)) {
- throw actual;
- }
- }
-
- // 11. Expected to throw an error:
- // assert.throws(block, Error_opt, message_opt);
-
- assert.throws = function(block, /*optional*/error, /*optional*/message) {
- _throws.apply(this, [true].concat(pSlice.call(arguments)));
- };
-
- // EXTENSION! This is annoying to write outside this module.
- assert.doesNotThrow = function(block, /*optional*/message) {
- _throws.apply(this, [false].concat(pSlice.call(arguments)));
- };
-
- assert.ifError = function(err) { if (err) {throw err;}};
-
- var objectKeys = Object.keys || function (obj) {
- var keys = [];
- for (var key in obj) {
- if (hasOwn.call(obj, key)) keys.push(key);
- }
- return keys;
- };
-
- },{"util/":6}],3:[function(_dereq_,module,exports){
- // shim for using process in browser
- var process = module.exports = {};
-
- // cached from whatever global is present so that test runners that stub it
- // don't break things. But we need to wrap it in a try catch in case it is
- // wrapped in strict mode code which doesn't define any globals. It's inside a
- // function because try/catches deoptimize in certain engines.
-
- var cachedSetTimeout;
- var cachedClearTimeout;
-
- function defaultSetTimout() {
- throw new Error('setTimeout has not been defined');
- }
- function defaultClearTimeout () {
- throw new Error('clearTimeout has not been defined');
- }
- (function () {
- try {
- if (typeof setTimeout === 'function') {
- cachedSetTimeout = setTimeout;
- } else {
- cachedSetTimeout = defaultSetTimout;
- }
- } catch (e) {
- cachedSetTimeout = defaultSetTimout;
- }
- try {
- if (typeof clearTimeout === 'function') {
- cachedClearTimeout = clearTimeout;
- } else {
- cachedClearTimeout = defaultClearTimeout;
- }
- } catch (e) {
- cachedClearTimeout = defaultClearTimeout;
- }
- } ())
- function runTimeout(fun) {
- if (cachedSetTimeout === setTimeout) {
- //normal enviroments in sane situations
- return setTimeout(fun, 0);
- }
- // if setTimeout wasn't available but was latter defined
- if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
- cachedSetTimeout = setTimeout;
- return setTimeout(fun, 0);
- }
- try {
- // when when somebody has screwed with setTimeout but no I.E. maddness
- return cachedSetTimeout(fun, 0);
- } catch(e){
- try {
- // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
- return cachedSetTimeout.call(null, fun, 0);
- } catch(e){
- // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
- return cachedSetTimeout.call(this, fun, 0);
- }
- }
-
-
- }
- function runClearTimeout(marker) {
- if (cachedClearTimeout === clearTimeout) {
- //normal enviroments in sane situations
- return clearTimeout(marker);
- }
- // if clearTimeout wasn't available but was latter defined
- if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
- cachedClearTimeout = clearTimeout;
- return clearTimeout(marker);
- }
- try {
- // when when somebody has screwed with setTimeout but no I.E. maddness
- return cachedClearTimeout(marker);
- } catch (e){
- try {
- // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
- return cachedClearTimeout.call(null, marker);
- } catch (e){
- // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
- // Some versions of I.E. have different rules for clearTimeout vs setTimeout
- return cachedClearTimeout.call(this, marker);
- }
- }
-
-
-
- }
- var queue = [];
- var draining = false;
- var currentQueue;
- var queueIndex = -1;
-
- function cleanUpNextTick() {
- if (!draining || !currentQueue) {
- return;
- }
- draining = false;
- if (currentQueue.length) {
- queue = currentQueue.concat(queue);
- } else {
- queueIndex = -1;
- }
- if (queue.length) {
- drainQueue();
- }
- }
-
- function drainQueue() {
- if (draining) {
- return;
- }
- var timeout = runTimeout(cleanUpNextTick);
- draining = true;
-
- var len = queue.length;
- while(len) {
- currentQueue = queue;
- queue = [];
- while (++queueIndex < len) {
- if (currentQueue) {
- currentQueue[queueIndex].run();
- }
- }
- queueIndex = -1;
- len = queue.length;
- }
- currentQueue = null;
- draining = false;
- runClearTimeout(timeout);
- }
-
- process.nextTick = function (fun) {
- var args = new Array(arguments.length - 1);
- if (arguments.length > 1) {
- for (var i = 1; i < arguments.length; i++) {
- args[i - 1] = arguments[i];
- }
- }
- queue.push(new Item(fun, args));
- if (queue.length === 1 && !draining) {
- runTimeout(drainQueue);
- }
- };
-
- // v8 likes predictible objects
- function Item(fun, array) {
- this.fun = fun;
- this.array = array;
- }
- Item.prototype.run = function () {
- this.fun.apply(null, this.array);
- };
- process.title = 'browser';
- process.browser = true;
- process.env = {};
- process.argv = [];
- process.version = ''; // empty string to avoid regexp issues
- process.versions = {};
-
- function noop() {}
-
- process.on = noop;
- process.addListener = noop;
- process.once = noop;
- process.off = noop;
- process.removeListener = noop;
- process.removeAllListeners = noop;
- process.emit = noop;
-
- process.binding = function (name) {
- throw new Error('process.binding is not supported');
- };
-
- process.cwd = function () { return '/' };
- process.chdir = function (dir) {
- throw new Error('process.chdir is not supported');
- };
- process.umask = function() { return 0; };
-
- },{}],4:[function(_dereq_,module,exports){
- if (typeof Object.create === 'function') {
- // implementation from standard node.js 'util' module
- module.exports = function inherits(ctor, superCtor) {
- ctor.super_ = superCtor
- ctor.prototype = Object.create(superCtor.prototype, {
- constructor: {
- value: ctor,
- enumerable: false,
- writable: true,
- configurable: true
- }
- });
- };
- } else {
- // old school shim for old browsers
- module.exports = function inherits(ctor, superCtor) {
- ctor.super_ = superCtor
- var TempCtor = function () {}
- TempCtor.prototype = superCtor.prototype
- ctor.prototype = new TempCtor()
- ctor.prototype.constructor = ctor
- }
- }
-
- },{}],5:[function(_dereq_,module,exports){
- module.exports = function isBuffer(arg) {
- return arg && typeof arg === 'object'
- && typeof arg.copy === 'function'
- && typeof arg.fill === 'function'
- && typeof arg.readUInt8 === 'function';
- }
- },{}],6:[function(_dereq_,module,exports){
- (function (process,global){
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
- var formatRegExp = /%[sdj%]/g;
- exports.format = function(f) {
- if (!isString(f)) {
- var objects = [];
- for (var i = 0; i < arguments.length; i++) {
- objects.push(inspect(arguments[i]));
- }
- return objects.join(' ');
- }
-
- var i = 1;
- var args = arguments;
- var len = args.length;
- var str = String(f).replace(formatRegExp, function(x) {
- if (x === '%%') return '%';
- if (i >= len) return x;
- switch (x) {
- case '%s': return String(args[i++]);
- case '%d': return Number(args[i++]);
- case '%j':
- try {
- return JSON.stringify(args[i++]);
- } catch (_) {
- return '[Circular]';
- }
- default:
- return x;
- }
- });
- for (var x = args[i]; i < len; x = args[++i]) {
- if (isNull(x) || !isObject(x)) {
- str += ' ' + x;
- } else {
- str += ' ' + inspect(x);
- }
- }
- return str;
- };
-
-
- // Mark that a method should not be used.
- // Returns a modified function which warns once by default.
- // If --no-deprecation is set, then it is a no-op.
- exports.deprecate = function(fn, msg) {
- // Allow for deprecating things in the process of starting up.
- if (isUndefined(global.process)) {
- return function() {
- return exports.deprecate(fn, msg).apply(this, arguments);
- };
- }
-
- if (process.noDeprecation === true) {
- return fn;
- }
-
- var warned = false;
- function deprecated() {
- if (!warned) {
- if (process.throwDeprecation) {
- throw new Error(msg);
- } else if (process.traceDeprecation) {
- console.trace(msg);
- } else {
- console.error(msg);
- }
- warned = true;
- }
- return fn.apply(this, arguments);
- }
-
- return deprecated;
- };
-
-
- var debugs = {};
- var debugEnviron;
- exports.debuglog = function(set) {
- if (isUndefined(debugEnviron))
- debugEnviron = process.env.NODE_DEBUG || '';
- set = set.toUpperCase();
- if (!debugs[set]) {
- if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
- var pid = process.pid;
- debugs[set] = function() {
- var msg = exports.format.apply(exports, arguments);
- console.error('%s %d: %s', set, pid, msg);
- };
- } else {
- debugs[set] = function() {};
- }
- }
- return debugs[set];
- };
-
-
- /**
- * Echos the value of a value. Trys to print the value out
- * in the best way possible given the different types.
- *
- * @param {Object} obj The object to print out.
- * @param {Object} opts Optional options object that alters the output.
- */
- /* legacy: obj, showHidden, depth, colors*/
- function inspect(obj, opts) {
- // default options
- var ctx = {
- seen: [],
- stylize: stylizeNoColor
- };
- // legacy...
- if (arguments.length >= 3) ctx.depth = arguments[2];
- if (arguments.length >= 4) ctx.colors = arguments[3];
- if (isBoolean(opts)) {
- // legacy...
- ctx.showHidden = opts;
- } else if (opts) {
- // got an "options" object
- exports._extend(ctx, opts);
- }
- // set default options
- if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
- if (isUndefined(ctx.depth)) ctx.depth = 2;
- if (isUndefined(ctx.colors)) ctx.colors = false;
- if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
- if (ctx.colors) ctx.stylize = stylizeWithColor;
- return formatValue(ctx, obj, ctx.depth);
- }
- exports.inspect = inspect;
-
-
- // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
- inspect.colors = {
- 'bold' : [1, 22],
- 'italic' : [3, 23],
- 'underline' : [4, 24],
- 'inverse' : [7, 27],
- 'white' : [37, 39],
- 'grey' : [90, 39],
- 'black' : [30, 39],
- 'blue' : [34, 39],
- 'cyan' : [36, 39],
- 'green' : [32, 39],
- 'magenta' : [35, 39],
- 'red' : [31, 39],
- 'yellow' : [33, 39]
- };
-
- // Don't use 'blue' not visible on cmd.exe
- inspect.styles = {
- 'special': 'cyan',
- 'number': 'yellow',
- 'boolean': 'yellow',
- 'undefined': 'grey',
- 'null': 'bold',
- 'string': 'green',
- 'date': 'magenta',
- // "name": intentionally not styling
- 'regexp': 'red'
- };
-
-
- function stylizeWithColor(str, styleType) {
- var style = inspect.styles[styleType];
-
- if (style) {
- return '\u001b[' + inspect.colors[style][0] + 'm' + str +
- '\u001b[' + inspect.colors[style][1] + 'm';
- } else {
- return str;
- }
- }
-
-
- function stylizeNoColor(str, styleType) {
- return str;
- }
-
-
- function arrayToHash(array) {
- var hash = {};
-
- array.forEach(function(val, idx) {
- hash[val] = true;
- });
-
- return hash;
- }
-
-
- function formatValue(ctx, value, recurseTimes) {
- // Provide a hook for user-specified inspect functions.
- // Check that value is an object with an inspect function on it
- if (ctx.customInspect &&
- value &&
- isFunction(value.inspect) &&
- // Filter out the util module, it's inspect function is special
- value.inspect !== exports.inspect &&
- // Also filter out any prototype objects using the circular check.
- !(value.constructor && value.constructor.prototype === value)) {
- var ret = value.inspect(recurseTimes, ctx);
- if (!isString(ret)) {
- ret = formatValue(ctx, ret, recurseTimes);
- }
- return ret;
- }
-
- // Primitive types cannot have properties
- var primitive = formatPrimitive(ctx, value);
- if (primitive) {
- return primitive;
- }
-
- // Look up the keys of the object.
- var keys = Object.keys(value);
- var visibleKeys = arrayToHash(keys);
-
- if (ctx.showHidden) {
- keys = Object.getOwnPropertyNames(value);
- }
-
- // IE doesn't make error fields non-enumerable
- // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
- if (isError(value)
- && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
- return formatError(value);
- }
-
- // Some type of object without properties can be shortcutted.
- if (keys.length === 0) {
- if (isFunction(value)) {
- var name = value.name ? ': ' + value.name : '';
- return ctx.stylize('[Function' + name + ']', 'special');
- }
- if (isRegExp(value)) {
- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
- }
- if (isDate(value)) {
- return ctx.stylize(Date.prototype.toString.call(value), 'date');
- }
- if (isError(value)) {
- return formatError(value);
- }
- }
-
- var base = '', array = false, braces = ['{', '}'];
-
- // Make Array say that they are Array
- if (isArray(value)) {
- array = true;
- braces = ['[', ']'];
- }
-
- // Make functions say that they are functions
- if (isFunction(value)) {
- var n = value.name ? ': ' + value.name : '';
- base = ' [Function' + n + ']';
- }
-
- // Make RegExps say that they are RegExps
- if (isRegExp(value)) {
- base = ' ' + RegExp.prototype.toString.call(value);
- }
-
- // Make dates with properties first say the date
- if (isDate(value)) {
- base = ' ' + Date.prototype.toUTCString.call(value);
- }
-
- // Make error with message first say the error
- if (isError(value)) {
- base = ' ' + formatError(value);
- }
-
- if (keys.length === 0 && (!array || value.length == 0)) {
- return braces[0] + base + braces[1];
- }
-
- if (recurseTimes < 0) {
- if (isRegExp(value)) {
- return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
- } else {
- return ctx.stylize('[Object]', 'special');
- }
- }
-
- ctx.seen.push(value);
-
- var output;
- if (array) {
- output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
- } else {
- output = keys.map(function(key) {
- return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
- });
- }
-
- ctx.seen.pop();
-
- return reduceToSingleString(output, base, braces);
- }
-
-
- function formatPrimitive(ctx, value) {
- if (isUndefined(value))
- return ctx.stylize('undefined', 'undefined');
- if (isString(value)) {
- var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
- .replace(/'/g, "\\'")
- .replace(/\\"/g, '"') + '\'';
- return ctx.stylize(simple, 'string');
- }
- if (isNumber(value))
- return ctx.stylize('' + value, 'number');
- if (isBoolean(value))
- return ctx.stylize('' + value, 'boolean');
- // For some reason typeof null is "object", so special case here.
- if (isNull(value))
- return ctx.stylize('null', 'null');
- }
-
-
- function formatError(value) {
- return '[' + Error.prototype.toString.call(value) + ']';
- }
-
-
- function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
- var output = [];
- for (var i = 0, l = value.length; i < l; ++i) {
- if (hasOwnProperty(value, String(i))) {
- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
- String(i), true));
- } else {
- output.push('');
- }
- }
- keys.forEach(function(key) {
- if (!key.match(/^\d+$/)) {
- output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
- key, true));
- }
- });
- return output;
- }
-
-
- function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
- var name, str, desc;
- desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
- if (desc.get) {
- if (desc.set) {
- str = ctx.stylize('[Getter/Setter]', 'special');
- } else {
- str = ctx.stylize('[Getter]', 'special');
- }
- } else {
- if (desc.set) {
- str = ctx.stylize('[Setter]', 'special');
- }
- }
- if (!hasOwnProperty(visibleKeys, key)) {
- name = '[' + key + ']';
- }
- if (!str) {
- if (ctx.seen.indexOf(desc.value) < 0) {
- if (isNull(recurseTimes)) {
- str = formatValue(ctx, desc.value, null);
- } else {
- str = formatValue(ctx, desc.value, recurseTimes - 1);
- }
- if (str.indexOf('\n') > -1) {
- if (array) {
- str = str.split('\n').map(function(line) {
- return ' ' + line;
- }).join('\n').substr(2);
- } else {
- str = '\n' + str.split('\n').map(function(line) {
- return ' ' + line;
- }).join('\n');
- }
- }
- } else {
- str = ctx.stylize('[Circular]', 'special');
- }
- }
- if (isUndefined(name)) {
- if (array && key.match(/^\d+$/)) {
- return str;
- }
- name = JSON.stringify('' + key);
- if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
- name = name.substr(1, name.length - 2);
- name = ctx.stylize(name, 'name');
- } else {
- name = name.replace(/'/g, "\\'")
- .replace(/\\"/g, '"')
- .replace(/(^"|"$)/g, "'");
- name = ctx.stylize(name, 'string');
- }
- }
-
- return name + ': ' + str;
- }
-
-
- function reduceToSingleString(output, base, braces) {
- var numLinesEst = 0;
- var length = output.reduce(function(prev, cur) {
- numLinesEst++;
- if (cur.indexOf('\n') >= 0) numLinesEst++;
- return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
- }, 0);
-
- if (length > 60) {
- return braces[0] +
- (base === '' ? '' : base + '\n ') +
- ' ' +
- output.join(',\n ') +
- ' ' +
- braces[1];
- }
-
- return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
- }
-
-
- // NOTE: These type checking functions intentionally don't use `instanceof`
- // because it is fragile and can be easily faked with `Object.create()`.
- function isArray(ar) {
- return Array.isArray(ar);
- }
- exports.isArray = isArray;
-
- function isBoolean(arg) {
- return typeof arg === 'boolean';
- }
- exports.isBoolean = isBoolean;
-
- function isNull(arg) {
- return arg === null;
- }
- exports.isNull = isNull;
-
- function isNullOrUndefined(arg) {
- return arg == null;
- }
- exports.isNullOrUndefined = isNullOrUndefined;
-
- function isNumber(arg) {
- return typeof arg === 'number';
- }
- exports.isNumber = isNumber;
-
- function isString(arg) {
- return typeof arg === 'string';
- }
- exports.isString = isString;
-
- function isSymbol(arg) {
- return typeof arg === 'symbol';
- }
- exports.isSymbol = isSymbol;
-
- function isUndefined(arg) {
- return arg === void 0;
- }
- exports.isUndefined = isUndefined;
-
- function isRegExp(re) {
- return isObject(re) && objectToString(re) === '[object RegExp]';
- }
- exports.isRegExp = isRegExp;
-
- function isObject(arg) {
- return typeof arg === 'object' && arg !== null;
- }
- exports.isObject = isObject;
-
- function isDate(d) {
- return isObject(d) && objectToString(d) === '[object Date]';
- }
- exports.isDate = isDate;
-
- function isError(e) {
- return isObject(e) &&
- (objectToString(e) === '[object Error]' || e instanceof Error);
- }
- exports.isError = isError;
-
- function isFunction(arg) {
- return typeof arg === 'function';
- }
- exports.isFunction = isFunction;
-
- function isPrimitive(arg) {
- return arg === null ||
- typeof arg === 'boolean' ||
- typeof arg === 'number' ||
- typeof arg === 'string' ||
- typeof arg === 'symbol' || // ES6 symbol
- typeof arg === 'undefined';
- }
- exports.isPrimitive = isPrimitive;
-
- exports.isBuffer = _dereq_('./support/isBuffer');
-
- function objectToString(o) {
- return Object.prototype.toString.call(o);
- }
-
-
- function pad(n) {
- return n < 10 ? '0' + n.toString(10) : n.toString(10);
- }
-
-
- var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
- 'Oct', 'Nov', 'Dec'];
-
- // 26 Feb 16:19:34
- function timestamp() {
- var d = new Date();
- var time = [pad(d.getHours()),
- pad(d.getMinutes()),
- pad(d.getSeconds())].join(':');
- return [d.getDate(), months[d.getMonth()], time].join(' ');
- }
-
-
- // log is just a thin wrapper to console.log that prepends a timestamp
- exports.log = function() {
- console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
- };
-
-
- /**
- * Inherit the prototype methods from one constructor into another.
- *
- * The Function.prototype.inherits from lang.js rewritten as a standalone
- * function (not on Function.prototype). NOTE: If this file is to be loaded
- * during bootstrapping this function needs to be rewritten using some native
- * functions as prototype setup using normal JavaScript does not work as
- * expected during bootstrapping (see mirror.js in r114903).
- *
- * @param {function} ctor Constructor function which needs to inherit the
- * prototype.
- * @param {function} superCtor Constructor function to inherit prototype from.
- */
- exports.inherits = _dereq_('inherits');
-
- exports._extend = function(origin, add) {
- // Don't do anything if add isn't an object
- if (!add || !isObject(add)) return origin;
-
- var keys = Object.keys(add);
- var i = keys.length;
- while (i--) {
- origin[keys[i]] = add[keys[i]];
- }
- return origin;
- };
-
- function hasOwnProperty(obj, prop) {
- return Object.prototype.hasOwnProperty.call(obj, prop);
- }
-
- }).call(this,_dereq_('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-
- },{"./support/isBuffer":5,"_process":3,"inherits":4}],7:[function(_dereq_,module,exports){
- 'use strict';
-
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
- var _require = _dereq_('./helpers.js'),
- createDataProperty = _require.createDataProperty;
-
- module.exports = function () {
- function ByteLengthQueuingStrategy(_ref) {
- var highWaterMark = _ref.highWaterMark;
-
- _classCallCheck(this, ByteLengthQueuingStrategy);
-
- createDataProperty(this, 'highWaterMark', highWaterMark);
- }
-
- _createClass(ByteLengthQueuingStrategy, [{
- key: 'size',
- value: function size(chunk) {
- return chunk.byteLength;
- }
- }]);
-
- return ByteLengthQueuingStrategy;
- }();
-
- },{"./helpers.js":9}],8:[function(_dereq_,module,exports){
- 'use strict';
-
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
- var _require = _dereq_('./helpers.js'),
- createDataProperty = _require.createDataProperty;
-
- module.exports = function () {
- function CountQueuingStrategy(_ref) {
- var highWaterMark = _ref.highWaterMark;
-
- _classCallCheck(this, CountQueuingStrategy);
-
- createDataProperty(this, 'highWaterMark', highWaterMark);
- }
-
- _createClass(CountQueuingStrategy, [{
- key: 'size',
- value: function size() {
- return 1;
- }
- }]);
-
- return CountQueuingStrategy;
- }();
-
- },{"./helpers.js":9}],9:[function(_dereq_,module,exports){
- 'use strict';
-
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
- function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
-
- var assert = _dereq_('assert');
-
- function IsPropertyKey(argument) {
- return typeof argument === 'string' || (typeof argument === 'undefined' ? 'undefined' : _typeof(argument)) === 'symbol';
- }
-
- exports.typeIsObject = function (x) {
- return (typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x !== null || typeof x === 'function';
- };
-
- exports.createDataProperty = function (o, p, v) {
- assert(exports.typeIsObject(o));
- Object.defineProperty(o, p, { value: v, writable: true, enumerable: true, configurable: true });
- };
-
- exports.createArrayFromList = function (elements) {
- // We use arrays to represent lists, so this is basically a no-op.
- // Do a slice though just in case we happen to depend on the unique-ness.
- return elements.slice();
- };
-
- exports.ArrayBufferCopy = function (dest, destOffset, src, srcOffset, n) {
- new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);
- };
-
- exports.CreateIterResultObject = function (value, done) {
- assert(typeof done === 'boolean');
- var obj = {};
- Object.defineProperty(obj, 'value', { value: value, enumerable: true, writable: true, configurable: true });
- Object.defineProperty(obj, 'done', { value: done, enumerable: true, writable: true, configurable: true });
- return obj;
- };
-
- exports.IsFiniteNonNegativeNumber = function (v) {
- if (Number.isNaN(v)) {
- return false;
- }
- if (v === Infinity) {
- return false;
- }
- if (v < 0) {
- return false;
- }
-
- return true;
- };
-
- function Call(F, V, args) {
- if (typeof F !== 'function') {
- throw new TypeError('Argument is not a function');
- }
-
- return Function.prototype.apply.call(F, V, args);
- }
-
- exports.InvokeOrNoop = function (O, P, args) {
- assert(O !== undefined);
- assert(IsPropertyKey(P));
- assert(Array.isArray(args));
-
- var method = O[P];
- if (method === undefined) {
- return undefined;
- }
-
- return Call(method, O, args);
- };
-
- exports.PromiseInvokeOrNoop = function (O, P, args) {
- assert(O !== undefined);
- assert(IsPropertyKey(P));
- assert(Array.isArray(args));
- try {
- return Promise.resolve(exports.InvokeOrNoop(O, P, args));
- } catch (returnValueE) {
- return Promise.reject(returnValueE);
- }
- };
-
- exports.PromiseInvokeOrPerformFallback = function (O, P, args, F, argsF) {
- assert(O !== undefined);
- assert(IsPropertyKey(P));
- assert(Array.isArray(args));
- assert(Array.isArray(argsF));
-
- var method = void 0;
- try {
- method = O[P];
- } catch (methodE) {
- return Promise.reject(methodE);
- }
-
- if (method === undefined) {
- return F.apply(undefined, _toConsumableArray(argsF));
- }
-
- try {
- return Promise.resolve(Call(method, O, args));
- } catch (e) {
- return Promise.reject(e);
- }
- };
-
- exports.PromiseInvokeOrFallbackOrNoop = function (O, P1, args1, P2, args2) {
- assert(O !== undefined);
- assert(IsPropertyKey(P1));
- assert(Array.isArray(args1));
- assert(IsPropertyKey(P2));
- assert(Array.isArray(args2));
-
- return exports.PromiseInvokeOrPerformFallback(O, P1, args1, exports.PromiseInvokeOrNoop, [O, P2, args2]);
- };
-
- // Not implemented correctly
- exports.SameRealmTransfer = function (O) {
- return O;
- };
-
- exports.ValidateAndNormalizeHighWaterMark = function (highWaterMark) {
- highWaterMark = Number(highWaterMark);
- if (Number.isNaN(highWaterMark) || highWaterMark < 0) {
- throw new RangeError('highWaterMark property of a queuing strategy must be non-negative and non-NaN');
- }
-
- return highWaterMark;
- };
-
- exports.ValidateAndNormalizeQueuingStrategy = function (size, highWaterMark) {
- if (size !== undefined && typeof size !== 'function') {
- throw new TypeError('size property of a queuing strategy must be a function');
- }
-
- highWaterMark = exports.ValidateAndNormalizeHighWaterMark(highWaterMark);
-
- return { size: size, highWaterMark: highWaterMark };
- };
-
- },{"assert":2}],10:[function(_dereq_,module,exports){
- 'use strict';
-
- var assert = _dereq_('assert');
-
- var _require = _dereq_('./helpers.js'),
- IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber;
-
- exports.DequeueValue = function (queue) {
- assert(queue.length > 0, 'Spec-level failure: should never dequeue from an empty queue.');
- var pair = queue.shift();
-
- queue._totalSize -= pair.size;
-
- return pair.value;
- };
-
- exports.EnqueueValueWithSize = function (queue, value, size) {
- size = Number(size);
- if (!IsFiniteNonNegativeNumber(size)) {
- throw new RangeError('Size must be a finite, non-NaN, non-negative number.');
- }
-
- queue.push({ value: value, size: size });
-
- if (queue._totalSize === undefined) {
- queue._totalSize = 0;
- }
- queue._totalSize += size;
- };
-
- // This implementation is not per-spec. Total size is cached for speed.
- exports.GetTotalQueueSize = function (queue) {
- if (queue._totalSize === undefined) {
- queue._totalSize = 0;
- }
- return queue._totalSize;
- };
-
- exports.PeekQueueValue = function (queue) {
- assert(queue.length > 0, 'Spec-level failure: should never peek at an empty queue.');
- var pair = queue[0];
- return pair.value;
- };
-
- },{"./helpers.js":9,"assert":2}],11:[function(_dereq_,module,exports){
- 'use strict';
-
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
- var assert = _dereq_('assert');
-
- var _require = _dereq_('./helpers.js'),
- ArrayBufferCopy = _require.ArrayBufferCopy,
- CreateIterResultObject = _require.CreateIterResultObject,
- IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber,
- InvokeOrNoop = _require.InvokeOrNoop,
- PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop,
- SameRealmTransfer = _require.SameRealmTransfer,
- ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy,
- ValidateAndNormalizeHighWaterMark = _require.ValidateAndNormalizeHighWaterMark;
-
- var _require2 = _dereq_('./helpers.js'),
- createArrayFromList = _require2.createArrayFromList,
- createDataProperty = _require2.createDataProperty,
- typeIsObject = _require2.typeIsObject;
-
- var _require3 = _dereq_('./utils.js'),
- rethrowAssertionErrorRejection = _require3.rethrowAssertionErrorRejection;
-
- var _require4 = _dereq_('./queue-with-sizes.js'),
- DequeueValue = _require4.DequeueValue,
- EnqueueValueWithSize = _require4.EnqueueValueWithSize,
- GetTotalQueueSize = _require4.GetTotalQueueSize;
-
- var _require5 = _dereq_('./writable-stream.js'),
- AcquireWritableStreamDefaultWriter = _require5.AcquireWritableStreamDefaultWriter,
- IsWritableStream = _require5.IsWritableStream,
- IsWritableStreamLocked = _require5.IsWritableStreamLocked,
- WritableStreamAbort = _require5.WritableStreamAbort,
- WritableStreamDefaultWriterCloseWithErrorPropagation = _require5.WritableStreamDefaultWriterCloseWithErrorPropagation,
- WritableStreamDefaultWriterRelease = _require5.WritableStreamDefaultWriterRelease,
- WritableStreamDefaultWriterWrite = _require5.WritableStreamDefaultWriterWrite;
-
- var InternalCancel = Symbol('[[Cancel]]');
- var InternalPull = Symbol('[[Pull]]');
-
- var ReadableStream = function () {
- function ReadableStream() {
- var underlyingSource = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
-
- var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
- size = _ref.size,
- highWaterMark = _ref.highWaterMark;
-
- _classCallCheck(this, ReadableStream);
-
- // Exposed to controllers.
- this._state = 'readable';
-
- this._reader = undefined;
- this._storedError = undefined;
-
- this._disturbed = false;
-
- // Initialize to undefined first because the constructor of the controller checks this
- // variable to validate the caller.
- this._readableStreamController = undefined;
- var type = underlyingSource.type;
- var typeString = String(type);
- if (typeString === 'bytes') {
- if (highWaterMark === undefined) {
- highWaterMark = 0;
- }
- this._readableStreamController = new ReadableByteStreamController(this, underlyingSource, highWaterMark);
- } else if (type === undefined) {
- if (highWaterMark === undefined) {
- highWaterMark = 1;
- }
- this._readableStreamController = new ReadableStreamDefaultController(this, underlyingSource, size, highWaterMark);
- } else {
- throw new RangeError('Invalid type is specified');
- }
- }
-
- _createClass(ReadableStream, [{
- key: 'cancel',
- value: function cancel(reason) {
- if (IsReadableStream(this) === false) {
- return Promise.reject(streamBrandCheckException('cancel'));
- }
-
- if (IsReadableStreamLocked(this) === true) {
- return Promise.reject(new TypeError('Cannot cancel a stream that already has a reader'));
- }
-
- return ReadableStreamCancel(this, reason);
- }
- }, {
- key: 'getReader',
- value: function getReader() {
- var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
- mode = _ref2.mode;
-
- if (IsReadableStream(this) === false) {
- throw streamBrandCheckException('getReader');
- }
-
- if (mode === 'byob') {
- if (IsReadableByteStreamController(this._readableStreamController) === false) {
- throw new TypeError('Cannot get a ReadableStreamBYOBReader for a stream not constructed with a byte source');
- }
-
- return AcquireReadableStreamBYOBReader(this);
- }
-
- if (mode === undefined) {
- return AcquireReadableStreamDefaultReader(this);
- }
-
- throw new RangeError('Invalid mode is specified');
- }
- }, {
- key: 'pipeThrough',
- value: function pipeThrough(_ref3, options) {
- var writable = _ref3.writable,
- readable = _ref3.readable;
-
- this.pipeTo(writable, options);
- return readable;
- }
- }, {
- key: 'pipeTo',
- value: function pipeTo(dest) {
- var _this = this;
-
- var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
- preventClose = _ref4.preventClose,
- preventAbort = _ref4.preventAbort,
- preventCancel = _ref4.preventCancel;
-
- if (IsReadableStream(this) === false) {
- return Promise.reject(streamBrandCheckException('pipeTo'));
- }
- if (IsWritableStream(dest) === false) {
- return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo\'s first argument must be a WritableStream'));
- }
-
- preventClose = Boolean(preventClose);
- preventAbort = Boolean(preventAbort);
- preventCancel = Boolean(preventCancel);
-
- if (IsReadableStreamLocked(this) === true) {
- return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream'));
- }
- if (IsWritableStreamLocked(dest) === true) {
- return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream'));
- }
-
- var reader = AcquireReadableStreamDefaultReader(this);
- var writer = AcquireWritableStreamDefaultWriter(dest);
-
- var shuttingDown = false;
-
- // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.
- var currentWrite = Promise.resolve();
-
- return new Promise(function (resolve, reject) {
- // Using reader and writer, read all chunks from this and write them to dest
- // - Backpressure must be enforced
- // - Shutdown must stop all activity
- function pipeLoop() {
- currentWrite = Promise.resolve();
-
- if (shuttingDown === true) {
- return Promise.resolve();
- }
-
- return writer._readyPromise.then(function () {
- return ReadableStreamDefaultReaderRead(reader).then(function (_ref5) {
- var value = _ref5.value,
- done = _ref5.done;
-
- if (done === true) {
- return undefined;
- }
-
- currentWrite = WritableStreamDefaultWriterWrite(writer, value);
- return currentWrite;
- });
- }).then(pipeLoop);
- }
-
- // Errors must be propagated forward
- isOrBecomesErrored(_this, reader._closedPromise, function (storedError) {
- if (preventAbort === false) {
- shutdownWithAction(function () {
- return WritableStreamAbort(dest, storedError);
- }, true, storedError);
- } else {
- shutdown(true, storedError);
- }
- });
-
- // Errors must be propagated backward
- isOrBecomesErrored(dest, writer._closedPromise, function (storedError) {
- if (preventCancel === false) {
- shutdownWithAction(function () {
- return ReadableStreamCancel(_this, storedError);
- }, true, storedError);
- } else {
- shutdown(true, storedError);
- }
- });
-
- // Closing must be propagated forward
- isOrBecomesClosed(_this, reader._closedPromise, function () {
- if (preventClose === false) {
- shutdownWithAction(function () {
- return WritableStreamDefaultWriterCloseWithErrorPropagation(writer);
- });
- } else {
- shutdown();
- }
- });
-
- // Closing must be propagated backward
- if (dest._state === 'closing' || dest._state === 'closed') {
- (function () {
- var destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');
-
- if (preventCancel === false) {
- shutdownWithAction(function () {
- return ReadableStreamCancel(_this, destClosed);
- }, true, destClosed);
- } else {
- shutdown(true, destClosed);
- }
- })();
- }
-
- pipeLoop().catch(function (err) {
- currentWrite = Promise.resolve();
- rethrowAssertionErrorRejection(err);
- });
-
- function isOrBecomesErrored(stream, promise, action) {
- if (stream._state === 'errored') {
- action(stream._storedError);
- } else {
- promise.catch(action).catch(rethrowAssertionErrorRejection);
- }
- }
-
- function isOrBecomesClosed(stream, promise, action) {
- if (stream._state === 'closed') {
- action();
- } else {
- promise.then(action).catch(rethrowAssertionErrorRejection);
- }
- }
-
- function waitForCurrentWrite() {
- return currentWrite.catch(function () {});
- }
-
- function shutdownWithAction(action, originalIsError, originalError) {
- if (shuttingDown === true) {
- return;
- }
- shuttingDown = true;
-
- waitForCurrentWrite().then(function () {
- return action().then(function () {
- return finalize(originalIsError, originalError);
- }, function (newError) {
- return finalize(true, newError);
- });
- }).catch(rethrowAssertionErrorRejection);
- }
-
- function shutdown(isError, error) {
- if (shuttingDown === true) {
- return;
- }
- shuttingDown = true;
-
- waitForCurrentWrite().then(function () {
- finalize(isError, error);
- }).catch(rethrowAssertionErrorRejection);
- }
-
- function finalize(isError, error) {
- WritableStreamDefaultWriterRelease(writer);
- ReadableStreamReaderGenericRelease(reader);
-
- if (isError) {
- reject(error);
- } else {
- resolve(undefined);
- }
- }
- });
- }
- }, {
- key: 'tee',
- value: function tee() {
- if (IsReadableStream(this) === false) {
- throw streamBrandCheckException('tee');
- }
-
- var branches = ReadableStreamTee(this, false);
- return createArrayFromList(branches);
- }
- }, {
- key: 'locked',
- get: function get() {
- if (IsReadableStream(this) === false) {
- throw streamBrandCheckException('locked');
- }
-
- return IsReadableStreamLocked(this);
- }
- }]);
-
- return ReadableStream;
- }();
-
- module.exports = {
- ReadableStream: ReadableStream,
- IsReadableStreamDisturbed: IsReadableStreamDisturbed,
- ReadableStreamDefaultControllerClose: ReadableStreamDefaultControllerClose,
- ReadableStreamDefaultControllerEnqueue: ReadableStreamDefaultControllerEnqueue,
- ReadableStreamDefaultControllerError: ReadableStreamDefaultControllerError,
- ReadableStreamDefaultControllerGetDesiredSize: ReadableStreamDefaultControllerGetDesiredSize
- };
-
- // Abstract operations for the ReadableStream.
-
- function AcquireReadableStreamBYOBReader(stream) {
- return new ReadableStreamBYOBReader(stream);
- }
-
- function AcquireReadableStreamDefaultReader(stream) {
- return new ReadableStreamDefaultReader(stream);
- }
-
- function IsReadableStream(x) {
- if (!typeIsObject(x)) {
- return false;
- }
-
- if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {
- return false;
- }
-
- return true;
- }
-
- function IsReadableStreamDisturbed(stream) {
- assert(IsReadableStream(stream) === true, 'IsReadableStreamDisturbed should only be used on known readable streams');
-
- return stream._disturbed;
- }
-
- function IsReadableStreamLocked(stream) {
- assert(IsReadableStream(stream) === true, 'IsReadableStreamLocked should only be used on known readable streams');
-
- if (stream._reader === undefined) {
- return false;
- }
-
- return true;
- }
-
- function ReadableStreamTee(stream, cloneForBranch2) {
- assert(IsReadableStream(stream) === true);
- assert(typeof cloneForBranch2 === 'boolean');
-
- var reader = AcquireReadableStreamDefaultReader(stream);
-
- var teeState = {
- closedOrErrored: false,
- canceled1: false,
- canceled2: false,
- reason1: undefined,
- reason2: undefined
- };
- teeState.promise = new Promise(function (resolve) {
- teeState._resolve = resolve;
- });
-
- var pull = create_ReadableStreamTeePullFunction();
- pull._reader = reader;
- pull._teeState = teeState;
- pull._cloneForBranch2 = cloneForBranch2;
-
- var cancel1 = create_ReadableStreamTeeBranch1CancelFunction();
- cancel1._stream = stream;
- cancel1._teeState = teeState;
-
- var cancel2 = create_ReadableStreamTeeBranch2CancelFunction();
- cancel2._stream = stream;
- cancel2._teeState = teeState;
-
- var underlyingSource1 = Object.create(Object.prototype);
- createDataProperty(underlyingSource1, 'pull', pull);
- createDataProperty(underlyingSource1, 'cancel', cancel1);
- var branch1Stream = new ReadableStream(underlyingSource1);
-
- var underlyingSource2 = Object.create(Object.prototype);
- createDataProperty(underlyingSource2, 'pull', pull);
- createDataProperty(underlyingSource2, 'cancel', cancel2);
- var branch2Stream = new ReadableStream(underlyingSource2);
-
- pull._branch1 = branch1Stream._readableStreamController;
- pull._branch2 = branch2Stream._readableStreamController;
-
- reader._closedPromise.catch(function (r) {
- if (teeState.closedOrErrored === true) {
- return;
- }
-
- ReadableStreamDefaultControllerError(pull._branch1, r);
- ReadableStreamDefaultControllerError(pull._branch2, r);
- teeState.closedOrErrored = true;
- });
-
- return [branch1Stream, branch2Stream];
- }
-
- function create_ReadableStreamTeePullFunction() {
- function f() {
- var reader = f._reader,
- branch1 = f._branch1,
- branch2 = f._branch2,
- teeState = f._teeState;
-
-
- return ReadableStreamDefaultReaderRead(reader).then(function (result) {
- assert(typeIsObject(result));
- var value = result.value;
- var done = result.done;
- assert(typeof done === 'boolean');
-
- if (done === true && teeState.closedOrErrored === false) {
- if (teeState.canceled1 === false) {
- ReadableStreamDefaultControllerClose(branch1);
- }
- if (teeState.canceled2 === false) {
- ReadableStreamDefaultControllerClose(branch2);
- }
- teeState.closedOrErrored = true;
- }
-
- if (teeState.closedOrErrored === true) {
- return;
- }
-
- var value1 = value;
- var value2 = value;
-
- // There is no way to access the cloning code right now in the reference implementation.
- // If we add one then we'll need an implementation for StructuredClone.
- // if (teeState.canceled2 === false && cloneForBranch2 === true) {
- // value2 = StructuredClone(value2);
- // }
-
- if (teeState.canceled1 === false) {
- ReadableStreamDefaultControllerEnqueue(branch1, value1);
- }
-
- if (teeState.canceled2 === false) {
- ReadableStreamDefaultControllerEnqueue(branch2, value2);
- }
- });
- }
- return f;
- }
-
- function create_ReadableStreamTeeBranch1CancelFunction() {
- function f(reason) {
- var stream = f._stream,
- teeState = f._teeState;
-
-
- teeState.canceled1 = true;
- teeState.reason1 = reason;
- if (teeState.canceled2 === true) {
- var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]);
- var cancelResult = ReadableStreamCancel(stream, compositeReason);
- teeState._resolve(cancelResult);
- }
- return teeState.promise;
- }
- return f;
- }
-
- function create_ReadableStreamTeeBranch2CancelFunction() {
- function f(reason) {
- var stream = f._stream,
- teeState = f._teeState;
-
-
- teeState.canceled2 = true;
- teeState.reason2 = reason;
- if (teeState.canceled1 === true) {
- var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]);
- var cancelResult = ReadableStreamCancel(stream, compositeReason);
- teeState._resolve(cancelResult);
- }
- return teeState.promise;
- }
- return f;
- }
-
- // ReadableStream API exposed for controllers.
-
- function ReadableStreamAddReadIntoRequest(stream) {
- assert(IsReadableStreamBYOBReader(stream._reader) === true);
- assert(stream._state === 'readable' || stream._state === 'closed');
-
- var promise = new Promise(function (resolve, reject) {
- var readIntoRequest = {
- _resolve: resolve,
- _reject: reject
- };
-
- stream._reader._readIntoRequests.push(readIntoRequest);
- });
-
- return promise;
- }
-
- function ReadableStreamAddReadRequest(stream) {
- assert(IsReadableStreamDefaultReader(stream._reader) === true);
- assert(stream._state === 'readable');
-
- var promise = new Promise(function (resolve, reject) {
- var readRequest = {
- _resolve: resolve,
- _reject: reject
- };
-
- stream._reader._readRequests.push(readRequest);
- });
-
- return promise;
- }
-
- function ReadableStreamCancel(stream, reason) {
- stream._disturbed = true;
-
- if (stream._state === 'closed') {
- return Promise.resolve(undefined);
- }
- if (stream._state === 'errored') {
- return Promise.reject(stream._storedError);
- }
-
- ReadableStreamClose(stream);
-
- var sourceCancelPromise = stream._readableStreamController[InternalCancel](reason);
- return sourceCancelPromise.then(function () {
- return undefined;
- });
- }
-
- function ReadableStreamClose(stream) {
- assert(stream._state === 'readable');
-
- stream._state = 'closed';
-
- var reader = stream._reader;
-
- if (reader === undefined) {
- return undefined;
- }
-
- if (IsReadableStreamDefaultReader(reader) === true) {
- var _iteratorNormalCompletion = true;
- var _didIteratorError = false;
- var _iteratorError = undefined;
-
- try {
- for (var _iterator = reader._readRequests[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
- var _resolve = _step.value._resolve;
-
- _resolve(CreateIterResultObject(undefined, true));
- }
- } catch (err) {
- _didIteratorError = true;
- _iteratorError = err;
- } finally {
- try {
- if (!_iteratorNormalCompletion && _iterator.return) {
- _iterator.return();
- }
- } finally {
- if (_didIteratorError) {
- throw _iteratorError;
- }
- }
- }
-
- reader._readRequests = [];
- }
-
- defaultReaderClosedPromiseResolve(reader);
-
- return undefined;
- }
-
- function ReadableStreamError(stream, e) {
- assert(IsReadableStream(stream) === true, 'stream must be ReadableStream');
- assert(stream._state === 'readable', 'state must be readable');
-
- stream._state = 'errored';
- stream._storedError = e;
-
- var reader = stream._reader;
-
- if (reader === undefined) {
- return undefined;
- }
-
- if (IsReadableStreamDefaultReader(reader) === true) {
- var _iteratorNormalCompletion2 = true;
- var _didIteratorError2 = false;
- var _iteratorError2 = undefined;
-
- try {
- for (var _iterator2 = reader._readRequests[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
- var readRequest = _step2.value;
-
- readRequest._reject(e);
- }
- } catch (err) {
- _didIteratorError2 = true;
- _iteratorError2 = err;
- } finally {
- try {
- if (!_iteratorNormalCompletion2 && _iterator2.return) {
- _iterator2.return();
- }
- } finally {
- if (_didIteratorError2) {
- throw _iteratorError2;
- }
- }
- }
-
- reader._readRequests = [];
- } else {
- assert(IsReadableStreamBYOBReader(reader), 'reader must be ReadableStreamBYOBReader');
-
- var _iteratorNormalCompletion3 = true;
- var _didIteratorError3 = false;
- var _iteratorError3 = undefined;
-
- try {
- for (var _iterator3 = reader._readIntoRequests[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
- var readIntoRequest = _step3.value;
-
- readIntoRequest._reject(e);
- }
- } catch (err) {
- _didIteratorError3 = true;
- _iteratorError3 = err;
- } finally {
- try {
- if (!_iteratorNormalCompletion3 && _iterator3.return) {
- _iterator3.return();
- }
- } finally {
- if (_didIteratorError3) {
- throw _iteratorError3;
- }
- }
- }
-
- reader._readIntoRequests = [];
- }
-
- defaultReaderClosedPromiseReject(reader, e);
- reader._closedPromise.catch(function () {});
- }
-
- function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) {
- var reader = stream._reader;
-
- assert(reader._readIntoRequests.length > 0);
-
- var readIntoRequest = reader._readIntoRequests.shift();
- readIntoRequest._resolve(CreateIterResultObject(chunk, done));
- }
-
- function ReadableStreamFulfillReadRequest(stream, chunk, done) {
- var reader = stream._reader;
-
- assert(reader._readRequests.length > 0);
-
- var readRequest = reader._readRequests.shift();
- readRequest._resolve(CreateIterResultObject(chunk, done));
- }
-
- function ReadableStreamGetNumReadIntoRequests(stream) {
- return stream._reader._readIntoRequests.length;
- }
-
- function ReadableStreamGetNumReadRequests(stream) {
- return stream._reader._readRequests.length;
- }
-
- function ReadableStreamHasBYOBReader(stream) {
- var reader = stream._reader;
-
- if (reader === undefined) {
- return false;
- }
-
- if (IsReadableStreamBYOBReader(reader) === false) {
- return false;
- }
-
- return true;
- }
-
- function ReadableStreamHasDefaultReader(stream) {
- var reader = stream._reader;
-
- if (reader === undefined) {
- return false;
- }
-
- if (IsReadableStreamDefaultReader(reader) === false) {
- return false;
- }
-
- return true;
- }
-
- // Readers
-
- var ReadableStreamDefaultReader = function () {
- function ReadableStreamDefaultReader(stream) {
- _classCallCheck(this, ReadableStreamDefaultReader);
-
- if (IsReadableStream(stream) === false) {
- throw new TypeError('ReadableStreamDefaultReader can only be constructed with a ReadableStream instance');
- }
- if (IsReadableStreamLocked(stream) === true) {
- throw new TypeError('This stream has already been locked for exclusive reading by another reader');
- }
-
- ReadableStreamReaderGenericInitialize(this, stream);
-
- this._readRequests = [];
- }
-
- _createClass(ReadableStreamDefaultReader, [{
- key: 'cancel',
- value: function cancel(reason) {
- if (IsReadableStreamDefaultReader(this) === false) {
- return Promise.reject(defaultReaderBrandCheckException('cancel'));
- }
-
- if (this._ownerReadableStream === undefined) {
- return Promise.reject(readerLockException('cancel'));
- }
-
- return ReadableStreamReaderGenericCancel(this, reason);
- }
- }, {
- key: 'read',
- value: function read() {
- if (IsReadableStreamDefaultReader(this) === false) {
- return Promise.reject(defaultReaderBrandCheckException('read'));
- }
-
- if (this._ownerReadableStream === undefined) {
- return Promise.reject(readerLockException('read from'));
- }
-
- return ReadableStreamDefaultReaderRead(this);
- }
- }, {
- key: 'releaseLock',
- value: function releaseLock() {
- if (IsReadableStreamDefaultReader(this) === false) {
- throw defaultReaderBrandCheckException('releaseLock');
- }
-
- if (this._ownerReadableStream === undefined) {
- return;
- }
-
- if (this._readRequests.length > 0) {
- throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');
- }
-
- ReadableStreamReaderGenericRelease(this);
- }
- }, {
- key: 'closed',
- get: function get() {
- if (IsReadableStreamDefaultReader(this) === false) {
- return Promise.reject(defaultReaderBrandCheckException('closed'));
- }
-
- return this._closedPromise;
- }
- }]);
-
- return ReadableStreamDefaultReader;
- }();
-
- var ReadableStreamBYOBReader = function () {
- function ReadableStreamBYOBReader(stream) {
- _classCallCheck(this, ReadableStreamBYOBReader);
-
- if (!IsReadableStream(stream)) {
- throw new TypeError('ReadableStreamBYOBReader can only be constructed with a ReadableStream instance given a ' + 'byte source');
- }
- if (IsReadableStreamLocked(stream)) {
- throw new TypeError('This stream has already been locked for exclusive reading by another reader');
- }
-
- ReadableStreamReaderGenericInitialize(this, stream);
-
- this._readIntoRequests = [];
- }
-
- _createClass(ReadableStreamBYOBReader, [{
- key: 'cancel',
- value: function cancel(reason) {
- if (!IsReadableStreamBYOBReader(this)) {
- return Promise.reject(byobReaderBrandCheckException('cancel'));
- }
-
- if (this._ownerReadableStream === undefined) {
- return Promise.reject(readerLockException('cancel'));
- }
-
- return ReadableStreamReaderGenericCancel(this, reason);
- }
- }, {
- key: 'read',
- value: function read(view) {
- if (!IsReadableStreamBYOBReader(this)) {
- return Promise.reject(byobReaderBrandCheckException('read'));
- }
-
- if (this._ownerReadableStream === undefined) {
- return Promise.reject(readerLockException('read from'));
- }
-
- if (!ArrayBuffer.isView(view)) {
- return Promise.reject(new TypeError('view must be an array buffer view'));
- }
-
- if (view.byteLength === 0) {
- return Promise.reject(new TypeError('view must have non-zero byteLength'));
- }
-
- return ReadableStreamBYOBReaderRead(this, view);
- }
- }, {
- key: 'releaseLock',
- value: function releaseLock() {
- if (!IsReadableStreamBYOBReader(this)) {
- throw byobReaderBrandCheckException('releaseLock');
- }
-
- if (this._ownerReadableStream === undefined) {
- return;
- }
-
- if (this._readIntoRequests.length > 0) {
- throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');
- }
-
- ReadableStreamReaderGenericRelease(this);
- }
- }, {
- key: 'closed',
- get: function get() {
- if (!IsReadableStreamBYOBReader(this)) {
- return Promise.reject(byobReaderBrandCheckException('closed'));
- }
-
- return this._closedPromise;
- }
- }]);
-
- return ReadableStreamBYOBReader;
- }();
-
- // Abstract operations for the readers.
-
- function IsReadableStreamBYOBReader(x) {
- if (!typeIsObject(x)) {
- return false;
- }
-
- if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {
- return false;
- }
-
- return true;
- }
-
- function IsReadableStreamDefaultReader(x) {
- if (!typeIsObject(x)) {
- return false;
- }
-
- if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {
- return false;
- }
-
- return true;
- }
-
- function ReadableStreamReaderGenericInitialize(reader, stream) {
- reader._ownerReadableStream = stream;
- stream._reader = reader;
-
- if (stream._state === 'readable') {
- defaultReaderClosedPromiseInitialize(reader);
- } else if (stream._state === 'closed') {
- defaultReaderClosedPromiseInitializeAsResolved(reader);
- } else {
- assert(stream._state === 'errored', 'state must be errored');
-
- defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);
- reader._closedPromise.catch(function () {});
- }
- }
-
- // A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state
- // check.
-
- function ReadableStreamReaderGenericCancel(reader, reason) {
- var stream = reader._ownerReadableStream;
- assert(stream !== undefined);
- return ReadableStreamCancel(stream, reason);
- }
-
- function ReadableStreamReaderGenericRelease(reader) {
- assert(reader._ownerReadableStream !== undefined);
- assert(reader._ownerReadableStream._reader === reader);
-
- if (reader._ownerReadableStream._state === 'readable') {
- defaultReaderClosedPromiseReject(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\'s closedness'));
- } else {
- defaultReaderClosedPromiseResetToRejected(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\'s closedness'));
- }
- reader._closedPromise.catch(function () {});
-
- reader._ownerReadableStream._reader = undefined;
- reader._ownerReadableStream = undefined;
- }
-
- function ReadableStreamBYOBReaderRead(reader, view) {
- var stream = reader._ownerReadableStream;
-
- assert(stream !== undefined);
-
- stream._disturbed = true;
-
- if (stream._state === 'errored') {
- return Promise.reject(stream._storedError);
- }
-
- // Controllers must implement this.
- return ReadableByteStreamControllerPullInto(stream._readableStreamController, view);
- }
-
- function ReadableStreamDefaultReaderRead(reader) {
- var stream = reader._ownerReadableStream;
-
- assert(stream !== undefined);
-
- stream._disturbed = true;
-
- if (stream._state === 'closed') {
- return Promise.resolve(CreateIterResultObject(undefined, true));
- }
-
- if (stream._state === 'errored') {
- return Promise.reject(stream._storedError);
- }
-
- assert(stream._state === 'readable');
-
- return stream._readableStreamController[InternalPull]();
- }
-
- // Controllers
-
- var ReadableStreamDefaultController = function () {
- function ReadableStreamDefaultController(stream, underlyingSource, size, highWaterMark) {
- _classCallCheck(this, ReadableStreamDefaultController);
-
- if (IsReadableStream(stream) === false) {
- throw new TypeError('ReadableStreamDefaultController can only be constructed with a ReadableStream instance');
- }
-
- if (stream._readableStreamController !== undefined) {
- throw new TypeError('ReadableStreamDefaultController instances can only be created by the ReadableStream constructor');
- }
-
- this._controlledReadableStream = stream;
-
- this._underlyingSource = underlyingSource;
-
- this._queue = [];
- this._started = false;
- this._closeRequested = false;
- this._pullAgain = false;
- this._pulling = false;
-
- var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark);
- this._strategySize = normalizedStrategy.size;
- this._strategyHWM = normalizedStrategy.highWaterMark;
-
- var controller = this;
-
- var startResult = InvokeOrNoop(underlyingSource, 'start', [this]);
- Promise.resolve(startResult).then(function () {
- controller._started = true;
-
- assert(controller._pulling === false);
- assert(controller._pullAgain === false);
-
- ReadableStreamDefaultControllerCallPullIfNeeded(controller);
- }, function (r) {
- ReadableStreamDefaultControllerErrorIfNeeded(controller, r);
- }).catch(rethrowAssertionErrorRejection);
- }
-
- _createClass(ReadableStreamDefaultController, [{
- key: 'close',
- value: function close() {
- if (IsReadableStreamDefaultController(this) === false) {
- throw defaultControllerBrandCheckException('close');
- }
-
- if (this._closeRequested === true) {
- throw new TypeError('The stream has already been closed; do not close it again!');
- }
-
- var state = this._controlledReadableStream._state;
- if (state !== 'readable') {
- throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed');
- }
-
- ReadableStreamDefaultControllerClose(this);
- }
- }, {
- key: 'enqueue',
- value: function enqueue(chunk) {
- if (IsReadableStreamDefaultController(this) === false) {
- throw defaultControllerBrandCheckException('enqueue');
- }
-
- if (this._closeRequested === true) {
- throw new TypeError('stream is closed or draining');
- }
-
- var state = this._controlledReadableStream._state;
- if (state !== 'readable') {
- throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to');
- }
-
- return ReadableStreamDefaultControllerEnqueue(this, chunk);
- }
- }, {
- key: 'error',
- value: function error(e) {
- if (IsReadableStreamDefaultController(this) === false) {
- throw defaultControllerBrandCheckException('error');
- }
-
- var stream = this._controlledReadableStream;
- if (stream._state !== 'readable') {
- throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored');
- }
-
- ReadableStreamDefaultControllerError(this, e);
- }
- }, {
- key: InternalCancel,
- value: function value(reason) {
- this._queue = [];
-
- return PromiseInvokeOrNoop(this._underlyingSource, 'cancel', [reason]);
- }
- }, {
- key: InternalPull,
- value: function value() {
- var stream = this._controlledReadableStream;
-
- if (this._queue.length > 0) {
- var chunk = DequeueValue(this._queue);
-
- if (this._closeRequested === true && this._queue.length === 0) {
- ReadableStreamClose(stream);
- } else {
- ReadableStreamDefaultControllerCallPullIfNeeded(this);
- }
-
- return Promise.resolve(CreateIterResultObject(chunk, false));
- }
-
- var pendingPromise = ReadableStreamAddReadRequest(stream);
- ReadableStreamDefaultControllerCallPullIfNeeded(this);
- return pendingPromise;
- }
- }, {
- key: 'desiredSize',
- get: function get() {
- if (IsReadableStreamDefaultController(this) === false) {
- throw defaultControllerBrandCheckException('desiredSize');
- }
-
- return ReadableStreamDefaultControllerGetDesiredSize(this);
- }
- }]);
-
- return ReadableStreamDefaultController;
- }();
-
- // Abstract operations for the ReadableStreamDefaultController.
-
- function IsReadableStreamDefaultController(x) {
- if (!typeIsObject(x)) {
- return false;
- }
-
- if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSource')) {
- return false;
- }
-
- return true;
- }
-
- function ReadableStreamDefaultControllerCallPullIfNeeded(controller) {
- var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);
- if (shouldPull === false) {
- return undefined;
- }
-
- if (controller._pulling === true) {
- controller._pullAgain = true;
- return undefined;
- }
-
- assert(controller._pullAgain === false);
-
- controller._pulling = true;
-
- var pullPromise = PromiseInvokeOrNoop(controller._underlyingSource, 'pull', [controller]);
- pullPromise.then(function () {
- controller._pulling = false;
-
- if (controller._pullAgain === true) {
- controller._pullAgain = false;
- return ReadableStreamDefaultControllerCallPullIfNeeded(controller);
- }
- return undefined;
- }, function (e) {
- ReadableStreamDefaultControllerErrorIfNeeded(controller, e);
- }).catch(rethrowAssertionErrorRejection);
-
- return undefined;
- }
-
- function ReadableStreamDefaultControllerShouldCallPull(controller) {
- var stream = controller._controlledReadableStream;
-
- if (stream._state === 'closed' || stream._state === 'errored') {
- return false;
- }
-
- if (controller._closeRequested === true) {
- return false;
- }
-
- if (controller._started === false) {
- return false;
- }
-
- if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) {
- return true;
- }
-
- var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);
- if (desiredSize > 0) {
- return true;
- }
-
- return false;
- }
-
- // A client of ReadableStreamDefaultController may use these functions directly to bypass state check.
-
- function ReadableStreamDefaultControllerClose(controller) {
- var stream = controller._controlledReadableStream;
-
- assert(controller._closeRequested === false);
- assert(stream._state === 'readable');
-
- controller._closeRequested = true;
-
- if (controller._queue.length === 0) {
- ReadableStreamClose(stream);
- }
- }
-
- function ReadableStreamDefaultControllerEnqueue(controller, chunk) {
- var stream = controller._controlledReadableStream;
-
- assert(controller._closeRequested === false);
- assert(stream._state === 'readable');
-
- if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) {
- ReadableStreamFulfillReadRequest(stream, chunk, false);
- } else {
- var chunkSize = 1;
-
- if (controller._strategySize !== undefined) {
- try {
- chunkSize = controller._strategySize(chunk);
- } catch (chunkSizeE) {
- ReadableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);
- throw chunkSizeE;
- }
- }
-
- try {
- EnqueueValueWithSize(controller._queue, chunk, chunkSize);
- } catch (enqueueE) {
- ReadableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);
- throw enqueueE;
- }
- }
-
- ReadableStreamDefaultControllerCallPullIfNeeded(controller);
-
- return undefined;
- }
-
- function ReadableStreamDefaultControllerError(controller, e) {
- var stream = controller._controlledReadableStream;
-
- assert(stream._state === 'readable');
-
- controller._queue = [];
-
- ReadableStreamError(stream, e);
- }
-
- function ReadableStreamDefaultControllerErrorIfNeeded(controller, e) {
- if (controller._controlledReadableStream._state === 'readable') {
- ReadableStreamDefaultControllerError(controller, e);
- }
- }
-
- function ReadableStreamDefaultControllerGetDesiredSize(controller) {
- var queueSize = GetTotalQueueSize(controller._queue);
- return controller._strategyHWM - queueSize;
- }
-
- var ReadableStreamBYOBRequest = function () {
- function ReadableStreamBYOBRequest(controller, view) {
- _classCallCheck(this, ReadableStreamBYOBRequest);
-
- this._associatedReadableByteStreamController = controller;
- this._view = view;
- }
-
- _createClass(ReadableStreamBYOBRequest, [{
- key: 'respond',
- value: function respond(bytesWritten) {
- if (IsReadableStreamBYOBRequest(this) === false) {
- throw byobRequestBrandCheckException('respond');
- }
-
- if (this._associatedReadableByteStreamController === undefined) {
- throw new TypeError('This BYOB request has been invalidated');
- }
-
- ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);
- }
- }, {
- key: 'respondWithNewView',
- value: function respondWithNewView(view) {
- if (IsReadableStreamBYOBRequest(this) === false) {
- throw byobRequestBrandCheckException('respond');
- }
-
- if (this._associatedReadableByteStreamController === undefined) {
- throw new TypeError('This BYOB request has been invalidated');
- }
-
- if (!ArrayBuffer.isView(view)) {
- throw new TypeError('You can only respond with array buffer views');
- }
-
- ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);
- }
- }, {
- key: 'view',
- get: function get() {
- return this._view;
- }
- }]);
-
- return ReadableStreamBYOBRequest;
- }();
-
- var ReadableByteStreamController = function () {
- function ReadableByteStreamController(stream, underlyingByteSource, highWaterMark) {
- _classCallCheck(this, ReadableByteStreamController);
-
- if (IsReadableStream(stream) === false) {
- throw new TypeError('ReadableByteStreamController can only be constructed with a ReadableStream instance given ' + 'a byte source');
- }
-
- if (stream._readableStreamController !== undefined) {
- throw new TypeError('ReadableByteStreamController instances can only be created by the ReadableStream constructor given a byte ' + 'source');
- }
-
- this._controlledReadableStream = stream;
-
- this._underlyingByteSource = underlyingByteSource;
-
- this._pullAgain = false;
- this._pulling = false;
-
- ReadableByteStreamControllerClearPendingPullIntos(this);
-
- this._queue = [];
- this._totalQueuedBytes = 0;
-
- this._closeRequested = false;
-
- this._started = false;
-
- this._strategyHWM = ValidateAndNormalizeHighWaterMark(highWaterMark);
-
- var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;
- if (autoAllocateChunkSize !== undefined) {
- if (Number.isInteger(autoAllocateChunkSize) === false || autoAllocateChunkSize <= 0) {
- throw new RangeError('autoAllocateChunkSize must be a positive integer');
- }
- }
- this._autoAllocateChunkSize = autoAllocateChunkSize;
-
- this._pendingPullIntos = [];
-
- var controller = this;
-
- var startResult = InvokeOrNoop(underlyingByteSource, 'start', [this]);
- Promise.resolve(startResult).then(function () {
- controller._started = true;
-
- assert(controller._pulling === false);
- assert(controller._pullAgain === false);
-
- ReadableByteStreamControllerCallPullIfNeeded(controller);
- }, function (r) {
- if (stream._state === 'readable') {
- ReadableByteStreamControllerError(controller, r);
- }
- }).catch(rethrowAssertionErrorRejection);
- }
-
- _createClass(ReadableByteStreamController, [{
- key: 'close',
- value: function close() {
- if (IsReadableByteStreamController(this) === false) {
- throw byteStreamControllerBrandCheckException('close');
- }
-
- if (this._closeRequested === true) {
- throw new TypeError('The stream has already been closed; do not close it again!');
- }
-
- var state = this._controlledReadableStream._state;
- if (state !== 'readable') {
- throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed');
- }
-
- ReadableByteStreamControllerClose(this);
- }
- }, {
- key: 'enqueue',
- value: function enqueue(chunk) {
- if (IsReadableByteStreamController(this) === false) {
- throw byteStreamControllerBrandCheckException('enqueue');
- }
-
- if (this._closeRequested === true) {
- throw new TypeError('stream is closed or draining');
- }
-
- var state = this._controlledReadableStream._state;
- if (state !== 'readable') {
- throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to');
- }
-
- if (!ArrayBuffer.isView(chunk)) {
- throw new TypeError('You can only enqueue array buffer views when using a ReadableByteStreamController');
- }
-
- ReadableByteStreamControllerEnqueue(this, chunk);
- }
- }, {
- key: 'error',
- value: function error(e) {
- if (IsReadableByteStreamController(this) === false) {
- throw byteStreamControllerBrandCheckException('error');
- }
-
- var stream = this._controlledReadableStream;
- if (stream._state !== 'readable') {
- throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored');
- }
-
- ReadableByteStreamControllerError(this, e);
- }
- }, {
- key: InternalCancel,
- value: function value(reason) {
- if (this._pendingPullIntos.length > 0) {
- var firstDescriptor = this._pendingPullIntos[0];
- firstDescriptor.bytesFilled = 0;
- }
-
- this._queue = [];
- this._totalQueuedBytes = 0;
-
- return PromiseInvokeOrNoop(this._underlyingByteSource, 'cancel', [reason]);
- }
- }, {
- key: InternalPull,
- value: function value() {
- var stream = this._controlledReadableStream;
-
- if (ReadableStreamGetNumReadRequests(stream) === 0) {
- if (this._totalQueuedBytes > 0) {
- var entry = this._queue.shift();
- this._totalQueuedBytes -= entry.byteLength;
-
- ReadableByteStreamControllerHandleQueueDrain(this);
-
- var view = void 0;
- try {
- view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);
- } catch (viewE) {
- return Promise.reject(viewE);
- }
-
- return Promise.resolve(CreateIterResultObject(view, false));
- }
-
- var autoAllocateChunkSize = this._autoAllocateChunkSize;
- if (autoAllocateChunkSize !== undefined) {
- var buffer = void 0;
- try {
- buffer = new ArrayBuffer(autoAllocateChunkSize);
- } catch (bufferE) {
- return Promise.reject(bufferE);
- }
-
- var pullIntoDescriptor = {
- buffer: buffer,
- byteOffset: 0,
- byteLength: autoAllocateChunkSize,
- bytesFilled: 0,
- elementSize: 1,
- ctor: Uint8Array,
- readerType: 'default'
- };
-
- this._pendingPullIntos.push(pullIntoDescriptor);
- }
- } else {
- assert(this._autoAllocateChunkSize === undefined);
- }
-
- var promise = ReadableStreamAddReadRequest(stream);
-
- ReadableByteStreamControllerCallPullIfNeeded(this);
-
- return promise;
- }
- }, {
- key: 'byobRequest',
- get: function get() {
- if (IsReadableByteStreamController(this) === false) {
- throw byteStreamControllerBrandCheckException('byobRequest');
- }
-
- if (this._byobRequest === undefined && this._pendingPullIntos.length > 0) {
- var firstDescriptor = this._pendingPullIntos[0];
- var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled);
-
- this._byobRequest = new ReadableStreamBYOBRequest(this, view);
- }
-
- return this._byobRequest;
- }
- }, {
- key: 'desiredSize',
- get: function get() {
- if (IsReadableByteStreamController(this) === false) {
- throw byteStreamControllerBrandCheckException('desiredSize');
- }
-
- return ReadableByteStreamControllerGetDesiredSize(this);
- }
- }]);
-
- return ReadableByteStreamController;
- }();
-
- // Abstract operations for the ReadableByteStreamController.
-
- function IsReadableByteStreamController(x) {
- if (!typeIsObject(x)) {
- return false;
- }
-
- if (!Object.prototype.hasOwnProperty.call(x, '_underlyingByteSource')) {
- return false;
- }
-
- return true;
- }
-
- function IsReadableStreamBYOBRequest(x) {
- if (!typeIsObject(x)) {
- return false;
- }
-
- if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {
- return false;
- }
-
- return true;
- }
-
- function ReadableByteStreamControllerCallPullIfNeeded(controller) {
- var shouldPull = ReadableByteStreamControllerShouldCallPull(controller);
- if (shouldPull === false) {
- return undefined;
- }
-
- if (controller._pulling === true) {
- controller._pullAgain = true;
- return undefined;
- }
-
- assert(controller._pullAgain === false);
-
- controller._pulling = true;
-
- // TODO: Test controller argument
- var pullPromise = PromiseInvokeOrNoop(controller._underlyingByteSource, 'pull', [controller]);
- pullPromise.then(function () {
- controller._pulling = false;
-
- if (controller._pullAgain === true) {
- controller._pullAgain = false;
- ReadableByteStreamControllerCallPullIfNeeded(controller);
- }
- }, function (e) {
- if (controller._controlledReadableStream._state === 'readable') {
- ReadableByteStreamControllerError(controller, e);
- }
- }).catch(rethrowAssertionErrorRejection);
-
- return undefined;
- }
-
- function ReadableByteStreamControllerClearPendingPullIntos(controller) {
- ReadableByteStreamControllerInvalidateBYOBRequest(controller);
- controller._pendingPullIntos = [];
- }
-
- function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) {
- assert(stream._state !== 'errored', 'state must not be errored');
-
- var done = false;
- if (stream._state === 'closed') {
- assert(pullIntoDescriptor.bytesFilled === 0);
- done = true;
- }
-
- var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);
- if (pullIntoDescriptor.readerType === 'default') {
- ReadableStreamFulfillReadRequest(stream, filledView, done);
- } else {
- assert(pullIntoDescriptor.readerType === 'byob');
- ReadableStreamFulfillReadIntoRequest(stream, filledView, done);
- }
- }
-
- function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) {
- var bytesFilled = pullIntoDescriptor.bytesFilled;
- var elementSize = pullIntoDescriptor.elementSize;
-
- assert(bytesFilled <= pullIntoDescriptor.byteLength);
- assert(bytesFilled % elementSize === 0);
-
- return new pullIntoDescriptor.ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize);
- }
-
- function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) {
- controller._queue.push({ buffer: buffer, byteOffset: byteOffset, byteLength: byteLength });
- controller._totalQueuedBytes += byteLength;
- }
-
- function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) {
- var elementSize = pullIntoDescriptor.elementSize;
-
- var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;
-
- var maxBytesToCopy = Math.min(controller._totalQueuedBytes, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);
- var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;
- var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;
-
- var totalBytesToCopyRemaining = maxBytesToCopy;
- var ready = false;
- if (maxAlignedBytes > currentAlignedBytes) {
- totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;
- ready = true;
- }
-
- var queue = controller._queue;
-
- while (totalBytesToCopyRemaining > 0) {
- var headOfQueue = queue[0];
-
- var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);
-
- var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;
- ArrayBufferCopy(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);
-
- if (headOfQueue.byteLength === bytesToCopy) {
- queue.shift();
- } else {
- headOfQueue.byteOffset += bytesToCopy;
- headOfQueue.byteLength -= bytesToCopy;
- }
- controller._totalQueuedBytes -= bytesToCopy;
-
- ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);
-
- totalBytesToCopyRemaining -= bytesToCopy;
- }
-
- if (ready === false) {
- assert(controller._totalQueuedBytes === 0, 'queue must be empty');
- assert(pullIntoDescriptor.bytesFilled > 0);
- assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);
- }
-
- return ready;
- }
-
- function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) {
- assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos[0] === pullIntoDescriptor);
-
- ReadableByteStreamControllerInvalidateBYOBRequest(controller);
- pullIntoDescriptor.bytesFilled += size;
- }
-
- function ReadableByteStreamControllerHandleQueueDrain(controller) {
- assert(controller._controlledReadableStream._state === 'readable');
-
- if (controller._totalQueuedBytes === 0 && controller._closeRequested === true) {
- ReadableStreamClose(controller._controlledReadableStream);
- } else {
- ReadableByteStreamControllerCallPullIfNeeded(controller);
- }
- }
-
- function ReadableByteStreamControllerInvalidateBYOBRequest(controller) {
- if (controller._byobRequest === undefined) {
- return;
- }
-
- controller._byobRequest._associatedReadableByteStreamController = undefined;
- controller._byobRequest._view = undefined;
- controller._byobRequest = undefined;
- }
-
- function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) {
- assert(controller._closeRequested === false);
-
- while (controller._pendingPullIntos.length > 0) {
- if (controller._totalQueuedBytes === 0) {
- return;
- }
-
- var pullIntoDescriptor = controller._pendingPullIntos[0];
-
- if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) {
- ReadableByteStreamControllerShiftPendingPullInto(controller);
-
- ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor);
- }
- }
- }
-
- function ReadableByteStreamControllerPullInto(controller, view) {
- var stream = controller._controlledReadableStream;
-
- var elementSize = 1;
- if (view.constructor !== DataView) {
- elementSize = view.constructor.BYTES_PER_ELEMENT;
- }
-
- var ctor = view.constructor;
-
- var pullIntoDescriptor = {
- buffer: view.buffer,
- byteOffset: view.byteOffset,
- byteLength: view.byteLength,
- bytesFilled: 0,
- elementSize: elementSize,
- ctor: ctor,
- readerType: 'byob'
- };
-
- if (controller._pendingPullIntos.length > 0) {
- pullIntoDescriptor.buffer = SameRealmTransfer(pullIntoDescriptor.buffer);
- controller._pendingPullIntos.push(pullIntoDescriptor);
-
- // No ReadableByteStreamControllerCallPullIfNeeded() call since:
- // - No change happens on desiredSize
- // - The source has already been notified of that there's at least 1 pending read(view)
-
- return ReadableStreamAddReadIntoRequest(stream);
- }
-
- if (stream._state === 'closed') {
- var emptyView = new view.constructor(view.buffer, view.byteOffset, 0);
- return Promise.resolve(CreateIterResultObject(emptyView, true));
- }
-
- if (controller._totalQueuedBytes > 0) {
- if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) {
- var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);
-
- ReadableByteStreamControllerHandleQueueDrain(controller);
-
- return Promise.resolve(CreateIterResultObject(filledView, false));
- }
-
- if (controller._closeRequested === true) {
- var e = new TypeError('Insufficient bytes to fill elements in the given buffer');
- ReadableByteStreamControllerError(controller, e);
-
- return Promise.reject(e);
- }
- }
-
- pullIntoDescriptor.buffer = SameRealmTransfer(pullIntoDescriptor.buffer);
- controller._pendingPullIntos.push(pullIntoDescriptor);
-
- var promise = ReadableStreamAddReadIntoRequest(stream);
-
- ReadableByteStreamControllerCallPullIfNeeded(controller);
-
- return promise;
- }
-
- function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) {
- firstDescriptor.buffer = SameRealmTransfer(firstDescriptor.buffer);
-
- assert(firstDescriptor.bytesFilled === 0, 'bytesFilled must be 0');
-
- var stream = controller._controlledReadableStream;
-
- while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {
- var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);
-
- ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);
- }
- }
-
- function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) {
- if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) {
- throw new RangeError('bytesWritten out of range');
- }
-
- ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);
-
- if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {
- // TODO: Figure out whether we should detach the buffer or not here.
- return;
- }
-
- ReadableByteStreamControllerShiftPendingPullInto(controller);
-
- var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;
- if (remainderSize > 0) {
- var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;
- var remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end);
- ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);
- }
-
- pullIntoDescriptor.buffer = SameRealmTransfer(pullIntoDescriptor.buffer);
- pullIntoDescriptor.bytesFilled -= remainderSize;
- ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor);
-
- ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);
- }
-
- function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) {
- var firstDescriptor = controller._pendingPullIntos[0];
-
- var stream = controller._controlledReadableStream;
-
- if (stream._state === 'closed') {
- if (bytesWritten !== 0) {
- throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');
- }
-
- ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);
- } else {
- assert(stream._state === 'readable');
-
- ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);
- }
- }
-
- function ReadableByteStreamControllerShiftPendingPullInto(controller) {
- var descriptor = controller._pendingPullIntos.shift();
- ReadableByteStreamControllerInvalidateBYOBRequest(controller);
- return descriptor;
- }
-
- function ReadableByteStreamControllerShouldCallPull(controller) {
- var stream = controller._controlledReadableStream;
-
- if (stream._state !== 'readable') {
- return false;
- }
-
- if (controller._closeRequested === true) {
- return false;
- }
-
- if (controller._started === false) {
- return false;
- }
-
- if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {
- return true;
- }
-
- if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {
- return true;
- }
-
- if (ReadableByteStreamControllerGetDesiredSize(controller) > 0) {
- return true;
- }
-
- return false;
- }
-
- // A client of ReadableByteStreamController may use these functions directly to bypass state check.
-
- function ReadableByteStreamControllerClose(controller) {
- var stream = controller._controlledReadableStream;
-
- assert(controller._closeRequested === false);
- assert(stream._state === 'readable');
-
- if (controller._totalQueuedBytes > 0) {
- controller._closeRequested = true;
-
- return;
- }
-
- if (controller._pendingPullIntos.length > 0) {
- var firstPendingPullInto = controller._pendingPullIntos[0];
- if (firstPendingPullInto.bytesFilled > 0) {
- var e = new TypeError('Insufficient bytes to fill elements in the given buffer');
- ReadableByteStreamControllerError(controller, e);
-
- throw e;
- }
- }
-
- ReadableStreamClose(stream);
- }
-
- function ReadableByteStreamControllerEnqueue(controller, chunk) {
- var stream = controller._controlledReadableStream;
-
- assert(controller._closeRequested === false);
- assert(stream._state === 'readable');
-
- var buffer = chunk.buffer;
- var byteOffset = chunk.byteOffset;
- var byteLength = chunk.byteLength;
- var transferredBuffer = SameRealmTransfer(buffer);
-
- if (ReadableStreamHasDefaultReader(stream) === true) {
- if (ReadableStreamGetNumReadRequests(stream) === 0) {
- ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
- } else {
- assert(controller._queue.length === 0);
-
- var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);
- ReadableStreamFulfillReadRequest(stream, transferredView, false);
- }
- } else if (ReadableStreamHasBYOBReader(stream) === true) {
- // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.
- ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
- ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);
- } else {
- assert(IsReadableStreamLocked(stream) === false, 'stream must not be locked');
- ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
- }
- }
-
- function ReadableByteStreamControllerError(controller, e) {
- var stream = controller._controlledReadableStream;
-
- assert(stream._state === 'readable');
-
- ReadableByteStreamControllerClearPendingPullIntos(controller);
-
- controller._queue = [];
-
- ReadableStreamError(stream, e);
- }
-
- function ReadableByteStreamControllerGetDesiredSize(controller) {
- return controller._strategyHWM - controller._totalQueuedBytes;
- }
-
- function ReadableByteStreamControllerRespond(controller, bytesWritten) {
- bytesWritten = Number(bytesWritten);
- if (IsFiniteNonNegativeNumber(bytesWritten) === false) {
- throw new RangeError('bytesWritten must be a finite');
- }
-
- assert(controller._pendingPullIntos.length > 0);
-
- ReadableByteStreamControllerRespondInternal(controller, bytesWritten);
- }
-
- function ReadableByteStreamControllerRespondWithNewView(controller, view) {
- assert(controller._pendingPullIntos.length > 0);
-
- var firstDescriptor = controller._pendingPullIntos[0];
-
- if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {
- throw new RangeError('The region specified by view does not match byobRequest');
- }
- if (firstDescriptor.byteLength !== view.byteLength) {
- throw new RangeError('The buffer of view has different capacity than byobRequest');
- }
-
- firstDescriptor.buffer = view.buffer;
-
- ReadableByteStreamControllerRespondInternal(controller, view.byteLength);
- }
-
- // Helper functions for the ReadableStream.
-
- function streamBrandCheckException(name) {
- return new TypeError('ReadableStream.prototype.' + name + ' can only be used on a ReadableStream');
- }
-
- // Helper functions for the readers.
-
- function readerLockException(name) {
- return new TypeError('Cannot ' + name + ' a stream using a released reader');
- }
-
- // Helper functions for the ReadableStreamDefaultReader.
-
- function defaultReaderBrandCheckException(name) {
- return new TypeError('ReadableStreamDefaultReader.prototype.' + name + ' can only be used on a ReadableStreamDefaultReader');
- }
-
- function defaultReaderClosedPromiseInitialize(reader) {
- reader._closedPromise = new Promise(function (resolve, reject) {
- reader._closedPromise_resolve = resolve;
- reader._closedPromise_reject = reject;
- });
- }
-
- function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) {
- reader._closedPromise = Promise.reject(reason);
- reader._closedPromise_resolve = undefined;
- reader._closedPromise_reject = undefined;
- }
-
- function defaultReaderClosedPromiseInitializeAsResolved(reader) {
- reader._closedPromise = Promise.resolve(undefined);
- reader._closedPromise_resolve = undefined;
- reader._closedPromise_reject = undefined;
- }
-
- function defaultReaderClosedPromiseReject(reader, reason) {
- assert(reader._closedPromise_resolve !== undefined);
- assert(reader._closedPromise_reject !== undefined);
-
- reader._closedPromise_reject(reason);
- reader._closedPromise_resolve = undefined;
- reader._closedPromise_reject = undefined;
- }
-
- function defaultReaderClosedPromiseResetToRejected(reader, reason) {
- assert(reader._closedPromise_resolve === undefined);
- assert(reader._closedPromise_reject === undefined);
-
- reader._closedPromise = Promise.reject(reason);
- }
-
- function defaultReaderClosedPromiseResolve(reader) {
- assert(reader._closedPromise_resolve !== undefined);
- assert(reader._closedPromise_reject !== undefined);
-
- reader._closedPromise_resolve(undefined);
- reader._closedPromise_resolve = undefined;
- reader._closedPromise_reject = undefined;
- }
-
- // Helper functions for the ReadableStreamDefaultReader.
-
- function byobReaderBrandCheckException(name) {
- return new TypeError('ReadableStreamBYOBReader.prototype.' + name + ' can only be used on a ReadableStreamBYOBReader');
- }
-
- // Helper functions for the ReadableStreamDefaultController.
-
- function defaultControllerBrandCheckException(name) {
- return new TypeError('ReadableStreamDefaultController.prototype.' + name + ' can only be used on a ReadableStreamDefaultController');
- }
-
- // Helper functions for the ReadableStreamBYOBRequest.
-
- function byobRequestBrandCheckException(name) {
- return new TypeError('ReadableStreamBYOBRequest.prototype.' + name + ' can only be used on a ReadableStreamBYOBRequest');
- }
-
- // Helper functions for the ReadableByteStreamController.
-
- function byteStreamControllerBrandCheckException(name) {
- return new TypeError('ReadableByteStreamController.prototype.' + name + ' can only be used on a ReadableByteStreamController');
- }
-
- },{"./helpers.js":9,"./queue-with-sizes.js":10,"./utils.js":13,"./writable-stream.js":14,"assert":2}],12:[function(_dereq_,module,exports){
- 'use strict';
-
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
- var assert = _dereq_('assert');
-
- var _require = _dereq_('./helpers.js'),
- InvokeOrNoop = _require.InvokeOrNoop,
- PromiseInvokeOrPerformFallback = _require.PromiseInvokeOrPerformFallback,
- PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop,
- typeIsObject = _require.typeIsObject;
-
- var _require2 = _dereq_('./readable-stream.js'),
- ReadableStream = _require2.ReadableStream,
- ReadableStreamDefaultControllerClose = _require2.ReadableStreamDefaultControllerClose,
- ReadableStreamDefaultControllerEnqueue = _require2.ReadableStreamDefaultControllerEnqueue,
- ReadableStreamDefaultControllerError = _require2.ReadableStreamDefaultControllerError,
- ReadableStreamDefaultControllerGetDesiredSize = _require2.ReadableStreamDefaultControllerGetDesiredSize;
-
- var _require3 = _dereq_('./writable-stream.js'),
- WritableStream = _require3.WritableStream,
- WritableStreamDefaultControllerError = _require3.WritableStreamDefaultControllerError;
-
- // Methods on the transform stream controller object
-
- function TransformStreamCloseReadable(transformStream) {
- // console.log('TransformStreamCloseReadable()');
-
- if (transformStream._errored === true) {
- throw new TypeError('TransformStream is already errored');
- }
-
- if (transformStream._readableClosed === true) {
- throw new TypeError('Readable side is already closed');
- }
-
- TransformStreamCloseReadableInternal(transformStream);
- }
-
- function TransformStreamEnqueueToReadable(transformStream, chunk) {
- // console.log('TransformStreamEnqueueToReadable()');
-
- if (transformStream._errored === true) {
- throw new TypeError('TransformStream is already errored');
- }
-
- if (transformStream._readableClosed === true) {
- throw new TypeError('Readable side is already closed');
- }
-
- // We throttle transformer.transform invocation based on the backpressure of the ReadableStream, but we still
- // accept TransformStreamEnqueueToReadable() calls.
-
- var controller = transformStream._readableController;
-
- try {
- ReadableStreamDefaultControllerEnqueue(controller, chunk);
- } catch (e) {
- // This happens when readableStrategy.size() throws.
- // The ReadableStream has already errored itself.
- transformStream._readableClosed = true;
- TransformStreamErrorIfNeeded(transformStream, e);
-
- throw transformStream._storedError;
- }
-
- var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);
- var maybeBackpressure = desiredSize <= 0;
-
- if (maybeBackpressure === true && transformStream._backpressure === false) {
- // This allows pull() again. When desiredSize is 0, it's possible that a pull() will happen immediately (but
- // asynchronously) after this because of pending read()s and set _backpressure back to false.
- //
- // If pull() could be called from inside enqueue(), then this logic would be wrong. This cannot happen
- // because there is always a promise pending from start() or pull() when _backpressure is false.
- TransformStreamSetBackpressure(transformStream, true);
- }
- }
-
- function TransformStreamError(transformStream, e) {
- if (transformStream._errored === true) {
- throw new TypeError('TransformStream is already errored');
- }
-
- TransformStreamErrorInternal(transformStream, e);
- }
-
- // Abstract operations.
-
- function TransformStreamCloseReadableInternal(transformStream) {
- assert(transformStream._errored === false);
- assert(transformStream._readableClosed === false);
-
- try {
- ReadableStreamDefaultControllerClose(transformStream._readableController);
- } catch (e) {
- assert(false);
- }
-
- transformStream._readableClosed = true;
- }
-
- function TransformStreamErrorIfNeeded(transformStream, e) {
- if (transformStream._errored === false) {
- TransformStreamErrorInternal(transformStream, e);
- }
- }
-
- function TransformStreamErrorInternal(transformStream, e) {
- // console.log('TransformStreamErrorInternal()');
-
- assert(transformStream._errored === false);
-
- transformStream._errored = true;
- transformStream._storedError = e;
-
- if (transformStream._writableDone === false) {
- WritableStreamDefaultControllerError(transformStream._writableController, e);
- }
- if (transformStream._readableClosed === false) {
- ReadableStreamDefaultControllerError(transformStream._readableController, e);
- }
- }
-
- // Used for preventing the next write() call on TransformStreamSink until there
- // is no longer backpressure.
- function TransformStreamReadableReadyPromise(transformStream) {
- assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized');
-
- if (transformStream._backpressure === false) {
- return Promise.resolve();
- }
-
- assert(transformStream._backpressure === true, '_backpressure should have been initialized');
-
- return transformStream._backpressureChangePromise;
- }
-
- function TransformStreamSetBackpressure(transformStream, backpressure) {
- // console.log(`TransformStreamSetBackpressure(${backpressure})`);
-
- // Passes also when called during construction.
- assert(transformStream._backpressure !== backpressure, 'TransformStreamSetBackpressure() should be called only when backpressure is changed');
-
- if (transformStream._backpressureChangePromise !== undefined) {
- // The fulfillment value is just for a sanity check.
- transformStream._backpressureChangePromise_resolve(backpressure);
- }
-
- transformStream._backpressureChangePromise = new Promise(function (resolve) {
- transformStream._backpressureChangePromise_resolve = resolve;
- });
-
- transformStream._backpressureChangePromise.then(function (resolution) {
- assert(resolution !== backpressure, '_backpressureChangePromise should be fulfilled only when backpressure is changed');
- });
-
- transformStream._backpressure = backpressure;
- }
-
- function TransformStreamDefaultTransform(chunk, transformStreamController) {
- var transformStream = transformStreamController._controlledTransformStream;
- TransformStreamEnqueueToReadable(transformStream, chunk);
- return Promise.resolve();
- }
-
- function TransformStreamTransform(transformStream, chunk) {
- // console.log('TransformStreamTransform()');
-
- assert(transformStream._errored === false);
- assert(transformStream._transforming === false);
- assert(transformStream._backpressure === false);
-
- transformStream._transforming = true;
-
- var transformer = transformStream._transformer;
- var controller = transformStream._transformStreamController;
-
- var transformPromise = PromiseInvokeOrPerformFallback(transformer, 'transform', [chunk, controller], TransformStreamDefaultTransform, [chunk, controller]);
-
- return transformPromise.then(function () {
- transformStream._transforming = false;
-
- return TransformStreamReadableReadyPromise(transformStream);
- }, function (e) {
- TransformStreamErrorIfNeeded(transformStream, e);
- return Promise.reject(e);
- });
- }
-
- function IsTransformStreamDefaultController(x) {
- if (!typeIsObject(x)) {
- return false;
- }
-
- if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {
- return false;
- }
-
- return true;
- }
-
- function IsTransformStream(x) {
- if (!typeIsObject(x)) {
- return false;
- }
-
- if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {
- return false;
- }
-
- return true;
- }
-
- var TransformStreamSink = function () {
- function TransformStreamSink(transformStream, startPromise) {
- _classCallCheck(this, TransformStreamSink);
-
- this._transformStream = transformStream;
- this._startPromise = startPromise;
- }
-
- _createClass(TransformStreamSink, [{
- key: 'start',
- value: function start(c) {
- var transformStream = this._transformStream;
-
- transformStream._writableController = c;
-
- return this._startPromise.then(function () {
- return TransformStreamReadableReadyPromise(transformStream);
- });
- }
- }, {
- key: 'write',
- value: function write(chunk) {
- // console.log('TransformStreamSink.write()');
-
- var transformStream = this._transformStream;
-
- return TransformStreamTransform(transformStream, chunk);
- }
- }, {
- key: 'abort',
- value: function abort() {
- var transformStream = this._transformStream;
- transformStream._writableDone = true;
- TransformStreamErrorInternal(transformStream, new TypeError('Writable side aborted'));
- }
- }, {
- key: 'close',
- value: function close() {
- // console.log('TransformStreamSink.close()');
-
- var transformStream = this._transformStream;
-
- assert(transformStream._transforming === false);
-
- transformStream._writableDone = true;
-
- var flushPromise = PromiseInvokeOrNoop(transformStream._transformer, 'flush', [transformStream._transformStreamController]);
- // Return a promise that is fulfilled with undefined on success.
- return flushPromise.then(function () {
- if (transformStream._errored === true) {
- return Promise.reject(transformStream._storedError);
- }
- if (transformStream._readableClosed === false) {
- TransformStreamCloseReadableInternal(transformStream);
- }
- return Promise.resolve();
- }).catch(function (r) {
- TransformStreamErrorIfNeeded(transformStream, r);
- return Promise.reject(transformStream._storedError);
- });
- }
- }]);
-
- return TransformStreamSink;
- }();
-
- var TransformStreamSource = function () {
- function TransformStreamSource(transformStream, startPromise) {
- _classCallCheck(this, TransformStreamSource);
-
- this._transformStream = transformStream;
- this._startPromise = startPromise;
- }
-
- _createClass(TransformStreamSource, [{
- key: 'start',
- value: function start(c) {
- var transformStream = this._transformStream;
-
- transformStream._readableController = c;
-
- return this._startPromise.then(function () {
- // Prevent the first pull() call until there is backpressure.
-
- assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized');
-
- if (transformStream._backpressure === true) {
- return Promise.resolve();
- }
-
- assert(transformStream._backpressure === false, '_backpressure should have been initialized');
-
- return transformStream._backpressureChangePromise;
- });
- }
- }, {
- key: 'pull',
- value: function pull() {
- // console.log('TransformStreamSource.pull()');
-
- var transformStream = this._transformStream;
-
- // Invariant. Enforced by the promises returned by start() and pull().
- assert(transformStream._backpressure === true, 'pull() should be never called while _backpressure is false');
-
- assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized');
-
- TransformStreamSetBackpressure(transformStream, false);
-
- // Prevent the next pull() call until there is backpressure.
- return transformStream._backpressureChangePromise;
- }
- }, {
- key: 'cancel',
- value: function cancel() {
- var transformStream = this._transformStream;
- transformStream._readableClosed = true;
- TransformStreamErrorInternal(transformStream, new TypeError('Readable side canceled'));
- }
- }]);
-
- return TransformStreamSource;
- }();
-
- var TransformStreamDefaultController = function () {
- function TransformStreamDefaultController(transformStream) {
- _classCallCheck(this, TransformStreamDefaultController);
-
- if (IsTransformStream(transformStream) === false) {
- throw new TypeError('TransformStreamDefaultController can only be ' + 'constructed with a TransformStream instance');
- }
-
- if (transformStream._transformStreamController !== undefined) {
- throw new TypeError('TransformStreamDefaultController instances can ' + 'only be created by the TransformStream constructor');
- }
-
- this._controlledTransformStream = transformStream;
- }
-
- _createClass(TransformStreamDefaultController, [{
- key: 'enqueue',
- value: function enqueue(chunk) {
- if (IsTransformStreamDefaultController(this) === false) {
- throw defaultControllerBrandCheckException('enqueue');
- }
-
- TransformStreamEnqueueToReadable(this._controlledTransformStream, chunk);
- }
- }, {
- key: 'close',
- value: function close() {
- if (IsTransformStreamDefaultController(this) === false) {
- throw defaultControllerBrandCheckException('close');
- }
-
- TransformStreamCloseReadable(this._controlledTransformStream);
- }
- }, {
- key: 'error',
- value: function error(reason) {
- if (IsTransformStreamDefaultController(this) === false) {
- throw defaultControllerBrandCheckException('error');
- }
-
- TransformStreamError(this._controlledTransformStream, reason);
- }
- }, {
- key: 'desiredSize',
- get: function get() {
- if (IsTransformStreamDefaultController(this) === false) {
- throw defaultControllerBrandCheckException('desiredSize');
- }
-
- var transformStream = this._controlledTransformStream;
- var readableController = transformStream._readableController;
-
- return ReadableStreamDefaultControllerGetDesiredSize(readableController);
- }
- }]);
-
- return TransformStreamDefaultController;
- }();
-
- var TransformStream = function () {
- function TransformStream() {
- var transformer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
-
- _classCallCheck(this, TransformStream);
-
- this._transformer = transformer;
- var readableStrategy = transformer.readableStrategy,
- writableStrategy = transformer.writableStrategy;
-
-
- this._transforming = false;
- this._errored = false;
- this._storedError = undefined;
-
- this._writableController = undefined;
- this._readableController = undefined;
- this._transformStreamController = undefined;
-
- this._writableDone = false;
- this._readableClosed = false;
-
- this._backpressure = undefined;
- this._backpressureChangePromise = undefined;
- this._backpressureChangePromise_resolve = undefined;
-
- this._transformStreamController = new TransformStreamDefaultController(this);
-
- var startPromise_resolve = void 0;
- var startPromise = new Promise(function (resolve) {
- startPromise_resolve = resolve;
- });
-
- var source = new TransformStreamSource(this, startPromise);
-
- this._readable = new ReadableStream(source, readableStrategy);
-
- var sink = new TransformStreamSink(this, startPromise);
-
- this._writable = new WritableStream(sink, writableStrategy);
-
- assert(this._writableController !== undefined);
- assert(this._readableController !== undefined);
-
- var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(this._readableController);
- // Set _backpressure based on desiredSize. As there is no read() at this point, we can just interpret
- // desiredSize being non-positive as backpressure.
- TransformStreamSetBackpressure(this, desiredSize <= 0);
-
- var transformStream = this;
- var startResult = InvokeOrNoop(transformer, 'start', [transformStream._transformStreamController]);
- startPromise_resolve(startResult);
- startPromise.catch(function (e) {
- // The underlyingSink and underlyingSource will error the readable and writable ends on their own.
- if (transformStream._errored === false) {
- transformStream._errored = true;
- transformStream._storedError = e;
- }
- });
- }
-
- _createClass(TransformStream, [{
- key: 'readable',
- get: function get() {
- if (IsTransformStream(this) === false) {
- throw streamBrandCheckException('readable');
- }
-
- return this._readable;
- }
- }, {
- key: 'writable',
- get: function get() {
- if (IsTransformStream(this) === false) {
- throw streamBrandCheckException('writable');
- }
-
- return this._writable;
- }
- }]);
-
- return TransformStream;
- }();
-
- module.exports = { TransformStream: TransformStream };
-
- // Helper functions for the TransformStreamDefaultController.
-
- function defaultControllerBrandCheckException(name) {
- return new TypeError('TransformStreamDefaultController.prototype.' + name + ' can only be used on a TransformStreamDefaultController');
- }
-
- // Helper functions for the TransformStream.
-
- function streamBrandCheckException(name) {
- return new TypeError('TransformStream.prototype.' + name + ' can only be used on a TransformStream');
- }
-
- },{"./helpers.js":9,"./readable-stream.js":11,"./writable-stream.js":14,"assert":2}],13:[function(_dereq_,module,exports){
- 'use strict';
-
- var assert = _dereq_('assert');
-
- exports.rethrowAssertionErrorRejection = function (e) {
- // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors
- // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't
- // expect any errors, but assertion errors are always problematic.
- if (e && e.constructor === assert.AssertionError) {
- setTimeout(function () {
- throw e;
- }, 0);
- }
- };
-
- },{"assert":2}],14:[function(_dereq_,module,exports){
- 'use strict';
-
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
- var assert = _dereq_('assert');
-
- var _require = _dereq_('./helpers.js'),
- InvokeOrNoop = _require.InvokeOrNoop,
- PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop,
- PromiseInvokeOrFallbackOrNoop = _require.PromiseInvokeOrFallbackOrNoop,
- ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy,
- typeIsObject = _require.typeIsObject;
-
- var _require2 = _dereq_('./utils.js'),
- rethrowAssertionErrorRejection = _require2.rethrowAssertionErrorRejection;
-
- var _require3 = _dereq_('./queue-with-sizes.js'),
- DequeueValue = _require3.DequeueValue,
- EnqueueValueWithSize = _require3.EnqueueValueWithSize,
- GetTotalQueueSize = _require3.GetTotalQueueSize,
- PeekQueueValue = _require3.PeekQueueValue;
-
- var WritableStream = function () {
- function WritableStream() {
- var underlyingSink = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
-
- var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
- size = _ref.size,
- _ref$highWaterMark = _ref.highWaterMark,
- highWaterMark = _ref$highWaterMark === undefined ? 1 : _ref$highWaterMark;
-
- _classCallCheck(this, WritableStream);
-
- this._state = 'writable';
- this._storedError = undefined;
-
- this._writer = undefined;
-
- // Initialize to undefined first because the constructor of the controller checks this
- // variable to validate the caller.
- this._writableStreamController = undefined;
-
- // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data
- // producer without waiting for the queued writes to finish.
- this._writeRequests = [];
-
- // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents
- // them from being erroneously rejected on error. If a write() call is pending, the request is stored here.
- this._pendingWriteRequest = undefined;
-
- // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer
- // has been detached.
- this._pendingCloseRequest = undefined;
-
- // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.
- this._pendingAbortRequest = undefined;
-
- var type = underlyingSink.type;
-
- if (type !== undefined) {
- throw new RangeError('Invalid type is specified');
- }
-
- this._writableStreamController = new WritableStreamDefaultController(this, underlyingSink, size, highWaterMark);
- }
-
- _createClass(WritableStream, [{
- key: 'abort',
- value: function abort(reason) {
- if (IsWritableStream(this) === false) {
- return Promise.reject(streamBrandCheckException('abort'));
- }
-
- if (IsWritableStreamLocked(this) === true) {
- return Promise.reject(new TypeError('Cannot abort a stream that already has a writer'));
- }
-
- return WritableStreamAbort(this, reason);
- }
- }, {
- key: 'getWriter',
- value: function getWriter() {
- if (IsWritableStream(this) === false) {
- throw streamBrandCheckException('getWriter');
- }
-
- return AcquireWritableStreamDefaultWriter(this);
- }
- }, {
- key: 'locked',
- get: function get() {
- if (IsWritableStream(this) === false) {
- throw streamBrandCheckException('locked');
- }
-
- return IsWritableStreamLocked(this);
- }
- }]);
-
- return WritableStream;
- }();
-
- module.exports = {
- AcquireWritableStreamDefaultWriter: AcquireWritableStreamDefaultWriter,
- IsWritableStream: IsWritableStream,
- IsWritableStreamLocked: IsWritableStreamLocked,
- WritableStream: WritableStream,
- WritableStreamAbort: WritableStreamAbort,
- WritableStreamDefaultControllerError: WritableStreamDefaultControllerError,
- WritableStreamDefaultWriterCloseWithErrorPropagation: WritableStreamDefaultWriterCloseWithErrorPropagation,
- WritableStreamDefaultWriterRelease: WritableStreamDefaultWriterRelease,
- WritableStreamDefaultWriterWrite: WritableStreamDefaultWriterWrite
- };
-
- // Abstract operations for the WritableStream.
-
- function AcquireWritableStreamDefaultWriter(stream) {
- return new WritableStreamDefaultWriter(stream);
- }
-
- function IsWritableStream(x) {
- if (!typeIsObject(x)) {
- return false;
- }
-
- if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {
- return false;
- }
-
- return true;
- }
-
- function IsWritableStreamLocked(stream) {
- assert(IsWritableStream(stream) === true, 'IsWritableStreamLocked should only be used on known writable streams');
-
- if (stream._writer === undefined) {
- return false;
- }
-
- return true;
- }
-
- function WritableStreamAbort(stream, reason) {
- var state = stream._state;
- if (state === 'closed') {
- return Promise.resolve(undefined);
- }
- if (state === 'errored') {
- return Promise.reject(stream._storedError);
- }
-
- assert(state === 'writable' || state === 'closing');
-
- var error = new TypeError('Aborted');
-
- WritableStreamError(stream, error);
-
- var controller = stream._writableStreamController;
- assert(controller !== undefined);
- if (controller._writing === true || controller._inClose === true) {
- var promise = new Promise(function (resolve, reject) {
- var abortRequest = {
- _resolve: resolve,
- _reject: reject
- };
-
- stream._pendingAbortRequest = abortRequest;
- });
- if (controller._writing === true) {
- return promise.then(function () {
- return WritableStreamDefaultControllerAbort(stream._writableStreamController, reason);
- });
- }
- return promise;
- }
-
- return WritableStreamDefaultControllerAbort(stream._writableStreamController, reason);
- }
-
- // WritableStream API exposed for controllers.
-
- function WritableStreamAddWriteRequest(stream) {
- assert(IsWritableStreamLocked(stream) === true);
- assert(stream._state === 'writable');
-
- var promise = new Promise(function (resolve, reject) {
- var writeRequest = {
- _resolve: resolve,
- _reject: reject
- };
-
- stream._writeRequests.push(writeRequest);
- });
-
- return promise;
- }
-
- function WritableStreamError(stream, e) {
- var oldState = stream._state;
- assert(oldState === 'writable' || oldState === 'closing');
- stream._state = 'errored';
- stream._storedError = e;
-
- var controller = stream._writableStreamController;
- // This method can be called during the construction of the controller, in which case "controller" will be undefined
- // but the flags are guaranteed to be false anyway.
- if (controller === undefined || controller._writing === false && controller._inClose === false) {
- WritableStreamRejectPromisesInReactionToError(stream);
- }
-
- var writer = stream._writer;
- if (writer !== undefined) {
- if (oldState === 'writable' && WritableStreamDefaultControllerGetBackpressure(stream._writableStreamController) === true) {
- defaultWriterReadyPromiseReject(writer, e);
- } else {
- defaultWriterReadyPromiseResetToRejected(writer, e);
- }
- writer._readyPromise.catch(function () {});
- }
- }
-
- function WritableStreamFinishClose(stream) {
- assert(stream._state === 'closing' || stream._state === 'errored');
-
- if (stream._state === 'closing') {
- defaultWriterClosedPromiseResolve(stream._writer);
- stream._state = 'closed';
- } else {
- assert(stream._state === 'errored');
- defaultWriterClosedPromiseReject(stream._writer, stream._storedError);
- stream._writer._closedPromise.catch(function () {});
- }
-
- if (stream._pendingAbortRequest !== undefined) {
- stream._pendingAbortRequest._resolve();
- stream._pendingAbortRequest = undefined;
- }
- }
-
- function WritableStreamRejectPromisesInReactionToError(stream) {
- assert(stream._state === 'errored');
- assert(stream._pendingWriteRequest === undefined);
-
- var storedError = stream._storedError;
- var _iteratorNormalCompletion = true;
- var _didIteratorError = false;
- var _iteratorError = undefined;
-
- try {
- for (var _iterator = stream._writeRequests[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
- var writeRequest = _step.value;
-
- writeRequest._reject(storedError);
- }
- } catch (err) {
- _didIteratorError = true;
- _iteratorError = err;
- } finally {
- try {
- if (!_iteratorNormalCompletion && _iterator.return) {
- _iterator.return();
- }
- } finally {
- if (_didIteratorError) {
- throw _iteratorError;
- }
- }
- }
-
- stream._writeRequests = [];
-
- if (stream._pendingCloseRequest !== undefined) {
- assert(stream._writableStreamController._inClose === false);
- stream._pendingCloseRequest._reject(storedError);
- stream._pendingCloseRequest = undefined;
- }
-
- var writer = stream._writer;
- if (writer !== undefined) {
- defaultWriterClosedPromiseReject(writer, storedError);
- writer._closedPromise.catch(function () {});
- }
- }
-
- function WritableStreamUpdateBackpressure(stream, backpressure) {
- assert(stream._state === 'writable');
-
- var writer = stream._writer;
- if (writer === undefined) {
- return;
- }
-
- if (backpressure === true) {
- defaultWriterReadyPromiseReset(writer);
- } else {
- assert(backpressure === false);
- defaultWriterReadyPromiseResolve(writer);
- }
- }
-
- var WritableStreamDefaultWriter = function () {
- function WritableStreamDefaultWriter(stream) {
- _classCallCheck(this, WritableStreamDefaultWriter);
-
- if (IsWritableStream(stream) === false) {
- throw new TypeError('WritableStreamDefaultWriter can only be constructed with a WritableStream instance');
- }
- if (IsWritableStreamLocked(stream) === true) {
- throw new TypeError('This stream has already been locked for exclusive writing by another writer');
- }
-
- this._ownerWritableStream = stream;
- stream._writer = this;
-
- var state = stream._state;
-
- if (state === 'writable' || state === 'closing') {
- defaultWriterClosedPromiseInitialize(this);
- } else if (state === 'closed') {
- defaultWriterClosedPromiseInitializeAsResolved(this);
- } else {
- assert(state === 'errored', 'state must be errored');
-
- defaultWriterClosedPromiseInitializeAsRejected(this, stream._storedError);
- this._closedPromise.catch(function () {});
- }
-
- if (state === 'writable' && WritableStreamDefaultControllerGetBackpressure(stream._writableStreamController) === true) {
- defaultWriterReadyPromiseInitialize(this);
- } else {
- defaultWriterReadyPromiseInitializeAsResolved(this, undefined);
- }
- }
-
- _createClass(WritableStreamDefaultWriter, [{
- key: 'abort',
- value: function abort(reason) {
- if (IsWritableStreamDefaultWriter(this) === false) {
- return Promise.reject(defaultWriterBrandCheckException('abort'));
- }
-
- if (this._ownerWritableStream === undefined) {
- return Promise.reject(defaultWriterLockException('abort'));
- }
-
- return WritableStreamDefaultWriterAbort(this, reason);
- }
- }, {
- key: 'close',
- value: function close() {
- if (IsWritableStreamDefaultWriter(this) === false) {
- return Promise.reject(defaultWriterBrandCheckException('close'));
- }
-
- var stream = this._ownerWritableStream;
-
- if (stream === undefined) {
- return Promise.reject(defaultWriterLockException('close'));
- }
-
- if (stream._state === 'closing') {
- return Promise.reject(new TypeError('cannot close an already-closing stream'));
- }
-
- return WritableStreamDefaultWriterClose(this);
- }
- }, {
- key: 'releaseLock',
- value: function releaseLock() {
- if (IsWritableStreamDefaultWriter(this) === false) {
- throw defaultWriterBrandCheckException('releaseLock');
- }
-
- var stream = this._ownerWritableStream;
-
- if (stream === undefined) {
- return;
- }
-
- assert(stream._writer !== undefined);
-
- WritableStreamDefaultWriterRelease(this);
- }
- }, {
- key: 'write',
- value: function write(chunk) {
- if (IsWritableStreamDefaultWriter(this) === false) {
- return Promise.reject(defaultWriterBrandCheckException('write'));
- }
-
- var stream = this._ownerWritableStream;
-
- if (stream === undefined) {
- return Promise.reject(defaultWriterLockException('write to'));
- }
-
- if (stream._state === 'closing') {
- return Promise.reject(new TypeError('Cannot write to an already-closed stream'));
- }
-
- return WritableStreamDefaultWriterWrite(this, chunk);
- }
- }, {
- key: 'closed',
- get: function get() {
- if (IsWritableStreamDefaultWriter(this) === false) {
- return Promise.reject(defaultWriterBrandCheckException('closed'));
- }
-
- return this._closedPromise;
- }
- }, {
- key: 'desiredSize',
- get: function get() {
- if (IsWritableStreamDefaultWriter(this) === false) {
- throw defaultWriterBrandCheckException('desiredSize');
- }
-
- if (this._ownerWritableStream === undefined) {
- throw defaultWriterLockException('desiredSize');
- }
-
- return WritableStreamDefaultWriterGetDesiredSize(this);
- }
- }, {
- key: 'ready',
- get: function get() {
- if (IsWritableStreamDefaultWriter(this) === false) {
- return Promise.reject(defaultWriterBrandCheckException('ready'));
- }
-
- return this._readyPromise;
- }
- }]);
-
- return WritableStreamDefaultWriter;
- }();
-
- // Abstract operations for the WritableStreamDefaultWriter.
-
- function IsWritableStreamDefaultWriter(x) {
- if (!typeIsObject(x)) {
- return false;
- }
-
- if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {
- return false;
- }
-
- return true;
- }
-
- // A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.
-
- function WritableStreamDefaultWriterAbort(writer, reason) {
- var stream = writer._ownerWritableStream;
-
- assert(stream !== undefined);
-
- return WritableStreamAbort(stream, reason);
- }
-
- function WritableStreamDefaultWriterClose(writer) {
- var stream = writer._ownerWritableStream;
-
- assert(stream !== undefined);
-
- var state = stream._state;
- if (state === 'closed' || state === 'errored') {
- return Promise.reject(new TypeError('The stream (in ' + state + ' state) is not in the writable state and cannot be closed'));
- }
-
- assert(state === 'writable');
-
- var promise = new Promise(function (resolve, reject) {
- var closeRequest = {
- _resolve: resolve,
- _reject: reject
- };
-
- stream._pendingCloseRequest = closeRequest;
- });
-
- if (WritableStreamDefaultControllerGetBackpressure(stream._writableStreamController) === true) {
- defaultWriterReadyPromiseResolve(writer);
- }
-
- stream._state = 'closing';
-
- WritableStreamDefaultControllerClose(stream._writableStreamController);
-
- return promise;
- }
-
- function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) {
- var stream = writer._ownerWritableStream;
-
- assert(stream !== undefined);
-
- var state = stream._state;
- if (state === 'closing' || state === 'closed') {
- return Promise.resolve();
- }
-
- if (state === 'errored') {
- return Promise.reject(stream._storedError);
- }
-
- assert(state === 'writable');
-
- return WritableStreamDefaultWriterClose(writer);
- }
-
- function WritableStreamDefaultWriterGetDesiredSize(writer) {
- var stream = writer._ownerWritableStream;
- var state = stream._state;
-
- if (state === 'errored') {
- return null;
- }
-
- if (state === 'closed') {
- return 0;
- }
-
- return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);
- }
-
- function WritableStreamDefaultWriterRelease(writer) {
- var stream = writer._ownerWritableStream;
- assert(stream !== undefined);
- assert(stream._writer === writer);
-
- var releasedError = new TypeError('Writer was released and can no longer be used to monitor the stream\'s closedness');
- var state = stream._state;
-
- if (state === 'writable' || state === 'closing' || stream._pendingAbortRequest !== undefined) {
- defaultWriterClosedPromiseReject(writer, releasedError);
- } else {
- defaultWriterClosedPromiseResetToRejected(writer, releasedError);
- }
- writer._closedPromise.catch(function () {});
-
- if (state === 'writable' && WritableStreamDefaultControllerGetBackpressure(stream._writableStreamController) === true) {
- defaultWriterReadyPromiseReject(writer, releasedError);
- } else {
- defaultWriterReadyPromiseResetToRejected(writer, releasedError);
- }
- writer._readyPromise.catch(function () {});
-
- stream._writer = undefined;
- writer._ownerWritableStream = undefined;
- }
-
- function WritableStreamDefaultWriterWrite(writer, chunk) {
- var stream = writer._ownerWritableStream;
-
- assert(stream !== undefined);
-
- var state = stream._state;
- if (state === 'closed' || state === 'errored') {
- return Promise.reject(new TypeError('The stream (in ' + state + ' state) is not in the writable state and cannot be written to'));
- }
-
- assert(state === 'writable');
-
- var promise = WritableStreamAddWriteRequest(stream);
-
- WritableStreamDefaultControllerWrite(stream._writableStreamController, chunk);
-
- return promise;
- }
-
- var WritableStreamDefaultController = function () {
- function WritableStreamDefaultController(stream, underlyingSink, size, highWaterMark) {
- _classCallCheck(this, WritableStreamDefaultController);
-
- if (IsWritableStream(stream) === false) {
- throw new TypeError('WritableStreamDefaultController can only be constructed with a WritableStream instance');
- }
-
- if (stream._writableStreamController !== undefined) {
- throw new TypeError('WritableStreamDefaultController instances can only be created by the WritableStream constructor');
- }
-
- this._controlledWritableStream = stream;
-
- this._underlyingSink = underlyingSink;
-
- this._queue = [];
- this._started = false;
- this._writing = false;
- this._inClose = false;
-
- var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark);
- this._strategySize = normalizedStrategy.size;
- this._strategyHWM = normalizedStrategy.highWaterMark;
-
- var backpressure = WritableStreamDefaultControllerGetBackpressure(this);
- if (backpressure === true) {
- WritableStreamUpdateBackpressure(stream, backpressure);
- }
-
- var controller = this;
-
- var startResult = InvokeOrNoop(underlyingSink, 'start', [this]);
- Promise.resolve(startResult).then(function () {
- controller._started = true;
- WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
- }, function (r) {
- WritableStreamDefaultControllerErrorIfNeeded(controller, r);
- }).catch(rethrowAssertionErrorRejection);
- }
-
- _createClass(WritableStreamDefaultController, [{
- key: 'error',
- value: function error(e) {
- if (IsWritableStreamDefaultController(this) === false) {
- throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController');
- }
-
- var state = this._controlledWritableStream._state;
- if (state === 'closed' || state === 'errored') {
- throw new TypeError('The stream is ' + state + ' and so cannot be errored');
- }
-
- WritableStreamDefaultControllerError(this, e);
- }
- }]);
-
- return WritableStreamDefaultController;
- }();
-
- // Abstract operations implementing interface required by the WritableStream.
-
- function WritableStreamDefaultControllerAbort(controller, reason) {
- controller._queue = [];
-
- var sinkAbortPromise = PromiseInvokeOrFallbackOrNoop(controller._underlyingSink, 'abort', [reason], 'close', [controller]);
- return sinkAbortPromise.then(function () {
- return undefined;
- });
- }
-
- function WritableStreamDefaultControllerClose(controller) {
- EnqueueValueWithSize(controller._queue, 'close', 0);
- WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
- }
-
- function WritableStreamDefaultControllerGetDesiredSize(controller) {
- var queueSize = GetTotalQueueSize(controller._queue);
- return controller._strategyHWM - queueSize;
- }
-
- function WritableStreamDefaultControllerWrite(controller, chunk) {
- var stream = controller._controlledWritableStream;
-
- assert(stream._state === 'writable');
-
- var chunkSize = 1;
-
- if (controller._strategySize !== undefined) {
- try {
- chunkSize = controller._strategySize(chunk);
- } catch (chunkSizeE) {
- // TODO: Should we notify the sink of this error?
- WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);
- return;
- }
- }
-
- var writeRecord = { chunk: chunk };
-
- var lastBackpressure = WritableStreamDefaultControllerGetBackpressure(controller);
-
- try {
- EnqueueValueWithSize(controller._queue, writeRecord, chunkSize);
- } catch (enqueueE) {
- WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);
- return;
- }
-
- if (stream._state === 'writable') {
- var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
- if (lastBackpressure !== backpressure) {
- WritableStreamUpdateBackpressure(stream, backpressure);
- }
- }
-
- WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
- }
-
- // Abstract operations for the WritableStreamDefaultController.
-
- function IsWritableStreamDefaultController(x) {
- if (!typeIsObject(x)) {
- return false;
- }
-
- if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSink')) {
- return false;
- }
-
- return true;
- }
-
- function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {
- if (controller._controlledWritableStream._state === 'closed' || controller._controlledWritableStream._state === 'errored') {
- return;
- }
-
- if (controller._started === false) {
- return;
- }
-
- if (controller._writing === true) {
- return;
- }
-
- if (controller._queue.length === 0) {
- return;
- }
-
- var writeRecord = PeekQueueValue(controller._queue);
- if (writeRecord === 'close') {
- WritableStreamDefaultControllerProcessClose(controller);
- } else {
- WritableStreamDefaultControllerProcessWrite(controller, writeRecord.chunk);
- }
- }
-
- function WritableStreamDefaultControllerErrorIfNeeded(controller, e) {
- if (controller._controlledWritableStream._state === 'writable' || controller._controlledWritableStream._state === 'closing') {
- WritableStreamDefaultControllerError(controller, e);
- }
- }
-
- function WritableStreamDefaultControllerProcessClose(controller) {
- var stream = controller._controlledWritableStream;
-
- assert(stream._state === 'closing', 'can\'t process final write record unless already closed');
-
- DequeueValue(controller._queue);
- assert(controller._queue.length === 0, 'queue must be empty once the final write record is dequeued');
-
- controller._inClose = true;
- var sinkClosePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'close', [controller]);
- sinkClosePromise.then(function () {
- assert(controller._inClose === true);
- controller._inClose = false;
- if (stream._state !== 'closing' && stream._state !== 'errored') {
- return;
- }
-
- assert(stream._pendingCloseRequest !== undefined);
- stream._pendingCloseRequest._resolve(undefined);
- stream._pendingCloseRequest = undefined;
-
- WritableStreamFinishClose(stream);
- }, function (r) {
- assert(controller._inClose === true);
- controller._inClose = false;
- assert(stream._pendingCloseRequest !== undefined);
- stream._pendingCloseRequest._reject(r);
- stream._pendingCloseRequest = undefined;
- if (stream._pendingAbortRequest !== undefined) {
- stream._pendingAbortRequest._reject(r);
- stream._pendingAbortRequest = undefined;
- }
- WritableStreamDefaultControllerErrorIfNeeded(controller, r);
- }).catch(rethrowAssertionErrorRejection);
- }
-
- function WritableStreamDefaultControllerProcessWrite(controller, chunk) {
- controller._writing = true;
-
- var stream = controller._controlledWritableStream;
-
- assert(stream._pendingWriteRequest === undefined);
- assert(stream._writeRequests.length !== 0);
- stream._pendingWriteRequest = stream._writeRequests.shift();
- var sinkWritePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'write', [chunk, controller]);
- sinkWritePromise.then(function () {
- var state = stream._state;
-
- assert(controller._writing === true);
- controller._writing = false;
-
- assert(stream._pendingWriteRequest !== undefined);
- stream._pendingWriteRequest._resolve(undefined);
- stream._pendingWriteRequest = undefined;
-
- if (state === 'errored') {
- WritableStreamRejectPromisesInReactionToError(stream);
-
- if (stream._pendingAbortRequest !== undefined) {
- stream._pendingAbortRequest._resolve();
- stream._pendingAbortRequest = undefined;
- }
- return;
- }
- var lastBackpressure = WritableStreamDefaultControllerGetBackpressure(controller);
- DequeueValue(controller._queue);
- if (state !== 'closing') {
- var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
- if (lastBackpressure !== backpressure) {
- WritableStreamUpdateBackpressure(controller._controlledWritableStream, backpressure);
- }
- }
-
- WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
- }, function (r) {
- assert(controller._writing === true);
- controller._writing = false;
-
- assert(stream._pendingWriteRequest !== undefined);
- stream._pendingWriteRequest._reject(r);
- stream._pendingWriteRequest = undefined;
- if (stream._state === 'errored') {
- stream._storedError = r;
- WritableStreamRejectPromisesInReactionToError(stream);
- }
- if (stream._pendingAbortRequest !== undefined) {
- stream._pendingAbortRequest._reject(r);
- stream._pendingAbortRequest = undefined;
- }
- WritableStreamDefaultControllerErrorIfNeeded(controller, r);
- }).catch(rethrowAssertionErrorRejection);
- }
-
- function WritableStreamDefaultControllerGetBackpressure(controller) {
- var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);
- return desiredSize <= 0;
- }
-
- // A client of WritableStreamDefaultController may use these functions directly to bypass state check.
-
- function WritableStreamDefaultControllerError(controller, e) {
- var stream = controller._controlledWritableStream;
-
- assert(stream._state === 'writable' || stream._state === 'closing');
-
- WritableStreamError(stream, e);
-
- controller._queue = [];
- }
-
- // Helper functions for the WritableStream.
-
- function streamBrandCheckException(name) {
- return new TypeError('WritableStream.prototype.' + name + ' can only be used on a WritableStream');
- }
-
- // Helper functions for the WritableStreamDefaultWriter.
-
- function defaultWriterBrandCheckException(name) {
- return new TypeError('WritableStreamDefaultWriter.prototype.' + name + ' can only be used on a WritableStreamDefaultWriter');
- }
-
- function defaultWriterLockException(name) {
- return new TypeError('Cannot ' + name + ' a stream using a released writer');
- }
-
- function defaultWriterClosedPromiseInitialize(writer) {
- writer._closedPromise = new Promise(function (resolve, reject) {
- writer._closedPromise_resolve = resolve;
- writer._closedPromise_reject = reject;
- });
- }
-
- function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) {
- writer._closedPromise = Promise.reject(reason);
- writer._closedPromise_resolve = undefined;
- writer._closedPromise_reject = undefined;
- }
-
- function defaultWriterClosedPromiseInitializeAsResolved(writer) {
- writer._closedPromise = Promise.resolve(undefined);
- writer._closedPromise_resolve = undefined;
- writer._closedPromise_reject = undefined;
- }
-
- function defaultWriterClosedPromiseReject(writer, reason) {
- assert(writer._closedPromise_resolve !== undefined);
- assert(writer._closedPromise_reject !== undefined);
-
- writer._closedPromise_reject(reason);
- writer._closedPromise_resolve = undefined;
- writer._closedPromise_reject = undefined;
- }
-
- function defaultWriterClosedPromiseResetToRejected(writer, reason) {
- assert(writer._closedPromise_resolve === undefined);
- assert(writer._closedPromise_reject === undefined);
-
- writer._closedPromise = Promise.reject(reason);
- }
-
- function defaultWriterClosedPromiseResolve(writer) {
- assert(writer._closedPromise_resolve !== undefined);
- assert(writer._closedPromise_reject !== undefined);
-
- writer._closedPromise_resolve(undefined);
- writer._closedPromise_resolve = undefined;
- writer._closedPromise_reject = undefined;
- }
-
- function defaultWriterReadyPromiseInitialize(writer) {
- writer._readyPromise = new Promise(function (resolve, reject) {
- writer._readyPromise_resolve = resolve;
- writer._readyPromise_reject = reject;
- });
- }
-
- function defaultWriterReadyPromiseInitializeAsResolved(writer) {
- writer._readyPromise = Promise.resolve(undefined);
- writer._readyPromise_resolve = undefined;
- writer._readyPromise_reject = undefined;
- }
-
- function defaultWriterReadyPromiseReject(writer, reason) {
- assert(writer._readyPromise_resolve !== undefined);
- assert(writer._readyPromise_reject !== undefined);
-
- writer._readyPromise_reject(reason);
- writer._readyPromise_resolve = undefined;
- writer._readyPromise_reject = undefined;
- }
-
- function defaultWriterReadyPromiseReset(writer) {
- assert(writer._readyPromise_resolve === undefined);
- assert(writer._readyPromise_reject === undefined);
-
- writer._readyPromise = new Promise(function (resolve, reject) {
- writer._readyPromise_resolve = resolve;
- writer._readyPromise_reject = reject;
- });
- }
-
- function defaultWriterReadyPromiseResetToRejected(writer, reason) {
- assert(writer._readyPromise_resolve === undefined);
- assert(writer._readyPromise_reject === undefined);
-
- writer._readyPromise = Promise.reject(reason);
- }
-
- function defaultWriterReadyPromiseResolve(writer) {
- assert(writer._readyPromise_resolve !== undefined);
- assert(writer._readyPromise_reject !== undefined);
-
- writer._readyPromise_resolve(undefined);
- writer._readyPromise_resolve = undefined;
- writer._readyPromise_reject = undefined;
- }
-
- },{"./helpers.js":9,"./queue-with-sizes.js":10,"./utils.js":13,"assert":2}]},{},[1])(1)
- });
- //# sourceMappingURL=polyfill.js.map