Files
welshman/get_packages.py
T
2024-08-21 12:02:34 -07:00

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()