@graffy/common
Version:
Common libraries that used by various Graffy modules.
74 lines (56 loc) • 2.5 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
exports.__esModule = true;
exports.query = query;
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
var _sort = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/sort"));
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
var _freeze = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/freeze"));
var _encode = require("../encode");
var _graph = require("../graph");
var FALLBACK_PAGE_SIZE = 4096;
function pageToRange(page) {
var node = {};
node.key = typeof page.after !== 'undefined' ? (0, _encode.key)(page.after) : '';
node.end = typeof page.before !== 'undefined' ? (0, _encode.key)(page.before) : "\uFFFF";
node.count = page.first || -page.last || FALLBACK_PAGE_SIZE;
if (page.excludeAfter) node.key = (0, _graph.keyAfter)(node.key);
if (page.excludeBefore) node.end = (0, _graph.keyBefore)(node.end);
return node;
} // We freeze constructed queries to guard against bugs that might mutate them.
// TODO: Don't freeze in production builds, as a perf optimization.
var freeze = function freeze(obj) {
return (0, _freeze["default"])(obj);
};
function makeQuery(value, version) {
if ((0, _isArray["default"])(value)) {
if (value.length === 1) value.unshift({});
return freeze({
children: freeze([freeze((0, _extends2["default"])({}, pageToRange(value[0]), {}, makeQuery(value[1], version)))]),
version: version
});
} else if (typeof value === 'object' && value) {
var _context, _context2;
return freeze({
version: version,
children: freeze((0, _map["default"])(_context = (0, _sort["default"])(_context2 = (0, _keys["default"])(value)).call(_context2)).call(_context, function (key) {
return freeze((0, _extends2["default"])({
key: key
}, makeQuery(value[key], version)));
}))
});
} else {
return freeze({
version: version,
value: typeof value === 'number' ? value : 1
});
}
}
function query(obj, version) {
if (version === void 0) {
version = 0;
}
return makeQuery(obj, version).children;
}