Skip to main content

DependencyResolver

Trait DependencyResolver 

Source
pub trait DependencyResolver {
    // Required methods
    fn resolve_dependencies(
        &self,
        workspace: &Workspace,
        lockfile: &[LockfileEntry],
    ) -> Result<DependencyGraph>;
    fn resolve_workspace_deps(
        &self,
        workspace: &Workspace,
    ) -> Result<Vec<DependencyRef>>;
    fn resolve_external_deps(
        &self,
        lockfile: &[LockfileEntry],
    ) -> Result<Vec<DependencyRef>>;
    fn detect_workspace_protocol(&self, spec: &str) -> bool;
}
Expand description

Builds dependency graphs from workspace and lockfile data.

This trait combines workspace-internal dependencies (workspace protocol references) with external dependencies from lockfiles to build a complete dependency graph.

§Example

use cuenv_workspaces::{DependencyResolver, Workspace, LockfileEntry};

struct NpmDependencyResolver;

impl DependencyResolver for NpmDependencyResolver {
    fn resolve_dependencies(
        &self,
        workspace: &Workspace,
        lockfile: &[LockfileEntry],
    ) -> Result<DependencyGraph> {
        // Build graph with both workspace and external dependencies
        todo!()
    }

    fn resolve_workspace_deps(&self, workspace: &Workspace) -> Result<Vec<DependencyRef>> {
        // Find dependencies using "workspace:*" protocol
        todo!()
    }

    fn resolve_external_deps(&self, lockfile: &[LockfileEntry]) -> Result<Vec<DependencyRef>> {
        // Extract all external dependencies from lockfile
        todo!()
    }

    fn detect_workspace_protocol(&self, spec: &str) -> bool {
        spec.starts_with("workspace:")
    }
}

Required Methods§

Source

fn resolve_dependencies( &self, workspace: &Workspace, lockfile: &[LockfileEntry], ) -> Result<DependencyGraph>

Builds a complete dependency graph from workspace and lockfile data.

The graph should include:

  • Workspace members as nodes
  • Workspace-internal dependencies (workspace protocol)
  • External dependencies from the lockfile
  • Edges representing dependency relationships
§Errors

Returns an error if:

  • Dependencies cannot be resolved
  • Circular dependencies are detected (if validation is enabled)
  • Required dependencies are missing from the lockfile
Source

fn resolve_workspace_deps( &self, workspace: &Workspace, ) -> Result<Vec<DependencyRef>>

Resolves workspace-internal dependencies.

These are dependencies that reference other workspace members using package manager-specific protocols:

  • npm/pnpm/Yarn: "workspace:*", "workspace:^", etc.
  • Cargo: { workspace = true }
§Errors

Returns an error if workspace dependencies cannot be resolved.

Source

fn resolve_external_deps( &self, lockfile: &[LockfileEntry], ) -> Result<Vec<DependencyRef>>

Resolves external dependencies from lockfile entries.

Extracts all non-workspace dependencies from the lockfile.

§Errors

Returns an error if dependencies cannot be extracted or validated.

Source

fn detect_workspace_protocol(&self, spec: &str) -> bool

Detects if a dependency specification uses the workspace protocol.

§Examples
  • npm/pnpm/Yarn: "workspace:*"true
  • Cargo: Requires parsing TOML to check workspace = true
  • Regular semver: "^1.0.0"false

Implementors§