diff --git a/extensions/npm/src/clients/BunClient.ts b/extensions/npm/src/clients/BunClient.ts index d9c0f45..4e8294f 100644 --- a/extensions/npm/src/clients/BunClient.ts +++ b/extensions/npm/src/clients/BunClient.ts @@ -57,11 +57,14 @@ export class BunClient extends Client { return all.concat({ name, version, isDevDependency }); }, []); } - install({ isDev, query }: { query: string; isDev?: boolean }) { + install({ isDev, query, exact }: { query: string; isDev?: boolean, exact?: boolean }) { const args = ["add", ...query.split(" ")]; if (isDev) { args.push("-d"); } + if (exact) { + args.push("--exact"); + } spawn.sync("bun", args, { stdio: "inherit", cwd: this.#cwd, diff --git a/extensions/npm/src/clients/NpmClient.ts b/extensions/npm/src/clients/NpmClient.ts index 0258348..301f3e2 100644 --- a/extensions/npm/src/clients/NpmClient.ts +++ b/extensions/npm/src/clients/NpmClient.ts @@ -37,11 +37,14 @@ export class NpmClient extends Client { return all.concat({ name, version, isDevDependency }); }, []); } - install({ isDev, query }: { isDev?: boolean; query: string }) { + install({ isDev, query }: { isDev?: boolean; query: string, exact?: boolean }) { const args = ["install", ...query.split(" ")]; if (isDev) { args.push("--save-dev"); } + if (exact) { + args.push("--save-exact"); + } spawn.sync("npm", args, { stdio: "inherit", cwd: this.#cwd, diff --git a/extensions/npm/src/clients/PnpmClient.ts b/extensions/npm/src/clients/PnpmClient.ts index c0345e5..53969c4 100644 --- a/extensions/npm/src/clients/PnpmClient.ts +++ b/extensions/npm/src/clients/PnpmClient.ts @@ -39,11 +39,14 @@ export class PnpmClient extends Client { return all.concat({ name, version, isDevDependency }); }, []); } - install({ isDev, query }: { query: string; isDev?: boolean }) { + install({ isDev, query, exact }: { query: string; isDev?: boolean, exact?: boolean }) { const args = ["add", ...query.split(" ")]; if (isDev) { args.push("-D"); } + if (exact) { + args.push("--save-exact"); + } spawn.sync("pnpm", args, { stdio: "inherit", cwd: this.#cwd, diff --git a/extensions/npm/src/clients/YarnClient.ts b/extensions/npm/src/clients/YarnClient.ts index de6ec2d..1701f9a 100644 --- a/extensions/npm/src/clients/YarnClient.ts +++ b/extensions/npm/src/clients/YarnClient.ts @@ -57,11 +57,14 @@ export class YarnClient extends Client { return all.concat({ name, version, isDevDependency }); }, []); } - install({ isDev, query }: { query: string; isDev?: boolean }) { + install({ isDev, query, exact }: { query: string; isDev?: boolean, exact?: boolean }) { const args = ["add", ...query.split(" ")]; if (isDev) { args.push("--dev"); } + if (exact) { + args.push("--exact"); + } spawn.sync("yarn", args, { stdio: "inherit", cwd: this.#cwd, diff --git a/extensions/npm/src/controllers/PackageJsonController.ts b/extensions/npm/src/controllers/PackageJsonController.ts index de2a84b..7ac117d 100644 --- a/extensions/npm/src/controllers/PackageJsonController.ts +++ b/extensions/npm/src/controllers/PackageJsonController.ts @@ -105,23 +105,9 @@ export class PackageJsonController extends Controller { }) { this.clientManager.getClient(data.packageJSON).install({ query: `${data.name}@${data.version}`, + exact: !data.originalVersion.startsWith("^"), }); - if (data.originalVersion.startsWith("^")) { - const path = Uri.joinPath( - workspace.workspaceFolders[0].uri, - data.packageJSON - ).fsPath; - const packageJson = JSON.parse(fs.readFileSync(path, "utf8")); - if (packageJson.dependencies?.[data.name]) { - packageJson.dependencies[data.name] = `^${data.version}`; - } - if (packageJson.devDependencies?.[data.name]) { - packageJson.devDependencies[data.name] = `^${data.version}`; - } - fs.writeFileSync(path, JSON.stringify(packageJson, null, 2)); - } - return {}; }