@graffy/common
Version:
Common libraries that used by various Graffy modules.
143 lines (120 loc) • 3.7 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
exports.__esModule = true;
exports.graph = graph;
exports.page = page;
exports.link = link;
exports.scalar = scalar;
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
var _now = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/date/now"));
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
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 _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
var _graph = require("../graph");
var _path = require("../path");
var _node = require("../node");
var _encode = require("../encode");
function makeGraph(key, value, version) {
if (typeof value === 'function') {
// This is a page or a link waiting for a version.
return value(key, version);
} else if ((0, _isArray.default)(value)) {
var _context;
// Convert the KV-tuple format to a graph
return {
key: key,
version: version,
children: (0, _sort.default)(_context = (0, _map.default)(value).call(value, function (_ref) {
var k = _ref.key,
name = _ref.name,
v = _ref.value,
children = _ref.children,
path = _ref.path;
return makeGraph(name || (0, _encode.encodeKey)(k), children || path && link(path) || v && scalar(v), version);
})).call(_context, function (a, b) {
return a.key <= b.key ? -1 : 1;
})
};
} else if (value === null) {
// This is a single key known to be missing.
return {
key: key,
end: key,
version: version
};
} else if (typeof value === 'object' && value) {
var _context2, _context3;
return {
key: key,
version: version,
children: (0, _map.default)(_context2 = (0, _sort.default)(_context3 = (0, _keys.default)(value)).call(_context3)).call(_context2, function (k) {
return makeGraph(k, value[k], version);
})
};
} else {
return {
key: key,
version: version,
value: value
};
}
}
function graph(obj, version) {
if (version === void 0) {
version = (0, _now.default)();
}
// console.log('makeGraph called with', obj);
if (!obj) return obj;
return makeGraph('', obj, version).children;
}
function page(obj, key, end) {
if (key === void 0) {
key = '';
}
if (end === void 0) {
end = "\uFFFF";
}
return function (outerKey, version) {
var _context4, _context5;
var nodes = graph(obj, version);
var gaps = (0, _filter.default)(_context4 = (0, _graph.merge)([{
key: key,
end: end,
version: version
}], (0, _map.default)(_context5 = (0, _keys.default)(obj)).call(_context5, function (key) {
return {
key: key,
value: 1,
version: version
};
}))).call(_context4, function (node) {
return (0, _node.isRange)(node);
});
var children = (0, _graph.merge)(nodes, gaps);
return {
key: outerKey,
version: version,
children: children
};
};
}
function link(rawPath) {
var path = (0, _path.makePath)(rawPath);
return function (key, version) {
return {
key: key,
version: version,
path: path
};
};
}
function scalar(value) {
return function (key, version) {
return {
key: key,
version: version,
value: value
};
};
}