126 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/** PURE_IMPORTS_START _Observable,_util_identity,_util_isScheduler PURE_IMPORTS_END */
 | 
						|
import { Observable } from '../Observable';
 | 
						|
import { identity } from '../util/identity';
 | 
						|
import { isScheduler } from '../util/isScheduler';
 | 
						|
export function generate(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) {
 | 
						|
    var resultSelector;
 | 
						|
    var initialState;
 | 
						|
    if (arguments.length == 1) {
 | 
						|
        var options = initialStateOrOptions;
 | 
						|
        initialState = options.initialState;
 | 
						|
        condition = options.condition;
 | 
						|
        iterate = options.iterate;
 | 
						|
        resultSelector = options.resultSelector || identity;
 | 
						|
        scheduler = options.scheduler;
 | 
						|
    }
 | 
						|
    else if (resultSelectorOrObservable === undefined || isScheduler(resultSelectorOrObservable)) {
 | 
						|
        initialState = initialStateOrOptions;
 | 
						|
        resultSelector = identity;
 | 
						|
        scheduler = resultSelectorOrObservable;
 | 
						|
    }
 | 
						|
    else {
 | 
						|
        initialState = initialStateOrOptions;
 | 
						|
        resultSelector = resultSelectorOrObservable;
 | 
						|
    }
 | 
						|
    return new Observable(function (subscriber) {
 | 
						|
        var state = initialState;
 | 
						|
        if (scheduler) {
 | 
						|
            return scheduler.schedule(dispatch, 0, {
 | 
						|
                subscriber: subscriber,
 | 
						|
                iterate: iterate,
 | 
						|
                condition: condition,
 | 
						|
                resultSelector: resultSelector,
 | 
						|
                state: state
 | 
						|
            });
 | 
						|
        }
 | 
						|
        do {
 | 
						|
            if (condition) {
 | 
						|
                var conditionResult = void 0;
 | 
						|
                try {
 | 
						|
                    conditionResult = condition(state);
 | 
						|
                }
 | 
						|
                catch (err) {
 | 
						|
                    subscriber.error(err);
 | 
						|
                    return undefined;
 | 
						|
                }
 | 
						|
                if (!conditionResult) {
 | 
						|
                    subscriber.complete();
 | 
						|
                    break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            var value = void 0;
 | 
						|
            try {
 | 
						|
                value = resultSelector(state);
 | 
						|
            }
 | 
						|
            catch (err) {
 | 
						|
                subscriber.error(err);
 | 
						|
                return undefined;
 | 
						|
            }
 | 
						|
            subscriber.next(value);
 | 
						|
            if (subscriber.closed) {
 | 
						|
                break;
 | 
						|
            }
 | 
						|
            try {
 | 
						|
                state = iterate(state);
 | 
						|
            }
 | 
						|
            catch (err) {
 | 
						|
                subscriber.error(err);
 | 
						|
                return undefined;
 | 
						|
            }
 | 
						|
        } while (true);
 | 
						|
        return undefined;
 | 
						|
    });
 | 
						|
}
 | 
						|
function dispatch(state) {
 | 
						|
    var subscriber = state.subscriber, condition = state.condition;
 | 
						|
    if (subscriber.closed) {
 | 
						|
        return undefined;
 | 
						|
    }
 | 
						|
    if (state.needIterate) {
 | 
						|
        try {
 | 
						|
            state.state = state.iterate(state.state);
 | 
						|
        }
 | 
						|
        catch (err) {
 | 
						|
            subscriber.error(err);
 | 
						|
            return undefined;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    else {
 | 
						|
        state.needIterate = true;
 | 
						|
    }
 | 
						|
    if (condition) {
 | 
						|
        var conditionResult = void 0;
 | 
						|
        try {
 | 
						|
            conditionResult = condition(state.state);
 | 
						|
        }
 | 
						|
        catch (err) {
 | 
						|
            subscriber.error(err);
 | 
						|
            return undefined;
 | 
						|
        }
 | 
						|
        if (!conditionResult) {
 | 
						|
            subscriber.complete();
 | 
						|
            return undefined;
 | 
						|
        }
 | 
						|
        if (subscriber.closed) {
 | 
						|
            return undefined;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    var value;
 | 
						|
    try {
 | 
						|
        value = state.resultSelector(state.state);
 | 
						|
    }
 | 
						|
    catch (err) {
 | 
						|
        subscriber.error(err);
 | 
						|
        return undefined;
 | 
						|
    }
 | 
						|
    if (subscriber.closed) {
 | 
						|
        return undefined;
 | 
						|
    }
 | 
						|
    subscriber.next(value);
 | 
						|
    if (subscriber.closed) {
 | 
						|
        return undefined;
 | 
						|
    }
 | 
						|
    return this.schedule(state);
 | 
						|
}
 | 
						|
//# sourceMappingURL=generate.js.map
 |