46 lines
1.2 KiB
Python
Executable File
46 lines
1.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import json
|
|
|
|
def get_deps(package):
|
|
with open(os.path.join('packages', package, 'package.json'), 'r') as f:
|
|
package_data = json.load(f)
|
|
|
|
dependencies = set()
|
|
for dep_type in ['dependencies', 'devDependencies', 'peerDependencies']:
|
|
if dep_type in package_data:
|
|
dependencies.update(package_data[dep_type].keys())
|
|
|
|
return [
|
|
dep.replace('@welshman/', '')
|
|
for dep in dependencies
|
|
if dep.startswith('@welshman/')
|
|
]
|
|
|
|
def main():
|
|
sorted_packages = []
|
|
remaining_packages = {}
|
|
for package in os.listdir('packages'):
|
|
deps = get_deps(package)
|
|
|
|
if not deps:
|
|
sorted_packages.append(package)
|
|
else:
|
|
remaining_packages[package] = deps
|
|
|
|
while remaining_packages:
|
|
for package, deps in remaining_packages.items():
|
|
if all([dep in sorted_packages for dep in deps]):
|
|
sorted_packages.append(package)
|
|
|
|
for package in sorted_packages:
|
|
if package in remaining_packages:
|
|
del remaining_packages[package]
|
|
|
|
for package in sorted_packages:
|
|
print(package)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|