Update dependencies

This commit is contained in:
Jon Staab
2024-08-21 12:02:34 -07:00
parent 18d7cf279c
commit fcbaa67ade
4 changed files with 29 additions and 40 deletions
+23 -40
View File
@@ -2,59 +2,42 @@
import os import os
import json import json
from collections import defaultdict
def parse_package_json(file_path): def get_deps(package):
with open(file_path, 'r') as f: with open(os.path.join('packages', package, 'package.json'), 'r') as f:
return json.load(f) package_data = json.load(f)
def get_dependencies(package_data):
dependencies = set() dependencies = set()
for dep_type in ['dependencies', 'devDependencies', 'peerDependencies']: for dep_type in ['dependencies', 'devDependencies', 'peerDependencies']:
if dep_type in package_data: if dep_type in package_data:
dependencies.update(package_data[dep_type].keys()) dependencies.update(package_data[dep_type].keys())
return dependencies
def topological_sort(graph): return [
visited = set() dep.replace('@welshman/', '')
stack = [] for dep in dependencies
if dep.startswith('@welshman/')
def dfs(node): ]
visited.add(node)
for neighbor in graph[node]:
if neighbor not in visited:
dfs(neighbor)
stack.append(node)
for node in graph:
if node not in visited:
dfs(node)
return stack[::-1]
def main(): def main():
packages_dir = 'packages' sorted_packages = []
package_graph = defaultdict(set) remaining_packages = {}
all_packages = set() for package in os.listdir('packages'):
deps = get_deps(package)
# Walk through the packages directory if not deps:
for package_name in os.listdir(packages_dir): sorted_packages.append(package)
package_path = os.path.join(packages_dir, package_name) else:
if os.path.isdir(package_path): remaining_packages[package] = deps
package_json_path = os.path.join(package_path, 'package.json')
if os.path.exists(package_json_path):
all_packages.add(package_name)
package_data = parse_package_json(package_json_path)
dependencies = get_dependencies(package_data)
# Only consider dependencies that are in the packages directory while remaining_packages:
internal_dependencies = dependencies.intersection(all_packages) for package, deps in remaining_packages.items():
package_graph[package_name].update(internal_dependencies) if all([dep in sorted_packages for dep in deps]):
sorted_packages.append(package)
# Perform topological sort for package in sorted_packages:
sorted_packages = topological_sort(package_graph) if package in remaining_packages:
del remaining_packages[package]
# Output the result
for package in sorted_packages: for package in sorted_packages:
print(package) print(package)
+3
View File
@@ -3341,6 +3341,7 @@
"version": "0.0.15", "version": "0.0.15",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@welshman/lib": "0.0.15",
"@welshman/util": "0.0.27" "@welshman/util": "0.0.27"
}, },
"devDependencies": { "devDependencies": {
@@ -3410,6 +3411,8 @@
"version": "0.0.3", "version": "0.0.3",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@welshman/lib": "0.0.15",
"@welshman/util": "0.0.27",
"svelte": "^4.2.18" "svelte": "^4.2.18"
}, },
"devDependencies": { "devDependencies": {
+1
View File
@@ -31,6 +31,7 @@
"typescript": "~5.1.6" "typescript": "~5.1.6"
}, },
"dependencies": { "dependencies": {
"@welshman/lib": "0.0.15",
"@welshman/util": "0.0.27" "@welshman/util": "0.0.27"
} }
} }
+2
View File
@@ -31,6 +31,8 @@
"typescript": "~5.1.6" "typescript": "~5.1.6"
}, },
"dependencies": { "dependencies": {
"@welshman/lib": "0.0.15",
"@welshman/util": "0.0.27",
"svelte": "^4.2.18" "svelte": "^4.2.18"
} }
} }