You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							67 lines
						
					
					
						
							2.3 KiB
						
					
					
				
			
		
		
	
	
							67 lines
						
					
					
						
							2.3 KiB
						
					
					
				"use strict"; | 
						|
Object.defineProperty(exports, "__esModule", { value: true }); | 
						|
var ReplaySubject_1 = require("../ReplaySubject"); | 
						|
function shareReplay(configOrBufferSize, windowTime, scheduler) { | 
						|
    var config; | 
						|
    if (configOrBufferSize && typeof configOrBufferSize === 'object') { | 
						|
        config = configOrBufferSize; | 
						|
    } | 
						|
    else { | 
						|
        config = { | 
						|
            bufferSize: configOrBufferSize, | 
						|
            windowTime: windowTime, | 
						|
            refCount: false, | 
						|
            scheduler: scheduler, | 
						|
        }; | 
						|
    } | 
						|
    return function (source) { return source.lift(shareReplayOperator(config)); }; | 
						|
} | 
						|
exports.shareReplay = shareReplay; | 
						|
function shareReplayOperator(_a) { | 
						|
    var _b = _a.bufferSize, bufferSize = _b === void 0 ? Number.POSITIVE_INFINITY : _b, _c = _a.windowTime, windowTime = _c === void 0 ? Number.POSITIVE_INFINITY : _c, useRefCount = _a.refCount, scheduler = _a.scheduler; | 
						|
    var subject; | 
						|
    var refCount = 0; | 
						|
    var subscription; | 
						|
    var hasError = false; | 
						|
    var isComplete = false; | 
						|
    return function shareReplayOperation(source) { | 
						|
        refCount++; | 
						|
        var innerSub; | 
						|
        if (!subject || hasError) { | 
						|
            hasError = false; | 
						|
            subject = new ReplaySubject_1.ReplaySubject(bufferSize, windowTime, scheduler); | 
						|
            innerSub = subject.subscribe(this); | 
						|
            subscription = source.subscribe({ | 
						|
                next: function (value) { | 
						|
                    subject.next(value); | 
						|
                }, | 
						|
                error: function (err) { | 
						|
                    hasError = true; | 
						|
                    subject.error(err); | 
						|
                }, | 
						|
                complete: function () { | 
						|
                    isComplete = true; | 
						|
                    subscription = undefined; | 
						|
                    subject.complete(); | 
						|
                }, | 
						|
            }); | 
						|
            if (isComplete) { | 
						|
                subscription = undefined; | 
						|
            } | 
						|
        } | 
						|
        else { | 
						|
            innerSub = subject.subscribe(this); | 
						|
        } | 
						|
        this.add(function () { | 
						|
            refCount--; | 
						|
            innerSub.unsubscribe(); | 
						|
            innerSub = undefined; | 
						|
            if (subscription && !isComplete && useRefCount && refCount === 0) { | 
						|
                subscription.unsubscribe(); | 
						|
                subscription = undefined; | 
						|
                subject = undefined; | 
						|
            } | 
						|
        }); | 
						|
    }; | 
						|
} | 
						|
//# sourceMappingURL=shareReplay.js.map
 |