UNPKG

fixturio

Version:
39 lines (38 loc) 1.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.dependencyResolver = void 0; function dependencyResolver(input) { const keyMap = {}; const result = []; input.forEach((node) => { if (keyMap[node.key]) { throw new Error(`Duplicate key found: ${node.key}`); } keyMap[node.key] = node; }); const visit = (key, ancestors) => { if (ancestors.has(key) === true) { throw new Error(`Circular dependency detected: ${[...ancestors, key].join(' -> ')}`); } const node = keyMap[key]; if (node === undefined) { throw new Error(`Dependency not found: ${key}`); } ancestors.add(key); if (new Set(node.dependencies).size !== node.dependencies.length) { throw new Error(`Dependencies are not unique for key: ${key}`); } for (const dependency of node.dependencies) { visit(dependency, ancestors); } ancestors.delete(key); if (result.includes(key) === false) { result.push(key); } }; for (const key of Object.keys(keyMap)) { visit(key, new Set()); } return result; } exports.dependencyResolver = dependencyResolver;