UNPKG

@graffy/common

Version:

Common libraries that used by various Graffy modules.

100 lines (71 loc) 3.56 kB
"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) || []; }