elliptical
Version:
Interactive natural-language interfaces
146 lines (113 loc) • 4.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _utils = require('../utils');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _marked = [optionsFromRawOutputs, visit].map(_regenerator2.default.mark);
function handleAdditions(output, plural, singular, start, end) {
var theseAdditions = output[singular] ? [output[singular]] : output[plural];
if (theseAdditions) {
return (0, _defineProperty3.default)({}, plural, _lodash2.default.map(theseAdditions, function (value) {
return { value: value, start: start, end: end };
}));
} else {
return {};
}
}
function modifyOption(option, rawOutput) {
var start = option.words.length;
var words = option.words.concat(rawOutput.words);
var end = words.length;
return _lodash2.default.assign({}, option, {
result: rawOutput.result,
text: rawOutput.remaining,
score: rawOutput.score || 1,
words: words
}, handleAdditions(rawOutput, 'categories', 'category', start, end), handleAdditions(rawOutput, 'arguments', 'argument', start, end), handleAdditions(rawOutput, 'annotations', 'annotation', start, end), handleAdditions(rawOutput, 'qualifiers', 'qualifier', start, end), rawOutput.data ? { data: _lodash2.default.concat(option.data, [rawOutput.data]) } : {});
}
function optionsFromRawOutputs(option, rawOutputs) {
var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, rawOutput;
return _regenerator2.default.wrap(function optionsFromRawOutputs$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_iteratorNormalCompletion = true;
_didIteratorError = false;
_iteratorError = undefined;
_context.prev = 3;
_iterator = rawOutputs[Symbol.iterator]();
case 5:
if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {
_context.next = 12;
break;
}
rawOutput = _step.value;
_context.next = 9;
return modifyOption(option, rawOutput);
case 9:
_iteratorNormalCompletion = true;
_context.next = 5;
break;
case 12:
_context.next = 18;
break;
case 14:
_context.prev = 14;
_context.t0 = _context['catch'](3);
_didIteratorError = true;
_iteratorError = _context.t0;
case 18:
_context.prev = 18;
_context.prev = 19;
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
case 21:
_context.prev = 21;
if (!_didIteratorError) {
_context.next = 24;
break;
}
throw _iteratorError;
case 24:
return _context.finish(21);
case 25:
return _context.finish(18);
case 26:
case 'end':
return _context.stop();
}
}
}, _marked[0], this, [[3, 14, 18, 26], [19,, 21, 25]]);
}
function visit(option, _ref2) {
var props = _ref2.props;
var rawOutputs, outputs;
return _regenerator2.default.wrap(function visit$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (props.func) {
_context2.next = 2;
break;
}
return _context2.abrupt('return');
case 2:
rawOutputs = props.func(option);
outputs = optionsFromRawOutputs(option, rawOutputs);
return _context2.delegateYield((0, _utils.limitIterator)(outputs, props.limit), 't0', 5);
case 5:
case 'end':
return _context2.stop();
}
}
}, _marked[1], this);
}
exports.default = { visit: visit };