You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
1.2 KiB
35 lines
1.2 KiB
import { satisfies as satisfiesSemver } from 'semver';
|
|
|
|
/**
|
|
* Checks if provided snaps are on the block list.
|
|
*
|
|
* @param snapsToCheck - An object containing snap ids and other information.
|
|
* @param blocklist - An object containing snap ids, version or shasum of the blocked snaps.
|
|
* @returns An object structure containing snaps block information.
|
|
*/
|
|
async function checkSnapsBlockList(snapsToCheck, blocklist) {
|
|
return Object.entries(snapsToCheck).reduce((acc, [snapId, snapInfo]) => {
|
|
const blockInfo = blocklist.find(
|
|
(blocked) =>
|
|
(blocked.id === snapId &&
|
|
satisfiesSemver(snapInfo.version, blocked.versionRange, {
|
|
includePrerelease: true,
|
|
})) ||
|
|
// Check for null/undefined for a case in which SnapController did not return
|
|
// a valid message. This will avoid blocking all snaps in the given case.
|
|
// Avoid having (undefined === undefined).
|
|
(blocked.shasum ? blocked.shasum === snapInfo.shasum : false),
|
|
);
|
|
|
|
acc[snapId] = blockInfo
|
|
? {
|
|
blocked: true,
|
|
reason: blockInfo.reason,
|
|
infoUrl: blockInfo.infoUrl,
|
|
}
|
|
: { blocked: false };
|
|
return acc;
|
|
}, {});
|
|
}
|
|
|
|
export { checkSnapsBlockList };
|
|
|