hz-zhhq-web/node_modules/yup/lib/util/sortFields.js

45 lines
1.3 KiB
JavaScript

"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = sortFields;
var _has = _interopRequireDefault(require("lodash/has"));
var _toposort = _interopRequireDefault(require("toposort"));
var _propertyExpr = require("property-expr");
var _Reference = _interopRequireDefault(require("../Reference"));
var _isSchema = _interopRequireDefault(require("./isSchema"));
function sortFields(fields, excludes) {
if (excludes === void 0) {
excludes = [];
}
var edges = [],
nodes = [];
function addNode(depPath, key) {
var node = (0, _propertyExpr.split)(depPath)[0];
if (!~nodes.indexOf(node)) nodes.push(node);
if (!~excludes.indexOf(key + "-" + node)) edges.push([key, node]);
}
for (var key in fields) {
if ((0, _has.default)(fields, key)) {
var value = fields[key];
if (!~nodes.indexOf(key)) nodes.push(key);
if (_Reference.default.isRef(value) && !value.isContext) addNode(value.path, key);else if ((0, _isSchema.default)(value) && value._deps) value._deps.forEach(function (path) {
return addNode(path, key);
});
}
}
return _toposort.default.array(nodes, edges).reverse();
}
module.exports = exports["default"];