{"ast":null,"code":"import { ReplaySubject } from '../ReplaySubject';\nexport function shareReplay(configOrBufferSize, windowTime, scheduler) {\n  var config;\n\n  if (configOrBufferSize && typeof configOrBufferSize === 'object') {\n    config = configOrBufferSize;\n  } else {\n    config = {\n      bufferSize: configOrBufferSize,\n      windowTime: windowTime,\n      refCount: false,\n      scheduler: scheduler\n    };\n  }\n\n  return function (source) {\n    return source.lift(shareReplayOperator(config));\n  };\n}\n\nfunction shareReplayOperator(_ref) {\n  var _ref$bufferSize = _ref.bufferSize,\n      bufferSize = _ref$bufferSize === void 0 ? Number.POSITIVE_INFINITY : _ref$bufferSize,\n      _ref$windowTime = _ref.windowTime,\n      windowTime = _ref$windowTime === void 0 ? Number.POSITIVE_INFINITY : _ref$windowTime,\n      useRefCount = _ref.refCount,\n      scheduler = _ref.scheduler;\n  var subject;\n  var refCount = 0;\n  var subscription;\n  var hasError = false;\n  var isComplete = false;\n  return function shareReplayOperation(source) {\n    refCount++;\n    var innerSub;\n\n    if (!subject || hasError) {\n      hasError = false;\n      subject = new ReplaySubject(bufferSize, windowTime, scheduler);\n      innerSub = subject.subscribe(this);\n      subscription = source.subscribe({\n        next: function next(value) {\n          subject.next(value);\n        },\n        error: function error(err) {\n          hasError = true;\n          subject.error(err);\n        },\n        complete: function complete() {\n          isComplete = true;\n          subscription = undefined;\n          subject.complete();\n        }\n      });\n\n      if (isComplete) {\n        subscription = undefined;\n      }\n    } else {\n      innerSub = subject.subscribe(this);\n    }\n\n    this.add(function () {\n      refCount--;\n      innerSub.unsubscribe();\n      innerSub = undefined;\n\n      if (subscription && !isComplete && useRefCount && refCount === 0) {\n        subscription.unsubscribe();\n        subscription = undefined;\n        subject = undefined;\n      }\n    });\n  };\n} //# sourceMappingURL=shareReplay.js.map","map":null,"metadata":{},"sourceType":"module"}