diff options
Diffstat (limited to 'node_modules/rxjs/dist/esm5/internal/operators/share.js')
| -rw-r--r-- | node_modules/rxjs/dist/esm5/internal/operators/share.js | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/node_modules/rxjs/dist/esm5/internal/operators/share.js b/node_modules/rxjs/dist/esm5/internal/operators/share.js new file mode 100644 index 0000000..f2e2c10 --- /dev/null +++ b/node_modules/rxjs/dist/esm5/internal/operators/share.js @@ -0,0 +1,85 @@ +import { __read, __spreadArray } from "tslib"; +import { innerFrom } from '../observable/innerFrom'; +import { Subject } from '../Subject'; +import { SafeSubscriber } from '../Subscriber'; +import { operate } from '../util/lift'; +export function share(options) { + if (options === void 0) { options = {}; } + var _a = options.connector, connector = _a === void 0 ? function () { return new Subject(); } : _a, _b = options.resetOnError, resetOnError = _b === void 0 ? true : _b, _c = options.resetOnComplete, resetOnComplete = _c === void 0 ? true : _c, _d = options.resetOnRefCountZero, resetOnRefCountZero = _d === void 0 ? true : _d; + return function (wrapperSource) { + var connection; + var resetConnection; + var subject; + var refCount = 0; + var hasCompleted = false; + var hasErrored = false; + var cancelReset = function () { + resetConnection === null || resetConnection === void 0 ? void 0 : resetConnection.unsubscribe(); + resetConnection = undefined; + }; + var reset = function () { + cancelReset(); + connection = subject = undefined; + hasCompleted = hasErrored = false; + }; + var resetAndUnsubscribe = function () { + var conn = connection; + reset(); + conn === null || conn === void 0 ? void 0 : conn.unsubscribe(); + }; + return operate(function (source, subscriber) { + refCount++; + if (!hasErrored && !hasCompleted) { + cancelReset(); + } + var dest = (subject = subject !== null && subject !== void 0 ? subject : connector()); + subscriber.add(function () { + refCount--; + if (refCount === 0 && !hasErrored && !hasCompleted) { + resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero); + } + }); + dest.subscribe(subscriber); + if (!connection && + refCount > 0) { + connection = new SafeSubscriber({ + next: function (value) { return dest.next(value); }, + error: function (err) { + hasErrored = true; + cancelReset(); + resetConnection = handleReset(reset, resetOnError, err); + dest.error(err); + }, + complete: function () { + hasCompleted = true; + cancelReset(); + resetConnection = handleReset(reset, resetOnComplete); + dest.complete(); + }, + }); + innerFrom(source).subscribe(connection); + } + })(wrapperSource); + }; +} +function handleReset(reset, on) { + var args = []; + for (var _i = 2; _i < arguments.length; _i++) { + args[_i - 2] = arguments[_i]; + } + if (on === true) { + reset(); + return; + } + if (on === false) { + return; + } + var onSubscriber = new SafeSubscriber({ + next: function () { + onSubscriber.unsubscribe(); + reset(); + }, + }); + return innerFrom(on.apply(void 0, __spreadArray([], __read(args)))).subscribe(onSubscriber); +} +//# sourceMappingURL=share.js.map
\ No newline at end of file |
