pdfjs-dist
Version:
Generic build of Mozilla's PDF.js library.
1,483 lines (1,174 loc) • 129 kB
JavaScript
/*
* 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 =