refactor: always send projects array to agent, remove legacy single-project fields

This commit is contained in:
Zoltan Kochan
2026-04-14 21:47:29 +02:00
parent 62d43ced56
commit 08feef90a5
3 changed files with 28 additions and 12 deletions

View File

@@ -63,12 +63,14 @@ export async function fetchFromPnpmRegistry (
): Promise<FetchFromPnpmRegistryResult> {
const storeIntegrities = readStoreIntegrities(opts.storeIndex)
const projects = opts.projects ?? [{
dir: '.',
dependencies: opts.dependencies,
devDependencies: opts.devDependencies,
}]
const requestBody = JSON.stringify({
projects: opts.projects ?? [{
dir: '.',
dependencies: opts.dependencies,
devDependencies: opts.devDependencies,
}],
projects,
overrides: opts.overrides,
nodeVersion: opts.nodeVersion ?? process.version.slice(1),
os: process.platform,

View File

@@ -133,7 +133,11 @@ interface InstallRequestProject {
}
interface InstallRequest {
projects: InstallRequestProject[]
/** Single project (legacy) */
dependencies?: Record<string, string>
devDependencies?: Record<string, string>
/** Multiple projects (workspace) */
projects?: InstallRequestProject[]
overrides?: Record<string, string>
peerDependencyRules?: Record<string, unknown>
nodeVersion?: string
@@ -193,7 +197,12 @@ async function handleInstall (
const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'pnpm-agent-'))
try {
const { projects } = request
// Build project list — support both single-project and workspace
const projects = request.projects ?? [{
dir: '.',
dependencies: request.dependencies,
devDependencies: request.devDependencies,
}]
// Create package.json for each project
await Promise.all(projects.map(async (project) => {

View File

@@ -1883,16 +1883,21 @@ async function installFromPnpmRegistry (
// Open the store index to read integrities and write new entries
const storeIndex = new StoreIndex(opts.storeDir)
const projectsList = (allInstallProjects ?? [{ rootDir, manifest }]).map(p => ({
dir: path.relative(lockfileDir, p.rootDir) || '.',
dependencies: p.manifest.dependencies,
devDependencies: p.manifest.devDependencies,
}))
// Build projects list for workspace support
const projectsList = allInstallProjects && allInstallProjects.length > 1
? allInstallProjects.map(p => ({
dir: path.relative(lockfileDir, p.rootDir) || '.',
dependencies: p.manifest.dependencies,
devDependencies: p.manifest.devDependencies,
}))
: undefined
const { lockfile, stats, fileDownloads, indexEntries } = await fetchFromPnpmRegistry({
registryUrl: opts.agent!,
storeDir: opts.storeDir,
storeIndex,
dependencies: projectsList ? undefined : manifest.dependencies,
devDependencies: projectsList ? undefined : manifest.devDependencies,
projects: projectsList,
overrides: opts.overrides,
minimumReleaseAge: opts.minimumReleaseAge,