Update dependencies
This commit is contained in:
+23
-40
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Generated
+3
@@ -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": {
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user