Create a pnpm member from a supported workspace-member template.
Source code in repo_scaffold/workspace_member/providers/pnpm.py
| def add_pnpm_member(spec: WorkspaceMemberSpec) -> None:
"""Create a pnpm member from a supported workspace-member template."""
if spec.member_type not in _SUPPORTED_TYPES:
raise click.ClickException(
f"Unsupported pnpm member type '{spec.member_type}'. "
"Supported types: ts-lib, ts-cli, react-app, vue-app, react-lib, "
"node-service, electron-app."
)
if spec.member_path.exists():
raise click.ClickException(
f"❌ {spec.member_path.relative_to(spec.project_path)} already exists"
)
workspace_file = spec.project_path / "pnpm-workspace.yaml"
cog_file = spec.project_path / "cog.toml"
tsconfig_base_file = spec.project_path / "tsconfig.base.json"
workspace_backup = workspace_file.read_bytes()
cog_backup = cog_file.read_bytes() if cog_file.exists() else None
tsconfig_backup = tsconfig_base_file.read_bytes() if tsconfig_base_file.exists() else None
_ensure_workspace_glob(spec)
if spec.dry_run:
click.echo(
f"Would create pnpm {spec.member_type}: "
f"{spec.member_path.relative_to(spec.project_path)}"
)
click.echo(f"Would register package: {spec.package_name}")
return
spec.member_path.parent.mkdir(parents=True, exist_ok=True)
try:
if not tsconfig_base_file.exists():
tsconfig_base_file.write_text(_default_tsconfig_base(), encoding="utf-8")
cookiecutter(
template=str(_template_path(spec.member_type)),
output_dir=str(spec.member_path.parent),
no_input=True,
extra_context=_template_context(spec),
)
_add_workspace_dependencies(spec)
register_cog_member(spec)
if not spec.no_install:
subprocess.check_call(["pnpm", "install"], cwd=str(spec.project_path))
if not spec.no_verify:
_verify(spec)
except Exception:
if spec.member_path.exists():
shutil.rmtree(spec.member_path)
workspace_file.write_bytes(workspace_backup)
if tsconfig_backup is None:
if tsconfig_base_file.exists():
tsconfig_base_file.unlink()
else:
tsconfig_base_file.write_bytes(tsconfig_backup)
if cog_backup is None:
if cog_file.exists():
cog_file.unlink()
else:
cog_file.write_bytes(cog_backup)
raise
click.echo(f"✅ pnpm member '{spec.package_name}' added.")
|