UNPKG

pdfjs-dist

Version:

Generic build of Mozilla's PDF.js library.

1,483 lines (1,174 loc) • 129 kB
/* * To the extent possible under law, the authors have dedicated all copyright * and related and neighboring rights to this software to the public * domain worldwide. This software is distributed without any warranty. * * You should have received a copy of the CC0 Public Domain Dedication along * with this software. If not, see https://creativecommons.org/publicdomain/zero/1.0/. */ (function(e, a) { for(var i in a) e[i] = a[i]; }(exports, /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // identity function for calling harmony imports with the correct context /******/ __webpack_require__.i = function(value) { return value; }; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 7); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { "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; }; var _require = __webpack_require__(1), assert = _require.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(null, argsF); } try { return Promise.resolve(Call(method, O, args)); } catch (e) { return Promise.reject(e); } }; // Not implemented correctly exports.TransferArrayBuffer = function (O) { return O.slice(); }; 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 }; }; /***/ }), /* 1 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; function rethrowAssertionErrorRejection(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 === AssertionError) { setTimeout(function () { throw e; }, 0); } }; function AssertionError(message) { this.name = 'AssertionError'; this.message = message || ''; this.stack = new Error().stack; } AssertionError.prototype = Object.create(Error.prototype); AssertionError.prototype.constructor = AssertionError; function assert(value, message) { if (!value) { throw new AssertionError(message); } } module.exports = { rethrowAssertionErrorRejection: rethrowAssertionErrorRejection, AssertionError: AssertionError, assert: assert }; /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { "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 = __webpack_require__(0), InvokeOrNoop = _require.InvokeOrNoop, PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop, ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy, typeIsObject = _require.typeIsObject; var _require2 = __webpack_require__(1), assert = _require2.assert, rethrowAssertionErrorRejection = _require2.rethrowAssertionErrorRejection; var _require3 = __webpack_require__(3), DequeueValue = _require3.DequeueValue, EnqueueValueWithSize = _require3.EnqueueValueWithSize, PeekQueueValue = _require3.PeekQueueValue, ResetQueue = _require3.ResetQueue; 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'; // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is // 'erroring' or 'errored'. May be set to an undefined value. 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 in-flight, the request is stored here. this._inFlightWriteRequest = undefined; // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer // has been detached. this._closeRequest = undefined; // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here. this._inFlightCloseRequest = undefined; // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached. this._pendingAbortRequest = undefined; // The backpressure signal set by the controller. this._backpressure = false; var type = underlyingSink.type; if (type !== undefined) { throw new RangeError('Invalid type is specified'); } this._writableStreamController = new WritableStreamDefaultController(this, underlyingSink, size, highWaterMark); this._writableStreamController.__startSteps(); } _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, WritableStreamCloseQueuedOrInFlight: WritableStreamCloseQueuedOrInFlight }; // 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); } var error = new TypeError('Requested to abort'); if (stream._pendingAbortRequest !== undefined) { return Promise.reject(error); } assert(state === 'writable' || state === 'erroring', 'state must be writable or erroring'); var wasAlreadyErroring = false; if (state === 'erroring') { wasAlreadyErroring = true; // reason will not be used, so don't keep a reference to it. reason = undefined; } var promise = new Promise(function (resolve, reject) { stream._pendingAbortRequest = { _resolve: resolve, _reject: reject, _reason: reason, _wasAlreadyErroring: wasAlreadyErroring }; }); if (wasAlreadyErroring === false) { WritableStreamStartErroring(stream, error); } return promise; } // 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 WritableStreamDealWithRejection(stream, error) { var state = stream._state; if (state === 'writable') { WritableStreamStartErroring(stream, error); return; } assert(state === 'erroring'); WritableStreamFinishErroring(stream); } function WritableStreamStartErroring(stream, reason) { assert(stream._storedError === undefined, 'stream._storedError === undefined'); assert(stream._state === 'writable', 'state must be writable'); var controller = stream._writableStreamController; assert(controller !== undefined, 'controller must not be undefined'); stream._state = 'erroring'; stream._storedError = reason; var writer = stream._writer; if (writer !== undefined) { WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason); } if (WritableStreamHasOperationMarkedInFlight(stream) === false && controller._started === true) { WritableStreamFinishErroring(stream); } } function WritableStreamFinishErroring(stream) { assert(stream._state === 'erroring', 'stream._state === erroring'); assert(WritableStreamHasOperationMarkedInFlight(stream) === false, 'WritableStreamHasOperationMarkedInFlight(stream) === false'); stream._state = 'errored'; stream._writableStreamController.__errorSteps(); var storedError = stream._storedError; for (var i = 0; i < stream._writeRequests.length; i++) { var writeRequest = stream._writeRequests[i]; writeRequest._reject(storedError); } stream._writeRequests = []; if (stream._pendingAbortRequest === undefined) { WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); return; } var abortRequest = stream._pendingAbortRequest; stream._pendingAbortRequest = undefined; if (abortRequest._wasAlreadyErroring === true) { abortRequest._reject(storedError); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); return; } var promise = stream._writableStreamController.__abortSteps(abortRequest._reason); promise.then(function () { abortRequest._resolve(); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); }, function (reason) { abortRequest._reject(reason); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); }); } function WritableStreamFinishInFlightWrite(stream) { assert(stream._inFlightWriteRequest !== undefined); stream._inFlightWriteRequest._resolve(undefined); stream._inFlightWriteRequest = undefined; } function WritableStreamFinishInFlightWriteWithError(stream, error) { assert(stream._inFlightWriteRequest !== undefined); stream._inFlightWriteRequest._reject(error); stream._inFlightWriteRequest = undefined; assert(stream._state === 'writable' || stream._state === 'erroring'); WritableStreamDealWithRejection(stream, error); } function WritableStreamFinishInFlightClose(stream) { assert(stream._inFlightCloseRequest !== undefined); stream._inFlightCloseRequest._resolve(undefined); stream._inFlightCloseRequest = undefined; var state = stream._state; assert(state === 'writable' || state === 'erroring'); if (state === 'erroring') { // The error was too late to do anything, so it is ignored. stream._storedError = undefined; if (stream._pendingAbortRequest !== undefined) { stream._pendingAbortRequest._resolve(); stream._pendingAbortRequest = undefined; } } stream._state = 'closed'; var writer = stream._writer; if (writer !== undefined) { defaultWriterClosedPromiseResolve(writer); } assert(stream._pendingAbortRequest === undefined, 'stream._pendingAbortRequest === undefined'); assert(stream._storedError === undefined, 'stream._storedError === undefined'); } function WritableStreamFinishInFlightCloseWithError(stream, error) { assert(stream._inFlightCloseRequest !== undefined); stream._inFlightCloseRequest._reject(error); stream._inFlightCloseRequest = undefined; assert(stream._state === 'writable' || stream._state === 'erroring'); // Never execute sink abort() after sink close(). if (stream._pendingAbortRequest !== undefined) { stream._pendingAbortRequest._reject(error); stream._pendingAbortRequest = undefined; } WritableStreamDealWithRejection(stream, error); } // TODO(ricea): Fix alphabetical order. function WritableStreamCloseQueuedOrInFlight(stream) { if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) { return false; } return true; } function WritableStreamHasOperationMarkedInFlight(stream) { if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) { return false; } return true; } function WritableStreamMarkCloseRequestInFlight(stream) { assert(stream._inFlightCloseRequest === undefined); assert(stream._closeRequest !== undefined); stream._inFlightCloseRequest = stream._closeRequest; stream._closeRequest = undefined; } function WritableStreamMarkFirstWriteRequestInFlight(stream) { assert(stream._inFlightWriteRequest === undefined, 'there must be no pending write request'); assert(stream._writeRequests.length !== 0, 'writeRequests must not be empty'); stream._inFlightWriteRequest = stream._writeRequests.shift(); } function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) { assert(stream._state === 'errored', '_stream_.[[state]] is `"errored"`'); if (stream._closeRequest !== undefined) { assert(stream._inFlightCloseRequest === undefined); stream._closeRequest._reject(stream._storedError); stream._closeRequest = undefined; } var writer = stream._writer; if (writer !== undefined) { defaultWriterClosedPromiseReject(writer, stream._storedError); writer._closedPromise.catch(function () {}); } } function WritableStreamUpdateBackpressure(stream, backpressure) { assert(stream._state === 'writable'); assert(WritableStreamCloseQueuedOrInFlight(stream) === false); var writer = stream._writer; if (writer !== undefined && backpressure !== stream._backpressure) { if (backpressure === true) { defaultWriterReadyPromiseReset(writer); } else { assert(backpressure === false); defaultWriterReadyPromiseResolve(writer); } } stream._backpressure = backpressure; } 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') { if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._backpressure === true) { defaultWriterReadyPromiseInitialize(this); } else { defaultWriterReadyPromiseInitializeAsResolved(this); } defaultWriterClosedPromiseInitialize(this); } else if (state === 'erroring') { defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError); this._readyPromise.catch(function () {}); defaultWriterClosedPromiseInitialize(this); } else if (state === 'closed') { defaultWriterReadyPromiseInitializeAsResolved(this); defaultWriterClosedPromiseInitializeAsResolved(this); } else { assert(state === 'errored', 'state must be errored'); var storedError = stream._storedError; defaultWriterReadyPromiseInitializeAsRejected(this, storedError); this._readyPromise.catch(function () {}); defaultWriterClosedPromiseInitializeAsRejected(this, storedError); this._closedPromise.catch(function () {}); } } _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 (WritableStreamCloseQueuedOrInFlight(stream) === true) { 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')); } if (this._ownerWritableStream === undefined) { return Promise.reject(defaultWriterLockException('write to')); } 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' || state === 'erroring'); assert(WritableStreamCloseQueuedOrInFlight(stream) === false); var promise = new Promise(function (resolve, reject) { var closeRequest = { _resolve: resolve, _reject: reject }; stream._closeRequest = closeRequest; }); if (stream._backpressure === true && state === 'writable') { defaultWriterReadyPromiseResolve(writer); } WritableStreamDefaultControllerClose(stream._writableStreamController); return promise; } function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) { var stream = writer._ownerWritableStream; assert(stream !== undefined); var state = stream._state; if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') { return Promise.resolve(); } if (state === 'errored') { return Promise.reject(stream._storedError); } assert(state === 'writable' || state === 'erroring'); return WritableStreamDefaultWriterClose(writer); } function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) { if (writer._closedPromiseState === 'pending') { defaultWriterClosedPromiseReject(writer, error); } else { defaultWriterClosedPromiseResetToRejected(writer, error); } writer._closedPromise.catch(function () {}); } function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) { if (writer._readyPromiseState === 'pending') { defaultWriterReadyPromiseReject(writer, error); } else { defaultWriterReadyPromiseResetToRejected(writer, error); } writer._readyPromise.catch(function () {}); } function WritableStreamDefaultWriterGetDesiredSize(writer) { var stream = writer._ownerWritableStream; var state = stream._state; if (state === 'errored' || state === 'erroring') { 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'); WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError); // The state transitions to "errored" before the sink abort() method runs, but the writer.closed promise is not // rejected until afterwards. This means that simply testing state will not work. WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError); stream._writer = undefined; writer._ownerWritableStream = undefined; } function WritableStreamDefaultWriterWrite(writer, chunk) { var stream = writer._ownerWritableStream; assert(stream !== undefined); var controller = stream._writableStreamController; var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk); if (stream !== writer._ownerWritableStream) { return Promise.reject(defaultWriterLockException('write to')); } var state = stream._state; if (state === 'errored') { return Promise.reject(stream._storedError); } if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') { return Promise.reject(new TypeError('The stream is closing or closed and cannot be written to')); } if (state === 'erroring') { return Promise.reject(stream._storedError); } assert(state === 'writable'); var promise = WritableStreamAddWriteRequest(stream); WritableStreamDefaultControllerWrite(controller, chunk, chunkSize); 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; // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly. this._queue = undefined; this._queueTotalSize = undefined; ResetQueue(this); this._started = false; var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark); this._strategySize = normalizedStrategy.size; this._strategyHWM = normalizedStrategy.highWaterMark; var backpressure = WritableStreamDefaultControllerGetBackpressure(this); WritableStreamUpdateBackpressure(stream, backpressure); } _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 !== 'writable') { // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so // just treat it as a no-op. return; } WritableStreamDefaultControllerError(this, e); } }, { key: '__abortSteps', value: function __abortSteps(reason) { return PromiseInvokeOrNoop(this._underlyingSink, 'abort', [reason]); } }, { key: '__errorSteps', value: function __errorSteps() { ResetQueue(this); } }, { key: '__startSteps', value: function __startSteps() { var _this = this; var startResult = InvokeOrNoop(this._underlyingSink, 'start', [this]); var stream = this._controlledWritableStream; Promise.resolve(startResult).then(function () { assert(stream._state === 'writable' || stream._state === 'erroring'); _this._started = true; WritableStreamDefaultControllerAdvanceQueueIfNeeded(_this); }, function (r) { assert(stream._state === 'writable' || stream._state === 'erroring'); _this._started = true; WritableStreamDealWithRejection(stream, r); }).catch(rethrowAssertionErrorRejection); } }]); return WritableStreamDefaultController; }(); // Abstract operations implementing interface required by the WritableStream. function WritableStreamDefaultControllerClose(controller) { EnqueueValueWithSize(controller, 'close', 0); WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); } function WritableStreamDefaultControllerGetChunkSize(controller, chunk) { var strategySize = controller._strategySize; if (strategySize === undefined) { return 1; } try { return strategySize(chunk); } catch (chunkSizeE) { WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE); return 1; } } function WritableStreamDefaultControllerGetDesiredSize(controller) { return controller._strategyHWM - controller._queueTotalSize; } function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) { var writeRecord = { chunk: chunk }; try { EnqueueValueWithSize(controller, writeRecord, chunkSize); } catch (enqueueE) { WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE); return; } var stream = controller._controlledWritableStream; if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._state === 'writable') { var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); 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) { var stream = controller._controlledWritableStream; if (controller._started === false) { return; } if (stream._inFlightWriteRequest !== undefined) { return; } var state = stream._state; if (state === 'closed' || state === 'errored') { return; } if (state === 'erroring') { WritableStreamFinishErroring(stream); return; } if (controller._queue.length === 0) { return; } var writeRecord = PeekQueueValue(controller); if (writeRecord === 'close') { WritableStreamDefaultControllerProcessClose(controller); } else { WritableStreamDefaultControllerProcessWrite(controller, writeRecord.chunk); } } function WritableStreamDefaultControllerErrorIfNeeded(controller, error) { if (controller._controlledWritableStream._state === 'writable') { WritableStreamDefaultControllerError(controller, error); } } function WritableStreamDefaultControllerProcessClose(controller) { var stream = controller._controlledWritableStream; WritableStreamMarkCloseRequestInFlight(stream); DequeueValue(controller); assert(controller._queue.length === 0, 'queue must be empty once the final write record is dequeued'); var sinkClosePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'close', []); sinkClosePromise.then(function () { WritableStreamFinishInFlightClose(stream); }, function (reason) { WritableStreamFinishInFlightCloseWithError(stream, reason); }).catch(rethrowAssertionErrorRejection); } function WritableStreamDefaultControllerProcessWrite(controller, chunk) { var stream = controller._controlledWritableStream; WritableStreamMarkFirstWriteRequestInFlight(stream); var sinkWritePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'write', [chunk, controller]); sinkWritePromise.then(function () { WritableStreamFinishInFlightWrite(stream); var state = stream._state; assert(state === 'writable' || state === 'erroring'); DequeueValue(controller); if (WritableStreamCloseQueuedOrInFlight(stream) === false && state === 'writable') { var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); WritableStreamUpdateBackpressure(stream, backpressure); } WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); }, function (reason) { WritableStreamFinishInFlightWriteWithError(stream, reason); }).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, error) { var stream = controller._controlledWritableStream; assert(stream._state === 'writable'); WritableStreamStartErroring(stream, error); } // 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; writer._closedPromiseState = 'pending'; }); } function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) { writer._closedPromise = Promise.reject(reason); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'rejected'; } function defaultWriterClosedPromiseInitializeAsResolved(writer) { writer._closedPromise = Promise.resolve(undefined); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'resolved'; } function defaultWriterClosedPromiseReject(writer, reason) { assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined'); assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined'); assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending'); writer._closedPromise_reject(reason); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'rejected'; } function defaultWriterClosedPromiseResetToRejected(writer, reason) { assert(writer._closedPromise_resolve === undefined, 'writer._closedPromise_resolve === undefined'); assert(writer._closedPromise_reject === undefined, 'writer._closedPromise_reject === undefined'); assert(writer._closedPromiseState !== 'pending', 'writer._closedPromiseState is not pending'); writer._closedPromise = Promise.reject(reason); writer._closedPromiseState = 'rejected'; } function defaultWriterClosedPromiseResolve(writer) { assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined'); assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined'); assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending'); writer._closedPromise_resolve(undefined); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'resolved'; } function defaultWriterReadyPromiseInitialize(writer) { writer._readyPromise = new Promise(function (resolve, reject) { writer._readyPromise_resolve = resolve; writer._readyPromise_reject = reject; }); writer._readyPromiseState = 'pending'; } function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) { writer._readyPromise = Promise.reject(reason); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'rejected'; } function defaultWriterReadyPromiseInitializeAsResolved(writer) { writer._readyPromise = Promise.resolve(undefined); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'fulfilled'; } function defaultWriterReadyPromiseReject(writer, reason) { assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined'); assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined'); writer._readyPromise_reject(reason); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'rejected'; } function defaultWriterReadyPromiseReset(writer) { assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined'); assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined'); writer._readyPromise = new Promise(function (resolve, reject) { writer._readyPromise_resolve = resolve; writer._readyPromise_reject = reject; }); writer._readyPromiseState = 'pending'; } function defaultWriterReadyPromiseResetToRejected(writer, reason) { assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined'); assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined'); writer._readyPromise = Promise.reject(reason); writer._readyPromiseState = 'rejected'; } function defaultWriterReadyPromiseResolve(writer) { assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined'); assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined'); writer._readyPromise_resolve(undefined); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'fulfilled'; } /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _require = __webpack_require__(0), IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber; var _require2 = __webpack_require__(1), assert = _require2.assert; exports.DequeueValue = function (container) { assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: DequeueValue should only be used on containers with [[queue]] and [[queueTotalSize]].'); assert(container._queue.length > 0, 'Spec-level failure: should never dequeue from an empty queue.'); var pair = container._queue.shift(); container._queueTotalSize -= pair.size; if (container._queueTotalSize < 0) { container._queueTotalSize = 0; } return pair.value; }; exports.EnqueueValueWithSize = function (container, value, size) { assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: EnqueueValueWithSize should only be used on containers with [[queue]] and ' + '[[queueTotalSize]].'); size = Number(size); if (!IsFiniteNonNegativeNumber(size)) { throw new RangeError('Size must be a finite, non-NaN, non-negative number.'); } container._queue.push({ value: value, size: size }); container._queueTotalSize += size; }; exports.PeekQueueValue = function (container) { assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: PeekQueueValue should only be used on containers with [[queue]] and [[queueTotalSize]].'); assert(container._queue.length > 0, 'Spec-level failure: should never peek at an empty queue.'); var pair = container._queue[0]; return pair.value; }; exports.ResetQueue = function (container) { assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: ResetQueue should only be used on containers with [[queue]] and [[queueTotalSize]].'); container._queue = []; container._queueTotalSize = 0; }; /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { "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 = __webpack_require__(0), ArrayBufferCopy = _require.ArrayBufferCopy, CreateIterResultObject = _require.CreateIterResultObject, IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber, InvokeOrNoop = _require.InvokeOrNoop, PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop, TransferArrayBuffer = _require.TransferArrayBuffer, ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy, ValidateAndNormalizeHighWaterMark = _require.ValidateAndNormalizeHighWaterMark; var _require2 = __webpack_require__(0), createArrayFromList = _require2.createArrayFromList, createDataProperty = _require2.createDataProperty, typeIsObject = _require2.typeIsObject; var _require3 = __webpack_require__(1), assert = _require3.assert, rethrowAssertionErrorRejection = _require3.rethrowAssertionErrorRejection; var _require4 = __webpack_require__(3), DequeueValue = _require4.DequeueValue, EnqueueValueWithSize = _require4.EnqueueValueWithSize, ResetQueue = _require4.ResetQueue; var _require5 = __webpack_require__(2), AcquireWritableStreamDefaultWriter = _require5.AcquireWritableStreamDefaultWriter, IsWritableStream = _require5.IsWritableStream, IsWritableStreamLocked = _require5.IsWritableStreamLocked, WritableStreamAbort = _require5.WritableStreamAbort, WritableStreamDefaultWriterCloseWithErrorPropagation = _require5.WritableStreamDefaultWriterCloseWithErrorPropagation, WritableStreamDefaultWriterRelease = _require5.WritableStreamDefaultWriterRelease, WritableStreamDefaultWriterWrite = _require5.WritableStreamDefaultWriterWrite, WritableStreamCloseQueuedOrInFlight = _require5.WritableStreamCloseQueuedOrInFlight; 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 === undefined) { return AcquireReadableStreamDefaultReader(this); } mode = String(mode); if (mode =