Skip to content

models

repo_scaffold.workspace_member.models

Models and validation shared by workspace-member providers.

WorkspaceEcosystem

Bases: StrEnum

Supported workspace package managers.

WorkspaceMemberSpec dataclass

WorkspaceMemberSpec(
    project_path: Path,
    name: str,
    ecosystem: WorkspaceEcosystem,
    member_type: str,
    location: str,
    scope: str | None,
    private: bool,
    public_api: bool,
    depends_on: tuple[str, ...],
    no_install: bool,
    no_verify: bool,
    dry_run: bool,
)

One member to add to an existing workspace.

member_path property

member_path: Path

Return the absolute destination directory.

package_name property

package_name: str

Return the package-manager-facing name for pnpm members.

validate_member_name

validate_member_name(name: str) -> None

Reject names that could escape a workspace member directory.

Source code in repo_scaffold/workspace_member/models.py
def validate_member_name(name: str) -> None:
    """Reject names that could escape a workspace member directory."""
    if not _MEMBER_NAME.fullmatch(name):
        raise click.ClickException(
            "Member name must be lowercase kebab-case (letters, digits, and hyphens only)."
        )

validate_scope

validate_scope(scope: str | None) -> None

Validate an optional npm scope.

Source code in repo_scaffold/workspace_member/models.py
def validate_scope(scope: str | None) -> None:
    """Validate an optional npm scope."""
    if scope is not None and not _NPM_SCOPE.fullmatch(scope):
        raise click.ClickException("Scope must be an npm scope such as '@fastpma'.")