(packages = [], orderedPackages = [])
| 118 | * Determine the correct build order of a provided array of packages |
| 119 | */ |
| 120 | export function getBuildOrder(packages = [], orderedPackages = []) { |
| 121 | const packagesSet = new Set(packages) |
| 122 | let orderedPackagesSet = new Set(orderedPackages) |
| 123 | for (const pkg of packages) { |
| 124 | packagesSet.delete(pkg) |
| 125 | const dependencies = getPackageDependencies(pkg) |
| 126 | for (const dep of dependencies) { |
| 127 | if (!orderedPackagesSet.has(dep)) { |
| 128 | const nestedDeps = getBuildOrder([dep], [...orderedPackagesSet]) |
| 129 | orderedPackagesSet = new Set([...nestedDeps, dep]) |
| 130 | } |
| 131 | } |
| 132 | if (packagesSet && packages.size) { |
| 133 | return getBuildOrder(packages, orderedPackages) |
| 134 | } |
| 135 | orderedPackagesSet.add(pkg) |
| 136 | } |
| 137 | return [...orderedPackagesSet] |
| 138 | } |
| 139 | |
| 140 | /** |
| 141 | * build a dependency tree of packages. If the inverse argument is supplied |
no test coverage detected