Files
mcp_web_dev_server/dist/tools/scaffold/addDependency.js
T
2026-07-31 13:12:54 -04:00

43 lines
2.4 KiB
JavaScript

import { z } from 'zod';
import { config } from '../../config.js';
import { detectProject } from '../../lib/frameworks/detect.js';
import { resolveTarget } from '../../lib/frameworks/resolve.js';
import { addDependencyCommandFor, detectJsPackageManager } from '../../lib/frameworks/packageManager.js';
import { runCommand } from '../../lib/runCommand.js';
import { errorResult, jsonResult, targetSchema, toErrorMessage } from '../shared.js';
export function registerAddDependencyTool(server) {
server.registerTool('add_dependency', {
title: 'Add / Remove Dependency',
description: 'Add or remove a dependency, auto-detecting npm/pnpm/yarn/bun (package.json) vs. Composer (composer.json) from the resolved project. Pass `ecosystem` explicitly to override the auto-detection.',
inputSchema: {
packages: z.array(z.string().min(1)).min(1).describe('Package names to add/remove, e.g. ["axios"] or ["laravel/sanctum"].'),
ecosystem: z.enum(['npm', 'composer']).optional(),
dev: z.boolean().optional().default(false).describe('Install as a dev dependency (ignored for composer remove).'),
remove: z.boolean().optional().default(false),
target: targetSchema,
},
}, async ({ packages, ecosystem, dev, remove, target }) => {
try {
const detected = detectProject(config.workspaceRoot);
const { adapter, target: resolvedTarget } = resolveTarget(detected, target);
const resolvedEcosystem = ecosystem ?? (adapter.packageManager === 'composer' ? 'composer' : 'npm');
const { command, args } = resolvedEcosystem === 'composer'
? {
command: 'composer',
args: remove
? ['remove', ...packages]
: ['require', ...(dev ? ['--dev'] : []), ...packages],
}
: addDependencyCommandFor(detectJsPackageManager(adapter.root), packages, { dev, remove });
const result = await runCommand(command, args, {
cwd: adapter.root,
timeoutMs: config.scaffoldCommandTimeoutMs,
});
return jsonResult({ target: resolvedTarget, ecosystem: resolvedEcosystem, ...result });
}
catch (error) {
return errorResult(toErrorMessage(error));
}
});
}
//# sourceMappingURL=addDependency.js.map