@vltpkg/graph.ideal
Build the ideal dependency graph representing the desired
node_modules state.
USAGE
import { ideal } from '@vltpkg/graph'import { PackageInfoClient } from '@vltpkg/package-info'import { PackageJson } from '@vltpkg/package-json'import { RollbackRemove } from '@vltpkg/rollback-remove'import { PathScurry } from 'path-scurry'
const graph = await ideal.build({ projectRoot: '/path/to/project', packageInfo: new PackageInfoClient({ cache }), packageJson: new PackageJson(), scurry: new PathScurry(projectRoot), remover: new RollbackRemove(), // Optional: add/remove dependencies add, // AddImportersDependenciesMap remove, // RemoveImportersDependenciesMap // Optional: pass actual graph for early extraction actual,})Behavior
- Loads starting graph from
vlt-lock.json(preferred) ornode_modules - Merges
add/removewith importer manifest deltas - Fetches manifests in parallel (breadth-first)
- Reuses existing nodes that satisfy specs
- Handles peer dependency context isolation
- Optionally extracts tarballs during build (early extraction)
Add/Remove Maps
// Add dependencies to importersconst add: AddImportersDependenciesMap = new Map([ ['file·.', new Map([['lodash', { spec, type: 'prod' }]])],])
// Remove dependencies from importersconst remove: RemoveImportersDependenciesMap = new Map([ ['file·.', new Set(['unwanted-dep'])],])