UNPKG

@zkochan/pnpm

Version:

Fast, disk space efficient package manager

444 lines (335 loc) 11.1 kB
'use strict'; (function(fn, name) { if (typeof exports !== "undefined") { fn(exports, module); } else if (typeof self !== "undefined") { var e = name === "*" ? self : (name ? self[name] = {} : {}); fn(e, { exports: e }); } })(function(exports, module) { // === Symbol Support === function hasSymbol(name) { return typeof Symbol === "function" && Boolean(Symbol[name]); } function getSymbol(name) { return hasSymbol(name) ? Symbol[name] : "@@" + name; } // Ponyfill Symbol.observable for interoperability with other libraries if (typeof Symbol === "function" && !Symbol.observable) { Symbol.observable = Symbol("observable"); } // === Abstract Operations === function hostReportError(e) { setTimeout(function() { throw e }); } function getMethod(obj, key) { var value = obj[key]; if (value == null) return undefined; if (typeof value !== "function") throw new TypeError(value + " is not a function"); return value; } function getSpecies(obj) { var ctor = obj.constructor; if (ctor !== undefined) { ctor = ctor[getSymbol("species")]; if (ctor === null) { ctor = undefined; } } return ctor !== undefined ? ctor : Observable; } function addMethods(target, methods) { Object.keys(methods).forEach(function(k) { var desc = Object.getOwnPropertyDescriptor(methods, k); desc.enumerable = false; Object.defineProperty(target, k, desc); }); } function cleanupSubscription(subscription) { // Assert: observer._observer is undefined var cleanup = subscription._cleanup; if (!cleanup) return; // Drop the reference to the cleanup function so that we won't call it // more than once subscription._cleanup = undefined; // Call the cleanup function try { cleanup() } catch (e) { hostReportError(e) } } function subscriptionClosed(subscription) { return subscription._observer === undefined; } function closeSubscription(subscription) { if (subscriptionClosed(subscription)) return; subscription._observer = undefined; cleanupSubscription(subscription); } function cleanupFromSubscription(subscription) { return function() { subscription.unsubscribe() }; } function Subscription(observer, subscriber) { // Assert: subscriber is callable // The observer must be an object if (Object(observer) !== observer) throw new TypeError("Observer must be an object"); this._cleanup = undefined; this._observer = observer; try { var start$0 = getMethod(observer, "start"); if (start$0) start$0.call(observer, this); } catch (e) { hostReportError(e); } if (subscriptionClosed(this)) return; observer = new SubscriptionObserver(this); try { // Call the subscriber function var cleanup$0 = subscriber.call(undefined, observer); // The return value must be undefined, null, a subscription object, or a function if (cleanup$0 != null) { if (typeof cleanup$0.unsubscribe === "function") cleanup$0 = cleanupFromSubscription(cleanup$0); else if (typeof cleanup$0 !== "function") throw new TypeError(cleanup$0 + " is not a function"); this._cleanup = cleanup$0; } } catch (e) { // If an error occurs during startup, then attempt to send the error // to the observer observer.error(e); return; } // If the stream is already finished, then perform cleanup if (subscriptionClosed(this)) cleanupSubscription(this); } addMethods(Subscription.prototype = {}, { get closed() { return subscriptionClosed(this) }, unsubscribe: function() { closeSubscription(this) }, }); function SubscriptionObserver(subscription) { this._subscription = subscription; } addMethods(SubscriptionObserver.prototype = {}, { get closed() { return subscriptionClosed(this._subscription) }, next: function(value) { var subscription = this._subscription; // If the stream is closed, then return undefined if (subscriptionClosed(subscription)) return; var observer = subscription._observer; try { // If the observer has a "next" method, send the next value var m$0 = getMethod(observer, "next"); if (m$0) m$0.call(observer, value); } catch (e) { hostReportError(e); } }, error: function(value) { var subscription = this._subscription; // If the stream is closed, throw the error to the caller if (subscriptionClosed(subscription)) { hostReportError(value); return; } var observer = subscription._observer; subscription._observer = undefined; try { var m$1 = getMethod(observer, "error"); if (m$1) m$1.call(observer, value); else throw value; } catch (e) { hostReportError(e); } cleanupSubscription(subscription); }, complete: function() { var subscription = this._subscription; if (subscriptionClosed(subscription)) return; var observer = subscription._observer; subscription._observer = undefined; try { var m$2 = getMethod(observer, "complete"); if (m$2) m$2.call(observer); } catch (e) { hostReportError(e); } cleanupSubscription(subscription); }, }); function Observable(subscriber) { // Constructor cannot be called as a function if (!(this instanceof Observable)) throw new TypeError("Observable cannot be called as a function"); // The stream subscriber must be a function if (typeof subscriber !== "function") throw new TypeError("Observable initializer must be a function"); this._subscriber = subscriber; } addMethods(Observable.prototype, { subscribe: function(observer) { for (var args = [], __$0 = 1; __$0 < arguments.length; ++__$0) args.push(arguments[__$0]); if (typeof observer === 'function') { observer = { next: observer, error: args[0], complete: args[1], }; } else if (typeof observer !== 'object' || observer === null) { observer = {}; } return new Subscription(observer, this._subscriber); }, forEach: function(fn) { var __this = this; return new Promise(function(resolve, reject) { if (typeof fn !== "function") return Promise.reject(new TypeError(fn + " is not a function")); __this.subscribe({ _subscription: null, start: function(subscription) { if (Object(subscription) !== subscription) throw new TypeError(subscription + " is not an object"); this._subscription = subscription; }, next: function(value) { var subscription = this._subscription; if (subscription.closed) return; try { fn(value); } catch (err) { reject(err); subscription.unsubscribe(); } }, error: reject, complete: resolve, }); }); }, map: function(fn) { var __this = this; if (typeof fn !== "function") throw new TypeError(fn + " is not a function"); var C = getSpecies(this); return new C(function(observer) { return __this.subscribe({ next: function(value) { if (observer.closed) return; try { value = fn(value) } catch (e) { return observer.error(e) } observer.next(value); }, error: function(e) { observer.error(e) }, complete: function() { observer.complete() }, }); }); }, filter: function(fn) { var __this = this; if (typeof fn !== "function") throw new TypeError(fn + " is not a function"); var C = getSpecies(this); return new C(function(observer) { return __this.subscribe({ next: function(value) { if (observer.closed) return; try { if (!fn(value)) return } catch (e) { return observer.error(e) } observer.next(value); }, error: function(e) { observer.error(e) }, complete: function() { observer.complete() }, }); }); }, reduce: function(fn) { var __this = this; if (typeof fn !== "function") throw new TypeError(fn + " is not a function"); var C = getSpecies(this); var hasSeed = arguments.length > 1; var hasValue = false; var seed = arguments[1]; var acc = seed; return new C(function(observer) { return __this.subscribe({ next: function(value) { if (observer.closed) return; var first = !hasValue; hasValue = true; if (!first || hasSeed) { try { acc = fn(acc, value) } catch (e) { return observer.error(e) } } else { acc = value; } }, error: function(e) { observer.error(e) }, complete: function() { if (!hasValue && !hasSeed) { return observer.error(new TypeError("Cannot reduce an empty sequence")); } observer.next(acc); observer.complete(); }, }); }); }, }); Object.defineProperty(Observable.prototype, getSymbol("observable"), { value: function() { return this }, writable: true, configurable: true, }); addMethods(Observable, { from: function(x) { var C = typeof this === "function" ? this : Observable; if (x == null) throw new TypeError(x + " is not an object"); var method = getMethod(x, getSymbol("observable")); if (method) { var observable$0 = method.call(x); if (Object(observable$0) !== observable$0) throw new TypeError(observable$0 + " is not an object"); if (observable$0.constructor === C) return observable$0; return new C(function(observer) { return observable$0.subscribe(observer); }); } if (hasSymbol("iterator") && (method = getMethod(x, getSymbol("iterator")))) { return new C(function(observer) { for (var __$0 = (method.call(x))[Symbol.iterator](), __$1; __$1 = __$0.next(), !__$1.done;) { var item$0 = __$1.value; observer.next(item$0); if (observer.closed) return; } observer.complete(); }); } if (Array.isArray(x)) { return new C(function(observer) { for (var i$0 = 0; i$0 < x.length; ++i$0) { observer.next(x[i$0]); if (observer.closed) return; } observer.complete(); }); } throw new TypeError(x + " is not observable"); }, of: function() { for (var items = [], __$0 = 0; __$0 < arguments.length; ++__$0) items.push(arguments[__$0]); var C = typeof this === "function" ? this : Observable; return new C(function(observer) { for (var i$1 = 0; i$1 < items.length; ++i$1) { observer.next(items[i$1]); if (observer.closed) return; } observer.complete(); }); }, }); Object.defineProperty(Observable, getSymbol("species"), { get: function() { return this }, configurable: true, }); Object.defineProperty(Observable, "extensions", { value: { observableSymbol: getSymbol("observable"), setHostReportError: function(fn) { hostReportError = fn }, }, }); exports.Observable = Observable; }, "*");