44 lines
1.7 KiB
Python
44 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
"""Query the generated organization design registry by surface/pattern/state."""
|
|
import argparse
|
|
import json
|
|
import os
|
|
import sys
|
|
|
|
HERE = os.path.dirname(os.path.abspath(__file__))
|
|
ROOT = os.environ.get("CLAUDE_PROJECT_DIR") or os.path.dirname(os.path.dirname(HERE))
|
|
REGISTRY = os.path.join(ROOT, "org-os", "08-design", "generated", "registry.json")
|
|
|
|
|
|
def main(argv=None):
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--surface")
|
|
parser.add_argument("--pattern")
|
|
parser.add_argument("--state", choices=["experimental", "candidate", "stable", "deprecated"])
|
|
args = parser.parse_args(argv)
|
|
try:
|
|
with open(REGISTRY, encoding="utf-8") as handle:
|
|
registry = json.load(handle)
|
|
except Exception as exc:
|
|
print(f"design registry unavailable; run compile_design_system.py: {exc}", file=sys.stderr)
|
|
return 2
|
|
result = {"current-release": registry.get("current-release")}
|
|
for collection in ("components", "patterns", "page-archetypes"):
|
|
values = registry.get(collection, [])
|
|
if args.surface:
|
|
values = [item for item in values if args.surface in (item.get("surfaces") or [])]
|
|
if args.state:
|
|
values = [item for item in values if item.get("state") == args.state]
|
|
if args.pattern:
|
|
values = [item for item in values if (
|
|
item.get("id") == args.pattern
|
|
or args.pattern in (item.get("patterns") or [])
|
|
or args.pattern in (item.get("components") or []))]
|
|
result[collection] = values
|
|
print(json.dumps(result, ensure_ascii=False, indent=2))
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|