On this page
Layer configuration loading and validation for monorepo architectural rules.
#rlsbl.layers
#rlsbl.layers
Layer configuration loading and validation for monorepo architectural rules.
Reads the [layers] section from workspace.toml and provides utilities for resolving package-to-layer assignments and validating that every workspace project is assigned to exactly one layer.
#LayerConfig
| Field | Type | Default |
|---|---|---|
order | list[str] | |
assignments | dict[str, list[str]] | |
unrestricted | list[str] | field(default_factory=list) |
forbidden_targets | list[str] | field(default_factory=list) |
allow | list[dict[str, str]] | field(default_factory=list) |
#load_layer_config
def load_layer_config(root: str) -> LayerConfig | NoneRead the [layers] section from workspace.toml.
Returns None if the file has no [layers] section. Raises ValueError on invalid structure. Raises FileNotFoundError if workspace.toml doesn't exist.
#_validate_string_list
def _validate_string_list(parent: dict, key: str, context: str) -> list[str]Validate and return an optional list-of-strings field.
#resolve_package_layer
def resolve_package_layer(name: str, config: LayerConfig) -> str | NoneResolve which layer a package belongs to based on assignment globs.
Returns the layer name if matched, None if unassigned.
#check_layer_violations
def check_layer_violations(projects: list[dict], config: LayerConfig, graph) -> list[str]Check dependency edges for layer violations.
Returns a list of violation strings (empty means all good). The graph argument is a WorkspaceGraph instance.
#_is_explicitly_allowed
def _is_explicitly_allowed(source: str, target: str, allow: list[dict[str, str]]) -> boolCheck if an edge is explicitly allowed by an override rule.
#validate_layer_assignments
def validate_layer_assignments(projects: list[dict], config: LayerConfig) -> list[str]Validate that every project is assigned to exactly one layer.
Returns a list of error messages (empty means valid).