| "use strict"; |
| Object.defineProperty(exports, "__esModule", { value: true }); |
| var Observable_1 = require("../Observable"); |
| var AsyncSubject_1 = require("../AsyncSubject"); |
| var map_1 = require("../operators/map"); |
| var canReportError_1 = require("../util/canReportError"); |
| var isScheduler_1 = require("../util/isScheduler"); |
| var isArray_1 = require("../util/isArray"); |
| function bindNodeCallback(callbackFunc, resultSelector, scheduler) { |
| if (resultSelector) { |
| if (isScheduler_1.isScheduler(resultSelector)) { |
| scheduler = resultSelector; |
| } |
| else { |
| return function () { |
| var args = []; |
| for (var _i = 0; _i < arguments.length; _i++) { |
| args[_i] = arguments[_i]; |
| } |
| return bindNodeCallback(callbackFunc, scheduler).apply(void 0, args).pipe(map_1.map(function (args) { return isArray_1.isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); })); |
| }; |
| } |
| } |
| return function () { |
| var args = []; |
| for (var _i = 0; _i < arguments.length; _i++) { |
| args[_i] = arguments[_i]; |
| } |
| var params = { |
| subject: undefined, |
| args: args, |
| callbackFunc: callbackFunc, |
| scheduler: scheduler, |
| context: this, |
| }; |
| return new Observable_1.Observable(function (subscriber) { |
| var context = params.context; |
| var subject = params.subject; |
| if (!scheduler) { |
| if (!subject) { |
| subject = params.subject = new AsyncSubject_1.AsyncSubject(); |
| var handler = function () { |
| var innerArgs = []; |
| for (var _i = 0; _i < arguments.length; _i++) { |
| innerArgs[_i] = arguments[_i]; |
| } |
| var err = innerArgs.shift(); |
| if (err) { |
| subject.error(err); |
| return; |
| } |
| subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs); |
| subject.complete(); |
| }; |
| try { |
| callbackFunc.apply(context, args.concat([handler])); |
| } |
| catch (err) { |
| if (canReportError_1.canReportError(subject)) { |
| subject.error(err); |
| } |
| else { |
| console.warn(err); |
| } |
| } |
| } |
| return subject.subscribe(subscriber); |
| } |
| else { |
| return scheduler.schedule(dispatch, 0, { params: params, subscriber: subscriber, context: context }); |
| } |
| }); |
| }; |
| } |
| exports.bindNodeCallback = bindNodeCallback; |
| function dispatch(state) { |
| var _this = this; |
| var params = state.params, subscriber = state.subscriber, context = state.context; |
| var callbackFunc = params.callbackFunc, args = params.args, scheduler = params.scheduler; |
| var subject = params.subject; |
| if (!subject) { |
| subject = params.subject = new AsyncSubject_1.AsyncSubject(); |
| var handler = function () { |
| var innerArgs = []; |
| for (var _i = 0; _i < arguments.length; _i++) { |
| innerArgs[_i] = arguments[_i]; |
| } |
| var err = innerArgs.shift(); |
| if (err) { |
| _this.add(scheduler.schedule(dispatchError, 0, { err: err, subject: subject })); |
| } |
| else { |
| var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs; |
| _this.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject })); |
| } |
| }; |
| try { |
| callbackFunc.apply(context, args.concat([handler])); |
| } |
| catch (err) { |
| this.add(scheduler.schedule(dispatchError, 0, { err: err, subject: subject })); |
| } |
| } |
| this.add(subject.subscribe(subscriber)); |
| } |
| function dispatchNext(arg) { |
| var value = arg.value, subject = arg.subject; |
| subject.next(value); |
| subject.complete(); |
| } |
| function dispatchError(arg) { |
| var err = arg.err, subject = arg.subject; |
| subject.error(err); |
| } |
| //# sourceMappingURL=bindNodeCallback.js.map |