mirror of
https://github.com/fooflington/selfdefined.git
synced 2025-04-22 01:09:07 +00:00
18986 lines
556 KiB
JavaScript
18986 lines
556 KiB
JavaScript
/******/ (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;
|
||
/******/
|
||
/******/ // 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 = 99);
|
||
/******/ })
|
||
/************************************************************************/
|
||
/******/ ([
|
||
/* 0 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var OuterSubscriber_1 = __webpack_require__(29);
|
||
var subscribeToResult_1 = __webpack_require__(30);
|
||
/* tslint:enable:max-line-length */
|
||
/**
|
||
* Combines the source Observable with other Observables to create an Observable
|
||
* whose values are calculated from the latest values of each, only when the
|
||
* source emits.
|
||
*
|
||
* <span class="informal">Whenever the source Observable emits a value, it
|
||
* computes a formula using that value plus the latest values from other input
|
||
* Observables, then emits the output of that formula.</span>
|
||
*
|
||
* <img src="./img/withLatestFrom.png" width="100%">
|
||
*
|
||
* `withLatestFrom` combines each value from the source Observable (the
|
||
* instance) with the latest values from the other input Observables only when
|
||
* the source emits a value, optionally using a `project` function to determine
|
||
* the value to be emitted on the output Observable. All input Observables must
|
||
* emit at least one value before the output Observable will emit a value.
|
||
*
|
||
* @example <caption>On every click event, emit an array with the latest timer event plus the click event</caption>
|
||
* var clicks = Rx.Observable.fromEvent(document, 'click');
|
||
* var timer = Rx.Observable.interval(1000);
|
||
* var result = clicks.withLatestFrom(timer);
|
||
* result.subscribe(x => console.log(x));
|
||
*
|
||
* @see {@link combineLatest}
|
||
*
|
||
* @param {ObservableInput} other An input Observable to combine with the source
|
||
* Observable. More than one input Observables may be given as argument.
|
||
* @param {Function} [project] Projection function for combining values
|
||
* together. Receives all values in order of the Observables passed, where the
|
||
* first parameter is a value from the source Observable. (e.g.
|
||
* `a.withLatestFrom(b, c, (a1, b1, c1) => a1 + b1 + c1)`). If this is not
|
||
* passed, arrays will be emitted on the output Observable.
|
||
* @return {Observable} An Observable of projected values from the most recent
|
||
* values from each input Observable, or an array of the most recent values from
|
||
* each input Observable.
|
||
* @method withLatestFrom
|
||
* @owner Observable
|
||
*/
|
||
function withLatestFrom() {
|
||
var args = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
args[_i - 0] = arguments[_i];
|
||
}
|
||
return function (source) {
|
||
var project;
|
||
if (typeof args[args.length - 1] === 'function') {
|
||
project = args.pop();
|
||
}
|
||
var observables = args;
|
||
return source.lift(new WithLatestFromOperator(observables, project));
|
||
};
|
||
}
|
||
exports.withLatestFrom = withLatestFrom;
|
||
var WithLatestFromOperator = (function () {
|
||
function WithLatestFromOperator(observables, project) {
|
||
this.observables = observables;
|
||
this.project = project;
|
||
}
|
||
WithLatestFromOperator.prototype.call = function (subscriber, source) {
|
||
return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));
|
||
};
|
||
return WithLatestFromOperator;
|
||
}());
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var WithLatestFromSubscriber = (function (_super) {
|
||
__extends(WithLatestFromSubscriber, _super);
|
||
function WithLatestFromSubscriber(destination, observables, project) {
|
||
_super.call(this, destination);
|
||
this.observables = observables;
|
||
this.project = project;
|
||
this.toRespond = [];
|
||
var len = observables.length;
|
||
this.values = new Array(len);
|
||
for (var i = 0; i < len; i++) {
|
||
this.toRespond.push(i);
|
||
}
|
||
for (var i = 0; i < len; i++) {
|
||
var observable = observables[i];
|
||
this.add(subscribeToResult_1.subscribeToResult(this, observable, observable, i));
|
||
}
|
||
}
|
||
WithLatestFromSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
|
||
this.values[outerIndex] = innerValue;
|
||
var toRespond = this.toRespond;
|
||
if (toRespond.length > 0) {
|
||
var found = toRespond.indexOf(outerIndex);
|
||
if (found !== -1) {
|
||
toRespond.splice(found, 1);
|
||
}
|
||
}
|
||
};
|
||
WithLatestFromSubscriber.prototype.notifyComplete = function () {
|
||
// noop
|
||
};
|
||
WithLatestFromSubscriber.prototype._next = function (value) {
|
||
if (this.toRespond.length === 0) {
|
||
var args = [value].concat(this.values);
|
||
if (this.project) {
|
||
this._tryProject(args);
|
||
}
|
||
else {
|
||
this.destination.next(args);
|
||
}
|
||
}
|
||
};
|
||
WithLatestFromSubscriber.prototype._tryProject = function (args) {
|
||
var result;
|
||
try {
|
||
result = this.project.apply(this, args);
|
||
}
|
||
catch (err) {
|
||
this.destination.error(err);
|
||
return;
|
||
}
|
||
this.destination.next(result);
|
||
};
|
||
return WithLatestFromSubscriber;
|
||
}(OuterSubscriber_1.OuterSubscriber));
|
||
//# sourceMappingURL=withLatestFrom.js.map
|
||
|
||
/***/ }),
|
||
/* 1 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var root_1 = __webpack_require__(7);
|
||
var toSubscriber_1 = __webpack_require__(103);
|
||
var observable_1 = __webpack_require__(45);
|
||
var pipe_1 = __webpack_require__(105);
|
||
/**
|
||
* A representation of any set of values over any amount of time. This is the most basic building block
|
||
* of RxJS.
|
||
*
|
||
* @class Observable<T>
|
||
*/
|
||
var Observable = (function () {
|
||
/**
|
||
* @constructor
|
||
* @param {Function} subscribe the function that is called when the Observable is
|
||
* initially subscribed to. This function is given a Subscriber, to which new values
|
||
* can be `next`ed, or an `error` method can be called to raise an error, or
|
||
* `complete` can be called to notify of a successful completion.
|
||
*/
|
||
function Observable(subscribe) {
|
||
this._isScalar = false;
|
||
if (subscribe) {
|
||
this._subscribe = subscribe;
|
||
}
|
||
}
|
||
/**
|
||
* Creates a new Observable, with this Observable as the source, and the passed
|
||
* operator defined as the new observable's operator.
|
||
* @method lift
|
||
* @param {Operator} operator the operator defining the operation to take on the observable
|
||
* @return {Observable} a new observable with the Operator applied
|
||
*/
|
||
Observable.prototype.lift = function (operator) {
|
||
var observable = new Observable();
|
||
observable.source = this;
|
||
observable.operator = operator;
|
||
return observable;
|
||
};
|
||
/**
|
||
* Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.
|
||
*
|
||
* <span class="informal">Use it when you have all these Observables, but still nothing is happening.</span>
|
||
*
|
||
* `subscribe` is not a regular operator, but a method that calls Observable's internal `subscribe` function. It
|
||
* might be for example a function that you passed to a {@link create} static factory, but most of the time it is
|
||
* a library implementation, which defines what and when will be emitted by an Observable. This means that calling
|
||
* `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often
|
||
* thought.
|
||
*
|
||
* Apart from starting the execution of an Observable, this method allows you to listen for values
|
||
* that an Observable emits, as well as for when it completes or errors. You can achieve this in two
|
||
* following ways.
|
||
*
|
||
* The first way is creating an object that implements {@link Observer} interface. It should have methods
|
||
* defined by that interface, but note that it should be just a regular JavaScript object, which you can create
|
||
* yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular do
|
||
* not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also
|
||
* that your object does not have to implement all methods. If you find yourself creating a method that doesn't
|
||
* do anything, you can simply omit it. Note however, that if `error` method is not provided, all errors will
|
||
* be left uncaught.
|
||
*
|
||
* The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.
|
||
* This means you can provide three functions as arguments to `subscribe`, where first function is equivalent
|
||
* of a `next` method, second of an `error` method and third of a `complete` method. Just as in case of Observer,
|
||
* if you do not need to listen for something, you can omit a function, preferably by passing `undefined` or `null`,
|
||
* since `subscribe` recognizes these functions by where they were placed in function call. When it comes
|
||
* to `error` function, just as before, if not provided, errors emitted by an Observable will be thrown.
|
||
*
|
||
* Whatever style of calling `subscribe` you use, in both cases it returns a Subscription object.
|
||
* This object allows you to call `unsubscribe` on it, which in turn will stop work that an Observable does and will clean
|
||
* up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback
|
||
* provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.
|
||
*
|
||
* Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.
|
||
* It is an Observable itself that decides when these functions will be called. For example {@link of}
|
||
* by default emits all its values synchronously. Always check documentation for how given Observable
|
||
* will behave when subscribed and if its default behavior can be modified with a {@link Scheduler}.
|
||
*
|
||
* @example <caption>Subscribe with an Observer</caption>
|
||
* const sumObserver = {
|
||
* sum: 0,
|
||
* next(value) {
|
||
* console.log('Adding: ' + value);
|
||
* this.sum = this.sum + value;
|
||
* },
|
||
* error() { // We actually could just remove this method,
|
||
* }, // since we do not really care about errors right now.
|
||
* complete() {
|
||
* console.log('Sum equals: ' + this.sum);
|
||
* }
|
||
* };
|
||
*
|
||
* Rx.Observable.of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.
|
||
* .subscribe(sumObserver);
|
||
*
|
||
* // Logs:
|
||
* // "Adding: 1"
|
||
* // "Adding: 2"
|
||
* // "Adding: 3"
|
||
* // "Sum equals: 6"
|
||
*
|
||
*
|
||
* @example <caption>Subscribe with functions</caption>
|
||
* let sum = 0;
|
||
*
|
||
* Rx.Observable.of(1, 2, 3)
|
||
* .subscribe(
|
||
* function(value) {
|
||
* console.log('Adding: ' + value);
|
||
* sum = sum + value;
|
||
* },
|
||
* undefined,
|
||
* function() {
|
||
* console.log('Sum equals: ' + sum);
|
||
* }
|
||
* );
|
||
*
|
||
* // Logs:
|
||
* // "Adding: 1"
|
||
* // "Adding: 2"
|
||
* // "Adding: 3"
|
||
* // "Sum equals: 6"
|
||
*
|
||
*
|
||
* @example <caption>Cancel a subscription</caption>
|
||
* const subscription = Rx.Observable.interval(1000).subscribe(
|
||
* num => console.log(num),
|
||
* undefined,
|
||
* () => console.log('completed!') // Will not be called, even
|
||
* ); // when cancelling subscription
|
||
*
|
||
*
|
||
* setTimeout(() => {
|
||
* subscription.unsubscribe();
|
||
* console.log('unsubscribed!');
|
||
* }, 2500);
|
||
*
|
||
* // Logs:
|
||
* // 0 after 1s
|
||
* // 1 after 2s
|
||
* // "unsubscribed!" after 2.5s
|
||
*
|
||
*
|
||
* @param {Observer|Function} observerOrNext (optional) Either an observer with methods to be called,
|
||
* or the first of three possible handlers, which is the handler for each value emitted from the subscribed
|
||
* Observable.
|
||
* @param {Function} error (optional) A handler for a terminal event resulting from an error. If no error handler is provided,
|
||
* the error will be thrown as unhandled.
|
||
* @param {Function} complete (optional) A handler for a terminal event resulting from successful completion.
|
||
* @return {ISubscription} a subscription reference to the registered handlers
|
||
* @method subscribe
|
||
*/
|
||
Observable.prototype.subscribe = function (observerOrNext, error, complete) {
|
||
var operator = this.operator;
|
||
var sink = toSubscriber_1.toSubscriber(observerOrNext, error, complete);
|
||
if (operator) {
|
||
operator.call(sink, this.source);
|
||
}
|
||
else {
|
||
sink.add(this.source || !sink.syncErrorThrowable ? this._subscribe(sink) : this._trySubscribe(sink));
|
||
}
|
||
if (sink.syncErrorThrowable) {
|
||
sink.syncErrorThrowable = false;
|
||
if (sink.syncErrorThrown) {
|
||
throw sink.syncErrorValue;
|
||
}
|
||
}
|
||
return sink;
|
||
};
|
||
Observable.prototype._trySubscribe = function (sink) {
|
||
try {
|
||
return this._subscribe(sink);
|
||
}
|
||
catch (err) {
|
||
sink.syncErrorThrown = true;
|
||
sink.syncErrorValue = err;
|
||
sink.error(err);
|
||
}
|
||
};
|
||
/**
|
||
* @method forEach
|
||
* @param {Function} next a handler for each value emitted by the observable
|
||
* @param {PromiseConstructor} [PromiseCtor] a constructor function used to instantiate the Promise
|
||
* @return {Promise} a promise that either resolves on observable completion or
|
||
* rejects with the handled error
|
||
*/
|
||
Observable.prototype.forEach = function (next, PromiseCtor) {
|
||
var _this = this;
|
||
if (!PromiseCtor) {
|
||
if (root_1.root.Rx && root_1.root.Rx.config && root_1.root.Rx.config.Promise) {
|
||
PromiseCtor = root_1.root.Rx.config.Promise;
|
||
}
|
||
else if (root_1.root.Promise) {
|
||
PromiseCtor = root_1.root.Promise;
|
||
}
|
||
}
|
||
if (!PromiseCtor) {
|
||
throw new Error('no Promise impl found');
|
||
}
|
||
return new PromiseCtor(function (resolve, reject) {
|
||
// Must be declared in a separate statement to avoid a RefernceError when
|
||
// accessing subscription below in the closure due to Temporal Dead Zone.
|
||
var subscription;
|
||
subscription = _this.subscribe(function (value) {
|
||
if (subscription) {
|
||
// if there is a subscription, then we can surmise
|
||
// the next handling is asynchronous. Any errors thrown
|
||
// need to be rejected explicitly and unsubscribe must be
|
||
// called manually
|
||
try {
|
||
next(value);
|
||
}
|
||
catch (err) {
|
||
reject(err);
|
||
subscription.unsubscribe();
|
||
}
|
||
}
|
||
else {
|
||
// if there is NO subscription, then we're getting a nexted
|
||
// value synchronously during subscription. We can just call it.
|
||
// If it errors, Observable's `subscribe` will ensure the
|
||
// unsubscription logic is called, then synchronously rethrow the error.
|
||
// After that, Promise will trap the error and send it
|
||
// down the rejection path.
|
||
next(value);
|
||
}
|
||
}, reject, resolve);
|
||
});
|
||
};
|
||
/** @deprecated internal use only */ Observable.prototype._subscribe = function (subscriber) {
|
||
return this.source.subscribe(subscriber);
|
||
};
|
||
/**
|
||
* An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable
|
||
* @method Symbol.observable
|
||
* @return {Observable} this instance of the observable
|
||
*/
|
||
Observable.prototype[observable_1.observable] = function () {
|
||
return this;
|
||
};
|
||
/* tslint:enable:max-line-length */
|
||
/**
|
||
* Used to stitch together functional operators into a chain.
|
||
* @method pipe
|
||
* @return {Observable} the Observable result of all of the operators having
|
||
* been called in the order they were passed in.
|
||
*
|
||
* @example
|
||
*
|
||
* import { map, filter, scan } from 'rxjs/operators';
|
||
*
|
||
* Rx.Observable.interval(1000)
|
||
* .pipe(
|
||
* filter(x => x % 2 === 0),
|
||
* map(x => x + x),
|
||
* scan((acc, x) => acc + x)
|
||
* )
|
||
* .subscribe(x => console.log(x))
|
||
*/
|
||
Observable.prototype.pipe = function () {
|
||
var operations = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
operations[_i - 0] = arguments[_i];
|
||
}
|
||
if (operations.length === 0) {
|
||
return this;
|
||
}
|
||
return pipe_1.pipeFromArray(operations)(this);
|
||
};
|
||
/* tslint:enable:max-line-length */
|
||
Observable.prototype.toPromise = function (PromiseCtor) {
|
||
var _this = this;
|
||
if (!PromiseCtor) {
|
||
if (root_1.root.Rx && root_1.root.Rx.config && root_1.root.Rx.config.Promise) {
|
||
PromiseCtor = root_1.root.Rx.config.Promise;
|
||
}
|
||
else if (root_1.root.Promise) {
|
||
PromiseCtor = root_1.root.Promise;
|
||
}
|
||
}
|
||
if (!PromiseCtor) {
|
||
throw new Error('no Promise impl found');
|
||
}
|
||
return new PromiseCtor(function (resolve, reject) {
|
||
var value;
|
||
_this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });
|
||
});
|
||
};
|
||
// HACK: Since TypeScript inherits static properties too, we have to
|
||
// fight against TypeScript here so Subject can have a different static create signature
|
||
/**
|
||
* Creates a new cold Observable by calling the Observable constructor
|
||
* @static true
|
||
* @owner Observable
|
||
* @method create
|
||
* @param {Function} subscribe? the subscriber function to be passed to the Observable constructor
|
||
* @return {Observable} a new cold observable
|
||
*/
|
||
Observable.create = function (subscribe) {
|
||
return new Observable(subscribe);
|
||
};
|
||
return Observable;
|
||
}());
|
||
exports.Observable = Observable;
|
||
//# sourceMappingURL=Observable.js.map
|
||
|
||
/***/ }),
|
||
/* 2 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
/**
|
||
* Applies a given `project` function to each value emitted by the source
|
||
* Observable, and emits the resulting values as an Observable.
|
||
*
|
||
* <span class="informal">Like [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),
|
||
* it passes each source value through a transformation function to get
|
||
* corresponding output values.</span>
|
||
*
|
||
* <img src="./img/map.png" width="100%">
|
||
*
|
||
* Similar to the well known `Array.prototype.map` function, this operator
|
||
* applies a projection to each value and emits that projection in the output
|
||
* Observable.
|
||
*
|
||
* @example <caption>Map every click to the clientX position of that click</caption>
|
||
* var clicks = Rx.Observable.fromEvent(document, 'click');
|
||
* var positions = clicks.map(ev => ev.clientX);
|
||
* positions.subscribe(x => console.log(x));
|
||
*
|
||
* @see {@link mapTo}
|
||
* @see {@link pluck}
|
||
*
|
||
* @param {function(value: T, index: number): R} project The function to apply
|
||
* to each `value` emitted by the source Observable. The `index` parameter is
|
||
* the number `i` for the i-th emission that has happened since the
|
||
* subscription, starting from the number `0`.
|
||
* @param {any} [thisArg] An optional argument to define what `this` is in the
|
||
* `project` function.
|
||
* @return {Observable<R>} An Observable that emits the values from the source
|
||
* Observable transformed by the given `project` function.
|
||
* @method map
|
||
* @owner Observable
|
||
*/
|
||
function map(project, thisArg) {
|
||
return function mapOperation(source) {
|
||
if (typeof project !== 'function') {
|
||
throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');
|
||
}
|
||
return source.lift(new MapOperator(project, thisArg));
|
||
};
|
||
}
|
||
exports.map = map;
|
||
var MapOperator = (function () {
|
||
function MapOperator(project, thisArg) {
|
||
this.project = project;
|
||
this.thisArg = thisArg;
|
||
}
|
||
MapOperator.prototype.call = function (subscriber, source) {
|
||
return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));
|
||
};
|
||
return MapOperator;
|
||
}());
|
||
exports.MapOperator = MapOperator;
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var MapSubscriber = (function (_super) {
|
||
__extends(MapSubscriber, _super);
|
||
function MapSubscriber(destination, project, thisArg) {
|
||
_super.call(this, destination);
|
||
this.project = project;
|
||
this.count = 0;
|
||
this.thisArg = thisArg || this;
|
||
}
|
||
// NOTE: This looks unoptimized, but it's actually purposefully NOT
|
||
// using try/catch optimizations.
|
||
MapSubscriber.prototype._next = function (value) {
|
||
var result;
|
||
try {
|
||
result = this.project.call(this.thisArg, value, this.count++);
|
||
}
|
||
catch (err) {
|
||
this.destination.error(err);
|
||
return;
|
||
}
|
||
this.destination.next(result);
|
||
};
|
||
return MapSubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
//# sourceMappingURL=map.js.map
|
||
|
||
/***/ }),
|
||
/* 3 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var isFunction_1 = __webpack_require__(42);
|
||
var Subscription_1 = __webpack_require__(12);
|
||
var Observer_1 = __webpack_require__(57);
|
||
var rxSubscriber_1 = __webpack_require__(44);
|
||
/**
|
||
* Implements the {@link Observer} interface and extends the
|
||
* {@link Subscription} class. While the {@link Observer} is the public API for
|
||
* consuming the values of an {@link Observable}, all Observers get converted to
|
||
* a Subscriber, in order to provide Subscription-like capabilities such as
|
||
* `unsubscribe`. Subscriber is a common type in RxJS, and crucial for
|
||
* implementing operators, but it is rarely used as a public API.
|
||
*
|
||
* @class Subscriber<T>
|
||
*/
|
||
var Subscriber = (function (_super) {
|
||
__extends(Subscriber, _super);
|
||
/**
|
||
* @param {Observer|function(value: T): void} [destinationOrNext] A partially
|
||
* defined Observer or a `next` callback function.
|
||
* @param {function(e: ?any): void} [error] The `error` callback of an
|
||
* Observer.
|
||
* @param {function(): void} [complete] The `complete` callback of an
|
||
* Observer.
|
||
*/
|
||
function Subscriber(destinationOrNext, error, complete) {
|
||
_super.call(this);
|
||
this.syncErrorValue = null;
|
||
this.syncErrorThrown = false;
|
||
this.syncErrorThrowable = false;
|
||
this.isStopped = false;
|
||
switch (arguments.length) {
|
||
case 0:
|
||
this.destination = Observer_1.empty;
|
||
break;
|
||
case 1:
|
||
if (!destinationOrNext) {
|
||
this.destination = Observer_1.empty;
|
||
break;
|
||
}
|
||
if (typeof destinationOrNext === 'object') {
|
||
// HACK(benlesh): To resolve an issue where Node users may have multiple
|
||
// copies of rxjs in their node_modules directory.
|
||
if (isTrustedSubscriber(destinationOrNext)) {
|
||
var trustedSubscriber = destinationOrNext[rxSubscriber_1.rxSubscriber]();
|
||
this.syncErrorThrowable = trustedSubscriber.syncErrorThrowable;
|
||
this.destination = trustedSubscriber;
|
||
trustedSubscriber.add(this);
|
||
}
|
||
else {
|
||
this.syncErrorThrowable = true;
|
||
this.destination = new SafeSubscriber(this, destinationOrNext);
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
this.syncErrorThrowable = true;
|
||
this.destination = new SafeSubscriber(this, destinationOrNext, error, complete);
|
||
break;
|
||
}
|
||
}
|
||
Subscriber.prototype[rxSubscriber_1.rxSubscriber] = function () { return this; };
|
||
/**
|
||
* A static factory for a Subscriber, given a (potentially partial) definition
|
||
* of an Observer.
|
||
* @param {function(x: ?T): void} [next] The `next` callback of an Observer.
|
||
* @param {function(e: ?any): void} [error] The `error` callback of an
|
||
* Observer.
|
||
* @param {function(): void} [complete] The `complete` callback of an
|
||
* Observer.
|
||
* @return {Subscriber<T>} A Subscriber wrapping the (partially defined)
|
||
* Observer represented by the given arguments.
|
||
*/
|
||
Subscriber.create = function (next, error, complete) {
|
||
var subscriber = new Subscriber(next, error, complete);
|
||
subscriber.syncErrorThrowable = false;
|
||
return subscriber;
|
||
};
|
||
/**
|
||
* The {@link Observer} callback to receive notifications of type `next` from
|
||
* the Observable, with a value. The Observable may call this method 0 or more
|
||
* times.
|
||
* @param {T} [value] The `next` value.
|
||
* @return {void}
|
||
*/
|
||
Subscriber.prototype.next = function (value) {
|
||
if (!this.isStopped) {
|
||
this._next(value);
|
||
}
|
||
};
|
||
/**
|
||
* The {@link Observer} callback to receive notifications of type `error` from
|
||
* the Observable, with an attached {@link Error}. Notifies the Observer that
|
||
* the Observable has experienced an error condition.
|
||
* @param {any} [err] The `error` exception.
|
||
* @return {void}
|
||
*/
|
||
Subscriber.prototype.error = function (err) {
|
||
if (!this.isStopped) {
|
||
this.isStopped = true;
|
||
this._error(err);
|
||
}
|
||
};
|
||
/**
|
||
* The {@link Observer} callback to receive a valueless notification of type
|
||
* `complete` from the Observable. Notifies the Observer that the Observable
|
||
* has finished sending push-based notifications.
|
||
* @return {void}
|
||
*/
|
||
Subscriber.prototype.complete = function () {
|
||
if (!this.isStopped) {
|
||
this.isStopped = true;
|
||
this._complete();
|
||
}
|
||
};
|
||
Subscriber.prototype.unsubscribe = function () {
|
||
if (this.closed) {
|
||
return;
|
||
}
|
||
this.isStopped = true;
|
||
_super.prototype.unsubscribe.call(this);
|
||
};
|
||
Subscriber.prototype._next = function (value) {
|
||
this.destination.next(value);
|
||
};
|
||
Subscriber.prototype._error = function (err) {
|
||
this.destination.error(err);
|
||
this.unsubscribe();
|
||
};
|
||
Subscriber.prototype._complete = function () {
|
||
this.destination.complete();
|
||
this.unsubscribe();
|
||
};
|
||
/** @deprecated internal use only */ Subscriber.prototype._unsubscribeAndRecycle = function () {
|
||
var _a = this, _parent = _a._parent, _parents = _a._parents;
|
||
this._parent = null;
|
||
this._parents = null;
|
||
this.unsubscribe();
|
||
this.closed = false;
|
||
this.isStopped = false;
|
||
this._parent = _parent;
|
||
this._parents = _parents;
|
||
return this;
|
||
};
|
||
return Subscriber;
|
||
}(Subscription_1.Subscription));
|
||
exports.Subscriber = Subscriber;
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var SafeSubscriber = (function (_super) {
|
||
__extends(SafeSubscriber, _super);
|
||
function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {
|
||
_super.call(this);
|
||
this._parentSubscriber = _parentSubscriber;
|
||
var next;
|
||
var context = this;
|
||
if (isFunction_1.isFunction(observerOrNext)) {
|
||
next = observerOrNext;
|
||
}
|
||
else if (observerOrNext) {
|
||
next = observerOrNext.next;
|
||
error = observerOrNext.error;
|
||
complete = observerOrNext.complete;
|
||
if (observerOrNext !== Observer_1.empty) {
|
||
context = Object.create(observerOrNext);
|
||
if (isFunction_1.isFunction(context.unsubscribe)) {
|
||
this.add(context.unsubscribe.bind(context));
|
||
}
|
||
context.unsubscribe = this.unsubscribe.bind(this);
|
||
}
|
||
}
|
||
this._context = context;
|
||
this._next = next;
|
||
this._error = error;
|
||
this._complete = complete;
|
||
}
|
||
SafeSubscriber.prototype.next = function (value) {
|
||
if (!this.isStopped && this._next) {
|
||
var _parentSubscriber = this._parentSubscriber;
|
||
if (!_parentSubscriber.syncErrorThrowable) {
|
||
this.__tryOrUnsub(this._next, value);
|
||
}
|
||
else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {
|
||
this.unsubscribe();
|
||
}
|
||
}
|
||
};
|
||
SafeSubscriber.prototype.error = function (err) {
|
||
if (!this.isStopped) {
|
||
var _parentSubscriber = this._parentSubscriber;
|
||
if (this._error) {
|
||
if (!_parentSubscriber.syncErrorThrowable) {
|
||
this.__tryOrUnsub(this._error, err);
|
||
this.unsubscribe();
|
||
}
|
||
else {
|
||
this.__tryOrSetError(_parentSubscriber, this._error, err);
|
||
this.unsubscribe();
|
||
}
|
||
}
|
||
else if (!_parentSubscriber.syncErrorThrowable) {
|
||
this.unsubscribe();
|
||
throw err;
|
||
}
|
||
else {
|
||
_parentSubscriber.syncErrorValue = err;
|
||
_parentSubscriber.syncErrorThrown = true;
|
||
this.unsubscribe();
|
||
}
|
||
}
|
||
};
|
||
SafeSubscriber.prototype.complete = function () {
|
||
var _this = this;
|
||
if (!this.isStopped) {
|
||
var _parentSubscriber = this._parentSubscriber;
|
||
if (this._complete) {
|
||
var wrappedComplete = function () { return _this._complete.call(_this._context); };
|
||
if (!_parentSubscriber.syncErrorThrowable) {
|
||
this.__tryOrUnsub(wrappedComplete);
|
||
this.unsubscribe();
|
||
}
|
||
else {
|
||
this.__tryOrSetError(_parentSubscriber, wrappedComplete);
|
||
this.unsubscribe();
|
||
}
|
||
}
|
||
else {
|
||
this.unsubscribe();
|
||
}
|
||
}
|
||
};
|
||
SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {
|
||
try {
|
||
fn.call(this._context, value);
|
||
}
|
||
catch (err) {
|
||
this.unsubscribe();
|
||
throw err;
|
||
}
|
||
};
|
||
SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {
|
||
try {
|
||
fn.call(this._context, value);
|
||
}
|
||
catch (err) {
|
||
parent.syncErrorValue = err;
|
||
parent.syncErrorThrown = true;
|
||
return true;
|
||
}
|
||
return false;
|
||
};
|
||
/** @deprecated internal use only */ SafeSubscriber.prototype._unsubscribe = function () {
|
||
var _parentSubscriber = this._parentSubscriber;
|
||
this._context = null;
|
||
this._parentSubscriber = null;
|
||
_parentSubscriber.unsubscribe();
|
||
};
|
||
return SafeSubscriber;
|
||
}(Subscriber));
|
||
function isTrustedSubscriber(obj) {
|
||
return obj instanceof Subscriber || ('syncErrorThrowable' in obj && obj[rxSubscriber_1.rxSubscriber]);
|
||
}
|
||
//# sourceMappingURL=Subscriber.js.map
|
||
|
||
/***/ }),
|
||
/* 4 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
/* tslint:enable:max-line-length */
|
||
/**
|
||
* Filter items emitted by the source Observable by only emitting those that
|
||
* satisfy a specified predicate.
|
||
*
|
||
* <span class="informal">Like
|
||
* [Array.prototype.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter),
|
||
* it only emits a value from the source if it passes a criterion function.</span>
|
||
*
|
||
* <img src="./img/filter.png" width="100%">
|
||
*
|
||
* Similar to the well-known `Array.prototype.filter` method, this operator
|
||
* takes values from the source Observable, passes them through a `predicate`
|
||
* function and only emits those values that yielded `true`.
|
||
*
|
||
* @example <caption>Emit only click events whose target was a DIV element</caption>
|
||
* var clicks = Rx.Observable.fromEvent(document, 'click');
|
||
* var clicksOnDivs = clicks.filter(ev => ev.target.tagName === 'DIV');
|
||
* clicksOnDivs.subscribe(x => console.log(x));
|
||
*
|
||
* @see {@link distinct}
|
||
* @see {@link distinctUntilChanged}
|
||
* @see {@link distinctUntilKeyChanged}
|
||
* @see {@link ignoreElements}
|
||
* @see {@link partition}
|
||
* @see {@link skip}
|
||
*
|
||
* @param {function(value: T, index: number): boolean} predicate A function that
|
||
* evaluates each value emitted by the source Observable. If it returns `true`,
|
||
* the value is emitted, if `false` the value is not passed to the output
|
||
* Observable. The `index` parameter is the number `i` for the i-th source
|
||
* emission that has happened since the subscription, starting from the number
|
||
* `0`.
|
||
* @param {any} [thisArg] An optional argument to determine the value of `this`
|
||
* in the `predicate` function.
|
||
* @return {Observable} An Observable of values from the source that were
|
||
* allowed by the `predicate` function.
|
||
* @method filter
|
||
* @owner Observable
|
||
*/
|
||
function filter(predicate, thisArg) {
|
||
return function filterOperatorFunction(source) {
|
||
return source.lift(new FilterOperator(predicate, thisArg));
|
||
};
|
||
}
|
||
exports.filter = filter;
|
||
var FilterOperator = (function () {
|
||
function FilterOperator(predicate, thisArg) {
|
||
this.predicate = predicate;
|
||
this.thisArg = thisArg;
|
||
}
|
||
FilterOperator.prototype.call = function (subscriber, source) {
|
||
return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));
|
||
};
|
||
return FilterOperator;
|
||
}());
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var FilterSubscriber = (function (_super) {
|
||
__extends(FilterSubscriber, _super);
|
||
function FilterSubscriber(destination, predicate, thisArg) {
|
||
_super.call(this, destination);
|
||
this.predicate = predicate;
|
||
this.thisArg = thisArg;
|
||
this.count = 0;
|
||
}
|
||
// the try catch block below is left specifically for
|
||
// optimization and perf reasons. a tryCatcher is not necessary here.
|
||
FilterSubscriber.prototype._next = function (value) {
|
||
var result;
|
||
try {
|
||
result = this.predicate.call(this.thisArg, value, this.count++);
|
||
}
|
||
catch (err) {
|
||
this.destination.error(err);
|
||
return;
|
||
}
|
||
if (result) {
|
||
this.destination.next(value);
|
||
}
|
||
};
|
||
return FilterSubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
//# sourceMappingURL=filter.js.map
|
||
|
||
/***/ }),
|
||
/* 5 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
/* tslint:enable:max-line-length */
|
||
/**
|
||
* Perform a side effect for every emission on the source Observable, but return
|
||
* an Observable that is identical to the source.
|
||
*
|
||
* <span class="informal">Intercepts each emission on the source and runs a
|
||
* function, but returns an output which is identical to the source as long as errors don't occur.</span>
|
||
*
|
||
* <img src="./img/do.png" width="100%">
|
||
*
|
||
* Returns a mirrored Observable of the source Observable, but modified so that
|
||
* the provided Observer is called to perform a side effect for every value,
|
||
* error, and completion emitted by the source. Any errors that are thrown in
|
||
* the aforementioned Observer or handlers are safely sent down the error path
|
||
* of the output Observable.
|
||
*
|
||
* This operator is useful for debugging your Observables for the correct values
|
||
* or performing other side effects.
|
||
*
|
||
* Note: this is different to a `subscribe` on the Observable. If the Observable
|
||
* returned by `do` is not subscribed, the side effects specified by the
|
||
* Observer will never happen. `do` therefore simply spies on existing
|
||
* execution, it does not trigger an execution to happen like `subscribe` does.
|
||
*
|
||
* @example <caption>Map every click to the clientX position of that click, while also logging the click event</caption>
|
||
* var clicks = Rx.Observable.fromEvent(document, 'click');
|
||
* var positions = clicks
|
||
* .do(ev => console.log(ev))
|
||
* .map(ev => ev.clientX);
|
||
* positions.subscribe(x => console.log(x));
|
||
*
|
||
* @see {@link map}
|
||
* @see {@link subscribe}
|
||
*
|
||
* @param {Observer|function} [nextOrObserver] A normal Observer object or a
|
||
* callback for `next`.
|
||
* @param {function} [error] Callback for errors in the source.
|
||
* @param {function} [complete] Callback for the completion of the source.
|
||
* @return {Observable} An Observable identical to the source, but runs the
|
||
* specified Observer or callback(s) for each item.
|
||
* @name tap
|
||
*/
|
||
function tap(nextOrObserver, error, complete) {
|
||
return function tapOperatorFunction(source) {
|
||
return source.lift(new DoOperator(nextOrObserver, error, complete));
|
||
};
|
||
}
|
||
exports.tap = tap;
|
||
var DoOperator = (function () {
|
||
function DoOperator(nextOrObserver, error, complete) {
|
||
this.nextOrObserver = nextOrObserver;
|
||
this.error = error;
|
||
this.complete = complete;
|
||
}
|
||
DoOperator.prototype.call = function (subscriber, source) {
|
||
return source.subscribe(new DoSubscriber(subscriber, this.nextOrObserver, this.error, this.complete));
|
||
};
|
||
return DoOperator;
|
||
}());
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var DoSubscriber = (function (_super) {
|
||
__extends(DoSubscriber, _super);
|
||
function DoSubscriber(destination, nextOrObserver, error, complete) {
|
||
_super.call(this, destination);
|
||
var safeSubscriber = new Subscriber_1.Subscriber(nextOrObserver, error, complete);
|
||
safeSubscriber.syncErrorThrowable = true;
|
||
this.add(safeSubscriber);
|
||
this.safeSubscriber = safeSubscriber;
|
||
}
|
||
DoSubscriber.prototype._next = function (value) {
|
||
var safeSubscriber = this.safeSubscriber;
|
||
safeSubscriber.next(value);
|
||
if (safeSubscriber.syncErrorThrown) {
|
||
this.destination.error(safeSubscriber.syncErrorValue);
|
||
}
|
||
else {
|
||
this.destination.next(value);
|
||
}
|
||
};
|
||
DoSubscriber.prototype._error = function (err) {
|
||
var safeSubscriber = this.safeSubscriber;
|
||
safeSubscriber.error(err);
|
||
if (safeSubscriber.syncErrorThrown) {
|
||
this.destination.error(safeSubscriber.syncErrorValue);
|
||
}
|
||
else {
|
||
this.destination.error(err);
|
||
}
|
||
};
|
||
DoSubscriber.prototype._complete = function () {
|
||
var safeSubscriber = this.safeSubscriber;
|
||
safeSubscriber.complete();
|
||
if (safeSubscriber.syncErrorThrown) {
|
||
this.destination.error(safeSubscriber.syncErrorValue);
|
||
}
|
||
else {
|
||
this.destination.complete();
|
||
}
|
||
};
|
||
return DoSubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
//# sourceMappingURL=tap.js.map
|
||
|
||
/***/ }),
|
||
/* 6 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var map_1 = __webpack_require__(2);
|
||
/**
|
||
* Maps each source value (an object) to its specified nested property.
|
||
*
|
||
* <span class="informal">Like {@link map}, but meant only for picking one of
|
||
* the nested properties of every emitted object.</span>
|
||
*
|
||
* <img src="./img/pluck.png" width="100%">
|
||
*
|
||
* Given a list of strings describing a path to an object property, retrieves
|
||
* the value of a specified nested property from all values in the source
|
||
* Observable. If a property can't be resolved, it will return `undefined` for
|
||
* that value.
|
||
*
|
||
* @example <caption>Map every click to the tagName of the clicked target element</caption>
|
||
* var clicks = Rx.Observable.fromEvent(document, 'click');
|
||
* var tagNames = clicks.pluck('target', 'tagName');
|
||
* tagNames.subscribe(x => console.log(x));
|
||
*
|
||
* @see {@link map}
|
||
*
|
||
* @param {...string} properties The nested properties to pluck from each source
|
||
* value (an object).
|
||
* @return {Observable} A new Observable of property values from the source values.
|
||
* @method pluck
|
||
* @owner Observable
|
||
*/
|
||
function pluck() {
|
||
var properties = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
properties[_i - 0] = arguments[_i];
|
||
}
|
||
var length = properties.length;
|
||
if (length === 0) {
|
||
throw new Error('list of properties cannot be empty.');
|
||
}
|
||
return function (source) { return map_1.map(plucker(properties, length))(source); };
|
||
}
|
||
exports.pluck = pluck;
|
||
function plucker(props, length) {
|
||
var mapper = function (x) {
|
||
var currentProp = x;
|
||
for (var i = 0; i < length; i++) {
|
||
var p = currentProp[props[i]];
|
||
if (typeof p !== 'undefined') {
|
||
currentProp = p;
|
||
}
|
||
else {
|
||
return undefined;
|
||
}
|
||
}
|
||
return currentProp;
|
||
};
|
||
return mapper;
|
||
}
|
||
//# sourceMappingURL=pluck.js.map
|
||
|
||
/***/ }),
|
||
/* 7 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* WEBPACK VAR INJECTION */(function(global) {
|
||
// CommonJS / Node have global context exposed as "global" variable.
|
||
// We don't want to include the whole node.d.ts this this compilation unit so we'll just fake
|
||
// the global "global" var for now.
|
||
var __window = typeof window !== 'undefined' && window;
|
||
var __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&
|
||
self instanceof WorkerGlobalScope && self;
|
||
var __global = typeof global !== 'undefined' && global;
|
||
var _root = __window || __global || __self;
|
||
exports.root = _root;
|
||
// Workaround Closure Compiler restriction: The body of a goog.module cannot use throw.
|
||
// This is needed when used with angular/tsickle which inserts a goog.module statement.
|
||
// Wrap in IIFE
|
||
(function () {
|
||
if (!_root) {
|
||
throw new Error('RxJS could not find any global context (window, self, global)');
|
||
}
|
||
})();
|
||
//# sourceMappingURL=root.js.map
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(24)))
|
||
|
||
/***/ }),
|
||
/* 8 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var _a;
|
||
var BehaviorSubject_1 = __webpack_require__(13);
|
||
var set_options_effect_1 = __webpack_require__(53);
|
||
var file_reload_effect_1 = __webpack_require__(86);
|
||
var browser_set_location_effect_1 = __webpack_require__(89);
|
||
var simulate_click_effect_1 = __webpack_require__(90);
|
||
var set_element_value_effect_1 = __webpack_require__(91);
|
||
var set_element_toggle_value_effect_1 = __webpack_require__(92);
|
||
var set_scroll_1 = __webpack_require__(153);
|
||
var browser_reload_effect_1 = __webpack_require__(93);
|
||
var EffectNames;
|
||
(function (EffectNames) {
|
||
EffectNames["FileReload"] = "@@FileReload";
|
||
EffectNames["PreBrowserReload"] = "@@PreBrowserReload";
|
||
EffectNames["BrowserReload"] = "@@BrowserReload";
|
||
EffectNames["BrowserSetLocation"] = "@@BrowserSetLocation";
|
||
EffectNames["BrowserSetScroll"] = "@@BrowserSetScroll";
|
||
EffectNames["SetOptions"] = "@@SetOptions";
|
||
EffectNames["SimulateClick"] = "@@SimulateClick";
|
||
EffectNames["SetElementValue"] = "@@SetElementValue";
|
||
EffectNames["SetElementToggleValue"] = "@@SetElementToggleValue";
|
||
})(EffectNames = exports.EffectNames || (exports.EffectNames = {}));
|
||
exports.effectOutputHandlers$ = new BehaviorSubject_1.BehaviorSubject((_a = {},
|
||
_a[EffectNames.SetOptions] = set_options_effect_1.setOptionsEffect,
|
||
_a[EffectNames.FileReload] = file_reload_effect_1.fileReloadEffect,
|
||
_a[EffectNames.BrowserReload] = browser_reload_effect_1.browserReloadEffect,
|
||
_a[EffectNames.BrowserSetLocation] = browser_set_location_effect_1.browserSetLocationEffect,
|
||
_a[EffectNames.SimulateClick] = simulate_click_effect_1.simulateClickEffect,
|
||
_a[EffectNames.SetElementValue] = set_element_value_effect_1.setElementValueEffect,
|
||
_a[EffectNames.SetElementToggleValue] = set_element_toggle_value_effect_1.setElementToggleValueEffect,
|
||
_a[EffectNames.BrowserSetScroll] = set_scroll_1.setScrollEffect,
|
||
_a));
|
||
|
||
|
||
/***/ }),
|
||
/* 9 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var ArrayObservable_1 = __webpack_require__(23);
|
||
exports.of = ArrayObservable_1.ArrayObservable.of;
|
||
//# sourceMappingURL=of.js.map
|
||
|
||
/***/ }),
|
||
/* 10 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __assign = (this && this.__assign) || function () {
|
||
__assign = Object.assign || function(t) {
|
||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||
s = arguments[i];
|
||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
||
t[p] = s[p];
|
||
}
|
||
return t;
|
||
};
|
||
return __assign.apply(this, arguments);
|
||
};
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var _a;
|
||
var BehaviorSubject_1 = __webpack_require__(13);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var ignoreElements_1 = __webpack_require__(11);
|
||
var tap_1 = __webpack_require__(5);
|
||
var pluck_1 = __webpack_require__(6);
|
||
var ScrollEvent_1 = __webpack_require__(85);
|
||
var ClickEvent_1 = __webpack_require__(94);
|
||
var KeyupEvent_1 = __webpack_require__(95);
|
||
var BrowserNotify_1 = __webpack_require__(156);
|
||
var BrowserLocation_1 = __webpack_require__(157);
|
||
var BrowserReload_1 = __webpack_require__(96);
|
||
var FileReload_1 = __webpack_require__(165);
|
||
var Connection_1 = __webpack_require__(166);
|
||
var Disconnect_1 = __webpack_require__(167);
|
||
var FormToggleEvent_1 = __webpack_require__(98);
|
||
var OptionsSet_1 = __webpack_require__(168);
|
||
var IncomingSocketNames;
|
||
(function (IncomingSocketNames) {
|
||
IncomingSocketNames["Connection"] = "connection";
|
||
IncomingSocketNames["Disconnect"] = "disconnect";
|
||
IncomingSocketNames["FileReload"] = "file:reload";
|
||
IncomingSocketNames["BrowserReload"] = "browser:reload";
|
||
IncomingSocketNames["BrowserLocation"] = "browser:location";
|
||
IncomingSocketNames["BrowserNotify"] = "browser:notify";
|
||
IncomingSocketNames["Scroll"] = "scroll";
|
||
IncomingSocketNames["Click"] = "click";
|
||
IncomingSocketNames["Keyup"] = "input:text";
|
||
IncomingSocketNames["InputToggle"] = "input:toggles";
|
||
IncomingSocketNames["OptionsSet"] = "options:set";
|
||
})(IncomingSocketNames = exports.IncomingSocketNames || (exports.IncomingSocketNames = {}));
|
||
var OutgoingSocketEvents;
|
||
(function (OutgoingSocketEvents) {
|
||
OutgoingSocketEvents["Scroll"] = "@@outgoing/scroll";
|
||
OutgoingSocketEvents["Click"] = "@@outgoing/click";
|
||
OutgoingSocketEvents["Keyup"] = "@@outgoing/keyup";
|
||
OutgoingSocketEvents["InputToggle"] = "@@outgoing/Toggle";
|
||
})(OutgoingSocketEvents = exports.OutgoingSocketEvents || (exports.OutgoingSocketEvents = {}));
|
||
exports.socketHandlers$ = new BehaviorSubject_1.BehaviorSubject((_a = {},
|
||
_a[IncomingSocketNames.Connection] = Connection_1.incomingConnection,
|
||
_a[IncomingSocketNames.Disconnect] = Disconnect_1.incomingDisconnect,
|
||
_a[IncomingSocketNames.FileReload] = FileReload_1.incomingFileReload,
|
||
_a[IncomingSocketNames.BrowserReload] = BrowserReload_1.incomingBrowserReload,
|
||
_a[IncomingSocketNames.BrowserLocation] = BrowserLocation_1.incomingBrowserLocation,
|
||
_a[IncomingSocketNames.BrowserNotify] = BrowserNotify_1.incomingBrowserNotify,
|
||
_a[IncomingSocketNames.Scroll] = ScrollEvent_1.incomingScrollHandler,
|
||
_a[IncomingSocketNames.Click] = ClickEvent_1.incomingHandler$,
|
||
_a[IncomingSocketNames.Keyup] = KeyupEvent_1.incomingKeyupHandler,
|
||
_a[IncomingSocketNames.InputToggle] = FormToggleEvent_1.incomingInputsToggles,
|
||
_a[IncomingSocketNames.OptionsSet] = OptionsSet_1.incomingOptionsSet,
|
||
_a[OutgoingSocketEvents.Scroll] = emitWithPathname(IncomingSocketNames.Scroll),
|
||
_a[OutgoingSocketEvents.Click] = emitWithPathname(IncomingSocketNames.Click),
|
||
_a[OutgoingSocketEvents.Keyup] = emitWithPathname(IncomingSocketNames.Keyup),
|
||
_a[OutgoingSocketEvents.InputToggle] = emitWithPathname(IncomingSocketNames.InputToggle),
|
||
_a));
|
||
function emitWithPathname(name) {
|
||
return function (xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.io$, inputs.window$.pipe(pluck_1.pluck("location", "pathname"))), tap_1.tap(function (_a) {
|
||
var event = _a[0], io = _a[1], pathname = _a[2];
|
||
return io.emit(name, __assign({}, event, { pathname: pathname }));
|
||
}), ignoreElements_1.ignoreElements());
|
||
};
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 11 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
var noop_1 = __webpack_require__(58);
|
||
/**
|
||
* Ignores all items emitted by the source Observable and only passes calls of `complete` or `error`.
|
||
*
|
||
* <img src="./img/ignoreElements.png" width="100%">
|
||
*
|
||
* @return {Observable} An empty Observable that only calls `complete`
|
||
* or `error`, based on which one is called by the source Observable.
|
||
* @method ignoreElements
|
||
* @owner Observable
|
||
*/
|
||
function ignoreElements() {
|
||
return function ignoreElementsOperatorFunction(source) {
|
||
return source.lift(new IgnoreElementsOperator());
|
||
};
|
||
}
|
||
exports.ignoreElements = ignoreElements;
|
||
var IgnoreElementsOperator = (function () {
|
||
function IgnoreElementsOperator() {
|
||
}
|
||
IgnoreElementsOperator.prototype.call = function (subscriber, source) {
|
||
return source.subscribe(new IgnoreElementsSubscriber(subscriber));
|
||
};
|
||
return IgnoreElementsOperator;
|
||
}());
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var IgnoreElementsSubscriber = (function (_super) {
|
||
__extends(IgnoreElementsSubscriber, _super);
|
||
function IgnoreElementsSubscriber() {
|
||
_super.apply(this, arguments);
|
||
}
|
||
IgnoreElementsSubscriber.prototype._next = function (unused) {
|
||
noop_1.noop();
|
||
};
|
||
return IgnoreElementsSubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
//# sourceMappingURL=ignoreElements.js.map
|
||
|
||
/***/ }),
|
||
/* 12 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var isArray_1 = __webpack_require__(26);
|
||
var isObject_1 = __webpack_require__(56);
|
||
var isFunction_1 = __webpack_require__(42);
|
||
var tryCatch_1 = __webpack_require__(43);
|
||
var errorObject_1 = __webpack_require__(27);
|
||
var UnsubscriptionError_1 = __webpack_require__(104);
|
||
/**
|
||
* Represents a disposable resource, such as the execution of an Observable. A
|
||
* Subscription has one important method, `unsubscribe`, that takes no argument
|
||
* and just disposes the resource held by the subscription.
|
||
*
|
||
* Additionally, subscriptions may be grouped together through the `add()`
|
||
* method, which will attach a child Subscription to the current Subscription.
|
||
* When a Subscription is unsubscribed, all its children (and its grandchildren)
|
||
* will be unsubscribed as well.
|
||
*
|
||
* @class Subscription
|
||
*/
|
||
var Subscription = (function () {
|
||
/**
|
||
* @param {function(): void} [unsubscribe] A function describing how to
|
||
* perform the disposal of resources when the `unsubscribe` method is called.
|
||
*/
|
||
function Subscription(unsubscribe) {
|
||
/**
|
||
* A flag to indicate whether this Subscription has already been unsubscribed.
|
||
* @type {boolean}
|
||
*/
|
||
this.closed = false;
|
||
this._parent = null;
|
||
this._parents = null;
|
||
this._subscriptions = null;
|
||
if (unsubscribe) {
|
||
this._unsubscribe = unsubscribe;
|
||
}
|
||
}
|
||
/**
|
||
* Disposes the resources held by the subscription. May, for instance, cancel
|
||
* an ongoing Observable execution or cancel any other type of work that
|
||
* started when the Subscription was created.
|
||
* @return {void}
|
||
*/
|
||
Subscription.prototype.unsubscribe = function () {
|
||
var hasErrors = false;
|
||
var errors;
|
||
if (this.closed) {
|
||
return;
|
||
}
|
||
var _a = this, _parent = _a._parent, _parents = _a._parents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;
|
||
this.closed = true;
|
||
this._parent = null;
|
||
this._parents = null;
|
||
// null out _subscriptions first so any child subscriptions that attempt
|
||
// to remove themselves from this subscription will noop
|
||
this._subscriptions = null;
|
||
var index = -1;
|
||
var len = _parents ? _parents.length : 0;
|
||
// if this._parent is null, then so is this._parents, and we
|
||
// don't have to remove ourselves from any parent subscriptions.
|
||
while (_parent) {
|
||
_parent.remove(this);
|
||
// if this._parents is null or index >= len,
|
||
// then _parent is set to null, and the loop exits
|
||
_parent = ++index < len && _parents[index] || null;
|
||
}
|
||
if (isFunction_1.isFunction(_unsubscribe)) {
|
||
var trial = tryCatch_1.tryCatch(_unsubscribe).call(this);
|
||
if (trial === errorObject_1.errorObject) {
|
||
hasErrors = true;
|
||
errors = errors || (errorObject_1.errorObject.e instanceof UnsubscriptionError_1.UnsubscriptionError ?
|
||
flattenUnsubscriptionErrors(errorObject_1.errorObject.e.errors) : [errorObject_1.errorObject.e]);
|
||
}
|
||
}
|
||
if (isArray_1.isArray(_subscriptions)) {
|
||
index = -1;
|
||
len = _subscriptions.length;
|
||
while (++index < len) {
|
||
var sub = _subscriptions[index];
|
||
if (isObject_1.isObject(sub)) {
|
||
var trial = tryCatch_1.tryCatch(sub.unsubscribe).call(sub);
|
||
if (trial === errorObject_1.errorObject) {
|
||
hasErrors = true;
|
||
errors = errors || [];
|
||
var err = errorObject_1.errorObject.e;
|
||
if (err instanceof UnsubscriptionError_1.UnsubscriptionError) {
|
||
errors = errors.concat(flattenUnsubscriptionErrors(err.errors));
|
||
}
|
||
else {
|
||
errors.push(err);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (hasErrors) {
|
||
throw new UnsubscriptionError_1.UnsubscriptionError(errors);
|
||
}
|
||
};
|
||
/**
|
||
* Adds a tear down to be called during the unsubscribe() of this
|
||
* Subscription.
|
||
*
|
||
* If the tear down being added is a subscription that is already
|
||
* unsubscribed, is the same reference `add` is being called on, or is
|
||
* `Subscription.EMPTY`, it will not be added.
|
||
*
|
||
* If this subscription is already in an `closed` state, the passed
|
||
* tear down logic will be executed immediately.
|
||
*
|
||
* @param {TeardownLogic} teardown The additional logic to execute on
|
||
* teardown.
|
||
* @return {Subscription} Returns the Subscription used or created to be
|
||
* added to the inner subscriptions list. This Subscription can be used with
|
||
* `remove()` to remove the passed teardown logic from the inner subscriptions
|
||
* list.
|
||
*/
|
||
Subscription.prototype.add = function (teardown) {
|
||
if (!teardown || (teardown === Subscription.EMPTY)) {
|
||
return Subscription.EMPTY;
|
||
}
|
||
if (teardown === this) {
|
||
return this;
|
||
}
|
||
var subscription = teardown;
|
||
switch (typeof teardown) {
|
||
case 'function':
|
||
subscription = new Subscription(teardown);
|
||
case 'object':
|
||
if (subscription.closed || typeof subscription.unsubscribe !== 'function') {
|
||
return subscription;
|
||
}
|
||
else if (this.closed) {
|
||
subscription.unsubscribe();
|
||
return subscription;
|
||
}
|
||
else if (typeof subscription._addParent !== 'function' /* quack quack */) {
|
||
var tmp = subscription;
|
||
subscription = new Subscription();
|
||
subscription._subscriptions = [tmp];
|
||
}
|
||
break;
|
||
default:
|
||
throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');
|
||
}
|
||
var subscriptions = this._subscriptions || (this._subscriptions = []);
|
||
subscriptions.push(subscription);
|
||
subscription._addParent(this);
|
||
return subscription;
|
||
};
|
||
/**
|
||
* Removes a Subscription from the internal list of subscriptions that will
|
||
* unsubscribe during the unsubscribe process of this Subscription.
|
||
* @param {Subscription} subscription The subscription to remove.
|
||
* @return {void}
|
||
*/
|
||
Subscription.prototype.remove = function (subscription) {
|
||
var subscriptions = this._subscriptions;
|
||
if (subscriptions) {
|
||
var subscriptionIndex = subscriptions.indexOf(subscription);
|
||
if (subscriptionIndex !== -1) {
|
||
subscriptions.splice(subscriptionIndex, 1);
|
||
}
|
||
}
|
||
};
|
||
Subscription.prototype._addParent = function (parent) {
|
||
var _a = this, _parent = _a._parent, _parents = _a._parents;
|
||
if (!_parent || _parent === parent) {
|
||
// If we don't have a parent, or the new parent is the same as the
|
||
// current parent, then set this._parent to the new parent.
|
||
this._parent = parent;
|
||
}
|
||
else if (!_parents) {
|
||
// If there's already one parent, but not multiple, allocate an Array to
|
||
// store the rest of the parent Subscriptions.
|
||
this._parents = [parent];
|
||
}
|
||
else if (_parents.indexOf(parent) === -1) {
|
||
// Only add the new parent to the _parents list if it's not already there.
|
||
_parents.push(parent);
|
||
}
|
||
};
|
||
Subscription.EMPTY = (function (empty) {
|
||
empty.closed = true;
|
||
return empty;
|
||
}(new Subscription()));
|
||
return Subscription;
|
||
}());
|
||
exports.Subscription = Subscription;
|
||
function flattenUnsubscriptionErrors(errors) {
|
||
return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError_1.UnsubscriptionError) ? err.errors : err); }, []);
|
||
}
|
||
//# sourceMappingURL=Subscription.js.map
|
||
|
||
/***/ }),
|
||
/* 13 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subject_1 = __webpack_require__(37);
|
||
var ObjectUnsubscribedError_1 = __webpack_require__(73);
|
||
/**
|
||
* @class BehaviorSubject<T>
|
||
*/
|
||
var BehaviorSubject = (function (_super) {
|
||
__extends(BehaviorSubject, _super);
|
||
function BehaviorSubject(_value) {
|
||
_super.call(this);
|
||
this._value = _value;
|
||
}
|
||
Object.defineProperty(BehaviorSubject.prototype, "value", {
|
||
get: function () {
|
||
return this.getValue();
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
/** @deprecated internal use only */ BehaviorSubject.prototype._subscribe = function (subscriber) {
|
||
var subscription = _super.prototype._subscribe.call(this, subscriber);
|
||
if (subscription && !subscription.closed) {
|
||
subscriber.next(this._value);
|
||
}
|
||
return subscription;
|
||
};
|
||
BehaviorSubject.prototype.getValue = function () {
|
||
if (this.hasError) {
|
||
throw this.thrownError;
|
||
}
|
||
else if (this.closed) {
|
||
throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
|
||
}
|
||
else {
|
||
return this._value;
|
||
}
|
||
};
|
||
BehaviorSubject.prototype.next = function (value) {
|
||
_super.prototype.next.call(this, this._value = value);
|
||
};
|
||
return BehaviorSubject;
|
||
}(Subject_1.Subject));
|
||
exports.BehaviorSubject = BehaviorSubject;
|
||
//# sourceMappingURL=BehaviorSubject.js.map
|
||
|
||
/***/ }),
|
||
/* 14 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var _a;
|
||
var BehaviorSubject_1 = __webpack_require__(13);
|
||
var timer_1 = __webpack_require__(52);
|
||
var of_1 = __webpack_require__(9);
|
||
var logger_1 = __webpack_require__(142);
|
||
var filter_1 = __webpack_require__(4);
|
||
var tap_1 = __webpack_require__(5);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var switchMap_1 = __webpack_require__(20);
|
||
var pluck_1 = __webpack_require__(6);
|
||
function initLogger(options) {
|
||
var log = new logger_1.Nanologger(options.logPrefix || "", {
|
||
colors: { magenta: "#0F2634" }
|
||
});
|
||
return of_1.of(log);
|
||
}
|
||
exports.initLogger = initLogger;
|
||
var LogNames;
|
||
(function (LogNames) {
|
||
LogNames["Log"] = "@@Log";
|
||
LogNames["Info"] = "@@Log.info";
|
||
LogNames["Debug"] = "@@Log.debug";
|
||
})(LogNames = exports.LogNames || (exports.LogNames = {}));
|
||
var Overlay;
|
||
(function (Overlay) {
|
||
Overlay["Info"] = "@@Overlay.info";
|
||
})(Overlay = exports.Overlay || (exports.Overlay = {}));
|
||
function consoleInfo() {
|
||
var args = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
args[_i] = arguments[_i];
|
||
}
|
||
return [LogNames.Log, [LogNames.Info, args]];
|
||
}
|
||
exports.consoleInfo = consoleInfo;
|
||
function consoleDebug() {
|
||
var args = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
args[_i] = arguments[_i];
|
||
}
|
||
return [LogNames.Log, [LogNames.Debug, args]];
|
||
}
|
||
exports.consoleDebug = consoleDebug;
|
||
function overlayInfo(message, timeout) {
|
||
if (timeout === void 0) { timeout = 2000; }
|
||
return [Overlay.Info, [message, timeout]];
|
||
}
|
||
exports.overlayInfo = overlayInfo;
|
||
exports.logHandler$ = new BehaviorSubject_1.BehaviorSubject((_a = {},
|
||
_a[LogNames.Log] = function (xs, inputs) {
|
||
return xs.pipe(
|
||
/**
|
||
* access injectNotification from the options stream
|
||
*/
|
||
withLatestFrom_1.withLatestFrom(inputs.logInstance$, inputs.option$.pipe(pluck_1.pluck("injectNotification"))),
|
||
/**
|
||
* only accept messages if injectNotification !== console
|
||
*/
|
||
filter_1.filter(function (_a) {
|
||
var injectNotification = _a[2];
|
||
return injectNotification === "console";
|
||
}), tap_1.tap(function (_a) {
|
||
var event = _a[0], log = _a[1];
|
||
switch (event[0]) {
|
||
case LogNames.Info: {
|
||
return log.info.apply(log, event[1]);
|
||
}
|
||
case LogNames.Debug: {
|
||
return log.debug.apply(log, event[1]);
|
||
}
|
||
}
|
||
}));
|
||
},
|
||
_a[Overlay.Info] = function (xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.option$, inputs.notifyElement$, inputs.document$),
|
||
/**
|
||
* Reject all notifications if notify: false
|
||
*/
|
||
filter_1.filter(function (_a) {
|
||
var options = _a[1];
|
||
return Boolean(options.notify);
|
||
}),
|
||
/**
|
||
* Set the HTML of the notify element
|
||
*/
|
||
tap_1.tap(function (_a) {
|
||
var event = _a[0], options = _a[1], element = _a[2], document = _a[3];
|
||
element.innerHTML = event[0];
|
||
element.style.display = "block";
|
||
document.body.appendChild(element);
|
||
}),
|
||
/**
|
||
* Now remove the element after the given timeout
|
||
*/
|
||
switchMap_1.switchMap(function (_a) {
|
||
var event = _a[0], options = _a[1], element = _a[2], document = _a[3];
|
||
return timer_1.timer(event[1] || 2000).pipe(tap_1.tap(function () {
|
||
element.style.display = "none";
|
||
if (element.parentNode) {
|
||
document.body.removeChild(element);
|
||
}
|
||
}));
|
||
}));
|
||
},
|
||
_a));
|
||
|
||
|
||
/***/ }),
|
||
/* 15 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var subscribeToResult_1 = __webpack_require__(30);
|
||
var OuterSubscriber_1 = __webpack_require__(29);
|
||
/* tslint:enable:max-line-length */
|
||
/**
|
||
* Projects each source value to an Observable which is merged in the output
|
||
* Observable.
|
||
*
|
||
* <span class="informal">Maps each value to an Observable, then flattens all of
|
||
* these inner Observables using {@link mergeAll}.</span>
|
||
*
|
||
* <img src="./img/mergeMap.png" width="100%">
|
||
*
|
||
* Returns an Observable that emits items based on applying a function that you
|
||
* supply to each item emitted by the source Observable, where that function
|
||
* returns an Observable, and then merging those resulting Observables and
|
||
* emitting the results of this merger.
|
||
*
|
||
* @example <caption>Map and flatten each letter to an Observable ticking every 1 second</caption>
|
||
* var letters = Rx.Observable.of('a', 'b', 'c');
|
||
* var result = letters.mergeMap(x =>
|
||
* Rx.Observable.interval(1000).map(i => x+i)
|
||
* );
|
||
* result.subscribe(x => console.log(x));
|
||
*
|
||
* // Results in the following:
|
||
* // a0
|
||
* // b0
|
||
* // c0
|
||
* // a1
|
||
* // b1
|
||
* // c1
|
||
* // continues to list a,b,c with respective ascending integers
|
||
*
|
||
* @see {@link concatMap}
|
||
* @see {@link exhaustMap}
|
||
* @see {@link merge}
|
||
* @see {@link mergeAll}
|
||
* @see {@link mergeMapTo}
|
||
* @see {@link mergeScan}
|
||
* @see {@link switchMap}
|
||
*
|
||
* @param {function(value: T, ?index: number): ObservableInput} project A function
|
||
* that, when applied to an item emitted by the source Observable, returns an
|
||
* Observable.
|
||
* @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
|
||
* A function to produce the value on the output Observable based on the values
|
||
* and the indices of the source (outer) emission and the inner Observable
|
||
* emission. The arguments passed to this function are:
|
||
* - `outerValue`: the value that came from the source
|
||
* - `innerValue`: the value that came from the projected Observable
|
||
* - `outerIndex`: the "index" of the value that came from the source
|
||
* - `innerIndex`: the "index" of the value from the projected Observable
|
||
* @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
|
||
* Observables being subscribed to concurrently.
|
||
* @return {Observable} An Observable that emits the result of applying the
|
||
* projection function (and the optional `resultSelector`) to each item emitted
|
||
* by the source Observable and merging the results of the Observables obtained
|
||
* from this transformation.
|
||
* @method mergeMap
|
||
* @owner Observable
|
||
*/
|
||
function mergeMap(project, resultSelector, concurrent) {
|
||
if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
|
||
return function mergeMapOperatorFunction(source) {
|
||
if (typeof resultSelector === 'number') {
|
||
concurrent = resultSelector;
|
||
resultSelector = null;
|
||
}
|
||
return source.lift(new MergeMapOperator(project, resultSelector, concurrent));
|
||
};
|
||
}
|
||
exports.mergeMap = mergeMap;
|
||
var MergeMapOperator = (function () {
|
||
function MergeMapOperator(project, resultSelector, concurrent) {
|
||
if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
|
||
this.project = project;
|
||
this.resultSelector = resultSelector;
|
||
this.concurrent = concurrent;
|
||
}
|
||
MergeMapOperator.prototype.call = function (observer, source) {
|
||
return source.subscribe(new MergeMapSubscriber(observer, this.project, this.resultSelector, this.concurrent));
|
||
};
|
||
return MergeMapOperator;
|
||
}());
|
||
exports.MergeMapOperator = MergeMapOperator;
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var MergeMapSubscriber = (function (_super) {
|
||
__extends(MergeMapSubscriber, _super);
|
||
function MergeMapSubscriber(destination, project, resultSelector, concurrent) {
|
||
if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
|
||
_super.call(this, destination);
|
||
this.project = project;
|
||
this.resultSelector = resultSelector;
|
||
this.concurrent = concurrent;
|
||
this.hasCompleted = false;
|
||
this.buffer = [];
|
||
this.active = 0;
|
||
this.index = 0;
|
||
}
|
||
MergeMapSubscriber.prototype._next = function (value) {
|
||
if (this.active < this.concurrent) {
|
||
this._tryNext(value);
|
||
}
|
||
else {
|
||
this.buffer.push(value);
|
||
}
|
||
};
|
||
MergeMapSubscriber.prototype._tryNext = function (value) {
|
||
var result;
|
||
var index = this.index++;
|
||
try {
|
||
result = this.project(value, index);
|
||
}
|
||
catch (err) {
|
||
this.destination.error(err);
|
||
return;
|
||
}
|
||
this.active++;
|
||
this._innerSub(result, value, index);
|
||
};
|
||
MergeMapSubscriber.prototype._innerSub = function (ish, value, index) {
|
||
this.add(subscribeToResult_1.subscribeToResult(this, ish, value, index));
|
||
};
|
||
MergeMapSubscriber.prototype._complete = function () {
|
||
this.hasCompleted = true;
|
||
if (this.active === 0 && this.buffer.length === 0) {
|
||
this.destination.complete();
|
||
}
|
||
};
|
||
MergeMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
|
||
if (this.resultSelector) {
|
||
this._notifyResultSelector(outerValue, innerValue, outerIndex, innerIndex);
|
||
}
|
||
else {
|
||
this.destination.next(innerValue);
|
||
}
|
||
};
|
||
MergeMapSubscriber.prototype._notifyResultSelector = function (outerValue, innerValue, outerIndex, innerIndex) {
|
||
var result;
|
||
try {
|
||
result = this.resultSelector(outerValue, innerValue, outerIndex, innerIndex);
|
||
}
|
||
catch (err) {
|
||
this.destination.error(err);
|
||
return;
|
||
}
|
||
this.destination.next(result);
|
||
};
|
||
MergeMapSubscriber.prototype.notifyComplete = function (innerSub) {
|
||
var buffer = this.buffer;
|
||
this.remove(innerSub);
|
||
this.active--;
|
||
if (buffer.length > 0) {
|
||
this._next(buffer.shift());
|
||
}
|
||
else if (this.active === 0 && this.hasCompleted) {
|
||
this.destination.complete();
|
||
}
|
||
};
|
||
return MergeMapSubscriber;
|
||
}(OuterSubscriber_1.OuterSubscriber));
|
||
exports.MergeMapSubscriber = MergeMapSubscriber;
|
||
//# sourceMappingURL=mergeMap.js.map
|
||
|
||
/***/ }),
|
||
/* 16 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var EmptyObservable_1 = __webpack_require__(28);
|
||
exports.empty = EmptyObservable_1.EmptyObservable.create;
|
||
//# sourceMappingURL=empty.js.map
|
||
|
||
/***/ }),
|
||
/* 17 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
|
||
/**
|
||
* Expose `Emitter`.
|
||
*/
|
||
|
||
if (true) {
|
||
module.exports = Emitter;
|
||
}
|
||
|
||
/**
|
||
* Initialize a new `Emitter`.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
function Emitter(obj) {
|
||
if (obj) return mixin(obj);
|
||
};
|
||
|
||
/**
|
||
* Mixin the emitter properties.
|
||
*
|
||
* @param {Object} obj
|
||
* @return {Object}
|
||
* @api private
|
||
*/
|
||
|
||
function mixin(obj) {
|
||
for (var key in Emitter.prototype) {
|
||
obj[key] = Emitter.prototype[key];
|
||
}
|
||
return obj;
|
||
}
|
||
|
||
/**
|
||
* Listen on the given `event` with `fn`.
|
||
*
|
||
* @param {String} event
|
||
* @param {Function} fn
|
||
* @return {Emitter}
|
||
* @api public
|
||
*/
|
||
|
||
Emitter.prototype.on =
|
||
Emitter.prototype.addEventListener = function(event, fn){
|
||
this._callbacks = this._callbacks || {};
|
||
(this._callbacks['$' + event] = this._callbacks['$' + event] || [])
|
||
.push(fn);
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Adds an `event` listener that will be invoked a single
|
||
* time then automatically removed.
|
||
*
|
||
* @param {String} event
|
||
* @param {Function} fn
|
||
* @return {Emitter}
|
||
* @api public
|
||
*/
|
||
|
||
Emitter.prototype.once = function(event, fn){
|
||
function on() {
|
||
this.off(event, on);
|
||
fn.apply(this, arguments);
|
||
}
|
||
|
||
on.fn = fn;
|
||
this.on(event, on);
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Remove the given callback for `event` or all
|
||
* registered callbacks.
|
||
*
|
||
* @param {String} event
|
||
* @param {Function} fn
|
||
* @return {Emitter}
|
||
* @api public
|
||
*/
|
||
|
||
Emitter.prototype.off =
|
||
Emitter.prototype.removeListener =
|
||
Emitter.prototype.removeAllListeners =
|
||
Emitter.prototype.removeEventListener = function(event, fn){
|
||
this._callbacks = this._callbacks || {};
|
||
|
||
// all
|
||
if (0 == arguments.length) {
|
||
this._callbacks = {};
|
||
return this;
|
||
}
|
||
|
||
// specific event
|
||
var callbacks = this._callbacks['$' + event];
|
||
if (!callbacks) return this;
|
||
|
||
// remove all handlers
|
||
if (1 == arguments.length) {
|
||
delete this._callbacks['$' + event];
|
||
return this;
|
||
}
|
||
|
||
// remove specific handler
|
||
var cb;
|
||
for (var i = 0; i < callbacks.length; i++) {
|
||
cb = callbacks[i];
|
||
if (cb === fn || cb.fn === fn) {
|
||
callbacks.splice(i, 1);
|
||
break;
|
||
}
|
||
}
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Emit `event` with the given args.
|
||
*
|
||
* @param {String} event
|
||
* @param {Mixed} ...
|
||
* @return {Emitter}
|
||
*/
|
||
|
||
Emitter.prototype.emit = function(event){
|
||
this._callbacks = this._callbacks || {};
|
||
var args = [].slice.call(arguments, 1)
|
||
, callbacks = this._callbacks['$' + event];
|
||
|
||
if (callbacks) {
|
||
callbacks = callbacks.slice(0);
|
||
for (var i = 0, len = callbacks.length; i < len; ++i) {
|
||
callbacks[i].apply(this, args);
|
||
}
|
||
}
|
||
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Return array of callbacks for `event`.
|
||
*
|
||
* @param {String} event
|
||
* @return {Array}
|
||
* @api public
|
||
*/
|
||
|
||
Emitter.prototype.listeners = function(event){
|
||
this._callbacks = this._callbacks || {};
|
||
return this._callbacks['$' + event] || [];
|
||
};
|
||
|
||
/**
|
||
* Check if this emitter has `event` handlers.
|
||
*
|
||
* @param {String} event
|
||
* @return {Boolean}
|
||
* @api public
|
||
*/
|
||
|
||
Emitter.prototype.hasListeners = function(event){
|
||
return !! this.listeners(event).length;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 18 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/**
|
||
* Module dependencies.
|
||
*/
|
||
|
||
var keys = __webpack_require__(121);
|
||
var hasBinary = __webpack_require__(67);
|
||
var sliceBuffer = __webpack_require__(123);
|
||
var after = __webpack_require__(124);
|
||
var utf8 = __webpack_require__(125);
|
||
|
||
var base64encoder;
|
||
if (typeof ArrayBuffer !== 'undefined') {
|
||
base64encoder = __webpack_require__(126);
|
||
}
|
||
|
||
/**
|
||
* Check if we are running an android browser. That requires us to use
|
||
* ArrayBuffer with polling transports...
|
||
*
|
||
* http://ghinda.net/jpeg-blob-ajax-android/
|
||
*/
|
||
|
||
var isAndroid = typeof navigator !== 'undefined' && /Android/i.test(navigator.userAgent);
|
||
|
||
/**
|
||
* Check if we are running in PhantomJS.
|
||
* Uploading a Blob with PhantomJS does not work correctly, as reported here:
|
||
* https://github.com/ariya/phantomjs/issues/11395
|
||
* @type boolean
|
||
*/
|
||
var isPhantomJS = typeof navigator !== 'undefined' && /PhantomJS/i.test(navigator.userAgent);
|
||
|
||
/**
|
||
* When true, avoids using Blobs to encode payloads.
|
||
* @type boolean
|
||
*/
|
||
var dontSendBlobs = isAndroid || isPhantomJS;
|
||
|
||
/**
|
||
* Current protocol version.
|
||
*/
|
||
|
||
exports.protocol = 3;
|
||
|
||
/**
|
||
* Packet types.
|
||
*/
|
||
|
||
var packets = exports.packets = {
|
||
open: 0 // non-ws
|
||
, close: 1 // non-ws
|
||
, ping: 2
|
||
, pong: 3
|
||
, message: 4
|
||
, upgrade: 5
|
||
, noop: 6
|
||
};
|
||
|
||
var packetslist = keys(packets);
|
||
|
||
/**
|
||
* Premade error packet.
|
||
*/
|
||
|
||
var err = { type: 'error', data: 'parser error' };
|
||
|
||
/**
|
||
* Create a blob api even for blob builder when vendor prefixes exist
|
||
*/
|
||
|
||
var Blob = __webpack_require__(127);
|
||
|
||
/**
|
||
* Encodes a packet.
|
||
*
|
||
* <packet type id> [ <data> ]
|
||
*
|
||
* Example:
|
||
*
|
||
* 5hello world
|
||
* 3
|
||
* 4
|
||
*
|
||
* Binary is encoded in an identical principle
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
exports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {
|
||
if (typeof supportsBinary === 'function') {
|
||
callback = supportsBinary;
|
||
supportsBinary = false;
|
||
}
|
||
|
||
if (typeof utf8encode === 'function') {
|
||
callback = utf8encode;
|
||
utf8encode = null;
|
||
}
|
||
|
||
var data = (packet.data === undefined)
|
||
? undefined
|
||
: packet.data.buffer || packet.data;
|
||
|
||
if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {
|
||
return encodeArrayBuffer(packet, supportsBinary, callback);
|
||
} else if (typeof Blob !== 'undefined' && data instanceof Blob) {
|
||
return encodeBlob(packet, supportsBinary, callback);
|
||
}
|
||
|
||
// might be an object with { base64: true, data: dataAsBase64String }
|
||
if (data && data.base64) {
|
||
return encodeBase64Object(packet, callback);
|
||
}
|
||
|
||
// Sending data as a utf-8 string
|
||
var encoded = packets[packet.type];
|
||
|
||
// data fragment is optional
|
||
if (undefined !== packet.data) {
|
||
encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data);
|
||
}
|
||
|
||
return callback('' + encoded);
|
||
|
||
};
|
||
|
||
function encodeBase64Object(packet, callback) {
|
||
// packet data is an object { base64: true, data: dataAsBase64String }
|
||
var message = 'b' + exports.packets[packet.type] + packet.data.data;
|
||
return callback(message);
|
||
}
|
||
|
||
/**
|
||
* Encode packet helpers for binary types
|
||
*/
|
||
|
||
function encodeArrayBuffer(packet, supportsBinary, callback) {
|
||
if (!supportsBinary) {
|
||
return exports.encodeBase64Packet(packet, callback);
|
||
}
|
||
|
||
var data = packet.data;
|
||
var contentArray = new Uint8Array(data);
|
||
var resultBuffer = new Uint8Array(1 + data.byteLength);
|
||
|
||
resultBuffer[0] = packets[packet.type];
|
||
for (var i = 0; i < contentArray.length; i++) {
|
||
resultBuffer[i+1] = contentArray[i];
|
||
}
|
||
|
||
return callback(resultBuffer.buffer);
|
||
}
|
||
|
||
function encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {
|
||
if (!supportsBinary) {
|
||
return exports.encodeBase64Packet(packet, callback);
|
||
}
|
||
|
||
var fr = new FileReader();
|
||
fr.onload = function() {
|
||
exports.encodePacket({ type: packet.type, data: fr.result }, supportsBinary, true, callback);
|
||
};
|
||
return fr.readAsArrayBuffer(packet.data);
|
||
}
|
||
|
||
function encodeBlob(packet, supportsBinary, callback) {
|
||
if (!supportsBinary) {
|
||
return exports.encodeBase64Packet(packet, callback);
|
||
}
|
||
|
||
if (dontSendBlobs) {
|
||
return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);
|
||
}
|
||
|
||
var length = new Uint8Array(1);
|
||
length[0] = packets[packet.type];
|
||
var blob = new Blob([length.buffer, packet.data]);
|
||
|
||
return callback(blob);
|
||
}
|
||
|
||
/**
|
||
* Encodes a packet with binary data in a base64 string
|
||
*
|
||
* @param {Object} packet, has `type` and `data`
|
||
* @return {String} base64 encoded message
|
||
*/
|
||
|
||
exports.encodeBase64Packet = function(packet, callback) {
|
||
var message = 'b' + exports.packets[packet.type];
|
||
if (typeof Blob !== 'undefined' && packet.data instanceof Blob) {
|
||
var fr = new FileReader();
|
||
fr.onload = function() {
|
||
var b64 = fr.result.split(',')[1];
|
||
callback(message + b64);
|
||
};
|
||
return fr.readAsDataURL(packet.data);
|
||
}
|
||
|
||
var b64data;
|
||
try {
|
||
b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));
|
||
} catch (e) {
|
||
// iPhone Safari doesn't let you apply with typed arrays
|
||
var typed = new Uint8Array(packet.data);
|
||
var basic = new Array(typed.length);
|
||
for (var i = 0; i < typed.length; i++) {
|
||
basic[i] = typed[i];
|
||
}
|
||
b64data = String.fromCharCode.apply(null, basic);
|
||
}
|
||
message += btoa(b64data);
|
||
return callback(message);
|
||
};
|
||
|
||
/**
|
||
* Decodes a packet. Changes format to Blob if requested.
|
||
*
|
||
* @return {Object} with `type` and `data` (if any)
|
||
* @api private
|
||
*/
|
||
|
||
exports.decodePacket = function (data, binaryType, utf8decode) {
|
||
if (data === undefined) {
|
||
return err;
|
||
}
|
||
// String data
|
||
if (typeof data === 'string') {
|
||
if (data.charAt(0) === 'b') {
|
||
return exports.decodeBase64Packet(data.substr(1), binaryType);
|
||
}
|
||
|
||
if (utf8decode) {
|
||
data = tryDecode(data);
|
||
if (data === false) {
|
||
return err;
|
||
}
|
||
}
|
||
var type = data.charAt(0);
|
||
|
||
if (Number(type) != type || !packetslist[type]) {
|
||
return err;
|
||
}
|
||
|
||
if (data.length > 1) {
|
||
return { type: packetslist[type], data: data.substring(1) };
|
||
} else {
|
||
return { type: packetslist[type] };
|
||
}
|
||
}
|
||
|
||
var asArray = new Uint8Array(data);
|
||
var type = asArray[0];
|
||
var rest = sliceBuffer(data, 1);
|
||
if (Blob && binaryType === 'blob') {
|
||
rest = new Blob([rest]);
|
||
}
|
||
return { type: packetslist[type], data: rest };
|
||
};
|
||
|
||
function tryDecode(data) {
|
||
try {
|
||
data = utf8.decode(data, { strict: false });
|
||
} catch (e) {
|
||
return false;
|
||
}
|
||
return data;
|
||
}
|
||
|
||
/**
|
||
* Decodes a packet encoded in a base64 string
|
||
*
|
||
* @param {String} base64 encoded message
|
||
* @return {Object} with `type` and `data` (if any)
|
||
*/
|
||
|
||
exports.decodeBase64Packet = function(msg, binaryType) {
|
||
var type = packetslist[msg.charAt(0)];
|
||
if (!base64encoder) {
|
||
return { type: type, data: { base64: true, data: msg.substr(1) } };
|
||
}
|
||
|
||
var data = base64encoder.decode(msg.substr(1));
|
||
|
||
if (binaryType === 'blob' && Blob) {
|
||
data = new Blob([data]);
|
||
}
|
||
|
||
return { type: type, data: data };
|
||
};
|
||
|
||
/**
|
||
* Encodes multiple messages (payload).
|
||
*
|
||
* <length>:data
|
||
*
|
||
* Example:
|
||
*
|
||
* 11:hello world2:hi
|
||
*
|
||
* If any contents are binary, they will be encoded as base64 strings. Base64
|
||
* encoded strings are marked with a b before the length specifier
|
||
*
|
||
* @param {Array} packets
|
||
* @api private
|
||
*/
|
||
|
||
exports.encodePayload = function (packets, supportsBinary, callback) {
|
||
if (typeof supportsBinary === 'function') {
|
||
callback = supportsBinary;
|
||
supportsBinary = null;
|
||
}
|
||
|
||
var isBinary = hasBinary(packets);
|
||
|
||
if (supportsBinary && isBinary) {
|
||
if (Blob && !dontSendBlobs) {
|
||
return exports.encodePayloadAsBlob(packets, callback);
|
||
}
|
||
|
||
return exports.encodePayloadAsArrayBuffer(packets, callback);
|
||
}
|
||
|
||
if (!packets.length) {
|
||
return callback('0:');
|
||
}
|
||
|
||
function setLengthHeader(message) {
|
||
return message.length + ':' + message;
|
||
}
|
||
|
||
function encodeOne(packet, doneCallback) {
|
||
exports.encodePacket(packet, !isBinary ? false : supportsBinary, false, function(message) {
|
||
doneCallback(null, setLengthHeader(message));
|
||
});
|
||
}
|
||
|
||
map(packets, encodeOne, function(err, results) {
|
||
return callback(results.join(''));
|
||
});
|
||
};
|
||
|
||
/**
|
||
* Async array map using after
|
||
*/
|
||
|
||
function map(ary, each, done) {
|
||
var result = new Array(ary.length);
|
||
var next = after(ary.length, done);
|
||
|
||
var eachWithIndex = function(i, el, cb) {
|
||
each(el, function(error, msg) {
|
||
result[i] = msg;
|
||
cb(error, result);
|
||
});
|
||
};
|
||
|
||
for (var i = 0; i < ary.length; i++) {
|
||
eachWithIndex(i, ary[i], next);
|
||
}
|
||
}
|
||
|
||
/*
|
||
* Decodes data when a payload is maybe expected. Possible binary contents are
|
||
* decoded from their base64 representation
|
||
*
|
||
* @param {String} data, callback method
|
||
* @api public
|
||
*/
|
||
|
||
exports.decodePayload = function (data, binaryType, callback) {
|
||
if (typeof data !== 'string') {
|
||
return exports.decodePayloadAsBinary(data, binaryType, callback);
|
||
}
|
||
|
||
if (typeof binaryType === 'function') {
|
||
callback = binaryType;
|
||
binaryType = null;
|
||
}
|
||
|
||
var packet;
|
||
if (data === '') {
|
||
// parser error - ignoring payload
|
||
return callback(err, 0, 1);
|
||
}
|
||
|
||
var length = '', n, msg;
|
||
|
||
for (var i = 0, l = data.length; i < l; i++) {
|
||
var chr = data.charAt(i);
|
||
|
||
if (chr !== ':') {
|
||
length += chr;
|
||
continue;
|
||
}
|
||
|
||
if (length === '' || (length != (n = Number(length)))) {
|
||
// parser error - ignoring payload
|
||
return callback(err, 0, 1);
|
||
}
|
||
|
||
msg = data.substr(i + 1, n);
|
||
|
||
if (length != msg.length) {
|
||
// parser error - ignoring payload
|
||
return callback(err, 0, 1);
|
||
}
|
||
|
||
if (msg.length) {
|
||
packet = exports.decodePacket(msg, binaryType, false);
|
||
|
||
if (err.type === packet.type && err.data === packet.data) {
|
||
// parser error in individual packet - ignoring payload
|
||
return callback(err, 0, 1);
|
||
}
|
||
|
||
var ret = callback(packet, i + n, l);
|
||
if (false === ret) return;
|
||
}
|
||
|
||
// advance cursor
|
||
i += n;
|
||
length = '';
|
||
}
|
||
|
||
if (length !== '') {
|
||
// parser error - ignoring payload
|
||
return callback(err, 0, 1);
|
||
}
|
||
|
||
};
|
||
|
||
/**
|
||
* Encodes multiple messages (payload) as binary.
|
||
*
|
||
* <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number
|
||
* 255><data>
|
||
*
|
||
* Example:
|
||
* 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers
|
||
*
|
||
* @param {Array} packets
|
||
* @return {ArrayBuffer} encoded payload
|
||
* @api private
|
||
*/
|
||
|
||
exports.encodePayloadAsArrayBuffer = function(packets, callback) {
|
||
if (!packets.length) {
|
||
return callback(new ArrayBuffer(0));
|
||
}
|
||
|
||
function encodeOne(packet, doneCallback) {
|
||
exports.encodePacket(packet, true, true, function(data) {
|
||
return doneCallback(null, data);
|
||
});
|
||
}
|
||
|
||
map(packets, encodeOne, function(err, encodedPackets) {
|
||
var totalLength = encodedPackets.reduce(function(acc, p) {
|
||
var len;
|
||
if (typeof p === 'string'){
|
||
len = p.length;
|
||
} else {
|
||
len = p.byteLength;
|
||
}
|
||
return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2
|
||
}, 0);
|
||
|
||
var resultArray = new Uint8Array(totalLength);
|
||
|
||
var bufferIndex = 0;
|
||
encodedPackets.forEach(function(p) {
|
||
var isString = typeof p === 'string';
|
||
var ab = p;
|
||
if (isString) {
|
||
var view = new Uint8Array(p.length);
|
||
for (var i = 0; i < p.length; i++) {
|
||
view[i] = p.charCodeAt(i);
|
||
}
|
||
ab = view.buffer;
|
||
}
|
||
|
||
if (isString) { // not true binary
|
||
resultArray[bufferIndex++] = 0;
|
||
} else { // true binary
|
||
resultArray[bufferIndex++] = 1;
|
||
}
|
||
|
||
var lenStr = ab.byteLength.toString();
|
||
for (var i = 0; i < lenStr.length; i++) {
|
||
resultArray[bufferIndex++] = parseInt(lenStr[i]);
|
||
}
|
||
resultArray[bufferIndex++] = 255;
|
||
|
||
var view = new Uint8Array(ab);
|
||
for (var i = 0; i < view.length; i++) {
|
||
resultArray[bufferIndex++] = view[i];
|
||
}
|
||
});
|
||
|
||
return callback(resultArray.buffer);
|
||
});
|
||
};
|
||
|
||
/**
|
||
* Encode as Blob
|
||
*/
|
||
|
||
exports.encodePayloadAsBlob = function(packets, callback) {
|
||
function encodeOne(packet, doneCallback) {
|
||
exports.encodePacket(packet, true, true, function(encoded) {
|
||
var binaryIdentifier = new Uint8Array(1);
|
||
binaryIdentifier[0] = 1;
|
||
if (typeof encoded === 'string') {
|
||
var view = new Uint8Array(encoded.length);
|
||
for (var i = 0; i < encoded.length; i++) {
|
||
view[i] = encoded.charCodeAt(i);
|
||
}
|
||
encoded = view.buffer;
|
||
binaryIdentifier[0] = 0;
|
||
}
|
||
|
||
var len = (encoded instanceof ArrayBuffer)
|
||
? encoded.byteLength
|
||
: encoded.size;
|
||
|
||
var lenStr = len.toString();
|
||
var lengthAry = new Uint8Array(lenStr.length + 1);
|
||
for (var i = 0; i < lenStr.length; i++) {
|
||
lengthAry[i] = parseInt(lenStr[i]);
|
||
}
|
||
lengthAry[lenStr.length] = 255;
|
||
|
||
if (Blob) {
|
||
var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);
|
||
doneCallback(null, blob);
|
||
}
|
||
});
|
||
}
|
||
|
||
map(packets, encodeOne, function(err, results) {
|
||
return callback(new Blob(results));
|
||
});
|
||
};
|
||
|
||
/*
|
||
* Decodes data when a payload is maybe expected. Strings are decoded by
|
||
* interpreting each byte as a key code for entries marked to start with 0. See
|
||
* description of encodePayloadAsBinary
|
||
*
|
||
* @param {ArrayBuffer} data, callback method
|
||
* @api public
|
||
*/
|
||
|
||
exports.decodePayloadAsBinary = function (data, binaryType, callback) {
|
||
if (typeof binaryType === 'function') {
|
||
callback = binaryType;
|
||
binaryType = null;
|
||
}
|
||
|
||
var bufferTail = data;
|
||
var buffers = [];
|
||
|
||
while (bufferTail.byteLength > 0) {
|
||
var tailArray = new Uint8Array(bufferTail);
|
||
var isString = tailArray[0] === 0;
|
||
var msgLength = '';
|
||
|
||
for (var i = 1; ; i++) {
|
||
if (tailArray[i] === 255) break;
|
||
|
||
// 310 = char length of Number.MAX_VALUE
|
||
if (msgLength.length > 310) {
|
||
return callback(err, 0, 1);
|
||
}
|
||
|
||
msgLength += tailArray[i];
|
||
}
|
||
|
||
bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);
|
||
msgLength = parseInt(msgLength);
|
||
|
||
var msg = sliceBuffer(bufferTail, 0, msgLength);
|
||
if (isString) {
|
||
try {
|
||
msg = String.fromCharCode.apply(null, new Uint8Array(msg));
|
||
} catch (e) {
|
||
// iPhone Safari doesn't let you apply to typed arrays
|
||
var typed = new Uint8Array(msg);
|
||
msg = '';
|
||
for (var i = 0; i < typed.length; i++) {
|
||
msg += String.fromCharCode(typed[i]);
|
||
}
|
||
}
|
||
}
|
||
|
||
buffers.push(msg);
|
||
bufferTail = sliceBuffer(bufferTail, msgLength);
|
||
}
|
||
|
||
var total = buffers.length;
|
||
buffers.forEach(function(buffer, i) {
|
||
callback(exports.decodePacket(buffer, binaryType, true), i, total);
|
||
});
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 19 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var _a;
|
||
var BehaviorSubject_1 = __webpack_require__(13);
|
||
var prop_set_dom_effect_1 = __webpack_require__(76);
|
||
var style_set_dom_effect_1 = __webpack_require__(81);
|
||
var link_replace_dom_effect_1 = __webpack_require__(82);
|
||
var set_scroll_dom_effect_1 = __webpack_require__(83);
|
||
var set_window_name_dom_effect_1 = __webpack_require__(84);
|
||
var Events;
|
||
(function (Events) {
|
||
Events["PropSet"] = "@@BSDOM.Events.PropSet";
|
||
Events["StyleSet"] = "@@BSDOM.Events.StyleSet";
|
||
Events["LinkReplace"] = "@@BSDOM.Events.LinkReplace";
|
||
Events["SetScroll"] = "@@BSDOM.Events.SetScroll";
|
||
Events["SetWindowName"] = "@@BSDOM.Events.SetWindowName";
|
||
})(Events = exports.Events || (exports.Events = {}));
|
||
exports.domHandlers$ = new BehaviorSubject_1.BehaviorSubject((_a = {},
|
||
_a[Events.PropSet] = prop_set_dom_effect_1.propSetDomEffect,
|
||
_a[Events.StyleSet] = style_set_dom_effect_1.styleSetDomEffect,
|
||
_a[Events.LinkReplace] = link_replace_dom_effect_1.linkReplaceDomEffect,
|
||
_a[Events.SetScroll] = set_scroll_dom_effect_1.setScrollDomEffect,
|
||
_a[Events.SetWindowName] = set_window_name_dom_effect_1.setWindowNameDomEffect,
|
||
_a));
|
||
|
||
|
||
/***/ }),
|
||
/* 20 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var OuterSubscriber_1 = __webpack_require__(29);
|
||
var subscribeToResult_1 = __webpack_require__(30);
|
||
/* tslint:enable:max-line-length */
|
||
/**
|
||
* Projects each source value to an Observable which is merged in the output
|
||
* Observable, emitting values only from the most recently projected Observable.
|
||
*
|
||
* <span class="informal">Maps each value to an Observable, then flattens all of
|
||
* these inner Observables using {@link switch}.</span>
|
||
*
|
||
* <img src="./img/switchMap.png" width="100%">
|
||
*
|
||
* Returns an Observable that emits items based on applying a function that you
|
||
* supply to each item emitted by the source Observable, where that function
|
||
* returns an (so-called "inner") Observable. Each time it observes one of these
|
||
* inner Observables, the output Observable begins emitting the items emitted by
|
||
* that inner Observable. When a new inner Observable is emitted, `switchMap`
|
||
* stops emitting items from the earlier-emitted inner Observable and begins
|
||
* emitting items from the new one. It continues to behave like this for
|
||
* subsequent inner Observables.
|
||
*
|
||
* @example <caption>Rerun an interval Observable on every click event</caption>
|
||
* var clicks = Rx.Observable.fromEvent(document, 'click');
|
||
* var result = clicks.switchMap((ev) => Rx.Observable.interval(1000));
|
||
* result.subscribe(x => console.log(x));
|
||
*
|
||
* @see {@link concatMap}
|
||
* @see {@link exhaustMap}
|
||
* @see {@link mergeMap}
|
||
* @see {@link switch}
|
||
* @see {@link switchMapTo}
|
||
*
|
||
* @param {function(value: T, ?index: number): ObservableInput} project A function
|
||
* that, when applied to an item emitted by the source Observable, returns an
|
||
* Observable.
|
||
* @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]
|
||
* A function to produce the value on the output Observable based on the values
|
||
* and the indices of the source (outer) emission and the inner Observable
|
||
* emission. The arguments passed to this function are:
|
||
* - `outerValue`: the value that came from the source
|
||
* - `innerValue`: the value that came from the projected Observable
|
||
* - `outerIndex`: the "index" of the value that came from the source
|
||
* - `innerIndex`: the "index" of the value from the projected Observable
|
||
* @return {Observable} An Observable that emits the result of applying the
|
||
* projection function (and the optional `resultSelector`) to each item emitted
|
||
* by the source Observable and taking only the values from the most recently
|
||
* projected inner Observable.
|
||
* @method switchMap
|
||
* @owner Observable
|
||
*/
|
||
function switchMap(project, resultSelector) {
|
||
return function switchMapOperatorFunction(source) {
|
||
return source.lift(new SwitchMapOperator(project, resultSelector));
|
||
};
|
||
}
|
||
exports.switchMap = switchMap;
|
||
var SwitchMapOperator = (function () {
|
||
function SwitchMapOperator(project, resultSelector) {
|
||
this.project = project;
|
||
this.resultSelector = resultSelector;
|
||
}
|
||
SwitchMapOperator.prototype.call = function (subscriber, source) {
|
||
return source.subscribe(new SwitchMapSubscriber(subscriber, this.project, this.resultSelector));
|
||
};
|
||
return SwitchMapOperator;
|
||
}());
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var SwitchMapSubscriber = (function (_super) {
|
||
__extends(SwitchMapSubscriber, _super);
|
||
function SwitchMapSubscriber(destination, project, resultSelector) {
|
||
_super.call(this, destination);
|
||
this.project = project;
|
||
this.resultSelector = resultSelector;
|
||
this.index = 0;
|
||
}
|
||
SwitchMapSubscriber.prototype._next = function (value) {
|
||
var result;
|
||
var index = this.index++;
|
||
try {
|
||
result = this.project(value, index);
|
||
}
|
||
catch (error) {
|
||
this.destination.error(error);
|
||
return;
|
||
}
|
||
this._innerSub(result, value, index);
|
||
};
|
||
SwitchMapSubscriber.prototype._innerSub = function (result, value, index) {
|
||
var innerSubscription = this.innerSubscription;
|
||
if (innerSubscription) {
|
||
innerSubscription.unsubscribe();
|
||
}
|
||
this.add(this.innerSubscription = subscribeToResult_1.subscribeToResult(this, result, value, index));
|
||
};
|
||
SwitchMapSubscriber.prototype._complete = function () {
|
||
var innerSubscription = this.innerSubscription;
|
||
if (!innerSubscription || innerSubscription.closed) {
|
||
_super.prototype._complete.call(this);
|
||
}
|
||
};
|
||
/** @deprecated internal use only */ SwitchMapSubscriber.prototype._unsubscribe = function () {
|
||
this.innerSubscription = null;
|
||
};
|
||
SwitchMapSubscriber.prototype.notifyComplete = function (innerSub) {
|
||
this.remove(innerSub);
|
||
this.innerSubscription = null;
|
||
if (this.isStopped) {
|
||
_super.prototype._complete.call(this);
|
||
}
|
||
};
|
||
SwitchMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
|
||
if (this.resultSelector) {
|
||
this._tryNotifyNext(outerValue, innerValue, outerIndex, innerIndex);
|
||
}
|
||
else {
|
||
this.destination.next(innerValue);
|
||
}
|
||
};
|
||
SwitchMapSubscriber.prototype._tryNotifyNext = function (outerValue, innerValue, outerIndex, innerIndex) {
|
||
var result;
|
||
try {
|
||
result = this.resultSelector(outerValue, innerValue, outerIndex, innerIndex);
|
||
}
|
||
catch (err) {
|
||
this.destination.error(err);
|
||
return;
|
||
}
|
||
this.destination.next(result);
|
||
};
|
||
return SwitchMapSubscriber;
|
||
}(OuterSubscriber_1.OuterSubscriber));
|
||
//# sourceMappingURL=switchMap.js.map
|
||
|
||
/***/ }),
|
||
/* 21 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var concat_1 = __webpack_require__(54);
|
||
var timer_1 = __webpack_require__(52);
|
||
var of_1 = __webpack_require__(9);
|
||
var switchMap_1 = __webpack_require__(20);
|
||
var startWith_1 = __webpack_require__(152);
|
||
var mapTo_1 = __webpack_require__(88);
|
||
function each(incoming) {
|
||
return [].slice.call(incoming || []);
|
||
}
|
||
exports.each = each;
|
||
exports.splitUrl = function (url) {
|
||
var hash, index, params;
|
||
if ((index = url.indexOf("#")) >= 0) {
|
||
hash = url.slice(index);
|
||
url = url.slice(0, index);
|
||
}
|
||
else {
|
||
hash = "";
|
||
}
|
||
if ((index = url.indexOf("?")) >= 0) {
|
||
params = url.slice(index);
|
||
url = url.slice(0, index);
|
||
}
|
||
else {
|
||
params = "";
|
||
}
|
||
return { url: url, params: params, hash: hash };
|
||
};
|
||
exports.pathFromUrl = function (url) {
|
||
var path;
|
||
(url = exports.splitUrl(url).url);
|
||
if (url.indexOf("file://") === 0) {
|
||
path = url.replace(new RegExp("^file://(localhost)?"), "");
|
||
}
|
||
else {
|
||
// http : // hostname :8080 /
|
||
path = url.replace(new RegExp("^([^:]+:)?//([^:/]+)(:\\d*)?/"), "/");
|
||
}
|
||
// decodeURI has special handling of stuff like semicolons, so use decodeURIComponent
|
||
return decodeURIComponent(path);
|
||
};
|
||
exports.pickBestMatch = function (path, objects, pathFunc) {
|
||
var score;
|
||
var bestMatch = { score: 0, object: null };
|
||
objects.forEach(function (object) {
|
||
score = exports.numberOfMatchingSegments(path, pathFunc(object));
|
||
if (score > bestMatch.score) {
|
||
bestMatch = { object: object, score: score };
|
||
}
|
||
});
|
||
if (bestMatch.score > 0) {
|
||
return bestMatch;
|
||
}
|
||
else {
|
||
return null;
|
||
}
|
||
};
|
||
exports.numberOfMatchingSegments = function (path1, path2) {
|
||
path1 = normalisePath(path1);
|
||
path2 = normalisePath(path2);
|
||
if (path1 === path2) {
|
||
return 10000;
|
||
}
|
||
var comps1 = path1.split("/").reverse();
|
||
var comps2 = path2.split("/").reverse();
|
||
var len = Math.min(comps1.length, comps2.length);
|
||
var eqCount = 0;
|
||
while (eqCount < len && comps1[eqCount] === comps2[eqCount]) {
|
||
++eqCount;
|
||
}
|
||
return eqCount;
|
||
};
|
||
exports.pathsMatch = function (path1, path2) {
|
||
return exports.numberOfMatchingSegments(path1, path2) > 0;
|
||
};
|
||
function getLocation(url) {
|
||
var location = document.createElement("a");
|
||
location.href = url;
|
||
if (location.host === "") {
|
||
location.href = location.href;
|
||
}
|
||
return location;
|
||
}
|
||
exports.getLocation = getLocation;
|
||
/**
|
||
* @param {string} search
|
||
* @param {string} key
|
||
* @param {string} suffix
|
||
*/
|
||
function updateSearch(search, key, suffix) {
|
||
if (search === "") {
|
||
return "?" + suffix;
|
||
}
|
||
return ("?" +
|
||
search
|
||
.slice(1)
|
||
.split("&")
|
||
.map(function (item) {
|
||
return item.split("=");
|
||
})
|
||
.filter(function (tuple) {
|
||
return tuple[0] !== key;
|
||
})
|
||
.map(function (item) {
|
||
return [item[0], item[1]].join("=");
|
||
})
|
||
.concat(suffix)
|
||
.join("&"));
|
||
}
|
||
exports.updateSearch = updateSearch;
|
||
var blacklist = [
|
||
// never allow .map files through
|
||
function (incoming) {
|
||
return incoming.ext === "map";
|
||
}
|
||
];
|
||
/**
|
||
* @param incoming
|
||
* @returns {boolean}
|
||
*/
|
||
function isBlacklisted(incoming) {
|
||
return blacklist.some(function (fn) {
|
||
return fn(incoming);
|
||
});
|
||
}
|
||
exports.isBlacklisted = isBlacklisted;
|
||
function createTimedBooleanSwitch(source$, timeout) {
|
||
if (timeout === void 0) { timeout = 1000; }
|
||
return source$.pipe(switchMap_1.switchMap(function () {
|
||
return concat_1.concat(of_1.of(false), timer_1.timer(timeout).pipe(mapTo_1.mapTo(true)));
|
||
}), startWith_1.startWith(true));
|
||
}
|
||
exports.createTimedBooleanSwitch = createTimedBooleanSwitch;
|
||
function array(incoming) {
|
||
return [].slice.call(incoming);
|
||
}
|
||
exports.array = array;
|
||
function normalisePath(path) {
|
||
return path
|
||
.replace(/^\/+/, "")
|
||
.replace(/\\/g, "/")
|
||
.toLowerCase();
|
||
}
|
||
exports.normalisePath = normalisePath;
|
||
|
||
|
||
/***/ }),
|
||
/* 22 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
function getWindow() {
|
||
return window;
|
||
}
|
||
exports.getWindow = getWindow;
|
||
/**
|
||
* @returns {HTMLDocument}
|
||
*/
|
||
function getDocument() {
|
||
return document;
|
||
}
|
||
exports.getDocument = getDocument;
|
||
/**
|
||
* Get the current x/y position crossbow
|
||
* @returns {{x: *, y: *}}
|
||
*/
|
||
function getBrowserScrollPosition(window, document) {
|
||
var scrollX;
|
||
var scrollY;
|
||
var dElement = document.documentElement;
|
||
var dBody = document.body;
|
||
if (window.pageYOffset !== undefined) {
|
||
scrollX = window.pageXOffset;
|
||
scrollY = window.pageYOffset;
|
||
}
|
||
else {
|
||
scrollX = dElement.scrollLeft || dBody.scrollLeft || 0;
|
||
scrollY = dElement.scrollTop || dBody.scrollTop || 0;
|
||
}
|
||
return {
|
||
x: scrollX,
|
||
y: scrollY
|
||
};
|
||
}
|
||
exports.getBrowserScrollPosition = getBrowserScrollPosition;
|
||
/**
|
||
* @returns {{x: number, y: number}}
|
||
*/
|
||
function getDocumentScrollSpace(document) {
|
||
var dElement = document.documentElement;
|
||
var dBody = document.body;
|
||
return {
|
||
x: dBody.scrollHeight - dElement.clientWidth,
|
||
y: dBody.scrollHeight - dElement.clientHeight
|
||
};
|
||
}
|
||
exports.getDocumentScrollSpace = getDocumentScrollSpace;
|
||
/**
|
||
* Saves scroll position into cookies
|
||
*/
|
||
function saveScrollPosition(window, document) {
|
||
var pos = getBrowserScrollPosition(window, document);
|
||
document.cookie = "bs_scroll_pos=" + [pos.x, pos.y].join(",");
|
||
}
|
||
exports.saveScrollPosition = saveScrollPosition;
|
||
/**
|
||
* Restores scroll position from cookies
|
||
*/
|
||
function restoreScrollPosition() {
|
||
var pos = getDocument()
|
||
.cookie.replace(/(?:(?:^|.*;\s*)bs_scroll_pos\s*\=\s*([^;]*).*$)|^.*$/, "$1")
|
||
.split(",");
|
||
getWindow().scrollTo(Number(pos[0]), Number(pos[1]));
|
||
}
|
||
exports.restoreScrollPosition = restoreScrollPosition;
|
||
/**
|
||
* @param tagName
|
||
* @param elem
|
||
* @returns {*|number}
|
||
*/
|
||
function getElementIndex(tagName, elem) {
|
||
var allElems = getDocument().getElementsByTagName(tagName);
|
||
return Array.prototype.indexOf.call(allElems, elem);
|
||
}
|
||
exports.getElementIndex = getElementIndex;
|
||
/**
|
||
* Force Change event on radio & checkboxes (IE)
|
||
*/
|
||
function forceChange(elem) {
|
||
elem.blur();
|
||
elem.focus();
|
||
}
|
||
exports.forceChange = forceChange;
|
||
/**
|
||
* @param elem
|
||
* @returns {{tagName: (elem.tagName|*), index: *}}
|
||
*/
|
||
function getElementData(elem) {
|
||
var tagName = elem.tagName;
|
||
var index = getElementIndex(tagName, elem);
|
||
return {
|
||
tagName: tagName,
|
||
index: index
|
||
};
|
||
}
|
||
exports.getElementData = getElementData;
|
||
/**
|
||
* @param {string} tagName
|
||
* @param {number} index
|
||
*/
|
||
function getSingleElement(tagName, index) {
|
||
var elems = getDocument().getElementsByTagName(tagName);
|
||
return elems[index];
|
||
}
|
||
exports.getSingleElement = getSingleElement;
|
||
/**
|
||
* Get the body element
|
||
*/
|
||
function getBody() {
|
||
return getDocument().getElementsByTagName("body")[0];
|
||
}
|
||
exports.getBody = getBody;
|
||
/**
|
||
* @param {{x: number, y: number}} pos
|
||
*/
|
||
function setScroll(pos) {
|
||
getWindow().scrollTo(pos.x, pos.y);
|
||
}
|
||
exports.setScroll = setScroll;
|
||
/**
|
||
* Hard reload
|
||
*/
|
||
function reloadBrowser() {
|
||
getWindow().location.reload(true);
|
||
}
|
||
exports.reloadBrowser = reloadBrowser;
|
||
/**
|
||
* Foreach polyfill
|
||
* @param coll
|
||
* @param fn
|
||
*/
|
||
function forEach(coll, fn) {
|
||
for (var i = 0, n = coll.length; i < n; i += 1) {
|
||
fn(coll[i], i, coll);
|
||
}
|
||
}
|
||
exports.forEach = forEach;
|
||
/**
|
||
* Are we dealing with old IE?
|
||
* @returns {boolean}
|
||
*/
|
||
function isOldIe() {
|
||
return typeof getWindow().attachEvent !== "undefined";
|
||
}
|
||
exports.isOldIe = isOldIe;
|
||
/**
|
||
* Split the URL information
|
||
* @returns {object}
|
||
*/
|
||
function getLocation(url) {
|
||
var location = getDocument().createElement("a");
|
||
location.href = url;
|
||
if (location.host === "") {
|
||
location.href = location.href;
|
||
}
|
||
return location;
|
||
}
|
||
exports.getLocation = getLocation;
|
||
/**
|
||
* @param {String} val
|
||
* @returns {boolean}
|
||
*/
|
||
function isUndefined(val) {
|
||
return "undefined" === typeof val;
|
||
}
|
||
exports.isUndefined = isUndefined;
|
||
/**
|
||
* @param obj
|
||
* @param path
|
||
*/
|
||
function getByPath(obj, path) {
|
||
for (var i = 0, tempPath = path.split("."), len = tempPath.length; i < len; i++) {
|
||
if (!obj || typeof obj !== "object") {
|
||
return false;
|
||
}
|
||
obj = obj[tempPath[i]];
|
||
}
|
||
if (typeof obj === "undefined") {
|
||
return false;
|
||
}
|
||
return obj;
|
||
}
|
||
exports.getByPath = getByPath;
|
||
function getScrollPosition(window, document) {
|
||
var pos = getBrowserScrollPosition(window, document);
|
||
return {
|
||
raw: pos,
|
||
proportional: getScrollTopPercentage(pos, document) // Get % of y axis of scroll
|
||
};
|
||
}
|
||
exports.getScrollPosition = getScrollPosition;
|
||
function getScrollPositionForElement(element) {
|
||
var raw = {
|
||
x: element.scrollLeft,
|
||
y: element.scrollTop
|
||
};
|
||
var scrollSpace = {
|
||
x: element.scrollWidth,
|
||
y: element.scrollHeight
|
||
};
|
||
return {
|
||
raw: raw,
|
||
proportional: getScrollPercentage(scrollSpace, raw).y // Get % of y axis of scroll
|
||
};
|
||
}
|
||
exports.getScrollPositionForElement = getScrollPositionForElement;
|
||
function getScrollTopPercentage(pos, document) {
|
||
var scrollSpace = getDocumentScrollSpace(document);
|
||
var percentage = getScrollPercentage(scrollSpace, pos);
|
||
return percentage.y;
|
||
}
|
||
exports.getScrollTopPercentage = getScrollTopPercentage;
|
||
function getScrollPercentage(scrollSpace, scrollPosition) {
|
||
var x = scrollPosition.x / scrollSpace.x;
|
||
var y = scrollPosition.y / scrollSpace.y;
|
||
return {
|
||
x: x || 0,
|
||
y: y
|
||
};
|
||
}
|
||
exports.getScrollPercentage = getScrollPercentage;
|
||
|
||
|
||
/***/ }),
|
||
/* 23 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Observable_1 = __webpack_require__(1);
|
||
var ScalarObservable_1 = __webpack_require__(46);
|
||
var EmptyObservable_1 = __webpack_require__(28);
|
||
var isScheduler_1 = __webpack_require__(25);
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @extends {Ignored}
|
||
* @hide true
|
||
*/
|
||
var ArrayObservable = (function (_super) {
|
||
__extends(ArrayObservable, _super);
|
||
function ArrayObservable(array, scheduler) {
|
||
_super.call(this);
|
||
this.array = array;
|
||
this.scheduler = scheduler;
|
||
if (!scheduler && array.length === 1) {
|
||
this._isScalar = true;
|
||
this.value = array[0];
|
||
}
|
||
}
|
||
ArrayObservable.create = function (array, scheduler) {
|
||
return new ArrayObservable(array, scheduler);
|
||
};
|
||
/**
|
||
* Creates an Observable that emits some values you specify as arguments,
|
||
* immediately one after the other, and then emits a complete notification.
|
||
*
|
||
* <span class="informal">Emits the arguments you provide, then completes.
|
||
* </span>
|
||
*
|
||
* <img src="./img/of.png" width="100%">
|
||
*
|
||
* This static operator is useful for creating a simple Observable that only
|
||
* emits the arguments given, and the complete notification thereafter. It can
|
||
* be used for composing with other Observables, such as with {@link concat}.
|
||
* By default, it uses a `null` IScheduler, which means the `next`
|
||
* notifications are sent synchronously, although with a different IScheduler
|
||
* it is possible to determine when those notifications will be delivered.
|
||
*
|
||
* @example <caption>Emit 10, 20, 30, then 'a', 'b', 'c', then start ticking every second.</caption>
|
||
* var numbers = Rx.Observable.of(10, 20, 30);
|
||
* var letters = Rx.Observable.of('a', 'b', 'c');
|
||
* var interval = Rx.Observable.interval(1000);
|
||
* var result = numbers.concat(letters).concat(interval);
|
||
* result.subscribe(x => console.log(x));
|
||
*
|
||
* @see {@link create}
|
||
* @see {@link empty}
|
||
* @see {@link never}
|
||
* @see {@link throw}
|
||
*
|
||
* @param {...T} values Arguments that represent `next` values to be emitted.
|
||
* @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling
|
||
* the emissions of the `next` notifications.
|
||
* @return {Observable<T>} An Observable that emits each given input value.
|
||
* @static true
|
||
* @name of
|
||
* @owner Observable
|
||
*/
|
||
ArrayObservable.of = function () {
|
||
var array = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
array[_i - 0] = arguments[_i];
|
||
}
|
||
var scheduler = array[array.length - 1];
|
||
if (isScheduler_1.isScheduler(scheduler)) {
|
||
array.pop();
|
||
}
|
||
else {
|
||
scheduler = null;
|
||
}
|
||
var len = array.length;
|
||
if (len > 1) {
|
||
return new ArrayObservable(array, scheduler);
|
||
}
|
||
else if (len === 1) {
|
||
return new ScalarObservable_1.ScalarObservable(array[0], scheduler);
|
||
}
|
||
else {
|
||
return new EmptyObservable_1.EmptyObservable(scheduler);
|
||
}
|
||
};
|
||
ArrayObservable.dispatch = function (state) {
|
||
var array = state.array, index = state.index, count = state.count, subscriber = state.subscriber;
|
||
if (index >= count) {
|
||
subscriber.complete();
|
||
return;
|
||
}
|
||
subscriber.next(array[index]);
|
||
if (subscriber.closed) {
|
||
return;
|
||
}
|
||
state.index = index + 1;
|
||
this.schedule(state);
|
||
};
|
||
/** @deprecated internal use only */ ArrayObservable.prototype._subscribe = function (subscriber) {
|
||
var index = 0;
|
||
var array = this.array;
|
||
var count = array.length;
|
||
var scheduler = this.scheduler;
|
||
if (scheduler) {
|
||
return scheduler.schedule(ArrayObservable.dispatch, 0, {
|
||
array: array, index: index, count: count, subscriber: subscriber
|
||
});
|
||
}
|
||
else {
|
||
for (var i = 0; i < count && !subscriber.closed; i++) {
|
||
subscriber.next(array[i]);
|
||
}
|
||
subscriber.complete();
|
||
}
|
||
};
|
||
return ArrayObservable;
|
||
}(Observable_1.Observable));
|
||
exports.ArrayObservable = ArrayObservable;
|
||
//# sourceMappingURL=ArrayObservable.js.map
|
||
|
||
/***/ }),
|
||
/* 24 */
|
||
/***/ (function(module, exports) {
|
||
|
||
var g;
|
||
|
||
// This works in non-strict mode
|
||
g = (function() {
|
||
return this;
|
||
})();
|
||
|
||
try {
|
||
// This works if eval is allowed (see CSP)
|
||
g = g || Function("return this")() || (1,eval)("this");
|
||
} catch(e) {
|
||
// This works if the window reference is available
|
||
if(typeof window === "object")
|
||
g = window;
|
||
}
|
||
|
||
// g can still be undefined, but nothing to do about it...
|
||
// We return undefined, instead of nothing here, so it's
|
||
// easier to handle this case. if(!global) { ...}
|
||
|
||
module.exports = g;
|
||
|
||
|
||
/***/ }),
|
||
/* 25 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
function isScheduler(value) {
|
||
return value && typeof value.schedule === 'function';
|
||
}
|
||
exports.isScheduler = isScheduler;
|
||
//# sourceMappingURL=isScheduler.js.map
|
||
|
||
/***/ }),
|
||
/* 26 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
exports.isArray = Array.isArray || (function (x) { return x && typeof x.length === 'number'; });
|
||
//# sourceMappingURL=isArray.js.map
|
||
|
||
/***/ }),
|
||
/* 27 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
// typeof any so that it we don't have to cast when comparing a result to the error object
|
||
exports.errorObject = { e: {} };
|
||
//# sourceMappingURL=errorObject.js.map
|
||
|
||
/***/ }),
|
||
/* 28 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Observable_1 = __webpack_require__(1);
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @extends {Ignored}
|
||
* @hide true
|
||
*/
|
||
var EmptyObservable = (function (_super) {
|
||
__extends(EmptyObservable, _super);
|
||
function EmptyObservable(scheduler) {
|
||
_super.call(this);
|
||
this.scheduler = scheduler;
|
||
}
|
||
/**
|
||
* Creates an Observable that emits no items to the Observer and immediately
|
||
* emits a complete notification.
|
||
*
|
||
* <span class="informal">Just emits 'complete', and nothing else.
|
||
* </span>
|
||
*
|
||
* <img src="./img/empty.png" width="100%">
|
||
*
|
||
* This static operator is useful for creating a simple Observable that only
|
||
* emits the complete notification. It can be used for composing with other
|
||
* Observables, such as in a {@link mergeMap}.
|
||
*
|
||
* @example <caption>Emit the number 7, then complete.</caption>
|
||
* var result = Rx.Observable.empty().startWith(7);
|
||
* result.subscribe(x => console.log(x));
|
||
*
|
||
* @example <caption>Map and flatten only odd numbers to the sequence 'a', 'b', 'c'</caption>
|
||
* var interval = Rx.Observable.interval(1000);
|
||
* var result = interval.mergeMap(x =>
|
||
* x % 2 === 1 ? Rx.Observable.of('a', 'b', 'c') : Rx.Observable.empty()
|
||
* );
|
||
* result.subscribe(x => console.log(x));
|
||
*
|
||
* // Results in the following to the console:
|
||
* // x is equal to the count on the interval eg(0,1,2,3,...)
|
||
* // x will occur every 1000ms
|
||
* // if x % 2 is equal to 1 print abc
|
||
* // if x % 2 is not equal to 1 nothing will be output
|
||
*
|
||
* @see {@link create}
|
||
* @see {@link never}
|
||
* @see {@link of}
|
||
* @see {@link throw}
|
||
*
|
||
* @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling
|
||
* the emission of the complete notification.
|
||
* @return {Observable} An "empty" Observable: emits only the complete
|
||
* notification.
|
||
* @static true
|
||
* @name empty
|
||
* @owner Observable
|
||
*/
|
||
EmptyObservable.create = function (scheduler) {
|
||
return new EmptyObservable(scheduler);
|
||
};
|
||
EmptyObservable.dispatch = function (arg) {
|
||
var subscriber = arg.subscriber;
|
||
subscriber.complete();
|
||
};
|
||
/** @deprecated internal use only */ EmptyObservable.prototype._subscribe = function (subscriber) {
|
||
var scheduler = this.scheduler;
|
||
if (scheduler) {
|
||
return scheduler.schedule(EmptyObservable.dispatch, 0, { subscriber: subscriber });
|
||
}
|
||
else {
|
||
subscriber.complete();
|
||
}
|
||
};
|
||
return EmptyObservable;
|
||
}(Observable_1.Observable));
|
||
exports.EmptyObservable = EmptyObservable;
|
||
//# sourceMappingURL=EmptyObservable.js.map
|
||
|
||
/***/ }),
|
||
/* 29 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var OuterSubscriber = (function (_super) {
|
||
__extends(OuterSubscriber, _super);
|
||
function OuterSubscriber() {
|
||
_super.apply(this, arguments);
|
||
}
|
||
OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
|
||
this.destination.next(innerValue);
|
||
};
|
||
OuterSubscriber.prototype.notifyError = function (error, innerSub) {
|
||
this.destination.error(error);
|
||
};
|
||
OuterSubscriber.prototype.notifyComplete = function (innerSub) {
|
||
this.destination.complete();
|
||
};
|
||
return OuterSubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
exports.OuterSubscriber = OuterSubscriber;
|
||
//# sourceMappingURL=OuterSubscriber.js.map
|
||
|
||
/***/ }),
|
||
/* 30 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var root_1 = __webpack_require__(7);
|
||
var isArrayLike_1 = __webpack_require__(59);
|
||
var isPromise_1 = __webpack_require__(60);
|
||
var isObject_1 = __webpack_require__(56);
|
||
var Observable_1 = __webpack_require__(1);
|
||
var iterator_1 = __webpack_require__(31);
|
||
var InnerSubscriber_1 = __webpack_require__(106);
|
||
var observable_1 = __webpack_require__(45);
|
||
function subscribeToResult(outerSubscriber, result, outerValue, outerIndex) {
|
||
var destination = new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex);
|
||
if (destination.closed) {
|
||
return null;
|
||
}
|
||
if (result instanceof Observable_1.Observable) {
|
||
if (result._isScalar) {
|
||
destination.next(result.value);
|
||
destination.complete();
|
||
return null;
|
||
}
|
||
else {
|
||
destination.syncErrorThrowable = true;
|
||
return result.subscribe(destination);
|
||
}
|
||
}
|
||
else if (isArrayLike_1.isArrayLike(result)) {
|
||
for (var i = 0, len = result.length; i < len && !destination.closed; i++) {
|
||
destination.next(result[i]);
|
||
}
|
||
if (!destination.closed) {
|
||
destination.complete();
|
||
}
|
||
}
|
||
else if (isPromise_1.isPromise(result)) {
|
||
result.then(function (value) {
|
||
if (!destination.closed) {
|
||
destination.next(value);
|
||
destination.complete();
|
||
}
|
||
}, function (err) { return destination.error(err); })
|
||
.then(null, function (err) {
|
||
// Escaping the Promise trap: globally throw unhandled errors
|
||
root_1.root.setTimeout(function () { throw err; });
|
||
});
|
||
return destination;
|
||
}
|
||
else if (result && typeof result[iterator_1.iterator] === 'function') {
|
||
var iterator = result[iterator_1.iterator]();
|
||
do {
|
||
var item = iterator.next();
|
||
if (item.done) {
|
||
destination.complete();
|
||
break;
|
||
}
|
||
destination.next(item.value);
|
||
if (destination.closed) {
|
||
break;
|
||
}
|
||
} while (true);
|
||
}
|
||
else if (result && typeof result[observable_1.observable] === 'function') {
|
||
var obs = result[observable_1.observable]();
|
||
if (typeof obs.subscribe !== 'function') {
|
||
destination.error(new TypeError('Provided object does not correctly implement Symbol.observable'));
|
||
}
|
||
else {
|
||
return obs.subscribe(new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex));
|
||
}
|
||
}
|
||
else {
|
||
var value = isObject_1.isObject(result) ? 'an invalid object' : "'" + result + "'";
|
||
var msg = ("You provided " + value + " where a stream was expected.")
|
||
+ ' You can provide an Observable, Promise, Array, or Iterable.';
|
||
destination.error(new TypeError(msg));
|
||
}
|
||
return null;
|
||
}
|
||
exports.subscribeToResult = subscribeToResult;
|
||
//# sourceMappingURL=subscribeToResult.js.map
|
||
|
||
/***/ }),
|
||
/* 31 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var root_1 = __webpack_require__(7);
|
||
function symbolIteratorPonyfill(root) {
|
||
var Symbol = root.Symbol;
|
||
if (typeof Symbol === 'function') {
|
||
if (!Symbol.iterator) {
|
||
Symbol.iterator = Symbol('iterator polyfill');
|
||
}
|
||
return Symbol.iterator;
|
||
}
|
||
else {
|
||
// [for Mozilla Gecko 27-35:](https://mzl.la/2ewE1zC)
|
||
var Set_1 = root.Set;
|
||
if (Set_1 && typeof new Set_1()['@@iterator'] === 'function') {
|
||
return '@@iterator';
|
||
}
|
||
var Map_1 = root.Map;
|
||
// required for compatability with es6-shim
|
||
if (Map_1) {
|
||
var keys = Object.getOwnPropertyNames(Map_1.prototype);
|
||
for (var i = 0; i < keys.length; ++i) {
|
||
var key = keys[i];
|
||
// according to spec, Map.prototype[@@iterator] and Map.orototype.entries must be equal.
|
||
if (key !== 'entries' && key !== 'size' && Map_1.prototype[key] === Map_1.prototype['entries']) {
|
||
return key;
|
||
}
|
||
}
|
||
}
|
||
return '@@iterator';
|
||
}
|
||
}
|
||
exports.symbolIteratorPonyfill = symbolIteratorPonyfill;
|
||
exports.iterator = symbolIteratorPonyfill(root_1.root);
|
||
/**
|
||
* @deprecated use iterator instead
|
||
*/
|
||
exports.$$iterator = exports.iterator;
|
||
//# sourceMappingURL=iterator.js.map
|
||
|
||
/***/ }),
|
||
/* 32 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(process) {/**
|
||
* This is the web browser implementation of `debug()`.
|
||
*
|
||
* Expose `debug()` as the module.
|
||
*/
|
||
|
||
exports = module.exports = __webpack_require__(110);
|
||
exports.log = log;
|
||
exports.formatArgs = formatArgs;
|
||
exports.save = save;
|
||
exports.load = load;
|
||
exports.useColors = useColors;
|
||
exports.storage = 'undefined' != typeof chrome
|
||
&& 'undefined' != typeof chrome.storage
|
||
? chrome.storage.local
|
||
: localstorage();
|
||
|
||
/**
|
||
* Colors.
|
||
*/
|
||
|
||
exports.colors = [
|
||
'#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',
|
||
'#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',
|
||
'#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',
|
||
'#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',
|
||
'#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',
|
||
'#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',
|
||
'#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',
|
||
'#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',
|
||
'#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',
|
||
'#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',
|
||
'#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'
|
||
];
|
||
|
||
/**
|
||
* Currently only WebKit-based Web Inspectors, Firefox >= v31,
|
||
* and the Firebug extension (any Firefox version) are known
|
||
* to support "%c" CSS customizations.
|
||
*
|
||
* TODO: add a `localStorage` variable to explicitly enable/disable colors
|
||
*/
|
||
|
||
function useColors() {
|
||
// NB: In an Electron preload script, document will be defined but not fully
|
||
// initialized. Since we know we're in Chrome, we'll just detect this case
|
||
// explicitly
|
||
if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
|
||
return true;
|
||
}
|
||
|
||
// Internet Explorer and Edge do not support colors.
|
||
if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
|
||
return false;
|
||
}
|
||
|
||
// is webkit? http://stackoverflow.com/a/16459606/376773
|
||
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
|
||
return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
|
||
// is firebug? http://stackoverflow.com/a/398120/376773
|
||
(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
|
||
// is firefox >= v31?
|
||
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
|
||
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
|
||
// double check webkit in userAgent just in case we are in a worker
|
||
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
|
||
}
|
||
|
||
/**
|
||
* Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
|
||
*/
|
||
|
||
exports.formatters.j = function(v) {
|
||
try {
|
||
return JSON.stringify(v);
|
||
} catch (err) {
|
||
return '[UnexpectedJSONParseError]: ' + err.message;
|
||
}
|
||
};
|
||
|
||
|
||
/**
|
||
* Colorize log arguments if enabled.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
function formatArgs(args) {
|
||
var useColors = this.useColors;
|
||
|
||
args[0] = (useColors ? '%c' : '')
|
||
+ this.namespace
|
||
+ (useColors ? ' %c' : ' ')
|
||
+ args[0]
|
||
+ (useColors ? '%c ' : ' ')
|
||
+ '+' + exports.humanize(this.diff);
|
||
|
||
if (!useColors) return;
|
||
|
||
var c = 'color: ' + this.color;
|
||
args.splice(1, 0, c, 'color: inherit')
|
||
|
||
// the final "%c" is somewhat tricky, because there could be other
|
||
// arguments passed either before or after the %c, so we need to
|
||
// figure out the correct index to insert the CSS into
|
||
var index = 0;
|
||
var lastC = 0;
|
||
args[0].replace(/%[a-zA-Z%]/g, function(match) {
|
||
if ('%%' === match) return;
|
||
index++;
|
||
if ('%c' === match) {
|
||
// we only are interested in the *last* %c
|
||
// (the user may have provided their own)
|
||
lastC = index;
|
||
}
|
||
});
|
||
|
||
args.splice(lastC, 0, c);
|
||
}
|
||
|
||
/**
|
||
* Invokes `console.log()` when available.
|
||
* No-op when `console.log` is not a "function".
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
function log() {
|
||
// this hackery is required for IE8/9, where
|
||
// the `console.log` function doesn't have 'apply'
|
||
return 'object' === typeof console
|
||
&& console.log
|
||
&& Function.prototype.apply.call(console.log, console, arguments);
|
||
}
|
||
|
||
/**
|
||
* Save `namespaces`.
|
||
*
|
||
* @param {String} namespaces
|
||
* @api private
|
||
*/
|
||
|
||
function save(namespaces) {
|
||
try {
|
||
if (null == namespaces) {
|
||
exports.storage.removeItem('debug');
|
||
} else {
|
||
exports.storage.debug = namespaces;
|
||
}
|
||
} catch(e) {}
|
||
}
|
||
|
||
/**
|
||
* Load `namespaces`.
|
||
*
|
||
* @return {String} returns the previously persisted debug modes
|
||
* @api private
|
||
*/
|
||
|
||
function load() {
|
||
var r;
|
||
try {
|
||
r = exports.storage.debug;
|
||
} catch(e) {}
|
||
|
||
// If debug isn't set in LS, and we're in Electron, try to load $DEBUG
|
||
if (!r && typeof process !== 'undefined' && 'env' in process) {
|
||
r = process.env.DEBUG;
|
||
}
|
||
|
||
return r;
|
||
}
|
||
|
||
/**
|
||
* Enable namespaces listed in `localStorage.debug` initially.
|
||
*/
|
||
|
||
exports.enable(load());
|
||
|
||
/**
|
||
* Localstorage attempts to return the localstorage.
|
||
*
|
||
* This is necessary because safari throws
|
||
* when a user disables cookies/localstorage
|
||
* and you attempt to access it.
|
||
*
|
||
* @return {LocalStorage}
|
||
* @api private
|
||
*/
|
||
|
||
function localstorage() {
|
||
try {
|
||
return window.localStorage;
|
||
} catch (e) {}
|
||
}
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(33)))
|
||
|
||
/***/ }),
|
||
/* 33 */
|
||
/***/ (function(module, exports) {
|
||
|
||
// shim for using process in browser
|
||
var process = module.exports = {};
|
||
|
||
// cached from whatever global is present so that test runners that stub it
|
||
// don't break things. But we need to wrap it in a try catch in case it is
|
||
// wrapped in strict mode code which doesn't define any globals. It's inside a
|
||
// function because try/catches deoptimize in certain engines.
|
||
|
||
var cachedSetTimeout;
|
||
var cachedClearTimeout;
|
||
|
||
function defaultSetTimout() {
|
||
throw new Error('setTimeout has not been defined');
|
||
}
|
||
function defaultClearTimeout () {
|
||
throw new Error('clearTimeout has not been defined');
|
||
}
|
||
(function () {
|
||
try {
|
||
if (typeof setTimeout === 'function') {
|
||
cachedSetTimeout = setTimeout;
|
||
} else {
|
||
cachedSetTimeout = defaultSetTimout;
|
||
}
|
||
} catch (e) {
|
||
cachedSetTimeout = defaultSetTimout;
|
||
}
|
||
try {
|
||
if (typeof clearTimeout === 'function') {
|
||
cachedClearTimeout = clearTimeout;
|
||
} else {
|
||
cachedClearTimeout = defaultClearTimeout;
|
||
}
|
||
} catch (e) {
|
||
cachedClearTimeout = defaultClearTimeout;
|
||
}
|
||
} ())
|
||
function runTimeout(fun) {
|
||
if (cachedSetTimeout === setTimeout) {
|
||
//normal enviroments in sane situations
|
||
return setTimeout(fun, 0);
|
||
}
|
||
// if setTimeout wasn't available but was latter defined
|
||
if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
|
||
cachedSetTimeout = setTimeout;
|
||
return setTimeout(fun, 0);
|
||
}
|
||
try {
|
||
// when when somebody has screwed with setTimeout but no I.E. maddness
|
||
return cachedSetTimeout(fun, 0);
|
||
} catch(e){
|
||
try {
|
||
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
||
return cachedSetTimeout.call(null, fun, 0);
|
||
} catch(e){
|
||
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
|
||
return cachedSetTimeout.call(this, fun, 0);
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
function runClearTimeout(marker) {
|
||
if (cachedClearTimeout === clearTimeout) {
|
||
//normal enviroments in sane situations
|
||
return clearTimeout(marker);
|
||
}
|
||
// if clearTimeout wasn't available but was latter defined
|
||
if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
|
||
cachedClearTimeout = clearTimeout;
|
||
return clearTimeout(marker);
|
||
}
|
||
try {
|
||
// when when somebody has screwed with setTimeout but no I.E. maddness
|
||
return cachedClearTimeout(marker);
|
||
} catch (e){
|
||
try {
|
||
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
||
return cachedClearTimeout.call(null, marker);
|
||
} catch (e){
|
||
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
|
||
// Some versions of I.E. have different rules for clearTimeout vs setTimeout
|
||
return cachedClearTimeout.call(this, marker);
|
||
}
|
||
}
|
||
|
||
|
||
|
||
}
|
||
var queue = [];
|
||
var draining = false;
|
||
var currentQueue;
|
||
var queueIndex = -1;
|
||
|
||
function cleanUpNextTick() {
|
||
if (!draining || !currentQueue) {
|
||
return;
|
||
}
|
||
draining = false;
|
||
if (currentQueue.length) {
|
||
queue = currentQueue.concat(queue);
|
||
} else {
|
||
queueIndex = -1;
|
||
}
|
||
if (queue.length) {
|
||
drainQueue();
|
||
}
|
||
}
|
||
|
||
function drainQueue() {
|
||
if (draining) {
|
||
return;
|
||
}
|
||
var timeout = runTimeout(cleanUpNextTick);
|
||
draining = true;
|
||
|
||
var len = queue.length;
|
||
while(len) {
|
||
currentQueue = queue;
|
||
queue = [];
|
||
while (++queueIndex < len) {
|
||
if (currentQueue) {
|
||
currentQueue[queueIndex].run();
|
||
}
|
||
}
|
||
queueIndex = -1;
|
||
len = queue.length;
|
||
}
|
||
currentQueue = null;
|
||
draining = false;
|
||
runClearTimeout(timeout);
|
||
}
|
||
|
||
process.nextTick = function (fun) {
|
||
var args = new Array(arguments.length - 1);
|
||
if (arguments.length > 1) {
|
||
for (var i = 1; i < arguments.length; i++) {
|
||
args[i - 1] = arguments[i];
|
||
}
|
||
}
|
||
queue.push(new Item(fun, args));
|
||
if (queue.length === 1 && !draining) {
|
||
runTimeout(drainQueue);
|
||
}
|
||
};
|
||
|
||
// v8 likes predictible objects
|
||
function Item(fun, array) {
|
||
this.fun = fun;
|
||
this.array = array;
|
||
}
|
||
Item.prototype.run = function () {
|
||
this.fun.apply(null, this.array);
|
||
};
|
||
process.title = 'browser';
|
||
process.browser = true;
|
||
process.env = {};
|
||
process.argv = [];
|
||
process.version = ''; // empty string to avoid regexp issues
|
||
process.versions = {};
|
||
|
||
function noop() {}
|
||
|
||
process.on = noop;
|
||
process.addListener = noop;
|
||
process.once = noop;
|
||
process.off = noop;
|
||
process.removeListener = noop;
|
||
process.removeAllListeners = noop;
|
||
process.emit = noop;
|
||
process.prependListener = noop;
|
||
process.prependOnceListener = noop;
|
||
|
||
process.listeners = function (name) { return [] }
|
||
|
||
process.binding = function (name) {
|
||
throw new Error('process.binding is not supported');
|
||
};
|
||
|
||
process.cwd = function () { return '/' };
|
||
process.chdir = function (dir) {
|
||
throw new Error('process.chdir is not supported');
|
||
};
|
||
process.umask = function() { return 0; };
|
||
|
||
|
||
/***/ }),
|
||
/* 34 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/**
|
||
* Compiles a querystring
|
||
* Returns string representation of the object
|
||
*
|
||
* @param {Object}
|
||
* @api private
|
||
*/
|
||
|
||
exports.encode = function (obj) {
|
||
var str = '';
|
||
|
||
for (var i in obj) {
|
||
if (obj.hasOwnProperty(i)) {
|
||
if (str.length) str += '&';
|
||
str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);
|
||
}
|
||
}
|
||
|
||
return str;
|
||
};
|
||
|
||
/**
|
||
* Parses a simple querystring into an object
|
||
*
|
||
* @param {String} qs
|
||
* @api private
|
||
*/
|
||
|
||
exports.decode = function(qs){
|
||
var qry = {};
|
||
var pairs = qs.split('&');
|
||
for (var i = 0, l = pairs.length; i < l; i++) {
|
||
var pair = pairs[i].split('=');
|
||
qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
|
||
}
|
||
return qry;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 35 */
|
||
/***/ (function(module, exports) {
|
||
|
||
|
||
module.exports = function(a, b){
|
||
var fn = function(){};
|
||
fn.prototype = b.prototype;
|
||
a.prototype = new fn;
|
||
a.prototype.constructor = a;
|
||
};
|
||
|
||
/***/ }),
|
||
/* 36 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(process) {/**
|
||
* This is the web browser implementation of `debug()`.
|
||
*
|
||
* Expose `debug()` as the module.
|
||
*/
|
||
|
||
exports = module.exports = __webpack_require__(128);
|
||
exports.log = log;
|
||
exports.formatArgs = formatArgs;
|
||
exports.save = save;
|
||
exports.load = load;
|
||
exports.useColors = useColors;
|
||
exports.storage = 'undefined' != typeof chrome
|
||
&& 'undefined' != typeof chrome.storage
|
||
? chrome.storage.local
|
||
: localstorage();
|
||
|
||
/**
|
||
* Colors.
|
||
*/
|
||
|
||
exports.colors = [
|
||
'#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',
|
||
'#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',
|
||
'#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',
|
||
'#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',
|
||
'#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',
|
||
'#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',
|
||
'#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',
|
||
'#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',
|
||
'#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',
|
||
'#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',
|
||
'#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'
|
||
];
|
||
|
||
/**
|
||
* Currently only WebKit-based Web Inspectors, Firefox >= v31,
|
||
* and the Firebug extension (any Firefox version) are known
|
||
* to support "%c" CSS customizations.
|
||
*
|
||
* TODO: add a `localStorage` variable to explicitly enable/disable colors
|
||
*/
|
||
|
||
function useColors() {
|
||
// NB: In an Electron preload script, document will be defined but not fully
|
||
// initialized. Since we know we're in Chrome, we'll just detect this case
|
||
// explicitly
|
||
if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
|
||
return true;
|
||
}
|
||
|
||
// Internet Explorer and Edge do not support colors.
|
||
if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
|
||
return false;
|
||
}
|
||
|
||
// is webkit? http://stackoverflow.com/a/16459606/376773
|
||
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
|
||
return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
|
||
// is firebug? http://stackoverflow.com/a/398120/376773
|
||
(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
|
||
// is firefox >= v31?
|
||
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
|
||
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
|
||
// double check webkit in userAgent just in case we are in a worker
|
||
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
|
||
}
|
||
|
||
/**
|
||
* Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
|
||
*/
|
||
|
||
exports.formatters.j = function(v) {
|
||
try {
|
||
return JSON.stringify(v);
|
||
} catch (err) {
|
||
return '[UnexpectedJSONParseError]: ' + err.message;
|
||
}
|
||
};
|
||
|
||
|
||
/**
|
||
* Colorize log arguments if enabled.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
function formatArgs(args) {
|
||
var useColors = this.useColors;
|
||
|
||
args[0] = (useColors ? '%c' : '')
|
||
+ this.namespace
|
||
+ (useColors ? ' %c' : ' ')
|
||
+ args[0]
|
||
+ (useColors ? '%c ' : ' ')
|
||
+ '+' + exports.humanize(this.diff);
|
||
|
||
if (!useColors) return;
|
||
|
||
var c = 'color: ' + this.color;
|
||
args.splice(1, 0, c, 'color: inherit')
|
||
|
||
// the final "%c" is somewhat tricky, because there could be other
|
||
// arguments passed either before or after the %c, so we need to
|
||
// figure out the correct index to insert the CSS into
|
||
var index = 0;
|
||
var lastC = 0;
|
||
args[0].replace(/%[a-zA-Z%]/g, function(match) {
|
||
if ('%%' === match) return;
|
||
index++;
|
||
if ('%c' === match) {
|
||
// we only are interested in the *last* %c
|
||
// (the user may have provided their own)
|
||
lastC = index;
|
||
}
|
||
});
|
||
|
||
args.splice(lastC, 0, c);
|
||
}
|
||
|
||
/**
|
||
* Invokes `console.log()` when available.
|
||
* No-op when `console.log` is not a "function".
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
function log() {
|
||
// this hackery is required for IE8/9, where
|
||
// the `console.log` function doesn't have 'apply'
|
||
return 'object' === typeof console
|
||
&& console.log
|
||
&& Function.prototype.apply.call(console.log, console, arguments);
|
||
}
|
||
|
||
/**
|
||
* Save `namespaces`.
|
||
*
|
||
* @param {String} namespaces
|
||
* @api private
|
||
*/
|
||
|
||
function save(namespaces) {
|
||
try {
|
||
if (null == namespaces) {
|
||
exports.storage.removeItem('debug');
|
||
} else {
|
||
exports.storage.debug = namespaces;
|
||
}
|
||
} catch(e) {}
|
||
}
|
||
|
||
/**
|
||
* Load `namespaces`.
|
||
*
|
||
* @return {String} returns the previously persisted debug modes
|
||
* @api private
|
||
*/
|
||
|
||
function load() {
|
||
var r;
|
||
try {
|
||
r = exports.storage.debug;
|
||
} catch(e) {}
|
||
|
||
// If debug isn't set in LS, and we're in Electron, try to load $DEBUG
|
||
if (!r && typeof process !== 'undefined' && 'env' in process) {
|
||
r = process.env.DEBUG;
|
||
}
|
||
|
||
return r;
|
||
}
|
||
|
||
/**
|
||
* Enable namespaces listed in `localStorage.debug` initially.
|
||
*/
|
||
|
||
exports.enable(load());
|
||
|
||
/**
|
||
* Localstorage attempts to return the localstorage.
|
||
*
|
||
* This is necessary because safari throws
|
||
* when a user disables cookies/localstorage
|
||
* and you attempt to access it.
|
||
*
|
||
* @return {LocalStorage}
|
||
* @api private
|
||
*/
|
||
|
||
function localstorage() {
|
||
try {
|
||
return window.localStorage;
|
||
} catch (e) {}
|
||
}
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(33)))
|
||
|
||
/***/ }),
|
||
/* 37 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Observable_1 = __webpack_require__(1);
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
var Subscription_1 = __webpack_require__(12);
|
||
var ObjectUnsubscribedError_1 = __webpack_require__(73);
|
||
var SubjectSubscription_1 = __webpack_require__(134);
|
||
var rxSubscriber_1 = __webpack_require__(44);
|
||
/**
|
||
* @class SubjectSubscriber<T>
|
||
*/
|
||
var SubjectSubscriber = (function (_super) {
|
||
__extends(SubjectSubscriber, _super);
|
||
function SubjectSubscriber(destination) {
|
||
_super.call(this, destination);
|
||
this.destination = destination;
|
||
}
|
||
return SubjectSubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
exports.SubjectSubscriber = SubjectSubscriber;
|
||
/**
|
||
* @class Subject<T>
|
||
*/
|
||
var Subject = (function (_super) {
|
||
__extends(Subject, _super);
|
||
function Subject() {
|
||
_super.call(this);
|
||
this.observers = [];
|
||
this.closed = false;
|
||
this.isStopped = false;
|
||
this.hasError = false;
|
||
this.thrownError = null;
|
||
}
|
||
Subject.prototype[rxSubscriber_1.rxSubscriber] = function () {
|
||
return new SubjectSubscriber(this);
|
||
};
|
||
Subject.prototype.lift = function (operator) {
|
||
var subject = new AnonymousSubject(this, this);
|
||
subject.operator = operator;
|
||
return subject;
|
||
};
|
||
Subject.prototype.next = function (value) {
|
||
if (this.closed) {
|
||
throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
|
||
}
|
||
if (!this.isStopped) {
|
||
var observers = this.observers;
|
||
var len = observers.length;
|
||
var copy = observers.slice();
|
||
for (var i = 0; i < len; i++) {
|
||
copy[i].next(value);
|
||
}
|
||
}
|
||
};
|
||
Subject.prototype.error = function (err) {
|
||
if (this.closed) {
|
||
throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
|
||
}
|
||
this.hasError = true;
|
||
this.thrownError = err;
|
||
this.isStopped = true;
|
||
var observers = this.observers;
|
||
var len = observers.length;
|
||
var copy = observers.slice();
|
||
for (var i = 0; i < len; i++) {
|
||
copy[i].error(err);
|
||
}
|
||
this.observers.length = 0;
|
||
};
|
||
Subject.prototype.complete = function () {
|
||
if (this.closed) {
|
||
throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
|
||
}
|
||
this.isStopped = true;
|
||
var observers = this.observers;
|
||
var len = observers.length;
|
||
var copy = observers.slice();
|
||
for (var i = 0; i < len; i++) {
|
||
copy[i].complete();
|
||
}
|
||
this.observers.length = 0;
|
||
};
|
||
Subject.prototype.unsubscribe = function () {
|
||
this.isStopped = true;
|
||
this.closed = true;
|
||
this.observers = null;
|
||
};
|
||
Subject.prototype._trySubscribe = function (subscriber) {
|
||
if (this.closed) {
|
||
throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
|
||
}
|
||
else {
|
||
return _super.prototype._trySubscribe.call(this, subscriber);
|
||
}
|
||
};
|
||
/** @deprecated internal use only */ Subject.prototype._subscribe = function (subscriber) {
|
||
if (this.closed) {
|
||
throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
|
||
}
|
||
else if (this.hasError) {
|
||
subscriber.error(this.thrownError);
|
||
return Subscription_1.Subscription.EMPTY;
|
||
}
|
||
else if (this.isStopped) {
|
||
subscriber.complete();
|
||
return Subscription_1.Subscription.EMPTY;
|
||
}
|
||
else {
|
||
this.observers.push(subscriber);
|
||
return new SubjectSubscription_1.SubjectSubscription(this, subscriber);
|
||
}
|
||
};
|
||
Subject.prototype.asObservable = function () {
|
||
var observable = new Observable_1.Observable();
|
||
observable.source = this;
|
||
return observable;
|
||
};
|
||
Subject.create = function (destination, source) {
|
||
return new AnonymousSubject(destination, source);
|
||
};
|
||
return Subject;
|
||
}(Observable_1.Observable));
|
||
exports.Subject = Subject;
|
||
/**
|
||
* @class AnonymousSubject<T>
|
||
*/
|
||
var AnonymousSubject = (function (_super) {
|
||
__extends(AnonymousSubject, _super);
|
||
function AnonymousSubject(destination, source) {
|
||
_super.call(this);
|
||
this.destination = destination;
|
||
this.source = source;
|
||
}
|
||
AnonymousSubject.prototype.next = function (value) {
|
||
var destination = this.destination;
|
||
if (destination && destination.next) {
|
||
destination.next(value);
|
||
}
|
||
};
|
||
AnonymousSubject.prototype.error = function (err) {
|
||
var destination = this.destination;
|
||
if (destination && destination.error) {
|
||
this.destination.error(err);
|
||
}
|
||
};
|
||
AnonymousSubject.prototype.complete = function () {
|
||
var destination = this.destination;
|
||
if (destination && destination.complete) {
|
||
this.destination.complete();
|
||
}
|
||
};
|
||
/** @deprecated internal use only */ AnonymousSubject.prototype._subscribe = function (subscriber) {
|
||
var source = this.source;
|
||
if (source) {
|
||
return this.source.subscribe(subscriber);
|
||
}
|
||
else {
|
||
return Subscription_1.Subscription.EMPTY;
|
||
}
|
||
};
|
||
return AnonymousSubject;
|
||
}(Subject));
|
||
exports.AnonymousSubject = AnonymousSubject;
|
||
//# sourceMappingURL=Subject.js.map
|
||
|
||
/***/ }),
|
||
/* 38 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var Observable_1 = __webpack_require__(1);
|
||
var ArrayObservable_1 = __webpack_require__(23);
|
||
var isScheduler_1 = __webpack_require__(25);
|
||
var mergeAll_1 = __webpack_require__(55);
|
||
/* tslint:enable:max-line-length */
|
||
/**
|
||
* Creates an output Observable which concurrently emits all values from every
|
||
* given input Observable.
|
||
*
|
||
* <span class="informal">Flattens multiple Observables together by blending
|
||
* their values into one Observable.</span>
|
||
*
|
||
* <img src="./img/merge.png" width="100%">
|
||
*
|
||
* `merge` subscribes to each given input Observable (as arguments), and simply
|
||
* forwards (without doing any transformation) all the values from all the input
|
||
* Observables to the output Observable. The output Observable only completes
|
||
* once all input Observables have completed. Any error delivered by an input
|
||
* Observable will be immediately emitted on the output Observable.
|
||
*
|
||
* @example <caption>Merge together two Observables: 1s interval and clicks</caption>
|
||
* var clicks = Rx.Observable.fromEvent(document, 'click');
|
||
* var timer = Rx.Observable.interval(1000);
|
||
* var clicksOrTimer = Rx.Observable.merge(clicks, timer);
|
||
* clicksOrTimer.subscribe(x => console.log(x));
|
||
*
|
||
* // Results in the following:
|
||
* // timer will emit ascending values, one every second(1000ms) to console
|
||
* // clicks logs MouseEvents to console everytime the "document" is clicked
|
||
* // Since the two streams are merged you see these happening
|
||
* // as they occur.
|
||
*
|
||
* @example <caption>Merge together 3 Observables, but only 2 run concurrently</caption>
|
||
* var timer1 = Rx.Observable.interval(1000).take(10);
|
||
* var timer2 = Rx.Observable.interval(2000).take(6);
|
||
* var timer3 = Rx.Observable.interval(500).take(10);
|
||
* var concurrent = 2; // the argument
|
||
* var merged = Rx.Observable.merge(timer1, timer2, timer3, concurrent);
|
||
* merged.subscribe(x => console.log(x));
|
||
*
|
||
* // Results in the following:
|
||
* // - First timer1 and timer2 will run concurrently
|
||
* // - timer1 will emit a value every 1000ms for 10 iterations
|
||
* // - timer2 will emit a value every 2000ms for 6 iterations
|
||
* // - after timer1 hits it's max iteration, timer2 will
|
||
* // continue, and timer3 will start to run concurrently with timer2
|
||
* // - when timer2 hits it's max iteration it terminates, and
|
||
* // timer3 will continue to emit a value every 500ms until it is complete
|
||
*
|
||
* @see {@link mergeAll}
|
||
* @see {@link mergeMap}
|
||
* @see {@link mergeMapTo}
|
||
* @see {@link mergeScan}
|
||
*
|
||
* @param {...ObservableInput} observables Input Observables to merge together.
|
||
* @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
|
||
* Observables being subscribed to concurrently.
|
||
* @param {Scheduler} [scheduler=null] The IScheduler to use for managing
|
||
* concurrency of input Observables.
|
||
* @return {Observable} an Observable that emits items that are the result of
|
||
* every input Observable.
|
||
* @static true
|
||
* @name merge
|
||
* @owner Observable
|
||
*/
|
||
function merge() {
|
||
var observables = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
observables[_i - 0] = arguments[_i];
|
||
}
|
||
var concurrent = Number.POSITIVE_INFINITY;
|
||
var scheduler = null;
|
||
var last = observables[observables.length - 1];
|
||
if (isScheduler_1.isScheduler(last)) {
|
||
scheduler = observables.pop();
|
||
if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {
|
||
concurrent = observables.pop();
|
||
}
|
||
}
|
||
else if (typeof last === 'number') {
|
||
concurrent = observables.pop();
|
||
}
|
||
if (scheduler === null && observables.length === 1 && observables[0] instanceof Observable_1.Observable) {
|
||
return observables[0];
|
||
}
|
||
return mergeAll_1.mergeAll(concurrent)(new ArrayObservable_1.ArrayObservable(observables, scheduler));
|
||
}
|
||
exports.merge = merge;
|
||
//# sourceMappingURL=merge.js.map
|
||
|
||
/***/ }),
|
||
/* 39 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
/**
|
||
* Returns an Observable that skips the first `count` items emitted by the source Observable.
|
||
*
|
||
* <img src="./img/skip.png" width="100%">
|
||
*
|
||
* @param {Number} count - The number of times, items emitted by source Observable should be skipped.
|
||
* @return {Observable} An Observable that skips values emitted by the source Observable.
|
||
*
|
||
* @method skip
|
||
* @owner Observable
|
||
*/
|
||
function skip(count) {
|
||
return function (source) { return source.lift(new SkipOperator(count)); };
|
||
}
|
||
exports.skip = skip;
|
||
var SkipOperator = (function () {
|
||
function SkipOperator(total) {
|
||
this.total = total;
|
||
}
|
||
SkipOperator.prototype.call = function (subscriber, source) {
|
||
return source.subscribe(new SkipSubscriber(subscriber, this.total));
|
||
};
|
||
return SkipOperator;
|
||
}());
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var SkipSubscriber = (function (_super) {
|
||
__extends(SkipSubscriber, _super);
|
||
function SkipSubscriber(destination, total) {
|
||
_super.call(this, destination);
|
||
this.total = total;
|
||
this.count = 0;
|
||
}
|
||
SkipSubscriber.prototype._next = function (x) {
|
||
if (++this.count > this.total) {
|
||
this.destination.next(x);
|
||
}
|
||
};
|
||
return SkipSubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
//# sourceMappingURL=skip.js.map
|
||
|
||
/***/ }),
|
||
/* 40 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
var tryCatch_1 = __webpack_require__(43);
|
||
var errorObject_1 = __webpack_require__(27);
|
||
/* tslint:enable:max-line-length */
|
||
/**
|
||
* Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from the previous item.
|
||
*
|
||
* If a comparator function is provided, then it will be called for each item to test for whether or not that value should be emitted.
|
||
*
|
||
* If a comparator function is not provided, an equality check is used by default.
|
||
*
|
||
* @example <caption>A simple example with numbers</caption>
|
||
* Observable.of(1, 1, 2, 2, 2, 1, 1, 2, 3, 3, 4)
|
||
* .distinctUntilChanged()
|
||
* .subscribe(x => console.log(x)); // 1, 2, 1, 2, 3, 4
|
||
*
|
||
* @example <caption>An example using a compare function</caption>
|
||
* interface Person {
|
||
* age: number,
|
||
* name: string
|
||
* }
|
||
*
|
||
* Observable.of<Person>(
|
||
* { age: 4, name: 'Foo'},
|
||
* { age: 7, name: 'Bar'},
|
||
* { age: 5, name: 'Foo'})
|
||
* { age: 6, name: 'Foo'})
|
||
* .distinctUntilChanged((p: Person, q: Person) => p.name === q.name)
|
||
* .subscribe(x => console.log(x));
|
||
*
|
||
* // displays:
|
||
* // { age: 4, name: 'Foo' }
|
||
* // { age: 7, name: 'Bar' }
|
||
* // { age: 5, name: 'Foo' }
|
||
*
|
||
* @see {@link distinct}
|
||
* @see {@link distinctUntilKeyChanged}
|
||
*
|
||
* @param {function} [compare] Optional comparison function called to test if an item is distinct from the previous item in the source.
|
||
* @return {Observable} An Observable that emits items from the source Observable with distinct values.
|
||
* @method distinctUntilChanged
|
||
* @owner Observable
|
||
*/
|
||
function distinctUntilChanged(compare, keySelector) {
|
||
return function (source) { return source.lift(new DistinctUntilChangedOperator(compare, keySelector)); };
|
||
}
|
||
exports.distinctUntilChanged = distinctUntilChanged;
|
||
var DistinctUntilChangedOperator = (function () {
|
||
function DistinctUntilChangedOperator(compare, keySelector) {
|
||
this.compare = compare;
|
||
this.keySelector = keySelector;
|
||
}
|
||
DistinctUntilChangedOperator.prototype.call = function (subscriber, source) {
|
||
return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));
|
||
};
|
||
return DistinctUntilChangedOperator;
|
||
}());
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var DistinctUntilChangedSubscriber = (function (_super) {
|
||
__extends(DistinctUntilChangedSubscriber, _super);
|
||
function DistinctUntilChangedSubscriber(destination, compare, keySelector) {
|
||
_super.call(this, destination);
|
||
this.keySelector = keySelector;
|
||
this.hasKey = false;
|
||
if (typeof compare === 'function') {
|
||
this.compare = compare;
|
||
}
|
||
}
|
||
DistinctUntilChangedSubscriber.prototype.compare = function (x, y) {
|
||
return x === y;
|
||
};
|
||
DistinctUntilChangedSubscriber.prototype._next = function (value) {
|
||
var keySelector = this.keySelector;
|
||
var key = value;
|
||
if (keySelector) {
|
||
key = tryCatch_1.tryCatch(this.keySelector)(value);
|
||
if (key === errorObject_1.errorObject) {
|
||
return this.destination.error(errorObject_1.errorObject.e);
|
||
}
|
||
}
|
||
var result = false;
|
||
if (this.hasKey) {
|
||
result = tryCatch_1.tryCatch(this.compare)(this.key, key);
|
||
if (result === errorObject_1.errorObject) {
|
||
return this.destination.error(errorObject_1.errorObject.e);
|
||
}
|
||
}
|
||
else {
|
||
this.hasKey = true;
|
||
}
|
||
if (Boolean(result) === false) {
|
||
this.key = key;
|
||
this.destination.next(value);
|
||
}
|
||
};
|
||
return DistinctUntilChangedSubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
//# sourceMappingURL=distinctUntilChanged.js.map
|
||
|
||
/***/ }),
|
||
/* 41 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var FromEventObservable_1 = __webpack_require__(172);
|
||
exports.fromEvent = FromEventObservable_1.FromEventObservable.create;
|
||
//# sourceMappingURL=fromEvent.js.map
|
||
|
||
/***/ }),
|
||
/* 42 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
function isFunction(x) {
|
||
return typeof x === 'function';
|
||
}
|
||
exports.isFunction = isFunction;
|
||
//# sourceMappingURL=isFunction.js.map
|
||
|
||
/***/ }),
|
||
/* 43 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var errorObject_1 = __webpack_require__(27);
|
||
var tryCatchTarget;
|
||
function tryCatcher() {
|
||
try {
|
||
return tryCatchTarget.apply(this, arguments);
|
||
}
|
||
catch (e) {
|
||
errorObject_1.errorObject.e = e;
|
||
return errorObject_1.errorObject;
|
||
}
|
||
}
|
||
function tryCatch(fn) {
|
||
tryCatchTarget = fn;
|
||
return tryCatcher;
|
||
}
|
||
exports.tryCatch = tryCatch;
|
||
;
|
||
//# sourceMappingURL=tryCatch.js.map
|
||
|
||
/***/ }),
|
||
/* 44 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var root_1 = __webpack_require__(7);
|
||
var Symbol = root_1.root.Symbol;
|
||
exports.rxSubscriber = (typeof Symbol === 'function' && typeof Symbol.for === 'function') ?
|
||
Symbol.for('rxSubscriber') : '@@rxSubscriber';
|
||
/**
|
||
* @deprecated use rxSubscriber instead
|
||
*/
|
||
exports.$$rxSubscriber = exports.rxSubscriber;
|
||
//# sourceMappingURL=rxSubscriber.js.map
|
||
|
||
/***/ }),
|
||
/* 45 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var root_1 = __webpack_require__(7);
|
||
function getSymbolObservable(context) {
|
||
var $$observable;
|
||
var Symbol = context.Symbol;
|
||
if (typeof Symbol === 'function') {
|
||
if (Symbol.observable) {
|
||
$$observable = Symbol.observable;
|
||
}
|
||
else {
|
||
$$observable = Symbol('observable');
|
||
Symbol.observable = $$observable;
|
||
}
|
||
}
|
||
else {
|
||
$$observable = '@@observable';
|
||
}
|
||
return $$observable;
|
||
}
|
||
exports.getSymbolObservable = getSymbolObservable;
|
||
exports.observable = getSymbolObservable(root_1.root);
|
||
/**
|
||
* @deprecated use observable instead
|
||
*/
|
||
exports.$$observable = exports.observable;
|
||
//# sourceMappingURL=observable.js.map
|
||
|
||
/***/ }),
|
||
/* 46 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Observable_1 = __webpack_require__(1);
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @extends {Ignored}
|
||
* @hide true
|
||
*/
|
||
var ScalarObservable = (function (_super) {
|
||
__extends(ScalarObservable, _super);
|
||
function ScalarObservable(value, scheduler) {
|
||
_super.call(this);
|
||
this.value = value;
|
||
this.scheduler = scheduler;
|
||
this._isScalar = true;
|
||
if (scheduler) {
|
||
this._isScalar = false;
|
||
}
|
||
}
|
||
ScalarObservable.create = function (value, scheduler) {
|
||
return new ScalarObservable(value, scheduler);
|
||
};
|
||
ScalarObservable.dispatch = function (state) {
|
||
var done = state.done, value = state.value, subscriber = state.subscriber;
|
||
if (done) {
|
||
subscriber.complete();
|
||
return;
|
||
}
|
||
subscriber.next(value);
|
||
if (subscriber.closed) {
|
||
return;
|
||
}
|
||
state.done = true;
|
||
this.schedule(state);
|
||
};
|
||
/** @deprecated internal use only */ ScalarObservable.prototype._subscribe = function (subscriber) {
|
||
var value = this.value;
|
||
var scheduler = this.scheduler;
|
||
if (scheduler) {
|
||
return scheduler.schedule(ScalarObservable.dispatch, 0, {
|
||
done: false, value: value, subscriber: subscriber
|
||
});
|
||
}
|
||
else {
|
||
subscriber.next(value);
|
||
if (!subscriber.closed) {
|
||
subscriber.complete();
|
||
}
|
||
}
|
||
};
|
||
return ScalarObservable;
|
||
}(Observable_1.Observable));
|
||
exports.ScalarObservable = ScalarObservable;
|
||
//# sourceMappingURL=ScalarObservable.js.map
|
||
|
||
/***/ }),
|
||
/* 47 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/**
|
||
* Helpers.
|
||
*/
|
||
|
||
var s = 1000;
|
||
var m = s * 60;
|
||
var h = m * 60;
|
||
var d = h * 24;
|
||
var y = d * 365.25;
|
||
|
||
/**
|
||
* Parse or format the given `val`.
|
||
*
|
||
* Options:
|
||
*
|
||
* - `long` verbose formatting [false]
|
||
*
|
||
* @param {String|Number} val
|
||
* @param {Object} [options]
|
||
* @throws {Error} throw an error if val is not a non-empty string or a number
|
||
* @return {String|Number}
|
||
* @api public
|
||
*/
|
||
|
||
module.exports = function(val, options) {
|
||
options = options || {};
|
||
var type = typeof val;
|
||
if (type === 'string' && val.length > 0) {
|
||
return parse(val);
|
||
} else if (type === 'number' && isNaN(val) === false) {
|
||
return options.long ? fmtLong(val) : fmtShort(val);
|
||
}
|
||
throw new Error(
|
||
'val is not a non-empty string or a valid number. val=' +
|
||
JSON.stringify(val)
|
||
);
|
||
};
|
||
|
||
/**
|
||
* Parse the given `str` and return milliseconds.
|
||
*
|
||
* @param {String} str
|
||
* @return {Number}
|
||
* @api private
|
||
*/
|
||
|
||
function parse(str) {
|
||
str = String(str);
|
||
if (str.length > 100) {
|
||
return;
|
||
}
|
||
var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(
|
||
str
|
||
);
|
||
if (!match) {
|
||
return;
|
||
}
|
||
var n = parseFloat(match[1]);
|
||
var type = (match[2] || 'ms').toLowerCase();
|
||
switch (type) {
|
||
case 'years':
|
||
case 'year':
|
||
case 'yrs':
|
||
case 'yr':
|
||
case 'y':
|
||
return n * y;
|
||
case 'days':
|
||
case 'day':
|
||
case 'd':
|
||
return n * d;
|
||
case 'hours':
|
||
case 'hour':
|
||
case 'hrs':
|
||
case 'hr':
|
||
case 'h':
|
||
return n * h;
|
||
case 'minutes':
|
||
case 'minute':
|
||
case 'mins':
|
||
case 'min':
|
||
case 'm':
|
||
return n * m;
|
||
case 'seconds':
|
||
case 'second':
|
||
case 'secs':
|
||
case 'sec':
|
||
case 's':
|
||
return n * s;
|
||
case 'milliseconds':
|
||
case 'millisecond':
|
||
case 'msecs':
|
||
case 'msec':
|
||
case 'ms':
|
||
return n;
|
||
default:
|
||
return undefined;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Short format for `ms`.
|
||
*
|
||
* @param {Number} ms
|
||
* @return {String}
|
||
* @api private
|
||
*/
|
||
|
||
function fmtShort(ms) {
|
||
if (ms >= d) {
|
||
return Math.round(ms / d) + 'd';
|
||
}
|
||
if (ms >= h) {
|
||
return Math.round(ms / h) + 'h';
|
||
}
|
||
if (ms >= m) {
|
||
return Math.round(ms / m) + 'm';
|
||
}
|
||
if (ms >= s) {
|
||
return Math.round(ms / s) + 's';
|
||
}
|
||
return ms + 'ms';
|
||
}
|
||
|
||
/**
|
||
* Long format for `ms`.
|
||
*
|
||
* @param {Number} ms
|
||
* @return {String}
|
||
* @api private
|
||
*/
|
||
|
||
function fmtLong(ms) {
|
||
return plural(ms, d, 'day') ||
|
||
plural(ms, h, 'hour') ||
|
||
plural(ms, m, 'minute') ||
|
||
plural(ms, s, 'second') ||
|
||
ms + ' ms';
|
||
}
|
||
|
||
/**
|
||
* Pluralization helper.
|
||
*/
|
||
|
||
function plural(ms, n, name) {
|
||
if (ms < n) {
|
||
return;
|
||
}
|
||
if (ms < n * 1.5) {
|
||
return Math.floor(ms / n) + ' ' + name;
|
||
}
|
||
return Math.ceil(ms / n) + ' ' + name + 's';
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 48 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
|
||
/**
|
||
* Module dependencies.
|
||
*/
|
||
|
||
var debug = __webpack_require__(111)('socket.io-parser');
|
||
var Emitter = __webpack_require__(17);
|
||
var binary = __webpack_require__(113);
|
||
var isArray = __webpack_require__(62);
|
||
var isBuf = __webpack_require__(63);
|
||
|
||
/**
|
||
* Protocol version.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
exports.protocol = 4;
|
||
|
||
/**
|
||
* Packet types.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
exports.types = [
|
||
'CONNECT',
|
||
'DISCONNECT',
|
||
'EVENT',
|
||
'ACK',
|
||
'ERROR',
|
||
'BINARY_EVENT',
|
||
'BINARY_ACK'
|
||
];
|
||
|
||
/**
|
||
* Packet type `connect`.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
exports.CONNECT = 0;
|
||
|
||
/**
|
||
* Packet type `disconnect`.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
exports.DISCONNECT = 1;
|
||
|
||
/**
|
||
* Packet type `event`.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
exports.EVENT = 2;
|
||
|
||
/**
|
||
* Packet type `ack`.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
exports.ACK = 3;
|
||
|
||
/**
|
||
* Packet type `error`.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
exports.ERROR = 4;
|
||
|
||
/**
|
||
* Packet type 'binary event'
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
exports.BINARY_EVENT = 5;
|
||
|
||
/**
|
||
* Packet type `binary ack`. For acks with binary arguments.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
exports.BINARY_ACK = 6;
|
||
|
||
/**
|
||
* Encoder constructor.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
exports.Encoder = Encoder;
|
||
|
||
/**
|
||
* Decoder constructor.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
exports.Decoder = Decoder;
|
||
|
||
/**
|
||
* A socket.io Encoder instance
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
function Encoder() {}
|
||
|
||
var ERROR_PACKET = exports.ERROR + '"encode error"';
|
||
|
||
/**
|
||
* Encode a packet as a single string if non-binary, or as a
|
||
* buffer sequence, depending on packet type.
|
||
*
|
||
* @param {Object} obj - packet object
|
||
* @param {Function} callback - function to handle encodings (likely engine.write)
|
||
* @return Calls callback with Array of encodings
|
||
* @api public
|
||
*/
|
||
|
||
Encoder.prototype.encode = function(obj, callback){
|
||
debug('encoding packet %j', obj);
|
||
|
||
if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {
|
||
encodeAsBinary(obj, callback);
|
||
} else {
|
||
var encoding = encodeAsString(obj);
|
||
callback([encoding]);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Encode packet as string.
|
||
*
|
||
* @param {Object} packet
|
||
* @return {String} encoded
|
||
* @api private
|
||
*/
|
||
|
||
function encodeAsString(obj) {
|
||
|
||
// first is type
|
||
var str = '' + obj.type;
|
||
|
||
// attachments if we have them
|
||
if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {
|
||
str += obj.attachments + '-';
|
||
}
|
||
|
||
// if we have a namespace other than `/`
|
||
// we append it followed by a comma `,`
|
||
if (obj.nsp && '/' !== obj.nsp) {
|
||
str += obj.nsp + ',';
|
||
}
|
||
|
||
// immediately followed by the id
|
||
if (null != obj.id) {
|
||
str += obj.id;
|
||
}
|
||
|
||
// json data
|
||
if (null != obj.data) {
|
||
var payload = tryStringify(obj.data);
|
||
if (payload !== false) {
|
||
str += payload;
|
||
} else {
|
||
return ERROR_PACKET;
|
||
}
|
||
}
|
||
|
||
debug('encoded %j as %s', obj, str);
|
||
return str;
|
||
}
|
||
|
||
function tryStringify(str) {
|
||
try {
|
||
return JSON.stringify(str);
|
||
} catch(e){
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Encode packet as 'buffer sequence' by removing blobs, and
|
||
* deconstructing packet into object with placeholders and
|
||
* a list of buffers.
|
||
*
|
||
* @param {Object} packet
|
||
* @return {Buffer} encoded
|
||
* @api private
|
||
*/
|
||
|
||
function encodeAsBinary(obj, callback) {
|
||
|
||
function writeEncoding(bloblessData) {
|
||
var deconstruction = binary.deconstructPacket(bloblessData);
|
||
var pack = encodeAsString(deconstruction.packet);
|
||
var buffers = deconstruction.buffers;
|
||
|
||
buffers.unshift(pack); // add packet info to beginning of data list
|
||
callback(buffers); // write all the buffers
|
||
}
|
||
|
||
binary.removeBlobs(obj, writeEncoding);
|
||
}
|
||
|
||
/**
|
||
* A socket.io Decoder instance
|
||
*
|
||
* @return {Object} decoder
|
||
* @api public
|
||
*/
|
||
|
||
function Decoder() {
|
||
this.reconstructor = null;
|
||
}
|
||
|
||
/**
|
||
* Mix in `Emitter` with Decoder.
|
||
*/
|
||
|
||
Emitter(Decoder.prototype);
|
||
|
||
/**
|
||
* Decodes an encoded packet string into packet JSON.
|
||
*
|
||
* @param {String} obj - encoded packet
|
||
* @return {Object} packet
|
||
* @api public
|
||
*/
|
||
|
||
Decoder.prototype.add = function(obj) {
|
||
var packet;
|
||
if (typeof obj === 'string') {
|
||
packet = decodeString(obj);
|
||
if (exports.BINARY_EVENT === packet.type || exports.BINARY_ACK === packet.type) { // binary packet's json
|
||
this.reconstructor = new BinaryReconstructor(packet);
|
||
|
||
// no attachments, labeled binary but no binary data to follow
|
||
if (this.reconstructor.reconPack.attachments === 0) {
|
||
this.emit('decoded', packet);
|
||
}
|
||
} else { // non-binary full packet
|
||
this.emit('decoded', packet);
|
||
}
|
||
} else if (isBuf(obj) || obj.base64) { // raw binary data
|
||
if (!this.reconstructor) {
|
||
throw new Error('got binary data when not reconstructing a packet');
|
||
} else {
|
||
packet = this.reconstructor.takeBinaryData(obj);
|
||
if (packet) { // received final buffer
|
||
this.reconstructor = null;
|
||
this.emit('decoded', packet);
|
||
}
|
||
}
|
||
} else {
|
||
throw new Error('Unknown type: ' + obj);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Decode a packet String (JSON data)
|
||
*
|
||
* @param {String} str
|
||
* @return {Object} packet
|
||
* @api private
|
||
*/
|
||
|
||
function decodeString(str) {
|
||
var i = 0;
|
||
// look up type
|
||
var p = {
|
||
type: Number(str.charAt(0))
|
||
};
|
||
|
||
if (null == exports.types[p.type]) {
|
||
return error('unknown packet type ' + p.type);
|
||
}
|
||
|
||
// look up attachments if type binary
|
||
if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {
|
||
var buf = '';
|
||
while (str.charAt(++i) !== '-') {
|
||
buf += str.charAt(i);
|
||
if (i == str.length) break;
|
||
}
|
||
if (buf != Number(buf) || str.charAt(i) !== '-') {
|
||
throw new Error('Illegal attachments');
|
||
}
|
||
p.attachments = Number(buf);
|
||
}
|
||
|
||
// look up namespace (if any)
|
||
if ('/' === str.charAt(i + 1)) {
|
||
p.nsp = '';
|
||
while (++i) {
|
||
var c = str.charAt(i);
|
||
if (',' === c) break;
|
||
p.nsp += c;
|
||
if (i === str.length) break;
|
||
}
|
||
} else {
|
||
p.nsp = '/';
|
||
}
|
||
|
||
// look up id
|
||
var next = str.charAt(i + 1);
|
||
if ('' !== next && Number(next) == next) {
|
||
p.id = '';
|
||
while (++i) {
|
||
var c = str.charAt(i);
|
||
if (null == c || Number(c) != c) {
|
||
--i;
|
||
break;
|
||
}
|
||
p.id += str.charAt(i);
|
||
if (i === str.length) break;
|
||
}
|
||
p.id = Number(p.id);
|
||
}
|
||
|
||
// look up json data
|
||
if (str.charAt(++i)) {
|
||
var payload = tryParse(str.substr(i));
|
||
var isPayloadValid = payload !== false && (p.type === exports.ERROR || isArray(payload));
|
||
if (isPayloadValid) {
|
||
p.data = payload;
|
||
} else {
|
||
return error('invalid payload');
|
||
}
|
||
}
|
||
|
||
debug('decoded %s as %j', str, p);
|
||
return p;
|
||
}
|
||
|
||
function tryParse(str) {
|
||
try {
|
||
return JSON.parse(str);
|
||
} catch(e){
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Deallocates a parser's resources
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
Decoder.prototype.destroy = function() {
|
||
if (this.reconstructor) {
|
||
this.reconstructor.finishedReconstruction();
|
||
}
|
||
};
|
||
|
||
/**
|
||
* A manager of a binary event's 'buffer sequence'. Should
|
||
* be constructed whenever a packet of type BINARY_EVENT is
|
||
* decoded.
|
||
*
|
||
* @param {Object} packet
|
||
* @return {BinaryReconstructor} initialized reconstructor
|
||
* @api private
|
||
*/
|
||
|
||
function BinaryReconstructor(packet) {
|
||
this.reconPack = packet;
|
||
this.buffers = [];
|
||
}
|
||
|
||
/**
|
||
* Method to be called when binary data received from connection
|
||
* after a BINARY_EVENT packet.
|
||
*
|
||
* @param {Buffer | ArrayBuffer} binData - the raw binary data received
|
||
* @return {null | Object} returns null if more binary data is expected or
|
||
* a reconstructed packet object if all buffers have been received.
|
||
* @api private
|
||
*/
|
||
|
||
BinaryReconstructor.prototype.takeBinaryData = function(binData) {
|
||
this.buffers.push(binData);
|
||
if (this.buffers.length === this.reconPack.attachments) { // done with buffer list
|
||
var packet = binary.reconstructPacket(this.reconPack, this.buffers);
|
||
this.finishedReconstruction();
|
||
return packet;
|
||
}
|
||
return null;
|
||
};
|
||
|
||
/**
|
||
* Cleans up binary packet reconstruction variables.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
BinaryReconstructor.prototype.finishedReconstruction = function() {
|
||
this.reconPack = null;
|
||
this.buffers = [];
|
||
};
|
||
|
||
function error(msg) {
|
||
return {
|
||
type: exports.ERROR,
|
||
data: 'parser error: ' + msg
|
||
};
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 49 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* WEBPACK VAR INJECTION */(function(global) {/*!
|
||
* The buffer module from node.js, for the browser.
|
||
*
|
||
* @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
|
||
* @license MIT
|
||
*/
|
||
/* eslint-disable no-proto */
|
||
|
||
|
||
|
||
var base64 = __webpack_require__(114)
|
||
var ieee754 = __webpack_require__(115)
|
||
var isArray = __webpack_require__(116)
|
||
|
||
exports.Buffer = Buffer
|
||
exports.SlowBuffer = SlowBuffer
|
||
exports.INSPECT_MAX_BYTES = 50
|
||
|
||
/**
|
||
* If `Buffer.TYPED_ARRAY_SUPPORT`:
|
||
* === true Use Uint8Array implementation (fastest)
|
||
* === false Use Object implementation (most compatible, even IE6)
|
||
*
|
||
* Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
|
||
* Opera 11.6+, iOS 4.2+.
|
||
*
|
||
* Due to various browser bugs, sometimes the Object implementation will be used even
|
||
* when the browser supports typed arrays.
|
||
*
|
||
* Note:
|
||
*
|
||
* - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
|
||
* See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
|
||
*
|
||
* - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
|
||
*
|
||
* - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
|
||
* incorrect length in some situations.
|
||
|
||
* We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
|
||
* get the Object implementation, which is slower but behaves correctly.
|
||
*/
|
||
Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
|
||
? global.TYPED_ARRAY_SUPPORT
|
||
: typedArraySupport()
|
||
|
||
/*
|
||
* Export kMaxLength after typed array support is determined.
|
||
*/
|
||
exports.kMaxLength = kMaxLength()
|
||
|
||
function typedArraySupport () {
|
||
try {
|
||
var arr = new Uint8Array(1)
|
||
arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
|
||
return arr.foo() === 42 && // typed array instances can be augmented
|
||
typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
|
||
arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
|
||
} catch (e) {
|
||
return false
|
||
}
|
||
}
|
||
|
||
function kMaxLength () {
|
||
return Buffer.TYPED_ARRAY_SUPPORT
|
||
? 0x7fffffff
|
||
: 0x3fffffff
|
||
}
|
||
|
||
function createBuffer (that, length) {
|
||
if (kMaxLength() < length) {
|
||
throw new RangeError('Invalid typed array length')
|
||
}
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
// Return an augmented `Uint8Array` instance, for best performance
|
||
that = new Uint8Array(length)
|
||
that.__proto__ = Buffer.prototype
|
||
} else {
|
||
// Fallback: Return an object instance of the Buffer class
|
||
if (that === null) {
|
||
that = new Buffer(length)
|
||
}
|
||
that.length = length
|
||
}
|
||
|
||
return that
|
||
}
|
||
|
||
/**
|
||
* The Buffer constructor returns instances of `Uint8Array` that have their
|
||
* prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
|
||
* `Uint8Array`, so the returned instances will have all the node `Buffer` methods
|
||
* and the `Uint8Array` methods. Square bracket notation works as expected -- it
|
||
* returns a single octet.
|
||
*
|
||
* The `Uint8Array` prototype remains unmodified.
|
||
*/
|
||
|
||
function Buffer (arg, encodingOrOffset, length) {
|
||
if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
|
||
return new Buffer(arg, encodingOrOffset, length)
|
||
}
|
||
|
||
// Common case.
|
||
if (typeof arg === 'number') {
|
||
if (typeof encodingOrOffset === 'string') {
|
||
throw new Error(
|
||
'If encoding is specified then the first argument must be a string'
|
||
)
|
||
}
|
||
return allocUnsafe(this, arg)
|
||
}
|
||
return from(this, arg, encodingOrOffset, length)
|
||
}
|
||
|
||
Buffer.poolSize = 8192 // not used by this implementation
|
||
|
||
// TODO: Legacy, not needed anymore. Remove in next major version.
|
||
Buffer._augment = function (arr) {
|
||
arr.__proto__ = Buffer.prototype
|
||
return arr
|
||
}
|
||
|
||
function from (that, value, encodingOrOffset, length) {
|
||
if (typeof value === 'number') {
|
||
throw new TypeError('"value" argument must not be a number')
|
||
}
|
||
|
||
if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
|
||
return fromArrayBuffer(that, value, encodingOrOffset, length)
|
||
}
|
||
|
||
if (typeof value === 'string') {
|
||
return fromString(that, value, encodingOrOffset)
|
||
}
|
||
|
||
return fromObject(that, value)
|
||
}
|
||
|
||
/**
|
||
* Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
|
||
* if value is a number.
|
||
* Buffer.from(str[, encoding])
|
||
* Buffer.from(array)
|
||
* Buffer.from(buffer)
|
||
* Buffer.from(arrayBuffer[, byteOffset[, length]])
|
||
**/
|
||
Buffer.from = function (value, encodingOrOffset, length) {
|
||
return from(null, value, encodingOrOffset, length)
|
||
}
|
||
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
Buffer.prototype.__proto__ = Uint8Array.prototype
|
||
Buffer.__proto__ = Uint8Array
|
||
if (typeof Symbol !== 'undefined' && Symbol.species &&
|
||
Buffer[Symbol.species] === Buffer) {
|
||
// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
|
||
Object.defineProperty(Buffer, Symbol.species, {
|
||
value: null,
|
||
configurable: true
|
||
})
|
||
}
|
||
}
|
||
|
||
function assertSize (size) {
|
||
if (typeof size !== 'number') {
|
||
throw new TypeError('"size" argument must be a number')
|
||
} else if (size < 0) {
|
||
throw new RangeError('"size" argument must not be negative')
|
||
}
|
||
}
|
||
|
||
function alloc (that, size, fill, encoding) {
|
||
assertSize(size)
|
||
if (size <= 0) {
|
||
return createBuffer(that, size)
|
||
}
|
||
if (fill !== undefined) {
|
||
// Only pay attention to encoding if it's a string. This
|
||
// prevents accidentally sending in a number that would
|
||
// be interpretted as a start offset.
|
||
return typeof encoding === 'string'
|
||
? createBuffer(that, size).fill(fill, encoding)
|
||
: createBuffer(that, size).fill(fill)
|
||
}
|
||
return createBuffer(that, size)
|
||
}
|
||
|
||
/**
|
||
* Creates a new filled Buffer instance.
|
||
* alloc(size[, fill[, encoding]])
|
||
**/
|
||
Buffer.alloc = function (size, fill, encoding) {
|
||
return alloc(null, size, fill, encoding)
|
||
}
|
||
|
||
function allocUnsafe (that, size) {
|
||
assertSize(size)
|
||
that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
|
||
if (!Buffer.TYPED_ARRAY_SUPPORT) {
|
||
for (var i = 0; i < size; ++i) {
|
||
that[i] = 0
|
||
}
|
||
}
|
||
return that
|
||
}
|
||
|
||
/**
|
||
* Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
|
||
* */
|
||
Buffer.allocUnsafe = function (size) {
|
||
return allocUnsafe(null, size)
|
||
}
|
||
/**
|
||
* Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
|
||
*/
|
||
Buffer.allocUnsafeSlow = function (size) {
|
||
return allocUnsafe(null, size)
|
||
}
|
||
|
||
function fromString (that, string, encoding) {
|
||
if (typeof encoding !== 'string' || encoding === '') {
|
||
encoding = 'utf8'
|
||
}
|
||
|
||
if (!Buffer.isEncoding(encoding)) {
|
||
throw new TypeError('"encoding" must be a valid string encoding')
|
||
}
|
||
|
||
var length = byteLength(string, encoding) | 0
|
||
that = createBuffer(that, length)
|
||
|
||
var actual = that.write(string, encoding)
|
||
|
||
if (actual !== length) {
|
||
// Writing a hex string, for example, that contains invalid characters will
|
||
// cause everything after the first invalid character to be ignored. (e.g.
|
||
// 'abxxcd' will be treated as 'ab')
|
||
that = that.slice(0, actual)
|
||
}
|
||
|
||
return that
|
||
}
|
||
|
||
function fromArrayLike (that, array) {
|
||
var length = array.length < 0 ? 0 : checked(array.length) | 0
|
||
that = createBuffer(that, length)
|
||
for (var i = 0; i < length; i += 1) {
|
||
that[i] = array[i] & 255
|
||
}
|
||
return that
|
||
}
|
||
|
||
function fromArrayBuffer (that, array, byteOffset, length) {
|
||
array.byteLength // this throws if `array` is not a valid ArrayBuffer
|
||
|
||
if (byteOffset < 0 || array.byteLength < byteOffset) {
|
||
throw new RangeError('\'offset\' is out of bounds')
|
||
}
|
||
|
||
if (array.byteLength < byteOffset + (length || 0)) {
|
||
throw new RangeError('\'length\' is out of bounds')
|
||
}
|
||
|
||
if (byteOffset === undefined && length === undefined) {
|
||
array = new Uint8Array(array)
|
||
} else if (length === undefined) {
|
||
array = new Uint8Array(array, byteOffset)
|
||
} else {
|
||
array = new Uint8Array(array, byteOffset, length)
|
||
}
|
||
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
// Return an augmented `Uint8Array` instance, for best performance
|
||
that = array
|
||
that.__proto__ = Buffer.prototype
|
||
} else {
|
||
// Fallback: Return an object instance of the Buffer class
|
||
that = fromArrayLike(that, array)
|
||
}
|
||
return that
|
||
}
|
||
|
||
function fromObject (that, obj) {
|
||
if (Buffer.isBuffer(obj)) {
|
||
var len = checked(obj.length) | 0
|
||
that = createBuffer(that, len)
|
||
|
||
if (that.length === 0) {
|
||
return that
|
||
}
|
||
|
||
obj.copy(that, 0, 0, len)
|
||
return that
|
||
}
|
||
|
||
if (obj) {
|
||
if ((typeof ArrayBuffer !== 'undefined' &&
|
||
obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
|
||
if (typeof obj.length !== 'number' || isnan(obj.length)) {
|
||
return createBuffer(that, 0)
|
||
}
|
||
return fromArrayLike(that, obj)
|
||
}
|
||
|
||
if (obj.type === 'Buffer' && isArray(obj.data)) {
|
||
return fromArrayLike(that, obj.data)
|
||
}
|
||
}
|
||
|
||
throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
|
||
}
|
||
|
||
function checked (length) {
|
||
// Note: cannot use `length < kMaxLength()` here because that fails when
|
||
// length is NaN (which is otherwise coerced to zero.)
|
||
if (length >= kMaxLength()) {
|
||
throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
|
||
'size: 0x' + kMaxLength().toString(16) + ' bytes')
|
||
}
|
||
return length | 0
|
||
}
|
||
|
||
function SlowBuffer (length) {
|
||
if (+length != length) { // eslint-disable-line eqeqeq
|
||
length = 0
|
||
}
|
||
return Buffer.alloc(+length)
|
||
}
|
||
|
||
Buffer.isBuffer = function isBuffer (b) {
|
||
return !!(b != null && b._isBuffer)
|
||
}
|
||
|
||
Buffer.compare = function compare (a, b) {
|
||
if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
|
||
throw new TypeError('Arguments must be Buffers')
|
||
}
|
||
|
||
if (a === b) return 0
|
||
|
||
var x = a.length
|
||
var y = b.length
|
||
|
||
for (var i = 0, len = Math.min(x, y); i < len; ++i) {
|
||
if (a[i] !== b[i]) {
|
||
x = a[i]
|
||
y = b[i]
|
||
break
|
||
}
|
||
}
|
||
|
||
if (x < y) return -1
|
||
if (y < x) return 1
|
||
return 0
|
||
}
|
||
|
||
Buffer.isEncoding = function isEncoding (encoding) {
|
||
switch (String(encoding).toLowerCase()) {
|
||
case 'hex':
|
||
case 'utf8':
|
||
case 'utf-8':
|
||
case 'ascii':
|
||
case 'latin1':
|
||
case 'binary':
|
||
case 'base64':
|
||
case 'ucs2':
|
||
case 'ucs-2':
|
||
case 'utf16le':
|
||
case 'utf-16le':
|
||
return true
|
||
default:
|
||
return false
|
||
}
|
||
}
|
||
|
||
Buffer.concat = function concat (list, length) {
|
||
if (!isArray(list)) {
|
||
throw new TypeError('"list" argument must be an Array of Buffers')
|
||
}
|
||
|
||
if (list.length === 0) {
|
||
return Buffer.alloc(0)
|
||
}
|
||
|
||
var i
|
||
if (length === undefined) {
|
||
length = 0
|
||
for (i = 0; i < list.length; ++i) {
|
||
length += list[i].length
|
||
}
|
||
}
|
||
|
||
var buffer = Buffer.allocUnsafe(length)
|
||
var pos = 0
|
||
for (i = 0; i < list.length; ++i) {
|
||
var buf = list[i]
|
||
if (!Buffer.isBuffer(buf)) {
|
||
throw new TypeError('"list" argument must be an Array of Buffers')
|
||
}
|
||
buf.copy(buffer, pos)
|
||
pos += buf.length
|
||
}
|
||
return buffer
|
||
}
|
||
|
||
function byteLength (string, encoding) {
|
||
if (Buffer.isBuffer(string)) {
|
||
return string.length
|
||
}
|
||
if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
|
||
(ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
|
||
return string.byteLength
|
||
}
|
||
if (typeof string !== 'string') {
|
||
string = '' + string
|
||
}
|
||
|
||
var len = string.length
|
||
if (len === 0) return 0
|
||
|
||
// Use a for loop to avoid recursion
|
||
var loweredCase = false
|
||
for (;;) {
|
||
switch (encoding) {
|
||
case 'ascii':
|
||
case 'latin1':
|
||
case 'binary':
|
||
return len
|
||
case 'utf8':
|
||
case 'utf-8':
|
||
case undefined:
|
||
return utf8ToBytes(string).length
|
||
case 'ucs2':
|
||
case 'ucs-2':
|
||
case 'utf16le':
|
||
case 'utf-16le':
|
||
return len * 2
|
||
case 'hex':
|
||
return len >>> 1
|
||
case 'base64':
|
||
return base64ToBytes(string).length
|
||
default:
|
||
if (loweredCase) return utf8ToBytes(string).length // assume utf8
|
||
encoding = ('' + encoding).toLowerCase()
|
||
loweredCase = true
|
||
}
|
||
}
|
||
}
|
||
Buffer.byteLength = byteLength
|
||
|
||
function slowToString (encoding, start, end) {
|
||
var loweredCase = false
|
||
|
||
// No need to verify that "this.length <= MAX_UINT32" since it's a read-only
|
||
// property of a typed array.
|
||
|
||
// This behaves neither like String nor Uint8Array in that we set start/end
|
||
// to their upper/lower bounds if the value passed is out of range.
|
||
// undefined is handled specially as per ECMA-262 6th Edition,
|
||
// Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
|
||
if (start === undefined || start < 0) {
|
||
start = 0
|
||
}
|
||
// Return early if start > this.length. Done here to prevent potential uint32
|
||
// coercion fail below.
|
||
if (start > this.length) {
|
||
return ''
|
||
}
|
||
|
||
if (end === undefined || end > this.length) {
|
||
end = this.length
|
||
}
|
||
|
||
if (end <= 0) {
|
||
return ''
|
||
}
|
||
|
||
// Force coersion to uint32. This will also coerce falsey/NaN values to 0.
|
||
end >>>= 0
|
||
start >>>= 0
|
||
|
||
if (end <= start) {
|
||
return ''
|
||
}
|
||
|
||
if (!encoding) encoding = 'utf8'
|
||
|
||
while (true) {
|
||
switch (encoding) {
|
||
case 'hex':
|
||
return hexSlice(this, start, end)
|
||
|
||
case 'utf8':
|
||
case 'utf-8':
|
||
return utf8Slice(this, start, end)
|
||
|
||
case 'ascii':
|
||
return asciiSlice(this, start, end)
|
||
|
||
case 'latin1':
|
||
case 'binary':
|
||
return latin1Slice(this, start, end)
|
||
|
||
case 'base64':
|
||
return base64Slice(this, start, end)
|
||
|
||
case 'ucs2':
|
||
case 'ucs-2':
|
||
case 'utf16le':
|
||
case 'utf-16le':
|
||
return utf16leSlice(this, start, end)
|
||
|
||
default:
|
||
if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
|
||
encoding = (encoding + '').toLowerCase()
|
||
loweredCase = true
|
||
}
|
||
}
|
||
}
|
||
|
||
// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
|
||
// Buffer instances.
|
||
Buffer.prototype._isBuffer = true
|
||
|
||
function swap (b, n, m) {
|
||
var i = b[n]
|
||
b[n] = b[m]
|
||
b[m] = i
|
||
}
|
||
|
||
Buffer.prototype.swap16 = function swap16 () {
|
||
var len = this.length
|
||
if (len % 2 !== 0) {
|
||
throw new RangeError('Buffer size must be a multiple of 16-bits')
|
||
}
|
||
for (var i = 0; i < len; i += 2) {
|
||
swap(this, i, i + 1)
|
||
}
|
||
return this
|
||
}
|
||
|
||
Buffer.prototype.swap32 = function swap32 () {
|
||
var len = this.length
|
||
if (len % 4 !== 0) {
|
||
throw new RangeError('Buffer size must be a multiple of 32-bits')
|
||
}
|
||
for (var i = 0; i < len; i += 4) {
|
||
swap(this, i, i + 3)
|
||
swap(this, i + 1, i + 2)
|
||
}
|
||
return this
|
||
}
|
||
|
||
Buffer.prototype.swap64 = function swap64 () {
|
||
var len = this.length
|
||
if (len % 8 !== 0) {
|
||
throw new RangeError('Buffer size must be a multiple of 64-bits')
|
||
}
|
||
for (var i = 0; i < len; i += 8) {
|
||
swap(this, i, i + 7)
|
||
swap(this, i + 1, i + 6)
|
||
swap(this, i + 2, i + 5)
|
||
swap(this, i + 3, i + 4)
|
||
}
|
||
return this
|
||
}
|
||
|
||
Buffer.prototype.toString = function toString () {
|
||
var length = this.length | 0
|
||
if (length === 0) return ''
|
||
if (arguments.length === 0) return utf8Slice(this, 0, length)
|
||
return slowToString.apply(this, arguments)
|
||
}
|
||
|
||
Buffer.prototype.equals = function equals (b) {
|
||
if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
|
||
if (this === b) return true
|
||
return Buffer.compare(this, b) === 0
|
||
}
|
||
|
||
Buffer.prototype.inspect = function inspect () {
|
||
var str = ''
|
||
var max = exports.INSPECT_MAX_BYTES
|
||
if (this.length > 0) {
|
||
str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
|
||
if (this.length > max) str += ' ... '
|
||
}
|
||
return '<Buffer ' + str + '>'
|
||
}
|
||
|
||
Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
|
||
if (!Buffer.isBuffer(target)) {
|
||
throw new TypeError('Argument must be a Buffer')
|
||
}
|
||
|
||
if (start === undefined) {
|
||
start = 0
|
||
}
|
||
if (end === undefined) {
|
||
end = target ? target.length : 0
|
||
}
|
||
if (thisStart === undefined) {
|
||
thisStart = 0
|
||
}
|
||
if (thisEnd === undefined) {
|
||
thisEnd = this.length
|
||
}
|
||
|
||
if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
|
||
throw new RangeError('out of range index')
|
||
}
|
||
|
||
if (thisStart >= thisEnd && start >= end) {
|
||
return 0
|
||
}
|
||
if (thisStart >= thisEnd) {
|
||
return -1
|
||
}
|
||
if (start >= end) {
|
||
return 1
|
||
}
|
||
|
||
start >>>= 0
|
||
end >>>= 0
|
||
thisStart >>>= 0
|
||
thisEnd >>>= 0
|
||
|
||
if (this === target) return 0
|
||
|
||
var x = thisEnd - thisStart
|
||
var y = end - start
|
||
var len = Math.min(x, y)
|
||
|
||
var thisCopy = this.slice(thisStart, thisEnd)
|
||
var targetCopy = target.slice(start, end)
|
||
|
||
for (var i = 0; i < len; ++i) {
|
||
if (thisCopy[i] !== targetCopy[i]) {
|
||
x = thisCopy[i]
|
||
y = targetCopy[i]
|
||
break
|
||
}
|
||
}
|
||
|
||
if (x < y) return -1
|
||
if (y < x) return 1
|
||
return 0
|
||
}
|
||
|
||
// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
|
||
// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
|
||
//
|
||
// Arguments:
|
||
// - buffer - a Buffer to search
|
||
// - val - a string, Buffer, or number
|
||
// - byteOffset - an index into `buffer`; will be clamped to an int32
|
||
// - encoding - an optional encoding, relevant is val is a string
|
||
// - dir - true for indexOf, false for lastIndexOf
|
||
function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
|
||
// Empty buffer means no match
|
||
if (buffer.length === 0) return -1
|
||
|
||
// Normalize byteOffset
|
||
if (typeof byteOffset === 'string') {
|
||
encoding = byteOffset
|
||
byteOffset = 0
|
||
} else if (byteOffset > 0x7fffffff) {
|
||
byteOffset = 0x7fffffff
|
||
} else if (byteOffset < -0x80000000) {
|
||
byteOffset = -0x80000000
|
||
}
|
||
byteOffset = +byteOffset // Coerce to Number.
|
||
if (isNaN(byteOffset)) {
|
||
// byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
|
||
byteOffset = dir ? 0 : (buffer.length - 1)
|
||
}
|
||
|
||
// Normalize byteOffset: negative offsets start from the end of the buffer
|
||
if (byteOffset < 0) byteOffset = buffer.length + byteOffset
|
||
if (byteOffset >= buffer.length) {
|
||
if (dir) return -1
|
||
else byteOffset = buffer.length - 1
|
||
} else if (byteOffset < 0) {
|
||
if (dir) byteOffset = 0
|
||
else return -1
|
||
}
|
||
|
||
// Normalize val
|
||
if (typeof val === 'string') {
|
||
val = Buffer.from(val, encoding)
|
||
}
|
||
|
||
// Finally, search either indexOf (if dir is true) or lastIndexOf
|
||
if (Buffer.isBuffer(val)) {
|
||
// Special case: looking for empty string/buffer always fails
|
||
if (val.length === 0) {
|
||
return -1
|
||
}
|
||
return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
|
||
} else if (typeof val === 'number') {
|
||
val = val & 0xFF // Search for a byte value [0-255]
|
||
if (Buffer.TYPED_ARRAY_SUPPORT &&
|
||
typeof Uint8Array.prototype.indexOf === 'function') {
|
||
if (dir) {
|
||
return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
|
||
} else {
|
||
return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
|
||
}
|
||
}
|
||
return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
|
||
}
|
||
|
||
throw new TypeError('val must be string, number or Buffer')
|
||
}
|
||
|
||
function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
|
||
var indexSize = 1
|
||
var arrLength = arr.length
|
||
var valLength = val.length
|
||
|
||
if (encoding !== undefined) {
|
||
encoding = String(encoding).toLowerCase()
|
||
if (encoding === 'ucs2' || encoding === 'ucs-2' ||
|
||
encoding === 'utf16le' || encoding === 'utf-16le') {
|
||
if (arr.length < 2 || val.length < 2) {
|
||
return -1
|
||
}
|
||
indexSize = 2
|
||
arrLength /= 2
|
||
valLength /= 2
|
||
byteOffset /= 2
|
||
}
|
||
}
|
||
|
||
function read (buf, i) {
|
||
if (indexSize === 1) {
|
||
return buf[i]
|
||
} else {
|
||
return buf.readUInt16BE(i * indexSize)
|
||
}
|
||
}
|
||
|
||
var i
|
||
if (dir) {
|
||
var foundIndex = -1
|
||
for (i = byteOffset; i < arrLength; i++) {
|
||
if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
|
||
if (foundIndex === -1) foundIndex = i
|
||
if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
|
||
} else {
|
||
if (foundIndex !== -1) i -= i - foundIndex
|
||
foundIndex = -1
|
||
}
|
||
}
|
||
} else {
|
||
if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
|
||
for (i = byteOffset; i >= 0; i--) {
|
||
var found = true
|
||
for (var j = 0; j < valLength; j++) {
|
||
if (read(arr, i + j) !== read(val, j)) {
|
||
found = false
|
||
break
|
||
}
|
||
}
|
||
if (found) return i
|
||
}
|
||
}
|
||
|
||
return -1
|
||
}
|
||
|
||
Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
|
||
return this.indexOf(val, byteOffset, encoding) !== -1
|
||
}
|
||
|
||
Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
|
||
return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
|
||
}
|
||
|
||
Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
|
||
return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
|
||
}
|
||
|
||
function hexWrite (buf, string, offset, length) {
|
||
offset = Number(offset) || 0
|
||
var remaining = buf.length - offset
|
||
if (!length) {
|
||
length = remaining
|
||
} else {
|
||
length = Number(length)
|
||
if (length > remaining) {
|
||
length = remaining
|
||
}
|
||
}
|
||
|
||
// must be an even number of digits
|
||
var strLen = string.length
|
||
if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
|
||
|
||
if (length > strLen / 2) {
|
||
length = strLen / 2
|
||
}
|
||
for (var i = 0; i < length; ++i) {
|
||
var parsed = parseInt(string.substr(i * 2, 2), 16)
|
||
if (isNaN(parsed)) return i
|
||
buf[offset + i] = parsed
|
||
}
|
||
return i
|
||
}
|
||
|
||
function utf8Write (buf, string, offset, length) {
|
||
return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
|
||
}
|
||
|
||
function asciiWrite (buf, string, offset, length) {
|
||
return blitBuffer(asciiToBytes(string), buf, offset, length)
|
||
}
|
||
|
||
function latin1Write (buf, string, offset, length) {
|
||
return asciiWrite(buf, string, offset, length)
|
||
}
|
||
|
||
function base64Write (buf, string, offset, length) {
|
||
return blitBuffer(base64ToBytes(string), buf, offset, length)
|
||
}
|
||
|
||
function ucs2Write (buf, string, offset, length) {
|
||
return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
|
||
}
|
||
|
||
Buffer.prototype.write = function write (string, offset, length, encoding) {
|
||
// Buffer#write(string)
|
||
if (offset === undefined) {
|
||
encoding = 'utf8'
|
||
length = this.length
|
||
offset = 0
|
||
// Buffer#write(string, encoding)
|
||
} else if (length === undefined && typeof offset === 'string') {
|
||
encoding = offset
|
||
length = this.length
|
||
offset = 0
|
||
// Buffer#write(string, offset[, length][, encoding])
|
||
} else if (isFinite(offset)) {
|
||
offset = offset | 0
|
||
if (isFinite(length)) {
|
||
length = length | 0
|
||
if (encoding === undefined) encoding = 'utf8'
|
||
} else {
|
||
encoding = length
|
||
length = undefined
|
||
}
|
||
// legacy write(string, encoding, offset, length) - remove in v0.13
|
||
} else {
|
||
throw new Error(
|
||
'Buffer.write(string, encoding, offset[, length]) is no longer supported'
|
||
)
|
||
}
|
||
|
||
var remaining = this.length - offset
|
||
if (length === undefined || length > remaining) length = remaining
|
||
|
||
if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
|
||
throw new RangeError('Attempt to write outside buffer bounds')
|
||
}
|
||
|
||
if (!encoding) encoding = 'utf8'
|
||
|
||
var loweredCase = false
|
||
for (;;) {
|
||
switch (encoding) {
|
||
case 'hex':
|
||
return hexWrite(this, string, offset, length)
|
||
|
||
case 'utf8':
|
||
case 'utf-8':
|
||
return utf8Write(this, string, offset, length)
|
||
|
||
case 'ascii':
|
||
return asciiWrite(this, string, offset, length)
|
||
|
||
case 'latin1':
|
||
case 'binary':
|
||
return latin1Write(this, string, offset, length)
|
||
|
||
case 'base64':
|
||
// Warning: maxLength not taken into account in base64Write
|
||
return base64Write(this, string, offset, length)
|
||
|
||
case 'ucs2':
|
||
case 'ucs-2':
|
||
case 'utf16le':
|
||
case 'utf-16le':
|
||
return ucs2Write(this, string, offset, length)
|
||
|
||
default:
|
||
if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
|
||
encoding = ('' + encoding).toLowerCase()
|
||
loweredCase = true
|
||
}
|
||
}
|
||
}
|
||
|
||
Buffer.prototype.toJSON = function toJSON () {
|
||
return {
|
||
type: 'Buffer',
|
||
data: Array.prototype.slice.call(this._arr || this, 0)
|
||
}
|
||
}
|
||
|
||
function base64Slice (buf, start, end) {
|
||
if (start === 0 && end === buf.length) {
|
||
return base64.fromByteArray(buf)
|
||
} else {
|
||
return base64.fromByteArray(buf.slice(start, end))
|
||
}
|
||
}
|
||
|
||
function utf8Slice (buf, start, end) {
|
||
end = Math.min(buf.length, end)
|
||
var res = []
|
||
|
||
var i = start
|
||
while (i < end) {
|
||
var firstByte = buf[i]
|
||
var codePoint = null
|
||
var bytesPerSequence = (firstByte > 0xEF) ? 4
|
||
: (firstByte > 0xDF) ? 3
|
||
: (firstByte > 0xBF) ? 2
|
||
: 1
|
||
|
||
if (i + bytesPerSequence <= end) {
|
||
var secondByte, thirdByte, fourthByte, tempCodePoint
|
||
|
||
switch (bytesPerSequence) {
|
||
case 1:
|
||
if (firstByte < 0x80) {
|
||
codePoint = firstByte
|
||
}
|
||
break
|
||
case 2:
|
||
secondByte = buf[i + 1]
|
||
if ((secondByte & 0xC0) === 0x80) {
|
||
tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
|
||
if (tempCodePoint > 0x7F) {
|
||
codePoint = tempCodePoint
|
||
}
|
||
}
|
||
break
|
||
case 3:
|
||
secondByte = buf[i + 1]
|
||
thirdByte = buf[i + 2]
|
||
if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
|
||
tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
|
||
if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
|
||
codePoint = tempCodePoint
|
||
}
|
||
}
|
||
break
|
||
case 4:
|
||
secondByte = buf[i + 1]
|
||
thirdByte = buf[i + 2]
|
||
fourthByte = buf[i + 3]
|
||
if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
|
||
tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
|
||
if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
|
||
codePoint = tempCodePoint
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (codePoint === null) {
|
||
// we did not generate a valid codePoint so insert a
|
||
// replacement char (U+FFFD) and advance only 1 byte
|
||
codePoint = 0xFFFD
|
||
bytesPerSequence = 1
|
||
} else if (codePoint > 0xFFFF) {
|
||
// encode to utf16 (surrogate pair dance)
|
||
codePoint -= 0x10000
|
||
res.push(codePoint >>> 10 & 0x3FF | 0xD800)
|
||
codePoint = 0xDC00 | codePoint & 0x3FF
|
||
}
|
||
|
||
res.push(codePoint)
|
||
i += bytesPerSequence
|
||
}
|
||
|
||
return decodeCodePointsArray(res)
|
||
}
|
||
|
||
// Based on http://stackoverflow.com/a/22747272/680742, the browser with
|
||
// the lowest limit is Chrome, with 0x10000 args.
|
||
// We go 1 magnitude less, for safety
|
||
var MAX_ARGUMENTS_LENGTH = 0x1000
|
||
|
||
function decodeCodePointsArray (codePoints) {
|
||
var len = codePoints.length
|
||
if (len <= MAX_ARGUMENTS_LENGTH) {
|
||
return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
|
||
}
|
||
|
||
// Decode in chunks to avoid "call stack size exceeded".
|
||
var res = ''
|
||
var i = 0
|
||
while (i < len) {
|
||
res += String.fromCharCode.apply(
|
||
String,
|
||
codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
|
||
)
|
||
}
|
||
return res
|
||
}
|
||
|
||
function asciiSlice (buf, start, end) {
|
||
var ret = ''
|
||
end = Math.min(buf.length, end)
|
||
|
||
for (var i = start; i < end; ++i) {
|
||
ret += String.fromCharCode(buf[i] & 0x7F)
|
||
}
|
||
return ret
|
||
}
|
||
|
||
function latin1Slice (buf, start, end) {
|
||
var ret = ''
|
||
end = Math.min(buf.length, end)
|
||
|
||
for (var i = start; i < end; ++i) {
|
||
ret += String.fromCharCode(buf[i])
|
||
}
|
||
return ret
|
||
}
|
||
|
||
function hexSlice (buf, start, end) {
|
||
var len = buf.length
|
||
|
||
if (!start || start < 0) start = 0
|
||
if (!end || end < 0 || end > len) end = len
|
||
|
||
var out = ''
|
||
for (var i = start; i < end; ++i) {
|
||
out += toHex(buf[i])
|
||
}
|
||
return out
|
||
}
|
||
|
||
function utf16leSlice (buf, start, end) {
|
||
var bytes = buf.slice(start, end)
|
||
var res = ''
|
||
for (var i = 0; i < bytes.length; i += 2) {
|
||
res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
|
||
}
|
||
return res
|
||
}
|
||
|
||
Buffer.prototype.slice = function slice (start, end) {
|
||
var len = this.length
|
||
start = ~~start
|
||
end = end === undefined ? len : ~~end
|
||
|
||
if (start < 0) {
|
||
start += len
|
||
if (start < 0) start = 0
|
||
} else if (start > len) {
|
||
start = len
|
||
}
|
||
|
||
if (end < 0) {
|
||
end += len
|
||
if (end < 0) end = 0
|
||
} else if (end > len) {
|
||
end = len
|
||
}
|
||
|
||
if (end < start) end = start
|
||
|
||
var newBuf
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
newBuf = this.subarray(start, end)
|
||
newBuf.__proto__ = Buffer.prototype
|
||
} else {
|
||
var sliceLen = end - start
|
||
newBuf = new Buffer(sliceLen, undefined)
|
||
for (var i = 0; i < sliceLen; ++i) {
|
||
newBuf[i] = this[i + start]
|
||
}
|
||
}
|
||
|
||
return newBuf
|
||
}
|
||
|
||
/*
|
||
* Need to make sure that buffer isn't trying to write out of bounds.
|
||
*/
|
||
function checkOffset (offset, ext, length) {
|
||
if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
|
||
if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
|
||
}
|
||
|
||
Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
|
||
offset = offset | 0
|
||
byteLength = byteLength | 0
|
||
if (!noAssert) checkOffset(offset, byteLength, this.length)
|
||
|
||
var val = this[offset]
|
||
var mul = 1
|
||
var i = 0
|
||
while (++i < byteLength && (mul *= 0x100)) {
|
||
val += this[offset + i] * mul
|
||
}
|
||
|
||
return val
|
||
}
|
||
|
||
Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
|
||
offset = offset | 0
|
||
byteLength = byteLength | 0
|
||
if (!noAssert) {
|
||
checkOffset(offset, byteLength, this.length)
|
||
}
|
||
|
||
var val = this[offset + --byteLength]
|
||
var mul = 1
|
||
while (byteLength > 0 && (mul *= 0x100)) {
|
||
val += this[offset + --byteLength] * mul
|
||
}
|
||
|
||
return val
|
||
}
|
||
|
||
Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 1, this.length)
|
||
return this[offset]
|
||
}
|
||
|
||
Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 2, this.length)
|
||
return this[offset] | (this[offset + 1] << 8)
|
||
}
|
||
|
||
Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 2, this.length)
|
||
return (this[offset] << 8) | this[offset + 1]
|
||
}
|
||
|
||
Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 4, this.length)
|
||
|
||
return ((this[offset]) |
|
||
(this[offset + 1] << 8) |
|
||
(this[offset + 2] << 16)) +
|
||
(this[offset + 3] * 0x1000000)
|
||
}
|
||
|
||
Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 4, this.length)
|
||
|
||
return (this[offset] * 0x1000000) +
|
||
((this[offset + 1] << 16) |
|
||
(this[offset + 2] << 8) |
|
||
this[offset + 3])
|
||
}
|
||
|
||
Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
|
||
offset = offset | 0
|
||
byteLength = byteLength | 0
|
||
if (!noAssert) checkOffset(offset, byteLength, this.length)
|
||
|
||
var val = this[offset]
|
||
var mul = 1
|
||
var i = 0
|
||
while (++i < byteLength && (mul *= 0x100)) {
|
||
val += this[offset + i] * mul
|
||
}
|
||
mul *= 0x80
|
||
|
||
if (val >= mul) val -= Math.pow(2, 8 * byteLength)
|
||
|
||
return val
|
||
}
|
||
|
||
Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
|
||
offset = offset | 0
|
||
byteLength = byteLength | 0
|
||
if (!noAssert) checkOffset(offset, byteLength, this.length)
|
||
|
||
var i = byteLength
|
||
var mul = 1
|
||
var val = this[offset + --i]
|
||
while (i > 0 && (mul *= 0x100)) {
|
||
val += this[offset + --i] * mul
|
||
}
|
||
mul *= 0x80
|
||
|
||
if (val >= mul) val -= Math.pow(2, 8 * byteLength)
|
||
|
||
return val
|
||
}
|
||
|
||
Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 1, this.length)
|
||
if (!(this[offset] & 0x80)) return (this[offset])
|
||
return ((0xff - this[offset] + 1) * -1)
|
||
}
|
||
|
||
Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 2, this.length)
|
||
var val = this[offset] | (this[offset + 1] << 8)
|
||
return (val & 0x8000) ? val | 0xFFFF0000 : val
|
||
}
|
||
|
||
Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 2, this.length)
|
||
var val = this[offset + 1] | (this[offset] << 8)
|
||
return (val & 0x8000) ? val | 0xFFFF0000 : val
|
||
}
|
||
|
||
Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 4, this.length)
|
||
|
||
return (this[offset]) |
|
||
(this[offset + 1] << 8) |
|
||
(this[offset + 2] << 16) |
|
||
(this[offset + 3] << 24)
|
||
}
|
||
|
||
Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 4, this.length)
|
||
|
||
return (this[offset] << 24) |
|
||
(this[offset + 1] << 16) |
|
||
(this[offset + 2] << 8) |
|
||
(this[offset + 3])
|
||
}
|
||
|
||
Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 4, this.length)
|
||
return ieee754.read(this, offset, true, 23, 4)
|
||
}
|
||
|
||
Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 4, this.length)
|
||
return ieee754.read(this, offset, false, 23, 4)
|
||
}
|
||
|
||
Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 8, this.length)
|
||
return ieee754.read(this, offset, true, 52, 8)
|
||
}
|
||
|
||
Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
|
||
if (!noAssert) checkOffset(offset, 8, this.length)
|
||
return ieee754.read(this, offset, false, 52, 8)
|
||
}
|
||
|
||
function checkInt (buf, value, offset, ext, max, min) {
|
||
if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
|
||
if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
|
||
if (offset + ext > buf.length) throw new RangeError('Index out of range')
|
||
}
|
||
|
||
Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
byteLength = byteLength | 0
|
||
if (!noAssert) {
|
||
var maxBytes = Math.pow(2, 8 * byteLength) - 1
|
||
checkInt(this, value, offset, byteLength, maxBytes, 0)
|
||
}
|
||
|
||
var mul = 1
|
||
var i = 0
|
||
this[offset] = value & 0xFF
|
||
while (++i < byteLength && (mul *= 0x100)) {
|
||
this[offset + i] = (value / mul) & 0xFF
|
||
}
|
||
|
||
return offset + byteLength
|
||
}
|
||
|
||
Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
byteLength = byteLength | 0
|
||
if (!noAssert) {
|
||
var maxBytes = Math.pow(2, 8 * byteLength) - 1
|
||
checkInt(this, value, offset, byteLength, maxBytes, 0)
|
||
}
|
||
|
||
var i = byteLength - 1
|
||
var mul = 1
|
||
this[offset + i] = value & 0xFF
|
||
while (--i >= 0 && (mul *= 0x100)) {
|
||
this[offset + i] = (value / mul) & 0xFF
|
||
}
|
||
|
||
return offset + byteLength
|
||
}
|
||
|
||
Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
|
||
if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
|
||
this[offset] = (value & 0xff)
|
||
return offset + 1
|
||
}
|
||
|
||
function objectWriteUInt16 (buf, value, offset, littleEndian) {
|
||
if (value < 0) value = 0xffff + value + 1
|
||
for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
|
||
buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
|
||
(littleEndian ? i : 1 - i) * 8
|
||
}
|
||
}
|
||
|
||
Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset] = (value & 0xff)
|
||
this[offset + 1] = (value >>> 8)
|
||
} else {
|
||
objectWriteUInt16(this, value, offset, true)
|
||
}
|
||
return offset + 2
|
||
}
|
||
|
||
Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset] = (value >>> 8)
|
||
this[offset + 1] = (value & 0xff)
|
||
} else {
|
||
objectWriteUInt16(this, value, offset, false)
|
||
}
|
||
return offset + 2
|
||
}
|
||
|
||
function objectWriteUInt32 (buf, value, offset, littleEndian) {
|
||
if (value < 0) value = 0xffffffff + value + 1
|
||
for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
|
||
buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
|
||
}
|
||
}
|
||
|
||
Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset + 3] = (value >>> 24)
|
||
this[offset + 2] = (value >>> 16)
|
||
this[offset + 1] = (value >>> 8)
|
||
this[offset] = (value & 0xff)
|
||
} else {
|
||
objectWriteUInt32(this, value, offset, true)
|
||
}
|
||
return offset + 4
|
||
}
|
||
|
||
Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset] = (value >>> 24)
|
||
this[offset + 1] = (value >>> 16)
|
||
this[offset + 2] = (value >>> 8)
|
||
this[offset + 3] = (value & 0xff)
|
||
} else {
|
||
objectWriteUInt32(this, value, offset, false)
|
||
}
|
||
return offset + 4
|
||
}
|
||
|
||
Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) {
|
||
var limit = Math.pow(2, 8 * byteLength - 1)
|
||
|
||
checkInt(this, value, offset, byteLength, limit - 1, -limit)
|
||
}
|
||
|
||
var i = 0
|
||
var mul = 1
|
||
var sub = 0
|
||
this[offset] = value & 0xFF
|
||
while (++i < byteLength && (mul *= 0x100)) {
|
||
if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
|
||
sub = 1
|
||
}
|
||
this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
|
||
}
|
||
|
||
return offset + byteLength
|
||
}
|
||
|
||
Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) {
|
||
var limit = Math.pow(2, 8 * byteLength - 1)
|
||
|
||
checkInt(this, value, offset, byteLength, limit - 1, -limit)
|
||
}
|
||
|
||
var i = byteLength - 1
|
||
var mul = 1
|
||
var sub = 0
|
||
this[offset + i] = value & 0xFF
|
||
while (--i >= 0 && (mul *= 0x100)) {
|
||
if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
|
||
sub = 1
|
||
}
|
||
this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
|
||
}
|
||
|
||
return offset + byteLength
|
||
}
|
||
|
||
Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
|
||
if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
|
||
if (value < 0) value = 0xff + value + 1
|
||
this[offset] = (value & 0xff)
|
||
return offset + 1
|
||
}
|
||
|
||
Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset] = (value & 0xff)
|
||
this[offset + 1] = (value >>> 8)
|
||
} else {
|
||
objectWriteUInt16(this, value, offset, true)
|
||
}
|
||
return offset + 2
|
||
}
|
||
|
||
Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset] = (value >>> 8)
|
||
this[offset + 1] = (value & 0xff)
|
||
} else {
|
||
objectWriteUInt16(this, value, offset, false)
|
||
}
|
||
return offset + 2
|
||
}
|
||
|
||
Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset] = (value & 0xff)
|
||
this[offset + 1] = (value >>> 8)
|
||
this[offset + 2] = (value >>> 16)
|
||
this[offset + 3] = (value >>> 24)
|
||
} else {
|
||
objectWriteUInt32(this, value, offset, true)
|
||
}
|
||
return offset + 4
|
||
}
|
||
|
||
Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
|
||
value = +value
|
||
offset = offset | 0
|
||
if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
|
||
if (value < 0) value = 0xffffffff + value + 1
|
||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||
this[offset] = (value >>> 24)
|
||
this[offset + 1] = (value >>> 16)
|
||
this[offset + 2] = (value >>> 8)
|
||
this[offset + 3] = (value & 0xff)
|
||
} else {
|
||
objectWriteUInt32(this, value, offset, false)
|
||
}
|
||
return offset + 4
|
||
}
|
||
|
||
function checkIEEE754 (buf, value, offset, ext, max, min) {
|
||
if (offset + ext > buf.length) throw new RangeError('Index out of range')
|
||
if (offset < 0) throw new RangeError('Index out of range')
|
||
}
|
||
|
||
function writeFloat (buf, value, offset, littleEndian, noAssert) {
|
||
if (!noAssert) {
|
||
checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
|
||
}
|
||
ieee754.write(buf, value, offset, littleEndian, 23, 4)
|
||
return offset + 4
|
||
}
|
||
|
||
Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
|
||
return writeFloat(this, value, offset, true, noAssert)
|
||
}
|
||
|
||
Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
|
||
return writeFloat(this, value, offset, false, noAssert)
|
||
}
|
||
|
||
function writeDouble (buf, value, offset, littleEndian, noAssert) {
|
||
if (!noAssert) {
|
||
checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
|
||
}
|
||
ieee754.write(buf, value, offset, littleEndian, 52, 8)
|
||
return offset + 8
|
||
}
|
||
|
||
Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
|
||
return writeDouble(this, value, offset, true, noAssert)
|
||
}
|
||
|
||
Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
|
||
return writeDouble(this, value, offset, false, noAssert)
|
||
}
|
||
|
||
// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
|
||
Buffer.prototype.copy = function copy (target, targetStart, start, end) {
|
||
if (!start) start = 0
|
||
if (!end && end !== 0) end = this.length
|
||
if (targetStart >= target.length) targetStart = target.length
|
||
if (!targetStart) targetStart = 0
|
||
if (end > 0 && end < start) end = start
|
||
|
||
// Copy 0 bytes; we're done
|
||
if (end === start) return 0
|
||
if (target.length === 0 || this.length === 0) return 0
|
||
|
||
// Fatal error conditions
|
||
if (targetStart < 0) {
|
||
throw new RangeError('targetStart out of bounds')
|
||
}
|
||
if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
|
||
if (end < 0) throw new RangeError('sourceEnd out of bounds')
|
||
|
||
// Are we oob?
|
||
if (end > this.length) end = this.length
|
||
if (target.length - targetStart < end - start) {
|
||
end = target.length - targetStart + start
|
||
}
|
||
|
||
var len = end - start
|
||
var i
|
||
|
||
if (this === target && start < targetStart && targetStart < end) {
|
||
// descending copy from end
|
||
for (i = len - 1; i >= 0; --i) {
|
||
target[i + targetStart] = this[i + start]
|
||
}
|
||
} else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
|
||
// ascending copy from start
|
||
for (i = 0; i < len; ++i) {
|
||
target[i + targetStart] = this[i + start]
|
||
}
|
||
} else {
|
||
Uint8Array.prototype.set.call(
|
||
target,
|
||
this.subarray(start, start + len),
|
||
targetStart
|
||
)
|
||
}
|
||
|
||
return len
|
||
}
|
||
|
||
// Usage:
|
||
// buffer.fill(number[, offset[, end]])
|
||
// buffer.fill(buffer[, offset[, end]])
|
||
// buffer.fill(string[, offset[, end]][, encoding])
|
||
Buffer.prototype.fill = function fill (val, start, end, encoding) {
|
||
// Handle string cases:
|
||
if (typeof val === 'string') {
|
||
if (typeof start === 'string') {
|
||
encoding = start
|
||
start = 0
|
||
end = this.length
|
||
} else if (typeof end === 'string') {
|
||
encoding = end
|
||
end = this.length
|
||
}
|
||
if (val.length === 1) {
|
||
var code = val.charCodeAt(0)
|
||
if (code < 256) {
|
||
val = code
|
||
}
|
||
}
|
||
if (encoding !== undefined && typeof encoding !== 'string') {
|
||
throw new TypeError('encoding must be a string')
|
||
}
|
||
if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
|
||
throw new TypeError('Unknown encoding: ' + encoding)
|
||
}
|
||
} else if (typeof val === 'number') {
|
||
val = val & 255
|
||
}
|
||
|
||
// Invalid ranges are not set to a default, so can range check early.
|
||
if (start < 0 || this.length < start || this.length < end) {
|
||
throw new RangeError('Out of range index')
|
||
}
|
||
|
||
if (end <= start) {
|
||
return this
|
||
}
|
||
|
||
start = start >>> 0
|
||
end = end === undefined ? this.length : end >>> 0
|
||
|
||
if (!val) val = 0
|
||
|
||
var i
|
||
if (typeof val === 'number') {
|
||
for (i = start; i < end; ++i) {
|
||
this[i] = val
|
||
}
|
||
} else {
|
||
var bytes = Buffer.isBuffer(val)
|
||
? val
|
||
: utf8ToBytes(new Buffer(val, encoding).toString())
|
||
var len = bytes.length
|
||
for (i = 0; i < end - start; ++i) {
|
||
this[i + start] = bytes[i % len]
|
||
}
|
||
}
|
||
|
||
return this
|
||
}
|
||
|
||
// HELPER FUNCTIONS
|
||
// ================
|
||
|
||
var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
|
||
|
||
function base64clean (str) {
|
||
// Node strips out invalid characters like \n and \t from the string, base64-js does not
|
||
str = stringtrim(str).replace(INVALID_BASE64_RE, '')
|
||
// Node converts strings with length < 2 to ''
|
||
if (str.length < 2) return ''
|
||
// Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
|
||
while (str.length % 4 !== 0) {
|
||
str = str + '='
|
||
}
|
||
return str
|
||
}
|
||
|
||
function stringtrim (str) {
|
||
if (str.trim) return str.trim()
|
||
return str.replace(/^\s+|\s+$/g, '')
|
||
}
|
||
|
||
function toHex (n) {
|
||
if (n < 16) return '0' + n.toString(16)
|
||
return n.toString(16)
|
||
}
|
||
|
||
function utf8ToBytes (string, units) {
|
||
units = units || Infinity
|
||
var codePoint
|
||
var length = string.length
|
||
var leadSurrogate = null
|
||
var bytes = []
|
||
|
||
for (var i = 0; i < length; ++i) {
|
||
codePoint = string.charCodeAt(i)
|
||
|
||
// is surrogate component
|
||
if (codePoint > 0xD7FF && codePoint < 0xE000) {
|
||
// last char was a lead
|
||
if (!leadSurrogate) {
|
||
// no lead yet
|
||
if (codePoint > 0xDBFF) {
|
||
// unexpected trail
|
||
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
|
||
continue
|
||
} else if (i + 1 === length) {
|
||
// unpaired lead
|
||
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
|
||
continue
|
||
}
|
||
|
||
// valid lead
|
||
leadSurrogate = codePoint
|
||
|
||
continue
|
||
}
|
||
|
||
// 2 leads in a row
|
||
if (codePoint < 0xDC00) {
|
||
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
|
||
leadSurrogate = codePoint
|
||
continue
|
||
}
|
||
|
||
// valid surrogate pair
|
||
codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
|
||
} else if (leadSurrogate) {
|
||
// valid bmp char, but last char was a lead
|
||
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
|
||
}
|
||
|
||
leadSurrogate = null
|
||
|
||
// encode utf8
|
||
if (codePoint < 0x80) {
|
||
if ((units -= 1) < 0) break
|
||
bytes.push(codePoint)
|
||
} else if (codePoint < 0x800) {
|
||
if ((units -= 2) < 0) break
|
||
bytes.push(
|
||
codePoint >> 0x6 | 0xC0,
|
||
codePoint & 0x3F | 0x80
|
||
)
|
||
} else if (codePoint < 0x10000) {
|
||
if ((units -= 3) < 0) break
|
||
bytes.push(
|
||
codePoint >> 0xC | 0xE0,
|
||
codePoint >> 0x6 & 0x3F | 0x80,
|
||
codePoint & 0x3F | 0x80
|
||
)
|
||
} else if (codePoint < 0x110000) {
|
||
if ((units -= 4) < 0) break
|
||
bytes.push(
|
||
codePoint >> 0x12 | 0xF0,
|
||
codePoint >> 0xC & 0x3F | 0x80,
|
||
codePoint >> 0x6 & 0x3F | 0x80,
|
||
codePoint & 0x3F | 0x80
|
||
)
|
||
} else {
|
||
throw new Error('Invalid code point')
|
||
}
|
||
}
|
||
|
||
return bytes
|
||
}
|
||
|
||
function asciiToBytes (str) {
|
||
var byteArray = []
|
||
for (var i = 0; i < str.length; ++i) {
|
||
// Node's code seems to be doing this and not & 0x7F..
|
||
byteArray.push(str.charCodeAt(i) & 0xFF)
|
||
}
|
||
return byteArray
|
||
}
|
||
|
||
function utf16leToBytes (str, units) {
|
||
var c, hi, lo
|
||
var byteArray = []
|
||
for (var i = 0; i < str.length; ++i) {
|
||
if ((units -= 2) < 0) break
|
||
|
||
c = str.charCodeAt(i)
|
||
hi = c >> 8
|
||
lo = c % 256
|
||
byteArray.push(lo)
|
||
byteArray.push(hi)
|
||
}
|
||
|
||
return byteArray
|
||
}
|
||
|
||
function base64ToBytes (str) {
|
||
return base64.toByteArray(base64clean(str))
|
||
}
|
||
|
||
function blitBuffer (src, dst, offset, length) {
|
||
for (var i = 0; i < length; ++i) {
|
||
if ((i + offset >= dst.length) || (i >= src.length)) break
|
||
dst[i + offset] = src[i]
|
||
}
|
||
return i
|
||
}
|
||
|
||
function isnan (val) {
|
||
return val !== val // eslint-disable-line no-self-compare
|
||
}
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(24)))
|
||
|
||
/***/ }),
|
||
/* 50 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// browser shim for xmlhttprequest module
|
||
|
||
var hasCORS = __webpack_require__(119);
|
||
|
||
module.exports = function (opts) {
|
||
var xdomain = opts.xdomain;
|
||
|
||
// scheme must be same when usign XDomainRequest
|
||
// http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
|
||
var xscheme = opts.xscheme;
|
||
|
||
// XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.
|
||
// https://github.com/Automattic/engine.io-client/pull/217
|
||
var enablesXDR = opts.enablesXDR;
|
||
|
||
// XMLHttpRequest can be disabled on IE
|
||
try {
|
||
if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {
|
||
return new XMLHttpRequest();
|
||
}
|
||
} catch (e) { }
|
||
|
||
// Use XDomainRequest for IE8 if enablesXDR is true
|
||
// because loading bar keeps flashing when using jsonp-polling
|
||
// https://github.com/yujiosaka/socke.io-ie8-loading-example
|
||
try {
|
||
if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) {
|
||
return new XDomainRequest();
|
||
}
|
||
} catch (e) { }
|
||
|
||
if (!xdomain) {
|
||
try {
|
||
return new self[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP');
|
||
} catch (e) { }
|
||
}
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 51 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/**
|
||
* Module dependencies.
|
||
*/
|
||
|
||
var parser = __webpack_require__(18);
|
||
var Emitter = __webpack_require__(17);
|
||
|
||
/**
|
||
* Module exports.
|
||
*/
|
||
|
||
module.exports = Transport;
|
||
|
||
/**
|
||
* Transport abstract constructor.
|
||
*
|
||
* @param {Object} options.
|
||
* @api private
|
||
*/
|
||
|
||
function Transport (opts) {
|
||
this.path = opts.path;
|
||
this.hostname = opts.hostname;
|
||
this.port = opts.port;
|
||
this.secure = opts.secure;
|
||
this.query = opts.query;
|
||
this.timestampParam = opts.timestampParam;
|
||
this.timestampRequests = opts.timestampRequests;
|
||
this.readyState = '';
|
||
this.agent = opts.agent || false;
|
||
this.socket = opts.socket;
|
||
this.enablesXDR = opts.enablesXDR;
|
||
|
||
// SSL options for Node.js client
|
||
this.pfx = opts.pfx;
|
||
this.key = opts.key;
|
||
this.passphrase = opts.passphrase;
|
||
this.cert = opts.cert;
|
||
this.ca = opts.ca;
|
||
this.ciphers = opts.ciphers;
|
||
this.rejectUnauthorized = opts.rejectUnauthorized;
|
||
this.forceNode = opts.forceNode;
|
||
|
||
// results of ReactNative environment detection
|
||
this.isReactNative = opts.isReactNative;
|
||
|
||
// other options for Node.js client
|
||
this.extraHeaders = opts.extraHeaders;
|
||
this.localAddress = opts.localAddress;
|
||
}
|
||
|
||
/**
|
||
* Mix in `Emitter`.
|
||
*/
|
||
|
||
Emitter(Transport.prototype);
|
||
|
||
/**
|
||
* Emits an error.
|
||
*
|
||
* @param {String} str
|
||
* @return {Transport} for chaining
|
||
* @api public
|
||
*/
|
||
|
||
Transport.prototype.onError = function (msg, desc) {
|
||
var err = new Error(msg);
|
||
err.type = 'TransportError';
|
||
err.description = desc;
|
||
this.emit('error', err);
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Opens the transport.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
Transport.prototype.open = function () {
|
||
if ('closed' === this.readyState || '' === this.readyState) {
|
||
this.readyState = 'opening';
|
||
this.doOpen();
|
||
}
|
||
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Closes the transport.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Transport.prototype.close = function () {
|
||
if ('opening' === this.readyState || 'open' === this.readyState) {
|
||
this.doClose();
|
||
this.onClose();
|
||
}
|
||
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Sends multiple packets.
|
||
*
|
||
* @param {Array} packets
|
||
* @api private
|
||
*/
|
||
|
||
Transport.prototype.send = function (packets) {
|
||
if ('open' === this.readyState) {
|
||
this.write(packets);
|
||
} else {
|
||
throw new Error('Transport not open');
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Called upon open
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Transport.prototype.onOpen = function () {
|
||
this.readyState = 'open';
|
||
this.writable = true;
|
||
this.emit('open');
|
||
};
|
||
|
||
/**
|
||
* Called with data.
|
||
*
|
||
* @param {String} data
|
||
* @api private
|
||
*/
|
||
|
||
Transport.prototype.onData = function (data) {
|
||
var packet = parser.decodePacket(data, this.socket.binaryType);
|
||
this.onPacket(packet);
|
||
};
|
||
|
||
/**
|
||
* Called with a decoded packet.
|
||
*/
|
||
|
||
Transport.prototype.onPacket = function (packet) {
|
||
this.emit('packet', packet);
|
||
};
|
||
|
||
/**
|
||
* Called upon close.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Transport.prototype.onClose = function () {
|
||
this.readyState = 'closed';
|
||
this.emit('close');
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 52 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var TimerObservable_1 = __webpack_require__(138);
|
||
exports.timer = TimerObservable_1.TimerObservable.create;
|
||
//# sourceMappingURL=timer.js.map
|
||
|
||
/***/ }),
|
||
/* 53 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var ignoreElements_1 = __webpack_require__(11);
|
||
var tap_1 = __webpack_require__(5);
|
||
var effects_1 = __webpack_require__(8);
|
||
/**
|
||
* Set the local client options
|
||
* @param xs
|
||
* @param inputs
|
||
*/
|
||
function setOptionsEffect(xs, inputs) {
|
||
return xs.pipe(tap_1.tap(function (options) { return inputs.option$.next(options); }),
|
||
// map(() => consoleInfo('set options'))
|
||
ignoreElements_1.ignoreElements());
|
||
}
|
||
exports.setOptionsEffect = setOptionsEffect;
|
||
function setOptions(options) {
|
||
return [effects_1.EffectNames.SetOptions, options];
|
||
}
|
||
exports.setOptions = setOptions;
|
||
|
||
|
||
/***/ }),
|
||
/* 54 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var isScheduler_1 = __webpack_require__(25);
|
||
var of_1 = __webpack_require__(9);
|
||
var from_1 = __webpack_require__(87);
|
||
var concatAll_1 = __webpack_require__(150);
|
||
/* tslint:enable:max-line-length */
|
||
/**
|
||
* Creates an output Observable which sequentially emits all values from given
|
||
* Observable and then moves on to the next.
|
||
*
|
||
* <span class="informal">Concatenates multiple Observables together by
|
||
* sequentially emitting their values, one Observable after the other.</span>
|
||
*
|
||
* <img src="./img/concat.png" width="100%">
|
||
*
|
||
* `concat` joins multiple Observables together, by subscribing to them one at a time and
|
||
* merging their results into the output Observable. You can pass either an array of
|
||
* Observables, or put them directly as arguments. Passing an empty array will result
|
||
* in Observable that completes immediately.
|
||
*
|
||
* `concat` will subscribe to first input Observable and emit all its values, without
|
||
* changing or affecting them in any way. When that Observable completes, it will
|
||
* subscribe to then next Observable passed and, again, emit its values. This will be
|
||
* repeated, until the operator runs out of Observables. When last input Observable completes,
|
||
* `concat` will complete as well. At any given moment only one Observable passed to operator
|
||
* emits values. If you would like to emit values from passed Observables concurrently, check out
|
||
* {@link merge} instead, especially with optional `concurrent` parameter. As a matter of fact,
|
||
* `concat` is an equivalent of `merge` operator with `concurrent` parameter set to `1`.
|
||
*
|
||
* Note that if some input Observable never completes, `concat` will also never complete
|
||
* and Observables following the one that did not complete will never be subscribed. On the other
|
||
* hand, if some Observable simply completes immediately after it is subscribed, it will be
|
||
* invisible for `concat`, which will just move on to the next Observable.
|
||
*
|
||
* If any Observable in chain errors, instead of passing control to the next Observable,
|
||
* `concat` will error immediately as well. Observables that would be subscribed after
|
||
* the one that emitted error, never will.
|
||
*
|
||
* If you pass to `concat` the same Observable many times, its stream of values
|
||
* will be "replayed" on every subscription, which means you can repeat given Observable
|
||
* as many times as you like. If passing the same Observable to `concat` 1000 times becomes tedious,
|
||
* you can always use {@link repeat}.
|
||
*
|
||
* @example <caption>Concatenate a timer counting from 0 to 3 with a synchronous sequence from 1 to 10</caption>
|
||
* var timer = Rx.Observable.interval(1000).take(4);
|
||
* var sequence = Rx.Observable.range(1, 10);
|
||
* var result = Rx.Observable.concat(timer, sequence);
|
||
* result.subscribe(x => console.log(x));
|
||
*
|
||
* // results in:
|
||
* // 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3 -immediate-> 1 ... 10
|
||
*
|
||
*
|
||
* @example <caption>Concatenate an array of 3 Observables</caption>
|
||
* var timer1 = Rx.Observable.interval(1000).take(10);
|
||
* var timer2 = Rx.Observable.interval(2000).take(6);
|
||
* var timer3 = Rx.Observable.interval(500).take(10);
|
||
* var result = Rx.Observable.concat([timer1, timer2, timer3]); // note that array is passed
|
||
* result.subscribe(x => console.log(x));
|
||
*
|
||
* // results in the following:
|
||
* // (Prints to console sequentially)
|
||
* // -1000ms-> 0 -1000ms-> 1 -1000ms-> ... 9
|
||
* // -2000ms-> 0 -2000ms-> 1 -2000ms-> ... 5
|
||
* // -500ms-> 0 -500ms-> 1 -500ms-> ... 9
|
||
*
|
||
*
|
||
* @example <caption>Concatenate the same Observable to repeat it</caption>
|
||
* const timer = Rx.Observable.interval(1000).take(2);
|
||
*
|
||
* Rx.Observable.concat(timer, timer) // concating the same Observable!
|
||
* .subscribe(
|
||
* value => console.log(value),
|
||
* err => {},
|
||
* () => console.log('...and it is done!')
|
||
* );
|
||
*
|
||
* // Logs:
|
||
* // 0 after 1s
|
||
* // 1 after 2s
|
||
* // 0 after 3s
|
||
* // 1 after 4s
|
||
* // "...and it is done!" also after 4s
|
||
*
|
||
* @see {@link concatAll}
|
||
* @see {@link concatMap}
|
||
* @see {@link concatMapTo}
|
||
*
|
||
* @param {ObservableInput} input1 An input Observable to concatenate with others.
|
||
* @param {ObservableInput} input2 An input Observable to concatenate with others.
|
||
* More than one input Observables may be given as argument.
|
||
* @param {Scheduler} [scheduler=null] An optional IScheduler to schedule each
|
||
* Observable subscription on.
|
||
* @return {Observable} All values of each passed Observable merged into a
|
||
* single Observable, in order, in serial fashion.
|
||
* @static true
|
||
* @name concat
|
||
* @owner Observable
|
||
*/
|
||
function concat() {
|
||
var observables = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
observables[_i - 0] = arguments[_i];
|
||
}
|
||
if (observables.length === 1 || (observables.length === 2 && isScheduler_1.isScheduler(observables[1]))) {
|
||
return from_1.from(observables[0]);
|
||
}
|
||
return concatAll_1.concatAll()(of_1.of.apply(void 0, observables));
|
||
}
|
||
exports.concat = concat;
|
||
//# sourceMappingURL=concat.js.map
|
||
|
||
/***/ }),
|
||
/* 55 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var mergeMap_1 = __webpack_require__(15);
|
||
var identity_1 = __webpack_require__(151);
|
||
/**
|
||
* Converts a higher-order Observable into a first-order Observable which
|
||
* concurrently delivers all values that are emitted on the inner Observables.
|
||
*
|
||
* <span class="informal">Flattens an Observable-of-Observables.</span>
|
||
*
|
||
* <img src="./img/mergeAll.png" width="100%">
|
||
*
|
||
* `mergeAll` subscribes to an Observable that emits Observables, also known as
|
||
* a higher-order Observable. Each time it observes one of these emitted inner
|
||
* Observables, it subscribes to that and delivers all the values from the
|
||
* inner Observable on the output Observable. The output Observable only
|
||
* completes once all inner Observables have completed. Any error delivered by
|
||
* a inner Observable will be immediately emitted on the output Observable.
|
||
*
|
||
* @example <caption>Spawn a new interval Observable for each click event, and blend their outputs as one Observable</caption>
|
||
* var clicks = Rx.Observable.fromEvent(document, 'click');
|
||
* var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000));
|
||
* var firstOrder = higherOrder.mergeAll();
|
||
* firstOrder.subscribe(x => console.log(x));
|
||
*
|
||
* @example <caption>Count from 0 to 9 every second for each click, but only allow 2 concurrent timers</caption>
|
||
* var clicks = Rx.Observable.fromEvent(document, 'click');
|
||
* var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000).take(10));
|
||
* var firstOrder = higherOrder.mergeAll(2);
|
||
* firstOrder.subscribe(x => console.log(x));
|
||
*
|
||
* @see {@link combineAll}
|
||
* @see {@link concatAll}
|
||
* @see {@link exhaust}
|
||
* @see {@link merge}
|
||
* @see {@link mergeMap}
|
||
* @see {@link mergeMapTo}
|
||
* @see {@link mergeScan}
|
||
* @see {@link switch}
|
||
* @see {@link zipAll}
|
||
*
|
||
* @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of inner
|
||
* Observables being subscribed to concurrently.
|
||
* @return {Observable} An Observable that emits values coming from all the
|
||
* inner Observables emitted by the source Observable.
|
||
* @method mergeAll
|
||
* @owner Observable
|
||
*/
|
||
function mergeAll(concurrent) {
|
||
if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
|
||
return mergeMap_1.mergeMap(identity_1.identity, null, concurrent);
|
||
}
|
||
exports.mergeAll = mergeAll;
|
||
//# sourceMappingURL=mergeAll.js.map
|
||
|
||
/***/ }),
|
||
/* 56 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
function isObject(x) {
|
||
return x != null && typeof x === 'object';
|
||
}
|
||
exports.isObject = isObject;
|
||
//# sourceMappingURL=isObject.js.map
|
||
|
||
/***/ }),
|
||
/* 57 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
exports.empty = {
|
||
closed: true,
|
||
next: function (value) { },
|
||
error: function (err) { throw err; },
|
||
complete: function () { }
|
||
};
|
||
//# sourceMappingURL=Observer.js.map
|
||
|
||
/***/ }),
|
||
/* 58 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
/* tslint:disable:no-empty */
|
||
function noop() { }
|
||
exports.noop = noop;
|
||
//# sourceMappingURL=noop.js.map
|
||
|
||
/***/ }),
|
||
/* 59 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
exports.isArrayLike = (function (x) { return x && typeof x.length === 'number'; });
|
||
//# sourceMappingURL=isArrayLike.js.map
|
||
|
||
/***/ }),
|
||
/* 60 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
function isPromise(value) {
|
||
return value && typeof value.subscribe !== 'function' && typeof value.then === 'function';
|
||
}
|
||
exports.isPromise = isPromise;
|
||
//# sourceMappingURL=isPromise.js.map
|
||
|
||
/***/ }),
|
||
/* 61 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/**
|
||
* Parses an URI
|
||
*
|
||
* @author Steven Levithan <stevenlevithan.com> (MIT license)
|
||
* @api private
|
||
*/
|
||
|
||
var re = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
|
||
|
||
var parts = [
|
||
'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'
|
||
];
|
||
|
||
module.exports = function parseuri(str) {
|
||
var src = str,
|
||
b = str.indexOf('['),
|
||
e = str.indexOf(']');
|
||
|
||
if (b != -1 && e != -1) {
|
||
str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);
|
||
}
|
||
|
||
var m = re.exec(str || ''),
|
||
uri = {},
|
||
i = 14;
|
||
|
||
while (i--) {
|
||
uri[parts[i]] = m[i] || '';
|
||
}
|
||
|
||
if (b != -1 && e != -1) {
|
||
uri.source = src;
|
||
uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');
|
||
uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');
|
||
uri.ipv6uri = true;
|
||
}
|
||
|
||
return uri;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 62 */
|
||
/***/ (function(module, exports) {
|
||
|
||
var toString = {}.toString;
|
||
|
||
module.exports = Array.isArray || function (arr) {
|
||
return toString.call(arr) == '[object Array]';
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 63 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(Buffer) {
|
||
module.exports = isBuf;
|
||
|
||
var withNativeBuffer = typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function';
|
||
var withNativeArrayBuffer = typeof ArrayBuffer === 'function';
|
||
|
||
var isView = function (obj) {
|
||
return typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView(obj) : (obj.buffer instanceof ArrayBuffer);
|
||
};
|
||
|
||
/**
|
||
* Returns true if obj is a buffer or an arraybuffer.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
function isBuf(obj) {
|
||
return (withNativeBuffer && Buffer.isBuffer(obj)) ||
|
||
(withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)));
|
||
}
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(49).Buffer))
|
||
|
||
/***/ }),
|
||
/* 64 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
|
||
/**
|
||
* Module dependencies.
|
||
*/
|
||
|
||
var eio = __webpack_require__(117);
|
||
var Socket = __webpack_require__(70);
|
||
var Emitter = __webpack_require__(17);
|
||
var parser = __webpack_require__(48);
|
||
var on = __webpack_require__(71);
|
||
var bind = __webpack_require__(72);
|
||
var debug = __webpack_require__(32)('socket.io-client:manager');
|
||
var indexOf = __webpack_require__(69);
|
||
var Backoff = __webpack_require__(133);
|
||
|
||
/**
|
||
* IE6+ hasOwnProperty
|
||
*/
|
||
|
||
var has = Object.prototype.hasOwnProperty;
|
||
|
||
/**
|
||
* Module exports
|
||
*/
|
||
|
||
module.exports = Manager;
|
||
|
||
/**
|
||
* `Manager` constructor.
|
||
*
|
||
* @param {String} engine instance or engine uri/opts
|
||
* @param {Object} options
|
||
* @api public
|
||
*/
|
||
|
||
function Manager (uri, opts) {
|
||
if (!(this instanceof Manager)) return new Manager(uri, opts);
|
||
if (uri && ('object' === typeof uri)) {
|
||
opts = uri;
|
||
uri = undefined;
|
||
}
|
||
opts = opts || {};
|
||
|
||
opts.path = opts.path || '/socket.io';
|
||
this.nsps = {};
|
||
this.subs = [];
|
||
this.opts = opts;
|
||
this.reconnection(opts.reconnection !== false);
|
||
this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);
|
||
this.reconnectionDelay(opts.reconnectionDelay || 1000);
|
||
this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);
|
||
this.randomizationFactor(opts.randomizationFactor || 0.5);
|
||
this.backoff = new Backoff({
|
||
min: this.reconnectionDelay(),
|
||
max: this.reconnectionDelayMax(),
|
||
jitter: this.randomizationFactor()
|
||
});
|
||
this.timeout(null == opts.timeout ? 20000 : opts.timeout);
|
||
this.readyState = 'closed';
|
||
this.uri = uri;
|
||
this.connecting = [];
|
||
this.lastPing = null;
|
||
this.encoding = false;
|
||
this.packetBuffer = [];
|
||
var _parser = opts.parser || parser;
|
||
this.encoder = new _parser.Encoder();
|
||
this.decoder = new _parser.Decoder();
|
||
this.autoConnect = opts.autoConnect !== false;
|
||
if (this.autoConnect) this.open();
|
||
}
|
||
|
||
/**
|
||
* Propagate given event to sockets and emit on `this`
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.emitAll = function () {
|
||
this.emit.apply(this, arguments);
|
||
for (var nsp in this.nsps) {
|
||
if (has.call(this.nsps, nsp)) {
|
||
this.nsps[nsp].emit.apply(this.nsps[nsp], arguments);
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Update `socket.id` of all sockets
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.updateSocketIds = function () {
|
||
for (var nsp in this.nsps) {
|
||
if (has.call(this.nsps, nsp)) {
|
||
this.nsps[nsp].id = this.generateId(nsp);
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* generate `socket.id` for the given `nsp`
|
||
*
|
||
* @param {String} nsp
|
||
* @return {String}
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.generateId = function (nsp) {
|
||
return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id;
|
||
};
|
||
|
||
/**
|
||
* Mix in `Emitter`.
|
||
*/
|
||
|
||
Emitter(Manager.prototype);
|
||
|
||
/**
|
||
* Sets the `reconnection` config.
|
||
*
|
||
* @param {Boolean} true/false if it should automatically reconnect
|
||
* @return {Manager} self or value
|
||
* @api public
|
||
*/
|
||
|
||
Manager.prototype.reconnection = function (v) {
|
||
if (!arguments.length) return this._reconnection;
|
||
this._reconnection = !!v;
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Sets the reconnection attempts config.
|
||
*
|
||
* @param {Number} max reconnection attempts before giving up
|
||
* @return {Manager} self or value
|
||
* @api public
|
||
*/
|
||
|
||
Manager.prototype.reconnectionAttempts = function (v) {
|
||
if (!arguments.length) return this._reconnectionAttempts;
|
||
this._reconnectionAttempts = v;
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Sets the delay between reconnections.
|
||
*
|
||
* @param {Number} delay
|
||
* @return {Manager} self or value
|
||
* @api public
|
||
*/
|
||
|
||
Manager.prototype.reconnectionDelay = function (v) {
|
||
if (!arguments.length) return this._reconnectionDelay;
|
||
this._reconnectionDelay = v;
|
||
this.backoff && this.backoff.setMin(v);
|
||
return this;
|
||
};
|
||
|
||
Manager.prototype.randomizationFactor = function (v) {
|
||
if (!arguments.length) return this._randomizationFactor;
|
||
this._randomizationFactor = v;
|
||
this.backoff && this.backoff.setJitter(v);
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Sets the maximum delay between reconnections.
|
||
*
|
||
* @param {Number} delay
|
||
* @return {Manager} self or value
|
||
* @api public
|
||
*/
|
||
|
||
Manager.prototype.reconnectionDelayMax = function (v) {
|
||
if (!arguments.length) return this._reconnectionDelayMax;
|
||
this._reconnectionDelayMax = v;
|
||
this.backoff && this.backoff.setMax(v);
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Sets the connection timeout. `false` to disable
|
||
*
|
||
* @return {Manager} self or value
|
||
* @api public
|
||
*/
|
||
|
||
Manager.prototype.timeout = function (v) {
|
||
if (!arguments.length) return this._timeout;
|
||
this._timeout = v;
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Starts trying to reconnect if reconnection is enabled and we have not
|
||
* started reconnecting yet
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.maybeReconnectOnOpen = function () {
|
||
// Only try to reconnect if it's the first time we're connecting
|
||
if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) {
|
||
// keeps reconnection from firing twice for the same reconnection loop
|
||
this.reconnect();
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Sets the current transport `socket`.
|
||
*
|
||
* @param {Function} optional, callback
|
||
* @return {Manager} self
|
||
* @api public
|
||
*/
|
||
|
||
Manager.prototype.open =
|
||
Manager.prototype.connect = function (fn, opts) {
|
||
debug('readyState %s', this.readyState);
|
||
if (~this.readyState.indexOf('open')) return this;
|
||
|
||
debug('opening %s', this.uri);
|
||
this.engine = eio(this.uri, this.opts);
|
||
var socket = this.engine;
|
||
var self = this;
|
||
this.readyState = 'opening';
|
||
this.skipReconnect = false;
|
||
|
||
// emit `open`
|
||
var openSub = on(socket, 'open', function () {
|
||
self.onopen();
|
||
fn && fn();
|
||
});
|
||
|
||
// emit `connect_error`
|
||
var errorSub = on(socket, 'error', function (data) {
|
||
debug('connect_error');
|
||
self.cleanup();
|
||
self.readyState = 'closed';
|
||
self.emitAll('connect_error', data);
|
||
if (fn) {
|
||
var err = new Error('Connection error');
|
||
err.data = data;
|
||
fn(err);
|
||
} else {
|
||
// Only do this if there is no fn to handle the error
|
||
self.maybeReconnectOnOpen();
|
||
}
|
||
});
|
||
|
||
// emit `connect_timeout`
|
||
if (false !== this._timeout) {
|
||
var timeout = this._timeout;
|
||
debug('connect attempt will timeout after %d', timeout);
|
||
|
||
// set timer
|
||
var timer = setTimeout(function () {
|
||
debug('connect attempt timed out after %d', timeout);
|
||
openSub.destroy();
|
||
socket.close();
|
||
socket.emit('error', 'timeout');
|
||
self.emitAll('connect_timeout', timeout);
|
||
}, timeout);
|
||
|
||
this.subs.push({
|
||
destroy: function () {
|
||
clearTimeout(timer);
|
||
}
|
||
});
|
||
}
|
||
|
||
this.subs.push(openSub);
|
||
this.subs.push(errorSub);
|
||
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Called upon transport open.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.onopen = function () {
|
||
debug('open');
|
||
|
||
// clear old subs
|
||
this.cleanup();
|
||
|
||
// mark as open
|
||
this.readyState = 'open';
|
||
this.emit('open');
|
||
|
||
// add new subs
|
||
var socket = this.engine;
|
||
this.subs.push(on(socket, 'data', bind(this, 'ondata')));
|
||
this.subs.push(on(socket, 'ping', bind(this, 'onping')));
|
||
this.subs.push(on(socket, 'pong', bind(this, 'onpong')));
|
||
this.subs.push(on(socket, 'error', bind(this, 'onerror')));
|
||
this.subs.push(on(socket, 'close', bind(this, 'onclose')));
|
||
this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded')));
|
||
};
|
||
|
||
/**
|
||
* Called upon a ping.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.onping = function () {
|
||
this.lastPing = new Date();
|
||
this.emitAll('ping');
|
||
};
|
||
|
||
/**
|
||
* Called upon a packet.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.onpong = function () {
|
||
this.emitAll('pong', new Date() - this.lastPing);
|
||
};
|
||
|
||
/**
|
||
* Called with data.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.ondata = function (data) {
|
||
this.decoder.add(data);
|
||
};
|
||
|
||
/**
|
||
* Called when parser fully decodes a packet.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.ondecoded = function (packet) {
|
||
this.emit('packet', packet);
|
||
};
|
||
|
||
/**
|
||
* Called upon socket error.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.onerror = function (err) {
|
||
debug('error', err);
|
||
this.emitAll('error', err);
|
||
};
|
||
|
||
/**
|
||
* Creates a new socket for the given `nsp`.
|
||
*
|
||
* @return {Socket}
|
||
* @api public
|
||
*/
|
||
|
||
Manager.prototype.socket = function (nsp, opts) {
|
||
var socket = this.nsps[nsp];
|
||
if (!socket) {
|
||
socket = new Socket(this, nsp, opts);
|
||
this.nsps[nsp] = socket;
|
||
var self = this;
|
||
socket.on('connecting', onConnecting);
|
||
socket.on('connect', function () {
|
||
socket.id = self.generateId(nsp);
|
||
});
|
||
|
||
if (this.autoConnect) {
|
||
// manually call here since connecting event is fired before listening
|
||
onConnecting();
|
||
}
|
||
}
|
||
|
||
function onConnecting () {
|
||
if (!~indexOf(self.connecting, socket)) {
|
||
self.connecting.push(socket);
|
||
}
|
||
}
|
||
|
||
return socket;
|
||
};
|
||
|
||
/**
|
||
* Called upon a socket close.
|
||
*
|
||
* @param {Socket} socket
|
||
*/
|
||
|
||
Manager.prototype.destroy = function (socket) {
|
||
var index = indexOf(this.connecting, socket);
|
||
if (~index) this.connecting.splice(index, 1);
|
||
if (this.connecting.length) return;
|
||
|
||
this.close();
|
||
};
|
||
|
||
/**
|
||
* Writes a packet.
|
||
*
|
||
* @param {Object} packet
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.packet = function (packet) {
|
||
debug('writing packet %j', packet);
|
||
var self = this;
|
||
if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query;
|
||
|
||
if (!self.encoding) {
|
||
// encode, then write to engine with result
|
||
self.encoding = true;
|
||
this.encoder.encode(packet, function (encodedPackets) {
|
||
for (var i = 0; i < encodedPackets.length; i++) {
|
||
self.engine.write(encodedPackets[i], packet.options);
|
||
}
|
||
self.encoding = false;
|
||
self.processPacketQueue();
|
||
});
|
||
} else { // add packet to the queue
|
||
self.packetBuffer.push(packet);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* If packet buffer is non-empty, begins encoding the
|
||
* next packet in line.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.processPacketQueue = function () {
|
||
if (this.packetBuffer.length > 0 && !this.encoding) {
|
||
var pack = this.packetBuffer.shift();
|
||
this.packet(pack);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Clean up transport subscriptions and packet buffer.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.cleanup = function () {
|
||
debug('cleanup');
|
||
|
||
var subsLength = this.subs.length;
|
||
for (var i = 0; i < subsLength; i++) {
|
||
var sub = this.subs.shift();
|
||
sub.destroy();
|
||
}
|
||
|
||
this.packetBuffer = [];
|
||
this.encoding = false;
|
||
this.lastPing = null;
|
||
|
||
this.decoder.destroy();
|
||
};
|
||
|
||
/**
|
||
* Close the current socket.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.close =
|
||
Manager.prototype.disconnect = function () {
|
||
debug('disconnect');
|
||
this.skipReconnect = true;
|
||
this.reconnecting = false;
|
||
if ('opening' === this.readyState) {
|
||
// `onclose` will not fire because
|
||
// an open event never happened
|
||
this.cleanup();
|
||
}
|
||
this.backoff.reset();
|
||
this.readyState = 'closed';
|
||
if (this.engine) this.engine.close();
|
||
};
|
||
|
||
/**
|
||
* Called upon engine close.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.onclose = function (reason) {
|
||
debug('onclose');
|
||
|
||
this.cleanup();
|
||
this.backoff.reset();
|
||
this.readyState = 'closed';
|
||
this.emit('close', reason);
|
||
|
||
if (this._reconnection && !this.skipReconnect) {
|
||
this.reconnect();
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Attempt a reconnection.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.reconnect = function () {
|
||
if (this.reconnecting || this.skipReconnect) return this;
|
||
|
||
var self = this;
|
||
|
||
if (this.backoff.attempts >= this._reconnectionAttempts) {
|
||
debug('reconnect failed');
|
||
this.backoff.reset();
|
||
this.emitAll('reconnect_failed');
|
||
this.reconnecting = false;
|
||
} else {
|
||
var delay = this.backoff.duration();
|
||
debug('will wait %dms before reconnect attempt', delay);
|
||
|
||
this.reconnecting = true;
|
||
var timer = setTimeout(function () {
|
||
if (self.skipReconnect) return;
|
||
|
||
debug('attempting reconnect');
|
||
self.emitAll('reconnect_attempt', self.backoff.attempts);
|
||
self.emitAll('reconnecting', self.backoff.attempts);
|
||
|
||
// check again for the case socket closed in above events
|
||
if (self.skipReconnect) return;
|
||
|
||
self.open(function (err) {
|
||
if (err) {
|
||
debug('reconnect attempt error');
|
||
self.reconnecting = false;
|
||
self.reconnect();
|
||
self.emitAll('reconnect_error', err.data);
|
||
} else {
|
||
debug('reconnect success');
|
||
self.onreconnect();
|
||
}
|
||
});
|
||
}, delay);
|
||
|
||
this.subs.push({
|
||
destroy: function () {
|
||
clearTimeout(timer);
|
||
}
|
||
});
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Called upon successful reconnect.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Manager.prototype.onreconnect = function () {
|
||
var attempt = this.backoff.attempts;
|
||
this.reconnecting = false;
|
||
this.backoff.reset();
|
||
this.updateSocketIds();
|
||
this.emitAll('reconnect', attempt);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 65 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/**
|
||
* Module dependencies
|
||
*/
|
||
|
||
var XMLHttpRequest = __webpack_require__(50);
|
||
var XHR = __webpack_require__(120);
|
||
var JSONP = __webpack_require__(129);
|
||
var websocket = __webpack_require__(130);
|
||
|
||
/**
|
||
* Export transports.
|
||
*/
|
||
|
||
exports.polling = polling;
|
||
exports.websocket = websocket;
|
||
|
||
/**
|
||
* Polling transport polymorphic constructor.
|
||
* Decides on xhr vs jsonp based on feature detection.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
function polling (opts) {
|
||
var xhr;
|
||
var xd = false;
|
||
var xs = false;
|
||
var jsonp = false !== opts.jsonp;
|
||
|
||
if (typeof location !== 'undefined') {
|
||
var isSSL = 'https:' === location.protocol;
|
||
var port = location.port;
|
||
|
||
// some user agents have empty `location.port`
|
||
if (!port) {
|
||
port = isSSL ? 443 : 80;
|
||
}
|
||
|
||
xd = opts.hostname !== location.hostname || port !== opts.port;
|
||
xs = opts.secure !== isSSL;
|
||
}
|
||
|
||
opts.xdomain = xd;
|
||
opts.xscheme = xs;
|
||
xhr = new XMLHttpRequest(opts);
|
||
|
||
if ('open' in xhr && !opts.forceJSONP) {
|
||
return new XHR(opts);
|
||
} else {
|
||
if (!jsonp) throw new Error('JSONP disabled');
|
||
return new JSONP(opts);
|
||
}
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 66 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/**
|
||
* Module dependencies.
|
||
*/
|
||
|
||
var Transport = __webpack_require__(51);
|
||
var parseqs = __webpack_require__(34);
|
||
var parser = __webpack_require__(18);
|
||
var inherit = __webpack_require__(35);
|
||
var yeast = __webpack_require__(68);
|
||
var debug = __webpack_require__(36)('engine.io-client:polling');
|
||
|
||
/**
|
||
* Module exports.
|
||
*/
|
||
|
||
module.exports = Polling;
|
||
|
||
/**
|
||
* Is XHR2 supported?
|
||
*/
|
||
|
||
var hasXHR2 = (function () {
|
||
var XMLHttpRequest = __webpack_require__(50);
|
||
var xhr = new XMLHttpRequest({ xdomain: false });
|
||
return null != xhr.responseType;
|
||
})();
|
||
|
||
/**
|
||
* Polling interface.
|
||
*
|
||
* @param {Object} opts
|
||
* @api private
|
||
*/
|
||
|
||
function Polling (opts) {
|
||
var forceBase64 = (opts && opts.forceBase64);
|
||
if (!hasXHR2 || forceBase64) {
|
||
this.supportsBinary = false;
|
||
}
|
||
Transport.call(this, opts);
|
||
}
|
||
|
||
/**
|
||
* Inherits from Transport.
|
||
*/
|
||
|
||
inherit(Polling, Transport);
|
||
|
||
/**
|
||
* Transport name.
|
||
*/
|
||
|
||
Polling.prototype.name = 'polling';
|
||
|
||
/**
|
||
* Opens the socket (triggers polling). We write a PING message to determine
|
||
* when the transport is open.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Polling.prototype.doOpen = function () {
|
||
this.poll();
|
||
};
|
||
|
||
/**
|
||
* Pauses polling.
|
||
*
|
||
* @param {Function} callback upon buffers are flushed and transport is paused
|
||
* @api private
|
||
*/
|
||
|
||
Polling.prototype.pause = function (onPause) {
|
||
var self = this;
|
||
|
||
this.readyState = 'pausing';
|
||
|
||
function pause () {
|
||
debug('paused');
|
||
self.readyState = 'paused';
|
||
onPause();
|
||
}
|
||
|
||
if (this.polling || !this.writable) {
|
||
var total = 0;
|
||
|
||
if (this.polling) {
|
||
debug('we are currently polling - waiting to pause');
|
||
total++;
|
||
this.once('pollComplete', function () {
|
||
debug('pre-pause polling complete');
|
||
--total || pause();
|
||
});
|
||
}
|
||
|
||
if (!this.writable) {
|
||
debug('we are currently writing - waiting to pause');
|
||
total++;
|
||
this.once('drain', function () {
|
||
debug('pre-pause writing complete');
|
||
--total || pause();
|
||
});
|
||
}
|
||
} else {
|
||
pause();
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Starts polling cycle.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
Polling.prototype.poll = function () {
|
||
debug('polling');
|
||
this.polling = true;
|
||
this.doPoll();
|
||
this.emit('poll');
|
||
};
|
||
|
||
/**
|
||
* Overloads onData to detect payloads.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Polling.prototype.onData = function (data) {
|
||
var self = this;
|
||
debug('polling got data %s', data);
|
||
var callback = function (packet, index, total) {
|
||
// if its the first message we consider the transport open
|
||
if ('opening' === self.readyState) {
|
||
self.onOpen();
|
||
}
|
||
|
||
// if its a close packet, we close the ongoing requests
|
||
if ('close' === packet.type) {
|
||
self.onClose();
|
||
return false;
|
||
}
|
||
|
||
// otherwise bypass onData and handle the message
|
||
self.onPacket(packet);
|
||
};
|
||
|
||
// decode payload
|
||
parser.decodePayload(data, this.socket.binaryType, callback);
|
||
|
||
// if an event did not trigger closing
|
||
if ('closed' !== this.readyState) {
|
||
// if we got data we're not polling
|
||
this.polling = false;
|
||
this.emit('pollComplete');
|
||
|
||
if ('open' === this.readyState) {
|
||
this.poll();
|
||
} else {
|
||
debug('ignoring poll - transport state "%s"', this.readyState);
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* For polling, send a close packet.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Polling.prototype.doClose = function () {
|
||
var self = this;
|
||
|
||
function close () {
|
||
debug('writing close packet');
|
||
self.write([{ type: 'close' }]);
|
||
}
|
||
|
||
if ('open' === this.readyState) {
|
||
debug('transport open - closing');
|
||
close();
|
||
} else {
|
||
// in case we're trying to close while
|
||
// handshaking is in progress (GH-164)
|
||
debug('transport not open - deferring close');
|
||
this.once('open', close);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Writes a packets payload.
|
||
*
|
||
* @param {Array} data packets
|
||
* @param {Function} drain callback
|
||
* @api private
|
||
*/
|
||
|
||
Polling.prototype.write = function (packets) {
|
||
var self = this;
|
||
this.writable = false;
|
||
var callbackfn = function () {
|
||
self.writable = true;
|
||
self.emit('drain');
|
||
};
|
||
|
||
parser.encodePayload(packets, this.supportsBinary, function (data) {
|
||
self.doWrite(data, callbackfn);
|
||
});
|
||
};
|
||
|
||
/**
|
||
* Generates uri for connection.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Polling.prototype.uri = function () {
|
||
var query = this.query || {};
|
||
var schema = this.secure ? 'https' : 'http';
|
||
var port = '';
|
||
|
||
// cache busting is forced
|
||
if (false !== this.timestampRequests) {
|
||
query[this.timestampParam] = yeast();
|
||
}
|
||
|
||
if (!this.supportsBinary && !query.sid) {
|
||
query.b64 = 1;
|
||
}
|
||
|
||
query = parseqs.encode(query);
|
||
|
||
// avoid port if default for schema
|
||
if (this.port && (('https' === schema && Number(this.port) !== 443) ||
|
||
('http' === schema && Number(this.port) !== 80))) {
|
||
port = ':' + this.port;
|
||
}
|
||
|
||
// prepend ? to query
|
||
if (query.length) {
|
||
query = '?' + query;
|
||
}
|
||
|
||
var ipv6 = this.hostname.indexOf(':') !== -1;
|
||
return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 67 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(Buffer) {/* global Blob File */
|
||
|
||
/*
|
||
* Module requirements.
|
||
*/
|
||
|
||
var isArray = __webpack_require__(122);
|
||
|
||
var toString = Object.prototype.toString;
|
||
var withNativeBlob = typeof Blob === 'function' ||
|
||
typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]';
|
||
var withNativeFile = typeof File === 'function' ||
|
||
typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]';
|
||
|
||
/**
|
||
* Module exports.
|
||
*/
|
||
|
||
module.exports = hasBinary;
|
||
|
||
/**
|
||
* Checks for binary data.
|
||
*
|
||
* Supports Buffer, ArrayBuffer, Blob and File.
|
||
*
|
||
* @param {Object} anything
|
||
* @api public
|
||
*/
|
||
|
||
function hasBinary (obj) {
|
||
if (!obj || typeof obj !== 'object') {
|
||
return false;
|
||
}
|
||
|
||
if (isArray(obj)) {
|
||
for (var i = 0, l = obj.length; i < l; i++) {
|
||
if (hasBinary(obj[i])) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) ||
|
||
(typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) ||
|
||
(withNativeBlob && obj instanceof Blob) ||
|
||
(withNativeFile && obj instanceof File)
|
||
) {
|
||
return true;
|
||
}
|
||
|
||
// see: https://github.com/Automattic/has-binary/pull/4
|
||
if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) {
|
||
return hasBinary(obj.toJSON(), true);
|
||
}
|
||
|
||
for (var key in obj) {
|
||
if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {
|
||
return true;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(49).Buffer))
|
||
|
||
/***/ }),
|
||
/* 68 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')
|
||
, length = 64
|
||
, map = {}
|
||
, seed = 0
|
||
, i = 0
|
||
, prev;
|
||
|
||
/**
|
||
* Return a string representing the specified number.
|
||
*
|
||
* @param {Number} num The number to convert.
|
||
* @returns {String} The string representation of the number.
|
||
* @api public
|
||
*/
|
||
function encode(num) {
|
||
var encoded = '';
|
||
|
||
do {
|
||
encoded = alphabet[num % length] + encoded;
|
||
num = Math.floor(num / length);
|
||
} while (num > 0);
|
||
|
||
return encoded;
|
||
}
|
||
|
||
/**
|
||
* Return the integer value specified by the given string.
|
||
*
|
||
* @param {String} str The string to convert.
|
||
* @returns {Number} The integer value represented by the string.
|
||
* @api public
|
||
*/
|
||
function decode(str) {
|
||
var decoded = 0;
|
||
|
||
for (i = 0; i < str.length; i++) {
|
||
decoded = decoded * length + map[str.charAt(i)];
|
||
}
|
||
|
||
return decoded;
|
||
}
|
||
|
||
/**
|
||
* Yeast: A tiny growing id generator.
|
||
*
|
||
* @returns {String} A unique id.
|
||
* @api public
|
||
*/
|
||
function yeast() {
|
||
var now = encode(+new Date());
|
||
|
||
if (now !== prev) return seed = 0, prev = now;
|
||
return now +'.'+ encode(seed++);
|
||
}
|
||
|
||
//
|
||
// Map each character to its index.
|
||
//
|
||
for (; i < length; i++) map[alphabet[i]] = i;
|
||
|
||
//
|
||
// Expose the `yeast`, `encode` and `decode` functions.
|
||
//
|
||
yeast.encode = encode;
|
||
yeast.decode = decode;
|
||
module.exports = yeast;
|
||
|
||
|
||
/***/ }),
|
||
/* 69 */
|
||
/***/ (function(module, exports) {
|
||
|
||
|
||
var indexOf = [].indexOf;
|
||
|
||
module.exports = function(arr, obj){
|
||
if (indexOf) return arr.indexOf(obj);
|
||
for (var i = 0; i < arr.length; ++i) {
|
||
if (arr[i] === obj) return i;
|
||
}
|
||
return -1;
|
||
};
|
||
|
||
/***/ }),
|
||
/* 70 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
|
||
/**
|
||
* Module dependencies.
|
||
*/
|
||
|
||
var parser = __webpack_require__(48);
|
||
var Emitter = __webpack_require__(17);
|
||
var toArray = __webpack_require__(132);
|
||
var on = __webpack_require__(71);
|
||
var bind = __webpack_require__(72);
|
||
var debug = __webpack_require__(32)('socket.io-client:socket');
|
||
var parseqs = __webpack_require__(34);
|
||
var hasBin = __webpack_require__(67);
|
||
|
||
/**
|
||
* Module exports.
|
||
*/
|
||
|
||
module.exports = exports = Socket;
|
||
|
||
/**
|
||
* Internal events (blacklisted).
|
||
* These events can't be emitted by the user.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
var events = {
|
||
connect: 1,
|
||
connect_error: 1,
|
||
connect_timeout: 1,
|
||
connecting: 1,
|
||
disconnect: 1,
|
||
error: 1,
|
||
reconnect: 1,
|
||
reconnect_attempt: 1,
|
||
reconnect_failed: 1,
|
||
reconnect_error: 1,
|
||
reconnecting: 1,
|
||
ping: 1,
|
||
pong: 1
|
||
};
|
||
|
||
/**
|
||
* Shortcut to `Emitter#emit`.
|
||
*/
|
||
|
||
var emit = Emitter.prototype.emit;
|
||
|
||
/**
|
||
* `Socket` constructor.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
function Socket (io, nsp, opts) {
|
||
this.io = io;
|
||
this.nsp = nsp;
|
||
this.json = this; // compat
|
||
this.ids = 0;
|
||
this.acks = {};
|
||
this.receiveBuffer = [];
|
||
this.sendBuffer = [];
|
||
this.connected = false;
|
||
this.disconnected = true;
|
||
this.flags = {};
|
||
if (opts && opts.query) {
|
||
this.query = opts.query;
|
||
}
|
||
if (this.io.autoConnect) this.open();
|
||
}
|
||
|
||
/**
|
||
* Mix in `Emitter`.
|
||
*/
|
||
|
||
Emitter(Socket.prototype);
|
||
|
||
/**
|
||
* Subscribe to open, close and packet events
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.subEvents = function () {
|
||
if (this.subs) return;
|
||
|
||
var io = this.io;
|
||
this.subs = [
|
||
on(io, 'open', bind(this, 'onopen')),
|
||
on(io, 'packet', bind(this, 'onpacket')),
|
||
on(io, 'close', bind(this, 'onclose'))
|
||
];
|
||
};
|
||
|
||
/**
|
||
* "Opens" the socket.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
Socket.prototype.open =
|
||
Socket.prototype.connect = function () {
|
||
if (this.connected) return this;
|
||
|
||
this.subEvents();
|
||
this.io.open(); // ensure open
|
||
if ('open' === this.io.readyState) this.onopen();
|
||
this.emit('connecting');
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Sends a `message` event.
|
||
*
|
||
* @return {Socket} self
|
||
* @api public
|
||
*/
|
||
|
||
Socket.prototype.send = function () {
|
||
var args = toArray(arguments);
|
||
args.unshift('message');
|
||
this.emit.apply(this, args);
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Override `emit`.
|
||
* If the event is in `events`, it's emitted normally.
|
||
*
|
||
* @param {String} event name
|
||
* @return {Socket} self
|
||
* @api public
|
||
*/
|
||
|
||
Socket.prototype.emit = function (ev) {
|
||
if (events.hasOwnProperty(ev)) {
|
||
emit.apply(this, arguments);
|
||
return this;
|
||
}
|
||
|
||
var args = toArray(arguments);
|
||
var packet = {
|
||
type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT,
|
||
data: args
|
||
};
|
||
|
||
packet.options = {};
|
||
packet.options.compress = !this.flags || false !== this.flags.compress;
|
||
|
||
// event ack callback
|
||
if ('function' === typeof args[args.length - 1]) {
|
||
debug('emitting packet with ack id %d', this.ids);
|
||
this.acks[this.ids] = args.pop();
|
||
packet.id = this.ids++;
|
||
}
|
||
|
||
if (this.connected) {
|
||
this.packet(packet);
|
||
} else {
|
||
this.sendBuffer.push(packet);
|
||
}
|
||
|
||
this.flags = {};
|
||
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Sends a packet.
|
||
*
|
||
* @param {Object} packet
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.packet = function (packet) {
|
||
packet.nsp = this.nsp;
|
||
this.io.packet(packet);
|
||
};
|
||
|
||
/**
|
||
* Called upon engine `open`.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.onopen = function () {
|
||
debug('transport is open - connecting');
|
||
|
||
// write connect packet if necessary
|
||
if ('/' !== this.nsp) {
|
||
if (this.query) {
|
||
var query = typeof this.query === 'object' ? parseqs.encode(this.query) : this.query;
|
||
debug('sending connect packet with query %s', query);
|
||
this.packet({type: parser.CONNECT, query: query});
|
||
} else {
|
||
this.packet({type: parser.CONNECT});
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Called upon engine `close`.
|
||
*
|
||
* @param {String} reason
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.onclose = function (reason) {
|
||
debug('close (%s)', reason);
|
||
this.connected = false;
|
||
this.disconnected = true;
|
||
delete this.id;
|
||
this.emit('disconnect', reason);
|
||
};
|
||
|
||
/**
|
||
* Called with socket packet.
|
||
*
|
||
* @param {Object} packet
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.onpacket = function (packet) {
|
||
var sameNamespace = packet.nsp === this.nsp;
|
||
var rootNamespaceError = packet.type === parser.ERROR && packet.nsp === '/';
|
||
|
||
if (!sameNamespace && !rootNamespaceError) return;
|
||
|
||
switch (packet.type) {
|
||
case parser.CONNECT:
|
||
this.onconnect();
|
||
break;
|
||
|
||
case parser.EVENT:
|
||
this.onevent(packet);
|
||
break;
|
||
|
||
case parser.BINARY_EVENT:
|
||
this.onevent(packet);
|
||
break;
|
||
|
||
case parser.ACK:
|
||
this.onack(packet);
|
||
break;
|
||
|
||
case parser.BINARY_ACK:
|
||
this.onack(packet);
|
||
break;
|
||
|
||
case parser.DISCONNECT:
|
||
this.ondisconnect();
|
||
break;
|
||
|
||
case parser.ERROR:
|
||
this.emit('error', packet.data);
|
||
break;
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Called upon a server event.
|
||
*
|
||
* @param {Object} packet
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.onevent = function (packet) {
|
||
var args = packet.data || [];
|
||
debug('emitting event %j', args);
|
||
|
||
if (null != packet.id) {
|
||
debug('attaching ack callback to event');
|
||
args.push(this.ack(packet.id));
|
||
}
|
||
|
||
if (this.connected) {
|
||
emit.apply(this, args);
|
||
} else {
|
||
this.receiveBuffer.push(args);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Produces an ack callback to emit with an event.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.ack = function (id) {
|
||
var self = this;
|
||
var sent = false;
|
||
return function () {
|
||
// prevent double callbacks
|
||
if (sent) return;
|
||
sent = true;
|
||
var args = toArray(arguments);
|
||
debug('sending ack %j', args);
|
||
|
||
self.packet({
|
||
type: hasBin(args) ? parser.BINARY_ACK : parser.ACK,
|
||
id: id,
|
||
data: args
|
||
});
|
||
};
|
||
};
|
||
|
||
/**
|
||
* Called upon a server acknowlegement.
|
||
*
|
||
* @param {Object} packet
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.onack = function (packet) {
|
||
var ack = this.acks[packet.id];
|
||
if ('function' === typeof ack) {
|
||
debug('calling ack %s with %j', packet.id, packet.data);
|
||
ack.apply(this, packet.data);
|
||
delete this.acks[packet.id];
|
||
} else {
|
||
debug('bad ack %s', packet.id);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Called upon server connect.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.onconnect = function () {
|
||
this.connected = true;
|
||
this.disconnected = false;
|
||
this.emit('connect');
|
||
this.emitBuffered();
|
||
};
|
||
|
||
/**
|
||
* Emit buffered events (received and emitted).
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.emitBuffered = function () {
|
||
var i;
|
||
for (i = 0; i < this.receiveBuffer.length; i++) {
|
||
emit.apply(this, this.receiveBuffer[i]);
|
||
}
|
||
this.receiveBuffer = [];
|
||
|
||
for (i = 0; i < this.sendBuffer.length; i++) {
|
||
this.packet(this.sendBuffer[i]);
|
||
}
|
||
this.sendBuffer = [];
|
||
};
|
||
|
||
/**
|
||
* Called upon server disconnect.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.ondisconnect = function () {
|
||
debug('server disconnect (%s)', this.nsp);
|
||
this.destroy();
|
||
this.onclose('io server disconnect');
|
||
};
|
||
|
||
/**
|
||
* Called upon forced client/server side disconnections,
|
||
* this method ensures the manager stops tracking us and
|
||
* that reconnections don't get triggered for this.
|
||
*
|
||
* @api private.
|
||
*/
|
||
|
||
Socket.prototype.destroy = function () {
|
||
if (this.subs) {
|
||
// clean subscriptions to avoid reconnections
|
||
for (var i = 0; i < this.subs.length; i++) {
|
||
this.subs[i].destroy();
|
||
}
|
||
this.subs = null;
|
||
}
|
||
|
||
this.io.destroy(this);
|
||
};
|
||
|
||
/**
|
||
* Disconnects the socket manually.
|
||
*
|
||
* @return {Socket} self
|
||
* @api public
|
||
*/
|
||
|
||
Socket.prototype.close =
|
||
Socket.prototype.disconnect = function () {
|
||
if (this.connected) {
|
||
debug('performing disconnect (%s)', this.nsp);
|
||
this.packet({ type: parser.DISCONNECT });
|
||
}
|
||
|
||
// remove socket from pool
|
||
this.destroy();
|
||
|
||
if (this.connected) {
|
||
// fire events
|
||
this.onclose('io client disconnect');
|
||
}
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Sets the compress flag.
|
||
*
|
||
* @param {Boolean} if `true`, compresses the sending data
|
||
* @return {Socket} self
|
||
* @api public
|
||
*/
|
||
|
||
Socket.prototype.compress = function (compress) {
|
||
this.flags.compress = compress;
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Sets the binary flag
|
||
*
|
||
* @param {Boolean} whether the emitted data contains binary
|
||
* @return {Socket} self
|
||
* @api public
|
||
*/
|
||
|
||
Socket.prototype.binary = function (binary) {
|
||
this.flags.binary = binary;
|
||
return this;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 71 */
|
||
/***/ (function(module, exports) {
|
||
|
||
|
||
/**
|
||
* Module exports.
|
||
*/
|
||
|
||
module.exports = on;
|
||
|
||
/**
|
||
* Helper for subscriptions.
|
||
*
|
||
* @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter`
|
||
* @param {String} event name
|
||
* @param {Function} callback
|
||
* @api public
|
||
*/
|
||
|
||
function on (obj, ev, fn) {
|
||
obj.on(ev, fn);
|
||
return {
|
||
destroy: function () {
|
||
obj.removeListener(ev, fn);
|
||
}
|
||
};
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 72 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/**
|
||
* Slice reference.
|
||
*/
|
||
|
||
var slice = [].slice;
|
||
|
||
/**
|
||
* Bind `obj` to `fn`.
|
||
*
|
||
* @param {Object} obj
|
||
* @param {Function|String} fn or string
|
||
* @return {Function}
|
||
* @api public
|
||
*/
|
||
|
||
module.exports = function(obj, fn){
|
||
if ('string' == typeof fn) fn = obj[fn];
|
||
if ('function' != typeof fn) throw new Error('bind() requires a function');
|
||
var args = slice.call(arguments, 2);
|
||
return function(){
|
||
return fn.apply(obj, args.concat(slice.call(arguments)));
|
||
}
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 73 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
/**
|
||
* An error thrown when an action is invalid because the object has been
|
||
* unsubscribed.
|
||
*
|
||
* @see {@link Subject}
|
||
* @see {@link BehaviorSubject}
|
||
*
|
||
* @class ObjectUnsubscribedError
|
||
*/
|
||
var ObjectUnsubscribedError = (function (_super) {
|
||
__extends(ObjectUnsubscribedError, _super);
|
||
function ObjectUnsubscribedError() {
|
||
var err = _super.call(this, 'object unsubscribed');
|
||
this.name = err.name = 'ObjectUnsubscribedError';
|
||
this.stack = err.stack;
|
||
this.message = err.message;
|
||
}
|
||
return ObjectUnsubscribedError;
|
||
}(Error));
|
||
exports.ObjectUnsubscribedError = ObjectUnsubscribedError;
|
||
//# sourceMappingURL=ObjectUnsubscribedError.js.map
|
||
|
||
/***/ }),
|
||
/* 74 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var multicast_1 = __webpack_require__(135);
|
||
var refCount_1 = __webpack_require__(75);
|
||
var Subject_1 = __webpack_require__(37);
|
||
function shareSubjectFactory() {
|
||
return new Subject_1.Subject();
|
||
}
|
||
/**
|
||
* Returns a new Observable that multicasts (shares) the original Observable. As long as there is at least one
|
||
* Subscriber this Observable will be subscribed and emitting data. When all subscribers have unsubscribed it will
|
||
* unsubscribe from the source Observable. Because the Observable is multicasting it makes the stream `hot`.
|
||
* This is an alias for .multicast(() => new Subject()).refCount().
|
||
*
|
||
* <img src="./img/share.png" width="100%">
|
||
*
|
||
* @return {Observable<T>} An Observable that upon connection causes the source Observable to emit items to its Observers.
|
||
* @method share
|
||
* @owner Observable
|
||
*/
|
||
function share() {
|
||
return function (source) { return refCount_1.refCount()(multicast_1.multicast(shareSubjectFactory)(source)); };
|
||
}
|
||
exports.share = share;
|
||
;
|
||
//# sourceMappingURL=share.js.map
|
||
|
||
/***/ }),
|
||
/* 75 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
function refCount() {
|
||
return function refCountOperatorFunction(source) {
|
||
return source.lift(new RefCountOperator(source));
|
||
};
|
||
}
|
||
exports.refCount = refCount;
|
||
var RefCountOperator = (function () {
|
||
function RefCountOperator(connectable) {
|
||
this.connectable = connectable;
|
||
}
|
||
RefCountOperator.prototype.call = function (subscriber, source) {
|
||
var connectable = this.connectable;
|
||
connectable._refCount++;
|
||
var refCounter = new RefCountSubscriber(subscriber, connectable);
|
||
var subscription = source.subscribe(refCounter);
|
||
if (!refCounter.closed) {
|
||
refCounter.connection = connectable.connect();
|
||
}
|
||
return subscription;
|
||
};
|
||
return RefCountOperator;
|
||
}());
|
||
var RefCountSubscriber = (function (_super) {
|
||
__extends(RefCountSubscriber, _super);
|
||
function RefCountSubscriber(destination, connectable) {
|
||
_super.call(this, destination);
|
||
this.connectable = connectable;
|
||
}
|
||
/** @deprecated internal use only */ RefCountSubscriber.prototype._unsubscribe = function () {
|
||
var connectable = this.connectable;
|
||
if (!connectable) {
|
||
this.connection = null;
|
||
return;
|
||
}
|
||
this.connectable = null;
|
||
var refCount = connectable._refCount;
|
||
if (refCount <= 0) {
|
||
this.connection = null;
|
||
return;
|
||
}
|
||
connectable._refCount = refCount - 1;
|
||
if (refCount > 1) {
|
||
this.connection = null;
|
||
return;
|
||
}
|
||
///
|
||
// Compare the local RefCountSubscriber's connection Subscription to the
|
||
// connection Subscription on the shared ConnectableObservable. In cases
|
||
// where the ConnectableObservable source synchronously emits values, and
|
||
// the RefCountSubscriber's downstream Observers synchronously unsubscribe,
|
||
// execution continues to here before the RefCountOperator has a chance to
|
||
// supply the RefCountSubscriber with the shared connection Subscription.
|
||
// For example:
|
||
// ```
|
||
// Observable.range(0, 10)
|
||
// .publish()
|
||
// .refCount()
|
||
// .take(5)
|
||
// .subscribe();
|
||
// ```
|
||
// In order to account for this case, RefCountSubscriber should only dispose
|
||
// the ConnectableObservable's shared connection Subscription if the
|
||
// connection Subscription exists, *and* either:
|
||
// a. RefCountSubscriber doesn't have a reference to the shared connection
|
||
// Subscription yet, or,
|
||
// b. RefCountSubscriber's connection Subscription reference is identical
|
||
// to the shared connection Subscription
|
||
///
|
||
var connection = this.connection;
|
||
var sharedConnection = connectable._connection;
|
||
this.connection = null;
|
||
if (sharedConnection && (!connection || sharedConnection === connection)) {
|
||
sharedConnection.unsubscribe();
|
||
}
|
||
};
|
||
return RefCountSubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
//# sourceMappingURL=refCount.js.map
|
||
|
||
/***/ }),
|
||
/* 76 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var map_1 = __webpack_require__(2);
|
||
var tap_1 = __webpack_require__(5);
|
||
var dom_effects_1 = __webpack_require__(19);
|
||
var Log = __webpack_require__(14);
|
||
function propSetDomEffect(xs) {
|
||
return xs.pipe(tap_1.tap(function (event) {
|
||
var target = event.target, prop = event.prop, value = event.value;
|
||
target[prop] = value;
|
||
}), map_1.map(function (e) {
|
||
return Log.consoleInfo("[PropSet]", e.target, e.prop + " = " + e.pathname);
|
||
}));
|
||
}
|
||
exports.propSetDomEffect = propSetDomEffect;
|
||
function propSet(incoming) {
|
||
return [dom_effects_1.Events.PropSet, incoming];
|
||
}
|
||
exports.propSet = propSet;
|
||
|
||
|
||
/***/ }),
|
||
/* 77 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var isArray_1 = __webpack_require__(26);
|
||
function isNumeric(val) {
|
||
// parseFloat NaNs numeric-cast false positives (null|true|false|"")
|
||
// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
|
||
// subtraction forces infinities to NaN
|
||
// adding 1 corrects loss of precision from parseFloat (#15100)
|
||
return !isArray_1.isArray(val) && (val - parseFloat(val) + 1) >= 0;
|
||
}
|
||
exports.isNumeric = isNumeric;
|
||
;
|
||
//# sourceMappingURL=isNumeric.js.map
|
||
|
||
/***/ }),
|
||
/* 78 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var AsyncAction_1 = __webpack_require__(79);
|
||
var AsyncScheduler_1 = __webpack_require__(80);
|
||
/**
|
||
*
|
||
* Async Scheduler
|
||
*
|
||
* <span class="informal">Schedule task as if you used setTimeout(task, duration)</span>
|
||
*
|
||
* `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript
|
||
* event loop queue. It is best used to delay tasks in time or to schedule tasks repeating
|
||
* in intervals.
|
||
*
|
||
* If you just want to "defer" task, that is to perform it right after currently
|
||
* executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),
|
||
* better choice will be the {@link asap} scheduler.
|
||
*
|
||
* @example <caption>Use async scheduler to delay task</caption>
|
||
* const task = () => console.log('it works!');
|
||
*
|
||
* Rx.Scheduler.async.schedule(task, 2000);
|
||
*
|
||
* // After 2 seconds logs:
|
||
* // "it works!"
|
||
*
|
||
*
|
||
* @example <caption>Use async scheduler to repeat task in intervals</caption>
|
||
* function task(state) {
|
||
* console.log(state);
|
||
* this.schedule(state + 1, 1000); // `this` references currently executing Action,
|
||
* // which we reschedule with new state and delay
|
||
* }
|
||
*
|
||
* Rx.Scheduler.async.schedule(task, 3000, 0);
|
||
*
|
||
* // Logs:
|
||
* // 0 after 3s
|
||
* // 1 after 4s
|
||
* // 2 after 5s
|
||
* // 3 after 6s
|
||
*
|
||
* @static true
|
||
* @name async
|
||
* @owner Scheduler
|
||
*/
|
||
exports.async = new AsyncScheduler_1.AsyncScheduler(AsyncAction_1.AsyncAction);
|
||
//# sourceMappingURL=async.js.map
|
||
|
||
/***/ }),
|
||
/* 79 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var root_1 = __webpack_require__(7);
|
||
var Action_1 = __webpack_require__(139);
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var AsyncAction = (function (_super) {
|
||
__extends(AsyncAction, _super);
|
||
function AsyncAction(scheduler, work) {
|
||
_super.call(this, scheduler, work);
|
||
this.scheduler = scheduler;
|
||
this.pending = false;
|
||
this.work = work;
|
||
}
|
||
AsyncAction.prototype.schedule = function (state, delay) {
|
||
if (delay === void 0) { delay = 0; }
|
||
if (this.closed) {
|
||
return this;
|
||
}
|
||
// Always replace the current state with the new state.
|
||
this.state = state;
|
||
// Set the pending flag indicating that this action has been scheduled, or
|
||
// has recursively rescheduled itself.
|
||
this.pending = true;
|
||
var id = this.id;
|
||
var scheduler = this.scheduler;
|
||
//
|
||
// Important implementation note:
|
||
//
|
||
// Actions only execute once by default, unless rescheduled from within the
|
||
// scheduled callback. This allows us to implement single and repeat
|
||
// actions via the same code path, without adding API surface area, as well
|
||
// as mimic traditional recursion but across asynchronous boundaries.
|
||
//
|
||
// However, JS runtimes and timers distinguish between intervals achieved by
|
||
// serial `setTimeout` calls vs. a single `setInterval` call. An interval of
|
||
// serial `setTimeout` calls can be individually delayed, which delays
|
||
// scheduling the next `setTimeout`, and so on. `setInterval` attempts to
|
||
// guarantee the interval callback will be invoked more precisely to the
|
||
// interval period, regardless of load.
|
||
//
|
||
// Therefore, we use `setInterval` to schedule single and repeat actions.
|
||
// If the action reschedules itself with the same delay, the interval is not
|
||
// canceled. If the action doesn't reschedule, or reschedules with a
|
||
// different delay, the interval will be canceled after scheduled callback
|
||
// execution.
|
||
//
|
||
if (id != null) {
|
||
this.id = this.recycleAsyncId(scheduler, id, delay);
|
||
}
|
||
this.delay = delay;
|
||
// If this action has already an async Id, don't request a new one.
|
||
this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);
|
||
return this;
|
||
};
|
||
AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {
|
||
if (delay === void 0) { delay = 0; }
|
||
return root_1.root.setInterval(scheduler.flush.bind(scheduler, this), delay);
|
||
};
|
||
AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
|
||
if (delay === void 0) { delay = 0; }
|
||
// If this action is rescheduled with the same delay time, don't clear the interval id.
|
||
if (delay !== null && this.delay === delay && this.pending === false) {
|
||
return id;
|
||
}
|
||
// Otherwise, if the action's delay time is different from the current delay,
|
||
// or the action has been rescheduled before it's executed, clear the interval id
|
||
return root_1.root.clearInterval(id) && undefined || undefined;
|
||
};
|
||
/**
|
||
* Immediately executes this action and the `work` it contains.
|
||
* @return {any}
|
||
*/
|
||
AsyncAction.prototype.execute = function (state, delay) {
|
||
if (this.closed) {
|
||
return new Error('executing a cancelled action');
|
||
}
|
||
this.pending = false;
|
||
var error = this._execute(state, delay);
|
||
if (error) {
|
||
return error;
|
||
}
|
||
else if (this.pending === false && this.id != null) {
|
||
// Dequeue if the action didn't reschedule itself. Don't call
|
||
// unsubscribe(), because the action could reschedule later.
|
||
// For example:
|
||
// ```
|
||
// scheduler.schedule(function doWork(counter) {
|
||
// /* ... I'm a busy worker bee ... */
|
||
// var originalAction = this;
|
||
// /* wait 100ms before rescheduling the action */
|
||
// setTimeout(function () {
|
||
// originalAction.schedule(counter + 1);
|
||
// }, 100);
|
||
// }, 1000);
|
||
// ```
|
||
this.id = this.recycleAsyncId(this.scheduler, this.id, null);
|
||
}
|
||
};
|
||
AsyncAction.prototype._execute = function (state, delay) {
|
||
var errored = false;
|
||
var errorValue = undefined;
|
||
try {
|
||
this.work(state);
|
||
}
|
||
catch (e) {
|
||
errored = true;
|
||
errorValue = !!e && e || new Error(e);
|
||
}
|
||
if (errored) {
|
||
this.unsubscribe();
|
||
return errorValue;
|
||
}
|
||
};
|
||
/** @deprecated internal use only */ AsyncAction.prototype._unsubscribe = function () {
|
||
var id = this.id;
|
||
var scheduler = this.scheduler;
|
||
var actions = scheduler.actions;
|
||
var index = actions.indexOf(this);
|
||
this.work = null;
|
||
this.state = null;
|
||
this.pending = false;
|
||
this.scheduler = null;
|
||
if (index !== -1) {
|
||
actions.splice(index, 1);
|
||
}
|
||
if (id != null) {
|
||
this.id = this.recycleAsyncId(scheduler, id, null);
|
||
}
|
||
this.delay = null;
|
||
};
|
||
return AsyncAction;
|
||
}(Action_1.Action));
|
||
exports.AsyncAction = AsyncAction;
|
||
//# sourceMappingURL=AsyncAction.js.map
|
||
|
||
/***/ }),
|
||
/* 80 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Scheduler_1 = __webpack_require__(140);
|
||
var AsyncScheduler = (function (_super) {
|
||
__extends(AsyncScheduler, _super);
|
||
function AsyncScheduler() {
|
||
_super.apply(this, arguments);
|
||
this.actions = [];
|
||
/**
|
||
* A flag to indicate whether the Scheduler is currently executing a batch of
|
||
* queued actions.
|
||
* @type {boolean}
|
||
*/
|
||
this.active = false;
|
||
/**
|
||
* An internal ID used to track the latest asynchronous task such as those
|
||
* coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and
|
||
* others.
|
||
* @type {any}
|
||
*/
|
||
this.scheduled = undefined;
|
||
}
|
||
AsyncScheduler.prototype.flush = function (action) {
|
||
var actions = this.actions;
|
||
if (this.active) {
|
||
actions.push(action);
|
||
return;
|
||
}
|
||
var error;
|
||
this.active = true;
|
||
do {
|
||
if (error = action.execute(action.state, action.delay)) {
|
||
break;
|
||
}
|
||
} while (action = actions.shift()); // exhaust the scheduler queue
|
||
this.active = false;
|
||
if (error) {
|
||
while (action = actions.shift()) {
|
||
action.unsubscribe();
|
||
}
|
||
throw error;
|
||
}
|
||
};
|
||
return AsyncScheduler;
|
||
}(Scheduler_1.Scheduler));
|
||
exports.AsyncScheduler = AsyncScheduler;
|
||
//# sourceMappingURL=AsyncScheduler.js.map
|
||
|
||
/***/ }),
|
||
/* 81 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var map_1 = __webpack_require__(2);
|
||
var dom_effects_1 = __webpack_require__(19);
|
||
var tap_1 = __webpack_require__(5);
|
||
var Log = __webpack_require__(14);
|
||
function styleSetDomEffect(xs) {
|
||
return xs.pipe(tap_1.tap(function (event) {
|
||
var style = event.style, styleName = event.styleName, newValue = event.newValue;
|
||
style[styleName] = newValue;
|
||
}), map_1.map(function (e) { return Log.consoleInfo("[StyleSet] " + e.styleName + " = " + e.pathName); }));
|
||
}
|
||
exports.styleSetDomEffect = styleSetDomEffect;
|
||
function styleSet(incoming) {
|
||
return [dom_effects_1.Events.StyleSet, incoming];
|
||
}
|
||
exports.styleSet = styleSet;
|
||
|
||
|
||
/***/ }),
|
||
/* 82 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var map_1 = __webpack_require__(2);
|
||
var filter_1 = __webpack_require__(4);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var Log = __webpack_require__(14);
|
||
var pluck_1 = __webpack_require__(6);
|
||
var dom_effects_1 = __webpack_require__(19);
|
||
function linkReplaceDomEffect(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.option$.pipe(pluck_1.pluck("injectNotification"))), filter_1.filter(function (_a) {
|
||
var inject = _a[1];
|
||
return inject;
|
||
}), map_1.map(function (_a) {
|
||
var incoming = _a[0], inject = _a[1];
|
||
var message = "[LinkReplace] " + incoming.basename;
|
||
if (inject === "overlay") {
|
||
return Log.overlayInfo(message);
|
||
}
|
||
return Log.consoleInfo(message);
|
||
}));
|
||
}
|
||
exports.linkReplaceDomEffect = linkReplaceDomEffect;
|
||
function linkReplace(incoming) {
|
||
return [dom_effects_1.Events.LinkReplace, incoming];
|
||
}
|
||
exports.linkReplace = linkReplace;
|
||
|
||
|
||
/***/ }),
|
||
/* 83 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var ignoreElements_1 = __webpack_require__(11);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var tap_1 = __webpack_require__(5);
|
||
var dom_effects_1 = __webpack_require__(19);
|
||
function setScroll(x, y) {
|
||
return [dom_effects_1.Events.SetScroll, { x: x, y: y }];
|
||
}
|
||
exports.setScroll = setScroll;
|
||
function setScrollDomEffect(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.window$), tap_1.tap(function (_a) {
|
||
var event = _a[0], window = _a[1];
|
||
return window.scrollTo(event.x, event.y);
|
||
}), ignoreElements_1.ignoreElements());
|
||
}
|
||
exports.setScrollDomEffect = setScrollDomEffect;
|
||
|
||
|
||
/***/ }),
|
||
/* 84 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var ignoreElements_1 = __webpack_require__(11);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var tap_1 = __webpack_require__(5);
|
||
var dom_effects_1 = __webpack_require__(19);
|
||
function setWindowNameDomEffect(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.window$), tap_1.tap(function (_a) {
|
||
var value = _a[0], window = _a[1];
|
||
return (window.name = value);
|
||
}), ignoreElements_1.ignoreElements());
|
||
}
|
||
exports.setWindowNameDomEffect = setWindowNameDomEffect;
|
||
function setWindowName(incoming) {
|
||
return [dom_effects_1.Events.SetWindowName, incoming];
|
||
}
|
||
exports.setWindowName = setWindowName;
|
||
|
||
|
||
/***/ }),
|
||
/* 85 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var socket_messages_1 = __webpack_require__(10);
|
||
var pluck_1 = __webpack_require__(6);
|
||
var filter_1 = __webpack_require__(4);
|
||
var map_1 = __webpack_require__(2);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var effects_1 = __webpack_require__(8);
|
||
function outgoing(data, tagName, index, mappingIndex) {
|
||
if (mappingIndex === void 0) { mappingIndex = -1; }
|
||
return [
|
||
socket_messages_1.OutgoingSocketEvents.Scroll,
|
||
{ position: data, tagName: tagName, index: index, mappingIndex: mappingIndex }
|
||
];
|
||
}
|
||
exports.outgoing = outgoing;
|
||
function incomingScrollHandler(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.option$.pipe(pluck_1.pluck("ghostMode", "scroll")), inputs.window$.pipe(pluck_1.pluck("location", "pathname"))), filter_1.filter(function (_a) {
|
||
var event = _a[0], canScroll = _a[1], pathname = _a[2];
|
||
return canScroll && event.pathname === pathname;
|
||
}), map_1.map(function (_a) {
|
||
var event = _a[0];
|
||
return [effects_1.EffectNames.BrowserSetScroll, event];
|
||
}));
|
||
}
|
||
exports.incomingScrollHandler = incomingScrollHandler;
|
||
|
||
|
||
/***/ }),
|
||
/* 86 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var effects_1 = __webpack_require__(8);
|
||
var Reloader_1 = __webpack_require__(143);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var mergeMap_1 = __webpack_require__(15);
|
||
function fileReload(event) {
|
||
return [effects_1.EffectNames.FileReload, event];
|
||
}
|
||
exports.fileReload = fileReload;
|
||
/**
|
||
* Attempt to reload files in place
|
||
* @param xs
|
||
* @param inputs
|
||
*/
|
||
function fileReloadEffect(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.option$, inputs.document$, inputs.navigator$), mergeMap_1.mergeMap(function (_a) {
|
||
var event = _a[0], options = _a[1], document = _a[2], navigator = _a[3];
|
||
return Reloader_1.reload(document, navigator)(event, {
|
||
tagNames: options.tagNames,
|
||
liveCSS: true,
|
||
liveImg: true
|
||
});
|
||
}));
|
||
}
|
||
exports.fileReloadEffect = fileReloadEffect;
|
||
|
||
|
||
/***/ }),
|
||
/* 87 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var FromObservable_1 = __webpack_require__(144);
|
||
exports.from = FromObservable_1.FromObservable.create;
|
||
//# sourceMappingURL=from.js.map
|
||
|
||
/***/ }),
|
||
/* 88 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
/**
|
||
* Emits the given constant value on the output Observable every time the source
|
||
* Observable emits a value.
|
||
*
|
||
* <span class="informal">Like {@link map}, but it maps every source value to
|
||
* the same output value every time.</span>
|
||
*
|
||
* <img src="./img/mapTo.png" width="100%">
|
||
*
|
||
* Takes a constant `value` as argument, and emits that whenever the source
|
||
* Observable emits a value. In other words, ignores the actual source value,
|
||
* and simply uses the emission moment to know when to emit the given `value`.
|
||
*
|
||
* @example <caption>Map every click to the string 'Hi'</caption>
|
||
* var clicks = Rx.Observable.fromEvent(document, 'click');
|
||
* var greetings = clicks.mapTo('Hi');
|
||
* greetings.subscribe(x => console.log(x));
|
||
*
|
||
* @see {@link map}
|
||
*
|
||
* @param {any} value The value to map each source value to.
|
||
* @return {Observable} An Observable that emits the given `value` every time
|
||
* the source Observable emits something.
|
||
* @method mapTo
|
||
* @owner Observable
|
||
*/
|
||
function mapTo(value) {
|
||
return function (source) { return source.lift(new MapToOperator(value)); };
|
||
}
|
||
exports.mapTo = mapTo;
|
||
var MapToOperator = (function () {
|
||
function MapToOperator(value) {
|
||
this.value = value;
|
||
}
|
||
MapToOperator.prototype.call = function (subscriber, source) {
|
||
return source.subscribe(new MapToSubscriber(subscriber, this.value));
|
||
};
|
||
return MapToOperator;
|
||
}());
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var MapToSubscriber = (function (_super) {
|
||
__extends(MapToSubscriber, _super);
|
||
function MapToSubscriber(destination, value) {
|
||
_super.call(this, destination);
|
||
this.value = value;
|
||
}
|
||
MapToSubscriber.prototype._next = function (x) {
|
||
this.destination.next(this.value);
|
||
};
|
||
return MapToSubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
//# sourceMappingURL=mapTo.js.map
|
||
|
||
/***/ }),
|
||
/* 89 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var ignoreElements_1 = __webpack_require__(11);
|
||
var tap_1 = __webpack_require__(5);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var effects_1 = __webpack_require__(8);
|
||
function browserSetLocationEffect(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.window$), tap_1.tap(function (_a) {
|
||
var event = _a[0], window = _a[1];
|
||
if (event.path) {
|
||
return (window.location =
|
||
window.location.protocol +
|
||
"//" +
|
||
window.location.host +
|
||
event.path);
|
||
}
|
||
if (event.url) {
|
||
return (window.location = event.url);
|
||
}
|
||
}), ignoreElements_1.ignoreElements());
|
||
}
|
||
exports.browserSetLocationEffect = browserSetLocationEffect;
|
||
function browserSetLocation(input) {
|
||
return [effects_1.EffectNames.BrowserSetLocation, input];
|
||
}
|
||
exports.browserSetLocation = browserSetLocation;
|
||
|
||
|
||
/***/ }),
|
||
/* 90 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var ignoreElements_1 = __webpack_require__(11);
|
||
var tap_1 = __webpack_require__(5);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var effects_1 = __webpack_require__(8);
|
||
function simulateClickEffect(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.window$, inputs.document$), tap_1.tap(function (_a) {
|
||
var event = _a[0], window = _a[1], document = _a[2];
|
||
var elems = document.getElementsByTagName(event.tagName);
|
||
var match = elems[event.index];
|
||
if (match) {
|
||
if (document.createEvent) {
|
||
window.setTimeout(function () {
|
||
var evObj = document.createEvent("MouseEvents");
|
||
evObj.initEvent("click", true, true);
|
||
match.dispatchEvent(evObj);
|
||
}, 0);
|
||
}
|
||
else {
|
||
window.setTimeout(function () {
|
||
if (document.createEventObject) {
|
||
var evObj = document.createEventObject();
|
||
evObj.cancelBubble = true;
|
||
match.fireEvent("on" + "click", evObj);
|
||
}
|
||
}, 0);
|
||
}
|
||
}
|
||
}), ignoreElements_1.ignoreElements());
|
||
}
|
||
exports.simulateClickEffect = simulateClickEffect;
|
||
function simulateClick(event) {
|
||
return [effects_1.EffectNames.SimulateClick, event];
|
||
}
|
||
exports.simulateClick = simulateClick;
|
||
|
||
|
||
/***/ }),
|
||
/* 91 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var tap_1 = __webpack_require__(5);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var effects_1 = __webpack_require__(8);
|
||
function setElementValueEffect(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.document$), tap_1.tap(function (_a) {
|
||
var event = _a[0], document = _a[1];
|
||
var elems = document.getElementsByTagName(event.tagName);
|
||
var match = elems[event.index];
|
||
if (match) {
|
||
match.value = event.value;
|
||
}
|
||
}));
|
||
}
|
||
exports.setElementValueEffect = setElementValueEffect;
|
||
function setElementValue(event) {
|
||
return [effects_1.EffectNames.SetElementValue, event];
|
||
}
|
||
exports.setElementValue = setElementValue;
|
||
|
||
|
||
/***/ }),
|
||
/* 92 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var tap_1 = __webpack_require__(5);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var effects_1 = __webpack_require__(8);
|
||
function setElementToggleValueEffect(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.document$), tap_1.tap(function (_a) {
|
||
var event = _a[0], document = _a[1];
|
||
var elems = document.getElementsByTagName(event.tagName);
|
||
var match = elems[event.index];
|
||
if (match) {
|
||
if (event.type === "radio") {
|
||
match.checked = true;
|
||
}
|
||
if (event.type === "checkbox") {
|
||
match.checked = event.checked;
|
||
}
|
||
if (event.tagName === "SELECT") {
|
||
match.value = event.value;
|
||
}
|
||
}
|
||
}));
|
||
}
|
||
exports.setElementToggleValueEffect = setElementToggleValueEffect;
|
||
function setElementToggleValue(event) {
|
||
return [effects_1.EffectNames.SetElementToggleValue, event];
|
||
}
|
||
exports.setElementToggleValue = setElementToggleValue;
|
||
|
||
|
||
/***/ }),
|
||
/* 93 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var effects_1 = __webpack_require__(8);
|
||
var tap_1 = __webpack_require__(5);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
function browserReload() {
|
||
return [effects_1.EffectNames.BrowserReload];
|
||
}
|
||
exports.browserReload = browserReload;
|
||
function preBrowserReload() {
|
||
return [effects_1.EffectNames.PreBrowserReload];
|
||
}
|
||
exports.preBrowserReload = preBrowserReload;
|
||
function browserReloadEffect(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.window$), tap_1.tap(function (_a) {
|
||
var window = _a[1];
|
||
return window.location.reload(true);
|
||
}));
|
||
}
|
||
exports.browserReloadEffect = browserReloadEffect;
|
||
|
||
|
||
/***/ }),
|
||
/* 94 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var socket_messages_1 = __webpack_require__(10);
|
||
var pluck_1 = __webpack_require__(6);
|
||
var filter_1 = __webpack_require__(4);
|
||
var map_1 = __webpack_require__(2);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var simulate_click_effect_1 = __webpack_require__(90);
|
||
function outgoing(data) {
|
||
return [socket_messages_1.OutgoingSocketEvents.Click, data];
|
||
}
|
||
exports.outgoing = outgoing;
|
||
function incomingHandler$(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.option$.pipe(pluck_1.pluck("ghostMode", "clicks")), inputs.window$.pipe(pluck_1.pluck("location", "pathname"))), filter_1.filter(function (_a) {
|
||
var event = _a[0], canClick = _a[1], pathname = _a[2];
|
||
return canClick && event.pathname === pathname;
|
||
}), map_1.map(function (_a) {
|
||
var event = _a[0];
|
||
return simulate_click_effect_1.simulateClick(event);
|
||
}));
|
||
}
|
||
exports.incomingHandler$ = incomingHandler$;
|
||
|
||
|
||
/***/ }),
|
||
/* 95 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __assign = (this && this.__assign) || function () {
|
||
__assign = Object.assign || function(t) {
|
||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||
s = arguments[i];
|
||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
||
t[p] = s[p];
|
||
}
|
||
return t;
|
||
};
|
||
return __assign.apply(this, arguments);
|
||
};
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var socket_messages_1 = __webpack_require__(10);
|
||
var pluck_1 = __webpack_require__(6);
|
||
var filter_1 = __webpack_require__(4);
|
||
var map_1 = __webpack_require__(2);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var set_element_value_effect_1 = __webpack_require__(91);
|
||
function outgoing(element, value) {
|
||
return [
|
||
socket_messages_1.OutgoingSocketEvents.Keyup,
|
||
__assign({}, element, { value: value })
|
||
];
|
||
}
|
||
exports.outgoing = outgoing;
|
||
function incomingKeyupHandler(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.option$.pipe(pluck_1.pluck("ghostMode", "forms", "inputs")), inputs.window$.pipe(pluck_1.pluck("location", "pathname"))), filter_1.filter(function (_a) {
|
||
var event = _a[0], canKeyup = _a[1], pathname = _a[2];
|
||
return canKeyup && event.pathname === pathname;
|
||
}), map_1.map(function (_a) {
|
||
var event = _a[0];
|
||
return set_element_value_effect_1.setElementValue(event);
|
||
}));
|
||
}
|
||
exports.incomingKeyupHandler = incomingKeyupHandler;
|
||
|
||
|
||
/***/ }),
|
||
/* 96 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var filter_1 = __webpack_require__(4);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var mergeMap_1 = __webpack_require__(15);
|
||
var concat_1 = __webpack_require__(54);
|
||
var of_1 = __webpack_require__(9);
|
||
var browser_reload_effect_1 = __webpack_require__(93);
|
||
var subscribeOn_1 = __webpack_require__(158);
|
||
var async_1 = __webpack_require__(78);
|
||
function incomingBrowserReload(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.option$), filter_1.filter(function (_a) {
|
||
var event = _a[0], options = _a[1];
|
||
return options.codeSync;
|
||
}), mergeMap_1.mergeMap(reloadBrowserSafe));
|
||
}
|
||
exports.incomingBrowserReload = incomingBrowserReload;
|
||
function reloadBrowserSafe() {
|
||
return concat_1.concat(
|
||
/**
|
||
* Emit a warning message allowing others to do some work
|
||
*/
|
||
of_1.of(browser_reload_effect_1.preBrowserReload()),
|
||
/**
|
||
* On the next tick, perform the reload
|
||
*/
|
||
of_1.of(browser_reload_effect_1.browserReload()).pipe(subscribeOn_1.subscribeOn(async_1.async)));
|
||
}
|
||
exports.reloadBrowserSafe = reloadBrowserSafe;
|
||
|
||
|
||
/***/ }),
|
||
/* 97 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== "undefined" && global) ||
|
||
(typeof self !== "undefined" && self) ||
|
||
window;
|
||
var apply = Function.prototype.apply;
|
||
|
||
// DOM APIs, for completeness
|
||
|
||
exports.setTimeout = function() {
|
||
return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);
|
||
};
|
||
exports.setInterval = function() {
|
||
return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);
|
||
};
|
||
exports.clearTimeout =
|
||
exports.clearInterval = function(timeout) {
|
||
if (timeout) {
|
||
timeout.close();
|
||
}
|
||
};
|
||
|
||
function Timeout(id, clearFn) {
|
||
this._id = id;
|
||
this._clearFn = clearFn;
|
||
}
|
||
Timeout.prototype.unref = Timeout.prototype.ref = function() {};
|
||
Timeout.prototype.close = function() {
|
||
this._clearFn.call(scope, this._id);
|
||
};
|
||
|
||
// Does not start the time, just sets up the members needed.
|
||
exports.enroll = function(item, msecs) {
|
||
clearTimeout(item._idleTimeoutId);
|
||
item._idleTimeout = msecs;
|
||
};
|
||
|
||
exports.unenroll = function(item) {
|
||
clearTimeout(item._idleTimeoutId);
|
||
item._idleTimeout = -1;
|
||
};
|
||
|
||
exports._unrefActive = exports.active = function(item) {
|
||
clearTimeout(item._idleTimeoutId);
|
||
|
||
var msecs = item._idleTimeout;
|
||
if (msecs >= 0) {
|
||
item._idleTimeoutId = setTimeout(function onTimeout() {
|
||
if (item._onTimeout)
|
||
item._onTimeout();
|
||
}, msecs);
|
||
}
|
||
};
|
||
|
||
// setimmediate attaches itself to the global object
|
||
__webpack_require__(163);
|
||
// On some exotic environments, it's not clear which object `setimmediate` was
|
||
// able to install onto. Search each possibility in the same order as the
|
||
// `setimmediate` library.
|
||
exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) ||
|
||
(typeof global !== "undefined" && global.setImmediate) ||
|
||
(this && this.setImmediate);
|
||
exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) ||
|
||
(typeof global !== "undefined" && global.clearImmediate) ||
|
||
(this && this.clearImmediate);
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(24)))
|
||
|
||
/***/ }),
|
||
/* 98 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __assign = (this && this.__assign) || function () {
|
||
__assign = Object.assign || function(t) {
|
||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||
s = arguments[i];
|
||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
||
t[p] = s[p];
|
||
}
|
||
return t;
|
||
};
|
||
return __assign.apply(this, arguments);
|
||
};
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var socket_messages_1 = __webpack_require__(10);
|
||
var pluck_1 = __webpack_require__(6);
|
||
var filter_1 = __webpack_require__(4);
|
||
var map_1 = __webpack_require__(2);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var set_element_toggle_value_effect_1 = __webpack_require__(92);
|
||
function outgoing(element, props) {
|
||
return [
|
||
socket_messages_1.OutgoingSocketEvents.InputToggle,
|
||
__assign({}, element, props)
|
||
];
|
||
}
|
||
exports.outgoing = outgoing;
|
||
function incomingInputsToggles(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.option$.pipe(pluck_1.pluck("ghostMode", "forms", "toggles")), inputs.window$.pipe(pluck_1.pluck("location", "pathname"))), filter_1.filter(function (_a) {
|
||
var toggles = _a[1];
|
||
return toggles === true;
|
||
}), map_1.map(function (_a) {
|
||
var event = _a[0];
|
||
return set_element_toggle_value_effect_1.setElementToggleValue(event);
|
||
}));
|
||
}
|
||
exports.incomingInputsToggles = incomingInputsToggles;
|
||
|
||
|
||
/***/ }),
|
||
/* 99 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__(100);
|
||
|
||
|
||
/***/ }),
|
||
/* 100 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __assign = (this && this.__assign) || function () {
|
||
__assign = Object.assign || function(t) {
|
||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||
s = arguments[i];
|
||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
||
t[p] = s[p];
|
||
}
|
||
return t;
|
||
};
|
||
return __assign.apply(this, arguments);
|
||
};
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var zip_1 = __webpack_require__(101);
|
||
var socket_1 = __webpack_require__(107);
|
||
var notify_1 = __webpack_require__(137);
|
||
var dom_effects_1 = __webpack_require__(19);
|
||
var socket_messages_1 = __webpack_require__(10);
|
||
var merge_1 = __webpack_require__(38);
|
||
var log_1 = __webpack_require__(14);
|
||
var effects_1 = __webpack_require__(8);
|
||
var scroll_restore_1 = __webpack_require__(169);
|
||
var listeners_1 = __webpack_require__(170);
|
||
var groupBy_1 = __webpack_require__(176);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var mergeMap_1 = __webpack_require__(15);
|
||
var share_1 = __webpack_require__(74);
|
||
var filter_1 = __webpack_require__(4);
|
||
var pluck_1 = __webpack_require__(6);
|
||
var of_1 = __webpack_require__(9);
|
||
var window$ = socket_1.initWindow();
|
||
var document$ = socket_1.initDocument();
|
||
var names$ = scroll_restore_1.initWindowName(window);
|
||
var _a = socket_1.initSocket(), socket$ = _a.socket$, io$ = _a.io$;
|
||
var option$ = socket_1.initOptions();
|
||
var navigator$ = of_1.of(navigator);
|
||
var notifyElement$ = notify_1.initNotify(option$.getValue());
|
||
var logInstance$ = log_1.initLogger(option$.getValue());
|
||
var outgoing$ = listeners_1.initListeners(window, document, socket$, option$);
|
||
var inputs = {
|
||
window$: window$,
|
||
document$: document$,
|
||
socket$: socket$,
|
||
option$: option$,
|
||
navigator$: navigator$,
|
||
notifyElement$: notifyElement$,
|
||
logInstance$: logInstance$,
|
||
io$: io$,
|
||
outgoing$: outgoing$
|
||
};
|
||
function getStream(name, inputs) {
|
||
return function (handlers$, inputStream$) {
|
||
return inputStream$.pipe(groupBy_1.groupBy(function (_a) {
|
||
var keyName = _a[0];
|
||
return keyName;
|
||
}), withLatestFrom_1.withLatestFrom(handlers$), filter_1.filter(function (_a) {
|
||
var x = _a[0], handlers = _a[1];
|
||
return typeof handlers[x.key] === "function";
|
||
}), mergeMap_1.mergeMap(function (_a) {
|
||
var x = _a[0], handlers = _a[1];
|
||
return handlers[x.key](x.pipe(pluck_1.pluck(String(1))), inputs);
|
||
}), share_1.share());
|
||
};
|
||
}
|
||
var combinedEffectHandler$ = zip_1.zip(effects_1.effectOutputHandlers$, scroll_restore_1.scrollRestoreHandlers$, function () {
|
||
var args = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
args[_i] = arguments[_i];
|
||
}
|
||
return args.reduce(function (acc, item) { return (__assign({}, acc, item)); }, {});
|
||
});
|
||
var output$ = getStream("[socket]", inputs)(socket_messages_1.socketHandlers$, merge_1.merge(inputs.socket$, outgoing$));
|
||
var effect$ = getStream("[effect]", inputs)(combinedEffectHandler$, output$);
|
||
var dom$ = getStream("[dom-effect]", inputs)(dom_effects_1.domHandlers$, merge_1.merge(effect$, names$));
|
||
var merged$ = merge_1.merge(output$, effect$, dom$);
|
||
var log$ = getStream("[log]", inputs)(log_1.logHandler$, merged$);
|
||
log$.subscribe();
|
||
// resume$.next(true);
|
||
// var socket = require("./socket");
|
||
// var shims = require("./client-shims");
|
||
// var notify = require("./notify");
|
||
// // var codeSync = require("./code-sync");
|
||
// const { BrowserSync } = require("./browser-sync");
|
||
// var ghostMode = require("./ghostmode");
|
||
// var events = require("./events");
|
||
// var utils = require("./browser.utils");
|
||
//
|
||
// const mitt = require("mitt").default;
|
||
//
|
||
// var shouldReload = false;
|
||
// var initialised = false;
|
||
//
|
||
// /**
|
||
// * @param options
|
||
// */
|
||
// function init(options: bs.InitOptions) {
|
||
// if (shouldReload && options.reloadOnRestart) {
|
||
// utils.reloadBrowser();
|
||
// }
|
||
//
|
||
// var BS = window.___browserSync___ || {};
|
||
// var emitter = mitt();
|
||
//
|
||
// if (!BS.client) {
|
||
// BS.client = true;
|
||
//
|
||
// var browserSync = new BrowserSync({ options, emitter, socket });
|
||
//
|
||
// // codeSync.init(browserSync);
|
||
//
|
||
// // // Always init on page load
|
||
// // ghostMode.init(browserSync);
|
||
// //
|
||
// // notify.init(browserSync);
|
||
// //
|
||
// // if (options.notify) {
|
||
// // notify.flash("Connected to BrowserSync");
|
||
// // }
|
||
// }
|
||
//
|
||
// // if (!initialised) {
|
||
// // socket.on("disconnect", function() {
|
||
// // if (options.notify) {
|
||
// // notify.flash("Disconnected from BrowserSync");
|
||
// // }
|
||
// // shouldReload = true;
|
||
// // });
|
||
// // initialised = true;
|
||
// // }
|
||
// }
|
||
//
|
||
// /**
|
||
// * Handle individual socket connections
|
||
// */
|
||
// socket.on("connection", init);
|
||
|
||
|
||
/***/ }),
|
||
/* 101 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var zip_1 = __webpack_require__(102);
|
||
exports.zip = zip_1.zipStatic;
|
||
//# sourceMappingURL=zip.js.map
|
||
|
||
/***/ }),
|
||
/* 102 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var ArrayObservable_1 = __webpack_require__(23);
|
||
var isArray_1 = __webpack_require__(26);
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
var OuterSubscriber_1 = __webpack_require__(29);
|
||
var subscribeToResult_1 = __webpack_require__(30);
|
||
var iterator_1 = __webpack_require__(31);
|
||
/* tslint:enable:max-line-length */
|
||
/**
|
||
* @param observables
|
||
* @return {Observable<R>}
|
||
* @method zip
|
||
* @owner Observable
|
||
*/
|
||
function zip() {
|
||
var observables = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
observables[_i - 0] = arguments[_i];
|
||
}
|
||
return function zipOperatorFunction(source) {
|
||
return source.lift.call(zipStatic.apply(void 0, [source].concat(observables)));
|
||
};
|
||
}
|
||
exports.zip = zip;
|
||
/* tslint:enable:max-line-length */
|
||
/**
|
||
* Combines multiple Observables to create an Observable whose values are calculated from the values, in order, of each
|
||
* of its input Observables.
|
||
*
|
||
* If the latest parameter is a function, this function is used to compute the created value from the input values.
|
||
* Otherwise, an array of the input values is returned.
|
||
*
|
||
* @example <caption>Combine age and name from different sources</caption>
|
||
*
|
||
* let age$ = Observable.of<number>(27, 25, 29);
|
||
* let name$ = Observable.of<string>('Foo', 'Bar', 'Beer');
|
||
* let isDev$ = Observable.of<boolean>(true, true, false);
|
||
*
|
||
* Observable
|
||
* .zip(age$,
|
||
* name$,
|
||
* isDev$,
|
||
* (age: number, name: string, isDev: boolean) => ({ age, name, isDev }))
|
||
* .subscribe(x => console.log(x));
|
||
*
|
||
* // outputs
|
||
* // { age: 27, name: 'Foo', isDev: true }
|
||
* // { age: 25, name: 'Bar', isDev: true }
|
||
* // { age: 29, name: 'Beer', isDev: false }
|
||
*
|
||
* @param observables
|
||
* @return {Observable<R>}
|
||
* @static true
|
||
* @name zip
|
||
* @owner Observable
|
||
*/
|
||
function zipStatic() {
|
||
var observables = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
observables[_i - 0] = arguments[_i];
|
||
}
|
||
var project = observables[observables.length - 1];
|
||
if (typeof project === 'function') {
|
||
observables.pop();
|
||
}
|
||
return new ArrayObservable_1.ArrayObservable(observables).lift(new ZipOperator(project));
|
||
}
|
||
exports.zipStatic = zipStatic;
|
||
var ZipOperator = (function () {
|
||
function ZipOperator(project) {
|
||
this.project = project;
|
||
}
|
||
ZipOperator.prototype.call = function (subscriber, source) {
|
||
return source.subscribe(new ZipSubscriber(subscriber, this.project));
|
||
};
|
||
return ZipOperator;
|
||
}());
|
||
exports.ZipOperator = ZipOperator;
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var ZipSubscriber = (function (_super) {
|
||
__extends(ZipSubscriber, _super);
|
||
function ZipSubscriber(destination, project, values) {
|
||
if (values === void 0) { values = Object.create(null); }
|
||
_super.call(this, destination);
|
||
this.iterators = [];
|
||
this.active = 0;
|
||
this.project = (typeof project === 'function') ? project : null;
|
||
this.values = values;
|
||
}
|
||
ZipSubscriber.prototype._next = function (value) {
|
||
var iterators = this.iterators;
|
||
if (isArray_1.isArray(value)) {
|
||
iterators.push(new StaticArrayIterator(value));
|
||
}
|
||
else if (typeof value[iterator_1.iterator] === 'function') {
|
||
iterators.push(new StaticIterator(value[iterator_1.iterator]()));
|
||
}
|
||
else {
|
||
iterators.push(new ZipBufferIterator(this.destination, this, value));
|
||
}
|
||
};
|
||
ZipSubscriber.prototype._complete = function () {
|
||
var iterators = this.iterators;
|
||
var len = iterators.length;
|
||
if (len === 0) {
|
||
this.destination.complete();
|
||
return;
|
||
}
|
||
this.active = len;
|
||
for (var i = 0; i < len; i++) {
|
||
var iterator = iterators[i];
|
||
if (iterator.stillUnsubscribed) {
|
||
this.add(iterator.subscribe(iterator, i));
|
||
}
|
||
else {
|
||
this.active--; // not an observable
|
||
}
|
||
}
|
||
};
|
||
ZipSubscriber.prototype.notifyInactive = function () {
|
||
this.active--;
|
||
if (this.active === 0) {
|
||
this.destination.complete();
|
||
}
|
||
};
|
||
ZipSubscriber.prototype.checkIterators = function () {
|
||
var iterators = this.iterators;
|
||
var len = iterators.length;
|
||
var destination = this.destination;
|
||
// abort if not all of them have values
|
||
for (var i = 0; i < len; i++) {
|
||
var iterator = iterators[i];
|
||
if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {
|
||
return;
|
||
}
|
||
}
|
||
var shouldComplete = false;
|
||
var args = [];
|
||
for (var i = 0; i < len; i++) {
|
||
var iterator = iterators[i];
|
||
var result = iterator.next();
|
||
// check to see if it's completed now that you've gotten
|
||
// the next value.
|
||
if (iterator.hasCompleted()) {
|
||
shouldComplete = true;
|
||
}
|
||
if (result.done) {
|
||
destination.complete();
|
||
return;
|
||
}
|
||
args.push(result.value);
|
||
}
|
||
if (this.project) {
|
||
this._tryProject(args);
|
||
}
|
||
else {
|
||
destination.next(args);
|
||
}
|
||
if (shouldComplete) {
|
||
destination.complete();
|
||
}
|
||
};
|
||
ZipSubscriber.prototype._tryProject = function (args) {
|
||
var result;
|
||
try {
|
||
result = this.project.apply(this, args);
|
||
}
|
||
catch (err) {
|
||
this.destination.error(err);
|
||
return;
|
||
}
|
||
this.destination.next(result);
|
||
};
|
||
return ZipSubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
exports.ZipSubscriber = ZipSubscriber;
|
||
var StaticIterator = (function () {
|
||
function StaticIterator(iterator) {
|
||
this.iterator = iterator;
|
||
this.nextResult = iterator.next();
|
||
}
|
||
StaticIterator.prototype.hasValue = function () {
|
||
return true;
|
||
};
|
||
StaticIterator.prototype.next = function () {
|
||
var result = this.nextResult;
|
||
this.nextResult = this.iterator.next();
|
||
return result;
|
||
};
|
||
StaticIterator.prototype.hasCompleted = function () {
|
||
var nextResult = this.nextResult;
|
||
return nextResult && nextResult.done;
|
||
};
|
||
return StaticIterator;
|
||
}());
|
||
var StaticArrayIterator = (function () {
|
||
function StaticArrayIterator(array) {
|
||
this.array = array;
|
||
this.index = 0;
|
||
this.length = 0;
|
||
this.length = array.length;
|
||
}
|
||
StaticArrayIterator.prototype[iterator_1.iterator] = function () {
|
||
return this;
|
||
};
|
||
StaticArrayIterator.prototype.next = function (value) {
|
||
var i = this.index++;
|
||
var array = this.array;
|
||
return i < this.length ? { value: array[i], done: false } : { value: null, done: true };
|
||
};
|
||
StaticArrayIterator.prototype.hasValue = function () {
|
||
return this.array.length > this.index;
|
||
};
|
||
StaticArrayIterator.prototype.hasCompleted = function () {
|
||
return this.array.length === this.index;
|
||
};
|
||
return StaticArrayIterator;
|
||
}());
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var ZipBufferIterator = (function (_super) {
|
||
__extends(ZipBufferIterator, _super);
|
||
function ZipBufferIterator(destination, parent, observable) {
|
||
_super.call(this, destination);
|
||
this.parent = parent;
|
||
this.observable = observable;
|
||
this.stillUnsubscribed = true;
|
||
this.buffer = [];
|
||
this.isComplete = false;
|
||
}
|
||
ZipBufferIterator.prototype[iterator_1.iterator] = function () {
|
||
return this;
|
||
};
|
||
// NOTE: there is actually a name collision here with Subscriber.next and Iterator.next
|
||
// this is legit because `next()` will never be called by a subscription in this case.
|
||
ZipBufferIterator.prototype.next = function () {
|
||
var buffer = this.buffer;
|
||
if (buffer.length === 0 && this.isComplete) {
|
||
return { value: null, done: true };
|
||
}
|
||
else {
|
||
return { value: buffer.shift(), done: false };
|
||
}
|
||
};
|
||
ZipBufferIterator.prototype.hasValue = function () {
|
||
return this.buffer.length > 0;
|
||
};
|
||
ZipBufferIterator.prototype.hasCompleted = function () {
|
||
return this.buffer.length === 0 && this.isComplete;
|
||
};
|
||
ZipBufferIterator.prototype.notifyComplete = function () {
|
||
if (this.buffer.length > 0) {
|
||
this.isComplete = true;
|
||
this.parent.notifyInactive();
|
||
}
|
||
else {
|
||
this.destination.complete();
|
||
}
|
||
};
|
||
ZipBufferIterator.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
|
||
this.buffer.push(innerValue);
|
||
this.parent.checkIterators();
|
||
};
|
||
ZipBufferIterator.prototype.subscribe = function (value, index) {
|
||
return subscribeToResult_1.subscribeToResult(this, this.observable, this, index);
|
||
};
|
||
return ZipBufferIterator;
|
||
}(OuterSubscriber_1.OuterSubscriber));
|
||
//# sourceMappingURL=zip.js.map
|
||
|
||
/***/ }),
|
||
/* 103 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
var rxSubscriber_1 = __webpack_require__(44);
|
||
var Observer_1 = __webpack_require__(57);
|
||
function toSubscriber(nextOrObserver, error, complete) {
|
||
if (nextOrObserver) {
|
||
if (nextOrObserver instanceof Subscriber_1.Subscriber) {
|
||
return nextOrObserver;
|
||
}
|
||
if (nextOrObserver[rxSubscriber_1.rxSubscriber]) {
|
||
return nextOrObserver[rxSubscriber_1.rxSubscriber]();
|
||
}
|
||
}
|
||
if (!nextOrObserver && !error && !complete) {
|
||
return new Subscriber_1.Subscriber(Observer_1.empty);
|
||
}
|
||
return new Subscriber_1.Subscriber(nextOrObserver, error, complete);
|
||
}
|
||
exports.toSubscriber = toSubscriber;
|
||
//# sourceMappingURL=toSubscriber.js.map
|
||
|
||
/***/ }),
|
||
/* 104 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
/**
|
||
* An error thrown when one or more errors have occurred during the
|
||
* `unsubscribe` of a {@link Subscription}.
|
||
*/
|
||
var UnsubscriptionError = (function (_super) {
|
||
__extends(UnsubscriptionError, _super);
|
||
function UnsubscriptionError(errors) {
|
||
_super.call(this);
|
||
this.errors = errors;
|
||
var err = Error.call(this, errors ?
|
||
errors.length + " errors occurred during unsubscription:\n " + errors.map(function (err, i) { return ((i + 1) + ") " + err.toString()); }).join('\n ') : '');
|
||
this.name = err.name = 'UnsubscriptionError';
|
||
this.stack = err.stack;
|
||
this.message = err.message;
|
||
}
|
||
return UnsubscriptionError;
|
||
}(Error));
|
||
exports.UnsubscriptionError = UnsubscriptionError;
|
||
//# sourceMappingURL=UnsubscriptionError.js.map
|
||
|
||
/***/ }),
|
||
/* 105 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var noop_1 = __webpack_require__(58);
|
||
/* tslint:enable:max-line-length */
|
||
function pipe() {
|
||
var fns = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
fns[_i - 0] = arguments[_i];
|
||
}
|
||
return pipeFromArray(fns);
|
||
}
|
||
exports.pipe = pipe;
|
||
/* @internal */
|
||
function pipeFromArray(fns) {
|
||
if (!fns) {
|
||
return noop_1.noop;
|
||
}
|
||
if (fns.length === 1) {
|
||
return fns[0];
|
||
}
|
||
return function piped(input) {
|
||
return fns.reduce(function (prev, fn) { return fn(prev); }, input);
|
||
};
|
||
}
|
||
exports.pipeFromArray = pipeFromArray;
|
||
//# sourceMappingURL=pipe.js.map
|
||
|
||
/***/ }),
|
||
/* 106 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var InnerSubscriber = (function (_super) {
|
||
__extends(InnerSubscriber, _super);
|
||
function InnerSubscriber(parent, outerValue, outerIndex) {
|
||
_super.call(this);
|
||
this.parent = parent;
|
||
this.outerValue = outerValue;
|
||
this.outerIndex = outerIndex;
|
||
this.index = 0;
|
||
}
|
||
InnerSubscriber.prototype._next = function (value) {
|
||
this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);
|
||
};
|
||
InnerSubscriber.prototype._error = function (error) {
|
||
this.parent.notifyError(error, this);
|
||
this.unsubscribe();
|
||
};
|
||
InnerSubscriber.prototype._complete = function () {
|
||
this.parent.notifyComplete(this);
|
||
this.unsubscribe();
|
||
};
|
||
return InnerSubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
exports.InnerSubscriber = InnerSubscriber;
|
||
//# sourceMappingURL=InnerSubscriber.js.map
|
||
|
||
/***/ }),
|
||
/* 107 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var socket = __webpack_require__(108);
|
||
var Observable_1 = __webpack_require__(1);
|
||
var BehaviorSubject_1 = __webpack_require__(13);
|
||
var of_1 = __webpack_require__(9);
|
||
var share_1 = __webpack_require__(74);
|
||
/**
|
||
* Alias for socket.emit
|
||
* @param name
|
||
* @param data
|
||
*/
|
||
// export function emit(name, data) {
|
||
// if (io && io.emit) {
|
||
// // send relative path of where the event is sent
|
||
// data.url = window.location.pathname;
|
||
// io.emit(name, data);
|
||
// }
|
||
// }
|
||
//
|
||
// /**
|
||
// * Alias for socket.on
|
||
// * @param name
|
||
// * @param func
|
||
// */
|
||
// export function on(name, func) {
|
||
// io.on(name, func);
|
||
// }
|
||
function initWindow() {
|
||
return of_1.of(window);
|
||
}
|
||
exports.initWindow = initWindow;
|
||
function initDocument() {
|
||
return of_1.of(document);
|
||
}
|
||
exports.initDocument = initDocument;
|
||
function initNavigator() {
|
||
return of_1.of(navigator);
|
||
}
|
||
exports.initNavigator = initNavigator;
|
||
function initOptions() {
|
||
return new BehaviorSubject_1.BehaviorSubject(window.___browserSync___.options);
|
||
}
|
||
exports.initOptions = initOptions;
|
||
function initSocket() {
|
||
/**
|
||
* @type {{emit: emit, on: on}}
|
||
*/
|
||
var socketConfig = window.___browserSync___.socketConfig;
|
||
var socketUrl = window.___browserSync___.socketUrl;
|
||
var io = socket(socketUrl, socketConfig);
|
||
var onevent = io.onevent;
|
||
var socket$ = Observable_1.Observable.create(function (obs) {
|
||
io.onevent = function (packet) {
|
||
onevent.call(this, packet);
|
||
obs.next(packet.data);
|
||
};
|
||
}).pipe(share_1.share());
|
||
var io$ = new BehaviorSubject_1.BehaviorSubject(io);
|
||
/**
|
||
* *****BACK-COMPAT*******
|
||
* Scripts that come after Browsersync may rely on the previous window.___browserSync___.socket
|
||
*/
|
||
window.___browserSync___.socket = io;
|
||
return { socket$: socket$, io$: io$ };
|
||
}
|
||
exports.initSocket = initSocket;
|
||
|
||
|
||
/***/ }),
|
||
/* 108 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
|
||
/**
|
||
* Module dependencies.
|
||
*/
|
||
|
||
var url = __webpack_require__(109);
|
||
var parser = __webpack_require__(48);
|
||
var Manager = __webpack_require__(64);
|
||
var debug = __webpack_require__(32)('socket.io-client');
|
||
|
||
/**
|
||
* Module exports.
|
||
*/
|
||
|
||
module.exports = exports = lookup;
|
||
|
||
/**
|
||
* Managers cache.
|
||
*/
|
||
|
||
var cache = exports.managers = {};
|
||
|
||
/**
|
||
* Looks up an existing `Manager` for multiplexing.
|
||
* If the user summons:
|
||
*
|
||
* `io('http://localhost/a');`
|
||
* `io('http://localhost/b');`
|
||
*
|
||
* We reuse the existing instance based on same scheme/port/host,
|
||
* and we initialize sockets for each namespace.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
function lookup (uri, opts) {
|
||
if (typeof uri === 'object') {
|
||
opts = uri;
|
||
uri = undefined;
|
||
}
|
||
|
||
opts = opts || {};
|
||
|
||
var parsed = url(uri);
|
||
var source = parsed.source;
|
||
var id = parsed.id;
|
||
var path = parsed.path;
|
||
var sameNamespace = cache[id] && path in cache[id].nsps;
|
||
var newConnection = opts.forceNew || opts['force new connection'] ||
|
||
false === opts.multiplex || sameNamespace;
|
||
|
||
var io;
|
||
|
||
if (newConnection) {
|
||
debug('ignoring socket cache for %s', source);
|
||
io = Manager(source, opts);
|
||
} else {
|
||
if (!cache[id]) {
|
||
debug('new io instance for %s', source);
|
||
cache[id] = Manager(source, opts);
|
||
}
|
||
io = cache[id];
|
||
}
|
||
if (parsed.query && !opts.query) {
|
||
opts.query = parsed.query;
|
||
}
|
||
return io.socket(parsed.path, opts);
|
||
}
|
||
|
||
/**
|
||
* Protocol version.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
exports.protocol = parser.protocol;
|
||
|
||
/**
|
||
* `connect`.
|
||
*
|
||
* @param {String} uri
|
||
* @api public
|
||
*/
|
||
|
||
exports.connect = lookup;
|
||
|
||
/**
|
||
* Expose constructors for standalone build.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
exports.Manager = __webpack_require__(64);
|
||
exports.Socket = __webpack_require__(70);
|
||
|
||
|
||
/***/ }),
|
||
/* 109 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
|
||
/**
|
||
* Module dependencies.
|
||
*/
|
||
|
||
var parseuri = __webpack_require__(61);
|
||
var debug = __webpack_require__(32)('socket.io-client:url');
|
||
|
||
/**
|
||
* Module exports.
|
||
*/
|
||
|
||
module.exports = url;
|
||
|
||
/**
|
||
* URL parser.
|
||
*
|
||
* @param {String} url
|
||
* @param {Object} An object meant to mimic window.location.
|
||
* Defaults to window.location.
|
||
* @api public
|
||
*/
|
||
|
||
function url (uri, loc) {
|
||
var obj = uri;
|
||
|
||
// default to window.location
|
||
loc = loc || (typeof location !== 'undefined' && location);
|
||
if (null == uri) uri = loc.protocol + '//' + loc.host;
|
||
|
||
// relative path support
|
||
if ('string' === typeof uri) {
|
||
if ('/' === uri.charAt(0)) {
|
||
if ('/' === uri.charAt(1)) {
|
||
uri = loc.protocol + uri;
|
||
} else {
|
||
uri = loc.host + uri;
|
||
}
|
||
}
|
||
|
||
if (!/^(https?|wss?):\/\//.test(uri)) {
|
||
debug('protocol-less url %s', uri);
|
||
if ('undefined' !== typeof loc) {
|
||
uri = loc.protocol + '//' + uri;
|
||
} else {
|
||
uri = 'https://' + uri;
|
||
}
|
||
}
|
||
|
||
// parse
|
||
debug('parse %s', uri);
|
||
obj = parseuri(uri);
|
||
}
|
||
|
||
// make sure we treat `localhost:80` and `localhost` equally
|
||
if (!obj.port) {
|
||
if (/^(http|ws)$/.test(obj.protocol)) {
|
||
obj.port = '80';
|
||
} else if (/^(http|ws)s$/.test(obj.protocol)) {
|
||
obj.port = '443';
|
||
}
|
||
}
|
||
|
||
obj.path = obj.path || '/';
|
||
|
||
var ipv6 = obj.host.indexOf(':') !== -1;
|
||
var host = ipv6 ? '[' + obj.host + ']' : obj.host;
|
||
|
||
// define unique id
|
||
obj.id = obj.protocol + '://' + host + ':' + obj.port;
|
||
// define href
|
||
obj.href = obj.protocol + '://' + host + (loc && loc.port === obj.port ? '' : (':' + obj.port));
|
||
|
||
return obj;
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 110 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
|
||
/**
|
||
* This is the common logic for both the Node.js and web browser
|
||
* implementations of `debug()`.
|
||
*
|
||
* Expose `debug()` as the module.
|
||
*/
|
||
|
||
exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
|
||
exports.coerce = coerce;
|
||
exports.disable = disable;
|
||
exports.enable = enable;
|
||
exports.enabled = enabled;
|
||
exports.humanize = __webpack_require__(47);
|
||
|
||
/**
|
||
* Active `debug` instances.
|
||
*/
|
||
exports.instances = [];
|
||
|
||
/**
|
||
* The currently active debug mode names, and names to skip.
|
||
*/
|
||
|
||
exports.names = [];
|
||
exports.skips = [];
|
||
|
||
/**
|
||
* Map of special "%n" handling functions, for the debug "format" argument.
|
||
*
|
||
* Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
|
||
*/
|
||
|
||
exports.formatters = {};
|
||
|
||
/**
|
||
* Select a color.
|
||
* @param {String} namespace
|
||
* @return {Number}
|
||
* @api private
|
||
*/
|
||
|
||
function selectColor(namespace) {
|
||
var hash = 0, i;
|
||
|
||
for (i in namespace) {
|
||
hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
|
||
hash |= 0; // Convert to 32bit integer
|
||
}
|
||
|
||
return exports.colors[Math.abs(hash) % exports.colors.length];
|
||
}
|
||
|
||
/**
|
||
* Create a debugger with the given `namespace`.
|
||
*
|
||
* @param {String} namespace
|
||
* @return {Function}
|
||
* @api public
|
||
*/
|
||
|
||
function createDebug(namespace) {
|
||
|
||
var prevTime;
|
||
|
||
function debug() {
|
||
// disabled?
|
||
if (!debug.enabled) return;
|
||
|
||
var self = debug;
|
||
|
||
// set `diff` timestamp
|
||
var curr = +new Date();
|
||
var ms = curr - (prevTime || curr);
|
||
self.diff = ms;
|
||
self.prev = prevTime;
|
||
self.curr = curr;
|
||
prevTime = curr;
|
||
|
||
// turn the `arguments` into a proper Array
|
||
var args = new Array(arguments.length);
|
||
for (var i = 0; i < args.length; i++) {
|
||
args[i] = arguments[i];
|
||
}
|
||
|
||
args[0] = exports.coerce(args[0]);
|
||
|
||
if ('string' !== typeof args[0]) {
|
||
// anything else let's inspect with %O
|
||
args.unshift('%O');
|
||
}
|
||
|
||
// apply any `formatters` transformations
|
||
var index = 0;
|
||
args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
|
||
// if we encounter an escaped % then don't increase the array index
|
||
if (match === '%%') return match;
|
||
index++;
|
||
var formatter = exports.formatters[format];
|
||
if ('function' === typeof formatter) {
|
||
var val = args[index];
|
||
match = formatter.call(self, val);
|
||
|
||
// now we need to remove `args[index]` since it's inlined in the `format`
|
||
args.splice(index, 1);
|
||
index--;
|
||
}
|
||
return match;
|
||
});
|
||
|
||
// apply env-specific formatting (colors, etc.)
|
||
exports.formatArgs.call(self, args);
|
||
|
||
var logFn = debug.log || exports.log || console.log.bind(console);
|
||
logFn.apply(self, args);
|
||
}
|
||
|
||
debug.namespace = namespace;
|
||
debug.enabled = exports.enabled(namespace);
|
||
debug.useColors = exports.useColors();
|
||
debug.color = selectColor(namespace);
|
||
debug.destroy = destroy;
|
||
|
||
// env-specific initialization logic for debug instances
|
||
if ('function' === typeof exports.init) {
|
||
exports.init(debug);
|
||
}
|
||
|
||
exports.instances.push(debug);
|
||
|
||
return debug;
|
||
}
|
||
|
||
function destroy () {
|
||
var index = exports.instances.indexOf(this);
|
||
if (index !== -1) {
|
||
exports.instances.splice(index, 1);
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Enables a debug mode by namespaces. This can include modes
|
||
* separated by a colon and wildcards.
|
||
*
|
||
* @param {String} namespaces
|
||
* @api public
|
||
*/
|
||
|
||
function enable(namespaces) {
|
||
exports.save(namespaces);
|
||
|
||
exports.names = [];
|
||
exports.skips = [];
|
||
|
||
var i;
|
||
var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
|
||
var len = split.length;
|
||
|
||
for (i = 0; i < len; i++) {
|
||
if (!split[i]) continue; // ignore empty strings
|
||
namespaces = split[i].replace(/\*/g, '.*?');
|
||
if (namespaces[0] === '-') {
|
||
exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
|
||
} else {
|
||
exports.names.push(new RegExp('^' + namespaces + '$'));
|
||
}
|
||
}
|
||
|
||
for (i = 0; i < exports.instances.length; i++) {
|
||
var instance = exports.instances[i];
|
||
instance.enabled = exports.enabled(instance.namespace);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Disable debug output.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
function disable() {
|
||
exports.enable('');
|
||
}
|
||
|
||
/**
|
||
* Returns true if the given mode name is enabled, false otherwise.
|
||
*
|
||
* @param {String} name
|
||
* @return {Boolean}
|
||
* @api public
|
||
*/
|
||
|
||
function enabled(name) {
|
||
if (name[name.length - 1] === '*') {
|
||
return true;
|
||
}
|
||
var i, len;
|
||
for (i = 0, len = exports.skips.length; i < len; i++) {
|
||
if (exports.skips[i].test(name)) {
|
||
return false;
|
||
}
|
||
}
|
||
for (i = 0, len = exports.names.length; i < len; i++) {
|
||
if (exports.names[i].test(name)) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Coerce `val`.
|
||
*
|
||
* @param {Mixed} val
|
||
* @return {Mixed}
|
||
* @api private
|
||
*/
|
||
|
||
function coerce(val) {
|
||
if (val instanceof Error) return val.stack || val.message;
|
||
return val;
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 111 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(process) {/**
|
||
* This is the web browser implementation of `debug()`.
|
||
*
|
||
* Expose `debug()` as the module.
|
||
*/
|
||
|
||
exports = module.exports = __webpack_require__(112);
|
||
exports.log = log;
|
||
exports.formatArgs = formatArgs;
|
||
exports.save = save;
|
||
exports.load = load;
|
||
exports.useColors = useColors;
|
||
exports.storage = 'undefined' != typeof chrome
|
||
&& 'undefined' != typeof chrome.storage
|
||
? chrome.storage.local
|
||
: localstorage();
|
||
|
||
/**
|
||
* Colors.
|
||
*/
|
||
|
||
exports.colors = [
|
||
'#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',
|
||
'#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',
|
||
'#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',
|
||
'#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',
|
||
'#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',
|
||
'#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',
|
||
'#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',
|
||
'#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',
|
||
'#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',
|
||
'#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',
|
||
'#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'
|
||
];
|
||
|
||
/**
|
||
* Currently only WebKit-based Web Inspectors, Firefox >= v31,
|
||
* and the Firebug extension (any Firefox version) are known
|
||
* to support "%c" CSS customizations.
|
||
*
|
||
* TODO: add a `localStorage` variable to explicitly enable/disable colors
|
||
*/
|
||
|
||
function useColors() {
|
||
// NB: In an Electron preload script, document will be defined but not fully
|
||
// initialized. Since we know we're in Chrome, we'll just detect this case
|
||
// explicitly
|
||
if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
|
||
return true;
|
||
}
|
||
|
||
// Internet Explorer and Edge do not support colors.
|
||
if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
|
||
return false;
|
||
}
|
||
|
||
// is webkit? http://stackoverflow.com/a/16459606/376773
|
||
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
|
||
return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
|
||
// is firebug? http://stackoverflow.com/a/398120/376773
|
||
(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
|
||
// is firefox >= v31?
|
||
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
|
||
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
|
||
// double check webkit in userAgent just in case we are in a worker
|
||
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
|
||
}
|
||
|
||
/**
|
||
* Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
|
||
*/
|
||
|
||
exports.formatters.j = function(v) {
|
||
try {
|
||
return JSON.stringify(v);
|
||
} catch (err) {
|
||
return '[UnexpectedJSONParseError]: ' + err.message;
|
||
}
|
||
};
|
||
|
||
|
||
/**
|
||
* Colorize log arguments if enabled.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
function formatArgs(args) {
|
||
var useColors = this.useColors;
|
||
|
||
args[0] = (useColors ? '%c' : '')
|
||
+ this.namespace
|
||
+ (useColors ? ' %c' : ' ')
|
||
+ args[0]
|
||
+ (useColors ? '%c ' : ' ')
|
||
+ '+' + exports.humanize(this.diff);
|
||
|
||
if (!useColors) return;
|
||
|
||
var c = 'color: ' + this.color;
|
||
args.splice(1, 0, c, 'color: inherit')
|
||
|
||
// the final "%c" is somewhat tricky, because there could be other
|
||
// arguments passed either before or after the %c, so we need to
|
||
// figure out the correct index to insert the CSS into
|
||
var index = 0;
|
||
var lastC = 0;
|
||
args[0].replace(/%[a-zA-Z%]/g, function(match) {
|
||
if ('%%' === match) return;
|
||
index++;
|
||
if ('%c' === match) {
|
||
// we only are interested in the *last* %c
|
||
// (the user may have provided their own)
|
||
lastC = index;
|
||
}
|
||
});
|
||
|
||
args.splice(lastC, 0, c);
|
||
}
|
||
|
||
/**
|
||
* Invokes `console.log()` when available.
|
||
* No-op when `console.log` is not a "function".
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
function log() {
|
||
// this hackery is required for IE8/9, where
|
||
// the `console.log` function doesn't have 'apply'
|
||
return 'object' === typeof console
|
||
&& console.log
|
||
&& Function.prototype.apply.call(console.log, console, arguments);
|
||
}
|
||
|
||
/**
|
||
* Save `namespaces`.
|
||
*
|
||
* @param {String} namespaces
|
||
* @api private
|
||
*/
|
||
|
||
function save(namespaces) {
|
||
try {
|
||
if (null == namespaces) {
|
||
exports.storage.removeItem('debug');
|
||
} else {
|
||
exports.storage.debug = namespaces;
|
||
}
|
||
} catch(e) {}
|
||
}
|
||
|
||
/**
|
||
* Load `namespaces`.
|
||
*
|
||
* @return {String} returns the previously persisted debug modes
|
||
* @api private
|
||
*/
|
||
|
||
function load() {
|
||
var r;
|
||
try {
|
||
r = exports.storage.debug;
|
||
} catch(e) {}
|
||
|
||
// If debug isn't set in LS, and we're in Electron, try to load $DEBUG
|
||
if (!r && typeof process !== 'undefined' && 'env' in process) {
|
||
r = process.env.DEBUG;
|
||
}
|
||
|
||
return r;
|
||
}
|
||
|
||
/**
|
||
* Enable namespaces listed in `localStorage.debug` initially.
|
||
*/
|
||
|
||
exports.enable(load());
|
||
|
||
/**
|
||
* Localstorage attempts to return the localstorage.
|
||
*
|
||
* This is necessary because safari throws
|
||
* when a user disables cookies/localstorage
|
||
* and you attempt to access it.
|
||
*
|
||
* @return {LocalStorage}
|
||
* @api private
|
||
*/
|
||
|
||
function localstorage() {
|
||
try {
|
||
return window.localStorage;
|
||
} catch (e) {}
|
||
}
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(33)))
|
||
|
||
/***/ }),
|
||
/* 112 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
|
||
/**
|
||
* This is the common logic for both the Node.js and web browser
|
||
* implementations of `debug()`.
|
||
*
|
||
* Expose `debug()` as the module.
|
||
*/
|
||
|
||
exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
|
||
exports.coerce = coerce;
|
||
exports.disable = disable;
|
||
exports.enable = enable;
|
||
exports.enabled = enabled;
|
||
exports.humanize = __webpack_require__(47);
|
||
|
||
/**
|
||
* Active `debug` instances.
|
||
*/
|
||
exports.instances = [];
|
||
|
||
/**
|
||
* The currently active debug mode names, and names to skip.
|
||
*/
|
||
|
||
exports.names = [];
|
||
exports.skips = [];
|
||
|
||
/**
|
||
* Map of special "%n" handling functions, for the debug "format" argument.
|
||
*
|
||
* Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
|
||
*/
|
||
|
||
exports.formatters = {};
|
||
|
||
/**
|
||
* Select a color.
|
||
* @param {String} namespace
|
||
* @return {Number}
|
||
* @api private
|
||
*/
|
||
|
||
function selectColor(namespace) {
|
||
var hash = 0, i;
|
||
|
||
for (i in namespace) {
|
||
hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
|
||
hash |= 0; // Convert to 32bit integer
|
||
}
|
||
|
||
return exports.colors[Math.abs(hash) % exports.colors.length];
|
||
}
|
||
|
||
/**
|
||
* Create a debugger with the given `namespace`.
|
||
*
|
||
* @param {String} namespace
|
||
* @return {Function}
|
||
* @api public
|
||
*/
|
||
|
||
function createDebug(namespace) {
|
||
|
||
var prevTime;
|
||
|
||
function debug() {
|
||
// disabled?
|
||
if (!debug.enabled) return;
|
||
|
||
var self = debug;
|
||
|
||
// set `diff` timestamp
|
||
var curr = +new Date();
|
||
var ms = curr - (prevTime || curr);
|
||
self.diff = ms;
|
||
self.prev = prevTime;
|
||
self.curr = curr;
|
||
prevTime = curr;
|
||
|
||
// turn the `arguments` into a proper Array
|
||
var args = new Array(arguments.length);
|
||
for (var i = 0; i < args.length; i++) {
|
||
args[i] = arguments[i];
|
||
}
|
||
|
||
args[0] = exports.coerce(args[0]);
|
||
|
||
if ('string' !== typeof args[0]) {
|
||
// anything else let's inspect with %O
|
||
args.unshift('%O');
|
||
}
|
||
|
||
// apply any `formatters` transformations
|
||
var index = 0;
|
||
args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
|
||
// if we encounter an escaped % then don't increase the array index
|
||
if (match === '%%') return match;
|
||
index++;
|
||
var formatter = exports.formatters[format];
|
||
if ('function' === typeof formatter) {
|
||
var val = args[index];
|
||
match = formatter.call(self, val);
|
||
|
||
// now we need to remove `args[index]` since it's inlined in the `format`
|
||
args.splice(index, 1);
|
||
index--;
|
||
}
|
||
return match;
|
||
});
|
||
|
||
// apply env-specific formatting (colors, etc.)
|
||
exports.formatArgs.call(self, args);
|
||
|
||
var logFn = debug.log || exports.log || console.log.bind(console);
|
||
logFn.apply(self, args);
|
||
}
|
||
|
||
debug.namespace = namespace;
|
||
debug.enabled = exports.enabled(namespace);
|
||
debug.useColors = exports.useColors();
|
||
debug.color = selectColor(namespace);
|
||
debug.destroy = destroy;
|
||
|
||
// env-specific initialization logic for debug instances
|
||
if ('function' === typeof exports.init) {
|
||
exports.init(debug);
|
||
}
|
||
|
||
exports.instances.push(debug);
|
||
|
||
return debug;
|
||
}
|
||
|
||
function destroy () {
|
||
var index = exports.instances.indexOf(this);
|
||
if (index !== -1) {
|
||
exports.instances.splice(index, 1);
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Enables a debug mode by namespaces. This can include modes
|
||
* separated by a colon and wildcards.
|
||
*
|
||
* @param {String} namespaces
|
||
* @api public
|
||
*/
|
||
|
||
function enable(namespaces) {
|
||
exports.save(namespaces);
|
||
|
||
exports.names = [];
|
||
exports.skips = [];
|
||
|
||
var i;
|
||
var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
|
||
var len = split.length;
|
||
|
||
for (i = 0; i < len; i++) {
|
||
if (!split[i]) continue; // ignore empty strings
|
||
namespaces = split[i].replace(/\*/g, '.*?');
|
||
if (namespaces[0] === '-') {
|
||
exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
|
||
} else {
|
||
exports.names.push(new RegExp('^' + namespaces + '$'));
|
||
}
|
||
}
|
||
|
||
for (i = 0; i < exports.instances.length; i++) {
|
||
var instance = exports.instances[i];
|
||
instance.enabled = exports.enabled(instance.namespace);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Disable debug output.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
function disable() {
|
||
exports.enable('');
|
||
}
|
||
|
||
/**
|
||
* Returns true if the given mode name is enabled, false otherwise.
|
||
*
|
||
* @param {String} name
|
||
* @return {Boolean}
|
||
* @api public
|
||
*/
|
||
|
||
function enabled(name) {
|
||
if (name[name.length - 1] === '*') {
|
||
return true;
|
||
}
|
||
var i, len;
|
||
for (i = 0, len = exports.skips.length; i < len; i++) {
|
||
if (exports.skips[i].test(name)) {
|
||
return false;
|
||
}
|
||
}
|
||
for (i = 0, len = exports.names.length; i < len; i++) {
|
||
if (exports.names[i].test(name)) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Coerce `val`.
|
||
*
|
||
* @param {Mixed} val
|
||
* @return {Mixed}
|
||
* @api private
|
||
*/
|
||
|
||
function coerce(val) {
|
||
if (val instanceof Error) return val.stack || val.message;
|
||
return val;
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 113 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*global Blob,File*/
|
||
|
||
/**
|
||
* Module requirements
|
||
*/
|
||
|
||
var isArray = __webpack_require__(62);
|
||
var isBuf = __webpack_require__(63);
|
||
var toString = Object.prototype.toString;
|
||
var withNativeBlob = typeof Blob === 'function' || (typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]');
|
||
var withNativeFile = typeof File === 'function' || (typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]');
|
||
|
||
/**
|
||
* Replaces every Buffer | ArrayBuffer in packet with a numbered placeholder.
|
||
* Anything with blobs or files should be fed through removeBlobs before coming
|
||
* here.
|
||
*
|
||
* @param {Object} packet - socket.io event packet
|
||
* @return {Object} with deconstructed packet and list of buffers
|
||
* @api public
|
||
*/
|
||
|
||
exports.deconstructPacket = function(packet) {
|
||
var buffers = [];
|
||
var packetData = packet.data;
|
||
var pack = packet;
|
||
pack.data = _deconstructPacket(packetData, buffers);
|
||
pack.attachments = buffers.length; // number of binary 'attachments'
|
||
return {packet: pack, buffers: buffers};
|
||
};
|
||
|
||
function _deconstructPacket(data, buffers) {
|
||
if (!data) return data;
|
||
|
||
if (isBuf(data)) {
|
||
var placeholder = { _placeholder: true, num: buffers.length };
|
||
buffers.push(data);
|
||
return placeholder;
|
||
} else if (isArray(data)) {
|
||
var newData = new Array(data.length);
|
||
for (var i = 0; i < data.length; i++) {
|
||
newData[i] = _deconstructPacket(data[i], buffers);
|
||
}
|
||
return newData;
|
||
} else if (typeof data === 'object' && !(data instanceof Date)) {
|
||
var newData = {};
|
||
for (var key in data) {
|
||
newData[key] = _deconstructPacket(data[key], buffers);
|
||
}
|
||
return newData;
|
||
}
|
||
return data;
|
||
}
|
||
|
||
/**
|
||
* Reconstructs a binary packet from its placeholder packet and buffers
|
||
*
|
||
* @param {Object} packet - event packet with placeholders
|
||
* @param {Array} buffers - binary buffers to put in placeholder positions
|
||
* @return {Object} reconstructed packet
|
||
* @api public
|
||
*/
|
||
|
||
exports.reconstructPacket = function(packet, buffers) {
|
||
packet.data = _reconstructPacket(packet.data, buffers);
|
||
packet.attachments = undefined; // no longer useful
|
||
return packet;
|
||
};
|
||
|
||
function _reconstructPacket(data, buffers) {
|
||
if (!data) return data;
|
||
|
||
if (data && data._placeholder) {
|
||
return buffers[data.num]; // appropriate buffer (should be natural order anyway)
|
||
} else if (isArray(data)) {
|
||
for (var i = 0; i < data.length; i++) {
|
||
data[i] = _reconstructPacket(data[i], buffers);
|
||
}
|
||
} else if (typeof data === 'object') {
|
||
for (var key in data) {
|
||
data[key] = _reconstructPacket(data[key], buffers);
|
||
}
|
||
}
|
||
|
||
return data;
|
||
}
|
||
|
||
/**
|
||
* Asynchronously removes Blobs or Files from data via
|
||
* FileReader's readAsArrayBuffer method. Used before encoding
|
||
* data as msgpack. Calls callback with the blobless data.
|
||
*
|
||
* @param {Object} data
|
||
* @param {Function} callback
|
||
* @api private
|
||
*/
|
||
|
||
exports.removeBlobs = function(data, callback) {
|
||
function _removeBlobs(obj, curKey, containingObject) {
|
||
if (!obj) return obj;
|
||
|
||
// convert any blob
|
||
if ((withNativeBlob && obj instanceof Blob) ||
|
||
(withNativeFile && obj instanceof File)) {
|
||
pendingBlobs++;
|
||
|
||
// async filereader
|
||
var fileReader = new FileReader();
|
||
fileReader.onload = function() { // this.result == arraybuffer
|
||
if (containingObject) {
|
||
containingObject[curKey] = this.result;
|
||
}
|
||
else {
|
||
bloblessData = this.result;
|
||
}
|
||
|
||
// if nothing pending its callback time
|
||
if(! --pendingBlobs) {
|
||
callback(bloblessData);
|
||
}
|
||
};
|
||
|
||
fileReader.readAsArrayBuffer(obj); // blob -> arraybuffer
|
||
} else if (isArray(obj)) { // handle array
|
||
for (var i = 0; i < obj.length; i++) {
|
||
_removeBlobs(obj[i], i, obj);
|
||
}
|
||
} else if (typeof obj === 'object' && !isBuf(obj)) { // and object
|
||
for (var key in obj) {
|
||
_removeBlobs(obj[key], key, obj);
|
||
}
|
||
}
|
||
}
|
||
|
||
var pendingBlobs = 0;
|
||
var bloblessData = data;
|
||
_removeBlobs(bloblessData);
|
||
if (!pendingBlobs) {
|
||
callback(bloblessData);
|
||
}
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 114 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
exports.byteLength = byteLength
|
||
exports.toByteArray = toByteArray
|
||
exports.fromByteArray = fromByteArray
|
||
|
||
var lookup = []
|
||
var revLookup = []
|
||
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
|
||
|
||
var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
|
||
for (var i = 0, len = code.length; i < len; ++i) {
|
||
lookup[i] = code[i]
|
||
revLookup[code.charCodeAt(i)] = i
|
||
}
|
||
|
||
// Support decoding URL-safe base64 strings, as Node.js does.
|
||
// See: https://en.wikipedia.org/wiki/Base64#URL_applications
|
||
revLookup['-'.charCodeAt(0)] = 62
|
||
revLookup['_'.charCodeAt(0)] = 63
|
||
|
||
function getLens (b64) {
|
||
var len = b64.length
|
||
|
||
if (len % 4 > 0) {
|
||
throw new Error('Invalid string. Length must be a multiple of 4')
|
||
}
|
||
|
||
// Trim off extra bytes after placeholder bytes are found
|
||
// See: https://github.com/beatgammit/base64-js/issues/42
|
||
var validLen = b64.indexOf('=')
|
||
if (validLen === -1) validLen = len
|
||
|
||
var placeHoldersLen = validLen === len
|
||
? 0
|
||
: 4 - (validLen % 4)
|
||
|
||
return [validLen, placeHoldersLen]
|
||
}
|
||
|
||
// base64 is 4/3 + up to two characters of the original data
|
||
function byteLength (b64) {
|
||
var lens = getLens(b64)
|
||
var validLen = lens[0]
|
||
var placeHoldersLen = lens[1]
|
||
return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
|
||
}
|
||
|
||
function _byteLength (b64, validLen, placeHoldersLen) {
|
||
return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
|
||
}
|
||
|
||
function toByteArray (b64) {
|
||
var tmp
|
||
var lens = getLens(b64)
|
||
var validLen = lens[0]
|
||
var placeHoldersLen = lens[1]
|
||
|
||
var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))
|
||
|
||
var curByte = 0
|
||
|
||
// if there are placeholders, only get up to the last complete 4 chars
|
||
var len = placeHoldersLen > 0
|
||
? validLen - 4
|
||
: validLen
|
||
|
||
for (var i = 0; i < len; i += 4) {
|
||
tmp =
|
||
(revLookup[b64.charCodeAt(i)] << 18) |
|
||
(revLookup[b64.charCodeAt(i + 1)] << 12) |
|
||
(revLookup[b64.charCodeAt(i + 2)] << 6) |
|
||
revLookup[b64.charCodeAt(i + 3)]
|
||
arr[curByte++] = (tmp >> 16) & 0xFF
|
||
arr[curByte++] = (tmp >> 8) & 0xFF
|
||
arr[curByte++] = tmp & 0xFF
|
||
}
|
||
|
||
if (placeHoldersLen === 2) {
|
||
tmp =
|
||
(revLookup[b64.charCodeAt(i)] << 2) |
|
||
(revLookup[b64.charCodeAt(i + 1)] >> 4)
|
||
arr[curByte++] = tmp & 0xFF
|
||
}
|
||
|
||
if (placeHoldersLen === 1) {
|
||
tmp =
|
||
(revLookup[b64.charCodeAt(i)] << 10) |
|
||
(revLookup[b64.charCodeAt(i + 1)] << 4) |
|
||
(revLookup[b64.charCodeAt(i + 2)] >> 2)
|
||
arr[curByte++] = (tmp >> 8) & 0xFF
|
||
arr[curByte++] = tmp & 0xFF
|
||
}
|
||
|
||
return arr
|
||
}
|
||
|
||
function tripletToBase64 (num) {
|
||
return lookup[num >> 18 & 0x3F] +
|
||
lookup[num >> 12 & 0x3F] +
|
||
lookup[num >> 6 & 0x3F] +
|
||
lookup[num & 0x3F]
|
||
}
|
||
|
||
function encodeChunk (uint8, start, end) {
|
||
var tmp
|
||
var output = []
|
||
for (var i = start; i < end; i += 3) {
|
||
tmp =
|
||
((uint8[i] << 16) & 0xFF0000) +
|
||
((uint8[i + 1] << 8) & 0xFF00) +
|
||
(uint8[i + 2] & 0xFF)
|
||
output.push(tripletToBase64(tmp))
|
||
}
|
||
return output.join('')
|
||
}
|
||
|
||
function fromByteArray (uint8) {
|
||
var tmp
|
||
var len = uint8.length
|
||
var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
|
||
var parts = []
|
||
var maxChunkLength = 16383 // must be multiple of 3
|
||
|
||
// go through the array every three bytes, we'll deal with trailing stuff later
|
||
for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
|
||
parts.push(encodeChunk(
|
||
uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)
|
||
))
|
||
}
|
||
|
||
// pad the end with zeros, but make sure to not forget the extra bytes
|
||
if (extraBytes === 1) {
|
||
tmp = uint8[len - 1]
|
||
parts.push(
|
||
lookup[tmp >> 2] +
|
||
lookup[(tmp << 4) & 0x3F] +
|
||
'=='
|
||
)
|
||
} else if (extraBytes === 2) {
|
||
tmp = (uint8[len - 2] << 8) + uint8[len - 1]
|
||
parts.push(
|
||
lookup[tmp >> 10] +
|
||
lookup[(tmp >> 4) & 0x3F] +
|
||
lookup[(tmp << 2) & 0x3F] +
|
||
'='
|
||
)
|
||
}
|
||
|
||
return parts.join('')
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 115 */
|
||
/***/ (function(module, exports) {
|
||
|
||
exports.read = function (buffer, offset, isLE, mLen, nBytes) {
|
||
var e, m
|
||
var eLen = (nBytes * 8) - mLen - 1
|
||
var eMax = (1 << eLen) - 1
|
||
var eBias = eMax >> 1
|
||
var nBits = -7
|
||
var i = isLE ? (nBytes - 1) : 0
|
||
var d = isLE ? -1 : 1
|
||
var s = buffer[offset + i]
|
||
|
||
i += d
|
||
|
||
e = s & ((1 << (-nBits)) - 1)
|
||
s >>= (-nBits)
|
||
nBits += eLen
|
||
for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
|
||
|
||
m = e & ((1 << (-nBits)) - 1)
|
||
e >>= (-nBits)
|
||
nBits += mLen
|
||
for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
|
||
|
||
if (e === 0) {
|
||
e = 1 - eBias
|
||
} else if (e === eMax) {
|
||
return m ? NaN : ((s ? -1 : 1) * Infinity)
|
||
} else {
|
||
m = m + Math.pow(2, mLen)
|
||
e = e - eBias
|
||
}
|
||
return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
|
||
}
|
||
|
||
exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
|
||
var e, m, c
|
||
var eLen = (nBytes * 8) - mLen - 1
|
||
var eMax = (1 << eLen) - 1
|
||
var eBias = eMax >> 1
|
||
var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
|
||
var i = isLE ? 0 : (nBytes - 1)
|
||
var d = isLE ? 1 : -1
|
||
var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
|
||
|
||
value = Math.abs(value)
|
||
|
||
if (isNaN(value) || value === Infinity) {
|
||
m = isNaN(value) ? 1 : 0
|
||
e = eMax
|
||
} else {
|
||
e = Math.floor(Math.log(value) / Math.LN2)
|
||
if (value * (c = Math.pow(2, -e)) < 1) {
|
||
e--
|
||
c *= 2
|
||
}
|
||
if (e + eBias >= 1) {
|
||
value += rt / c
|
||
} else {
|
||
value += rt * Math.pow(2, 1 - eBias)
|
||
}
|
||
if (value * c >= 2) {
|
||
e++
|
||
c /= 2
|
||
}
|
||
|
||
if (e + eBias >= eMax) {
|
||
m = 0
|
||
e = eMax
|
||
} else if (e + eBias >= 1) {
|
||
m = ((value * c) - 1) * Math.pow(2, mLen)
|
||
e = e + eBias
|
||
} else {
|
||
m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
|
||
e = 0
|
||
}
|
||
}
|
||
|
||
for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
|
||
|
||
e = (e << mLen) | m
|
||
eLen += mLen
|
||
for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
|
||
|
||
buffer[offset + i - d] |= s * 128
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 116 */
|
||
/***/ (function(module, exports) {
|
||
|
||
var toString = {}.toString;
|
||
|
||
module.exports = Array.isArray || function (arr) {
|
||
return toString.call(arr) == '[object Array]';
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 117 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
|
||
module.exports = __webpack_require__(118);
|
||
|
||
/**
|
||
* Exports parser
|
||
*
|
||
* @api public
|
||
*
|
||
*/
|
||
module.exports.parser = __webpack_require__(18);
|
||
|
||
|
||
/***/ }),
|
||
/* 118 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/**
|
||
* Module dependencies.
|
||
*/
|
||
|
||
var transports = __webpack_require__(65);
|
||
var Emitter = __webpack_require__(17);
|
||
var debug = __webpack_require__(36)('engine.io-client:socket');
|
||
var index = __webpack_require__(69);
|
||
var parser = __webpack_require__(18);
|
||
var parseuri = __webpack_require__(61);
|
||
var parseqs = __webpack_require__(34);
|
||
|
||
/**
|
||
* Module exports.
|
||
*/
|
||
|
||
module.exports = Socket;
|
||
|
||
/**
|
||
* Socket constructor.
|
||
*
|
||
* @param {String|Object} uri or options
|
||
* @param {Object} options
|
||
* @api public
|
||
*/
|
||
|
||
function Socket (uri, opts) {
|
||
if (!(this instanceof Socket)) return new Socket(uri, opts);
|
||
|
||
opts = opts || {};
|
||
|
||
if (uri && 'object' === typeof uri) {
|
||
opts = uri;
|
||
uri = null;
|
||
}
|
||
|
||
if (uri) {
|
||
uri = parseuri(uri);
|
||
opts.hostname = uri.host;
|
||
opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';
|
||
opts.port = uri.port;
|
||
if (uri.query) opts.query = uri.query;
|
||
} else if (opts.host) {
|
||
opts.hostname = parseuri(opts.host).host;
|
||
}
|
||
|
||
this.secure = null != opts.secure ? opts.secure
|
||
: (typeof location !== 'undefined' && 'https:' === location.protocol);
|
||
|
||
if (opts.hostname && !opts.port) {
|
||
// if no port is specified manually, use the protocol default
|
||
opts.port = this.secure ? '443' : '80';
|
||
}
|
||
|
||
this.agent = opts.agent || false;
|
||
this.hostname = opts.hostname ||
|
||
(typeof location !== 'undefined' ? location.hostname : 'localhost');
|
||
this.port = opts.port || (typeof location !== 'undefined' && location.port
|
||
? location.port
|
||
: (this.secure ? 443 : 80));
|
||
this.query = opts.query || {};
|
||
if ('string' === typeof this.query) this.query = parseqs.decode(this.query);
|
||
this.upgrade = false !== opts.upgrade;
|
||
this.path = (opts.path || '/engine.io').replace(/\/$/, '') + '/';
|
||
this.forceJSONP = !!opts.forceJSONP;
|
||
this.jsonp = false !== opts.jsonp;
|
||
this.forceBase64 = !!opts.forceBase64;
|
||
this.enablesXDR = !!opts.enablesXDR;
|
||
this.timestampParam = opts.timestampParam || 't';
|
||
this.timestampRequests = opts.timestampRequests;
|
||
this.transports = opts.transports || ['polling', 'websocket'];
|
||
this.transportOptions = opts.transportOptions || {};
|
||
this.readyState = '';
|
||
this.writeBuffer = [];
|
||
this.prevBufferLen = 0;
|
||
this.policyPort = opts.policyPort || 843;
|
||
this.rememberUpgrade = opts.rememberUpgrade || false;
|
||
this.binaryType = null;
|
||
this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;
|
||
this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;
|
||
|
||
if (true === this.perMessageDeflate) this.perMessageDeflate = {};
|
||
if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {
|
||
this.perMessageDeflate.threshold = 1024;
|
||
}
|
||
|
||
// SSL options for Node.js client
|
||
this.pfx = opts.pfx || null;
|
||
this.key = opts.key || null;
|
||
this.passphrase = opts.passphrase || null;
|
||
this.cert = opts.cert || null;
|
||
this.ca = opts.ca || null;
|
||
this.ciphers = opts.ciphers || null;
|
||
this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;
|
||
this.forceNode = !!opts.forceNode;
|
||
|
||
// detect ReactNative environment
|
||
this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');
|
||
|
||
// other options for Node.js or ReactNative client
|
||
if (typeof self === 'undefined' || this.isReactNative) {
|
||
if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {
|
||
this.extraHeaders = opts.extraHeaders;
|
||
}
|
||
|
||
if (opts.localAddress) {
|
||
this.localAddress = opts.localAddress;
|
||
}
|
||
}
|
||
|
||
// set on handshake
|
||
this.id = null;
|
||
this.upgrades = null;
|
||
this.pingInterval = null;
|
||
this.pingTimeout = null;
|
||
|
||
// set on heartbeat
|
||
this.pingIntervalTimer = null;
|
||
this.pingTimeoutTimer = null;
|
||
|
||
this.open();
|
||
}
|
||
|
||
Socket.priorWebsocketSuccess = false;
|
||
|
||
/**
|
||
* Mix in `Emitter`.
|
||
*/
|
||
|
||
Emitter(Socket.prototype);
|
||
|
||
/**
|
||
* Protocol version.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
Socket.protocol = parser.protocol; // this is an int
|
||
|
||
/**
|
||
* Expose deps for legacy compatibility
|
||
* and standalone browser access.
|
||
*/
|
||
|
||
Socket.Socket = Socket;
|
||
Socket.Transport = __webpack_require__(51);
|
||
Socket.transports = __webpack_require__(65);
|
||
Socket.parser = __webpack_require__(18);
|
||
|
||
/**
|
||
* Creates transport of the given type.
|
||
*
|
||
* @param {String} transport name
|
||
* @return {Transport}
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.createTransport = function (name) {
|
||
debug('creating transport "%s"', name);
|
||
var query = clone(this.query);
|
||
|
||
// append engine.io protocol identifier
|
||
query.EIO = parser.protocol;
|
||
|
||
// transport name
|
||
query.transport = name;
|
||
|
||
// per-transport options
|
||
var options = this.transportOptions[name] || {};
|
||
|
||
// session id if we already have one
|
||
if (this.id) query.sid = this.id;
|
||
|
||
var transport = new transports[name]({
|
||
query: query,
|
||
socket: this,
|
||
agent: options.agent || this.agent,
|
||
hostname: options.hostname || this.hostname,
|
||
port: options.port || this.port,
|
||
secure: options.secure || this.secure,
|
||
path: options.path || this.path,
|
||
forceJSONP: options.forceJSONP || this.forceJSONP,
|
||
jsonp: options.jsonp || this.jsonp,
|
||
forceBase64: options.forceBase64 || this.forceBase64,
|
||
enablesXDR: options.enablesXDR || this.enablesXDR,
|
||
timestampRequests: options.timestampRequests || this.timestampRequests,
|
||
timestampParam: options.timestampParam || this.timestampParam,
|
||
policyPort: options.policyPort || this.policyPort,
|
||
pfx: options.pfx || this.pfx,
|
||
key: options.key || this.key,
|
||
passphrase: options.passphrase || this.passphrase,
|
||
cert: options.cert || this.cert,
|
||
ca: options.ca || this.ca,
|
||
ciphers: options.ciphers || this.ciphers,
|
||
rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,
|
||
perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,
|
||
extraHeaders: options.extraHeaders || this.extraHeaders,
|
||
forceNode: options.forceNode || this.forceNode,
|
||
localAddress: options.localAddress || this.localAddress,
|
||
requestTimeout: options.requestTimeout || this.requestTimeout,
|
||
protocols: options.protocols || void (0),
|
||
isReactNative: this.isReactNative
|
||
});
|
||
|
||
return transport;
|
||
};
|
||
|
||
function clone (obj) {
|
||
var o = {};
|
||
for (var i in obj) {
|
||
if (obj.hasOwnProperty(i)) {
|
||
o[i] = obj[i];
|
||
}
|
||
}
|
||
return o;
|
||
}
|
||
|
||
/**
|
||
* Initializes transport to use and starts probe.
|
||
*
|
||
* @api private
|
||
*/
|
||
Socket.prototype.open = function () {
|
||
var transport;
|
||
if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {
|
||
transport = 'websocket';
|
||
} else if (0 === this.transports.length) {
|
||
// Emit error on next tick so it can be listened to
|
||
var self = this;
|
||
setTimeout(function () {
|
||
self.emit('error', 'No transports available');
|
||
}, 0);
|
||
return;
|
||
} else {
|
||
transport = this.transports[0];
|
||
}
|
||
this.readyState = 'opening';
|
||
|
||
// Retry with the next transport if the transport is disabled (jsonp: false)
|
||
try {
|
||
transport = this.createTransport(transport);
|
||
} catch (e) {
|
||
this.transports.shift();
|
||
this.open();
|
||
return;
|
||
}
|
||
|
||
transport.open();
|
||
this.setTransport(transport);
|
||
};
|
||
|
||
/**
|
||
* Sets the current transport. Disables the existing one (if any).
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.setTransport = function (transport) {
|
||
debug('setting transport %s', transport.name);
|
||
var self = this;
|
||
|
||
if (this.transport) {
|
||
debug('clearing existing transport %s', this.transport.name);
|
||
this.transport.removeAllListeners();
|
||
}
|
||
|
||
// set up transport
|
||
this.transport = transport;
|
||
|
||
// set up transport listeners
|
||
transport
|
||
.on('drain', function () {
|
||
self.onDrain();
|
||
})
|
||
.on('packet', function (packet) {
|
||
self.onPacket(packet);
|
||
})
|
||
.on('error', function (e) {
|
||
self.onError(e);
|
||
})
|
||
.on('close', function () {
|
||
self.onClose('transport close');
|
||
});
|
||
};
|
||
|
||
/**
|
||
* Probes a transport.
|
||
*
|
||
* @param {String} transport name
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.probe = function (name) {
|
||
debug('probing transport "%s"', name);
|
||
var transport = this.createTransport(name, { probe: 1 });
|
||
var failed = false;
|
||
var self = this;
|
||
|
||
Socket.priorWebsocketSuccess = false;
|
||
|
||
function onTransportOpen () {
|
||
if (self.onlyBinaryUpgrades) {
|
||
var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;
|
||
failed = failed || upgradeLosesBinary;
|
||
}
|
||
if (failed) return;
|
||
|
||
debug('probe transport "%s" opened', name);
|
||
transport.send([{ type: 'ping', data: 'probe' }]);
|
||
transport.once('packet', function (msg) {
|
||
if (failed) return;
|
||
if ('pong' === msg.type && 'probe' === msg.data) {
|
||
debug('probe transport "%s" pong', name);
|
||
self.upgrading = true;
|
||
self.emit('upgrading', transport);
|
||
if (!transport) return;
|
||
Socket.priorWebsocketSuccess = 'websocket' === transport.name;
|
||
|
||
debug('pausing current transport "%s"', self.transport.name);
|
||
self.transport.pause(function () {
|
||
if (failed) return;
|
||
if ('closed' === self.readyState) return;
|
||
debug('changing transport and sending upgrade packet');
|
||
|
||
cleanup();
|
||
|
||
self.setTransport(transport);
|
||
transport.send([{ type: 'upgrade' }]);
|
||
self.emit('upgrade', transport);
|
||
transport = null;
|
||
self.upgrading = false;
|
||
self.flush();
|
||
});
|
||
} else {
|
||
debug('probe transport "%s" failed', name);
|
||
var err = new Error('probe error');
|
||
err.transport = transport.name;
|
||
self.emit('upgradeError', err);
|
||
}
|
||
});
|
||
}
|
||
|
||
function freezeTransport () {
|
||
if (failed) return;
|
||
|
||
// Any callback called by transport should be ignored since now
|
||
failed = true;
|
||
|
||
cleanup();
|
||
|
||
transport.close();
|
||
transport = null;
|
||
}
|
||
|
||
// Handle any error that happens while probing
|
||
function onerror (err) {
|
||
var error = new Error('probe error: ' + err);
|
||
error.transport = transport.name;
|
||
|
||
freezeTransport();
|
||
|
||
debug('probe transport "%s" failed because of error: %s', name, err);
|
||
|
||
self.emit('upgradeError', error);
|
||
}
|
||
|
||
function onTransportClose () {
|
||
onerror('transport closed');
|
||
}
|
||
|
||
// When the socket is closed while we're probing
|
||
function onclose () {
|
||
onerror('socket closed');
|
||
}
|
||
|
||
// When the socket is upgraded while we're probing
|
||
function onupgrade (to) {
|
||
if (transport && to.name !== transport.name) {
|
||
debug('"%s" works - aborting "%s"', to.name, transport.name);
|
||
freezeTransport();
|
||
}
|
||
}
|
||
|
||
// Remove all listeners on the transport and on self
|
||
function cleanup () {
|
||
transport.removeListener('open', onTransportOpen);
|
||
transport.removeListener('error', onerror);
|
||
transport.removeListener('close', onTransportClose);
|
||
self.removeListener('close', onclose);
|
||
self.removeListener('upgrading', onupgrade);
|
||
}
|
||
|
||
transport.once('open', onTransportOpen);
|
||
transport.once('error', onerror);
|
||
transport.once('close', onTransportClose);
|
||
|
||
this.once('close', onclose);
|
||
this.once('upgrading', onupgrade);
|
||
|
||
transport.open();
|
||
};
|
||
|
||
/**
|
||
* Called when connection is deemed open.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
Socket.prototype.onOpen = function () {
|
||
debug('socket open');
|
||
this.readyState = 'open';
|
||
Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;
|
||
this.emit('open');
|
||
this.flush();
|
||
|
||
// we check for `readyState` in case an `open`
|
||
// listener already closed the socket
|
||
if ('open' === this.readyState && this.upgrade && this.transport.pause) {
|
||
debug('starting upgrade probes');
|
||
for (var i = 0, l = this.upgrades.length; i < l; i++) {
|
||
this.probe(this.upgrades[i]);
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Handles a packet.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.onPacket = function (packet) {
|
||
if ('opening' === this.readyState || 'open' === this.readyState ||
|
||
'closing' === this.readyState) {
|
||
debug('socket receive: type "%s", data "%s"', packet.type, packet.data);
|
||
|
||
this.emit('packet', packet);
|
||
|
||
// Socket is live - any packet counts
|
||
this.emit('heartbeat');
|
||
|
||
switch (packet.type) {
|
||
case 'open':
|
||
this.onHandshake(JSON.parse(packet.data));
|
||
break;
|
||
|
||
case 'pong':
|
||
this.setPing();
|
||
this.emit('pong');
|
||
break;
|
||
|
||
case 'error':
|
||
var err = new Error('server error');
|
||
err.code = packet.data;
|
||
this.onError(err);
|
||
break;
|
||
|
||
case 'message':
|
||
this.emit('data', packet.data);
|
||
this.emit('message', packet.data);
|
||
break;
|
||
}
|
||
} else {
|
||
debug('packet received with socket readyState "%s"', this.readyState);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Called upon handshake completion.
|
||
*
|
||
* @param {Object} handshake obj
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.onHandshake = function (data) {
|
||
this.emit('handshake', data);
|
||
this.id = data.sid;
|
||
this.transport.query.sid = data.sid;
|
||
this.upgrades = this.filterUpgrades(data.upgrades);
|
||
this.pingInterval = data.pingInterval;
|
||
this.pingTimeout = data.pingTimeout;
|
||
this.onOpen();
|
||
// In case open handler closes socket
|
||
if ('closed' === this.readyState) return;
|
||
this.setPing();
|
||
|
||
// Prolong liveness of socket on heartbeat
|
||
this.removeListener('heartbeat', this.onHeartbeat);
|
||
this.on('heartbeat', this.onHeartbeat);
|
||
};
|
||
|
||
/**
|
||
* Resets ping timeout.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.onHeartbeat = function (timeout) {
|
||
clearTimeout(this.pingTimeoutTimer);
|
||
var self = this;
|
||
self.pingTimeoutTimer = setTimeout(function () {
|
||
if ('closed' === self.readyState) return;
|
||
self.onClose('ping timeout');
|
||
}, timeout || (self.pingInterval + self.pingTimeout));
|
||
};
|
||
|
||
/**
|
||
* Pings server every `this.pingInterval` and expects response
|
||
* within `this.pingTimeout` or closes connection.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.setPing = function () {
|
||
var self = this;
|
||
clearTimeout(self.pingIntervalTimer);
|
||
self.pingIntervalTimer = setTimeout(function () {
|
||
debug('writing ping packet - expecting pong within %sms', self.pingTimeout);
|
||
self.ping();
|
||
self.onHeartbeat(self.pingTimeout);
|
||
}, self.pingInterval);
|
||
};
|
||
|
||
/**
|
||
* Sends a ping packet.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.ping = function () {
|
||
var self = this;
|
||
this.sendPacket('ping', function () {
|
||
self.emit('ping');
|
||
});
|
||
};
|
||
|
||
/**
|
||
* Called on `drain` event
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.onDrain = function () {
|
||
this.writeBuffer.splice(0, this.prevBufferLen);
|
||
|
||
// setting prevBufferLen = 0 is very important
|
||
// for example, when upgrading, upgrade packet is sent over,
|
||
// and a nonzero prevBufferLen could cause problems on `drain`
|
||
this.prevBufferLen = 0;
|
||
|
||
if (0 === this.writeBuffer.length) {
|
||
this.emit('drain');
|
||
} else {
|
||
this.flush();
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Flush write buffers.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.flush = function () {
|
||
if ('closed' !== this.readyState && this.transport.writable &&
|
||
!this.upgrading && this.writeBuffer.length) {
|
||
debug('flushing %d packets in socket', this.writeBuffer.length);
|
||
this.transport.send(this.writeBuffer);
|
||
// keep track of current length of writeBuffer
|
||
// splice writeBuffer and callbackBuffer on `drain`
|
||
this.prevBufferLen = this.writeBuffer.length;
|
||
this.emit('flush');
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Sends a message.
|
||
*
|
||
* @param {String} message.
|
||
* @param {Function} callback function.
|
||
* @param {Object} options.
|
||
* @return {Socket} for chaining.
|
||
* @api public
|
||
*/
|
||
|
||
Socket.prototype.write =
|
||
Socket.prototype.send = function (msg, options, fn) {
|
||
this.sendPacket('message', msg, options, fn);
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Sends a packet.
|
||
*
|
||
* @param {String} packet type.
|
||
* @param {String} data.
|
||
* @param {Object} options.
|
||
* @param {Function} callback function.
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.sendPacket = function (type, data, options, fn) {
|
||
if ('function' === typeof data) {
|
||
fn = data;
|
||
data = undefined;
|
||
}
|
||
|
||
if ('function' === typeof options) {
|
||
fn = options;
|
||
options = null;
|
||
}
|
||
|
||
if ('closing' === this.readyState || 'closed' === this.readyState) {
|
||
return;
|
||
}
|
||
|
||
options = options || {};
|
||
options.compress = false !== options.compress;
|
||
|
||
var packet = {
|
||
type: type,
|
||
data: data,
|
||
options: options
|
||
};
|
||
this.emit('packetCreate', packet);
|
||
this.writeBuffer.push(packet);
|
||
if (fn) this.once('flush', fn);
|
||
this.flush();
|
||
};
|
||
|
||
/**
|
||
* Closes the connection.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.close = function () {
|
||
if ('opening' === this.readyState || 'open' === this.readyState) {
|
||
this.readyState = 'closing';
|
||
|
||
var self = this;
|
||
|
||
if (this.writeBuffer.length) {
|
||
this.once('drain', function () {
|
||
if (this.upgrading) {
|
||
waitForUpgrade();
|
||
} else {
|
||
close();
|
||
}
|
||
});
|
||
} else if (this.upgrading) {
|
||
waitForUpgrade();
|
||
} else {
|
||
close();
|
||
}
|
||
}
|
||
|
||
function close () {
|
||
self.onClose('forced close');
|
||
debug('socket closing - telling transport to close');
|
||
self.transport.close();
|
||
}
|
||
|
||
function cleanupAndClose () {
|
||
self.removeListener('upgrade', cleanupAndClose);
|
||
self.removeListener('upgradeError', cleanupAndClose);
|
||
close();
|
||
}
|
||
|
||
function waitForUpgrade () {
|
||
// wait for upgrade to finish since we can't send packets while pausing a transport
|
||
self.once('upgrade', cleanupAndClose);
|
||
self.once('upgradeError', cleanupAndClose);
|
||
}
|
||
|
||
return this;
|
||
};
|
||
|
||
/**
|
||
* Called upon transport error
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.onError = function (err) {
|
||
debug('socket error %j', err);
|
||
Socket.priorWebsocketSuccess = false;
|
||
this.emit('error', err);
|
||
this.onClose('transport error', err);
|
||
};
|
||
|
||
/**
|
||
* Called upon transport close.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Socket.prototype.onClose = function (reason, desc) {
|
||
if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {
|
||
debug('socket close with reason: "%s"', reason);
|
||
var self = this;
|
||
|
||
// clear timers
|
||
clearTimeout(this.pingIntervalTimer);
|
||
clearTimeout(this.pingTimeoutTimer);
|
||
|
||
// stop event from firing again for transport
|
||
this.transport.removeAllListeners('close');
|
||
|
||
// ensure transport won't stay open
|
||
this.transport.close();
|
||
|
||
// ignore further transport communication
|
||
this.transport.removeAllListeners();
|
||
|
||
// set ready state
|
||
this.readyState = 'closed';
|
||
|
||
// clear session id
|
||
this.id = null;
|
||
|
||
// emit close event
|
||
this.emit('close', reason, desc);
|
||
|
||
// clean buffers after, so users can still
|
||
// grab the buffers on `close` event
|
||
self.writeBuffer = [];
|
||
self.prevBufferLen = 0;
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Filters upgrades, returning only those matching client transports.
|
||
*
|
||
* @param {Array} server upgrades
|
||
* @api private
|
||
*
|
||
*/
|
||
|
||
Socket.prototype.filterUpgrades = function (upgrades) {
|
||
var filteredUpgrades = [];
|
||
for (var i = 0, j = upgrades.length; i < j; i++) {
|
||
if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);
|
||
}
|
||
return filteredUpgrades;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 119 */
|
||
/***/ (function(module, exports) {
|
||
|
||
|
||
/**
|
||
* Module exports.
|
||
*
|
||
* Logic borrowed from Modernizr:
|
||
*
|
||
* - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js
|
||
*/
|
||
|
||
try {
|
||
module.exports = typeof XMLHttpRequest !== 'undefined' &&
|
||
'withCredentials' in new XMLHttpRequest();
|
||
} catch (err) {
|
||
// if XMLHttp support is disabled in IE then it will throw
|
||
// when trying to create
|
||
module.exports = false;
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 120 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* global attachEvent */
|
||
|
||
/**
|
||
* Module requirements.
|
||
*/
|
||
|
||
var XMLHttpRequest = __webpack_require__(50);
|
||
var Polling = __webpack_require__(66);
|
||
var Emitter = __webpack_require__(17);
|
||
var inherit = __webpack_require__(35);
|
||
var debug = __webpack_require__(36)('engine.io-client:polling-xhr');
|
||
|
||
/**
|
||
* Module exports.
|
||
*/
|
||
|
||
module.exports = XHR;
|
||
module.exports.Request = Request;
|
||
|
||
/**
|
||
* Empty function
|
||
*/
|
||
|
||
function empty () {}
|
||
|
||
/**
|
||
* XHR Polling constructor.
|
||
*
|
||
* @param {Object} opts
|
||
* @api public
|
||
*/
|
||
|
||
function XHR (opts) {
|
||
Polling.call(this, opts);
|
||
this.requestTimeout = opts.requestTimeout;
|
||
this.extraHeaders = opts.extraHeaders;
|
||
|
||
if (typeof location !== 'undefined') {
|
||
var isSSL = 'https:' === location.protocol;
|
||
var port = location.port;
|
||
|
||
// some user agents have empty `location.port`
|
||
if (!port) {
|
||
port = isSSL ? 443 : 80;
|
||
}
|
||
|
||
this.xd = (typeof location !== 'undefined' && opts.hostname !== location.hostname) ||
|
||
port !== opts.port;
|
||
this.xs = opts.secure !== isSSL;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Inherits from Polling.
|
||
*/
|
||
|
||
inherit(XHR, Polling);
|
||
|
||
/**
|
||
* XHR supports binary
|
||
*/
|
||
|
||
XHR.prototype.supportsBinary = true;
|
||
|
||
/**
|
||
* Creates a request.
|
||
*
|
||
* @param {String} method
|
||
* @api private
|
||
*/
|
||
|
||
XHR.prototype.request = function (opts) {
|
||
opts = opts || {};
|
||
opts.uri = this.uri();
|
||
opts.xd = this.xd;
|
||
opts.xs = this.xs;
|
||
opts.agent = this.agent || false;
|
||
opts.supportsBinary = this.supportsBinary;
|
||
opts.enablesXDR = this.enablesXDR;
|
||
|
||
// SSL options for Node.js client
|
||
opts.pfx = this.pfx;
|
||
opts.key = this.key;
|
||
opts.passphrase = this.passphrase;
|
||
opts.cert = this.cert;
|
||
opts.ca = this.ca;
|
||
opts.ciphers = this.ciphers;
|
||
opts.rejectUnauthorized = this.rejectUnauthorized;
|
||
opts.requestTimeout = this.requestTimeout;
|
||
|
||
// other options for Node.js client
|
||
opts.extraHeaders = this.extraHeaders;
|
||
|
||
return new Request(opts);
|
||
};
|
||
|
||
/**
|
||
* Sends data.
|
||
*
|
||
* @param {String} data to send.
|
||
* @param {Function} called upon flush.
|
||
* @api private
|
||
*/
|
||
|
||
XHR.prototype.doWrite = function (data, fn) {
|
||
var isBinary = typeof data !== 'string' && data !== undefined;
|
||
var req = this.request({ method: 'POST', data: data, isBinary: isBinary });
|
||
var self = this;
|
||
req.on('success', fn);
|
||
req.on('error', function (err) {
|
||
self.onError('xhr post error', err);
|
||
});
|
||
this.sendXhr = req;
|
||
};
|
||
|
||
/**
|
||
* Starts a poll cycle.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
XHR.prototype.doPoll = function () {
|
||
debug('xhr poll');
|
||
var req = this.request();
|
||
var self = this;
|
||
req.on('data', function (data) {
|
||
self.onData(data);
|
||
});
|
||
req.on('error', function (err) {
|
||
self.onError('xhr poll error', err);
|
||
});
|
||
this.pollXhr = req;
|
||
};
|
||
|
||
/**
|
||
* Request constructor
|
||
*
|
||
* @param {Object} options
|
||
* @api public
|
||
*/
|
||
|
||
function Request (opts) {
|
||
this.method = opts.method || 'GET';
|
||
this.uri = opts.uri;
|
||
this.xd = !!opts.xd;
|
||
this.xs = !!opts.xs;
|
||
this.async = false !== opts.async;
|
||
this.data = undefined !== opts.data ? opts.data : null;
|
||
this.agent = opts.agent;
|
||
this.isBinary = opts.isBinary;
|
||
this.supportsBinary = opts.supportsBinary;
|
||
this.enablesXDR = opts.enablesXDR;
|
||
this.requestTimeout = opts.requestTimeout;
|
||
|
||
// SSL options for Node.js client
|
||
this.pfx = opts.pfx;
|
||
this.key = opts.key;
|
||
this.passphrase = opts.passphrase;
|
||
this.cert = opts.cert;
|
||
this.ca = opts.ca;
|
||
this.ciphers = opts.ciphers;
|
||
this.rejectUnauthorized = opts.rejectUnauthorized;
|
||
|
||
// other options for Node.js client
|
||
this.extraHeaders = opts.extraHeaders;
|
||
|
||
this.create();
|
||
}
|
||
|
||
/**
|
||
* Mix in `Emitter`.
|
||
*/
|
||
|
||
Emitter(Request.prototype);
|
||
|
||
/**
|
||
* Creates the XHR object and sends the request.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Request.prototype.create = function () {
|
||
var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };
|
||
|
||
// SSL options for Node.js client
|
||
opts.pfx = this.pfx;
|
||
opts.key = this.key;
|
||
opts.passphrase = this.passphrase;
|
||
opts.cert = this.cert;
|
||
opts.ca = this.ca;
|
||
opts.ciphers = this.ciphers;
|
||
opts.rejectUnauthorized = this.rejectUnauthorized;
|
||
|
||
var xhr = this.xhr = new XMLHttpRequest(opts);
|
||
var self = this;
|
||
|
||
try {
|
||
debug('xhr open %s: %s', this.method, this.uri);
|
||
xhr.open(this.method, this.uri, this.async);
|
||
try {
|
||
if (this.extraHeaders) {
|
||
xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);
|
||
for (var i in this.extraHeaders) {
|
||
if (this.extraHeaders.hasOwnProperty(i)) {
|
||
xhr.setRequestHeader(i, this.extraHeaders[i]);
|
||
}
|
||
}
|
||
}
|
||
} catch (e) {}
|
||
|
||
if ('POST' === this.method) {
|
||
try {
|
||
if (this.isBinary) {
|
||
xhr.setRequestHeader('Content-type', 'application/octet-stream');
|
||
} else {
|
||
xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');
|
||
}
|
||
} catch (e) {}
|
||
}
|
||
|
||
try {
|
||
xhr.setRequestHeader('Accept', '*/*');
|
||
} catch (e) {}
|
||
|
||
// ie6 check
|
||
if ('withCredentials' in xhr) {
|
||
xhr.withCredentials = true;
|
||
}
|
||
|
||
if (this.requestTimeout) {
|
||
xhr.timeout = this.requestTimeout;
|
||
}
|
||
|
||
if (this.hasXDR()) {
|
||
xhr.onload = function () {
|
||
self.onLoad();
|
||
};
|
||
xhr.onerror = function () {
|
||
self.onError(xhr.responseText);
|
||
};
|
||
} else {
|
||
xhr.onreadystatechange = function () {
|
||
if (xhr.readyState === 2) {
|
||
try {
|
||
var contentType = xhr.getResponseHeader('Content-Type');
|
||
if (self.supportsBinary && contentType === 'application/octet-stream') {
|
||
xhr.responseType = 'arraybuffer';
|
||
}
|
||
} catch (e) {}
|
||
}
|
||
if (4 !== xhr.readyState) return;
|
||
if (200 === xhr.status || 1223 === xhr.status) {
|
||
self.onLoad();
|
||
} else {
|
||
// make sure the `error` event handler that's user-set
|
||
// does not throw in the same tick and gets caught here
|
||
setTimeout(function () {
|
||
self.onError(xhr.status);
|
||
}, 0);
|
||
}
|
||
};
|
||
}
|
||
|
||
debug('xhr data %s', this.data);
|
||
xhr.send(this.data);
|
||
} catch (e) {
|
||
// Need to defer since .create() is called directly fhrom the constructor
|
||
// and thus the 'error' event can only be only bound *after* this exception
|
||
// occurs. Therefore, also, we cannot throw here at all.
|
||
setTimeout(function () {
|
||
self.onError(e);
|
||
}, 0);
|
||
return;
|
||
}
|
||
|
||
if (typeof document !== 'undefined') {
|
||
this.index = Request.requestsCount++;
|
||
Request.requests[this.index] = this;
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Called upon successful response.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Request.prototype.onSuccess = function () {
|
||
this.emit('success');
|
||
this.cleanup();
|
||
};
|
||
|
||
/**
|
||
* Called if we have data.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Request.prototype.onData = function (data) {
|
||
this.emit('data', data);
|
||
this.onSuccess();
|
||
};
|
||
|
||
/**
|
||
* Called upon error.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Request.prototype.onError = function (err) {
|
||
this.emit('error', err);
|
||
this.cleanup(true);
|
||
};
|
||
|
||
/**
|
||
* Cleans up house.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Request.prototype.cleanup = function (fromError) {
|
||
if ('undefined' === typeof this.xhr || null === this.xhr) {
|
||
return;
|
||
}
|
||
// xmlhttprequest
|
||
if (this.hasXDR()) {
|
||
this.xhr.onload = this.xhr.onerror = empty;
|
||
} else {
|
||
this.xhr.onreadystatechange = empty;
|
||
}
|
||
|
||
if (fromError) {
|
||
try {
|
||
this.xhr.abort();
|
||
} catch (e) {}
|
||
}
|
||
|
||
if (typeof document !== 'undefined') {
|
||
delete Request.requests[this.index];
|
||
}
|
||
|
||
this.xhr = null;
|
||
};
|
||
|
||
/**
|
||
* Called upon load.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Request.prototype.onLoad = function () {
|
||
var data;
|
||
try {
|
||
var contentType;
|
||
try {
|
||
contentType = this.xhr.getResponseHeader('Content-Type');
|
||
} catch (e) {}
|
||
if (contentType === 'application/octet-stream') {
|
||
data = this.xhr.response || this.xhr.responseText;
|
||
} else {
|
||
data = this.xhr.responseText;
|
||
}
|
||
} catch (e) {
|
||
this.onError(e);
|
||
}
|
||
if (null != data) {
|
||
this.onData(data);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Check if it has XDomainRequest.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
Request.prototype.hasXDR = function () {
|
||
return typeof XDomainRequest !== 'undefined' && !this.xs && this.enablesXDR;
|
||
};
|
||
|
||
/**
|
||
* Aborts the request.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
Request.prototype.abort = function () {
|
||
this.cleanup();
|
||
};
|
||
|
||
/**
|
||
* Aborts pending requests when unloading the window. This is needed to prevent
|
||
* memory leaks (e.g. when using IE) and to ensure that no spurious error is
|
||
* emitted.
|
||
*/
|
||
|
||
Request.requestsCount = 0;
|
||
Request.requests = {};
|
||
|
||
if (typeof document !== 'undefined') {
|
||
if (typeof attachEvent === 'function') {
|
||
attachEvent('onunload', unloadHandler);
|
||
} else if (typeof addEventListener === 'function') {
|
||
var terminationEvent = 'onpagehide' in self ? 'pagehide' : 'unload';
|
||
addEventListener(terminationEvent, unloadHandler, false);
|
||
}
|
||
}
|
||
|
||
function unloadHandler () {
|
||
for (var i in Request.requests) {
|
||
if (Request.requests.hasOwnProperty(i)) {
|
||
Request.requests[i].abort();
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 121 */
|
||
/***/ (function(module, exports) {
|
||
|
||
|
||
/**
|
||
* Gets the keys for an object.
|
||
*
|
||
* @return {Array} keys
|
||
* @api private
|
||
*/
|
||
|
||
module.exports = Object.keys || function keys (obj){
|
||
var arr = [];
|
||
var has = Object.prototype.hasOwnProperty;
|
||
|
||
for (var i in obj) {
|
||
if (has.call(obj, i)) {
|
||
arr.push(i);
|
||
}
|
||
}
|
||
return arr;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 122 */
|
||
/***/ (function(module, exports) {
|
||
|
||
var toString = {}.toString;
|
||
|
||
module.exports = Array.isArray || function (arr) {
|
||
return toString.call(arr) == '[object Array]';
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 123 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/**
|
||
* An abstraction for slicing an arraybuffer even when
|
||
* ArrayBuffer.prototype.slice is not supported
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
module.exports = function(arraybuffer, start, end) {
|
||
var bytes = arraybuffer.byteLength;
|
||
start = start || 0;
|
||
end = end || bytes;
|
||
|
||
if (arraybuffer.slice) { return arraybuffer.slice(start, end); }
|
||
|
||
if (start < 0) { start += bytes; }
|
||
if (end < 0) { end += bytes; }
|
||
if (end > bytes) { end = bytes; }
|
||
|
||
if (start >= bytes || start >= end || bytes === 0) {
|
||
return new ArrayBuffer(0);
|
||
}
|
||
|
||
var abv = new Uint8Array(arraybuffer);
|
||
var result = new Uint8Array(end - start);
|
||
for (var i = start, ii = 0; i < end; i++, ii++) {
|
||
result[ii] = abv[i];
|
||
}
|
||
return result.buffer;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 124 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = after
|
||
|
||
function after(count, callback, err_cb) {
|
||
var bail = false
|
||
err_cb = err_cb || noop
|
||
proxy.count = count
|
||
|
||
return (count === 0) ? callback() : proxy
|
||
|
||
function proxy(err, result) {
|
||
if (proxy.count <= 0) {
|
||
throw new Error('after called too many times')
|
||
}
|
||
--proxy.count
|
||
|
||
// after first error, rest are passed to err_cb
|
||
if (err) {
|
||
bail = true
|
||
callback(err)
|
||
// future error callbacks will go to error handler
|
||
callback = err_cb
|
||
} else if (proxy.count === 0 && !bail) {
|
||
callback(null, result)
|
||
}
|
||
}
|
||
}
|
||
|
||
function noop() {}
|
||
|
||
|
||
/***/ }),
|
||
/* 125 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/*! https://mths.be/utf8js v2.1.2 by @mathias */
|
||
|
||
var stringFromCharCode = String.fromCharCode;
|
||
|
||
// Taken from https://mths.be/punycode
|
||
function ucs2decode(string) {
|
||
var output = [];
|
||
var counter = 0;
|
||
var length = string.length;
|
||
var value;
|
||
var extra;
|
||
while (counter < length) {
|
||
value = string.charCodeAt(counter++);
|
||
if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
|
||
// high surrogate, and there is a next character
|
||
extra = string.charCodeAt(counter++);
|
||
if ((extra & 0xFC00) == 0xDC00) { // low surrogate
|
||
output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
|
||
} else {
|
||
// unmatched surrogate; only append this code unit, in case the next
|
||
// code unit is the high surrogate of a surrogate pair
|
||
output.push(value);
|
||
counter--;
|
||
}
|
||
} else {
|
||
output.push(value);
|
||
}
|
||
}
|
||
return output;
|
||
}
|
||
|
||
// Taken from https://mths.be/punycode
|
||
function ucs2encode(array) {
|
||
var length = array.length;
|
||
var index = -1;
|
||
var value;
|
||
var output = '';
|
||
while (++index < length) {
|
||
value = array[index];
|
||
if (value > 0xFFFF) {
|
||
value -= 0x10000;
|
||
output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
|
||
value = 0xDC00 | value & 0x3FF;
|
||
}
|
||
output += stringFromCharCode(value);
|
||
}
|
||
return output;
|
||
}
|
||
|
||
function checkScalarValue(codePoint, strict) {
|
||
if (codePoint >= 0xD800 && codePoint <= 0xDFFF) {
|
||
if (strict) {
|
||
throw Error(
|
||
'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +
|
||
' is not a scalar value'
|
||
);
|
||
}
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
/*--------------------------------------------------------------------------*/
|
||
|
||
function createByte(codePoint, shift) {
|
||
return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);
|
||
}
|
||
|
||
function encodeCodePoint(codePoint, strict) {
|
||
if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence
|
||
return stringFromCharCode(codePoint);
|
||
}
|
||
var symbol = '';
|
||
if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence
|
||
symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);
|
||
}
|
||
else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence
|
||
if (!checkScalarValue(codePoint, strict)) {
|
||
codePoint = 0xFFFD;
|
||
}
|
||
symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);
|
||
symbol += createByte(codePoint, 6);
|
||
}
|
||
else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence
|
||
symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);
|
||
symbol += createByte(codePoint, 12);
|
||
symbol += createByte(codePoint, 6);
|
||
}
|
||
symbol += stringFromCharCode((codePoint & 0x3F) | 0x80);
|
||
return symbol;
|
||
}
|
||
|
||
function utf8encode(string, opts) {
|
||
opts = opts || {};
|
||
var strict = false !== opts.strict;
|
||
|
||
var codePoints = ucs2decode(string);
|
||
var length = codePoints.length;
|
||
var index = -1;
|
||
var codePoint;
|
||
var byteString = '';
|
||
while (++index < length) {
|
||
codePoint = codePoints[index];
|
||
byteString += encodeCodePoint(codePoint, strict);
|
||
}
|
||
return byteString;
|
||
}
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
|
||
function readContinuationByte() {
|
||
if (byteIndex >= byteCount) {
|
||
throw Error('Invalid byte index');
|
||
}
|
||
|
||
var continuationByte = byteArray[byteIndex] & 0xFF;
|
||
byteIndex++;
|
||
|
||
if ((continuationByte & 0xC0) == 0x80) {
|
||
return continuationByte & 0x3F;
|
||
}
|
||
|
||
// If we end up here, it’s not a continuation byte
|
||
throw Error('Invalid continuation byte');
|
||
}
|
||
|
||
function decodeSymbol(strict) {
|
||
var byte1;
|
||
var byte2;
|
||
var byte3;
|
||
var byte4;
|
||
var codePoint;
|
||
|
||
if (byteIndex > byteCount) {
|
||
throw Error('Invalid byte index');
|
||
}
|
||
|
||
if (byteIndex == byteCount) {
|
||
return false;
|
||
}
|
||
|
||
// Read first byte
|
||
byte1 = byteArray[byteIndex] & 0xFF;
|
||
byteIndex++;
|
||
|
||
// 1-byte sequence (no continuation bytes)
|
||
if ((byte1 & 0x80) == 0) {
|
||
return byte1;
|
||
}
|
||
|
||
// 2-byte sequence
|
||
if ((byte1 & 0xE0) == 0xC0) {
|
||
byte2 = readContinuationByte();
|
||
codePoint = ((byte1 & 0x1F) << 6) | byte2;
|
||
if (codePoint >= 0x80) {
|
||
return codePoint;
|
||
} else {
|
||
throw Error('Invalid continuation byte');
|
||
}
|
||
}
|
||
|
||
// 3-byte sequence (may include unpaired surrogates)
|
||
if ((byte1 & 0xF0) == 0xE0) {
|
||
byte2 = readContinuationByte();
|
||
byte3 = readContinuationByte();
|
||
codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;
|
||
if (codePoint >= 0x0800) {
|
||
return checkScalarValue(codePoint, strict) ? codePoint : 0xFFFD;
|
||
} else {
|
||
throw Error('Invalid continuation byte');
|
||
}
|
||
}
|
||
|
||
// 4-byte sequence
|
||
if ((byte1 & 0xF8) == 0xF0) {
|
||
byte2 = readContinuationByte();
|
||
byte3 = readContinuationByte();
|
||
byte4 = readContinuationByte();
|
||
codePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |
|
||
(byte3 << 0x06) | byte4;
|
||
if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {
|
||
return codePoint;
|
||
}
|
||
}
|
||
|
||
throw Error('Invalid UTF-8 detected');
|
||
}
|
||
|
||
var byteArray;
|
||
var byteCount;
|
||
var byteIndex;
|
||
function utf8decode(byteString, opts) {
|
||
opts = opts || {};
|
||
var strict = false !== opts.strict;
|
||
|
||
byteArray = ucs2decode(byteString);
|
||
byteCount = byteArray.length;
|
||
byteIndex = 0;
|
||
var codePoints = [];
|
||
var tmp;
|
||
while ((tmp = decodeSymbol(strict)) !== false) {
|
||
codePoints.push(tmp);
|
||
}
|
||
return ucs2encode(codePoints);
|
||
}
|
||
|
||
module.exports = {
|
||
version: '2.1.2',
|
||
encode: utf8encode,
|
||
decode: utf8decode
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
/* 126 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/*
|
||
* base64-arraybuffer
|
||
* https://github.com/niklasvh/base64-arraybuffer
|
||
*
|
||
* Copyright (c) 2012 Niklas von Hertzen
|
||
* Licensed under the MIT license.
|
||
*/
|
||
(function(){
|
||
"use strict";
|
||
|
||
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||
|
||
// Use a lookup table to find the index.
|
||
var lookup = new Uint8Array(256);
|
||
for (var i = 0; i < chars.length; i++) {
|
||
lookup[chars.charCodeAt(i)] = i;
|
||
}
|
||
|
||
exports.encode = function(arraybuffer) {
|
||
var bytes = new Uint8Array(arraybuffer),
|
||
i, len = bytes.length, base64 = "";
|
||
|
||
for (i = 0; i < len; i+=3) {
|
||
base64 += chars[bytes[i] >> 2];
|
||
base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
|
||
base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
|
||
base64 += chars[bytes[i + 2] & 63];
|
||
}
|
||
|
||
if ((len % 3) === 2) {
|
||
base64 = base64.substring(0, base64.length - 1) + "=";
|
||
} else if (len % 3 === 1) {
|
||
base64 = base64.substring(0, base64.length - 2) + "==";
|
||
}
|
||
|
||
return base64;
|
||
};
|
||
|
||
exports.decode = function(base64) {
|
||
var bufferLength = base64.length * 0.75,
|
||
len = base64.length, i, p = 0,
|
||
encoded1, encoded2, encoded3, encoded4;
|
||
|
||
if (base64[base64.length - 1] === "=") {
|
||
bufferLength--;
|
||
if (base64[base64.length - 2] === "=") {
|
||
bufferLength--;
|
||
}
|
||
}
|
||
|
||
var arraybuffer = new ArrayBuffer(bufferLength),
|
||
bytes = new Uint8Array(arraybuffer);
|
||
|
||
for (i = 0; i < len; i+=4) {
|
||
encoded1 = lookup[base64.charCodeAt(i)];
|
||
encoded2 = lookup[base64.charCodeAt(i+1)];
|
||
encoded3 = lookup[base64.charCodeAt(i+2)];
|
||
encoded4 = lookup[base64.charCodeAt(i+3)];
|
||
|
||
bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
|
||
bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
|
||
bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
|
||
}
|
||
|
||
return arraybuffer;
|
||
};
|
||
})();
|
||
|
||
|
||
/***/ }),
|
||
/* 127 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/**
|
||
* Create a blob builder even when vendor prefixes exist
|
||
*/
|
||
|
||
var BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :
|
||
typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :
|
||
typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :
|
||
typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder :
|
||
false;
|
||
|
||
/**
|
||
* Check if Blob constructor is supported
|
||
*/
|
||
|
||
var blobSupported = (function() {
|
||
try {
|
||
var a = new Blob(['hi']);
|
||
return a.size === 2;
|
||
} catch(e) {
|
||
return false;
|
||
}
|
||
})();
|
||
|
||
/**
|
||
* Check if Blob constructor supports ArrayBufferViews
|
||
* Fails in Safari 6, so we need to map to ArrayBuffers there.
|
||
*/
|
||
|
||
var blobSupportsArrayBufferView = blobSupported && (function() {
|
||
try {
|
||
var b = new Blob([new Uint8Array([1,2])]);
|
||
return b.size === 2;
|
||
} catch(e) {
|
||
return false;
|
||
}
|
||
})();
|
||
|
||
/**
|
||
* Check if BlobBuilder is supported
|
||
*/
|
||
|
||
var blobBuilderSupported = BlobBuilder
|
||
&& BlobBuilder.prototype.append
|
||
&& BlobBuilder.prototype.getBlob;
|
||
|
||
/**
|
||
* Helper function that maps ArrayBufferViews to ArrayBuffers
|
||
* Used by BlobBuilder constructor and old browsers that didn't
|
||
* support it in the Blob constructor.
|
||
*/
|
||
|
||
function mapArrayBufferViews(ary) {
|
||
return ary.map(function(chunk) {
|
||
if (chunk.buffer instanceof ArrayBuffer) {
|
||
var buf = chunk.buffer;
|
||
|
||
// if this is a subarray, make a copy so we only
|
||
// include the subarray region from the underlying buffer
|
||
if (chunk.byteLength !== buf.byteLength) {
|
||
var copy = new Uint8Array(chunk.byteLength);
|
||
copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));
|
||
buf = copy.buffer;
|
||
}
|
||
|
||
return buf;
|
||
}
|
||
|
||
return chunk;
|
||
});
|
||
}
|
||
|
||
function BlobBuilderConstructor(ary, options) {
|
||
options = options || {};
|
||
|
||
var bb = new BlobBuilder();
|
||
mapArrayBufferViews(ary).forEach(function(part) {
|
||
bb.append(part);
|
||
});
|
||
|
||
return (options.type) ? bb.getBlob(options.type) : bb.getBlob();
|
||
};
|
||
|
||
function BlobConstructor(ary, options) {
|
||
return new Blob(mapArrayBufferViews(ary), options || {});
|
||
};
|
||
|
||
if (typeof Blob !== 'undefined') {
|
||
BlobBuilderConstructor.prototype = Blob.prototype;
|
||
BlobConstructor.prototype = Blob.prototype;
|
||
}
|
||
|
||
module.exports = (function() {
|
||
if (blobSupported) {
|
||
return blobSupportsArrayBufferView ? Blob : BlobConstructor;
|
||
} else if (blobBuilderSupported) {
|
||
return BlobBuilderConstructor;
|
||
} else {
|
||
return undefined;
|
||
}
|
||
})();
|
||
|
||
|
||
/***/ }),
|
||
/* 128 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
|
||
/**
|
||
* This is the common logic for both the Node.js and web browser
|
||
* implementations of `debug()`.
|
||
*
|
||
* Expose `debug()` as the module.
|
||
*/
|
||
|
||
exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
|
||
exports.coerce = coerce;
|
||
exports.disable = disable;
|
||
exports.enable = enable;
|
||
exports.enabled = enabled;
|
||
exports.humanize = __webpack_require__(47);
|
||
|
||
/**
|
||
* Active `debug` instances.
|
||
*/
|
||
exports.instances = [];
|
||
|
||
/**
|
||
* The currently active debug mode names, and names to skip.
|
||
*/
|
||
|
||
exports.names = [];
|
||
exports.skips = [];
|
||
|
||
/**
|
||
* Map of special "%n" handling functions, for the debug "format" argument.
|
||
*
|
||
* Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
|
||
*/
|
||
|
||
exports.formatters = {};
|
||
|
||
/**
|
||
* Select a color.
|
||
* @param {String} namespace
|
||
* @return {Number}
|
||
* @api private
|
||
*/
|
||
|
||
function selectColor(namespace) {
|
||
var hash = 0, i;
|
||
|
||
for (i in namespace) {
|
||
hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
|
||
hash |= 0; // Convert to 32bit integer
|
||
}
|
||
|
||
return exports.colors[Math.abs(hash) % exports.colors.length];
|
||
}
|
||
|
||
/**
|
||
* Create a debugger with the given `namespace`.
|
||
*
|
||
* @param {String} namespace
|
||
* @return {Function}
|
||
* @api public
|
||
*/
|
||
|
||
function createDebug(namespace) {
|
||
|
||
var prevTime;
|
||
|
||
function debug() {
|
||
// disabled?
|
||
if (!debug.enabled) return;
|
||
|
||
var self = debug;
|
||
|
||
// set `diff` timestamp
|
||
var curr = +new Date();
|
||
var ms = curr - (prevTime || curr);
|
||
self.diff = ms;
|
||
self.prev = prevTime;
|
||
self.curr = curr;
|
||
prevTime = curr;
|
||
|
||
// turn the `arguments` into a proper Array
|
||
var args = new Array(arguments.length);
|
||
for (var i = 0; i < args.length; i++) {
|
||
args[i] = arguments[i];
|
||
}
|
||
|
||
args[0] = exports.coerce(args[0]);
|
||
|
||
if ('string' !== typeof args[0]) {
|
||
// anything else let's inspect with %O
|
||
args.unshift('%O');
|
||
}
|
||
|
||
// apply any `formatters` transformations
|
||
var index = 0;
|
||
args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
|
||
// if we encounter an escaped % then don't increase the array index
|
||
if (match === '%%') return match;
|
||
index++;
|
||
var formatter = exports.formatters[format];
|
||
if ('function' === typeof formatter) {
|
||
var val = args[index];
|
||
match = formatter.call(self, val);
|
||
|
||
// now we need to remove `args[index]` since it's inlined in the `format`
|
||
args.splice(index, 1);
|
||
index--;
|
||
}
|
||
return match;
|
||
});
|
||
|
||
// apply env-specific formatting (colors, etc.)
|
||
exports.formatArgs.call(self, args);
|
||
|
||
var logFn = debug.log || exports.log || console.log.bind(console);
|
||
logFn.apply(self, args);
|
||
}
|
||
|
||
debug.namespace = namespace;
|
||
debug.enabled = exports.enabled(namespace);
|
||
debug.useColors = exports.useColors();
|
||
debug.color = selectColor(namespace);
|
||
debug.destroy = destroy;
|
||
|
||
// env-specific initialization logic for debug instances
|
||
if ('function' === typeof exports.init) {
|
||
exports.init(debug);
|
||
}
|
||
|
||
exports.instances.push(debug);
|
||
|
||
return debug;
|
||
}
|
||
|
||
function destroy () {
|
||
var index = exports.instances.indexOf(this);
|
||
if (index !== -1) {
|
||
exports.instances.splice(index, 1);
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Enables a debug mode by namespaces. This can include modes
|
||
* separated by a colon and wildcards.
|
||
*
|
||
* @param {String} namespaces
|
||
* @api public
|
||
*/
|
||
|
||
function enable(namespaces) {
|
||
exports.save(namespaces);
|
||
|
||
exports.names = [];
|
||
exports.skips = [];
|
||
|
||
var i;
|
||
var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
|
||
var len = split.length;
|
||
|
||
for (i = 0; i < len; i++) {
|
||
if (!split[i]) continue; // ignore empty strings
|
||
namespaces = split[i].replace(/\*/g, '.*?');
|
||
if (namespaces[0] === '-') {
|
||
exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
|
||
} else {
|
||
exports.names.push(new RegExp('^' + namespaces + '$'));
|
||
}
|
||
}
|
||
|
||
for (i = 0; i < exports.instances.length; i++) {
|
||
var instance = exports.instances[i];
|
||
instance.enabled = exports.enabled(instance.namespace);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Disable debug output.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
function disable() {
|
||
exports.enable('');
|
||
}
|
||
|
||
/**
|
||
* Returns true if the given mode name is enabled, false otherwise.
|
||
*
|
||
* @param {String} name
|
||
* @return {Boolean}
|
||
* @api public
|
||
*/
|
||
|
||
function enabled(name) {
|
||
if (name[name.length - 1] === '*') {
|
||
return true;
|
||
}
|
||
var i, len;
|
||
for (i = 0, len = exports.skips.length; i < len; i++) {
|
||
if (exports.skips[i].test(name)) {
|
||
return false;
|
||
}
|
||
}
|
||
for (i = 0, len = exports.names.length; i < len; i++) {
|
||
if (exports.names[i].test(name)) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Coerce `val`.
|
||
*
|
||
* @param {Mixed} val
|
||
* @return {Mixed}
|
||
* @api private
|
||
*/
|
||
|
||
function coerce(val) {
|
||
if (val instanceof Error) return val.stack || val.message;
|
||
return val;
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 129 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(global) {/**
|
||
* Module requirements.
|
||
*/
|
||
|
||
var Polling = __webpack_require__(66);
|
||
var inherit = __webpack_require__(35);
|
||
|
||
/**
|
||
* Module exports.
|
||
*/
|
||
|
||
module.exports = JSONPPolling;
|
||
|
||
/**
|
||
* Cached regular expressions.
|
||
*/
|
||
|
||
var rNewline = /\n/g;
|
||
var rEscapedNewline = /\\n/g;
|
||
|
||
/**
|
||
* Global JSONP callbacks.
|
||
*/
|
||
|
||
var callbacks;
|
||
|
||
/**
|
||
* Noop.
|
||
*/
|
||
|
||
function empty () { }
|
||
|
||
/**
|
||
* Until https://github.com/tc39/proposal-global is shipped.
|
||
*/
|
||
function glob () {
|
||
return typeof self !== 'undefined' ? self
|
||
: typeof window !== 'undefined' ? window
|
||
: typeof global !== 'undefined' ? global : {};
|
||
}
|
||
|
||
/**
|
||
* JSONP Polling constructor.
|
||
*
|
||
* @param {Object} opts.
|
||
* @api public
|
||
*/
|
||
|
||
function JSONPPolling (opts) {
|
||
Polling.call(this, opts);
|
||
|
||
this.query = this.query || {};
|
||
|
||
// define global callbacks array if not present
|
||
// we do this here (lazily) to avoid unneeded global pollution
|
||
if (!callbacks) {
|
||
// we need to consider multiple engines in the same page
|
||
var global = glob();
|
||
callbacks = global.___eio = (global.___eio || []);
|
||
}
|
||
|
||
// callback identifier
|
||
this.index = callbacks.length;
|
||
|
||
// add callback to jsonp global
|
||
var self = this;
|
||
callbacks.push(function (msg) {
|
||
self.onData(msg);
|
||
});
|
||
|
||
// append to query string
|
||
this.query.j = this.index;
|
||
|
||
// prevent spurious errors from being emitted when the window is unloaded
|
||
if (typeof addEventListener === 'function') {
|
||
addEventListener('beforeunload', function () {
|
||
if (self.script) self.script.onerror = empty;
|
||
}, false);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Inherits from Polling.
|
||
*/
|
||
|
||
inherit(JSONPPolling, Polling);
|
||
|
||
/*
|
||
* JSONP only supports binary as base64 encoded strings
|
||
*/
|
||
|
||
JSONPPolling.prototype.supportsBinary = false;
|
||
|
||
/**
|
||
* Closes the socket.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
JSONPPolling.prototype.doClose = function () {
|
||
if (this.script) {
|
||
this.script.parentNode.removeChild(this.script);
|
||
this.script = null;
|
||
}
|
||
|
||
if (this.form) {
|
||
this.form.parentNode.removeChild(this.form);
|
||
this.form = null;
|
||
this.iframe = null;
|
||
}
|
||
|
||
Polling.prototype.doClose.call(this);
|
||
};
|
||
|
||
/**
|
||
* Starts a poll cycle.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
JSONPPolling.prototype.doPoll = function () {
|
||
var self = this;
|
||
var script = document.createElement('script');
|
||
|
||
if (this.script) {
|
||
this.script.parentNode.removeChild(this.script);
|
||
this.script = null;
|
||
}
|
||
|
||
script.async = true;
|
||
script.src = this.uri();
|
||
script.onerror = function (e) {
|
||
self.onError('jsonp poll error', e);
|
||
};
|
||
|
||
var insertAt = document.getElementsByTagName('script')[0];
|
||
if (insertAt) {
|
||
insertAt.parentNode.insertBefore(script, insertAt);
|
||
} else {
|
||
(document.head || document.body).appendChild(script);
|
||
}
|
||
this.script = script;
|
||
|
||
var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);
|
||
|
||
if (isUAgecko) {
|
||
setTimeout(function () {
|
||
var iframe = document.createElement('iframe');
|
||
document.body.appendChild(iframe);
|
||
document.body.removeChild(iframe);
|
||
}, 100);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Writes with a hidden iframe.
|
||
*
|
||
* @param {String} data to send
|
||
* @param {Function} called upon flush.
|
||
* @api private
|
||
*/
|
||
|
||
JSONPPolling.prototype.doWrite = function (data, fn) {
|
||
var self = this;
|
||
|
||
if (!this.form) {
|
||
var form = document.createElement('form');
|
||
var area = document.createElement('textarea');
|
||
var id = this.iframeId = 'eio_iframe_' + this.index;
|
||
var iframe;
|
||
|
||
form.className = 'socketio';
|
||
form.style.position = 'absolute';
|
||
form.style.top = '-1000px';
|
||
form.style.left = '-1000px';
|
||
form.target = id;
|
||
form.method = 'POST';
|
||
form.setAttribute('accept-charset', 'utf-8');
|
||
area.name = 'd';
|
||
form.appendChild(area);
|
||
document.body.appendChild(form);
|
||
|
||
this.form = form;
|
||
this.area = area;
|
||
}
|
||
|
||
this.form.action = this.uri();
|
||
|
||
function complete () {
|
||
initIframe();
|
||
fn();
|
||
}
|
||
|
||
function initIframe () {
|
||
if (self.iframe) {
|
||
try {
|
||
self.form.removeChild(self.iframe);
|
||
} catch (e) {
|
||
self.onError('jsonp polling iframe removal error', e);
|
||
}
|
||
}
|
||
|
||
try {
|
||
// ie6 dynamic iframes with target="" support (thanks Chris Lambacher)
|
||
var html = '<iframe src="javascript:0" name="' + self.iframeId + '">';
|
||
iframe = document.createElement(html);
|
||
} catch (e) {
|
||
iframe = document.createElement('iframe');
|
||
iframe.name = self.iframeId;
|
||
iframe.src = 'javascript:0';
|
||
}
|
||
|
||
iframe.id = self.iframeId;
|
||
|
||
self.form.appendChild(iframe);
|
||
self.iframe = iframe;
|
||
}
|
||
|
||
initIframe();
|
||
|
||
// escape \n to prevent it from being converted into \r\n by some UAs
|
||
// double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side
|
||
data = data.replace(rEscapedNewline, '\\\n');
|
||
this.area.value = data.replace(rNewline, '\\n');
|
||
|
||
try {
|
||
this.form.submit();
|
||
} catch (e) {}
|
||
|
||
if (this.iframe.attachEvent) {
|
||
this.iframe.onreadystatechange = function () {
|
||
if (self.iframe.readyState === 'complete') {
|
||
complete();
|
||
}
|
||
};
|
||
} else {
|
||
this.iframe.onload = complete;
|
||
}
|
||
};
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(24)))
|
||
|
||
/***/ }),
|
||
/* 130 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(Buffer) {/**
|
||
* Module dependencies.
|
||
*/
|
||
|
||
var Transport = __webpack_require__(51);
|
||
var parser = __webpack_require__(18);
|
||
var parseqs = __webpack_require__(34);
|
||
var inherit = __webpack_require__(35);
|
||
var yeast = __webpack_require__(68);
|
||
var debug = __webpack_require__(36)('engine.io-client:websocket');
|
||
|
||
var BrowserWebSocket, NodeWebSocket;
|
||
|
||
if (typeof WebSocket !== 'undefined') {
|
||
BrowserWebSocket = WebSocket;
|
||
} else if (typeof self !== 'undefined') {
|
||
BrowserWebSocket = self.WebSocket || self.MozWebSocket;
|
||
} else {
|
||
try {
|
||
NodeWebSocket = __webpack_require__(131);
|
||
} catch (e) { }
|
||
}
|
||
|
||
/**
|
||
* Get either the `WebSocket` or `MozWebSocket` globals
|
||
* in the browser or try to resolve WebSocket-compatible
|
||
* interface exposed by `ws` for Node-like environment.
|
||
*/
|
||
|
||
var WebSocketImpl = BrowserWebSocket || NodeWebSocket;
|
||
|
||
/**
|
||
* Module exports.
|
||
*/
|
||
|
||
module.exports = WS;
|
||
|
||
/**
|
||
* WebSocket transport constructor.
|
||
*
|
||
* @api {Object} connection options
|
||
* @api public
|
||
*/
|
||
|
||
function WS (opts) {
|
||
var forceBase64 = (opts && opts.forceBase64);
|
||
if (forceBase64) {
|
||
this.supportsBinary = false;
|
||
}
|
||
this.perMessageDeflate = opts.perMessageDeflate;
|
||
this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode;
|
||
this.protocols = opts.protocols;
|
||
if (!this.usingBrowserWebSocket) {
|
||
WebSocketImpl = NodeWebSocket;
|
||
}
|
||
Transport.call(this, opts);
|
||
}
|
||
|
||
/**
|
||
* Inherits from Transport.
|
||
*/
|
||
|
||
inherit(WS, Transport);
|
||
|
||
/**
|
||
* Transport name.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
WS.prototype.name = 'websocket';
|
||
|
||
/*
|
||
* WebSockets support binary
|
||
*/
|
||
|
||
WS.prototype.supportsBinary = true;
|
||
|
||
/**
|
||
* Opens socket.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
WS.prototype.doOpen = function () {
|
||
if (!this.check()) {
|
||
// let probe timeout
|
||
return;
|
||
}
|
||
|
||
var uri = this.uri();
|
||
var protocols = this.protocols;
|
||
var opts = {
|
||
agent: this.agent,
|
||
perMessageDeflate: this.perMessageDeflate
|
||
};
|
||
|
||
// SSL options for Node.js client
|
||
opts.pfx = this.pfx;
|
||
opts.key = this.key;
|
||
opts.passphrase = this.passphrase;
|
||
opts.cert = this.cert;
|
||
opts.ca = this.ca;
|
||
opts.ciphers = this.ciphers;
|
||
opts.rejectUnauthorized = this.rejectUnauthorized;
|
||
if (this.extraHeaders) {
|
||
opts.headers = this.extraHeaders;
|
||
}
|
||
if (this.localAddress) {
|
||
opts.localAddress = this.localAddress;
|
||
}
|
||
|
||
try {
|
||
this.ws =
|
||
this.usingBrowserWebSocket && !this.isReactNative
|
||
? protocols
|
||
? new WebSocketImpl(uri, protocols)
|
||
: new WebSocketImpl(uri)
|
||
: new WebSocketImpl(uri, protocols, opts);
|
||
} catch (err) {
|
||
return this.emit('error', err);
|
||
}
|
||
|
||
if (this.ws.binaryType === undefined) {
|
||
this.supportsBinary = false;
|
||
}
|
||
|
||
if (this.ws.supports && this.ws.supports.binary) {
|
||
this.supportsBinary = true;
|
||
this.ws.binaryType = 'nodebuffer';
|
||
} else {
|
||
this.ws.binaryType = 'arraybuffer';
|
||
}
|
||
|
||
this.addEventListeners();
|
||
};
|
||
|
||
/**
|
||
* Adds event listeners to the socket
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
WS.prototype.addEventListeners = function () {
|
||
var self = this;
|
||
|
||
this.ws.onopen = function () {
|
||
self.onOpen();
|
||
};
|
||
this.ws.onclose = function () {
|
||
self.onClose();
|
||
};
|
||
this.ws.onmessage = function (ev) {
|
||
self.onData(ev.data);
|
||
};
|
||
this.ws.onerror = function (e) {
|
||
self.onError('websocket error', e);
|
||
};
|
||
};
|
||
|
||
/**
|
||
* Writes data to socket.
|
||
*
|
||
* @param {Array} array of packets.
|
||
* @api private
|
||
*/
|
||
|
||
WS.prototype.write = function (packets) {
|
||
var self = this;
|
||
this.writable = false;
|
||
|
||
// encodePacket efficient as it uses WS framing
|
||
// no need for encodePayload
|
||
var total = packets.length;
|
||
for (var i = 0, l = total; i < l; i++) {
|
||
(function (packet) {
|
||
parser.encodePacket(packet, self.supportsBinary, function (data) {
|
||
if (!self.usingBrowserWebSocket) {
|
||
// always create a new object (GH-437)
|
||
var opts = {};
|
||
if (packet.options) {
|
||
opts.compress = packet.options.compress;
|
||
}
|
||
|
||
if (self.perMessageDeflate) {
|
||
var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length;
|
||
if (len < self.perMessageDeflate.threshold) {
|
||
opts.compress = false;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Sometimes the websocket has already been closed but the browser didn't
|
||
// have a chance of informing us about it yet, in that case send will
|
||
// throw an error
|
||
try {
|
||
if (self.usingBrowserWebSocket) {
|
||
// TypeError is thrown when passing the second argument on Safari
|
||
self.ws.send(data);
|
||
} else {
|
||
self.ws.send(data, opts);
|
||
}
|
||
} catch (e) {
|
||
debug('websocket closed before onclose event');
|
||
}
|
||
|
||
--total || done();
|
||
});
|
||
})(packets[i]);
|
||
}
|
||
|
||
function done () {
|
||
self.emit('flush');
|
||
|
||
// fake drain
|
||
// defer to next tick to allow Socket to clear writeBuffer
|
||
setTimeout(function () {
|
||
self.writable = true;
|
||
self.emit('drain');
|
||
}, 0);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Called upon close
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
WS.prototype.onClose = function () {
|
||
Transport.prototype.onClose.call(this);
|
||
};
|
||
|
||
/**
|
||
* Closes socket.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
WS.prototype.doClose = function () {
|
||
if (typeof this.ws !== 'undefined') {
|
||
this.ws.close();
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Generates uri for connection.
|
||
*
|
||
* @api private
|
||
*/
|
||
|
||
WS.prototype.uri = function () {
|
||
var query = this.query || {};
|
||
var schema = this.secure ? 'wss' : 'ws';
|
||
var port = '';
|
||
|
||
// avoid port if default for schema
|
||
if (this.port && (('wss' === schema && Number(this.port) !== 443) ||
|
||
('ws' === schema && Number(this.port) !== 80))) {
|
||
port = ':' + this.port;
|
||
}
|
||
|
||
// append timestamp to URI
|
||
if (this.timestampRequests) {
|
||
query[this.timestampParam] = yeast();
|
||
}
|
||
|
||
// communicate binary support capabilities
|
||
if (!this.supportsBinary) {
|
||
query.b64 = 1;
|
||
}
|
||
|
||
query = parseqs.encode(query);
|
||
|
||
// prepend ? to query
|
||
if (query.length) {
|
||
query = '?' + query;
|
||
}
|
||
|
||
var ipv6 = this.hostname.indexOf(':') !== -1;
|
||
return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query;
|
||
};
|
||
|
||
/**
|
||
* Feature detection for WebSocket.
|
||
*
|
||
* @return {Boolean} whether this transport is available.
|
||
* @api public
|
||
*/
|
||
|
||
WS.prototype.check = function () {
|
||
return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name);
|
||
};
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(49).Buffer))
|
||
|
||
/***/ }),
|
||
/* 131 */
|
||
/***/ (function(module, exports) {
|
||
|
||
/* (ignored) */
|
||
|
||
/***/ }),
|
||
/* 132 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = toArray
|
||
|
||
function toArray(list, index) {
|
||
var array = []
|
||
|
||
index = index || 0
|
||
|
||
for (var i = index || 0; i < list.length; i++) {
|
||
array[i - index] = list[i]
|
||
}
|
||
|
||
return array
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 133 */
|
||
/***/ (function(module, exports) {
|
||
|
||
|
||
/**
|
||
* Expose `Backoff`.
|
||
*/
|
||
|
||
module.exports = Backoff;
|
||
|
||
/**
|
||
* Initialize backoff timer with `opts`.
|
||
*
|
||
* - `min` initial timeout in milliseconds [100]
|
||
* - `max` max timeout [10000]
|
||
* - `jitter` [0]
|
||
* - `factor` [2]
|
||
*
|
||
* @param {Object} opts
|
||
* @api public
|
||
*/
|
||
|
||
function Backoff(opts) {
|
||
opts = opts || {};
|
||
this.ms = opts.min || 100;
|
||
this.max = opts.max || 10000;
|
||
this.factor = opts.factor || 2;
|
||
this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;
|
||
this.attempts = 0;
|
||
}
|
||
|
||
/**
|
||
* Return the backoff duration.
|
||
*
|
||
* @return {Number}
|
||
* @api public
|
||
*/
|
||
|
||
Backoff.prototype.duration = function(){
|
||
var ms = this.ms * Math.pow(this.factor, this.attempts++);
|
||
if (this.jitter) {
|
||
var rand = Math.random();
|
||
var deviation = Math.floor(rand * this.jitter * ms);
|
||
ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;
|
||
}
|
||
return Math.min(ms, this.max) | 0;
|
||
};
|
||
|
||
/**
|
||
* Reset the number of attempts.
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
Backoff.prototype.reset = function(){
|
||
this.attempts = 0;
|
||
};
|
||
|
||
/**
|
||
* Set the minimum duration
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
Backoff.prototype.setMin = function(min){
|
||
this.ms = min;
|
||
};
|
||
|
||
/**
|
||
* Set the maximum duration
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
Backoff.prototype.setMax = function(max){
|
||
this.max = max;
|
||
};
|
||
|
||
/**
|
||
* Set the jitter
|
||
*
|
||
* @api public
|
||
*/
|
||
|
||
Backoff.prototype.setJitter = function(jitter){
|
||
this.jitter = jitter;
|
||
};
|
||
|
||
|
||
|
||
/***/ }),
|
||
/* 134 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subscription_1 = __webpack_require__(12);
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var SubjectSubscription = (function (_super) {
|
||
__extends(SubjectSubscription, _super);
|
||
function SubjectSubscription(subject, subscriber) {
|
||
_super.call(this);
|
||
this.subject = subject;
|
||
this.subscriber = subscriber;
|
||
this.closed = false;
|
||
}
|
||
SubjectSubscription.prototype.unsubscribe = function () {
|
||
if (this.closed) {
|
||
return;
|
||
}
|
||
this.closed = true;
|
||
var subject = this.subject;
|
||
var observers = subject.observers;
|
||
this.subject = null;
|
||
if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {
|
||
return;
|
||
}
|
||
var subscriberIndex = observers.indexOf(this.subscriber);
|
||
if (subscriberIndex !== -1) {
|
||
observers.splice(subscriberIndex, 1);
|
||
}
|
||
};
|
||
return SubjectSubscription;
|
||
}(Subscription_1.Subscription));
|
||
exports.SubjectSubscription = SubjectSubscription;
|
||
//# sourceMappingURL=SubjectSubscription.js.map
|
||
|
||
/***/ }),
|
||
/* 135 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var ConnectableObservable_1 = __webpack_require__(136);
|
||
/* tslint:enable:max-line-length */
|
||
/**
|
||
* Returns an Observable that emits the results of invoking a specified selector on items
|
||
* emitted by a ConnectableObservable that shares a single subscription to the underlying stream.
|
||
*
|
||
* <img src="./img/multicast.png" width="100%">
|
||
*
|
||
* @param {Function|Subject} subjectOrSubjectFactory - Factory function to create an intermediate subject through
|
||
* which the source sequence's elements will be multicast to the selector function
|
||
* or Subject to push source elements into.
|
||
* @param {Function} [selector] - Optional selector function that can use the multicasted source stream
|
||
* as many times as needed, without causing multiple subscriptions to the source stream.
|
||
* Subscribers to the given source will receive all notifications of the source from the
|
||
* time of the subscription forward.
|
||
* @return {Observable} An Observable that emits the results of invoking the selector
|
||
* on the items emitted by a `ConnectableObservable` that shares a single subscription to
|
||
* the underlying stream.
|
||
* @method multicast
|
||
* @owner Observable
|
||
*/
|
||
function multicast(subjectOrSubjectFactory, selector) {
|
||
return function multicastOperatorFunction(source) {
|
||
var subjectFactory;
|
||
if (typeof subjectOrSubjectFactory === 'function') {
|
||
subjectFactory = subjectOrSubjectFactory;
|
||
}
|
||
else {
|
||
subjectFactory = function subjectFactory() {
|
||
return subjectOrSubjectFactory;
|
||
};
|
||
}
|
||
if (typeof selector === 'function') {
|
||
return source.lift(new MulticastOperator(subjectFactory, selector));
|
||
}
|
||
var connectable = Object.create(source, ConnectableObservable_1.connectableObservableDescriptor);
|
||
connectable.source = source;
|
||
connectable.subjectFactory = subjectFactory;
|
||
return connectable;
|
||
};
|
||
}
|
||
exports.multicast = multicast;
|
||
var MulticastOperator = (function () {
|
||
function MulticastOperator(subjectFactory, selector) {
|
||
this.subjectFactory = subjectFactory;
|
||
this.selector = selector;
|
||
}
|
||
MulticastOperator.prototype.call = function (subscriber, source) {
|
||
var selector = this.selector;
|
||
var subject = this.subjectFactory();
|
||
var subscription = selector(subject).subscribe(subscriber);
|
||
subscription.add(source.subscribe(subject));
|
||
return subscription;
|
||
};
|
||
return MulticastOperator;
|
||
}());
|
||
exports.MulticastOperator = MulticastOperator;
|
||
//# sourceMappingURL=multicast.js.map
|
||
|
||
/***/ }),
|
||
/* 136 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subject_1 = __webpack_require__(37);
|
||
var Observable_1 = __webpack_require__(1);
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
var Subscription_1 = __webpack_require__(12);
|
||
var refCount_1 = __webpack_require__(75);
|
||
/**
|
||
* @class ConnectableObservable<T>
|
||
*/
|
||
var ConnectableObservable = (function (_super) {
|
||
__extends(ConnectableObservable, _super);
|
||
function ConnectableObservable(/** @deprecated internal use only */ source,
|
||
/** @deprecated internal use only */ subjectFactory) {
|
||
_super.call(this);
|
||
this.source = source;
|
||
this.subjectFactory = subjectFactory;
|
||
/** @deprecated internal use only */ this._refCount = 0;
|
||
this._isComplete = false;
|
||
}
|
||
/** @deprecated internal use only */ ConnectableObservable.prototype._subscribe = function (subscriber) {
|
||
return this.getSubject().subscribe(subscriber);
|
||
};
|
||
/** @deprecated internal use only */ ConnectableObservable.prototype.getSubject = function () {
|
||
var subject = this._subject;
|
||
if (!subject || subject.isStopped) {
|
||
this._subject = this.subjectFactory();
|
||
}
|
||
return this._subject;
|
||
};
|
||
ConnectableObservable.prototype.connect = function () {
|
||
var connection = this._connection;
|
||
if (!connection) {
|
||
this._isComplete = false;
|
||
connection = this._connection = new Subscription_1.Subscription();
|
||
connection.add(this.source
|
||
.subscribe(new ConnectableSubscriber(this.getSubject(), this)));
|
||
if (connection.closed) {
|
||
this._connection = null;
|
||
connection = Subscription_1.Subscription.EMPTY;
|
||
}
|
||
else {
|
||
this._connection = connection;
|
||
}
|
||
}
|
||
return connection;
|
||
};
|
||
ConnectableObservable.prototype.refCount = function () {
|
||
return refCount_1.refCount()(this);
|
||
};
|
||
return ConnectableObservable;
|
||
}(Observable_1.Observable));
|
||
exports.ConnectableObservable = ConnectableObservable;
|
||
var connectableProto = ConnectableObservable.prototype;
|
||
exports.connectableObservableDescriptor = {
|
||
operator: { value: null },
|
||
_refCount: { value: 0, writable: true },
|
||
_subject: { value: null, writable: true },
|
||
_connection: { value: null, writable: true },
|
||
_subscribe: { value: connectableProto._subscribe },
|
||
_isComplete: { value: connectableProto._isComplete, writable: true },
|
||
getSubject: { value: connectableProto.getSubject },
|
||
connect: { value: connectableProto.connect },
|
||
refCount: { value: connectableProto.refCount }
|
||
};
|
||
var ConnectableSubscriber = (function (_super) {
|
||
__extends(ConnectableSubscriber, _super);
|
||
function ConnectableSubscriber(destination, connectable) {
|
||
_super.call(this, destination);
|
||
this.connectable = connectable;
|
||
}
|
||
ConnectableSubscriber.prototype._error = function (err) {
|
||
this._unsubscribe();
|
||
_super.prototype._error.call(this, err);
|
||
};
|
||
ConnectableSubscriber.prototype._complete = function () {
|
||
this.connectable._isComplete = true;
|
||
this._unsubscribe();
|
||
_super.prototype._complete.call(this);
|
||
};
|
||
/** @deprecated internal use only */ ConnectableSubscriber.prototype._unsubscribe = function () {
|
||
var connectable = this.connectable;
|
||
if (connectable) {
|
||
this.connectable = null;
|
||
var connection = connectable._connection;
|
||
connectable._refCount = 0;
|
||
connectable._subject = null;
|
||
connectable._connection = null;
|
||
if (connection) {
|
||
connection.unsubscribe();
|
||
}
|
||
}
|
||
};
|
||
return ConnectableSubscriber;
|
||
}(Subject_1.SubjectSubscriber));
|
||
var RefCountOperator = (function () {
|
||
function RefCountOperator(connectable) {
|
||
this.connectable = connectable;
|
||
}
|
||
RefCountOperator.prototype.call = function (subscriber, source) {
|
||
var connectable = this.connectable;
|
||
connectable._refCount++;
|
||
var refCounter = new RefCountSubscriber(subscriber, connectable);
|
||
var subscription = source.subscribe(refCounter);
|
||
if (!refCounter.closed) {
|
||
refCounter.connection = connectable.connect();
|
||
}
|
||
return subscription;
|
||
};
|
||
return RefCountOperator;
|
||
}());
|
||
var RefCountSubscriber = (function (_super) {
|
||
__extends(RefCountSubscriber, _super);
|
||
function RefCountSubscriber(destination, connectable) {
|
||
_super.call(this, destination);
|
||
this.connectable = connectable;
|
||
}
|
||
/** @deprecated internal use only */ RefCountSubscriber.prototype._unsubscribe = function () {
|
||
var connectable = this.connectable;
|
||
if (!connectable) {
|
||
this.connection = null;
|
||
return;
|
||
}
|
||
this.connectable = null;
|
||
var refCount = connectable._refCount;
|
||
if (refCount <= 0) {
|
||
this.connection = null;
|
||
return;
|
||
}
|
||
connectable._refCount = refCount - 1;
|
||
if (refCount > 1) {
|
||
this.connection = null;
|
||
return;
|
||
}
|
||
///
|
||
// Compare the local RefCountSubscriber's connection Subscription to the
|
||
// connection Subscription on the shared ConnectableObservable. In cases
|
||
// where the ConnectableObservable source synchronously emits values, and
|
||
// the RefCountSubscriber's downstream Observers synchronously unsubscribe,
|
||
// execution continues to here before the RefCountOperator has a chance to
|
||
// supply the RefCountSubscriber with the shared connection Subscription.
|
||
// For example:
|
||
// ```
|
||
// Observable.range(0, 10)
|
||
// .publish()
|
||
// .refCount()
|
||
// .take(5)
|
||
// .subscribe();
|
||
// ```
|
||
// In order to account for this case, RefCountSubscriber should only dispose
|
||
// the ConnectableObservable's shared connection Subscription if the
|
||
// connection Subscription exists, *and* either:
|
||
// a. RefCountSubscriber doesn't have a reference to the shared connection
|
||
// Subscription yet, or,
|
||
// b. RefCountSubscriber's connection Subscription reference is identical
|
||
// to the shared connection Subscription
|
||
///
|
||
var connection = this.connection;
|
||
var sharedConnection = connectable._connection;
|
||
this.connection = null;
|
||
if (sharedConnection && (!connection || sharedConnection === connection)) {
|
||
sharedConnection.unsubscribe();
|
||
}
|
||
};
|
||
return RefCountSubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
//# sourceMappingURL=ConnectableObservable.js.map
|
||
|
||
/***/ }),
|
||
/* 137 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var BehaviorSubject_1 = __webpack_require__(13);
|
||
var styles = {
|
||
display: "none",
|
||
padding: "15px",
|
||
fontFamily: "sans-serif",
|
||
position: "fixed",
|
||
fontSize: "0.9em",
|
||
zIndex: 9999,
|
||
right: 0,
|
||
top: 0,
|
||
borderBottomLeftRadius: "5px",
|
||
backgroundColor: "#1B2032",
|
||
margin: 0,
|
||
color: "white",
|
||
textAlign: "center",
|
||
pointerEvents: "none"
|
||
};
|
||
/**
|
||
* @param {IBrowserSyncOptions} options
|
||
* @returns {BehaviorSubject<any>}
|
||
*/
|
||
function initNotify(options) {
|
||
var cssStyles = styles;
|
||
var elem;
|
||
if (options.notify.styles) {
|
||
if (Object.prototype.toString.call(options.notify.styles) ===
|
||
"[object Array]") {
|
||
// handle original array behavior, replace all styles with a joined copy
|
||
cssStyles = options.notify.styles.join(";");
|
||
}
|
||
else {
|
||
for (var key in options.notify.styles) {
|
||
if (options.notify.styles.hasOwnProperty(key)) {
|
||
cssStyles[key] = options.notify.styles[key];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
elem = document.createElement("DIV");
|
||
elem.id = "__bs_notify__";
|
||
if (typeof cssStyles === "string") {
|
||
elem.style.cssText = cssStyles;
|
||
}
|
||
else {
|
||
for (var rule in cssStyles) {
|
||
elem.style[rule] = cssStyles[rule];
|
||
}
|
||
}
|
||
return new BehaviorSubject_1.BehaviorSubject(elem);
|
||
}
|
||
exports.initNotify = initNotify;
|
||
|
||
|
||
/***/ }),
|
||
/* 138 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var isNumeric_1 = __webpack_require__(77);
|
||
var Observable_1 = __webpack_require__(1);
|
||
var async_1 = __webpack_require__(78);
|
||
var isScheduler_1 = __webpack_require__(25);
|
||
var isDate_1 = __webpack_require__(141);
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @extends {Ignored}
|
||
* @hide true
|
||
*/
|
||
var TimerObservable = (function (_super) {
|
||
__extends(TimerObservable, _super);
|
||
function TimerObservable(dueTime, period, scheduler) {
|
||
if (dueTime === void 0) { dueTime = 0; }
|
||
_super.call(this);
|
||
this.period = -1;
|
||
this.dueTime = 0;
|
||
if (isNumeric_1.isNumeric(period)) {
|
||
this.period = Number(period) < 1 && 1 || Number(period);
|
||
}
|
||
else if (isScheduler_1.isScheduler(period)) {
|
||
scheduler = period;
|
||
}
|
||
if (!isScheduler_1.isScheduler(scheduler)) {
|
||
scheduler = async_1.async;
|
||
}
|
||
this.scheduler = scheduler;
|
||
this.dueTime = isDate_1.isDate(dueTime) ?
|
||
(+dueTime - this.scheduler.now()) :
|
||
dueTime;
|
||
}
|
||
/**
|
||
* Creates an Observable that starts emitting after an `initialDelay` and
|
||
* emits ever increasing numbers after each `period` of time thereafter.
|
||
*
|
||
* <span class="informal">Its like {@link interval}, but you can specify when
|
||
* should the emissions start.</span>
|
||
*
|
||
* <img src="./img/timer.png" width="100%">
|
||
*
|
||
* `timer` returns an Observable that emits an infinite sequence of ascending
|
||
* integers, with a constant interval of time, `period` of your choosing
|
||
* between those emissions. The first emission happens after the specified
|
||
* `initialDelay`. The initial delay may be a {@link Date}. By default, this
|
||
* operator uses the `async` IScheduler to provide a notion of time, but you
|
||
* may pass any IScheduler to it. If `period` is not specified, the output
|
||
* Observable emits only one value, `0`. Otherwise, it emits an infinite
|
||
* sequence.
|
||
*
|
||
* @example <caption>Emits ascending numbers, one every second (1000ms), starting after 3 seconds</caption>
|
||
* var numbers = Rx.Observable.timer(3000, 1000);
|
||
* numbers.subscribe(x => console.log(x));
|
||
*
|
||
* @example <caption>Emits one number after five seconds</caption>
|
||
* var numbers = Rx.Observable.timer(5000);
|
||
* numbers.subscribe(x => console.log(x));
|
||
*
|
||
* @see {@link interval}
|
||
* @see {@link delay}
|
||
*
|
||
* @param {number|Date} initialDelay The initial delay time to wait before
|
||
* emitting the first value of `0`.
|
||
* @param {number} [period] The period of time between emissions of the
|
||
* subsequent numbers.
|
||
* @param {Scheduler} [scheduler=async] The IScheduler to use for scheduling
|
||
* the emission of values, and providing a notion of "time".
|
||
* @return {Observable} An Observable that emits a `0` after the
|
||
* `initialDelay` and ever increasing numbers after each `period` of time
|
||
* thereafter.
|
||
* @static true
|
||
* @name timer
|
||
* @owner Observable
|
||
*/
|
||
TimerObservable.create = function (initialDelay, period, scheduler) {
|
||
if (initialDelay === void 0) { initialDelay = 0; }
|
||
return new TimerObservable(initialDelay, period, scheduler);
|
||
};
|
||
TimerObservable.dispatch = function (state) {
|
||
var index = state.index, period = state.period, subscriber = state.subscriber;
|
||
var action = this;
|
||
subscriber.next(index);
|
||
if (subscriber.closed) {
|
||
return;
|
||
}
|
||
else if (period === -1) {
|
||
return subscriber.complete();
|
||
}
|
||
state.index = index + 1;
|
||
action.schedule(state, period);
|
||
};
|
||
/** @deprecated internal use only */ TimerObservable.prototype._subscribe = function (subscriber) {
|
||
var index = 0;
|
||
var _a = this, period = _a.period, dueTime = _a.dueTime, scheduler = _a.scheduler;
|
||
return scheduler.schedule(TimerObservable.dispatch, dueTime, {
|
||
index: index, period: period, subscriber: subscriber
|
||
});
|
||
};
|
||
return TimerObservable;
|
||
}(Observable_1.Observable));
|
||
exports.TimerObservable = TimerObservable;
|
||
//# sourceMappingURL=TimerObservable.js.map
|
||
|
||
/***/ }),
|
||
/* 139 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subscription_1 = __webpack_require__(12);
|
||
/**
|
||
* A unit of work to be executed in a {@link Scheduler}. An action is typically
|
||
* created from within a Scheduler and an RxJS user does not need to concern
|
||
* themselves about creating and manipulating an Action.
|
||
*
|
||
* ```ts
|
||
* class Action<T> extends Subscription {
|
||
* new (scheduler: Scheduler, work: (state?: T) => void);
|
||
* schedule(state?: T, delay: number = 0): Subscription;
|
||
* }
|
||
* ```
|
||
*
|
||
* @class Action<T>
|
||
*/
|
||
var Action = (function (_super) {
|
||
__extends(Action, _super);
|
||
function Action(scheduler, work) {
|
||
_super.call(this);
|
||
}
|
||
/**
|
||
* Schedules this action on its parent Scheduler for execution. May be passed
|
||
* some context object, `state`. May happen at some point in the future,
|
||
* according to the `delay` parameter, if specified.
|
||
* @param {T} [state] Some contextual data that the `work` function uses when
|
||
* called by the Scheduler.
|
||
* @param {number} [delay] Time to wait before executing the work, where the
|
||
* time unit is implicit and defined by the Scheduler.
|
||
* @return {void}
|
||
*/
|
||
Action.prototype.schedule = function (state, delay) {
|
||
if (delay === void 0) { delay = 0; }
|
||
return this;
|
||
};
|
||
return Action;
|
||
}(Subscription_1.Subscription));
|
||
exports.Action = Action;
|
||
//# sourceMappingURL=Action.js.map
|
||
|
||
/***/ }),
|
||
/* 140 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
/**
|
||
* An execution context and a data structure to order tasks and schedule their
|
||
* execution. Provides a notion of (potentially virtual) time, through the
|
||
* `now()` getter method.
|
||
*
|
||
* Each unit of work in a Scheduler is called an {@link Action}.
|
||
*
|
||
* ```ts
|
||
* class Scheduler {
|
||
* now(): number;
|
||
* schedule(work, delay?, state?): Subscription;
|
||
* }
|
||
* ```
|
||
*
|
||
* @class Scheduler
|
||
*/
|
||
var Scheduler = (function () {
|
||
function Scheduler(SchedulerAction, now) {
|
||
if (now === void 0) { now = Scheduler.now; }
|
||
this.SchedulerAction = SchedulerAction;
|
||
this.now = now;
|
||
}
|
||
/**
|
||
* Schedules a function, `work`, for execution. May happen at some point in
|
||
* the future, according to the `delay` parameter, if specified. May be passed
|
||
* some context object, `state`, which will be passed to the `work` function.
|
||
*
|
||
* The given arguments will be processed an stored as an Action object in a
|
||
* queue of actions.
|
||
*
|
||
* @param {function(state: ?T): ?Subscription} work A function representing a
|
||
* task, or some unit of work to be executed by the Scheduler.
|
||
* @param {number} [delay] Time to wait before executing the work, where the
|
||
* time unit is implicit and defined by the Scheduler itself.
|
||
* @param {T} [state] Some contextual data that the `work` function uses when
|
||
* called by the Scheduler.
|
||
* @return {Subscription} A subscription in order to be able to unsubscribe
|
||
* the scheduled work.
|
||
*/
|
||
Scheduler.prototype.schedule = function (work, delay, state) {
|
||
if (delay === void 0) { delay = 0; }
|
||
return new this.SchedulerAction(this, work).schedule(state, delay);
|
||
};
|
||
Scheduler.now = Date.now ? Date.now : function () { return +new Date(); };
|
||
return Scheduler;
|
||
}());
|
||
exports.Scheduler = Scheduler;
|
||
//# sourceMappingURL=Scheduler.js.map
|
||
|
||
/***/ }),
|
||
/* 141 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
function isDate(value) {
|
||
return value instanceof Date && !isNaN(+value);
|
||
}
|
||
exports.isDate = isDate;
|
||
//# sourceMappingURL=isDate.js.map
|
||
|
||
/***/ }),
|
||
/* 142 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __assign = (this && this.__assign) || function () {
|
||
__assign = Object.assign || function(t) {
|
||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||
s = arguments[i];
|
||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
||
t[p] = s[p];
|
||
}
|
||
return t;
|
||
};
|
||
return __assign.apply(this, arguments);
|
||
};
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var emojis = {
|
||
trace: '🔍',
|
||
debug: '🐛',
|
||
info: '✨',
|
||
warn: '⚠️',
|
||
error: '🚨',
|
||
fatal: '💀'
|
||
};
|
||
var levels = {
|
||
trace: 10,
|
||
debug: 20,
|
||
info: 30,
|
||
warn: 40,
|
||
error: 50,
|
||
fatal: 60
|
||
};
|
||
var defaultColors = {
|
||
foreground: '#d3c0c8',
|
||
background: '#2d2d2d',
|
||
black: '#2d2d2d',
|
||
red: '#f2777a',
|
||
green: '#99cc99',
|
||
yellow: '#ffcc66',
|
||
blue: '#6699cc',
|
||
magenta: '#cc99cc',
|
||
cyan: '#66cccc',
|
||
white: '#d3d0c8',
|
||
brightBlack: '#747369'
|
||
};
|
||
var Nanologger = /** @class */ (function () {
|
||
function Nanologger(name, opts) {
|
||
this.name = name;
|
||
this.opts = opts;
|
||
this._name = name || '';
|
||
this._colors = __assign({}, defaultColors, (opts.colors || {}));
|
||
try {
|
||
this.logLevel = window.localStorage.getItem('logLevel') || 'info';
|
||
}
|
||
catch (e) {
|
||
this.logLevel = 'info';
|
||
}
|
||
this._logLevel = levels[this.logLevel];
|
||
}
|
||
Nanologger.prototype.trace = function () {
|
||
var args = ['trace'];
|
||
for (var i = 0, len = arguments.length; i < len; i++)
|
||
args.push(arguments[i]);
|
||
this._print.apply(this, args);
|
||
};
|
||
Nanologger.prototype.debug = function () {
|
||
var args = ['debug'];
|
||
for (var i = 0, len = arguments.length; i < len; i++)
|
||
args.push(arguments[i]);
|
||
this._print.apply(this, args);
|
||
};
|
||
Nanologger.prototype.info = function () {
|
||
var args = ['info'];
|
||
for (var i = 0, len = arguments.length; i < len; i++)
|
||
args.push(arguments[i]);
|
||
this._print.apply(this, args);
|
||
};
|
||
Nanologger.prototype.warn = function () {
|
||
var args = ['warn'];
|
||
for (var i = 0, len = arguments.length; i < len; i++)
|
||
args.push(arguments[i]);
|
||
this._print.apply(this, args);
|
||
};
|
||
Nanologger.prototype.error = function () {
|
||
var args = ['error'];
|
||
for (var i = 0, len = arguments.length; i < len; i++)
|
||
args.push(arguments[i]);
|
||
this._print.apply(this, args);
|
||
};
|
||
Nanologger.prototype.fatal = function () {
|
||
var args = ['fatal'];
|
||
for (var i = 0, len = arguments.length; i < len; i++)
|
||
args.push(arguments[i]);
|
||
this._print.apply(this, args);
|
||
};
|
||
Nanologger.prototype._print = function (level) {
|
||
if (levels[level] < this._logLevel)
|
||
return;
|
||
// var time = getTimeStamp()
|
||
var emoji = emojis[level];
|
||
var name = this._name || 'unknown';
|
||
var msgColor = (level === 'error' || level.fatal)
|
||
? this._colors.red
|
||
: level === 'warn'
|
||
? this._colors.yellow
|
||
: this._colors.green;
|
||
var objs = [];
|
||
var args = [null];
|
||
var msg = emoji + ' %c%s';
|
||
// args.push(color(this._colors.brightBlack), time)
|
||
args.push(color(this._colors.magenta), name);
|
||
for (var i = 1, len = arguments.length; i < len; i++) {
|
||
var arg = arguments[i];
|
||
if (typeof arg === 'string') {
|
||
if (i === 1) {
|
||
// first string argument is in color
|
||
msg += ' %c%s';
|
||
args.push(color(msgColor));
|
||
args.push(arg);
|
||
}
|
||
else if (/ms$/.test(arg)) {
|
||
// arguments finishing with 'ms', grey out
|
||
msg += ' %c%s';
|
||
args.push(color(this._colors.brightBlack));
|
||
args.push(arg);
|
||
}
|
||
else {
|
||
// normal colors
|
||
msg += ' %c%s';
|
||
args.push(color(this._colors.white));
|
||
args.push(arg);
|
||
}
|
||
}
|
||
else if (typeof arg === 'number') {
|
||
msg += ' %c%d';
|
||
args.push(color(this._colors.magenta));
|
||
args.push(arg);
|
||
}
|
||
else {
|
||
objs.push(arg);
|
||
}
|
||
}
|
||
args[0] = msg;
|
||
objs.forEach(function (obj) {
|
||
args.push(obj);
|
||
});
|
||
// In IE/Edge console functions don't inherit from Function.prototype
|
||
// so this is necessary to get all the args applied.
|
||
Function.prototype.apply.apply(console.log, [console, args]);
|
||
};
|
||
return Nanologger;
|
||
}());
|
||
exports.Nanologger = Nanologger;
|
||
function color(color) {
|
||
return 'color: ' + color + ';';
|
||
}
|
||
function getTimeStamp() {
|
||
var date = new Date();
|
||
var hours = pad(date.getHours().toString());
|
||
var minutes = pad(date.getMinutes().toString());
|
||
var seconds = pad(date.getSeconds().toString());
|
||
return hours + ':' + minutes + ':' + seconds;
|
||
}
|
||
function pad(str) {
|
||
return str.length !== 2 ? 0 + str : str;
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 143 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
/**
|
||
*
|
||
* With thanks to https://github.com/livereload/livereload-js
|
||
* :) :) :)
|
||
*
|
||
*/
|
||
var utils_1 = __webpack_require__(21);
|
||
var empty_1 = __webpack_require__(16);
|
||
var Observable_1 = __webpack_require__(1);
|
||
var merge_1 = __webpack_require__(38);
|
||
var timer_1 = __webpack_require__(52);
|
||
var from_1 = __webpack_require__(87);
|
||
var filter_1 = __webpack_require__(4);
|
||
var map_1 = __webpack_require__(2);
|
||
var mergeMap_1 = __webpack_require__(15);
|
||
var tap_1 = __webpack_require__(5);
|
||
var mapTo_1 = __webpack_require__(88);
|
||
var prop_set_dom_effect_1 = __webpack_require__(76);
|
||
var style_set_dom_effect_1 = __webpack_require__(81);
|
||
var link_replace_dom_effect_1 = __webpack_require__(82);
|
||
var mergeAll_1 = __webpack_require__(55);
|
||
var hiddenElem;
|
||
var IMAGE_STYLES = [
|
||
{ selector: 'background', styleNames: ['backgroundImage'] },
|
||
{ selector: 'border', styleNames: ['borderImage', 'webkitBorderImage', 'MozBorderImage'] }
|
||
];
|
||
var attrs = {
|
||
link: "href",
|
||
img: "src",
|
||
script: "src"
|
||
};
|
||
function reload(document, navigator) {
|
||
return function (data, options) {
|
||
var path = data.path;
|
||
if (options.liveCSS) {
|
||
if (path.match(/\.css$/i)) {
|
||
return reloadStylesheet(path, document, navigator);
|
||
}
|
||
}
|
||
if (options.liveImg) {
|
||
if (path.match(/\.(jpe?g|png|gif)$/i)) {
|
||
return reloadImages(path, document);
|
||
}
|
||
}
|
||
/**
|
||
* LEGACY
|
||
*/
|
||
var domData = getElems(data.ext, options, document);
|
||
var elems = getMatches(domData.elems, data.basename, domData.attr);
|
||
for (var i = 0, n = elems.length; i < n; i += 1) {
|
||
swapFile(elems[i], domData, options, document, navigator);
|
||
}
|
||
return empty_1.empty();
|
||
};
|
||
function getMatches(elems, url, attr) {
|
||
if (url[0] === "*") {
|
||
return elems;
|
||
}
|
||
var matches = [];
|
||
var urlMatcher = new RegExp("(^|/)" + url);
|
||
for (var i = 0, len = elems.length; i < len; i += 1) {
|
||
if (urlMatcher.test(elems[i][attr])) {
|
||
matches.push(elems[i]);
|
||
}
|
||
}
|
||
return matches;
|
||
}
|
||
function getElems(fileExtension, options, document) {
|
||
var tagName = options.tagNames[fileExtension];
|
||
var attr = attrs[tagName];
|
||
return {
|
||
attr: attr,
|
||
tagName: tagName,
|
||
elems: document.getElementsByTagName(tagName)
|
||
};
|
||
}
|
||
function reloadImages(path, document) {
|
||
var expando = generateUniqueString(Date.now());
|
||
return merge_1.merge(from_1.from([].slice.call(document.images))
|
||
.pipe(filter_1.filter(function (img) { return utils_1.pathsMatch(path, utils_1.pathFromUrl(img.src)); }), map_1.map(function (img) {
|
||
var payload = {
|
||
target: img,
|
||
prop: 'src',
|
||
value: generateCacheBustUrl(img.src, expando),
|
||
pathname: utils_1.getLocation(img.src).pathname
|
||
};
|
||
return prop_set_dom_effect_1.propSet(payload);
|
||
})), from_1.from(IMAGE_STYLES)
|
||
.pipe(mergeMap_1.mergeMap(function (_a) {
|
||
var selector = _a.selector, styleNames = _a.styleNames;
|
||
return from_1.from(document.querySelectorAll("[style*=" + selector + "]")).pipe(mergeMap_1.mergeMap(function (img) {
|
||
return reloadStyleImages(img.style, styleNames, path, expando);
|
||
}));
|
||
})));
|
||
// if (document.styleSheets) {
|
||
// return [].slice.call(document.styleSheets)
|
||
// .map((styleSheet) => {
|
||
// return reloadStylesheetImages(styleSheet, path, expando);
|
||
// });
|
||
// }
|
||
}
|
||
function reloadStylesheetImages(styleSheet, path, expando) {
|
||
var rules;
|
||
try {
|
||
rules = styleSheet != null ? styleSheet.cssRules : undefined;
|
||
}
|
||
catch (e) { }
|
||
//
|
||
if (!rules) {
|
||
return;
|
||
}
|
||
[].slice.call(rules).forEach(function (rule) {
|
||
switch (rule.type) {
|
||
case CSSRule.IMPORT_RULE:
|
||
reloadStylesheetImages(rule.styleSheet, path, expando);
|
||
break;
|
||
case CSSRule.STYLE_RULE:
|
||
[].slice.call(IMAGE_STYLES).forEach(function (_a) {
|
||
var styleNames = _a.styleNames;
|
||
reloadStyleImages(rule.style, styleNames, path, expando);
|
||
});
|
||
break;
|
||
case CSSRule.MEDIA_RULE:
|
||
reloadStylesheetImages(rule, path, expando);
|
||
break;
|
||
}
|
||
});
|
||
}
|
||
function reloadStyleImages(style, styleNames, path, expando) {
|
||
return from_1.from(styleNames).pipe(filter_1.filter(function (styleName) { return typeof style[styleName] === 'string'; }), map_1.map(function (styleName) {
|
||
var pathName;
|
||
var value = style[styleName];
|
||
var newValue = value.replace(new RegExp("\\burl\\s*\\(([^)]*)\\)"), function (match, src) {
|
||
var _src = src;
|
||
if (src[0] === '"' && src[src.length - 1] === '"') {
|
||
_src = src.slice(1, -1);
|
||
}
|
||
pathName = utils_1.getLocation(_src).pathname;
|
||
if (utils_1.pathsMatch(path, utils_1.pathFromUrl(_src))) {
|
||
return "url(" + generateCacheBustUrl(_src, expando) + ")";
|
||
}
|
||
else {
|
||
return match;
|
||
}
|
||
});
|
||
return [
|
||
style,
|
||
styleName,
|
||
value,
|
||
newValue,
|
||
pathName
|
||
];
|
||
}), filter_1.filter(function (_a) {
|
||
var style = _a[0], styleName = _a[1], value = _a[2], newValue = _a[3];
|
||
return newValue !== value;
|
||
}), map_1.map(function (_a) {
|
||
var style = _a[0], styleName = _a[1], value = _a[2], newValue = _a[3], pathName = _a[4];
|
||
return style_set_dom_effect_1.styleSet({ style: style, styleName: styleName, value: value, newValue: newValue, pathName: pathName });
|
||
}));
|
||
}
|
||
function swapFile(elem, domData, options, document, navigator) {
|
||
var attr = domData.attr;
|
||
var currentValue = elem[attr];
|
||
var timeStamp = new Date().getTime();
|
||
var key = "browsersync-legacy";
|
||
var suffix = key + "=" + timeStamp;
|
||
var anchor = utils_1.getLocation(currentValue);
|
||
var search = utils_1.updateSearch(anchor.search, key, suffix);
|
||
switch (domData.tagName) {
|
||
case 'link': {
|
||
// this.logger.trace(`replacing LINK ${attr}`);
|
||
reloadStylesheet(currentValue, document, navigator);
|
||
break;
|
||
}
|
||
case 'img': {
|
||
reloadImages(currentValue, document);
|
||
break;
|
||
}
|
||
default: {
|
||
if (options.timestamps === false) {
|
||
elem[attr] = anchor.href;
|
||
}
|
||
else {
|
||
elem[attr] = anchor.href.split("?")[0] + search;
|
||
}
|
||
// this.logger.info(`reloading ${elem[attr]}`);
|
||
setTimeout(function () {
|
||
if (!hiddenElem) {
|
||
hiddenElem = document.createElement("DIV");
|
||
document.body.appendChild(hiddenElem);
|
||
}
|
||
else {
|
||
hiddenElem.style.display = "none";
|
||
hiddenElem.style.display = "block";
|
||
}
|
||
}, 200);
|
||
}
|
||
}
|
||
return {
|
||
elem: elem,
|
||
timeStamp: timeStamp
|
||
};
|
||
}
|
||
function reattachStylesheetLink(link, document, navigator) {
|
||
// ignore LINKs that will be removed by LR soon
|
||
var clone;
|
||
if (link.__LiveReload_pendingRemoval) {
|
||
return empty_1.empty();
|
||
}
|
||
link.__LiveReload_pendingRemoval = true;
|
||
if (link.tagName === 'STYLE') {
|
||
// prefixfree
|
||
clone = document.createElement('link');
|
||
clone.rel = 'stylesheet';
|
||
clone.media = link.media;
|
||
clone.disabled = link.disabled;
|
||
}
|
||
else {
|
||
clone = link.cloneNode(false);
|
||
}
|
||
var prevHref = link.href;
|
||
var nextHref = generateCacheBustUrl(linkHref(link));
|
||
clone.href = nextHref;
|
||
var pathname = utils_1.getLocation(nextHref).pathname;
|
||
var basename = pathname.split('/').slice(-1)[0];
|
||
// insert the new LINK before the old one
|
||
var parent = link.parentNode;
|
||
if (parent.lastChild === link) {
|
||
parent.appendChild(clone);
|
||
}
|
||
else {
|
||
parent.insertBefore(clone, link.nextSibling);
|
||
}
|
||
var additionalWaitingTime;
|
||
if (/AppleWebKit/.test(navigator.userAgent)) {
|
||
additionalWaitingTime = 5;
|
||
}
|
||
else {
|
||
additionalWaitingTime = 200;
|
||
}
|
||
return Observable_1.Observable.create(function (obs) {
|
||
clone.onload = function () {
|
||
obs.next(true);
|
||
obs.complete();
|
||
};
|
||
})
|
||
.pipe(mergeMap_1.mergeMap(function () {
|
||
return timer_1.timer(additionalWaitingTime)
|
||
.pipe(tap_1.tap(function () {
|
||
if (link && !link.parentNode) {
|
||
return;
|
||
}
|
||
link.parentNode.removeChild(link);
|
||
clone.onreadystatechange = null;
|
||
}), mapTo_1.mapTo(link_replace_dom_effect_1.linkReplace({ target: clone, nextHref: nextHref, prevHref: prevHref, pathname: pathname, basename: basename })));
|
||
}));
|
||
}
|
||
function reattachImportedRule(_a, document) {
|
||
var rule = _a.rule, index = _a.index, link = _a.link;
|
||
var parent = rule.parentStyleSheet;
|
||
var href = generateCacheBustUrl(rule.href);
|
||
var media = rule.media.length ? [].join.call(rule.media, ', ') : '';
|
||
var newRule = "@import url(\"" + href + "\") " + media + ";";
|
||
// used to detect if reattachImportedRule has been called again on the same rule
|
||
rule.__LiveReload_newHref = href;
|
||
// WORKAROUND FOR WEBKIT BUG: WebKit resets all styles if we add @import'ed
|
||
// stylesheet that hasn't been cached yet. Workaround is to pre-cache the
|
||
// stylesheet by temporarily adding it as a LINK tag.
|
||
var tempLink = document.createElement("link");
|
||
tempLink.rel = 'stylesheet';
|
||
tempLink.href = href;
|
||
tempLink.__LiveReload_pendingRemoval = true; // exclude from path matching
|
||
if (link.parentNode) {
|
||
link.parentNode.insertBefore(tempLink, link);
|
||
}
|
||
return timer_1.timer(200)
|
||
.pipe(tap_1.tap(function () {
|
||
if (tempLink.parentNode) {
|
||
tempLink.parentNode.removeChild(tempLink);
|
||
}
|
||
// if another reattachImportedRule call is in progress, abandon this one
|
||
if (rule.__LiveReload_newHref !== href) {
|
||
return;
|
||
}
|
||
parent.insertRule(newRule, index);
|
||
parent.deleteRule(index + 1);
|
||
// save the new rule, so that we can detect another reattachImportedRule call
|
||
rule = parent.cssRules[index];
|
||
rule.__LiveReload_newHref = href;
|
||
}), mergeMap_1.mergeMap(function () {
|
||
return timer_1.timer(200).pipe(tap_1.tap(function () {
|
||
// if another reattachImportedRule call is in progress, abandon this one
|
||
if (rule.__LiveReload_newHref !== href) {
|
||
return;
|
||
}
|
||
parent.insertRule(newRule, index);
|
||
return parent.deleteRule(index + 1);
|
||
}));
|
||
}));
|
||
}
|
||
function generateCacheBustUrl(url, expando) {
|
||
if (expando === void 0) { expando = generateUniqueString(Date.now()); }
|
||
var _a;
|
||
var hash, oldParams;
|
||
(_a = utils_1.splitUrl(url), url = _a.url, hash = _a.hash, oldParams = _a.params);
|
||
// if (this.options.overrideURL) {
|
||
// if (url.indexOf(this.options.serverURL) < 0) {
|
||
// const originalUrl = url;
|
||
// url = this.options.serverURL + this.options.overrideURL + "?url=" + encodeURIComponent(url);
|
||
// this.logger.debug(`overriding source URL ${originalUrl} with ${url}`);
|
||
// }
|
||
// }
|
||
var params = oldParams.replace(/(\?|&)browsersync=(\d+)/, function (match, sep) { return "" + sep + expando; });
|
||
if (params === oldParams) {
|
||
if (oldParams.length === 0) {
|
||
params = "?" + expando;
|
||
}
|
||
else {
|
||
params = oldParams + "&" + expando;
|
||
}
|
||
}
|
||
return url + params + hash;
|
||
}
|
||
function reloadStylesheet(path, document, navigator) {
|
||
// has to be a real array, because DOMNodeList will be modified
|
||
var links = utils_1.array(document.getElementsByTagName('link'))
|
||
.filter(function (link) {
|
||
return link.rel.match(/^stylesheet$/i)
|
||
&& !link.__LiveReload_pendingRemoval;
|
||
});
|
||
/**
|
||
* Find imported style sheets in <style> tags
|
||
* @type {any[]}
|
||
*/
|
||
var styleImported = utils_1.array(document.getElementsByTagName('style'))
|
||
.filter(function (style) { return Boolean(style.sheet); })
|
||
.reduce(function (acc, style) {
|
||
return acc.concat(collectImportedStylesheets(style, style.sheet));
|
||
}, []);
|
||
/**
|
||
* Find imported style sheets in <link> tags
|
||
* @type {any[]}
|
||
*/
|
||
var linksImported = links
|
||
.reduce(function (acc, link) {
|
||
return acc.concat(collectImportedStylesheets(link, link.sheet));
|
||
}, []);
|
||
/**
|
||
* Combine all links + sheets
|
||
*/
|
||
var allRules = links.concat(styleImported, linksImported);
|
||
/**
|
||
* Which href best matches the incoming href?
|
||
*/
|
||
var match = utils_1.pickBestMatch(path, allRules, function (l) { return utils_1.pathFromUrl(linkHref(l)); });
|
||
if (match) {
|
||
if (match.object && match.object.rule) {
|
||
return reattachImportedRule(match.object, document);
|
||
}
|
||
return reattachStylesheetLink(match.object, document, navigator);
|
||
}
|
||
else {
|
||
if (links.length) {
|
||
// no <link> elements matched, so was the path including '*'?
|
||
var _a = path.split('.'), first = _a[0], rest = _a.slice(1);
|
||
if (first === '*') {
|
||
return from_1.from(links.map(function (link) { return reattachStylesheetLink(link, document, navigator); }))
|
||
.pipe(mergeAll_1.mergeAll());
|
||
}
|
||
}
|
||
}
|
||
return empty_1.empty();
|
||
}
|
||
function collectImportedStylesheets(link, styleSheet) {
|
||
// in WebKit, styleSheet.cssRules is null for inaccessible stylesheets;
|
||
// Firefox/Opera may throw exceptions
|
||
var output = [];
|
||
collect(link, makeRules(styleSheet));
|
||
return output;
|
||
function makeRules(styleSheet) {
|
||
var rules;
|
||
try {
|
||
rules = styleSheet != null ? styleSheet.cssRules : undefined;
|
||
}
|
||
catch (e) { }
|
||
return rules;
|
||
}
|
||
function collect(link, rules) {
|
||
if (rules && rules.length) {
|
||
for (var index = 0; index < rules.length; index++) {
|
||
var rule = rules[index];
|
||
switch (rule.type) {
|
||
case CSSRule.CHARSET_RULE:
|
||
break;
|
||
case CSSRule.IMPORT_RULE:
|
||
output.push({ link: link, rule: rule, index: index, href: rule.href });
|
||
collect(link, makeRules(rule.styleSheet));
|
||
break;
|
||
default:
|
||
break; // import rules can only be preceded by charset rules
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function linkHref(link) {
|
||
// prefixfree uses data-href when it turns LINK into STYLE
|
||
return link.href || link.getAttribute('data-href');
|
||
}
|
||
function generateUniqueString(value) {
|
||
return "browsersync=" + value;
|
||
}
|
||
}
|
||
exports.reload = reload;
|
||
|
||
|
||
/***/ }),
|
||
/* 144 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var isArray_1 = __webpack_require__(26);
|
||
var isArrayLike_1 = __webpack_require__(59);
|
||
var isPromise_1 = __webpack_require__(60);
|
||
var PromiseObservable_1 = __webpack_require__(145);
|
||
var IteratorObservable_1 = __webpack_require__(146);
|
||
var ArrayObservable_1 = __webpack_require__(23);
|
||
var ArrayLikeObservable_1 = __webpack_require__(147);
|
||
var iterator_1 = __webpack_require__(31);
|
||
var Observable_1 = __webpack_require__(1);
|
||
var observeOn_1 = __webpack_require__(148);
|
||
var observable_1 = __webpack_require__(45);
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @extends {Ignored}
|
||
* @hide true
|
||
*/
|
||
var FromObservable = (function (_super) {
|
||
__extends(FromObservable, _super);
|
||
function FromObservable(ish, scheduler) {
|
||
_super.call(this, null);
|
||
this.ish = ish;
|
||
this.scheduler = scheduler;
|
||
}
|
||
/**
|
||
* Creates an Observable from an Array, an array-like object, a Promise, an
|
||
* iterable object, or an Observable-like object.
|
||
*
|
||
* <span class="informal">Converts almost anything to an Observable.</span>
|
||
*
|
||
* <img src="./img/from.png" width="100%">
|
||
*
|
||
* Convert various other objects and data types into Observables. `from`
|
||
* converts a Promise or an array-like or an
|
||
* [iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterable)
|
||
* object into an Observable that emits the items in that promise or array or
|
||
* iterable. A String, in this context, is treated as an array of characters.
|
||
* Observable-like objects (contains a function named with the ES2015 Symbol
|
||
* for Observable) can also be converted through this operator.
|
||
*
|
||
* @example <caption>Converts an array to an Observable</caption>
|
||
* var array = [10, 20, 30];
|
||
* var result = Rx.Observable.from(array);
|
||
* result.subscribe(x => console.log(x));
|
||
*
|
||
* // Results in the following:
|
||
* // 10 20 30
|
||
*
|
||
* @example <caption>Convert an infinite iterable (from a generator) to an Observable</caption>
|
||
* function* generateDoubles(seed) {
|
||
* var i = seed;
|
||
* while (true) {
|
||
* yield i;
|
||
* i = 2 * i; // double it
|
||
* }
|
||
* }
|
||
*
|
||
* var iterator = generateDoubles(3);
|
||
* var result = Rx.Observable.from(iterator).take(10);
|
||
* result.subscribe(x => console.log(x));
|
||
*
|
||
* // Results in the following:
|
||
* // 3 6 12 24 48 96 192 384 768 1536
|
||
*
|
||
* @see {@link create}
|
||
* @see {@link fromEvent}
|
||
* @see {@link fromEventPattern}
|
||
* @see {@link fromPromise}
|
||
*
|
||
* @param {ObservableInput<T>} ish A subscribable object, a Promise, an
|
||
* Observable-like, an Array, an iterable or an array-like object to be
|
||
* converted.
|
||
* @param {Scheduler} [scheduler] The scheduler on which to schedule the
|
||
* emissions of values.
|
||
* @return {Observable<T>} The Observable whose values are originally from the
|
||
* input object that was converted.
|
||
* @static true
|
||
* @name from
|
||
* @owner Observable
|
||
*/
|
||
FromObservable.create = function (ish, scheduler) {
|
||
if (ish != null) {
|
||
if (typeof ish[observable_1.observable] === 'function') {
|
||
if (ish instanceof Observable_1.Observable && !scheduler) {
|
||
return ish;
|
||
}
|
||
return new FromObservable(ish, scheduler);
|
||
}
|
||
else if (isArray_1.isArray(ish)) {
|
||
return new ArrayObservable_1.ArrayObservable(ish, scheduler);
|
||
}
|
||
else if (isPromise_1.isPromise(ish)) {
|
||
return new PromiseObservable_1.PromiseObservable(ish, scheduler);
|
||
}
|
||
else if (typeof ish[iterator_1.iterator] === 'function' || typeof ish === 'string') {
|
||
return new IteratorObservable_1.IteratorObservable(ish, scheduler);
|
||
}
|
||
else if (isArrayLike_1.isArrayLike(ish)) {
|
||
return new ArrayLikeObservable_1.ArrayLikeObservable(ish, scheduler);
|
||
}
|
||
}
|
||
throw new TypeError((ish !== null && typeof ish || ish) + ' is not observable');
|
||
};
|
||
/** @deprecated internal use only */ FromObservable.prototype._subscribe = function (subscriber) {
|
||
var ish = this.ish;
|
||
var scheduler = this.scheduler;
|
||
if (scheduler == null) {
|
||
return ish[observable_1.observable]().subscribe(subscriber);
|
||
}
|
||
else {
|
||
return ish[observable_1.observable]().subscribe(new observeOn_1.ObserveOnSubscriber(subscriber, scheduler, 0));
|
||
}
|
||
};
|
||
return FromObservable;
|
||
}(Observable_1.Observable));
|
||
exports.FromObservable = FromObservable;
|
||
//# sourceMappingURL=FromObservable.js.map
|
||
|
||
/***/ }),
|
||
/* 145 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var root_1 = __webpack_require__(7);
|
||
var Observable_1 = __webpack_require__(1);
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @extends {Ignored}
|
||
* @hide true
|
||
*/
|
||
var PromiseObservable = (function (_super) {
|
||
__extends(PromiseObservable, _super);
|
||
function PromiseObservable(promise, scheduler) {
|
||
_super.call(this);
|
||
this.promise = promise;
|
||
this.scheduler = scheduler;
|
||
}
|
||
/**
|
||
* Converts a Promise to an Observable.
|
||
*
|
||
* <span class="informal">Returns an Observable that just emits the Promise's
|
||
* resolved value, then completes.</span>
|
||
*
|
||
* Converts an ES2015 Promise or a Promises/A+ spec compliant Promise to an
|
||
* Observable. If the Promise resolves with a value, the output Observable
|
||
* emits that resolved value as a `next`, and then completes. If the Promise
|
||
* is rejected, then the output Observable emits the corresponding Error.
|
||
*
|
||
* @example <caption>Convert the Promise returned by Fetch to an Observable</caption>
|
||
* var result = Rx.Observable.fromPromise(fetch('http://myserver.com/'));
|
||
* result.subscribe(x => console.log(x), e => console.error(e));
|
||
*
|
||
* @see {@link bindCallback}
|
||
* @see {@link from}
|
||
*
|
||
* @param {PromiseLike<T>} promise The promise to be converted.
|
||
* @param {Scheduler} [scheduler] An optional IScheduler to use for scheduling
|
||
* the delivery of the resolved value (or the rejection).
|
||
* @return {Observable<T>} An Observable which wraps the Promise.
|
||
* @static true
|
||
* @name fromPromise
|
||
* @owner Observable
|
||
*/
|
||
PromiseObservable.create = function (promise, scheduler) {
|
||
return new PromiseObservable(promise, scheduler);
|
||
};
|
||
/** @deprecated internal use only */ PromiseObservable.prototype._subscribe = function (subscriber) {
|
||
var _this = this;
|
||
var promise = this.promise;
|
||
var scheduler = this.scheduler;
|
||
if (scheduler == null) {
|
||
if (this._isScalar) {
|
||
if (!subscriber.closed) {
|
||
subscriber.next(this.value);
|
||
subscriber.complete();
|
||
}
|
||
}
|
||
else {
|
||
promise.then(function (value) {
|
||
_this.value = value;
|
||
_this._isScalar = true;
|
||
if (!subscriber.closed) {
|
||
subscriber.next(value);
|
||
subscriber.complete();
|
||
}
|
||
}, function (err) {
|
||
if (!subscriber.closed) {
|
||
subscriber.error(err);
|
||
}
|
||
})
|
||
.then(null, function (err) {
|
||
// escape the promise trap, throw unhandled errors
|
||
root_1.root.setTimeout(function () { throw err; });
|
||
});
|
||
}
|
||
}
|
||
else {
|
||
if (this._isScalar) {
|
||
if (!subscriber.closed) {
|
||
return scheduler.schedule(dispatchNext, 0, { value: this.value, subscriber: subscriber });
|
||
}
|
||
}
|
||
else {
|
||
promise.then(function (value) {
|
||
_this.value = value;
|
||
_this._isScalar = true;
|
||
if (!subscriber.closed) {
|
||
subscriber.add(scheduler.schedule(dispatchNext, 0, { value: value, subscriber: subscriber }));
|
||
}
|
||
}, function (err) {
|
||
if (!subscriber.closed) {
|
||
subscriber.add(scheduler.schedule(dispatchError, 0, { err: err, subscriber: subscriber }));
|
||
}
|
||
})
|
||
.then(null, function (err) {
|
||
// escape the promise trap, throw unhandled errors
|
||
root_1.root.setTimeout(function () { throw err; });
|
||
});
|
||
}
|
||
}
|
||
};
|
||
return PromiseObservable;
|
||
}(Observable_1.Observable));
|
||
exports.PromiseObservable = PromiseObservable;
|
||
function dispatchNext(arg) {
|
||
var value = arg.value, subscriber = arg.subscriber;
|
||
if (!subscriber.closed) {
|
||
subscriber.next(value);
|
||
subscriber.complete();
|
||
}
|
||
}
|
||
function dispatchError(arg) {
|
||
var err = arg.err, subscriber = arg.subscriber;
|
||
if (!subscriber.closed) {
|
||
subscriber.error(err);
|
||
}
|
||
}
|
||
//# sourceMappingURL=PromiseObservable.js.map
|
||
|
||
/***/ }),
|
||
/* 146 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var root_1 = __webpack_require__(7);
|
||
var Observable_1 = __webpack_require__(1);
|
||
var iterator_1 = __webpack_require__(31);
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @extends {Ignored}
|
||
* @hide true
|
||
*/
|
||
var IteratorObservable = (function (_super) {
|
||
__extends(IteratorObservable, _super);
|
||
function IteratorObservable(iterator, scheduler) {
|
||
_super.call(this);
|
||
this.scheduler = scheduler;
|
||
if (iterator == null) {
|
||
throw new Error('iterator cannot be null.');
|
||
}
|
||
this.iterator = getIterator(iterator);
|
||
}
|
||
IteratorObservable.create = function (iterator, scheduler) {
|
||
return new IteratorObservable(iterator, scheduler);
|
||
};
|
||
IteratorObservable.dispatch = function (state) {
|
||
var index = state.index, hasError = state.hasError, iterator = state.iterator, subscriber = state.subscriber;
|
||
if (hasError) {
|
||
subscriber.error(state.error);
|
||
return;
|
||
}
|
||
var result = iterator.next();
|
||
if (result.done) {
|
||
subscriber.complete();
|
||
return;
|
||
}
|
||
subscriber.next(result.value);
|
||
state.index = index + 1;
|
||
if (subscriber.closed) {
|
||
if (typeof iterator.return === 'function') {
|
||
iterator.return();
|
||
}
|
||
return;
|
||
}
|
||
this.schedule(state);
|
||
};
|
||
/** @deprecated internal use only */ IteratorObservable.prototype._subscribe = function (subscriber) {
|
||
var index = 0;
|
||
var _a = this, iterator = _a.iterator, scheduler = _a.scheduler;
|
||
if (scheduler) {
|
||
return scheduler.schedule(IteratorObservable.dispatch, 0, {
|
||
index: index, iterator: iterator, subscriber: subscriber
|
||
});
|
||
}
|
||
else {
|
||
do {
|
||
var result = iterator.next();
|
||
if (result.done) {
|
||
subscriber.complete();
|
||
break;
|
||
}
|
||
else {
|
||
subscriber.next(result.value);
|
||
}
|
||
if (subscriber.closed) {
|
||
if (typeof iterator.return === 'function') {
|
||
iterator.return();
|
||
}
|
||
break;
|
||
}
|
||
} while (true);
|
||
}
|
||
};
|
||
return IteratorObservable;
|
||
}(Observable_1.Observable));
|
||
exports.IteratorObservable = IteratorObservable;
|
||
var StringIterator = (function () {
|
||
function StringIterator(str, idx, len) {
|
||
if (idx === void 0) { idx = 0; }
|
||
if (len === void 0) { len = str.length; }
|
||
this.str = str;
|
||
this.idx = idx;
|
||
this.len = len;
|
||
}
|
||
StringIterator.prototype[iterator_1.iterator] = function () { return (this); };
|
||
StringIterator.prototype.next = function () {
|
||
return this.idx < this.len ? {
|
||
done: false,
|
||
value: this.str.charAt(this.idx++)
|
||
} : {
|
||
done: true,
|
||
value: undefined
|
||
};
|
||
};
|
||
return StringIterator;
|
||
}());
|
||
var ArrayIterator = (function () {
|
||
function ArrayIterator(arr, idx, len) {
|
||
if (idx === void 0) { idx = 0; }
|
||
if (len === void 0) { len = toLength(arr); }
|
||
this.arr = arr;
|
||
this.idx = idx;
|
||
this.len = len;
|
||
}
|
||
ArrayIterator.prototype[iterator_1.iterator] = function () { return this; };
|
||
ArrayIterator.prototype.next = function () {
|
||
return this.idx < this.len ? {
|
||
done: false,
|
||
value: this.arr[this.idx++]
|
||
} : {
|
||
done: true,
|
||
value: undefined
|
||
};
|
||
};
|
||
return ArrayIterator;
|
||
}());
|
||
function getIterator(obj) {
|
||
var i = obj[iterator_1.iterator];
|
||
if (!i && typeof obj === 'string') {
|
||
return new StringIterator(obj);
|
||
}
|
||
if (!i && obj.length !== undefined) {
|
||
return new ArrayIterator(obj);
|
||
}
|
||
if (!i) {
|
||
throw new TypeError('object is not iterable');
|
||
}
|
||
return obj[iterator_1.iterator]();
|
||
}
|
||
var maxSafeInteger = Math.pow(2, 53) - 1;
|
||
function toLength(o) {
|
||
var len = +o.length;
|
||
if (isNaN(len)) {
|
||
return 0;
|
||
}
|
||
if (len === 0 || !numberIsFinite(len)) {
|
||
return len;
|
||
}
|
||
len = sign(len) * Math.floor(Math.abs(len));
|
||
if (len <= 0) {
|
||
return 0;
|
||
}
|
||
if (len > maxSafeInteger) {
|
||
return maxSafeInteger;
|
||
}
|
||
return len;
|
||
}
|
||
function numberIsFinite(value) {
|
||
return typeof value === 'number' && root_1.root.isFinite(value);
|
||
}
|
||
function sign(value) {
|
||
var valueAsNumber = +value;
|
||
if (valueAsNumber === 0) {
|
||
return valueAsNumber;
|
||
}
|
||
if (isNaN(valueAsNumber)) {
|
||
return valueAsNumber;
|
||
}
|
||
return valueAsNumber < 0 ? -1 : 1;
|
||
}
|
||
//# sourceMappingURL=IteratorObservable.js.map
|
||
|
||
/***/ }),
|
||
/* 147 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Observable_1 = __webpack_require__(1);
|
||
var ScalarObservable_1 = __webpack_require__(46);
|
||
var EmptyObservable_1 = __webpack_require__(28);
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @extends {Ignored}
|
||
* @hide true
|
||
*/
|
||
var ArrayLikeObservable = (function (_super) {
|
||
__extends(ArrayLikeObservable, _super);
|
||
function ArrayLikeObservable(arrayLike, scheduler) {
|
||
_super.call(this);
|
||
this.arrayLike = arrayLike;
|
||
this.scheduler = scheduler;
|
||
if (!scheduler && arrayLike.length === 1) {
|
||
this._isScalar = true;
|
||
this.value = arrayLike[0];
|
||
}
|
||
}
|
||
ArrayLikeObservable.create = function (arrayLike, scheduler) {
|
||
var length = arrayLike.length;
|
||
if (length === 0) {
|
||
return new EmptyObservable_1.EmptyObservable();
|
||
}
|
||
else if (length === 1) {
|
||
return new ScalarObservable_1.ScalarObservable(arrayLike[0], scheduler);
|
||
}
|
||
else {
|
||
return new ArrayLikeObservable(arrayLike, scheduler);
|
||
}
|
||
};
|
||
ArrayLikeObservable.dispatch = function (state) {
|
||
var arrayLike = state.arrayLike, index = state.index, length = state.length, subscriber = state.subscriber;
|
||
if (subscriber.closed) {
|
||
return;
|
||
}
|
||
if (index >= length) {
|
||
subscriber.complete();
|
||
return;
|
||
}
|
||
subscriber.next(arrayLike[index]);
|
||
state.index = index + 1;
|
||
this.schedule(state);
|
||
};
|
||
/** @deprecated internal use only */ ArrayLikeObservable.prototype._subscribe = function (subscriber) {
|
||
var index = 0;
|
||
var _a = this, arrayLike = _a.arrayLike, scheduler = _a.scheduler;
|
||
var length = arrayLike.length;
|
||
if (scheduler) {
|
||
return scheduler.schedule(ArrayLikeObservable.dispatch, 0, {
|
||
arrayLike: arrayLike, index: index, length: length, subscriber: subscriber
|
||
});
|
||
}
|
||
else {
|
||
for (var i = 0; i < length && !subscriber.closed; i++) {
|
||
subscriber.next(arrayLike[i]);
|
||
}
|
||
subscriber.complete();
|
||
}
|
||
};
|
||
return ArrayLikeObservable;
|
||
}(Observable_1.Observable));
|
||
exports.ArrayLikeObservable = ArrayLikeObservable;
|
||
//# sourceMappingURL=ArrayLikeObservable.js.map
|
||
|
||
/***/ }),
|
||
/* 148 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
var Notification_1 = __webpack_require__(149);
|
||
/**
|
||
*
|
||
* Re-emits all notifications from source Observable with specified scheduler.
|
||
*
|
||
* <span class="informal">Ensure a specific scheduler is used, from outside of an Observable.</span>
|
||
*
|
||
* `observeOn` is an operator that accepts a scheduler as a first parameter, which will be used to reschedule
|
||
* notifications emitted by the source Observable. It might be useful, if you do not have control over
|
||
* internal scheduler of a given Observable, but want to control when its values are emitted nevertheless.
|
||
*
|
||
* Returned Observable emits the same notifications (nexted values, complete and error events) as the source Observable,
|
||
* but rescheduled with provided scheduler. Note that this doesn't mean that source Observables internal
|
||
* scheduler will be replaced in any way. Original scheduler still will be used, but when the source Observable emits
|
||
* notification, it will be immediately scheduled again - this time with scheduler passed to `observeOn`.
|
||
* An anti-pattern would be calling `observeOn` on Observable that emits lots of values synchronously, to split
|
||
* that emissions into asynchronous chunks. For this to happen, scheduler would have to be passed into the source
|
||
* Observable directly (usually into the operator that creates it). `observeOn` simply delays notifications a
|
||
* little bit more, to ensure that they are emitted at expected moments.
|
||
*
|
||
* As a matter of fact, `observeOn` accepts second parameter, which specifies in milliseconds with what delay notifications
|
||
* will be emitted. The main difference between {@link delay} operator and `observeOn` is that `observeOn`
|
||
* will delay all notifications - including error notifications - while `delay` will pass through error
|
||
* from source Observable immediately when it is emitted. In general it is highly recommended to use `delay` operator
|
||
* for any kind of delaying of values in the stream, while using `observeOn` to specify which scheduler should be used
|
||
* for notification emissions in general.
|
||
*
|
||
* @example <caption>Ensure values in subscribe are called just before browser repaint.</caption>
|
||
* const intervals = Rx.Observable.interval(10); // Intervals are scheduled
|
||
* // with async scheduler by default...
|
||
*
|
||
* intervals
|
||
* .observeOn(Rx.Scheduler.animationFrame) // ...but we will observe on animationFrame
|
||
* .subscribe(val => { // scheduler to ensure smooth animation.
|
||
* someDiv.style.height = val + 'px';
|
||
* });
|
||
*
|
||
* @see {@link delay}
|
||
*
|
||
* @param {IScheduler} scheduler Scheduler that will be used to reschedule notifications from source Observable.
|
||
* @param {number} [delay] Number of milliseconds that states with what delay every notification should be rescheduled.
|
||
* @return {Observable<T>} Observable that emits the same notifications as the source Observable,
|
||
* but with provided scheduler.
|
||
*
|
||
* @method observeOn
|
||
* @owner Observable
|
||
*/
|
||
function observeOn(scheduler, delay) {
|
||
if (delay === void 0) { delay = 0; }
|
||
return function observeOnOperatorFunction(source) {
|
||
return source.lift(new ObserveOnOperator(scheduler, delay));
|
||
};
|
||
}
|
||
exports.observeOn = observeOn;
|
||
var ObserveOnOperator = (function () {
|
||
function ObserveOnOperator(scheduler, delay) {
|
||
if (delay === void 0) { delay = 0; }
|
||
this.scheduler = scheduler;
|
||
this.delay = delay;
|
||
}
|
||
ObserveOnOperator.prototype.call = function (subscriber, source) {
|
||
return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));
|
||
};
|
||
return ObserveOnOperator;
|
||
}());
|
||
exports.ObserveOnOperator = ObserveOnOperator;
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var ObserveOnSubscriber = (function (_super) {
|
||
__extends(ObserveOnSubscriber, _super);
|
||
function ObserveOnSubscriber(destination, scheduler, delay) {
|
||
if (delay === void 0) { delay = 0; }
|
||
_super.call(this, destination);
|
||
this.scheduler = scheduler;
|
||
this.delay = delay;
|
||
}
|
||
ObserveOnSubscriber.dispatch = function (arg) {
|
||
var notification = arg.notification, destination = arg.destination;
|
||
notification.observe(destination);
|
||
this.unsubscribe();
|
||
};
|
||
ObserveOnSubscriber.prototype.scheduleMessage = function (notification) {
|
||
this.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));
|
||
};
|
||
ObserveOnSubscriber.prototype._next = function (value) {
|
||
this.scheduleMessage(Notification_1.Notification.createNext(value));
|
||
};
|
||
ObserveOnSubscriber.prototype._error = function (err) {
|
||
this.scheduleMessage(Notification_1.Notification.createError(err));
|
||
};
|
||
ObserveOnSubscriber.prototype._complete = function () {
|
||
this.scheduleMessage(Notification_1.Notification.createComplete());
|
||
};
|
||
return ObserveOnSubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
exports.ObserveOnSubscriber = ObserveOnSubscriber;
|
||
var ObserveOnMessage = (function () {
|
||
function ObserveOnMessage(notification, destination) {
|
||
this.notification = notification;
|
||
this.destination = destination;
|
||
}
|
||
return ObserveOnMessage;
|
||
}());
|
||
exports.ObserveOnMessage = ObserveOnMessage;
|
||
//# sourceMappingURL=observeOn.js.map
|
||
|
||
/***/ }),
|
||
/* 149 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var Observable_1 = __webpack_require__(1);
|
||
/**
|
||
* Represents a push-based event or value that an {@link Observable} can emit.
|
||
* This class is particularly useful for operators that manage notifications,
|
||
* like {@link materialize}, {@link dematerialize}, {@link observeOn}, and
|
||
* others. Besides wrapping the actual delivered value, it also annotates it
|
||
* with metadata of, for instance, what type of push message it is (`next`,
|
||
* `error`, or `complete`).
|
||
*
|
||
* @see {@link materialize}
|
||
* @see {@link dematerialize}
|
||
* @see {@link observeOn}
|
||
*
|
||
* @class Notification<T>
|
||
*/
|
||
var Notification = (function () {
|
||
function Notification(kind, value, error) {
|
||
this.kind = kind;
|
||
this.value = value;
|
||
this.error = error;
|
||
this.hasValue = kind === 'N';
|
||
}
|
||
/**
|
||
* Delivers to the given `observer` the value wrapped by this Notification.
|
||
* @param {Observer} observer
|
||
* @return
|
||
*/
|
||
Notification.prototype.observe = function (observer) {
|
||
switch (this.kind) {
|
||
case 'N':
|
||
return observer.next && observer.next(this.value);
|
||
case 'E':
|
||
return observer.error && observer.error(this.error);
|
||
case 'C':
|
||
return observer.complete && observer.complete();
|
||
}
|
||
};
|
||
/**
|
||
* Given some {@link Observer} callbacks, deliver the value represented by the
|
||
* current Notification to the correctly corresponding callback.
|
||
* @param {function(value: T): void} next An Observer `next` callback.
|
||
* @param {function(err: any): void} [error] An Observer `error` callback.
|
||
* @param {function(): void} [complete] An Observer `complete` callback.
|
||
* @return {any}
|
||
*/
|
||
Notification.prototype.do = function (next, error, complete) {
|
||
var kind = this.kind;
|
||
switch (kind) {
|
||
case 'N':
|
||
return next && next(this.value);
|
||
case 'E':
|
||
return error && error(this.error);
|
||
case 'C':
|
||
return complete && complete();
|
||
}
|
||
};
|
||
/**
|
||
* Takes an Observer or its individual callback functions, and calls `observe`
|
||
* or `do` methods accordingly.
|
||
* @param {Observer|function(value: T): void} nextOrObserver An Observer or
|
||
* the `next` callback.
|
||
* @param {function(err: any): void} [error] An Observer `error` callback.
|
||
* @param {function(): void} [complete] An Observer `complete` callback.
|
||
* @return {any}
|
||
*/
|
||
Notification.prototype.accept = function (nextOrObserver, error, complete) {
|
||
if (nextOrObserver && typeof nextOrObserver.next === 'function') {
|
||
return this.observe(nextOrObserver);
|
||
}
|
||
else {
|
||
return this.do(nextOrObserver, error, complete);
|
||
}
|
||
};
|
||
/**
|
||
* Returns a simple Observable that just delivers the notification represented
|
||
* by this Notification instance.
|
||
* @return {any}
|
||
*/
|
||
Notification.prototype.toObservable = function () {
|
||
var kind = this.kind;
|
||
switch (kind) {
|
||
case 'N':
|
||
return Observable_1.Observable.of(this.value);
|
||
case 'E':
|
||
return Observable_1.Observable.throw(this.error);
|
||
case 'C':
|
||
return Observable_1.Observable.empty();
|
||
}
|
||
throw new Error('unexpected notification kind value');
|
||
};
|
||
/**
|
||
* A shortcut to create a Notification instance of the type `next` from a
|
||
* given value.
|
||
* @param {T} value The `next` value.
|
||
* @return {Notification<T>} The "next" Notification representing the
|
||
* argument.
|
||
*/
|
||
Notification.createNext = function (value) {
|
||
if (typeof value !== 'undefined') {
|
||
return new Notification('N', value);
|
||
}
|
||
return Notification.undefinedValueNotification;
|
||
};
|
||
/**
|
||
* A shortcut to create a Notification instance of the type `error` from a
|
||
* given error.
|
||
* @param {any} [err] The `error` error.
|
||
* @return {Notification<T>} The "error" Notification representing the
|
||
* argument.
|
||
*/
|
||
Notification.createError = function (err) {
|
||
return new Notification('E', undefined, err);
|
||
};
|
||
/**
|
||
* A shortcut to create a Notification instance of the type `complete`.
|
||
* @return {Notification<any>} The valueless "complete" Notification.
|
||
*/
|
||
Notification.createComplete = function () {
|
||
return Notification.completeNotification;
|
||
};
|
||
Notification.completeNotification = new Notification('C');
|
||
Notification.undefinedValueNotification = new Notification('N', undefined);
|
||
return Notification;
|
||
}());
|
||
exports.Notification = Notification;
|
||
//# sourceMappingURL=Notification.js.map
|
||
|
||
/***/ }),
|
||
/* 150 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var mergeAll_1 = __webpack_require__(55);
|
||
/**
|
||
* Converts a higher-order Observable into a first-order Observable by
|
||
* concatenating the inner Observables in order.
|
||
*
|
||
* <span class="informal">Flattens an Observable-of-Observables by putting one
|
||
* inner Observable after the other.</span>
|
||
*
|
||
* <img src="./img/concatAll.png" width="100%">
|
||
*
|
||
* Joins every Observable emitted by the source (a higher-order Observable), in
|
||
* a serial fashion. It subscribes to each inner Observable only after the
|
||
* previous inner Observable has completed, and merges all of their values into
|
||
* the returned observable.
|
||
*
|
||
* __Warning:__ If the source Observable emits Observables quickly and
|
||
* endlessly, and the inner Observables it emits generally complete slower than
|
||
* the source emits, you can run into memory issues as the incoming Observables
|
||
* collect in an unbounded buffer.
|
||
*
|
||
* Note: `concatAll` is equivalent to `mergeAll` with concurrency parameter set
|
||
* to `1`.
|
||
*
|
||
* @example <caption>For each click event, tick every second from 0 to 3, with no concurrency</caption>
|
||
* var clicks = Rx.Observable.fromEvent(document, 'click');
|
||
* var higherOrder = clicks.map(ev => Rx.Observable.interval(1000).take(4));
|
||
* var firstOrder = higherOrder.concatAll();
|
||
* firstOrder.subscribe(x => console.log(x));
|
||
*
|
||
* // Results in the following:
|
||
* // (results are not concurrent)
|
||
* // For every click on the "document" it will emit values 0 to 3 spaced
|
||
* // on a 1000ms interval
|
||
* // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3
|
||
*
|
||
* @see {@link combineAll}
|
||
* @see {@link concat}
|
||
* @see {@link concatMap}
|
||
* @see {@link concatMapTo}
|
||
* @see {@link exhaust}
|
||
* @see {@link mergeAll}
|
||
* @see {@link switch}
|
||
* @see {@link zipAll}
|
||
*
|
||
* @return {Observable} An Observable emitting values from all the inner
|
||
* Observables concatenated.
|
||
* @method concatAll
|
||
* @owner Observable
|
||
*/
|
||
function concatAll() {
|
||
return mergeAll_1.mergeAll(1);
|
||
}
|
||
exports.concatAll = concatAll;
|
||
//# sourceMappingURL=concatAll.js.map
|
||
|
||
/***/ }),
|
||
/* 151 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
function identity(x) {
|
||
return x;
|
||
}
|
||
exports.identity = identity;
|
||
//# sourceMappingURL=identity.js.map
|
||
|
||
/***/ }),
|
||
/* 152 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var ArrayObservable_1 = __webpack_require__(23);
|
||
var ScalarObservable_1 = __webpack_require__(46);
|
||
var EmptyObservable_1 = __webpack_require__(28);
|
||
var concat_1 = __webpack_require__(54);
|
||
var isScheduler_1 = __webpack_require__(25);
|
||
/* tslint:enable:max-line-length */
|
||
/**
|
||
* Returns an Observable that emits the items you specify as arguments before it begins to emit
|
||
* items emitted by the source Observable.
|
||
*
|
||
* <img src="./img/startWith.png" width="100%">
|
||
*
|
||
* @param {...T} values - Items you want the modified Observable to emit first.
|
||
* @param {Scheduler} [scheduler] - A {@link IScheduler} to use for scheduling
|
||
* the emissions of the `next` notifications.
|
||
* @return {Observable} An Observable that emits the items in the specified Iterable and then emits the items
|
||
* emitted by the source Observable.
|
||
* @method startWith
|
||
* @owner Observable
|
||
*/
|
||
function startWith() {
|
||
var array = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
array[_i - 0] = arguments[_i];
|
||
}
|
||
return function (source) {
|
||
var scheduler = array[array.length - 1];
|
||
if (isScheduler_1.isScheduler(scheduler)) {
|
||
array.pop();
|
||
}
|
||
else {
|
||
scheduler = null;
|
||
}
|
||
var len = array.length;
|
||
if (len === 1) {
|
||
return concat_1.concat(new ScalarObservable_1.ScalarObservable(array[0], scheduler), source);
|
||
}
|
||
else if (len > 1) {
|
||
return concat_1.concat(new ArrayObservable_1.ArrayObservable(array, scheduler), source);
|
||
}
|
||
else {
|
||
return concat_1.concat(new EmptyObservable_1.EmptyObservable(scheduler), source);
|
||
}
|
||
};
|
||
}
|
||
exports.startWith = startWith;
|
||
//# sourceMappingURL=startWith.js.map
|
||
|
||
/***/ }),
|
||
/* 153 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var pluck_1 = __webpack_require__(6);
|
||
var ignoreElements_1 = __webpack_require__(11);
|
||
var partition_1 = __webpack_require__(154);
|
||
var merge_1 = __webpack_require__(38);
|
||
var browser_utils_1 = __webpack_require__(22);
|
||
var tap_1 = __webpack_require__(5);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var map_1 = __webpack_require__(2);
|
||
function setScrollEffect(xs, inputs) {
|
||
{
|
||
/**
|
||
* Group the incoming event with window, document & scrollProportionally argument
|
||
*/
|
||
var tupleStream$ = xs.pipe(withLatestFrom_1.withLatestFrom(inputs.window$, inputs.document$, inputs.option$.pipe(pluck_1.pluck("scrollProportionally"))));
|
||
/**
|
||
* Split the stream between document scrolls and element scrolls
|
||
*/
|
||
var _a = partition_1.partition(function (_a) {
|
||
var event = _a[0];
|
||
return event.tagName === "document";
|
||
})(tupleStream$), document$ = _a[0], element$ = _a[1];
|
||
/**
|
||
* Further split the element scroll between those matching in `scrollElementMapping`
|
||
* and regular element scrolls
|
||
*/
|
||
var _b = partition_1.partition(function (_a) {
|
||
var event = _a[0];
|
||
return event.mappingIndex > -1;
|
||
})(element$), mapped$ = _b[0], nonMapped$ = _b[1];
|
||
return merge_1.merge(
|
||
/**
|
||
* Main window scroll
|
||
*/
|
||
document$.pipe(tap_1.tap(function (incoming) {
|
||
var event = incoming[0], window = incoming[1], document = incoming[2], scrollProportionally = incoming[3];
|
||
var scrollSpace = browser_utils_1.getDocumentScrollSpace(document);
|
||
if (scrollProportionally) {
|
||
return window.scrollTo(0, scrollSpace.y * event.position.proportional); // % of y axis of scroll to px
|
||
}
|
||
return window.scrollTo(0, event.position.raw.y);
|
||
})),
|
||
/**
|
||
* Regular, non-mapped Element scrolls
|
||
*/
|
||
nonMapped$.pipe(tap_1.tap(function (incoming) {
|
||
var event = incoming[0], window = incoming[1], document = incoming[2], scrollProportionally = incoming[3];
|
||
var matchingElements = document.getElementsByTagName(event.tagName);
|
||
if (matchingElements && matchingElements.length) {
|
||
var match = matchingElements[event.index];
|
||
if (match) {
|
||
return scrollElement(match, scrollProportionally, event);
|
||
}
|
||
}
|
||
})),
|
||
/**
|
||
* Element scrolls given in 'scrollElementMapping'
|
||
*/
|
||
mapped$.pipe(withLatestFrom_1.withLatestFrom(inputs.option$.pipe(pluck_1.pluck("scrollElementMapping"))),
|
||
/**
|
||
* Filter the elements in the option `scrollElementMapping` so
|
||
* that it does not contain the element that triggered the event
|
||
*/
|
||
map_1.map(function (_a) {
|
||
var incoming = _a[0], scrollElementMapping = _a[1];
|
||
var event = incoming[0];
|
||
return [
|
||
incoming,
|
||
scrollElementMapping.filter(function (item, index) { return index !== event.mappingIndex; })
|
||
];
|
||
}),
|
||
/**
|
||
* Now perform the scroll on all other matching elements
|
||
*/
|
||
tap_1.tap(function (_a) {
|
||
var incoming = _a[0], scrollElementMapping = _a[1];
|
||
var event = incoming[0], window = incoming[1], document = incoming[2], scrollProportionally = incoming[3];
|
||
scrollElementMapping
|
||
.map(function (selector) { return document.querySelector(selector); })
|
||
.forEach(function (element) {
|
||
scrollElement(element, scrollProportionally, event);
|
||
});
|
||
}))).pipe(ignoreElements_1.ignoreElements());
|
||
}
|
||
}
|
||
exports.setScrollEffect = setScrollEffect;
|
||
function scrollElement(element, scrollProportionally, event) {
|
||
if (scrollProportionally && element.scrollTo) {
|
||
return element.scrollTo(0, element.scrollHeight * event.position.proportional); // % of y axis of scroll to px
|
||
}
|
||
return element.scrollTo(0, event.position.raw.y);
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
/* 154 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var not_1 = __webpack_require__(155);
|
||
var filter_1 = __webpack_require__(4);
|
||
/**
|
||
* Splits the source Observable into two, one with values that satisfy a
|
||
* predicate, and another with values that don't satisfy the predicate.
|
||
*
|
||
* <span class="informal">It's like {@link filter}, but returns two Observables:
|
||
* one like the output of {@link filter}, and the other with values that did not
|
||
* pass the condition.</span>
|
||
*
|
||
* <img src="./img/partition.png" width="100%">
|
||
*
|
||
* `partition` outputs an array with two Observables that partition the values
|
||
* from the source Observable through the given `predicate` function. The first
|
||
* Observable in that array emits source values for which the predicate argument
|
||
* returns true. The second Observable emits source values for which the
|
||
* predicate returns false. The first behaves like {@link filter} and the second
|
||
* behaves like {@link filter} with the predicate negated.
|
||
*
|
||
* @example <caption>Partition click events into those on DIV elements and those elsewhere</caption>
|
||
* var clicks = Rx.Observable.fromEvent(document, 'click');
|
||
* var parts = clicks.partition(ev => ev.target.tagName === 'DIV');
|
||
* var clicksOnDivs = parts[0];
|
||
* var clicksElsewhere = parts[1];
|
||
* clicksOnDivs.subscribe(x => console.log('DIV clicked: ', x));
|
||
* clicksElsewhere.subscribe(x => console.log('Other clicked: ', x));
|
||
*
|
||
* @see {@link filter}
|
||
*
|
||
* @param {function(value: T, index: number): boolean} predicate A function that
|
||
* evaluates each value emitted by the source Observable. If it returns `true`,
|
||
* the value is emitted on the first Observable in the returned array, if
|
||
* `false` the value is emitted on the second Observable in the array. The
|
||
* `index` parameter is the number `i` for the i-th source emission that has
|
||
* happened since the subscription, starting from the number `0`.
|
||
* @param {any} [thisArg] An optional argument to determine the value of `this`
|
||
* in the `predicate` function.
|
||
* @return {[Observable<T>, Observable<T>]} An array with two Observables: one
|
||
* with values that passed the predicate, and another with values that did not
|
||
* pass the predicate.
|
||
* @method partition
|
||
* @owner Observable
|
||
*/
|
||
function partition(predicate, thisArg) {
|
||
return function (source) { return [
|
||
filter_1.filter(predicate, thisArg)(source),
|
||
filter_1.filter(not_1.not(predicate, thisArg))(source)
|
||
]; };
|
||
}
|
||
exports.partition = partition;
|
||
//# sourceMappingURL=partition.js.map
|
||
|
||
/***/ }),
|
||
/* 155 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
function not(pred, thisArg) {
|
||
function notPred() {
|
||
return !(notPred.pred.apply(notPred.thisArg, arguments));
|
||
}
|
||
notPred.pred = pred;
|
||
notPred.thisArg = thisArg;
|
||
return notPred;
|
||
}
|
||
exports.not = not;
|
||
//# sourceMappingURL=not.js.map
|
||
|
||
/***/ }),
|
||
/* 156 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var map_1 = __webpack_require__(2);
|
||
var Log = __webpack_require__(14);
|
||
function incomingBrowserNotify(xs) {
|
||
return xs.pipe(map_1.map(function (event) { return Log.overlayInfo(event.message, event.timeout); }));
|
||
}
|
||
exports.incomingBrowserNotify = incomingBrowserNotify;
|
||
|
||
|
||
/***/ }),
|
||
/* 157 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var pluck_1 = __webpack_require__(6);
|
||
var filter_1 = __webpack_require__(4);
|
||
var map_1 = __webpack_require__(2);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var browser_set_location_effect_1 = __webpack_require__(89);
|
||
function incomingBrowserLocation(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.option$.pipe(pluck_1.pluck("ghostMode", "location"))), filter_1.filter(function (_a) {
|
||
var canSyncLocation = _a[1];
|
||
return canSyncLocation === true;
|
||
}), map_1.map(function (_a) {
|
||
var event = _a[0];
|
||
return browser_set_location_effect_1.browserSetLocation(event);
|
||
}));
|
||
}
|
||
exports.incomingBrowserLocation = incomingBrowserLocation;
|
||
|
||
|
||
/***/ }),
|
||
/* 158 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var SubscribeOnObservable_1 = __webpack_require__(159);
|
||
/**
|
||
* Asynchronously subscribes Observers to this Observable on the specified IScheduler.
|
||
*
|
||
* <img src="./img/subscribeOn.png" width="100%">
|
||
*
|
||
* @param {Scheduler} scheduler - The IScheduler to perform subscription actions on.
|
||
* @return {Observable<T>} The source Observable modified so that its subscriptions happen on the specified IScheduler.
|
||
.
|
||
* @method subscribeOn
|
||
* @owner Observable
|
||
*/
|
||
function subscribeOn(scheduler, delay) {
|
||
if (delay === void 0) { delay = 0; }
|
||
return function subscribeOnOperatorFunction(source) {
|
||
return source.lift(new SubscribeOnOperator(scheduler, delay));
|
||
};
|
||
}
|
||
exports.subscribeOn = subscribeOn;
|
||
var SubscribeOnOperator = (function () {
|
||
function SubscribeOnOperator(scheduler, delay) {
|
||
this.scheduler = scheduler;
|
||
this.delay = delay;
|
||
}
|
||
SubscribeOnOperator.prototype.call = function (subscriber, source) {
|
||
return new SubscribeOnObservable_1.SubscribeOnObservable(source, this.delay, this.scheduler).subscribe(subscriber);
|
||
};
|
||
return SubscribeOnOperator;
|
||
}());
|
||
//# sourceMappingURL=subscribeOn.js.map
|
||
|
||
/***/ }),
|
||
/* 159 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Observable_1 = __webpack_require__(1);
|
||
var asap_1 = __webpack_require__(160);
|
||
var isNumeric_1 = __webpack_require__(77);
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @extends {Ignored}
|
||
* @hide true
|
||
*/
|
||
var SubscribeOnObservable = (function (_super) {
|
||
__extends(SubscribeOnObservable, _super);
|
||
function SubscribeOnObservable(source, delayTime, scheduler) {
|
||
if (delayTime === void 0) { delayTime = 0; }
|
||
if (scheduler === void 0) { scheduler = asap_1.asap; }
|
||
_super.call(this);
|
||
this.source = source;
|
||
this.delayTime = delayTime;
|
||
this.scheduler = scheduler;
|
||
if (!isNumeric_1.isNumeric(delayTime) || delayTime < 0) {
|
||
this.delayTime = 0;
|
||
}
|
||
if (!scheduler || typeof scheduler.schedule !== 'function') {
|
||
this.scheduler = asap_1.asap;
|
||
}
|
||
}
|
||
SubscribeOnObservable.create = function (source, delay, scheduler) {
|
||
if (delay === void 0) { delay = 0; }
|
||
if (scheduler === void 0) { scheduler = asap_1.asap; }
|
||
return new SubscribeOnObservable(source, delay, scheduler);
|
||
};
|
||
SubscribeOnObservable.dispatch = function (arg) {
|
||
var source = arg.source, subscriber = arg.subscriber;
|
||
return this.add(source.subscribe(subscriber));
|
||
};
|
||
/** @deprecated internal use only */ SubscribeOnObservable.prototype._subscribe = function (subscriber) {
|
||
var delay = this.delayTime;
|
||
var source = this.source;
|
||
var scheduler = this.scheduler;
|
||
return scheduler.schedule(SubscribeOnObservable.dispatch, delay, {
|
||
source: source, subscriber: subscriber
|
||
});
|
||
};
|
||
return SubscribeOnObservable;
|
||
}(Observable_1.Observable));
|
||
exports.SubscribeOnObservable = SubscribeOnObservable;
|
||
//# sourceMappingURL=SubscribeOnObservable.js.map
|
||
|
||
/***/ }),
|
||
/* 160 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var AsapAction_1 = __webpack_require__(161);
|
||
var AsapScheduler_1 = __webpack_require__(164);
|
||
/**
|
||
*
|
||
* Asap Scheduler
|
||
*
|
||
* <span class="informal">Perform task as fast as it can be performed asynchronously</span>
|
||
*
|
||
* `asap` scheduler behaves the same as {@link async} scheduler when you use it to delay task
|
||
* in time. If however you set delay to `0`, `asap` will wait for current synchronously executing
|
||
* code to end and then it will try to execute given task as fast as possible.
|
||
*
|
||
* `asap` scheduler will do its best to minimize time between end of currently executing code
|
||
* and start of scheduled task. This makes it best candidate for performing so called "deferring".
|
||
* Traditionally this was achieved by calling `setTimeout(deferredTask, 0)`, but that technique involves
|
||
* some (although minimal) unwanted delay.
|
||
*
|
||
* Note that using `asap` scheduler does not necessarily mean that your task will be first to process
|
||
* after currently executing code. In particular, if some task was also scheduled with `asap` before,
|
||
* that task will execute first. That being said, if you need to schedule task asynchronously, but
|
||
* as soon as possible, `asap` scheduler is your best bet.
|
||
*
|
||
* @example <caption>Compare async and asap scheduler</caption>
|
||
*
|
||
* Rx.Scheduler.async.schedule(() => console.log('async')); // scheduling 'async' first...
|
||
* Rx.Scheduler.asap.schedule(() => console.log('asap'));
|
||
*
|
||
* // Logs:
|
||
* // "asap"
|
||
* // "async"
|
||
* // ... but 'asap' goes first!
|
||
*
|
||
* @static true
|
||
* @name asap
|
||
* @owner Scheduler
|
||
*/
|
||
exports.asap = new AsapScheduler_1.AsapScheduler(AsapAction_1.AsapAction);
|
||
//# sourceMappingURL=asap.js.map
|
||
|
||
/***/ }),
|
||
/* 161 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Immediate_1 = __webpack_require__(162);
|
||
var AsyncAction_1 = __webpack_require__(79);
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var AsapAction = (function (_super) {
|
||
__extends(AsapAction, _super);
|
||
function AsapAction(scheduler, work) {
|
||
_super.call(this, scheduler, work);
|
||
this.scheduler = scheduler;
|
||
this.work = work;
|
||
}
|
||
AsapAction.prototype.requestAsyncId = function (scheduler, id, delay) {
|
||
if (delay === void 0) { delay = 0; }
|
||
// If delay is greater than 0, request as an async action.
|
||
if (delay !== null && delay > 0) {
|
||
return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
|
||
}
|
||
// Push the action to the end of the scheduler queue.
|
||
scheduler.actions.push(this);
|
||
// If a microtask has already been scheduled, don't schedule another
|
||
// one. If a microtask hasn't been scheduled yet, schedule one now. Return
|
||
// the current scheduled microtask id.
|
||
return scheduler.scheduled || (scheduler.scheduled = Immediate_1.Immediate.setImmediate(scheduler.flush.bind(scheduler, null)));
|
||
};
|
||
AsapAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
|
||
if (delay === void 0) { delay = 0; }
|
||
// If delay exists and is greater than 0, or if the delay is null (the
|
||
// action wasn't rescheduled) but was originally scheduled as an async
|
||
// action, then recycle as an async action.
|
||
if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
|
||
return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
|
||
}
|
||
// If the scheduler queue is empty, cancel the requested microtask and
|
||
// set the scheduled flag to undefined so the next AsapAction will schedule
|
||
// its own.
|
||
if (scheduler.actions.length === 0) {
|
||
Immediate_1.Immediate.clearImmediate(id);
|
||
scheduler.scheduled = undefined;
|
||
}
|
||
// Return undefined so the action knows to request a new async id if it's rescheduled.
|
||
return undefined;
|
||
};
|
||
return AsapAction;
|
||
}(AsyncAction_1.AsyncAction));
|
||
exports.AsapAction = AsapAction;
|
||
//# sourceMappingURL=AsapAction.js.map
|
||
|
||
/***/ }),
|
||
/* 162 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* WEBPACK VAR INJECTION */(function(clearImmediate, setImmediate) {/**
|
||
Some credit for this helper goes to http://github.com/YuzuJS/setImmediate
|
||
*/
|
||
|
||
var root_1 = __webpack_require__(7);
|
||
var ImmediateDefinition = (function () {
|
||
function ImmediateDefinition(root) {
|
||
this.root = root;
|
||
if (root.setImmediate && typeof root.setImmediate === 'function') {
|
||
this.setImmediate = root.setImmediate.bind(root);
|
||
this.clearImmediate = root.clearImmediate.bind(root);
|
||
}
|
||
else {
|
||
this.nextHandle = 1;
|
||
this.tasksByHandle = {};
|
||
this.currentlyRunningATask = false;
|
||
// Don't get fooled by e.g. browserify environments.
|
||
if (this.canUseProcessNextTick()) {
|
||
// For Node.js before 0.9
|
||
this.setImmediate = this.createProcessNextTickSetImmediate();
|
||
}
|
||
else if (this.canUsePostMessage()) {
|
||
// For non-IE10 modern browsers
|
||
this.setImmediate = this.createPostMessageSetImmediate();
|
||
}
|
||
else if (this.canUseMessageChannel()) {
|
||
// For web workers, where supported
|
||
this.setImmediate = this.createMessageChannelSetImmediate();
|
||
}
|
||
else if (this.canUseReadyStateChange()) {
|
||
// For IE 6–8
|
||
this.setImmediate = this.createReadyStateChangeSetImmediate();
|
||
}
|
||
else {
|
||
// For older browsers
|
||
this.setImmediate = this.createSetTimeoutSetImmediate();
|
||
}
|
||
var ci = function clearImmediate(handle) {
|
||
delete clearImmediate.instance.tasksByHandle[handle];
|
||
};
|
||
ci.instance = this;
|
||
this.clearImmediate = ci;
|
||
}
|
||
}
|
||
ImmediateDefinition.prototype.identify = function (o) {
|
||
return this.root.Object.prototype.toString.call(o);
|
||
};
|
||
ImmediateDefinition.prototype.canUseProcessNextTick = function () {
|
||
return this.identify(this.root.process) === '[object process]';
|
||
};
|
||
ImmediateDefinition.prototype.canUseMessageChannel = function () {
|
||
return Boolean(this.root.MessageChannel);
|
||
};
|
||
ImmediateDefinition.prototype.canUseReadyStateChange = function () {
|
||
var document = this.root.document;
|
||
return Boolean(document && 'onreadystatechange' in document.createElement('script'));
|
||
};
|
||
ImmediateDefinition.prototype.canUsePostMessage = function () {
|
||
var root = this.root;
|
||
// The test against `importScripts` prevents this implementation from being installed inside a web worker,
|
||
// where `root.postMessage` means something completely different and can't be used for this purpose.
|
||
if (root.postMessage && !root.importScripts) {
|
||
var postMessageIsAsynchronous_1 = true;
|
||
var oldOnMessage = root.onmessage;
|
||
root.onmessage = function () {
|
||
postMessageIsAsynchronous_1 = false;
|
||
};
|
||
root.postMessage('', '*');
|
||
root.onmessage = oldOnMessage;
|
||
return postMessageIsAsynchronous_1;
|
||
}
|
||
return false;
|
||
};
|
||
// This function accepts the same arguments as setImmediate, but
|
||
// returns a function that requires no arguments.
|
||
ImmediateDefinition.prototype.partiallyApplied = function (handler) {
|
||
var args = [];
|
||
for (var _i = 1; _i < arguments.length; _i++) {
|
||
args[_i - 1] = arguments[_i];
|
||
}
|
||
var fn = function result() {
|
||
var _a = result, handler = _a.handler, args = _a.args;
|
||
if (typeof handler === 'function') {
|
||
handler.apply(undefined, args);
|
||
}
|
||
else {
|
||
(new Function('' + handler))();
|
||
}
|
||
};
|
||
fn.handler = handler;
|
||
fn.args = args;
|
||
return fn;
|
||
};
|
||
ImmediateDefinition.prototype.addFromSetImmediateArguments = function (args) {
|
||
this.tasksByHandle[this.nextHandle] = this.partiallyApplied.apply(undefined, args);
|
||
return this.nextHandle++;
|
||
};
|
||
ImmediateDefinition.prototype.createProcessNextTickSetImmediate = function () {
|
||
var fn = function setImmediate() {
|
||
var instance = setImmediate.instance;
|
||
var handle = instance.addFromSetImmediateArguments(arguments);
|
||
instance.root.process.nextTick(instance.partiallyApplied(instance.runIfPresent, handle));
|
||
return handle;
|
||
};
|
||
fn.instance = this;
|
||
return fn;
|
||
};
|
||
ImmediateDefinition.prototype.createPostMessageSetImmediate = function () {
|
||
// Installs an event handler on `global` for the `message` event: see
|
||
// * https://developer.mozilla.org/en/DOM/window.postMessage
|
||
// * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
|
||
var root = this.root;
|
||
var messagePrefix = 'setImmediate$' + root.Math.random() + '$';
|
||
var onGlobalMessage = function globalMessageHandler(event) {
|
||
var instance = globalMessageHandler.instance;
|
||
if (event.source === root &&
|
||
typeof event.data === 'string' &&
|
||
event.data.indexOf(messagePrefix) === 0) {
|
||
instance.runIfPresent(+event.data.slice(messagePrefix.length));
|
||
}
|
||
};
|
||
onGlobalMessage.instance = this;
|
||
root.addEventListener('message', onGlobalMessage, false);
|
||
var fn = function setImmediate() {
|
||
var _a = setImmediate, messagePrefix = _a.messagePrefix, instance = _a.instance;
|
||
var handle = instance.addFromSetImmediateArguments(arguments);
|
||
instance.root.postMessage(messagePrefix + handle, '*');
|
||
return handle;
|
||
};
|
||
fn.instance = this;
|
||
fn.messagePrefix = messagePrefix;
|
||
return fn;
|
||
};
|
||
ImmediateDefinition.prototype.runIfPresent = function (handle) {
|
||
// From the spec: 'Wait until any invocations of this algorithm started before this one have completed.'
|
||
// So if we're currently running a task, we'll need to delay this invocation.
|
||
if (this.currentlyRunningATask) {
|
||
// Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
|
||
// 'too much recursion' error.
|
||
this.root.setTimeout(this.partiallyApplied(this.runIfPresent, handle), 0);
|
||
}
|
||
else {
|
||
var task = this.tasksByHandle[handle];
|
||
if (task) {
|
||
this.currentlyRunningATask = true;
|
||
try {
|
||
task();
|
||
}
|
||
finally {
|
||
this.clearImmediate(handle);
|
||
this.currentlyRunningATask = false;
|
||
}
|
||
}
|
||
}
|
||
};
|
||
ImmediateDefinition.prototype.createMessageChannelSetImmediate = function () {
|
||
var _this = this;
|
||
var channel = new this.root.MessageChannel();
|
||
channel.port1.onmessage = function (event) {
|
||
var handle = event.data;
|
||
_this.runIfPresent(handle);
|
||
};
|
||
var fn = function setImmediate() {
|
||
var _a = setImmediate, channel = _a.channel, instance = _a.instance;
|
||
var handle = instance.addFromSetImmediateArguments(arguments);
|
||
channel.port2.postMessage(handle);
|
||
return handle;
|
||
};
|
||
fn.channel = channel;
|
||
fn.instance = this;
|
||
return fn;
|
||
};
|
||
ImmediateDefinition.prototype.createReadyStateChangeSetImmediate = function () {
|
||
var fn = function setImmediate() {
|
||
var instance = setImmediate.instance;
|
||
var root = instance.root;
|
||
var doc = root.document;
|
||
var html = doc.documentElement;
|
||
var handle = instance.addFromSetImmediateArguments(arguments);
|
||
// Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
|
||
// into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
|
||
var script = doc.createElement('script');
|
||
script.onreadystatechange = function () {
|
||
instance.runIfPresent(handle);
|
||
script.onreadystatechange = null;
|
||
html.removeChild(script);
|
||
script = null;
|
||
};
|
||
html.appendChild(script);
|
||
return handle;
|
||
};
|
||
fn.instance = this;
|
||
return fn;
|
||
};
|
||
ImmediateDefinition.prototype.createSetTimeoutSetImmediate = function () {
|
||
var fn = function setImmediate() {
|
||
var instance = setImmediate.instance;
|
||
var handle = instance.addFromSetImmediateArguments(arguments);
|
||
instance.root.setTimeout(instance.partiallyApplied(instance.runIfPresent, handle), 0);
|
||
return handle;
|
||
};
|
||
fn.instance = this;
|
||
return fn;
|
||
};
|
||
return ImmediateDefinition;
|
||
}());
|
||
exports.ImmediateDefinition = ImmediateDefinition;
|
||
exports.Immediate = new ImmediateDefinition(root_1.root);
|
||
//# sourceMappingURL=Immediate.js.map
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(97).clearImmediate, __webpack_require__(97).setImmediate))
|
||
|
||
/***/ }),
|
||
/* 163 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {
|
||
"use strict";
|
||
|
||
if (global.setImmediate) {
|
||
return;
|
||
}
|
||
|
||
var nextHandle = 1; // Spec says greater than zero
|
||
var tasksByHandle = {};
|
||
var currentlyRunningATask = false;
|
||
var doc = global.document;
|
||
var registerImmediate;
|
||
|
||
function setImmediate(callback) {
|
||
// Callback can either be a function or a string
|
||
if (typeof callback !== "function") {
|
||
callback = new Function("" + callback);
|
||
}
|
||
// Copy function arguments
|
||
var args = new Array(arguments.length - 1);
|
||
for (var i = 0; i < args.length; i++) {
|
||
args[i] = arguments[i + 1];
|
||
}
|
||
// Store and register the task
|
||
var task = { callback: callback, args: args };
|
||
tasksByHandle[nextHandle] = task;
|
||
registerImmediate(nextHandle);
|
||
return nextHandle++;
|
||
}
|
||
|
||
function clearImmediate(handle) {
|
||
delete tasksByHandle[handle];
|
||
}
|
||
|
||
function run(task) {
|
||
var callback = task.callback;
|
||
var args = task.args;
|
||
switch (args.length) {
|
||
case 0:
|
||
callback();
|
||
break;
|
||
case 1:
|
||
callback(args[0]);
|
||
break;
|
||
case 2:
|
||
callback(args[0], args[1]);
|
||
break;
|
||
case 3:
|
||
callback(args[0], args[1], args[2]);
|
||
break;
|
||
default:
|
||
callback.apply(undefined, args);
|
||
break;
|
||
}
|
||
}
|
||
|
||
function runIfPresent(handle) {
|
||
// From the spec: "Wait until any invocations of this algorithm started before this one have completed."
|
||
// So if we're currently running a task, we'll need to delay this invocation.
|
||
if (currentlyRunningATask) {
|
||
// Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
|
||
// "too much recursion" error.
|
||
setTimeout(runIfPresent, 0, handle);
|
||
} else {
|
||
var task = tasksByHandle[handle];
|
||
if (task) {
|
||
currentlyRunningATask = true;
|
||
try {
|
||
run(task);
|
||
} finally {
|
||
clearImmediate(handle);
|
||
currentlyRunningATask = false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function installNextTickImplementation() {
|
||
registerImmediate = function(handle) {
|
||
process.nextTick(function () { runIfPresent(handle); });
|
||
};
|
||
}
|
||
|
||
function canUsePostMessage() {
|
||
// The test against `importScripts` prevents this implementation from being installed inside a web worker,
|
||
// where `global.postMessage` means something completely different and can't be used for this purpose.
|
||
if (global.postMessage && !global.importScripts) {
|
||
var postMessageIsAsynchronous = true;
|
||
var oldOnMessage = global.onmessage;
|
||
global.onmessage = function() {
|
||
postMessageIsAsynchronous = false;
|
||
};
|
||
global.postMessage("", "*");
|
||
global.onmessage = oldOnMessage;
|
||
return postMessageIsAsynchronous;
|
||
}
|
||
}
|
||
|
||
function installPostMessageImplementation() {
|
||
// Installs an event handler on `global` for the `message` event: see
|
||
// * https://developer.mozilla.org/en/DOM/window.postMessage
|
||
// * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
|
||
|
||
var messagePrefix = "setImmediate$" + Math.random() + "$";
|
||
var onGlobalMessage = function(event) {
|
||
if (event.source === global &&
|
||
typeof event.data === "string" &&
|
||
event.data.indexOf(messagePrefix) === 0) {
|
||
runIfPresent(+event.data.slice(messagePrefix.length));
|
||
}
|
||
};
|
||
|
||
if (global.addEventListener) {
|
||
global.addEventListener("message", onGlobalMessage, false);
|
||
} else {
|
||
global.attachEvent("onmessage", onGlobalMessage);
|
||
}
|
||
|
||
registerImmediate = function(handle) {
|
||
global.postMessage(messagePrefix + handle, "*");
|
||
};
|
||
}
|
||
|
||
function installMessageChannelImplementation() {
|
||
var channel = new MessageChannel();
|
||
channel.port1.onmessage = function(event) {
|
||
var handle = event.data;
|
||
runIfPresent(handle);
|
||
};
|
||
|
||
registerImmediate = function(handle) {
|
||
channel.port2.postMessage(handle);
|
||
};
|
||
}
|
||
|
||
function installReadyStateChangeImplementation() {
|
||
var html = doc.documentElement;
|
||
registerImmediate = function(handle) {
|
||
// Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
|
||
// into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
|
||
var script = doc.createElement("script");
|
||
script.onreadystatechange = function () {
|
||
runIfPresent(handle);
|
||
script.onreadystatechange = null;
|
||
html.removeChild(script);
|
||
script = null;
|
||
};
|
||
html.appendChild(script);
|
||
};
|
||
}
|
||
|
||
function installSetTimeoutImplementation() {
|
||
registerImmediate = function(handle) {
|
||
setTimeout(runIfPresent, 0, handle);
|
||
};
|
||
}
|
||
|
||
// If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
|
||
var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);
|
||
attachTo = attachTo && attachTo.setTimeout ? attachTo : global;
|
||
|
||
// Don't get fooled by e.g. browserify environments.
|
||
if ({}.toString.call(global.process) === "[object process]") {
|
||
// For Node.js before 0.9
|
||
installNextTickImplementation();
|
||
|
||
} else if (canUsePostMessage()) {
|
||
// For non-IE10 modern browsers
|
||
installPostMessageImplementation();
|
||
|
||
} else if (global.MessageChannel) {
|
||
// For web workers, where supported
|
||
installMessageChannelImplementation();
|
||
|
||
} else if (doc && "onreadystatechange" in doc.createElement("script")) {
|
||
// For IE 6–8
|
||
installReadyStateChangeImplementation();
|
||
|
||
} else {
|
||
// For older browsers
|
||
installSetTimeoutImplementation();
|
||
}
|
||
|
||
attachTo.setImmediate = setImmediate;
|
||
attachTo.clearImmediate = clearImmediate;
|
||
}(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self));
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(24), __webpack_require__(33)))
|
||
|
||
/***/ }),
|
||
/* 164 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var AsyncScheduler_1 = __webpack_require__(80);
|
||
var AsapScheduler = (function (_super) {
|
||
__extends(AsapScheduler, _super);
|
||
function AsapScheduler() {
|
||
_super.apply(this, arguments);
|
||
}
|
||
AsapScheduler.prototype.flush = function (action) {
|
||
this.active = true;
|
||
this.scheduled = undefined;
|
||
var actions = this.actions;
|
||
var error;
|
||
var index = -1;
|
||
var count = actions.length;
|
||
action = action || actions.shift();
|
||
do {
|
||
if (error = action.execute(action.state, action.delay)) {
|
||
break;
|
||
}
|
||
} while (++index < count && (action = actions.shift()));
|
||
this.active = false;
|
||
if (error) {
|
||
while (++index < count && (action = actions.shift())) {
|
||
action.unsubscribe();
|
||
}
|
||
throw error;
|
||
}
|
||
};
|
||
return AsapScheduler;
|
||
}(AsyncScheduler_1.AsyncScheduler));
|
||
exports.AsapScheduler = AsapScheduler;
|
||
//# sourceMappingURL=AsapScheduler.js.map
|
||
|
||
/***/ }),
|
||
/* 165 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var filter_1 = __webpack_require__(4);
|
||
var empty_1 = __webpack_require__(16);
|
||
var utils_1 = __webpack_require__(21);
|
||
var of_1 = __webpack_require__(9);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var mergeMap_1 = __webpack_require__(15);
|
||
var file_reload_effect_1 = __webpack_require__(86);
|
||
var BrowserReload_1 = __webpack_require__(96);
|
||
function incomingFileReload(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.option$), filter_1.filter(function (_a) {
|
||
var event = _a[0], options = _a[1];
|
||
return options.codeSync;
|
||
}), mergeMap_1.mergeMap(function (_a) {
|
||
var event = _a[0], options = _a[1];
|
||
if (event.url || !options.injectChanges) {
|
||
return BrowserReload_1.reloadBrowserSafe();
|
||
}
|
||
if (event.basename && event.ext && utils_1.isBlacklisted(event)) {
|
||
return empty_1.empty();
|
||
}
|
||
return of_1.of(file_reload_effect_1.fileReload(event));
|
||
}));
|
||
}
|
||
exports.incomingFileReload = incomingFileReload;
|
||
|
||
|
||
/***/ }),
|
||
/* 166 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var pluck_1 = __webpack_require__(6);
|
||
var of_1 = __webpack_require__(9);
|
||
var Log = __webpack_require__(14);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var mergeMap_1 = __webpack_require__(15);
|
||
var set_options_effect_1 = __webpack_require__(53);
|
||
function incomingConnection(xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.option$.pipe(pluck_1.pluck("logPrefix"))), mergeMap_1.mergeMap(function (_a) {
|
||
var x = _a[0], logPrefix = _a[1];
|
||
var prefix = logPrefix
|
||
? logPrefix + ": "
|
||
: '';
|
||
return of_1.of(set_options_effect_1.setOptions(x), Log.overlayInfo(prefix + "connected"));
|
||
}));
|
||
}
|
||
exports.incomingConnection = incomingConnection;
|
||
|
||
|
||
/***/ }),
|
||
/* 167 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var ignoreElements_1 = __webpack_require__(11);
|
||
var tap_1 = __webpack_require__(5);
|
||
function incomingDisconnect(xs) {
|
||
return xs.pipe(tap_1.tap(function (x) { return console.log(x); }), ignoreElements_1.ignoreElements());
|
||
}
|
||
exports.incomingDisconnect = incomingDisconnect;
|
||
|
||
|
||
/***/ }),
|
||
/* 168 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var map_1 = __webpack_require__(2);
|
||
var set_options_effect_1 = __webpack_require__(53);
|
||
function incomingOptionsSet(xs) {
|
||
return xs.pipe(map_1.map(function (event) { return set_options_effect_1.setOptions(event.options); }));
|
||
}
|
||
exports.incomingOptionsSet = incomingOptionsSet;
|
||
|
||
|
||
/***/ }),
|
||
/* 169 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var _a;
|
||
var browser_utils_1 = __webpack_require__(22);
|
||
var effects_1 = __webpack_require__(8);
|
||
var BehaviorSubject_1 = __webpack_require__(13);
|
||
var empty_1 = __webpack_require__(16);
|
||
var of_1 = __webpack_require__(9);
|
||
var Log = __webpack_require__(14);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var map_1 = __webpack_require__(2);
|
||
var set_window_name_dom_effect_1 = __webpack_require__(84);
|
||
var set_scroll_dom_effect_1 = __webpack_require__(83);
|
||
exports.PREFIX = "<<BS_START>>";
|
||
exports.SUFFIX = "<<BS_START>>";
|
||
exports.regex = new RegExp(exports.PREFIX + "(.+?)" + exports.SUFFIX, "g");
|
||
function parseFromString(input) {
|
||
var match;
|
||
var last;
|
||
while ((match = exports.regex.exec(input))) {
|
||
last = match[1];
|
||
}
|
||
if (last) {
|
||
return JSON.parse(last);
|
||
}
|
||
}
|
||
function initWindowName(window) {
|
||
var saved = (function () {
|
||
/**
|
||
* On page load, check window.name for an existing
|
||
* BS json blob & parse it.
|
||
*/
|
||
try {
|
||
return parseFromString(window.name);
|
||
}
|
||
catch (e) {
|
||
return {};
|
||
}
|
||
})();
|
||
/**
|
||
* Remove any existing BS json from window.name
|
||
* to ensure we don't interfere with any other
|
||
* libs who may be using it.
|
||
*/
|
||
window.name = window.name.replace(exports.regex, "");
|
||
/**
|
||
* If the JSON was parsed correctly, try to
|
||
* find a scroll property and restore it.
|
||
*/
|
||
if (saved && saved.bs && saved.bs.hardReload && saved.bs.scroll) {
|
||
var _a = saved.bs.scroll, x = _a.x, y = _a.y;
|
||
return of_1.of(set_scroll_dom_effect_1.setScroll(x, y), Log.consoleDebug("[ScrollRestore] x = " + x + " y = " + y));
|
||
}
|
||
return empty_1.empty();
|
||
}
|
||
exports.initWindowName = initWindowName;
|
||
exports.scrollRestoreHandlers$ = new BehaviorSubject_1.BehaviorSubject((_a = {},
|
||
// [EffectNames.SetOptions]: (xs, inputs: Inputs) => {
|
||
// return xs.pipe(
|
||
// withLatestFrom(inputs.window$),
|
||
// take(1),
|
||
// mergeMap(([options, window]) => {
|
||
// if (options.scrollRestoreTechnique === "window.name") {
|
||
// return initWindowName(window);
|
||
// }
|
||
// return empty();
|
||
// })
|
||
// );
|
||
// },
|
||
/**
|
||
* Save the current scroll position
|
||
* before the browser is reloaded (via window.location.reload(true))
|
||
* @param xs
|
||
* @param {Inputs} inputs
|
||
*/
|
||
_a[effects_1.EffectNames.PreBrowserReload] = function (xs, inputs) {
|
||
return xs.pipe(withLatestFrom_1.withLatestFrom(inputs.window$, inputs.document$), map_1.map(function (_a) {
|
||
var window = _a[1], document = _a[2];
|
||
return [
|
||
window.name,
|
||
exports.PREFIX,
|
||
JSON.stringify({
|
||
bs: {
|
||
hardReload: true,
|
||
scroll: browser_utils_1.getBrowserScrollPosition(window, document)
|
||
}
|
||
}),
|
||
exports.SUFFIX
|
||
].join("");
|
||
}), map_1.map(function (value) { return set_window_name_dom_effect_1.setWindowName(value); }));
|
||
},
|
||
_a));
|
||
|
||
|
||
/***/ }),
|
||
/* 170 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var merge_1 = __webpack_require__(38);
|
||
var form_inputs_listener_1 = __webpack_require__(171);
|
||
var clicks_listener_1 = __webpack_require__(173);
|
||
var scroll_listener_1 = __webpack_require__(174);
|
||
var form_toggles_listener_1 = __webpack_require__(175);
|
||
function initListeners(window, document, socket$, option$) {
|
||
var merged$ = merge_1.merge(scroll_listener_1.getScrollStream(window, document, socket$, option$), clicks_listener_1.getClickStream(document, socket$, option$), form_inputs_listener_1.getFormInputStream(document, socket$, option$), form_toggles_listener_1.getFormTogglesStream(document, socket$, option$));
|
||
return merged$;
|
||
}
|
||
exports.initListeners = initListeners;
|
||
|
||
|
||
/***/ }),
|
||
/* 171 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var socket_messages_1 = __webpack_require__(10);
|
||
var browser_utils_1 = __webpack_require__(22);
|
||
var utils_1 = __webpack_require__(21);
|
||
var KeyupEvent = __webpack_require__(95);
|
||
var filter_1 = __webpack_require__(4);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var map_1 = __webpack_require__(2);
|
||
var pluck_1 = __webpack_require__(6);
|
||
var skip_1 = __webpack_require__(39);
|
||
var distinctUntilChanged_1 = __webpack_require__(40);
|
||
var switchMap_1 = __webpack_require__(20);
|
||
var empty_1 = __webpack_require__(16);
|
||
var fromEvent_1 = __webpack_require__(41);
|
||
function getFormInputStream(document, socket$, option$) {
|
||
var canSync$ = utils_1.createTimedBooleanSwitch(socket$.pipe(filter_1.filter(function (_a) {
|
||
var name = _a[0];
|
||
return name === socket_messages_1.IncomingSocketNames.Keyup;
|
||
})));
|
||
return option$.pipe(skip_1.skip(1), // initial option set before the connection event
|
||
pluck_1.pluck("ghostMode", "forms", "inputs"), distinctUntilChanged_1.distinctUntilChanged(), switchMap_1.switchMap(function (formInputs) {
|
||
if (!formInputs) {
|
||
return empty_1.empty();
|
||
}
|
||
return fromEvent_1.fromEvent(document.body, "keyup", true).pipe(map_1.map(function (e) { return e.target || e.srcElement; }), filter_1.filter(function (target) {
|
||
return target.tagName === "INPUT" ||
|
||
target.tagName === "TEXTAREA";
|
||
}), withLatestFrom_1.withLatestFrom(canSync$), filter_1.filter(function (_a) {
|
||
var canSync = _a[1];
|
||
return canSync;
|
||
}), map_1.map(function (_a) {
|
||
var eventTarget = _a[0];
|
||
var target = browser_utils_1.getElementData(eventTarget);
|
||
var value = eventTarget.value;
|
||
return KeyupEvent.outgoing(target, value);
|
||
}));
|
||
}));
|
||
}
|
||
exports.getFormInputStream = getFormInputStream;
|
||
|
||
|
||
/***/ }),
|
||
/* 172 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Observable_1 = __webpack_require__(1);
|
||
var tryCatch_1 = __webpack_require__(43);
|
||
var isFunction_1 = __webpack_require__(42);
|
||
var errorObject_1 = __webpack_require__(27);
|
||
var Subscription_1 = __webpack_require__(12);
|
||
var toString = Object.prototype.toString;
|
||
function isNodeStyleEventEmitter(sourceObj) {
|
||
return !!sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';
|
||
}
|
||
function isJQueryStyleEventEmitter(sourceObj) {
|
||
return !!sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';
|
||
}
|
||
function isNodeList(sourceObj) {
|
||
return !!sourceObj && toString.call(sourceObj) === '[object NodeList]';
|
||
}
|
||
function isHTMLCollection(sourceObj) {
|
||
return !!sourceObj && toString.call(sourceObj) === '[object HTMLCollection]';
|
||
}
|
||
function isEventTarget(sourceObj) {
|
||
return !!sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';
|
||
}
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @extends {Ignored}
|
||
* @hide true
|
||
*/
|
||
var FromEventObservable = (function (_super) {
|
||
__extends(FromEventObservable, _super);
|
||
function FromEventObservable(sourceObj, eventName, selector, options) {
|
||
_super.call(this);
|
||
this.sourceObj = sourceObj;
|
||
this.eventName = eventName;
|
||
this.selector = selector;
|
||
this.options = options;
|
||
}
|
||
/* tslint:enable:max-line-length */
|
||
/**
|
||
* Creates an Observable that emits events of a specific type coming from the
|
||
* given event target.
|
||
*
|
||
* <span class="informal">Creates an Observable from DOM events, or Node.js
|
||
* EventEmitter events or others.</span>
|
||
*
|
||
* <img src="./img/fromEvent.png" width="100%">
|
||
*
|
||
* `fromEvent` accepts as a first argument event target, which is an object with methods
|
||
* for registering event handler functions. As a second argument it takes string that indicates
|
||
* type of event we want to listen for. `fromEvent` supports selected types of event targets,
|
||
* which are described in detail below. If your event target does not match any of the ones listed,
|
||
* you should use {@link fromEventPattern}, which can be used on arbitrary APIs.
|
||
* When it comes to APIs supported by `fromEvent`, their methods for adding and removing event
|
||
* handler functions have different names, but they all accept a string describing event type
|
||
* and function itself, which will be called whenever said event happens.
|
||
*
|
||
* Every time resulting Observable is subscribed, event handler function will be registered
|
||
* to event target on given event type. When that event fires, value
|
||
* passed as a first argument to registered function will be emitted by output Observable.
|
||
* When Observable is unsubscribed, function will be unregistered from event target.
|
||
*
|
||
* Note that if event target calls registered function with more than one argument, second
|
||
* and following arguments will not appear in resulting stream. In order to get access to them,
|
||
* you can pass to `fromEvent` optional project function, which will be called with all arguments
|
||
* passed to event handler. Output Observable will then emit value returned by project function,
|
||
* instead of the usual value.
|
||
*
|
||
* Remember that event targets listed below are checked via duck typing. It means that
|
||
* no matter what kind of object you have and no matter what environment you work in,
|
||
* you can safely use `fromEvent` on that object if it exposes described methods (provided
|
||
* of course they behave as was described above). So for example if Node.js library exposes
|
||
* event target which has the same method names as DOM EventTarget, `fromEvent` is still
|
||
* a good choice.
|
||
*
|
||
* If the API you use is more callback then event handler oriented (subscribed
|
||
* callback function fires only once and thus there is no need to manually
|
||
* unregister it), you should use {@link bindCallback} or {@link bindNodeCallback}
|
||
* instead.
|
||
*
|
||
* `fromEvent` supports following types of event targets:
|
||
*
|
||
* **DOM EventTarget**
|
||
*
|
||
* This is an object with `addEventListener` and `removeEventListener` methods.
|
||
*
|
||
* In the browser, `addEventListener` accepts - apart from event type string and event
|
||
* handler function arguments - optional third parameter, which is either an object or boolean,
|
||
* both used for additional configuration how and when passed function will be called. When
|
||
* `fromEvent` is used with event target of that type, you can provide this values
|
||
* as third parameter as well.
|
||
*
|
||
* **Node.js EventEmitter**
|
||
*
|
||
* An object with `addListener` and `removeListener` methods.
|
||
*
|
||
* **JQuery-style event target**
|
||
*
|
||
* An object with `on` and `off` methods
|
||
*
|
||
* **DOM NodeList**
|
||
*
|
||
* List of DOM Nodes, returned for example by `document.querySelectorAll` or `Node.childNodes`.
|
||
*
|
||
* Although this collection is not event target in itself, `fromEvent` will iterate over all Nodes
|
||
* it contains and install event handler function in every of them. When returned Observable
|
||
* is unsubscribed, function will be removed from all Nodes.
|
||
*
|
||
* **DOM HtmlCollection**
|
||
*
|
||
* Just as in case of NodeList it is a collection of DOM nodes. Here as well event handler function is
|
||
* installed and removed in each of elements.
|
||
*
|
||
*
|
||
* @example <caption>Emits clicks happening on the DOM document</caption>
|
||
* var clicks = Rx.Observable.fromEvent(document, 'click');
|
||
* clicks.subscribe(x => console.log(x));
|
||
*
|
||
* // Results in:
|
||
* // MouseEvent object logged to console every time a click
|
||
* // occurs on the document.
|
||
*
|
||
*
|
||
* @example <caption>Use addEventListener with capture option</caption>
|
||
* var clicksInDocument = Rx.Observable.fromEvent(document, 'click', true); // note optional configuration parameter
|
||
* // which will be passed to addEventListener
|
||
* var clicksInDiv = Rx.Observable.fromEvent(someDivInDocument, 'click');
|
||
*
|
||
* clicksInDocument.subscribe(() => console.log('document'));
|
||
* clicksInDiv.subscribe(() => console.log('div'));
|
||
*
|
||
* // By default events bubble UP in DOM tree, so normally
|
||
* // when we would click on div in document
|
||
* // "div" would be logged first and then "document".
|
||
* // Since we specified optional `capture` option, document
|
||
* // will catch event when it goes DOWN DOM tree, so console
|
||
* // will log "document" and then "div".
|
||
*
|
||
* @see {@link bindCallback}
|
||
* @see {@link bindNodeCallback}
|
||
* @see {@link fromEventPattern}
|
||
*
|
||
* @param {EventTargetLike} target The DOM EventTarget, Node.js
|
||
* EventEmitter, JQuery-like event target, NodeList or HTMLCollection to attach the event handler to.
|
||
* @param {string} eventName The event name of interest, being emitted by the
|
||
* `target`.
|
||
* @param {EventListenerOptions} [options] Options to pass through to addEventListener
|
||
* @param {SelectorMethodSignature<T>} [selector] An optional function to
|
||
* post-process results. It takes the arguments from the event handler and
|
||
* should return a single value.
|
||
* @return {Observable<T>}
|
||
* @static true
|
||
* @name fromEvent
|
||
* @owner Observable
|
||
*/
|
||
FromEventObservable.create = function (target, eventName, options, selector) {
|
||
if (isFunction_1.isFunction(options)) {
|
||
selector = options;
|
||
options = undefined;
|
||
}
|
||
return new FromEventObservable(target, eventName, selector, options);
|
||
};
|
||
FromEventObservable.setupSubscription = function (sourceObj, eventName, handler, subscriber, options) {
|
||
var unsubscribe;
|
||
if (isNodeList(sourceObj) || isHTMLCollection(sourceObj)) {
|
||
for (var i = 0, len = sourceObj.length; i < len; i++) {
|
||
FromEventObservable.setupSubscription(sourceObj[i], eventName, handler, subscriber, options);
|
||
}
|
||
}
|
||
else if (isEventTarget(sourceObj)) {
|
||
var source_1 = sourceObj;
|
||
sourceObj.addEventListener(eventName, handler, options);
|
||
unsubscribe = function () { return source_1.removeEventListener(eventName, handler, options); };
|
||
}
|
||
else if (isJQueryStyleEventEmitter(sourceObj)) {
|
||
var source_2 = sourceObj;
|
||
sourceObj.on(eventName, handler);
|
||
unsubscribe = function () { return source_2.off(eventName, handler); };
|
||
}
|
||
else if (isNodeStyleEventEmitter(sourceObj)) {
|
||
var source_3 = sourceObj;
|
||
sourceObj.addListener(eventName, handler);
|
||
unsubscribe = function () { return source_3.removeListener(eventName, handler); };
|
||
}
|
||
else {
|
||
throw new TypeError('Invalid event target');
|
||
}
|
||
subscriber.add(new Subscription_1.Subscription(unsubscribe));
|
||
};
|
||
/** @deprecated internal use only */ FromEventObservable.prototype._subscribe = function (subscriber) {
|
||
var sourceObj = this.sourceObj;
|
||
var eventName = this.eventName;
|
||
var options = this.options;
|
||
var selector = this.selector;
|
||
var handler = selector ? function () {
|
||
var args = [];
|
||
for (var _i = 0; _i < arguments.length; _i++) {
|
||
args[_i - 0] = arguments[_i];
|
||
}
|
||
var result = tryCatch_1.tryCatch(selector).apply(void 0, args);
|
||
if (result === errorObject_1.errorObject) {
|
||
subscriber.error(errorObject_1.errorObject.e);
|
||
}
|
||
else {
|
||
subscriber.next(result);
|
||
}
|
||
} : function (e) { return subscriber.next(e); };
|
||
FromEventObservable.setupSubscription(sourceObj, eventName, handler, subscriber, options);
|
||
};
|
||
return FromEventObservable;
|
||
}(Observable_1.Observable));
|
||
exports.FromEventObservable = FromEventObservable;
|
||
//# sourceMappingURL=FromEventObservable.js.map
|
||
|
||
/***/ }),
|
||
/* 173 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var utils_1 = __webpack_require__(21);
|
||
var socket_messages_1 = __webpack_require__(10);
|
||
var browser_utils_1 = __webpack_require__(22);
|
||
var ClickEvent = __webpack_require__(94);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var filter_1 = __webpack_require__(4);
|
||
var map_1 = __webpack_require__(2);
|
||
var pluck_1 = __webpack_require__(6);
|
||
var skip_1 = __webpack_require__(39);
|
||
var distinctUntilChanged_1 = __webpack_require__(40);
|
||
var switchMap_1 = __webpack_require__(20);
|
||
var fromEvent_1 = __webpack_require__(41);
|
||
var empty_1 = __webpack_require__(16);
|
||
function getClickStream(document, socket$, option$) {
|
||
var canSync$ = utils_1.createTimedBooleanSwitch(socket$.pipe(filter_1.filter(function (_a) {
|
||
var name = _a[0];
|
||
return name === socket_messages_1.IncomingSocketNames.Click;
|
||
})));
|
||
return option$.pipe(skip_1.skip(1), // initial option set before the connection event
|
||
pluck_1.pluck("ghostMode", "clicks"), distinctUntilChanged_1.distinctUntilChanged(), switchMap_1.switchMap(function (canClick) {
|
||
if (!canClick) {
|
||
return empty_1.empty();
|
||
}
|
||
return fromEvent_1.fromEvent(document, "click", true).pipe(map_1.map(function (e) { return e.target; }), filter_1.filter(function (target) {
|
||
if (target.tagName === "LABEL") {
|
||
var id = target.getAttribute("for");
|
||
if (id && document.getElementById(id)) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}), withLatestFrom_1.withLatestFrom(canSync$), filter_1.filter(function (_a) {
|
||
var canSync = _a[1];
|
||
return canSync;
|
||
}), map_1.map(function (_a) {
|
||
var target = _a[0];
|
||
return ClickEvent.outgoing(browser_utils_1.getElementData(target));
|
||
}));
|
||
}));
|
||
}
|
||
exports.getClickStream = getClickStream;
|
||
|
||
|
||
/***/ }),
|
||
/* 174 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var utils_1 = __webpack_require__(21);
|
||
var socket_messages_1 = __webpack_require__(10);
|
||
var browser_utils_1 = __webpack_require__(22);
|
||
var ScrollEvent = __webpack_require__(85);
|
||
var filter_1 = __webpack_require__(4);
|
||
var map_1 = __webpack_require__(2);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var pluck_1 = __webpack_require__(6);
|
||
var distinctUntilChanged_1 = __webpack_require__(40);
|
||
var switchMap_1 = __webpack_require__(20);
|
||
var empty_1 = __webpack_require__(16);
|
||
var skip_1 = __webpack_require__(39);
|
||
var fromEvent_1 = __webpack_require__(41);
|
||
function getScrollStream(window, document, socket$, option$) {
|
||
var canSync$ = utils_1.createTimedBooleanSwitch(socket$.pipe(filter_1.filter(function (_a) {
|
||
var name = _a[0];
|
||
return name === socket_messages_1.IncomingSocketNames.Scroll;
|
||
})));
|
||
/**
|
||
* If the option 'scrollElementMapping' is provided
|
||
* we cache thw
|
||
* @type {Observable<(Element | null)[]>}
|
||
*/
|
||
var elemMap$ = option$.pipe(pluck_1.pluck("scrollElementMapping"), map_1.map(function (selectors) {
|
||
return selectors.map(function (selector) { return document.querySelector(selector); });
|
||
}));
|
||
return option$.pipe(skip_1.skip(1), // initial option set before the connection event
|
||
pluck_1.pluck("ghostMode", "scroll"), distinctUntilChanged_1.distinctUntilChanged(), switchMap_1.switchMap(function (scroll) {
|
||
if (!scroll)
|
||
return empty_1.empty();
|
||
return fromEvent_1.fromEvent(document, "scroll", true).pipe(map_1.map(function (e) { return e.target; }), withLatestFrom_1.withLatestFrom(canSync$, elemMap$), filter_1.filter(function (_a) {
|
||
var canSync = _a[1];
|
||
return Boolean(canSync);
|
||
}), map_1.map(function (_a) {
|
||
var target = _a[0], canSync = _a[1], elemMap = _a[2];
|
||
if (target === document) {
|
||
return ScrollEvent.outgoing(browser_utils_1.getScrollPosition(window, document), "document", 0);
|
||
}
|
||
var elems = document.getElementsByTagName(target.tagName);
|
||
var index = Array.prototype.indexOf.call(elems || [], target);
|
||
return ScrollEvent.outgoing(browser_utils_1.getScrollPositionForElement(target), target.tagName, index, elemMap.indexOf(target));
|
||
}));
|
||
}));
|
||
}
|
||
exports.getScrollStream = getScrollStream;
|
||
|
||
|
||
/***/ }),
|
||
/* 175 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var socket_messages_1 = __webpack_require__(10);
|
||
var browser_utils_1 = __webpack_require__(22);
|
||
var utils_1 = __webpack_require__(21);
|
||
var FormToggleEvent = __webpack_require__(98);
|
||
var filter_1 = __webpack_require__(4);
|
||
var skip_1 = __webpack_require__(39);
|
||
var pluck_1 = __webpack_require__(6);
|
||
var distinctUntilChanged_1 = __webpack_require__(40);
|
||
var withLatestFrom_1 = __webpack_require__(0);
|
||
var map_1 = __webpack_require__(2);
|
||
var switchMap_1 = __webpack_require__(20);
|
||
var empty_1 = __webpack_require__(16);
|
||
var fromEvent_1 = __webpack_require__(41);
|
||
function getFormTogglesStream(document, socket$, option$) {
|
||
var canSync$ = utils_1.createTimedBooleanSwitch(socket$.pipe(filter_1.filter(function (_a) {
|
||
var name = _a[0];
|
||
return name === socket_messages_1.IncomingSocketNames.InputToggle;
|
||
})));
|
||
return option$.pipe(skip_1.skip(1), pluck_1.pluck("ghostMode", "forms", "toggles"), distinctUntilChanged_1.distinctUntilChanged(), switchMap_1.switchMap(function (canToggle) {
|
||
if (!canToggle) {
|
||
return empty_1.empty();
|
||
}
|
||
return fromEvent_1.fromEvent(document, "change", true).pipe(map_1.map(function (e) { return e.target || e.srcElement; }), filter_1.filter(function (elem) { return elem.tagName === "SELECT"; }), withLatestFrom_1.withLatestFrom(canSync$), filter_1.filter(function (_a) {
|
||
var canSync = _a[1];
|
||
return canSync;
|
||
}), map_1.map(function (_a) {
|
||
var elem = _a[0], canSync = _a[1];
|
||
var data = browser_utils_1.getElementData(elem);
|
||
return FormToggleEvent.outgoing(data, {
|
||
type: elem.type,
|
||
checked: elem.checked,
|
||
value: elem.value
|
||
});
|
||
}));
|
||
}));
|
||
}
|
||
exports.getFormTogglesStream = getFormTogglesStream;
|
||
|
||
|
||
/***/ }),
|
||
/* 176 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __extends = (this && this.__extends) || function (d, b) {
|
||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
var Subscriber_1 = __webpack_require__(3);
|
||
var Subscription_1 = __webpack_require__(12);
|
||
var Observable_1 = __webpack_require__(1);
|
||
var Subject_1 = __webpack_require__(37);
|
||
var Map_1 = __webpack_require__(177);
|
||
var FastMap_1 = __webpack_require__(179);
|
||
/* tslint:enable:max-line-length */
|
||
/**
|
||
* Groups the items emitted by an Observable according to a specified criterion,
|
||
* and emits these grouped items as `GroupedObservables`, one
|
||
* {@link GroupedObservable} per group.
|
||
*
|
||
* <img src="./img/groupBy.png" width="100%">
|
||
*
|
||
* @example <caption>Group objects by id and return as array</caption>
|
||
* Observable.of<Obj>({id: 1, name: 'aze1'},
|
||
* {id: 2, name: 'sf2'},
|
||
* {id: 2, name: 'dg2'},
|
||
* {id: 1, name: 'erg1'},
|
||
* {id: 1, name: 'df1'},
|
||
* {id: 2, name: 'sfqfb2'},
|
||
* {id: 3, name: 'qfs3'},
|
||
* {id: 2, name: 'qsgqsfg2'}
|
||
* )
|
||
* .groupBy(p => p.id)
|
||
* .flatMap( (group$) => group$.reduce((acc, cur) => [...acc, cur], []))
|
||
* .subscribe(p => console.log(p));
|
||
*
|
||
* // displays:
|
||
* // [ { id: 1, name: 'aze1' },
|
||
* // { id: 1, name: 'erg1' },
|
||
* // { id: 1, name: 'df1' } ]
|
||
* //
|
||
* // [ { id: 2, name: 'sf2' },
|
||
* // { id: 2, name: 'dg2' },
|
||
* // { id: 2, name: 'sfqfb2' },
|
||
* // { id: 2, name: 'qsgqsfg2' } ]
|
||
* //
|
||
* // [ { id: 3, name: 'qfs3' } ]
|
||
*
|
||
* @example <caption>Pivot data on the id field</caption>
|
||
* Observable.of<Obj>({id: 1, name: 'aze1'},
|
||
* {id: 2, name: 'sf2'},
|
||
* {id: 2, name: 'dg2'},
|
||
* {id: 1, name: 'erg1'},
|
||
* {id: 1, name: 'df1'},
|
||
* {id: 2, name: 'sfqfb2'},
|
||
* {id: 3, name: 'qfs1'},
|
||
* {id: 2, name: 'qsgqsfg2'}
|
||
* )
|
||
* .groupBy(p => p.id, p => p.name)
|
||
* .flatMap( (group$) => group$.reduce((acc, cur) => [...acc, cur], ["" + group$.key]))
|
||
* .map(arr => ({'id': parseInt(arr[0]), 'values': arr.slice(1)}))
|
||
* .subscribe(p => console.log(p));
|
||
*
|
||
* // displays:
|
||
* // { id: 1, values: [ 'aze1', 'erg1', 'df1' ] }
|
||
* // { id: 2, values: [ 'sf2', 'dg2', 'sfqfb2', 'qsgqsfg2' ] }
|
||
* // { id: 3, values: [ 'qfs1' ] }
|
||
*
|
||
* @param {function(value: T): K} keySelector A function that extracts the key
|
||
* for each item.
|
||
* @param {function(value: T): R} [elementSelector] A function that extracts the
|
||
* return element for each item.
|
||
* @param {function(grouped: GroupedObservable<K,R>): Observable<any>} [durationSelector]
|
||
* A function that returns an Observable to determine how long each group should
|
||
* exist.
|
||
* @return {Observable<GroupedObservable<K,R>>} An Observable that emits
|
||
* GroupedObservables, each of which corresponds to a unique key value and each
|
||
* of which emits those items from the source Observable that share that key
|
||
* value.
|
||
* @method groupBy
|
||
* @owner Observable
|
||
*/
|
||
function groupBy(keySelector, elementSelector, durationSelector, subjectSelector) {
|
||
return function (source) {
|
||
return source.lift(new GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector));
|
||
};
|
||
}
|
||
exports.groupBy = groupBy;
|
||
var GroupByOperator = (function () {
|
||
function GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector) {
|
||
this.keySelector = keySelector;
|
||
this.elementSelector = elementSelector;
|
||
this.durationSelector = durationSelector;
|
||
this.subjectSelector = subjectSelector;
|
||
}
|
||
GroupByOperator.prototype.call = function (subscriber, source) {
|
||
return source.subscribe(new GroupBySubscriber(subscriber, this.keySelector, this.elementSelector, this.durationSelector, this.subjectSelector));
|
||
};
|
||
return GroupByOperator;
|
||
}());
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var GroupBySubscriber = (function (_super) {
|
||
__extends(GroupBySubscriber, _super);
|
||
function GroupBySubscriber(destination, keySelector, elementSelector, durationSelector, subjectSelector) {
|
||
_super.call(this, destination);
|
||
this.keySelector = keySelector;
|
||
this.elementSelector = elementSelector;
|
||
this.durationSelector = durationSelector;
|
||
this.subjectSelector = subjectSelector;
|
||
this.groups = null;
|
||
this.attemptedToUnsubscribe = false;
|
||
this.count = 0;
|
||
}
|
||
GroupBySubscriber.prototype._next = function (value) {
|
||
var key;
|
||
try {
|
||
key = this.keySelector(value);
|
||
}
|
||
catch (err) {
|
||
this.error(err);
|
||
return;
|
||
}
|
||
this._group(value, key);
|
||
};
|
||
GroupBySubscriber.prototype._group = function (value, key) {
|
||
var groups = this.groups;
|
||
if (!groups) {
|
||
groups = this.groups = typeof key === 'string' ? new FastMap_1.FastMap() : new Map_1.Map();
|
||
}
|
||
var group = groups.get(key);
|
||
var element;
|
||
if (this.elementSelector) {
|
||
try {
|
||
element = this.elementSelector(value);
|
||
}
|
||
catch (err) {
|
||
this.error(err);
|
||
}
|
||
}
|
||
else {
|
||
element = value;
|
||
}
|
||
if (!group) {
|
||
group = this.subjectSelector ? this.subjectSelector() : new Subject_1.Subject();
|
||
groups.set(key, group);
|
||
var groupedObservable = new GroupedObservable(key, group, this);
|
||
this.destination.next(groupedObservable);
|
||
if (this.durationSelector) {
|
||
var duration = void 0;
|
||
try {
|
||
duration = this.durationSelector(new GroupedObservable(key, group));
|
||
}
|
||
catch (err) {
|
||
this.error(err);
|
||
return;
|
||
}
|
||
this.add(duration.subscribe(new GroupDurationSubscriber(key, group, this)));
|
||
}
|
||
}
|
||
if (!group.closed) {
|
||
group.next(element);
|
||
}
|
||
};
|
||
GroupBySubscriber.prototype._error = function (err) {
|
||
var groups = this.groups;
|
||
if (groups) {
|
||
groups.forEach(function (group, key) {
|
||
group.error(err);
|
||
});
|
||
groups.clear();
|
||
}
|
||
this.destination.error(err);
|
||
};
|
||
GroupBySubscriber.prototype._complete = function () {
|
||
var groups = this.groups;
|
||
if (groups) {
|
||
groups.forEach(function (group, key) {
|
||
group.complete();
|
||
});
|
||
groups.clear();
|
||
}
|
||
this.destination.complete();
|
||
};
|
||
GroupBySubscriber.prototype.removeGroup = function (key) {
|
||
this.groups.delete(key);
|
||
};
|
||
GroupBySubscriber.prototype.unsubscribe = function () {
|
||
if (!this.closed) {
|
||
this.attemptedToUnsubscribe = true;
|
||
if (this.count === 0) {
|
||
_super.prototype.unsubscribe.call(this);
|
||
}
|
||
}
|
||
};
|
||
return GroupBySubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var GroupDurationSubscriber = (function (_super) {
|
||
__extends(GroupDurationSubscriber, _super);
|
||
function GroupDurationSubscriber(key, group, parent) {
|
||
_super.call(this, group);
|
||
this.key = key;
|
||
this.group = group;
|
||
this.parent = parent;
|
||
}
|
||
GroupDurationSubscriber.prototype._next = function (value) {
|
||
this.complete();
|
||
};
|
||
/** @deprecated internal use only */ GroupDurationSubscriber.prototype._unsubscribe = function () {
|
||
var _a = this, parent = _a.parent, key = _a.key;
|
||
this.key = this.parent = null;
|
||
if (parent) {
|
||
parent.removeGroup(key);
|
||
}
|
||
};
|
||
return GroupDurationSubscriber;
|
||
}(Subscriber_1.Subscriber));
|
||
/**
|
||
* An Observable representing values belonging to the same group represented by
|
||
* a common key. The values emitted by a GroupedObservable come from the source
|
||
* Observable. The common key is available as the field `key` on a
|
||
* GroupedObservable instance.
|
||
*
|
||
* @class GroupedObservable<K, T>
|
||
*/
|
||
var GroupedObservable = (function (_super) {
|
||
__extends(GroupedObservable, _super);
|
||
function GroupedObservable(key, groupSubject, refCountSubscription) {
|
||
_super.call(this);
|
||
this.key = key;
|
||
this.groupSubject = groupSubject;
|
||
this.refCountSubscription = refCountSubscription;
|
||
}
|
||
/** @deprecated internal use only */ GroupedObservable.prototype._subscribe = function (subscriber) {
|
||
var subscription = new Subscription_1.Subscription();
|
||
var _a = this, refCountSubscription = _a.refCountSubscription, groupSubject = _a.groupSubject;
|
||
if (refCountSubscription && !refCountSubscription.closed) {
|
||
subscription.add(new InnerRefCountSubscription(refCountSubscription));
|
||
}
|
||
subscription.add(groupSubject.subscribe(subscriber));
|
||
return subscription;
|
||
};
|
||
return GroupedObservable;
|
||
}(Observable_1.Observable));
|
||
exports.GroupedObservable = GroupedObservable;
|
||
/**
|
||
* We need this JSDoc comment for affecting ESDoc.
|
||
* @ignore
|
||
* @extends {Ignored}
|
||
*/
|
||
var InnerRefCountSubscription = (function (_super) {
|
||
__extends(InnerRefCountSubscription, _super);
|
||
function InnerRefCountSubscription(parent) {
|
||
_super.call(this);
|
||
this.parent = parent;
|
||
parent.count++;
|
||
}
|
||
InnerRefCountSubscription.prototype.unsubscribe = function () {
|
||
var parent = this.parent;
|
||
if (!parent.closed && !this.closed) {
|
||
_super.prototype.unsubscribe.call(this);
|
||
parent.count -= 1;
|
||
if (parent.count === 0 && parent.attemptedToUnsubscribe) {
|
||
parent.unsubscribe();
|
||
}
|
||
}
|
||
};
|
||
return InnerRefCountSubscription;
|
||
}(Subscription_1.Subscription));
|
||
//# sourceMappingURL=groupBy.js.map
|
||
|
||
/***/ }),
|
||
/* 177 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var root_1 = __webpack_require__(7);
|
||
var MapPolyfill_1 = __webpack_require__(178);
|
||
exports.Map = root_1.root.Map || (function () { return MapPolyfill_1.MapPolyfill; })();
|
||
//# sourceMappingURL=Map.js.map
|
||
|
||
/***/ }),
|
||
/* 178 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var MapPolyfill = (function () {
|
||
function MapPolyfill() {
|
||
this.size = 0;
|
||
this._values = [];
|
||
this._keys = [];
|
||
}
|
||
MapPolyfill.prototype.get = function (key) {
|
||
var i = this._keys.indexOf(key);
|
||
return i === -1 ? undefined : this._values[i];
|
||
};
|
||
MapPolyfill.prototype.set = function (key, value) {
|
||
var i = this._keys.indexOf(key);
|
||
if (i === -1) {
|
||
this._keys.push(key);
|
||
this._values.push(value);
|
||
this.size++;
|
||
}
|
||
else {
|
||
this._values[i] = value;
|
||
}
|
||
return this;
|
||
};
|
||
MapPolyfill.prototype.delete = function (key) {
|
||
var i = this._keys.indexOf(key);
|
||
if (i === -1) {
|
||
return false;
|
||
}
|
||
this._values.splice(i, 1);
|
||
this._keys.splice(i, 1);
|
||
this.size--;
|
||
return true;
|
||
};
|
||
MapPolyfill.prototype.clear = function () {
|
||
this._keys.length = 0;
|
||
this._values.length = 0;
|
||
this.size = 0;
|
||
};
|
||
MapPolyfill.prototype.forEach = function (cb, thisArg) {
|
||
for (var i = 0; i < this.size; i++) {
|
||
cb.call(thisArg, this._values[i], this._keys[i]);
|
||
}
|
||
};
|
||
return MapPolyfill;
|
||
}());
|
||
exports.MapPolyfill = MapPolyfill;
|
||
//# sourceMappingURL=MapPolyfill.js.map
|
||
|
||
/***/ }),
|
||
/* 179 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var FastMap = (function () {
|
||
function FastMap() {
|
||
this.values = {};
|
||
}
|
||
FastMap.prototype.delete = function (key) {
|
||
this.values[key] = null;
|
||
return true;
|
||
};
|
||
FastMap.prototype.set = function (key, value) {
|
||
this.values[key] = value;
|
||
return this;
|
||
};
|
||
FastMap.prototype.get = function (key) {
|
||
return this.values[key];
|
||
};
|
||
FastMap.prototype.forEach = function (cb, thisArg) {
|
||
var values = this.values;
|
||
for (var key in values) {
|
||
if (values.hasOwnProperty(key) && values[key] !== null) {
|
||
cb.call(thisArg, values[key], key);
|
||
}
|
||
}
|
||
};
|
||
FastMap.prototype.clear = function () {
|
||
this.values = {};
|
||
};
|
||
return FastMap;
|
||
}());
|
||
exports.FastMap = FastMap;
|
||
//# sourceMappingURL=FastMap.js.map
|
||
|
||
/***/ })
|
||
/******/ ]); |