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 };