Skip to content

Commit e0e448a

Browse files
committed
Handle errors while fetching available package versions
1 parent 4ab6491 commit e0e448a

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
@@ -86,6 +87,7 @@ interface UpdateablePackage {
8687
name: NpmAudit.PackageName;
8788
vulnerableRange: string;
8889
safeRange?: string;
90+
error?: Error;
8991
}
9092

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

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

108115
if (!minNonVulnerable) {
109-
return { name, vulnerableRange: range };
116+
return updateablePackage;
110117
}
111118

112-
return { name, vulnerableRange: range, safeRange: "^" + minNonVulnerable };
119+
return { ...updateablePackage, safeRange: "^" + minNonVulnerable };
113120
}

0 commit comments

Comments
 (0)