| import { Observable } from '../Observable'; | 
| import { AsyncSubject } from '../AsyncSubject'; | 
| import { map } from '../operators/map'; | 
| import { canReportError } from '../util/canReportError'; | 
| import { isScheduler } from '../util/isScheduler'; | 
| import { isArray } from '../util/isArray'; | 
| export function bindNodeCallback(callbackFunc, resultSelector, scheduler) { | 
|     if (resultSelector) { | 
|         if (isScheduler(resultSelector)) { | 
|             scheduler = resultSelector; | 
|         } | 
|         else { | 
|             return (...args) => bindNodeCallback(callbackFunc, scheduler)(...args).pipe(map(args => isArray(args) ? resultSelector(...args) : resultSelector(args))); | 
|         } | 
|     } | 
|     return function (...args) { | 
|         const params = { | 
|             subject: undefined, | 
|             args, | 
|             callbackFunc, | 
|             scheduler, | 
|             context: this, | 
|         }; | 
|         return new Observable(subscriber => { | 
|             const { context } = params; | 
|             let { subject } = params; | 
|             if (!scheduler) { | 
|                 if (!subject) { | 
|                     subject = params.subject = new AsyncSubject(); | 
|                     const handler = (...innerArgs) => { | 
|                         const err = innerArgs.shift(); | 
|                         if (err) { | 
|                             subject.error(err); | 
|                             return; | 
|                         } | 
|                         subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs); | 
|                         subject.complete(); | 
|                     }; | 
|                     try { | 
|                         callbackFunc.apply(context, [...args, handler]); | 
|                     } | 
|                     catch (err) { | 
|                         if (canReportError(subject)) { | 
|                             subject.error(err); | 
|                         } | 
|                         else { | 
|                             console.warn(err); | 
|                         } | 
|                     } | 
|                 } | 
|                 return subject.subscribe(subscriber); | 
|             } | 
|             else { | 
|                 return scheduler.schedule(dispatch, 0, { params, subscriber, context }); | 
|             } | 
|         }); | 
|     }; | 
| } | 
| function dispatch(state) { | 
|     const { params, subscriber, context } = state; | 
|     const { callbackFunc, args, scheduler } = params; | 
|     let subject = params.subject; | 
|     if (!subject) { | 
|         subject = params.subject = new AsyncSubject(); | 
|         const handler = (...innerArgs) => { | 
|             const err = innerArgs.shift(); | 
|             if (err) { | 
|                 this.add(scheduler.schedule(dispatchError, 0, { err, subject })); | 
|             } | 
|             else { | 
|                 const value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs; | 
|                 this.add(scheduler.schedule(dispatchNext, 0, { value, subject })); | 
|             } | 
|         }; | 
|         try { | 
|             callbackFunc.apply(context, [...args, handler]); | 
|         } | 
|         catch (err) { | 
|             this.add(scheduler.schedule(dispatchError, 0, { err, subject })); | 
|         } | 
|     } | 
|     this.add(subject.subscribe(subscriber)); | 
| } | 
| function dispatchNext(arg) { | 
|     const { value, subject } = arg; | 
|     subject.next(value); | 
|     subject.complete(); | 
| } | 
| function dispatchError(arg) { | 
|     const { err, subject } = arg; | 
|     subject.error(err); | 
| } | 
| //# sourceMappingURL=bindNodeCallback.js.map |