UNPKG

elliptical-observe-inline

Version:
52 lines (43 loc) 1.2 kB
/** @jsx createElement */ import { createElement, compile, combineProcessors } from 'elliptical'; import createProcessor from './processor'; import createStore from './store'; import Observable from 'zen-observable'; export default function createParser(element, otherProcessor) { var store = createStore(); var currentObserver = void 0; var currentInput = void 0; var processor = createProcessor(store.register); var trueProcessor = processor; if (otherProcessor) { trueProcessor = combineProcessors(processor, otherProcessor); } var _parse = compile(element, trueProcessor); function traverse() { var outputs = _parse(currentInput); currentObserver.next(outputs); } store.data.subscribe({ next: function next() { if (currentObserver) { traverse(); } } }); return { watch: function watch(input) { if (currentObserver) { currentObserver.complete(); } return new Observable(function (observer) { currentObserver = observer; currentInput = input; traverse(); }); }, parse: function parse(input) { return _parse(input); }, store: store }; }