@graffy/common
Version:
Common libraries that used by various Graffy modules.
97 lines (75 loc) • 2.55 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
exports.__esModule = true;
exports["default"] = decorateQuery;
var _getIterator2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/get-iterator"));
var _isArray3 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
var _some = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/some"));
var _node = require("../node");
function rangeToPage(key, end, count) {
var page = {};
page[count > 0 ? 'first' : 'last'] = count;
if (key !== '') page.after = key;
if (end !== "\uFFFF") page.before = end;
return page;
}
function decorateQuery(query) {
var result = decorateChildren(query);
return result;
}
function decorateChildren(query) {
var isPage = (0, _some["default"])(query).call(query, function (node) {
return (0, _node.isRange)(node);
});
if (isPage) {
return decoratePage(query);
} else {
return decorateBranch(query);
}
}
function decoratePage(query) {
var result = [];
for (var _iterator = query, _isArray = (0, _isArray3["default"])(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator2["default"])(_iterator);;) {
var _ref;
if (_isArray) {
if (_i >= _iterator.length) break;
_ref = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
_ref = _i.value;
}
var node = _ref;
var child = (0, _node.isBranch)(node) ? decorateChildren(node.children) : true;
if ((0, _node.isRange)(node)) {
var key = node.key,
end = node.end,
count = node.count;
result.push(rangeToPage(key, end, count), child);
} else {
var _key = node.key;
result.push(rangeToPage(_key, _key, 1), child);
}
}
return result;
}
function decorateBranch(query) {
var result = {};
for (var _iterator2 = query, _isArray2 = (0, _isArray3["default"])(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator2["default"])(_iterator2);;) {
var _ref2;
if (_isArray2) {
if (_i2 >= _iterator2.length) break;
_ref2 = _iterator2[_i2++];
} else {
_i2 = _iterator2.next();
if (_i2.done) break;
_ref2 = _i2.value;
}
var node = _ref2;
var child = (0, _node.isBranch)(node) ? decorateChildren(node.children) : true;
var key = node.key;
result[key] = child;
}
return result;
}
module.exports = exports.default;