UNPKG

@graffy/common

Version:

Common libraries that used by various Graffy modules.

136 lines (113 loc) 5.19 kB
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(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 = o[Symbol.iterator](); return it.next.bind(it); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(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; } import { encodeArgs } from '../index.js'; import { makePath, wrap } from '../../path/index.js'; import { isEmpty } from '../../util.js'; import { merge } from '../../ops/index.js'; import finalize from './finalize.js'; import { format } from '@graffy/testing'; export var ROOT_KEY = Symbol(); 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 = _objectWithoutPropertiesLoose(_ref, ["$key", "$ref", "$ver", "$val", "$put", "$err", "$opt"]); if (!key && !$key) { throw Error("makeNode.no_key " + key + " " + JSON.stringify($key)); } // if (key && $key) { // throw Error(`makeNode.key_mismatch ${key} ${JSON.stringify($key)}`); // } key = key || $key; var node = key === ROOT_KEY ? {} : 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 = makePath($ref); if (!isEmpty(rest)) { linked.push(wrap(makeNode(rest, key, node.version, linked).children, node.path, node.version)[0]); } } else if (Array.isArray(object)) { var children = object.map(function (obj) { return makeNode(obj, undefined, node.version, linked); }).filter(Boolean).reduce(function (acc, node) { return 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 _children = Object.entries(rest).map(function (_ref2) { var key = _ref2[0], obj = _ref2[1]; return makeNode(obj, key, node.version, linked); }).filter(Boolean).sort(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 = finalize(node.children, $put === true ? null : $put.map(function (arg) { return 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; 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; } } export default function graph(rootObject, version) { var _makeNode; if (version === void 0) { version = Date.now(); } if (typeof rootObject === 'undefined' || rootObject === null) { return rootObject; } return ((_makeNode = makeNode(rootObject, ROOT_KEY, version)) == null ? void 0 : _makeNode.children) || []; }