Dashboard › craft › Craft workspace discovery supports npm/…
019db1ee-c093-7663-8c7d-37c07fda211b| Project | Hits | Last recalled |
|---|---|---|
| opencode-lore | 2 | 15h ago |
| cli | 1 | 6d ago |
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}}.