vtils
Version:
一个面向业务的 JavaScript/TypeScript 实用程序库。
30 lines • 977 B
JavaScript
import { has } from "../../../utils/index.js";
import toposort from 'toposort';
import { split } from 'property-expr';
import Ref from "../Reference.js";
import isSchema from "./isSchema.js";
export default function sortFields(fields, excludes) {
if (excludes === void 0) {
excludes = [];
}
var edges = [];
var nodes = [];
function addNode(depPath, key) {
var node = split(depPath)[0];
if (!~nodes.indexOf(node)) nodes.push(node);
if (!~excludes.indexOf(key + "-" + node)) edges.push([key, node]);
}
var _loop = function _loop(key) {
if (has(fields, key)) {
var value = fields[key];
if (!~nodes.indexOf(key)) nodes.push(key);
if (Ref.isRef(value) && value.isSibling) addNode(value.path, key);else if (isSchema(value) && value._deps) value._deps.forEach(function (path) {
return addNode(path, key);
});
}
};
for (var key in fields) {
_loop(key);
}
return toposort.array(nodes, edges).reverse();
}