1 import { Observable } from '../Observable';
2 import { AsyncSubject } from '../AsyncSubject';
3 import { map } from '../operators/map';
4 import { canReportError } from '../util/canReportError';
5 import { isScheduler } from '../util/isScheduler';
6 import { isArray } from '../util/isArray';
7 export function bindNodeCallback(callbackFunc, resultSelector, scheduler) {
9 if (isScheduler(resultSelector)) {
10 scheduler = resultSelector;
13 return (...args) => bindNodeCallback(callbackFunc, scheduler)(...args).pipe(map(args => isArray(args) ? resultSelector(...args) : resultSelector(args)));
16 return function (...args) {
24 return new Observable(subscriber => {
25 const { context } = params;
26 let { subject } = params;
29 subject = params.subject = new AsyncSubject();
30 const handler = (...innerArgs) => {
31 const err = innerArgs.shift();
36 subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
40 callbackFunc.apply(context, [...args, handler]);
43 if (canReportError(subject)) {
51 return subject.subscribe(subscriber);
54 return scheduler.schedule(dispatch, 0, { params, subscriber, context });
59 function dispatch(state) {
60 const { params, subscriber, context } = state;
61 const { callbackFunc, args, scheduler } = params;
62 let subject = params.subject;
64 subject = params.subject = new AsyncSubject();
65 const handler = (...innerArgs) => {
66 const err = innerArgs.shift();
68 this.add(scheduler.schedule(dispatchError, 0, { err, subject }));
71 const value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
72 this.add(scheduler.schedule(dispatchNext, 0, { value, subject }));
76 callbackFunc.apply(context, [...args, handler]);
79 this.add(scheduler.schedule(dispatchError, 0, { err, subject }));
82 this.add(subject.subscribe(subscriber));
84 function dispatchNext(arg) {
85 const { value, subject } = arg;
89 function dispatchError(arg) {
90 const { err, subject } = arg;
93 //# sourceMappingURL=bindNodeCallback.js.map