Skip to content

Commit a5ceef2

Browse files
committed
Handle errors while fetching available package versions
1 parent 43cbb1d commit a5ceef2

1 file changed

Lines changed: 13 additions & 6 deletions

File tree

  • packages/pluggable-widgets-tools/src/commands

packages/pluggable-widgets-tools/src/commands/audit.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ export async function auditPluggableWidgetsTools(fix: boolean = false) {
4949
const update = p.safeRange
5050
? green(`${symbols.pointerSmall} ${p.safeRange}`)
5151
: red(`${symbols.cross} No update available`);
52-
console.log(` ${whiteBright(bold(p.name))} ${p.vulnerableRange} ${update}`);
52+
const status = p.error ? red(p.error.message) : update;
53+
console.log(` ${whiteBright(bold(p.name))} ${p.vulnerableRange} ${status}`);
5354
});
5455

5556
// Add overrides for updateable dependencies
@@ -87,6 +88,7 @@ interface UpdateablePackage {
8788
name: NpmAudit.PackageName;
8889
vulnerableRange: string;
8990
safeRange?: string;
91+
error?: Error;
9092
}
9193

9294
/**
@@ -97,18 +99,23 @@ interface UpdateablePackage {
9799
* Using the ^ version range avoids this, as the version is specific enough for npm.
98100
*/
99101
async function findSafeVersion({ name, range }: NpmAudit.Dependency): Promise<UpdateablePackage> {
102+
const updateablePackage = { name, vulnerableRange: range };
100103
const escapedName = encodeURI(name); // npm package names must be usable as part of a URL
101-
const versions = await promisify(exec)(`npm show ${escapedName} versions --json`).then(
102-
({ stdout }) => JSON.parse(stdout) as string[]
103-
);
104+
const versions = await promisify(exec)(`npm show ${escapedName} versions --json`)
105+
.then(({ stdout }) => JSON.parse(stdout) as string[])
106+
.catch(_ => new Error("Unable to fetch available versions"));
107+
108+
if (versions instanceof Error) {
109+
return { ...updateablePackage, error: versions };
110+
}
104111

105112
const maxVulnerable = maxSatisfying(versions, range);
106113
const gtMaxVulnerable = ">" + maxVulnerable;
107114
const minNonVulnerable = minSatisfying(versions, gtMaxVulnerable);
108115

109116
if (!minNonVulnerable) {
110-
return { name, vulnerableRange: range };
117+
return updateablePackage;
111118
}
112119

113-
return { name, vulnerableRange: range, safeRange: "^" + minNonVulnerable };
120+
return { ...updateablePackage, safeRange: "^" + minNonVulnerable };
114121
}

0 commit comments

Comments
 (0)