{"ast":null,"code":"import { OuterSubscriber } from '../OuterSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nexport function audit(durationSelector) {\n  return function auditOperatorFunction(source) {\n    return source.lift(new AuditOperator(durationSelector));\n  };\n}\n\nclass AuditOperator {\n  constructor(durationSelector) {\n    this.durationSelector = durationSelector;\n  }\n\n  call(subscriber, source) {\n    return source.subscribe(new AuditSubscriber(subscriber, this.durationSelector));\n  }\n\n}\n\nclass AuditSubscriber extends OuterSubscriber {\n  constructor(destination, durationSelector) {\n    super(destination);\n    this.durationSelector = durationSelector;\n    this.hasValue = false;\n  }\n\n  _next(value) {\n    this.value = value;\n    this.hasValue = true;\n\n    if (!this.throttled) {\n      let duration;\n\n      try {\n        const {\n          durationSelector\n        } = this;\n        duration = durationSelector(value);\n      } catch (err) {\n        return this.destination.error(err);\n      }\n\n      const innerSubscription = subscribeToResult(this, duration);\n\n      if (!innerSubscription || innerSubscription.closed) {\n        this.clearThrottle();\n      } else {\n        this.add(this.throttled = innerSubscription);\n      }\n    }\n  }\n\n  clearThrottle() {\n    const {\n      value,\n      hasValue,\n      throttled\n    } = this;\n\n    if (throttled) {\n      this.remove(throttled);\n      this.throttled = null;\n      throttled.unsubscribe();\n    }\n\n    if (hasValue) {\n      this.value = null;\n      this.hasValue = false;\n      this.destination.next(value);\n    }\n  }\n\n  notifyNext(outerValue, innerValue, outerIndex, innerIndex) {\n    this.clearThrottle();\n  }\n\n  notifyComplete() {\n    this.clearThrottle();\n  }\n\n} //# sourceMappingURL=audit.js.map","map":null,"metadata":{},"sourceType":"module"}