@code-pushup/js-packages-plugin 0.34.0 → 0.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +15 -5
- package/README.md +17 -3
- package/bin.js +289 -195
- package/index.js +497 -97
- package/package.json +3 -3
- package/src/lib/config.d.ts +2 -2
- package/src/lib/constants.d.ts +3 -8
- package/src/lib/package-managers/constants.d.ts +2 -0
- package/src/lib/package-managers/index.d.ts +2 -0
- package/src/lib/package-managers/npm/audit-result.d.ts +5 -0
- package/src/lib/package-managers/npm/npm.d.ts +2 -0
- package/src/lib/package-managers/npm/outdated-result.d.ts +2 -0
- package/src/lib/package-managers/npm/types.d.ts +38 -0
- package/src/lib/package-managers/package-managers.d.ts +3 -0
- package/src/lib/package-managers/pnpm/audit-result.d.ts +3 -0
- package/src/lib/package-managers/pnpm/outdated-result.d.ts +2 -0
- package/src/lib/package-managers/pnpm/pnpm.d.ts +2 -0
- package/src/lib/package-managers/pnpm/types.d.ts +26 -0
- package/src/lib/package-managers/types.d.ts +26 -0
- package/src/lib/package-managers/yarn-classic/audit-result.d.ts +2 -0
- package/src/lib/package-managers/yarn-classic/outdated-result.d.ts +2 -0
- package/src/lib/package-managers/yarn-classic/types.d.ts +49 -0
- package/src/lib/package-managers/yarn-classic/yarn-classic.d.ts +2 -0
- package/src/lib/package-managers/yarn-modern/audit-result.d.ts +2 -0
- package/src/lib/package-managers/yarn-modern/outdated-result.d.ts +2 -0
- package/src/lib/package-managers/yarn-modern/types.d.ts +26 -0
- package/src/lib/package-managers/yarn-modern/yarn-modern.d.ts +2 -0
- package/src/lib/runner/audit/constants.d.ts +1 -5
- package/src/lib/runner/audit/transform.d.ts +2 -2
- package/src/lib/runner/audit/types.d.ts +0 -87
- package/src/lib/runner/audit/utils.d.ts +2 -0
- package/src/lib/runner/outdated/constants.d.ts +2 -5
- package/src/lib/runner/outdated/transform.d.ts +2 -2
- package/src/lib/runner/outdated/types.d.ts +0 -43
- package/src/lib/runner/audit/unify-type.d.ts +0 -8
- package/src/lib/runner/outdated/unify-type.d.ts +0 -5
package/bin.js
CHANGED
|
@@ -578,10 +578,14 @@ function makeArraysComparisonSchema(diffSchema, resultSchema, description) {
|
|
|
578
578
|
{ description }
|
|
579
579
|
);
|
|
580
580
|
}
|
|
581
|
-
var scorableMetaSchema = z14.object({
|
|
581
|
+
var scorableMetaSchema = z14.object({
|
|
582
|
+
slug: slugSchema,
|
|
583
|
+
title: titleSchema,
|
|
584
|
+
docsUrl: docsUrlSchema
|
|
585
|
+
});
|
|
582
586
|
var scorableWithPluginMetaSchema = scorableMetaSchema.merge(
|
|
583
587
|
z14.object({
|
|
584
|
-
plugin: pluginMetaSchema.pick({ slug: true, title: true }).describe("Plugin which defines it")
|
|
588
|
+
plugin: pluginMetaSchema.pick({ slug: true, title: true, docsUrl: true }).describe("Plugin which defines it")
|
|
585
589
|
})
|
|
586
590
|
);
|
|
587
591
|
var scorableDiffSchema = scorableMetaSchema.merge(
|
|
@@ -725,7 +729,7 @@ async function ensureDirectoryExists(baseDir) {
|
|
|
725
729
|
await mkdir(baseDir, { recursive: true });
|
|
726
730
|
return;
|
|
727
731
|
} catch (error) {
|
|
728
|
-
ui().logger.
|
|
732
|
+
ui().logger.info(error.message);
|
|
729
733
|
if (error.code !== "EEXIST") {
|
|
730
734
|
throw error;
|
|
731
735
|
}
|
|
@@ -832,17 +836,11 @@ var dependencyGroupToLong = {
|
|
|
832
836
|
dev: "devDependencies",
|
|
833
837
|
optional: "optionalDependencies"
|
|
834
838
|
};
|
|
835
|
-
var pkgManagerCommands = {
|
|
836
|
-
npm: "npm",
|
|
837
|
-
"yarn-classic": "yarn",
|
|
838
|
-
"yarn-modern": "yarn",
|
|
839
|
-
pnpm: "pnpm"
|
|
840
|
-
};
|
|
841
839
|
|
|
842
840
|
// packages/plugin-js-packages/src/lib/config.ts
|
|
843
841
|
var dependencyGroups = ["prod", "dev", "optional"];
|
|
844
842
|
var packageCommandSchema = z15.enum(["audit", "outdated"]);
|
|
845
|
-
var
|
|
843
|
+
var packageManagerIdSchema = z15.enum([
|
|
846
844
|
"npm",
|
|
847
845
|
"yarn-classic",
|
|
848
846
|
"yarn-modern",
|
|
@@ -869,7 +867,9 @@ var jsPackagesPluginConfigSchema = z15.object({
|
|
|
869
867
|
checks: z15.array(packageCommandSchema, {
|
|
870
868
|
description: "Package manager commands to be run. Defaults to both audit and outdated."
|
|
871
869
|
}).min(1).default(["audit", "outdated"]),
|
|
872
|
-
packageManager:
|
|
870
|
+
packageManager: packageManagerIdSchema.describe(
|
|
871
|
+
"Package manager to be used."
|
|
872
|
+
),
|
|
873
873
|
auditLevelMapping: z15.record(packageAuditLevelSchema, issueSeveritySchema, {
|
|
874
874
|
description: "Mapping of audit levels to issue severity. Custom mapping or overrides may be entered manually, otherwise has a default preset."
|
|
875
875
|
}).default(defaultAuditLevelMapping).transform(fillAuditLevelMapping)
|
|
@@ -907,7 +907,11 @@ function filterAuditResult(result, key, referenceResult) {
|
|
|
907
907
|
};
|
|
908
908
|
}
|
|
909
909
|
|
|
910
|
-
// packages/plugin-js-packages/src/lib/
|
|
910
|
+
// packages/plugin-js-packages/src/lib/package-managers/constants.ts
|
|
911
|
+
var COMMON_AUDIT_ARGS = ["audit", "--json"];
|
|
912
|
+
var COMMON_OUTDATED_ARGS = ["outdated", "--json"];
|
|
913
|
+
|
|
914
|
+
// packages/plugin-js-packages/src/lib/package-managers/npm/audit-result.ts
|
|
911
915
|
function npmToAuditResult(output) {
|
|
912
916
|
const npmAudit = JSON.parse(output);
|
|
913
917
|
const vulnerabilities = objectToEntries(npmAudit.vulnerabilities).map(
|
|
@@ -964,6 +968,159 @@ function npmToAdvisory(name, vulnerabilities, prevNodes = /* @__PURE__ */ new Se
|
|
|
964
968
|
}
|
|
965
969
|
return null;
|
|
966
970
|
}
|
|
971
|
+
|
|
972
|
+
// packages/plugin-js-packages/src/lib/package-managers/npm/outdated-result.ts
|
|
973
|
+
function npmToOutdatedResult(output) {
|
|
974
|
+
const npmOutdated = JSON.parse(output);
|
|
975
|
+
return objectToEntries(npmOutdated).filter(
|
|
976
|
+
(entry) => entry[1].current != null
|
|
977
|
+
).map(([name, overview]) => ({
|
|
978
|
+
name,
|
|
979
|
+
current: overview.current,
|
|
980
|
+
latest: overview.latest,
|
|
981
|
+
type: overview.type,
|
|
982
|
+
...overview.homepage != null && { url: overview.homepage }
|
|
983
|
+
}));
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
// packages/plugin-js-packages/src/lib/package-managers/npm/npm.ts
|
|
987
|
+
var npmDependencyOptions = {
|
|
988
|
+
prod: ["--omit=dev", "--omit=optional"],
|
|
989
|
+
dev: ["--include=dev", "--omit=optional"],
|
|
990
|
+
optional: ["--include=optional", "--omit=dev"]
|
|
991
|
+
};
|
|
992
|
+
var npmPackageManager = {
|
|
993
|
+
slug: "npm",
|
|
994
|
+
name: "NPM",
|
|
995
|
+
command: "npm",
|
|
996
|
+
icon: "npm",
|
|
997
|
+
docs: {
|
|
998
|
+
homepage: "https://docs.npmjs.com/",
|
|
999
|
+
audit: "https://docs.npmjs.com/cli/commands/npm-audit",
|
|
1000
|
+
outdated: "https://docs.npmjs.com/cli/commands/npm-outdated"
|
|
1001
|
+
},
|
|
1002
|
+
audit: {
|
|
1003
|
+
getCommandArgs: (groupDep) => [
|
|
1004
|
+
...COMMON_AUDIT_ARGS,
|
|
1005
|
+
...npmDependencyOptions[groupDep],
|
|
1006
|
+
"--audit-level=none"
|
|
1007
|
+
],
|
|
1008
|
+
unifyResult: npmToAuditResult,
|
|
1009
|
+
// prod dependencies need to be filtered out manually since v10
|
|
1010
|
+
postProcessResult: (results) => ({
|
|
1011
|
+
prod: results.prod,
|
|
1012
|
+
dev: filterAuditResult(results.dev, "name", results.prod),
|
|
1013
|
+
optional: filterAuditResult(results.optional, "name", results.prod)
|
|
1014
|
+
})
|
|
1015
|
+
},
|
|
1016
|
+
outdated: {
|
|
1017
|
+
commandArgs: [...COMMON_OUTDATED_ARGS, "--long"],
|
|
1018
|
+
unifyResult: npmToOutdatedResult
|
|
1019
|
+
}
|
|
1020
|
+
};
|
|
1021
|
+
|
|
1022
|
+
// packages/plugin-js-packages/src/lib/runner/audit/utils.ts
|
|
1023
|
+
function getVulnerabilitiesTotal(summary) {
|
|
1024
|
+
return Object.values(summary).reduce((acc, value) => acc + value, 0);
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
// packages/plugin-js-packages/src/lib/package-managers/pnpm/audit-result.ts
|
|
1028
|
+
function pnpmToAuditResult(output) {
|
|
1029
|
+
const pnpmResult = JSON.parse(output);
|
|
1030
|
+
const vulnerabilities = Object.values(pnpmResult.advisories).map(
|
|
1031
|
+
({
|
|
1032
|
+
module_name: name,
|
|
1033
|
+
id,
|
|
1034
|
+
title,
|
|
1035
|
+
url,
|
|
1036
|
+
severity,
|
|
1037
|
+
vulnerable_versions: versionRange,
|
|
1038
|
+
recommendation: fixInformation,
|
|
1039
|
+
findings
|
|
1040
|
+
}) => {
|
|
1041
|
+
const path = findings[0]?.paths[0];
|
|
1042
|
+
return {
|
|
1043
|
+
name,
|
|
1044
|
+
id,
|
|
1045
|
+
title,
|
|
1046
|
+
url,
|
|
1047
|
+
severity,
|
|
1048
|
+
versionRange,
|
|
1049
|
+
directDependency: path == null ? true : pnpmToDirectDependency(path),
|
|
1050
|
+
fixInformation
|
|
1051
|
+
};
|
|
1052
|
+
}
|
|
1053
|
+
);
|
|
1054
|
+
return {
|
|
1055
|
+
vulnerabilities,
|
|
1056
|
+
summary: {
|
|
1057
|
+
...pnpmResult.metadata.vulnerabilities,
|
|
1058
|
+
total: getVulnerabilitiesTotal(pnpmResult.metadata.vulnerabilities)
|
|
1059
|
+
}
|
|
1060
|
+
};
|
|
1061
|
+
}
|
|
1062
|
+
function pnpmToDirectDependency(path) {
|
|
1063
|
+
const deps = path.split(" > ").slice(1);
|
|
1064
|
+
if (deps.length <= 1) {
|
|
1065
|
+
return true;
|
|
1066
|
+
}
|
|
1067
|
+
return deps[0]?.split("@")[0] ?? true;
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
// packages/plugin-js-packages/src/lib/package-managers/pnpm/outdated-result.ts
|
|
1071
|
+
function pnpmToOutdatedResult(output) {
|
|
1072
|
+
const pnpmOutdated = JSON.parse(output);
|
|
1073
|
+
return objectToEntries(pnpmOutdated).map(
|
|
1074
|
+
([name, { current, latest, dependencyType: type }]) => ({
|
|
1075
|
+
name,
|
|
1076
|
+
current,
|
|
1077
|
+
latest,
|
|
1078
|
+
type
|
|
1079
|
+
})
|
|
1080
|
+
);
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
// packages/plugin-js-packages/src/lib/package-managers/pnpm/pnpm.ts
|
|
1084
|
+
var pnpmDependencyOptions = {
|
|
1085
|
+
prod: ["--prod", "--no-optional"],
|
|
1086
|
+
dev: ["--dev", "--no-optional"],
|
|
1087
|
+
optional: []
|
|
1088
|
+
};
|
|
1089
|
+
var pnpmPackageManager = {
|
|
1090
|
+
slug: "pnpm",
|
|
1091
|
+
name: "pnpm",
|
|
1092
|
+
command: "pnpm",
|
|
1093
|
+
icon: "pnpm",
|
|
1094
|
+
docs: {
|
|
1095
|
+
homepage: "https://pnpm.io/pnpm-cli",
|
|
1096
|
+
audit: "https://pnpm.io/cli/audit/",
|
|
1097
|
+
outdated: "https://pnpm.io/cli/outdated"
|
|
1098
|
+
},
|
|
1099
|
+
audit: {
|
|
1100
|
+
getCommandArgs: (groupDep) => [
|
|
1101
|
+
...COMMON_AUDIT_ARGS,
|
|
1102
|
+
...pnpmDependencyOptions[groupDep]
|
|
1103
|
+
],
|
|
1104
|
+
ignoreExitCode: true,
|
|
1105
|
+
unifyResult: pnpmToAuditResult,
|
|
1106
|
+
// optional dependencies don't have an exclusive option so they need duplicates filtered out
|
|
1107
|
+
postProcessResult: (results) => ({
|
|
1108
|
+
prod: results.prod,
|
|
1109
|
+
dev: results.dev,
|
|
1110
|
+
optional: filterAuditResult(
|
|
1111
|
+
filterAuditResult(results.optional, "id", results.prod),
|
|
1112
|
+
"id",
|
|
1113
|
+
results.dev
|
|
1114
|
+
)
|
|
1115
|
+
})
|
|
1116
|
+
},
|
|
1117
|
+
outdated: {
|
|
1118
|
+
commandArgs: COMMON_OUTDATED_ARGS,
|
|
1119
|
+
unifyResult: pnpmToOutdatedResult
|
|
1120
|
+
}
|
|
1121
|
+
};
|
|
1122
|
+
|
|
1123
|
+
// packages/plugin-js-packages/src/lib/package-managers/yarn-classic/audit-result.ts
|
|
967
1124
|
function yarnv1ToAuditResult(output) {
|
|
968
1125
|
const yarnv1Result = fromJsonLines(output);
|
|
969
1126
|
const [yarnv1Advisory, yarnv1Summary] = validateYarnv1Result(yarnv1Result);
|
|
@@ -1010,6 +1167,47 @@ function validateYarnv1Result(result) {
|
|
|
1010
1167
|
);
|
|
1011
1168
|
return [vulnerabilities, summary];
|
|
1012
1169
|
}
|
|
1170
|
+
|
|
1171
|
+
// packages/plugin-js-packages/src/lib/package-managers/yarn-classic/outdated-result.ts
|
|
1172
|
+
function yarnv1ToOutdatedResult(output) {
|
|
1173
|
+
const yarnv1Outdated = fromJsonLines(output);
|
|
1174
|
+
const dependencies = yarnv1Outdated[1].data.body;
|
|
1175
|
+
return dependencies.map(([name, current, _, latest, __, type, url]) => ({
|
|
1176
|
+
name,
|
|
1177
|
+
current,
|
|
1178
|
+
latest,
|
|
1179
|
+
type,
|
|
1180
|
+
url
|
|
1181
|
+
}));
|
|
1182
|
+
}
|
|
1183
|
+
|
|
1184
|
+
// packages/plugin-js-packages/src/lib/package-managers/yarn-classic/yarn-classic.ts
|
|
1185
|
+
var yarnv1PackageManager = {
|
|
1186
|
+
slug: "yarn-classic",
|
|
1187
|
+
name: "Yarn v1",
|
|
1188
|
+
command: "yarn",
|
|
1189
|
+
icon: "yarn",
|
|
1190
|
+
docs: {
|
|
1191
|
+
homepage: "https://classic.yarnpkg.com/docs/",
|
|
1192
|
+
audit: "https://classic.yarnpkg.com/docs/cli/audit",
|
|
1193
|
+
outdated: "https://classic.yarnpkg.com/docs/cli/outdated/"
|
|
1194
|
+
},
|
|
1195
|
+
audit: {
|
|
1196
|
+
getCommandArgs: (groupDep) => [
|
|
1197
|
+
...COMMON_AUDIT_ARGS,
|
|
1198
|
+
"--groups",
|
|
1199
|
+
dependencyGroupToLong[groupDep]
|
|
1200
|
+
],
|
|
1201
|
+
ignoreExitCode: true,
|
|
1202
|
+
unifyResult: yarnv1ToAuditResult
|
|
1203
|
+
},
|
|
1204
|
+
outdated: {
|
|
1205
|
+
commandArgs: COMMON_OUTDATED_ARGS,
|
|
1206
|
+
unifyResult: yarnv1ToOutdatedResult
|
|
1207
|
+
}
|
|
1208
|
+
};
|
|
1209
|
+
|
|
1210
|
+
// packages/plugin-js-packages/src/lib/package-managers/yarn-modern/audit-result.ts
|
|
1013
1211
|
function yarnv2ToAuditResult(output) {
|
|
1014
1212
|
const yarnv2Audit = JSON.parse(output);
|
|
1015
1213
|
const vulnerabilities = Object.values(yarnv2Audit.advisories).map(
|
|
@@ -1042,50 +1240,58 @@ function yarnv2ToAuditResult(output) {
|
|
|
1042
1240
|
}
|
|
1043
1241
|
};
|
|
1044
1242
|
}
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
recommendation: fixInformation,
|
|
1056
|
-
findings
|
|
1057
|
-
}) => {
|
|
1058
|
-
const path = findings[0]?.paths[0];
|
|
1059
|
-
return {
|
|
1060
|
-
name,
|
|
1061
|
-
id,
|
|
1062
|
-
title,
|
|
1063
|
-
url,
|
|
1064
|
-
severity,
|
|
1065
|
-
versionRange,
|
|
1066
|
-
directDependency: path == null ? true : pnpmToDirectDependency(path),
|
|
1067
|
-
fixInformation
|
|
1068
|
-
};
|
|
1069
|
-
}
|
|
1070
|
-
);
|
|
1071
|
-
return {
|
|
1072
|
-
vulnerabilities,
|
|
1073
|
-
summary: {
|
|
1074
|
-
...pnpmResult.metadata.vulnerabilities,
|
|
1075
|
-
total: getVulnerabilitiesTotal(pnpmResult.metadata.vulnerabilities)
|
|
1076
|
-
}
|
|
1077
|
-
};
|
|
1243
|
+
|
|
1244
|
+
// packages/plugin-js-packages/src/lib/package-managers/yarn-modern/outdated-result.ts
|
|
1245
|
+
function yarnv2ToOutdatedResult(output) {
|
|
1246
|
+
const npmOutdated = JSON.parse(output);
|
|
1247
|
+
return npmOutdated.map(({ name, current, latest, type }) => ({
|
|
1248
|
+
name,
|
|
1249
|
+
current,
|
|
1250
|
+
latest,
|
|
1251
|
+
type
|
|
1252
|
+
}));
|
|
1078
1253
|
}
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1254
|
+
|
|
1255
|
+
// packages/plugin-js-packages/src/lib/package-managers/yarn-modern/yarn-modern.ts
|
|
1256
|
+
var yarnv2EnvironmentOptions = {
|
|
1257
|
+
prod: "production",
|
|
1258
|
+
dev: "development",
|
|
1259
|
+
optional: ""
|
|
1260
|
+
};
|
|
1261
|
+
var yarnv2PackageManager = {
|
|
1262
|
+
slug: "yarn-modern",
|
|
1263
|
+
name: "yarn-modern",
|
|
1264
|
+
command: "yarn",
|
|
1265
|
+
icon: "yarn",
|
|
1266
|
+
docs: {
|
|
1267
|
+
homepage: "https://yarnpkg.com/getting-started",
|
|
1268
|
+
audit: "https://yarnpkg.com/cli/npm/audit",
|
|
1269
|
+
outdated: "https://github.com/mskelton/yarn-plugin-outdated"
|
|
1270
|
+
},
|
|
1271
|
+
audit: {
|
|
1272
|
+
getCommandArgs: (groupDep) => [
|
|
1273
|
+
"npm",
|
|
1274
|
+
...COMMON_AUDIT_ARGS,
|
|
1275
|
+
"--environment",
|
|
1276
|
+
yarnv2EnvironmentOptions[groupDep]
|
|
1277
|
+
],
|
|
1278
|
+
supportedDepGroups: ["prod", "dev"],
|
|
1279
|
+
// Yarn v2 does not support audit for optional dependencies
|
|
1280
|
+
unifyResult: yarnv2ToAuditResult
|
|
1281
|
+
},
|
|
1282
|
+
outdated: {
|
|
1283
|
+
commandArgs: COMMON_OUTDATED_ARGS,
|
|
1284
|
+
unifyResult: yarnv2ToOutdatedResult
|
|
1083
1285
|
}
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1286
|
+
};
|
|
1287
|
+
|
|
1288
|
+
// packages/plugin-js-packages/src/lib/package-managers/package-managers.ts
|
|
1289
|
+
var packageManagers = {
|
|
1290
|
+
npm: npmPackageManager,
|
|
1291
|
+
"yarn-classic": yarnv1PackageManager,
|
|
1292
|
+
"yarn-modern": yarnv2PackageManager,
|
|
1293
|
+
pnpm: pnpmPackageManager
|
|
1294
|
+
};
|
|
1089
1295
|
|
|
1090
1296
|
// packages/plugin-js-packages/src/lib/runner/audit/constants.ts
|
|
1091
1297
|
var auditScoreModifiers = {
|
|
@@ -1095,62 +1301,15 @@ var auditScoreModifiers = {
|
|
|
1095
1301
|
low: 0.02,
|
|
1096
1302
|
info: 0.01
|
|
1097
1303
|
};
|
|
1098
|
-
var normalizeAuditMapper = {
|
|
1099
|
-
npm: npmToAuditResult,
|
|
1100
|
-
"yarn-classic": yarnv1ToAuditResult,
|
|
1101
|
-
"yarn-modern": yarnv2ToAuditResult,
|
|
1102
|
-
pnpm: pnpmToAuditResult
|
|
1103
|
-
};
|
|
1104
|
-
var filterNpmAuditResults = (results) => ({
|
|
1105
|
-
prod: results.prod,
|
|
1106
|
-
dev: filterAuditResult(results.dev, "name", results.prod),
|
|
1107
|
-
optional: filterAuditResult(results.optional, "name", results.prod)
|
|
1108
|
-
});
|
|
1109
|
-
var filterPnpmAuditResults = (results) => ({
|
|
1110
|
-
prod: results.prod,
|
|
1111
|
-
dev: results.dev,
|
|
1112
|
-
optional: filterAuditResult(
|
|
1113
|
-
filterAuditResult(results.optional, "id", results.prod),
|
|
1114
|
-
"id",
|
|
1115
|
-
results.dev
|
|
1116
|
-
)
|
|
1117
|
-
});
|
|
1118
|
-
var postProcessingAuditMapper = {
|
|
1119
|
-
npm: filterNpmAuditResults,
|
|
1120
|
-
// prod dependencies need to be filtered out manually since v10
|
|
1121
|
-
pnpm: filterPnpmAuditResults
|
|
1122
|
-
// optional dependencies don't have an exclusive option so they need duplicates filtered out
|
|
1123
|
-
};
|
|
1124
|
-
var npmDependencyOptions = {
|
|
1125
|
-
prod: ["--omit=dev", "--omit=optional"],
|
|
1126
|
-
dev: ["--include=dev", "--omit=optional"],
|
|
1127
|
-
optional: ["--include=optional", "--omit=dev"]
|
|
1128
|
-
};
|
|
1129
|
-
var yarnv2EnvironmentOptions = {
|
|
1130
|
-
prod: "production",
|
|
1131
|
-
dev: "development",
|
|
1132
|
-
optional: ""
|
|
1133
|
-
};
|
|
1134
|
-
var pnpmDependencyOptions = {
|
|
1135
|
-
prod: ["--prod", "--no-optional"],
|
|
1136
|
-
dev: ["--dev", "--no-optional"],
|
|
1137
|
-
optional: []
|
|
1138
|
-
};
|
|
1139
|
-
var auditArgs = (groupDep) => ({
|
|
1140
|
-
npm: [...npmDependencyOptions[groupDep], "--audit-level=none"],
|
|
1141
|
-
"yarn-classic": ["--groups", dependencyGroupToLong[groupDep]],
|
|
1142
|
-
"yarn-modern": ["--environment", yarnv2EnvironmentOptions[groupDep]],
|
|
1143
|
-
pnpm: [...pnpmDependencyOptions[groupDep]]
|
|
1144
|
-
});
|
|
1145
1304
|
|
|
1146
1305
|
// packages/plugin-js-packages/src/lib/runner/audit/transform.ts
|
|
1147
|
-
function auditResultToAuditOutput(result,
|
|
1306
|
+
function auditResultToAuditOutput(result, id, depGroup, auditLevelMapping) {
|
|
1148
1307
|
const issues = vulnerabilitiesToIssues(
|
|
1149
1308
|
result.vulnerabilities,
|
|
1150
1309
|
auditLevelMapping
|
|
1151
1310
|
);
|
|
1152
1311
|
return {
|
|
1153
|
-
slug: `${
|
|
1312
|
+
slug: `${id}-audit-${depGroup}`,
|
|
1154
1313
|
score: calculateAuditScore(result.summary),
|
|
1155
1314
|
value: result.summary.total,
|
|
1156
1315
|
displayValue: summaryToDisplayValue(result.summary),
|
|
@@ -1207,80 +1366,23 @@ var PLUGIN_CONFIG_PATH = join2(
|
|
|
1207
1366
|
"plugin-config.json"
|
|
1208
1367
|
);
|
|
1209
1368
|
|
|
1210
|
-
// packages/plugin-js-packages/src/lib/runner/outdated/unify-type.ts
|
|
1211
|
-
function npmToOutdatedResult(output) {
|
|
1212
|
-
const npmOutdated = JSON.parse(output);
|
|
1213
|
-
return objectToEntries(npmOutdated).filter(
|
|
1214
|
-
(entry) => entry[1].current != null
|
|
1215
|
-
).map(([name, overview]) => ({
|
|
1216
|
-
name,
|
|
1217
|
-
current: overview.current,
|
|
1218
|
-
latest: overview.latest,
|
|
1219
|
-
type: overview.type,
|
|
1220
|
-
...overview.homepage != null && { url: overview.homepage }
|
|
1221
|
-
}));
|
|
1222
|
-
}
|
|
1223
|
-
function yarnv1ToOutdatedResult(output) {
|
|
1224
|
-
const yarnv1Outdated = fromJsonLines(output);
|
|
1225
|
-
const dependencies = yarnv1Outdated[1].data.body;
|
|
1226
|
-
return dependencies.map(([name, current, _, latest, __, type, url]) => ({
|
|
1227
|
-
name,
|
|
1228
|
-
current,
|
|
1229
|
-
latest,
|
|
1230
|
-
type,
|
|
1231
|
-
url
|
|
1232
|
-
}));
|
|
1233
|
-
}
|
|
1234
|
-
function yarnv2ToOutdatedResult(output) {
|
|
1235
|
-
const npmOutdated = JSON.parse(output);
|
|
1236
|
-
return npmOutdated.map(({ name, current, latest, type }) => ({
|
|
1237
|
-
name,
|
|
1238
|
-
current,
|
|
1239
|
-
latest,
|
|
1240
|
-
type
|
|
1241
|
-
}));
|
|
1242
|
-
}
|
|
1243
|
-
function pnpmToOutdatedResult(output) {
|
|
1244
|
-
const pnpmOutdated = JSON.parse(output);
|
|
1245
|
-
return objectToEntries(pnpmOutdated).map(
|
|
1246
|
-
([name, { current, latest, dependencyType: type }]) => ({
|
|
1247
|
-
name,
|
|
1248
|
-
current,
|
|
1249
|
-
latest,
|
|
1250
|
-
type
|
|
1251
|
-
})
|
|
1252
|
-
);
|
|
1253
|
-
}
|
|
1254
|
-
|
|
1255
1369
|
// packages/plugin-js-packages/src/lib/runner/outdated/constants.ts
|
|
1256
1370
|
var outdatedSeverity = {
|
|
1257
1371
|
major: "error",
|
|
1258
1372
|
minor: "warning",
|
|
1259
1373
|
patch: "info"
|
|
1260
1374
|
};
|
|
1261
|
-
var normalizeOutdatedMapper = {
|
|
1262
|
-
npm: npmToOutdatedResult,
|
|
1263
|
-
"yarn-classic": yarnv1ToOutdatedResult,
|
|
1264
|
-
"yarn-modern": yarnv2ToOutdatedResult,
|
|
1265
|
-
pnpm: pnpmToOutdatedResult
|
|
1266
|
-
};
|
|
1267
|
-
var outdatedArgs = {
|
|
1268
|
-
npm: ["--long"],
|
|
1269
|
-
"yarn-classic": [],
|
|
1270
|
-
"yarn-modern": [],
|
|
1271
|
-
pnpm: []
|
|
1272
|
-
};
|
|
1273
1375
|
|
|
1274
1376
|
// packages/plugin-js-packages/src/lib/runner/outdated/types.ts
|
|
1275
1377
|
var versionType = ["major", "minor", "patch"];
|
|
1276
1378
|
|
|
1277
1379
|
// packages/plugin-js-packages/src/lib/runner/outdated/transform.ts
|
|
1278
|
-
function outdatedResultToAuditOutput(result, packageManager,
|
|
1380
|
+
function outdatedResultToAuditOutput(result, packageManager, depGroup) {
|
|
1279
1381
|
const relevantDependencies = result.filter(
|
|
1280
|
-
(dep) => dep.type === dependencyGroupToLong[
|
|
1382
|
+
(dep) => dep.type === dependencyGroupToLong[depGroup]
|
|
1281
1383
|
);
|
|
1282
|
-
const outdatedDependencies = relevantDependencies.filter(
|
|
1283
|
-
(dep) => dep.current !== dep.latest
|
|
1384
|
+
const outdatedDependencies = relevantDependencies.filter((dep) => dep.current !== dep.latest).filter(
|
|
1385
|
+
(dep) => dep.current.split("-")[0]?.toString() !== dep.latest.split("-")[0]?.toString()
|
|
1284
1386
|
);
|
|
1285
1387
|
const outdatedStats = outdatedDependencies.reduce(
|
|
1286
1388
|
(acc, dep) => {
|
|
@@ -1291,7 +1393,7 @@ function outdatedResultToAuditOutput(result, packageManager, dependencyGroup) {
|
|
|
1291
1393
|
);
|
|
1292
1394
|
const issues = outdatedDependencies.length === 0 ? [] : outdatedToIssues(outdatedDependencies);
|
|
1293
1395
|
return {
|
|
1294
|
-
slug: `${packageManager}-outdated-${
|
|
1396
|
+
slug: `${packageManager}-outdated-${depGroup}`,
|
|
1295
1397
|
score: calculateOutdatedScore(
|
|
1296
1398
|
outdatedStats.major,
|
|
1297
1399
|
relevantDependencies.length
|
|
@@ -1346,7 +1448,8 @@ function getOutdatedLevel(currentFullVersion, latestFullVersion) {
|
|
|
1346
1448
|
throw new Error("Package is not outdated.");
|
|
1347
1449
|
}
|
|
1348
1450
|
function splitPackageVersion(fullVersion) {
|
|
1349
|
-
const
|
|
1451
|
+
const semanticVersion = String(fullVersion.split("-")[0]);
|
|
1452
|
+
const [major, minor, patch] = semanticVersion.split(".").map(Number);
|
|
1350
1453
|
if (major == null || minor == null || patch == null) {
|
|
1351
1454
|
throw new Error(`Invalid version description ${fullVersion}`);
|
|
1352
1455
|
}
|
|
@@ -1362,32 +1465,33 @@ async function executeRunner() {
|
|
|
1362
1465
|
await ensureDirectoryExists(dirname(RUNNER_OUTPUT_PATH));
|
|
1363
1466
|
await writeFile(RUNNER_OUTPUT_PATH, JSON.stringify(checkResults));
|
|
1364
1467
|
}
|
|
1365
|
-
async function processOutdated(
|
|
1468
|
+
async function processOutdated(id) {
|
|
1469
|
+
const pm = packageManagers[id];
|
|
1366
1470
|
const { stdout } = await executeProcess({
|
|
1367
|
-
command:
|
|
1368
|
-
args:
|
|
1471
|
+
command: pm.command,
|
|
1472
|
+
args: pm.outdated.commandArgs,
|
|
1369
1473
|
cwd: process.cwd(),
|
|
1370
1474
|
ignoreExitCode: true
|
|
1371
1475
|
// outdated returns exit code 1 when outdated dependencies are found
|
|
1372
1476
|
});
|
|
1373
|
-
const normalizedResult =
|
|
1477
|
+
const normalizedResult = pm.outdated.unifyResult(stdout);
|
|
1374
1478
|
return dependencyGroups.map(
|
|
1375
|
-
(
|
|
1479
|
+
(depGroup) => outdatedResultToAuditOutput(normalizedResult, id, depGroup)
|
|
1376
1480
|
);
|
|
1377
1481
|
}
|
|
1378
|
-
async function processAudit(
|
|
1379
|
-
const
|
|
1482
|
+
async function processAudit(id, auditLevelMapping) {
|
|
1483
|
+
const pm = packageManagers[id];
|
|
1484
|
+
const supportedDepGroups = pm.audit.supportedDepGroups ?? dependencyGroups;
|
|
1380
1485
|
const auditResults = await Promise.allSettled(
|
|
1381
1486
|
supportedDepGroups.map(
|
|
1382
|
-
async (
|
|
1487
|
+
async (depGroup) => {
|
|
1383
1488
|
const { stdout } = await executeProcess({
|
|
1384
|
-
command:
|
|
1385
|
-
args:
|
|
1489
|
+
command: pm.command,
|
|
1490
|
+
args: pm.audit.getCommandArgs(depGroup),
|
|
1386
1491
|
cwd: process.cwd(),
|
|
1387
|
-
ignoreExitCode:
|
|
1388
|
-
// yarn v1 and PNPM do not have exit code configuration
|
|
1492
|
+
ignoreExitCode: pm.audit.ignoreExitCode
|
|
1389
1493
|
});
|
|
1390
|
-
return [
|
|
1494
|
+
return [depGroup, pm.audit.unifyResult(stdout)];
|
|
1391
1495
|
}
|
|
1392
1496
|
)
|
|
1393
1497
|
);
|
|
@@ -1396,31 +1500,21 @@ async function processAudit(packageManager, auditLevelMapping) {
|
|
|
1396
1500
|
rejected.map((result) => {
|
|
1397
1501
|
console.error(result.reason);
|
|
1398
1502
|
});
|
|
1399
|
-
throw new Error(
|
|
1400
|
-
`JS Packages plugin: Running ${pkgManagerCommands[packageManager]} audit failed.`
|
|
1401
|
-
);
|
|
1503
|
+
throw new Error(`JS Packages plugin: Running ${pm.name} audit failed.`);
|
|
1402
1504
|
}
|
|
1403
1505
|
const fulfilled = objectFromEntries(
|
|
1404
1506
|
auditResults.filter(isPromiseFulfilledResult).map((x) => x.value)
|
|
1405
1507
|
);
|
|
1406
|
-
const uniqueResults =
|
|
1508
|
+
const uniqueResults = pm.audit.postProcessResult?.(fulfilled) ?? fulfilled;
|
|
1407
1509
|
return supportedDepGroups.map(
|
|
1408
|
-
(
|
|
1409
|
-
uniqueResults[
|
|
1410
|
-
|
|
1411
|
-
|
|
1510
|
+
(depGroup) => auditResultToAuditOutput(
|
|
1511
|
+
uniqueResults[depGroup],
|
|
1512
|
+
id,
|
|
1513
|
+
depGroup,
|
|
1412
1514
|
auditLevelMapping
|
|
1413
1515
|
)
|
|
1414
1516
|
);
|
|
1415
1517
|
}
|
|
1416
|
-
function getAuditCommandArgs(packageManager, group) {
|
|
1417
|
-
return [
|
|
1418
|
-
...packageManager === "yarn-modern" ? ["npm"] : [],
|
|
1419
|
-
"audit",
|
|
1420
|
-
"--json",
|
|
1421
|
-
...auditArgs(group)[packageManager]
|
|
1422
|
-
];
|
|
1423
|
-
}
|
|
1424
1518
|
|
|
1425
1519
|
// packages/plugin-js-packages/src/bin.ts
|
|
1426
1520
|
await executeRunner();
|