Better handle resolving dependencies when there are conflicts
This commit is contained in:
@@ -96,7 +96,7 @@
|
||||
"dotenv": "^16.4.4",
|
||||
"esbuild": "^0.19.11",
|
||||
"evt": "^2.4.13",
|
||||
"execa": "^8.0.0",
|
||||
"execa": "^9.1.0",
|
||||
"find-up": "^7.0.0",
|
||||
"glob": "^10.3.10",
|
||||
"gradient-string": "^2.0.2",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { $ } from "execa";
|
||||
import { $, ExecaError } from "execa";
|
||||
import { join } from "node:path";
|
||||
import { readJSONFileSync } from "./fileSystem";
|
||||
import { logger } from "./logger";
|
||||
@@ -269,8 +269,7 @@ class PNPMCommands implements PackageManagerCommands {
|
||||
packageNames: string[],
|
||||
options: PackageManagerOptions
|
||||
): Promise<Record<string, string>> {
|
||||
const { stdout } = await $({ cwd: options.cwd })`${this.cmd} list ${packageNames} -r --json`;
|
||||
const result = JSON.parse(stdout) as PnpmList;
|
||||
const result = await this.#listDependencies(packageNames, options);
|
||||
|
||||
logger.debug(`Resolving ${packageNames.join(" ")} version using ${this.name}`);
|
||||
|
||||
@@ -289,6 +288,21 @@ class PNPMCommands implements PackageManagerCommands {
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
async #listDependencies(packageNames: string[], options: PackageManagerOptions) {
|
||||
const childProcess = await $({
|
||||
cwd: options.cwd,
|
||||
reject: false,
|
||||
})`${this.cmd} list ${packageNames} -r --json`;
|
||||
|
||||
if (childProcess.failed) {
|
||||
logger.debug("Failed to list dependencies, using stdout anyway...", {
|
||||
error: childProcess.stderr,
|
||||
});
|
||||
}
|
||||
|
||||
return JSON.parse(childProcess.stdout) as PnpmList;
|
||||
}
|
||||
}
|
||||
|
||||
type NpmDependency = {
|
||||
@@ -331,8 +345,7 @@ class NPMCommands implements PackageManagerCommands {
|
||||
packageNames: string[],
|
||||
options: PackageManagerOptions
|
||||
): Promise<Record<string, string>> {
|
||||
const { stdout } = await $({ cwd: options.cwd })`${this.cmd} list ${packageNames} --json`;
|
||||
const output = JSON.parse(stdout) as NpmListOutput;
|
||||
const output = await this.#listDependencies(packageNames, options);
|
||||
|
||||
logger.debug(`Resolving ${packageNames.join(" ")} version using ${this.name}`, { output });
|
||||
|
||||
@@ -349,6 +362,21 @@ class NPMCommands implements PackageManagerCommands {
|
||||
return results;
|
||||
}
|
||||
|
||||
async #listDependencies(packageNames: string[], options: PackageManagerOptions) {
|
||||
const childProcess = await $({
|
||||
cwd: options.cwd,
|
||||
reject: false,
|
||||
})`${this.cmd} list ${packageNames} --json`;
|
||||
|
||||
if (childProcess.failed) {
|
||||
logger.debug("Failed to list dependencies, using stdout anyway...", {
|
||||
error: childProcess.stderr,
|
||||
});
|
||||
}
|
||||
|
||||
return JSON.parse(childProcess.stdout) as NpmListOutput;
|
||||
}
|
||||
|
||||
#recursivelySearchDependencies(
|
||||
dependencies: Record<string, NpmDependency>,
|
||||
packageName: string
|
||||
@@ -404,7 +432,7 @@ class YarnCommands implements PackageManagerCommands {
|
||||
packageNames: string[],
|
||||
options: PackageManagerOptions
|
||||
): Promise<Record<string, string>> {
|
||||
const { stdout } = await $({ cwd: options.cwd })`${this.cmd} info ${packageNames} --json`;
|
||||
const stdout = await this.#listDependencies(packageNames, options);
|
||||
|
||||
const lines = stdout.split("\n");
|
||||
|
||||
@@ -425,6 +453,21 @@ class YarnCommands implements PackageManagerCommands {
|
||||
return results;
|
||||
}
|
||||
|
||||
async #listDependencies(packageNames: string[], options: PackageManagerOptions) {
|
||||
const childProcess = await $({
|
||||
cwd: options.cwd,
|
||||
reject: false,
|
||||
})`${this.cmd} info ${packageNames} --json`;
|
||||
|
||||
if (childProcess.failed) {
|
||||
logger.debug("Failed to list dependencies, using stdout anyway...", {
|
||||
error: childProcess.stderr,
|
||||
});
|
||||
}
|
||||
|
||||
return childProcess.stdout;
|
||||
}
|
||||
|
||||
// The "value" when doing yarn info is formatted like this:
|
||||
// "package-name@npm:version" or "package-name@workspace:version"
|
||||
// This function will parse the value into just the package name.
|
||||
|
||||
Generated
+88
-2
@@ -1559,8 +1559,8 @@ importers:
|
||||
specifier: ^2.4.13
|
||||
version: 2.4.13
|
||||
execa:
|
||||
specifier: ^8.0.0
|
||||
version: 8.0.1
|
||||
specifier: ^9.1.0
|
||||
version: 9.1.0
|
||||
find-up:
|
||||
specifier: ^7.0.0
|
||||
version: 7.0.0
|
||||
@@ -13748,6 +13748,10 @@ packages:
|
||||
/@rushstack/eslint-patch@1.2.0:
|
||||
resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==}
|
||||
|
||||
/@sec-ant/readable-stream@0.4.1:
|
||||
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
|
||||
dev: false
|
||||
|
||||
/@selderee/plugin-htmlparser2@0.10.0:
|
||||
resolution: {integrity: sha512-gW69MEamZ4wk1OsOq1nG1jcyhXIQcnrsX5JwixVw/9xaiav8TCyjESAruu1Rz9yyInhgBXxkNwMeygKnN2uxNA==}
|
||||
dependencies:
|
||||
@@ -13869,6 +13873,11 @@ packages:
|
||||
engines: {node: '>=14.16'}
|
||||
dev: false
|
||||
|
||||
/@sindresorhus/merge-streams@4.0.0:
|
||||
resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
|
||||
engines: {node: '>=18'}
|
||||
dev: false
|
||||
|
||||
/@sindresorhus/slugify@2.2.1:
|
||||
resolution: {integrity: sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==}
|
||||
engines: {node: '>=12'}
|
||||
@@ -21759,6 +21768,24 @@ packages:
|
||||
signal-exit: 4.1.0
|
||||
strip-final-newline: 3.0.0
|
||||
|
||||
/execa@9.1.0:
|
||||
resolution: {integrity: sha512-lSgHc4Elo2m6bUDhc3Hl/VxvUDJdQWI40RZ4KMY9bKRc+hgMOT7II/JjbNDhI8VnMtrCb7U/fhpJIkLORZozWw==}
|
||||
engines: {node: '>=18'}
|
||||
dependencies:
|
||||
'@sindresorhus/merge-streams': 4.0.0
|
||||
cross-spawn: 7.0.3
|
||||
figures: 6.1.0
|
||||
get-stream: 9.0.1
|
||||
human-signals: 7.0.0
|
||||
is-plain-obj: 4.1.0
|
||||
is-stream: 4.0.1
|
||||
npm-run-path: 5.3.0
|
||||
pretty-ms: 9.0.0
|
||||
signal-exit: 4.1.0
|
||||
strip-final-newline: 4.0.0
|
||||
yoctocolors: 2.0.0
|
||||
dev: false
|
||||
|
||||
/exit-hook@2.2.1:
|
||||
resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==}
|
||||
engines: {node: '>=6'}
|
||||
@@ -22116,6 +22143,13 @@ packages:
|
||||
is-unicode-supported: 1.3.0
|
||||
dev: false
|
||||
|
||||
/figures@6.1.0:
|
||||
resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==}
|
||||
engines: {node: '>=18'}
|
||||
dependencies:
|
||||
is-unicode-supported: 2.0.0
|
||||
dev: false
|
||||
|
||||
/file-entry-cache@6.0.1:
|
||||
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
|
||||
engines: {node: ^10.12.0 || >=12.0.0}
|
||||
@@ -22590,6 +22624,14 @@ packages:
|
||||
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
|
||||
engines: {node: '>=16'}
|
||||
|
||||
/get-stream@9.0.1:
|
||||
resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
|
||||
engines: {node: '>=18'}
|
||||
dependencies:
|
||||
'@sec-ant/readable-stream': 0.4.1
|
||||
is-stream: 4.0.1
|
||||
dev: false
|
||||
|
||||
/get-symbol-description@1.0.0:
|
||||
resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
|
||||
engines: {node: '>= 0.4'}
|
||||
@@ -23391,6 +23433,11 @@ packages:
|
||||
resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
|
||||
engines: {node: '>=16.17.0'}
|
||||
|
||||
/human-signals@7.0.0:
|
||||
resolution: {integrity: sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==}
|
||||
engines: {node: '>=18.18.0'}
|
||||
dev: false
|
||||
|
||||
/humanize-duration@3.27.3:
|
||||
resolution: {integrity: sha512-iimHkHPfIAQ8zCDQLgn08pRqSVioyWvnGfaQ8gond2wf7Jq2jJ+24ykmnRyiz3fIldcn4oUuQXpjqKLhSVR7lw==}
|
||||
dev: false
|
||||
@@ -24092,6 +24139,11 @@ packages:
|
||||
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
|
||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||
|
||||
/is-stream@4.0.1:
|
||||
resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==}
|
||||
engines: {node: '>=18'}
|
||||
dev: false
|
||||
|
||||
/is-string@1.0.7:
|
||||
resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
|
||||
engines: {node: '>= 0.4'}
|
||||
@@ -24133,6 +24185,11 @@ packages:
|
||||
resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
/is-unicode-supported@2.0.0:
|
||||
resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==}
|
||||
engines: {node: '>=18'}
|
||||
dev: false
|
||||
|
||||
/is-upper-case@2.0.2:
|
||||
resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==}
|
||||
dependencies:
|
||||
@@ -27475,6 +27532,13 @@ packages:
|
||||
dependencies:
|
||||
path-key: 4.0.0
|
||||
|
||||
/npm-run-path@5.3.0:
|
||||
resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
|
||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||
dependencies:
|
||||
path-key: 4.0.0
|
||||
dev: false
|
||||
|
||||
/npmlog@6.0.2:
|
||||
resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==}
|
||||
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
|
||||
@@ -28182,6 +28246,11 @@ packages:
|
||||
engines: {node: '>=6'}
|
||||
dev: true
|
||||
|
||||
/parse-ms@4.0.0:
|
||||
resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==}
|
||||
engines: {node: '>=18'}
|
||||
dev: false
|
||||
|
||||
/parse5-htmlparser2-tree-adapter@6.0.1:
|
||||
resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==}
|
||||
dependencies:
|
||||
@@ -29219,6 +29288,13 @@ packages:
|
||||
parse-ms: 2.1.0
|
||||
dev: true
|
||||
|
||||
/pretty-ms@9.0.0:
|
||||
resolution: {integrity: sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==}
|
||||
engines: {node: '>=18'}
|
||||
dependencies:
|
||||
parse-ms: 4.0.0
|
||||
dev: false
|
||||
|
||||
/pretty@2.0.0:
|
||||
resolution: {integrity: sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@@ -32005,6 +32081,11 @@ packages:
|
||||
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
/strip-final-newline@4.0.0:
|
||||
resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==}
|
||||
engines: {node: '>=18'}
|
||||
dev: false
|
||||
|
||||
/strip-indent@3.0.0:
|
||||
resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -35606,6 +35687,11 @@ packages:
|
||||
resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
|
||||
engines: {node: '>=12.20'}
|
||||
|
||||
/yoctocolors@2.0.0:
|
||||
resolution: {integrity: sha512-esbDnt0Z1zI1KgvOZU90hJbL6BkoUbrP9yy7ArNZ6TmxBxydMJTYMf9FZjmwwcA8ZgEQzriQ3hwZ0NYXhlFo8Q==}
|
||||
engines: {node: '>=18'}
|
||||
dev: false
|
||||
|
||||
/yoga-wasm-web@0.3.3:
|
||||
resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==}
|
||||
dev: false
|
||||
|
||||
Reference in New Issue
Block a user