aboutsummaryrefslogtreecommitdiff
path: root/node_modules/core-js/modules/es7.observable.js
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/core-js/modules/es7.observable.js
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/core-js/modules/es7.observable.js')
-rw-r--r--node_modules/core-js/modules/es7.observable.js199
1 files changed, 199 insertions, 0 deletions
diff --git a/node_modules/core-js/modules/es7.observable.js b/node_modules/core-js/modules/es7.observable.js
new file mode 100644
index 00000000..6dcb2c8f
--- /dev/null
+++ b/node_modules/core-js/modules/es7.observable.js
@@ -0,0 +1,199 @@
+'use strict';
+// https://github.com/zenparsing/es-observable
+var $export = require('./_export');
+var global = require('./_global');
+var core = require('./_core');
+var microtask = require('./_microtask')();
+var OBSERVABLE = require('./_wks')('observable');
+var aFunction = require('./_a-function');
+var anObject = require('./_an-object');
+var anInstance = require('./_an-instance');
+var redefineAll = require('./_redefine-all');
+var hide = require('./_hide');
+var forOf = require('./_for-of');
+var RETURN = forOf.RETURN;
+
+var getMethod = function (fn) {
+ return fn == null ? undefined : aFunction(fn);
+};
+
+var cleanupSubscription = function (subscription) {
+ var cleanup = subscription._c;
+ if (cleanup) {
+ subscription._c = undefined;
+ cleanup();
+ }
+};
+
+var subscriptionClosed = function (subscription) {
+ return subscription._o === undefined;
+};
+
+var closeSubscription = function (subscription) {
+ if (!subscriptionClosed(subscription)) {
+ subscription._o = undefined;
+ cleanupSubscription(subscription);
+ }
+};
+
+var Subscription = function (observer, subscriber) {
+ anObject(observer);
+ this._c = undefined;
+ this._o = observer;
+ observer = new SubscriptionObserver(this);
+ try {
+ var cleanup = subscriber(observer);
+ var subscription = cleanup;
+ if (cleanup != null) {
+ if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };
+ else aFunction(cleanup);
+ this._c = cleanup;
+ }
+ } catch (e) {
+ observer.error(e);
+ return;
+ } if (subscriptionClosed(this)) cleanupSubscription(this);
+};
+
+Subscription.prototype = redefineAll({}, {
+ unsubscribe: function unsubscribe() { closeSubscription(this); }
+});
+
+var SubscriptionObserver = function (subscription) {
+ this._s = subscription;
+};
+
+SubscriptionObserver.prototype = redefineAll({}, {
+ next: function next(value) {
+ var subscription = this._s;
+ if (!subscriptionClosed(subscription)) {
+ var observer = subscription._o;
+ try {
+ var m = getMethod(observer.next);
+ if (m) return m.call(observer, value);
+ } catch (e) {
+ try {
+ closeSubscription(subscription);
+ } finally {
+ throw e;
+ }
+ }
+ }
+ },
+ error: function error(value) {
+ var subscription = this._s;
+ if (subscriptionClosed(subscription)) throw value;
+ var observer = subscription._o;
+ subscription._o = undefined;
+ try {
+ var m = getMethod(observer.error);
+ if (!m) throw value;
+ value = m.call(observer, value);
+ } catch (e) {
+ try {
+ cleanupSubscription(subscription);
+ } finally {
+ throw e;
+ }
+ } cleanupSubscription(subscription);
+ return value;
+ },
+ complete: function complete(value) {
+ var subscription = this._s;
+ if (!subscriptionClosed(subscription)) {
+ var observer = subscription._o;
+ subscription._o = undefined;
+ try {
+ var m = getMethod(observer.complete);
+ value = m ? m.call(observer, value) : undefined;
+ } catch (e) {
+ try {
+ cleanupSubscription(subscription);
+ } finally {
+ throw e;
+ }
+ } cleanupSubscription(subscription);
+ return value;
+ }
+ }
+});
+
+var $Observable = function Observable(subscriber) {
+ anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);
+};
+
+redefineAll($Observable.prototype, {
+ subscribe: function subscribe(observer) {
+ return new Subscription(observer, this._f);
+ },
+ forEach: function forEach(fn) {
+ var that = this;
+ return new (core.Promise || global.Promise)(function (resolve, reject) {
+ aFunction(fn);
+ var subscription = that.subscribe({
+ next: function (value) {
+ try {
+ return fn(value);
+ } catch (e) {
+ reject(e);
+ subscription.unsubscribe();
+ }
+ },
+ error: reject,
+ complete: resolve
+ });
+ });
+ }
+});
+
+redefineAll($Observable, {
+ from: function from(x) {
+ var C = typeof this === 'function' ? this : $Observable;
+ var method = getMethod(anObject(x)[OBSERVABLE]);
+ if (method) {
+ var observable = anObject(method.call(x));
+ return observable.constructor === C ? observable : new C(function (observer) {
+ return observable.subscribe(observer);
+ });
+ }
+ return new C(function (observer) {
+ var done = false;
+ microtask(function () {
+ if (!done) {
+ try {
+ if (forOf(x, false, function (it) {
+ observer.next(it);
+ if (done) return RETURN;
+ }) === RETURN) return;
+ } catch (e) {
+ if (done) throw e;
+ observer.error(e);
+ return;
+ } observer.complete();
+ }
+ });
+ return function () { done = true; };
+ });
+ },
+ of: function of() {
+ for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];
+ return new (typeof this === 'function' ? this : $Observable)(function (observer) {
+ var done = false;
+ microtask(function () {
+ if (!done) {
+ for (var j = 0; j < items.length; ++j) {
+ observer.next(items[j]);
+ if (done) return;
+ } observer.complete();
+ }
+ });
+ return function () { done = true; };
+ });
+ }
+});
+
+hide($Observable.prototype, OBSERVABLE, function () { return this; });
+
+$export($export.G, { Observable: $Observable });
+
+require('./_set-species')('Observable');