UNPKG

@graffy/common

Version:

Common libraries that used by various Graffy modules.

68 lines (55 loc) 2.08 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; import { encodeArgs } from '../index.js'; export var ROOT_KEY = Symbol(); // 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 Object.freeze(obj); }; function makeNode(object, key, ver) { var _node$children; if (!object) return; var $key = object.$key, $opt = object.$opt, rest = _objectWithoutPropertiesLoose(object, ["$key", "$opt"]); if (!key && !$key) { throw Error("makeNode.no_key " + key + " " + JSON.stringify($key)); } key = key || $key; var node = key === ROOT_KEY ? {} : encodeArgs(Array.isArray(key) ? { $cursor: key } : key); node.version = ver; if (Array.isArray(object)) { var children = object.map(function (obj) { return makeNode(obj, undefined, ver); }).filter(Boolean).sort(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 _children = Object.keys(rest).sort().map(function (key) { return freeze(_extends({ key: key }, makeNode(object[key], key, ver))); }).filter(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); } } export default function query(obj, version) { var _makeNode; if (version === void 0) { version = 0; } return ((_makeNode = makeNode(obj, ROOT_KEY, version)) == null ? void 0 : _makeNode.children) || []; }