DashboardcraftCraft workspace discovery supports npm/…

Craft workspace discovery supports npm/yarn/pnpm uniformly

Category: pattern
Confidence: 1.00
ID: 019db1ee-c093-7663-8c7d-37c07fda211b
Project ID: e16af391-c497-4837-b681-c849a5514499
Cross-project: No
Recalled in other projects: 2
Source session: (none)
Created: 2026-07-28 10:15:42
Updated: 2026-07-28 10:15:42

Cross-Project Recalls

ProjectHitsLast recalled
opencode-lore 2 15h ago
cli 1 6d ago

Content

src/utils/workspaces.ts discoverWorkspaces(rootDir) returns {type: 'npm'|'yarn'|'pnpm'|'none', packages: WorkspacePackage[]}. Tries pnpm-workspace.yaml first (more specific), then package.json workspaces field (array or {packages: []} object form). npm vs yarn is distinguished by presence of yarn.lock. Each WorkspacePackage carries name, absolute location, private, hasPublicAccess (publishConfig.access === 'public'), and workspaceDependencies (deps that reference other workspace packages by name — across dependencies/peer/optional, not dev). NpmTarget.expand uses this to auto-generate per-package target configs, filters private packages, validates public→private deps, and topologically sorts via topologicalSortPackages (depth-based, detects cycles). Artifact filenames generated via packageNameToArtifactPattern or a user artifactTemplate with {{name}}/{{simpleName}}/{{version}}.

Move to: