Files
Aislo/tools/est-test/jdl-unit-order.cjs
T

33 lines
1.0 KiB
JavaScript

function orderUnits(titles, groups) {
const byCode = new Map(titles.filter((title) => title.Code).map((title) => [title.Code, title]));
const state = new Map(),
ordered = [];
for (const title of titles) {
if (!title.Code || state.has(title.Code)) continue;
const stack = [{ title, expanded: false }];
while (stack.length) {
const item = stack.pop(),
code = item.title.Code;
if (item.expanded) {
state.set(code, 2);
ordered.push(item.title);
continue;
}
if (state.has(code)) continue;
state.set(code, 1);
stack.push({ title: item.title, expanded: true });
for (const row of groups.get(code) || []) {
const dependency =
!(row.JdlSummary && Number(row.CalcIndex) === 1) &&
Number(row.LinkIndex) === 103 &&
byCode.get(row.Code);
if (dependency && !state.has(dependency.Code))
stack.push({ title: dependency, expanded: false });
}
}
}
return ordered;
}
module.exports = { orderUnits };