UNPKG

@graffy/common

Version:

Common libraries that used by various Graffy modules.

74 lines (56 loc) 2.5 kB
"use strict"; 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; }