@graffy/common
Version:
Common libraries that used by various Graffy modules.
100 lines (71 loc) • 3.56 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = query;
exports.ROOT_KEY = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutPropertiesLoose"));
var _symbol = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/symbol"));
var _freeze = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/freeze"));
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/json/stringify"));
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
var _sort = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/sort"));
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
var _index = require("../index.js");
var ROOT_KEY = (0, _symbol.default)(); // We freeze constructed queries to guard against bugs that might mutate them.
// TODO: Don't freeze in production builds, as a perf optimization.
exports.ROOT_KEY = ROOT_KEY;
var freeze = function freeze(obj) {
return (0, _freeze.default)(obj);
};
function makeNode(object, key, ver) {
var _node$children;
if (!object) return;
var $key = object.$key,
$opt = object.$opt,
rest = (0, _objectWithoutPropertiesLoose2.default)(object, ["$key", "$opt"]);
if (!key && !$key) {
throw Error("makeNode.no_key " + key + " " + (0, _stringify.default)($key));
}
key = key || $key;
var node = key === ROOT_KEY ? {} : (0, _index.encodeArgs)((0, _isArray.default)(key) ? {
$cursor: key
} : key);
node.version = ver;
if ((0, _isArray.default)(object)) {
var _context, _context2;
var children = (0, _sort.default)(_context = (0, _filter.default)(_context2 = (0, _map.default)(object).call(object, function (obj) {
return makeNode(obj, undefined, ver);
})).call(_context2, Boolean)).call(_context, function (a, b) {
return a.key <= b.key ? -1 : 1;
});
if (children.length) node.children = children;
} else if (typeof object === 'object') {
if ($key && key !== $key) {
node.children = [makeNode(object, undefined, ver)];
} else {
var _context3, _context4, _context5;
var _children = (0, _filter.default)(_context3 = (0, _map.default)(_context4 = (0, _sort.default)(_context5 = (0, _keys.default)(rest)).call(_context5)).call(_context4, function (key) {
return freeze((0, _extends2.default)({
key: key
}, makeNode(object[key], key, ver)));
})).call(_context3, Boolean);
if (_children.length) node.children = _children;
}
} else {
node.value = typeof object === 'number' ? object : 1;
}
if (typeof node.end !== 'undefined' && !node.children) node.value = 1;
if ((_node$children = node.children) != null && _node$children.length || typeof node.value !== 'undefined') {
return freeze(node);
}
}
function query(obj, version) {
var _makeNode;
if (version === void 0) {
version = 0;
}
return ((_makeNode = makeNode(obj, ROOT_KEY, version)) == null ? void 0 : _makeNode.children) || [];
}