elliptical
Version:
Interactive natural-language interfaces
48 lines (35 loc) • 1.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _utils = require('../utils');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function* traverseChild(option, child, traverse) {
const childOutputs = traverse(child, option);
// slight performance optimization
if (child.props.id == null) {
yield* childOutputs;
} else {
for (let output of childOutputs) {
const newResult = child.props.id != null ? { [child.props.id]: output.result } : output.result;
const mods = { result: newResult };
yield _lodash2.default.assign({}, output, mods);
}
}
}
function* childrenTraversals(option, children, traverse) {
if (children && children.length > 0) {
for (let child of children) {
yield traverseChild(option, child, traverse);
}
}
}
function* visit(option, _ref, traverse) {
let props = _ref.props;
let children = _ref.children;
const traversals = childrenTraversals(option, children, traverse);
yield* (0, _utils.limitIterator)(traversals, props.limit);
}
exports.default = { visit: visit };