UNPKG

@graffy/common

Version:

Common libraries that used by various Graffy modules.

187 lines (137 loc) 7.58 kB
"use strict"; var _sliceInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/slice"); var _Array$from = require("@babel/runtime-corejs3/core-js-stable/array/from"); var _Symbol2 = require("@babel/runtime-corejs3/core-js-stable/symbol"); var _getIteratorMethod = require("@babel/runtime-corejs3/core-js/get-iterator-method"); var _Array$isArray2 = require("@babel/runtime-corejs3/core-js-stable/array/is-array"); var _getIterator = require("@babel/runtime-corejs3/core-js/get-iterator"); var _bindInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/bind"); var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = graph; exports.ROOT_KEY = void 0; var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutPropertiesLoose")); var _symbol = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/symbol")); 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 _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce")); 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 _sort = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/sort")); var _entries = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/entries")); var _now = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/date/now")); var _index = require("../index.js"); var _index2 = require("../../path/index.js"); var _util = require("../../util.js"); var _index3 = require("../../ops/index.js"); var _finalize = _interopRequireDefault(require("./finalize.js")); var _testing = require("@graffy/testing"); function _createForOfIteratorHelperLoose(o, allowArrayLike) { var _context7; var it; if (typeof _Symbol2 === "undefined" || _getIteratorMethod(o) == null) { if (_Array$isArray2(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = _getIterator(o); return _bindInstanceProperty(_context7 = it.next).call(_context7, it); } function _unsupportedIterableToArray(o, minLen) { var _context6; if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = _sliceInstanceProperty(_context6 = Object.prototype.toString.call(o)).call(_context6, 8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return _Array$from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var ROOT_KEY = (0, _symbol.default)(); exports.ROOT_KEY = ROOT_KEY; function makeNode(object, key, ver, linked) { var _node$children; if (linked === void 0) { linked = []; } var _ref = object || {}, $key = _ref.$key, $ref = _ref.$ref, $ver = _ref.$ver, $val = _ref.$val, $put = _ref.$put, $err = _ref.$err, $opt = _ref.$opt, rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["$key", "$ref", "$ver", "$val", "$put", "$err", "$opt"]); if (!key && !$key) { throw Error("makeNode.no_key " + key + " " + (0, _stringify.default)($key)); } // if (key && $key) { // throw Error(`makeNode.key_mismatch ${key} ${JSON.stringify($key)}`); // } key = key || $key; var node = key === ROOT_KEY ? {} : (0, _index.encodeArgs)(key); node.version = ver; if (typeof $ver !== 'undefined') node.version = $ver; if (typeof $err !== 'undefined') node.error = $err; if (typeof $opt !== 'undefined') node.options = $opt; if (object === null || $val === null) { node.end = node.key; } else if ($val === true) { node.value = rest; } else if (typeof $val !== 'undefined') { node.value = $val; } else if ($ref) { node.path = (0, _index2.makePath)($ref); if (!(0, _util.isEmpty)(rest)) { linked.push((0, _index2.wrap)(makeNode(rest, key, node.version, linked).children, node.path, node.version)[0]); } } else if ((0, _isArray.default)(object)) { var _context, _context2; var children = (0, _reduce.default)(_context = (0, _filter.default)(_context2 = (0, _map.default)(object).call(object, function (obj) { return makeNode(obj, undefined, node.version, linked); })).call(_context2, Boolean)).call(_context, function (acc, node) { return (0, _index3.merge)(acc, [node]); }, []); 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, _sort.default)(_context3 = (0, _filter.default)(_context4 = (0, _map.default)(_context5 = (0, _entries.default)(rest)).call(_context5, function (_ref2) { var key = _ref2[0], obj = _ref2[1]; return makeNode(obj, key, node.version, linked); })).call(_context4, Boolean)).call(_context3, function (a, b) { return a.key <= b.key ? -1 : 1; }); if (_children.length) { node.children = _children; } else if (!node.end) { node.end = node.key; } } } else { node.value = object; } if ($put) { node.children = (0, _finalize.default)(node.children, $put === true ? null : (0, _map.default)($put).call($put, function (arg) { return (0, _index.encodeArgs)(arg); }), node.version); } // TODO: Uncomment to introduce version invariant. // if (typeof ver === 'undefined' && node.children?.length) { // const cver = node.children[0].version; // if ( // typeof cver !== undefined && // node.children.every(({ version }) => version === cver) // ) { // node.childen.forEach((child) => { // delete child.version; // }); // } // } if (key === ROOT_KEY) { node.children = node.children || []; for (var _iterator = _createForOfIteratorHelperLoose(linked), _step; !(_step = _iterator()).done;) { var linkedNode = _step.value; (0, _index3.merge)(node.children, [linkedNode]); } } if ((_node$children = node.children) != null && _node$children.length || typeof node.end !== 'undefined' || typeof node.value !== 'undefined' || typeof node.path !== 'undefined' || typeof node.error !== 'undefined') { return node; } } function graph(rootObject, version) { var _makeNode; if (version === void 0) { version = (0, _now.default)(); } if (typeof rootObject === 'undefined' || rootObject === null) { return rootObject; } return ((_makeNode = makeNode(rootObject, ROOT_KEY, version)) == null ? void 0 : _makeNode.children) || []; }