"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 isArray_1 = require("../util/isArray"); var isScheduler_1 = require("../util/isScheduler"); function bindCallback(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 bindCallback(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 context = this; var subject; var params = { context: context, subject: subject, callbackFunc: callbackFunc, scheduler: scheduler, }; return new Observable_1.Observable(function (subscriber) { if (!scheduler) { if (!subject) { subject = new AsyncSubject_1.AsyncSubject(); var handler = function () { var innerArgs = []; for (var _i = 0; _i < arguments.length; _i++) { innerArgs[_i] = arguments[_i]; } 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 { var state = { args: args, subscriber: subscriber, params: params, }; return scheduler.schedule(dispatch, 0, state); } }); }; } exports.bindCallback = bindCallback; function dispatch(state) { var _this = this; var self = this; var args = state.args, subscriber = state.subscriber, params = state.params; var callbackFunc = params.callbackFunc, context = params.context, 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 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) { subject.error(err); } } this.add(subject.subscribe(subscriber)); } function dispatchNext(state) { var value = state.value, subject = state.subject; subject.next(value); subject.complete(); } function dispatchError(state) { var err = state.err, subject = state.subject; subject.error(err); } //# sourceMappingURL=bindCallback.js.map