{"ast":null,"code":"import { SimpleOuterSubscriber, innerSubscribe, SimpleInnerSubscriber } from '../innerSubscribe';\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 SimpleOuterSubscriber {\n constructor(destination, keySelector, flushes) {\n super(destination);\n this.keySelector = keySelector;\n this.values = new Set();\n\n if (flushes) {\n this.add(innerSubscribe(flushes, new SimpleInnerSubscriber(this)));\n }\n }\n\n notifyNext() {\n this.values.clear();\n }\n\n notifyError(error) {\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"}