@graffy/common
Version:
Common libraries that used by various Graffy modules.
187 lines (137 loc) • 7.58 kB
JavaScript
"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) || [];
}