Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 15x 15x 15x 38x 38x 38x 38x 38x 38x 15x | import { has } from '../../../utils'
import toposort from 'toposort'
import { split } from 'property-expr'
import Ref from '../Reference'
import isSchema from './isSchema'
export default function sortFields(fields, excludes = []) {
let edges = []
let 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])
}
for (const key in fields)
if (has(fields, key)) {
let value = fields[key]
if (!~nodes.indexOf(key)) nodes.push(key)
Iif (Ref.isRef(value) && value.isSibling) addNode(value.path, key)
else if (isSchema(value) && value._deps)
value._deps.forEach(path => addNode(path, key))
}
return toposort.array(nodes, edges).reverse()
}
|