UNPKG

elliptical-observe-inline

Version:
69 lines (52 loc) 1.52 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = createParser; var _elliptical = require('elliptical'); var _processor = require('./processor'); var _processor2 = _interopRequireDefault(_processor); var _store = require('./store'); var _store2 = _interopRequireDefault(_store); var _zenObservable = require('zen-observable'); var _zenObservable2 = _interopRequireDefault(_zenObservable); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** @jsx createElement */ function createParser(element, otherProcessor) { const store = (0, _store2.default)(); let currentObserver; let currentInput; const processor = (0, _processor2.default)(store.register); let trueProcessor = processor; if (otherProcessor) { trueProcessor = (0, _elliptical.combineProcessors)(processor, otherProcessor); } let parse = (0, _elliptical.compile)(element, trueProcessor); function traverse() { const outputs = parse(currentInput); currentObserver.next(outputs); } store.data.subscribe({ next() { if (currentObserver) { traverse(); } } }); return { watch(input) { if (currentObserver) { currentObserver.complete(); } return new _zenObservable2.default(observer => { currentObserver = observer; currentInput = input; traverse(); }); }, parse(input) { return parse(input); }, store }; }