elliptical-observe-inline
Version:
Dynamic sideways Data Loading for Elliptical
69 lines (52 loc) • 1.52 kB
JavaScript
;
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
};
}