nixpkgs/pkgs/build-support/dart/build-dart-application/workspace-package-config.py

43 lines
1.5 KiB
Python

import json
import re
from pathlib import Path
import yaml
def main() -> None:
with Path("pubspec.yaml").open("r", encoding="utf-8") as f:
pubspec = yaml.load(f, Loader=yaml.CSafeLoader)
if not pubspec.get("workspace"):
return
with Path(".dart_tool/package_config.json").open("r", encoding="utf-8") as f:
package_config = json.load(f)
for package_path in pubspec.get("workspace", []):
with (Path(package_path) / "pubspec.yaml").open("r", encoding="utf-8") as f:
package_pubspec = yaml.load(f, Loader=yaml.CSafeLoader)
m = re.match(
r"^[ \t]*(\^|>=|>)?[ \t]*([0-9]+\.[0-9]+)\.[0-9]+.*$",
package_pubspec.get("environment", {}).get("sdk", ""),
)
if m:
languageVersion = m.group(2)
elif package_pubspec.get("environment", {}).get("sdk") == "any":
languageVersion = "null"
else:
languageVersion = "2.7"
if not any(
pkg["name"] == package_pubspec["name"] for pkg in package_config["packages"]
):
package_config["packages"].append({
"name": package_pubspec["name"],
"rootUri": Path(package_path).resolve().as_uri(),
"packageUri": "lib/",
"languageVersion": languageVersion,
})
with Path(".dart_tool/package_config.json").open("w", encoding="utf-8") as f:
json.dump(package_config, f, sort_keys=True, indent=4)
if __name__ == "__main__":
main()