{"ast":null,"code":"import { OuterSubscriber } from '../OuterSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nexport function distinct(keySelector, flushes) {\n  return source => source.lift(new DistinctOperator(keySelector, flushes));\n}\n\nclass DistinctOperator {\n  constructor(keySelector, flushes) {\n    this.keySelector = keySelector;\n    this.flushes = flushes;\n  }\n\n  call(subscriber, source) {\n    return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));\n  }\n\n}\n\nexport class DistinctSubscriber extends OuterSubscriber {\n  constructor(destination, keySelector, flushes) {\n    super(destination);\n    this.keySelector = keySelector;\n    this.values = new Set();\n\n    if (flushes) {\n      this.add(subscribeToResult(this, flushes));\n    }\n  }\n\n  notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n    this.values.clear();\n  }\n\n  notifyError(error, innerSub) {\n    this._error(error);\n  }\n\n  _next(value) {\n    if (this.keySelector) {\n      this._useKeySelector(value);\n    } else {\n      this._finalizeNext(value, value);\n    }\n  }\n\n  _useKeySelector(value) {\n    let key;\n    const {\n      destination\n    } = this;\n\n    try {\n      key = this.keySelector(value);\n    } catch (err) {\n      destination.error(err);\n      return;\n    }\n\n    this._finalizeNext(key, value);\n  }\n\n  _finalizeNext(key, value) {\n    const {\n      values\n    } = this;\n\n    if (!values.has(key)) {\n      values.add(key);\n      this.destination.next(value);\n    }\n  }\n\n} //# sourceMappingURL=distinct.js.map","map":null,"metadata":{},"sourceType":"module"}