@code-pushup/js-packages-plugin 0.96.1 → 0.98.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/package.json +4 -4
- package/src/lib/constants.d.ts +2 -0
- package/src/lib/constants.js +2 -0
- package/src/lib/constants.js.map +1 -1
- package/src/lib/format.d.ts +1 -0
- package/src/lib/format.js +4 -0
- package/src/lib/format.js.map +1 -0
- package/src/lib/js-packages-plugin.js +13 -10
- package/src/lib/js-packages-plugin.js.map +1 -1
- package/src/lib/package-managers/derive-package-manager.js +11 -1
- package/src/lib/package-managers/derive-package-manager.js.map +1 -1
- package/src/lib/package-managers/npm/npm.js +1 -1
- package/src/lib/package-managers/yarn-modern/yarn-modern.js +1 -1
- package/src/lib/package-managers/yarn-modern/yarn-modern.js.map +1 -1
- package/src/lib/runner/runner.d.ts +3 -0
- package/src/lib/runner/runner.js +91 -0
- package/src/lib/runner/runner.js.map +1 -0
- package/src/lib/runner/utils.js +21 -10
- package/src/lib/runner/utils.js.map +1 -1
- package/src/bin.d.ts +0 -1
- package/src/bin.js +0 -6
- package/src/bin.js.map +0 -1
- package/src/lib/runner/index.d.ts +0 -4
- package/src/lib/runner/index.js +0 -65
- package/src/lib/runner/index.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-pushup/js-packages-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.98.0",
|
|
4
4
|
"description": "Code PushUp plugin for JavaScript packages 🛡️",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/code-pushup/cli/tree/main/packages/plugin-js-packages#readme",
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
},
|
|
38
38
|
"type": "module",
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@code-pushup/models": "0.
|
|
41
|
-
"@code-pushup/utils": "0.
|
|
40
|
+
"@code-pushup/models": "0.98.0",
|
|
41
|
+
"@code-pushup/utils": "0.98.0",
|
|
42
|
+
"ansis": "^3.3.2",
|
|
42
43
|
"build-md": "^0.4.1",
|
|
43
44
|
"semver": "^7.6.0",
|
|
44
|
-
"yargs": "^17.7.2",
|
|
45
45
|
"zod": "^4.0.5"
|
|
46
46
|
},
|
|
47
47
|
"files": [
|
package/src/lib/constants.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { IssueSeverity } from '@code-pushup/models';
|
|
2
2
|
import type { DependencyGroup, PackageAuditLevel } from './config.js';
|
|
3
3
|
import type { DependencyGroupLong } from './runner/outdated/types.js';
|
|
4
|
+
export declare const JS_PACKAGES_PLUGIN_SLUG = "js-packages";
|
|
5
|
+
export declare const JS_PACKAGES_PLUGIN_TITLE = "JS packages";
|
|
4
6
|
export declare const defaultAuditLevelMapping: Record<PackageAuditLevel, IssueSeverity>;
|
|
5
7
|
export declare const dependencyGroupToLong: Record<DependencyGroup, DependencyGroupLong>;
|
|
6
8
|
export declare const dependencyGroupWeights: Record<DependencyGroup, number>;
|
package/src/lib/constants.js
CHANGED
package/src/lib/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,wBAAwB,GAGjC;IACF,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,SAAS;IACnB,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAG9B;IACF,IAAI,EAAE,cAAc;IACpB,GAAG,EAAE,iBAAiB;IACtB,QAAQ,EAAE,sBAAsB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAoC;IACrE,wDAAwD;IACxD,IAAI,EAAE,EAAE;IACR,GAAG,EAAE,EAAE;IACP,QAAQ,EAAE,CAAC;IACX,uDAAuD;CACxD,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAoC;IAC7D,IAAI,EAAE,oEAAoE;IAC1E,GAAG,EAAE,uEAAuE;IAC5E,QAAQ,EACN,4EAA4E;CAC/E,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AACrD,MAAM,CAAC,MAAM,wBAAwB,GAAG,aAAa,CAAC;AAEtD,MAAM,CAAC,MAAM,wBAAwB,GAGjC;IACF,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,SAAS;IACnB,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAG9B;IACF,IAAI,EAAE,cAAc;IACpB,GAAG,EAAE,iBAAiB;IACtB,QAAQ,EAAE,sBAAsB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAoC;IACrE,wDAAwD;IACxD,IAAI,EAAE,EAAE;IACR,GAAG,EAAE,EAAE;IACP,QAAQ,EAAE,CAAC;IACX,uDAAuD;CACxD,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAoC;IAC7D,IAAI,EAAE,oEAAoE;IAC1E,GAAG,EAAE,uEAAuE;IAC5E,QAAQ,EACN,4EAA4E;CAC/E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const formatMetaLog: (message: string) => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/lib/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,MAAM,CAAC,MAAM,aAAa,GAAG,sBAAsB,CAAC,wBAAwB,CAAC,CAAC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import ansis from 'ansis';
|
|
1
2
|
import { createRequire } from 'node:module';
|
|
2
|
-
import
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { logger, pluralizeToken } from '@code-pushup/utils';
|
|
4
4
|
import { dependencyGroups, } from './config.js';
|
|
5
|
-
import { dependencyDocs, dependencyGroupWeights } from './constants.js';
|
|
5
|
+
import { JS_PACKAGES_PLUGIN_SLUG, JS_PACKAGES_PLUGIN_TITLE, dependencyDocs, dependencyGroupWeights, } from './constants.js';
|
|
6
|
+
import { formatMetaLog } from './format.js';
|
|
6
7
|
import { packageManagers } from './package-managers/package-managers.js';
|
|
7
|
-
import {
|
|
8
|
+
import { createRunnerFunction } from './runner/runner.js';
|
|
8
9
|
import { normalizeConfig } from './utils.js';
|
|
9
10
|
/**
|
|
10
11
|
* Instantiates Code PushUp JS packages plugin for core config.
|
|
@@ -24,19 +25,21 @@ import { normalizeConfig } from './utils.js';
|
|
|
24
25
|
*/
|
|
25
26
|
export async function jsPackagesPlugin(config) {
|
|
26
27
|
const { packageManager, checks, depGroups, scoreTargets, ...jsPackagesPluginConfigRest } = await normalizeConfig(config);
|
|
27
|
-
const runnerScriptPath = path.join(fileURLToPath(path.dirname(import.meta.url)), '..', 'bin.js');
|
|
28
28
|
const packageJson = createRequire(import.meta.url)('../../package.json');
|
|
29
|
+
const audits = createAudits(packageManager.slug, checks, depGroups);
|
|
30
|
+
const groups = createGroups(packageManager.slug, checks, depGroups);
|
|
31
|
+
logger.info(formatMetaLog(`Created ${pluralizeToken('audit', audits.length)} and ${pluralizeToken('group', groups.length)} for ${ansis.bold(packageManager.name)} package manager`));
|
|
29
32
|
return {
|
|
30
|
-
slug:
|
|
31
|
-
title:
|
|
33
|
+
slug: JS_PACKAGES_PLUGIN_SLUG,
|
|
34
|
+
title: JS_PACKAGES_PLUGIN_TITLE,
|
|
32
35
|
icon: packageManager.icon,
|
|
33
36
|
description: 'This plugin runs audit to uncover vulnerabilities and lists outdated dependencies. It supports npm, yarn classic, yarn modern, and pnpm package managers.',
|
|
34
37
|
docsUrl: packageManager.docs.homepage,
|
|
35
38
|
packageName: packageJson.name,
|
|
36
39
|
version: packageJson.version,
|
|
37
|
-
audits
|
|
38
|
-
groups
|
|
39
|
-
runner:
|
|
40
|
+
audits,
|
|
41
|
+
groups,
|
|
42
|
+
runner: createRunnerFunction({
|
|
40
43
|
...jsPackagesPluginConfigRest,
|
|
41
44
|
checks,
|
|
42
45
|
packageManager: packageManager.slug,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js-packages-plugin.js","sourceRoot":"","sources":["../../../src/lib/js-packages-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"js-packages-plugin.js","sourceRoot":"","sources":["../../../src/lib/js-packages-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { readFile } from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { fileExists } from '@code-pushup/utils';
|
|
3
|
+
import { fileExists, logger } from '@code-pushup/utils';
|
|
4
|
+
import { formatMetaLog } from '../format.js';
|
|
4
5
|
import { deriveYarnVersion } from './derive-yarn.js';
|
|
6
|
+
import { packageManagers } from './package-managers.js';
|
|
5
7
|
export async function derivePackageManagerInPackageJson(currentDir = process.cwd()) {
|
|
6
8
|
if (await fileExists(path.join(currentDir, 'package.json'))) {
|
|
7
9
|
const content = JSON.parse((await readFile(path.join('package.json'))).toString());
|
|
@@ -23,21 +25,29 @@ export async function derivePackageManagerInPackageJson(currentDir = process.cwd
|
|
|
23
25
|
export async function derivePackageManager(currentDir = process.cwd()) {
|
|
24
26
|
const pkgManagerFromPackageJson = await derivePackageManagerInPackageJson(currentDir);
|
|
25
27
|
if (pkgManagerFromPackageJson) {
|
|
28
|
+
logDerivedPackageManager(pkgManagerFromPackageJson, 'packageManager field in package.json');
|
|
26
29
|
return pkgManagerFromPackageJson;
|
|
27
30
|
}
|
|
28
31
|
// Check for lock files
|
|
29
32
|
if (await fileExists(path.join(currentDir, 'package-lock.json'))) {
|
|
33
|
+
logDerivedPackageManager('npm', 'existence of package-lock.json file');
|
|
30
34
|
return 'npm';
|
|
31
35
|
}
|
|
32
36
|
else if (await fileExists(path.join(currentDir, 'pnpm-lock.yaml'))) {
|
|
37
|
+
logDerivedPackageManager('pnpm', 'existence of pnpm-lock.yaml file');
|
|
33
38
|
return 'pnpm';
|
|
34
39
|
}
|
|
35
40
|
else if (await fileExists(path.join(currentDir, 'yarn.lock'))) {
|
|
36
41
|
const yarnVersion = await deriveYarnVersion();
|
|
37
42
|
if (yarnVersion) {
|
|
43
|
+
logDerivedPackageManager(yarnVersion, 'existence of yarn.lock file and yarn -v command');
|
|
38
44
|
return yarnVersion;
|
|
39
45
|
}
|
|
40
46
|
}
|
|
41
47
|
throw new Error('Could not detect package manager. Please provide it in the js-packages plugin config.');
|
|
42
48
|
}
|
|
49
|
+
function logDerivedPackageManager(id, sourceDescription) {
|
|
50
|
+
const pm = packageManagers[id];
|
|
51
|
+
logger.info(formatMetaLog(`Inferred ${pm.name} package manager from ${sourceDescription}`));
|
|
52
|
+
}
|
|
43
53
|
//# sourceMappingURL=derive-package-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive-package-manager.js","sourceRoot":"","sources":["../../../../src/lib/package-managers/derive-package-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"derive-package-manager.js","sourceRoot":"","sources":["../../../../src/lib/package-managers/derive-package-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yarn-modern.js","sourceRoot":"","sources":["../../../../../src/lib/package-managers/yarn-modern/yarn-modern.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,uGAAuG;AACvG,MAAM,4BAA4B,GAAoC;IACpE,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,aAAa;IAClB,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAmB;IACtD,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"yarn-modern.js","sourceRoot":"","sources":["../../../../../src/lib/package-managers/yarn-modern/yarn-modern.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,uGAAuG;AACvG,MAAM,4BAA4B,GAAoC;IACpE,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,aAAa;IAClB,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAmB;IACtD,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE;QACJ,QAAQ,EAAE,qCAAqC;QAC/C,KAAK,EAAE,mCAAmC;QAC1C,QAAQ,EAAE,kDAAkD;KAC7D;IACD,KAAK,EAAE;QACL,cAAc,EAAE,QAAQ,CAAC,EAAE;YACzB,MAAM,WAAW,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAC;YAC3D,OAAO;gBACL,KAAK;gBACL,OAAO;gBACP,aAAa;gBACb,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,QAAQ;aACT,CAAC;QACJ,CAAC;QACD,kBAAkB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,2DAA2D;QAChG,WAAW,EAAE,sBAAsB;QACnC,cAAc,EAAE,IAAI;KACrB;IACD,QAAQ,EAAE;QACR,WAAW,EAAE;YACX,UAAU;YACV,eAAe,EAAE,uDAAuD;YACxE,OAAO;YACP,QAAQ;SACT;QACD,WAAW,EAAE,yBAAyB;KACvC;CACF,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { asyncSequential, capitalize, executeProcess, formatAsciiTable, logger, objectFromEntries, objectToEntries, pluralizeToken, } from '@code-pushup/utils';
|
|
3
|
+
import { dependencyGroups, packageAuditLevels, } from '../config.js';
|
|
4
|
+
import { dependencyGroupToLong } from '../constants.js';
|
|
5
|
+
import { packageManagers } from '../package-managers/package-managers.js';
|
|
6
|
+
import { auditResultToAuditOutput } from './audit/transform.js';
|
|
7
|
+
import { outdatedResultToAuditOutput } from './outdated/transform.js';
|
|
8
|
+
import { getTotalDependencies } from './utils.js';
|
|
9
|
+
export function createRunnerFunction(config) {
|
|
10
|
+
return async () => {
|
|
11
|
+
const { packageManager, checks, auditLevelMapping, packageJsonPath, dependencyGroups: depGroups, } = config;
|
|
12
|
+
const auditResults = checks.includes('audit')
|
|
13
|
+
? await processAudit(packageManager, depGroups, auditLevelMapping, packageJsonPath)
|
|
14
|
+
: [];
|
|
15
|
+
const outdatedResults = checks.includes('outdated')
|
|
16
|
+
? await processOutdated(packageManager, depGroups, packageJsonPath)
|
|
17
|
+
: [];
|
|
18
|
+
return [...auditResults, ...outdatedResults];
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
async function processOutdated(id, depGroups, packageJsonPath) {
|
|
22
|
+
logger.info('Looking for outdated packages ...');
|
|
23
|
+
const pm = packageManagers[id];
|
|
24
|
+
const { stdout } = await executeProcess({
|
|
25
|
+
command: pm.command,
|
|
26
|
+
args: pm.outdated.commandArgs,
|
|
27
|
+
cwd: packageJsonPath ? path.dirname(packageJsonPath) : process.cwd(),
|
|
28
|
+
ignoreExitCode: true, // outdated returns exit code 1 when outdated dependencies are found
|
|
29
|
+
});
|
|
30
|
+
const normalizedResult = pm.outdated.unifyResult(stdout);
|
|
31
|
+
logger.info(`Detected ${pluralizeToken('outdated package', normalizedResult.length)} in total`);
|
|
32
|
+
const depTotals = await getTotalDependencies(packageJsonPath);
|
|
33
|
+
return depGroups.map(depGroup => outdatedResultToAuditOutput(normalizedResult, id, depGroup, depTotals[dependencyGroupToLong[depGroup]]));
|
|
34
|
+
}
|
|
35
|
+
async function processAudit(id, depGroups, auditLevelMapping, packageJsonPath) {
|
|
36
|
+
const pm = packageManagers[id];
|
|
37
|
+
const supportedAuditDepGroups = pm.audit.supportedDepGroups ?? dependencyGroups;
|
|
38
|
+
const compatibleAuditDepGroups = depGroups.filter(group => supportedAuditDepGroups.includes(group));
|
|
39
|
+
logger.info(`Auditing packages for ${pluralizeToken('dependency group', compatibleAuditDepGroups.length)} (${compatibleAuditDepGroups.join(', ')}) ...`);
|
|
40
|
+
const auditResults = await asyncSequential(compatibleAuditDepGroups, async (depGroup) => {
|
|
41
|
+
const { stdout } = await executeProcess({
|
|
42
|
+
command: pm.command,
|
|
43
|
+
args: pm.audit.getCommandArgs(depGroup),
|
|
44
|
+
cwd: packageJsonPath ? path.dirname(packageJsonPath) : process.cwd(),
|
|
45
|
+
ignoreExitCode: pm.audit.ignoreExitCode,
|
|
46
|
+
});
|
|
47
|
+
return [depGroup, pm.audit.unifyResult(stdout)];
|
|
48
|
+
});
|
|
49
|
+
const resultsMap = objectFromEntries(auditResults);
|
|
50
|
+
const uniqueResults = pm.audit.postProcessResult?.(resultsMap) ?? resultsMap;
|
|
51
|
+
logAuditSummary(uniqueResults);
|
|
52
|
+
return compatibleAuditDepGroups.map(depGroup => auditResultToAuditOutput(
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
54
|
+
uniqueResults[depGroup], id, depGroup, auditLevelMapping));
|
|
55
|
+
}
|
|
56
|
+
function logAuditSummary(results) {
|
|
57
|
+
const { totalCount, countsPerLevel } = aggregateAuditResults(results);
|
|
58
|
+
const formattedLevels = objectToEntries(countsPerLevel)
|
|
59
|
+
.filter(([, count]) => count > 0)
|
|
60
|
+
.map(([level, count]) => `${count} ${level}`)
|
|
61
|
+
.join(', ');
|
|
62
|
+
logger.info([
|
|
63
|
+
`Found ${pluralizeToken('vulnerability', totalCount)} in total`,
|
|
64
|
+
formattedLevels && `(${formattedLevels})`,
|
|
65
|
+
]
|
|
66
|
+
.filter(Boolean)
|
|
67
|
+
.join(' '));
|
|
68
|
+
if (!logger.isVerbose()) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
logger.debug(formatAsciiTable({
|
|
72
|
+
columns: [
|
|
73
|
+
{ key: 'depGroup', label: 'Dep. group' },
|
|
74
|
+
...[...packageAuditLevels, 'total'].map((level) => ({
|
|
75
|
+
key: level,
|
|
76
|
+
label: capitalize(level),
|
|
77
|
+
align: 'right',
|
|
78
|
+
})),
|
|
79
|
+
],
|
|
80
|
+
rows: objectToEntries(results).map(([depGroup, result]) => ({
|
|
81
|
+
depGroup,
|
|
82
|
+
...result?.summary,
|
|
83
|
+
})),
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
function aggregateAuditResults(results) {
|
|
87
|
+
const totalCount = Object.values(results).reduce((acc, { vulnerabilities }) => acc + vulnerabilities.length, 0);
|
|
88
|
+
const countsPerLevel = Object.values(results).reduce((acc, { summary }) => objectFromEntries(packageAuditLevels.map(level => [level, acc[level] + summary[level]])), objectFromEntries(packageAuditLevels.map(level => [level, 0])));
|
|
89
|
+
return { totalCount, countsPerLevel };
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../src/lib/runner/runner.ts"],"names":[],"mappings":"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"}
|
package/src/lib/runner/utils.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { logger, objectFromEntries, objectToEntries, objectToKeys, pluralizeToken, readJsonFile, } from '@code-pushup/utils';
|
|
2
3
|
import { dependencyGroupLong, } from './outdated/types.js';
|
|
3
4
|
export function filterAuditResult(result, key, referenceResult) {
|
|
4
5
|
if (result.vulnerabilities.length === 0) {
|
|
@@ -30,14 +31,24 @@ export function filterAuditResult(result, key, referenceResult) {
|
|
|
30
31
|
};
|
|
31
32
|
}
|
|
32
33
|
export async function getTotalDependencies(packageJsonPath) {
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
34
|
+
const formattedPath = path.relative(process.cwd(), packageJsonPath);
|
|
35
|
+
return logger.task(`Counting direct dependencies in ${formattedPath}`, async () => {
|
|
36
|
+
const parsedDeps = await readJsonFile(packageJsonPath);
|
|
37
|
+
const mergedDeps = objectFromEntries(dependencyGroupLong.map(group => {
|
|
38
|
+
const deps = parsedDeps[group];
|
|
39
|
+
return [group, deps == null ? [] : objectToKeys(deps)];
|
|
40
|
+
}));
|
|
41
|
+
const depTotals = objectFromEntries(objectToKeys(mergedDeps).map(deps => [
|
|
42
|
+
deps,
|
|
43
|
+
new Set(mergedDeps[deps]).size,
|
|
44
|
+
]));
|
|
45
|
+
const depTotal = Object.values(depTotals).reduce((acc, count) => acc + count, 0);
|
|
46
|
+
const groupsSummary = objectToEntries(depTotals)
|
|
47
|
+
.filter(([, count]) => count > 0)
|
|
48
|
+
.map(([group, count]) => `${count} ${group}`)
|
|
49
|
+
.join(', ');
|
|
50
|
+
const message = `Found ${pluralizeToken('direct dependency', depTotal)} in ${formattedPath} (${groupsSummary})`;
|
|
51
|
+
return { message, result: depTotals };
|
|
52
|
+
});
|
|
42
53
|
}
|
|
43
54
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/lib/runner/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAGL,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,UAAU,iBAAiB,CAC/B,MAAmB,EACnB,GAAwB,EACxB,eAA6B;IAE7B,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAChD,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACX,MAAM,cAAc,GAAG,eAAe,IAAI,GAAG,CAAC;QAC9C,MAAM,OAAO,GAAG,cAAc,CAAC,eAAe;aAC3C,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;aACxC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAEtB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO;gBACL,eAAe,EAAE,GAAG,CAAC,eAAe;gBACpC,OAAO,EAAE;oBACP,GAAG,GAAG,CAAC,OAAO;oBACd,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAC7C,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC;iBAC7B;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,eAAe,EAAE,CAAC,GAAG,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC;YAC9C,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC;IACJ,CAAC,EACD,EAAE,eAAe,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CACjD,CAAC;IAEF,OAAO;QACL,eAAe,EAAE,YAAY,CAAC,eAAe;QAC7C,OAAO,EAAE,YAAY,CAAC,OAAO;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,eAAuB;IAEvB,MAAM,UAAU,GAAG,MAAM,YAAY,CAAc,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/lib/runner/utils.ts"],"names":[],"mappings":"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"}
|
package/src/bin.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/src/bin.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import process from 'node:process';
|
|
2
|
-
import { Parser } from 'yargs/helpers';
|
|
3
|
-
import { executeRunner } from './lib/runner/index.js';
|
|
4
|
-
const { runnerConfigPath, runnerOutputPath } = Parser(process.argv);
|
|
5
|
-
await executeRunner({ runnerConfigPath, runnerOutputPath });
|
|
6
|
-
//# sourceMappingURL=bin.js.map
|
package/src/bin.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/bin.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpE,MAAM,aAAa,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { RunnerConfig, RunnerFilesPaths } from '@code-pushup/models';
|
|
2
|
-
import { type FinalJSPackagesPluginConfig } from '../config.js';
|
|
3
|
-
export declare function createRunnerConfig(scriptPath: string, config: FinalJSPackagesPluginConfig): Promise<RunnerConfig>;
|
|
4
|
-
export declare function executeRunner({ runnerConfigPath, runnerOutputPath, }: RunnerFilesPaths): Promise<void>;
|
package/src/lib/runner/index.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { writeFile } from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { asyncSequential, createRunnerFiles, ensureDirectoryExists, executeProcess, filePathToCliArg, objectFromEntries, objectToCliArgs, readJsonFile, } from '@code-pushup/utils';
|
|
4
|
-
import { dependencyGroups, } from '../config.js';
|
|
5
|
-
import { dependencyGroupToLong } from '../constants.js';
|
|
6
|
-
import { packageManagers } from '../package-managers/package-managers.js';
|
|
7
|
-
import { auditResultToAuditOutput } from './audit/transform.js';
|
|
8
|
-
import { outdatedResultToAuditOutput } from './outdated/transform.js';
|
|
9
|
-
import { getTotalDependencies } from './utils.js';
|
|
10
|
-
export async function createRunnerConfig(scriptPath, config) {
|
|
11
|
-
const { runnerConfigPath, runnerOutputPath } = await createRunnerFiles('js-packages', JSON.stringify(config));
|
|
12
|
-
return {
|
|
13
|
-
command: 'node',
|
|
14
|
-
args: [
|
|
15
|
-
filePathToCliArg(scriptPath),
|
|
16
|
-
...objectToCliArgs({ runnerConfigPath, runnerOutputPath }),
|
|
17
|
-
],
|
|
18
|
-
configFile: runnerConfigPath,
|
|
19
|
-
outputFile: runnerOutputPath,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
export async function executeRunner({ runnerConfigPath, runnerOutputPath, }) {
|
|
23
|
-
const { packageManager, checks, auditLevelMapping, packageJsonPath, dependencyGroups: depGroups, } = await readJsonFile(runnerConfigPath);
|
|
24
|
-
const auditResults = checks.includes('audit')
|
|
25
|
-
? await processAudit(packageManager, depGroups, auditLevelMapping, packageJsonPath)
|
|
26
|
-
: [];
|
|
27
|
-
const outdatedResults = checks.includes('outdated')
|
|
28
|
-
? await processOutdated(packageManager, depGroups, packageJsonPath)
|
|
29
|
-
: [];
|
|
30
|
-
const checkResults = [...auditResults, ...outdatedResults];
|
|
31
|
-
await ensureDirectoryExists(path.dirname(runnerOutputPath));
|
|
32
|
-
await writeFile(runnerOutputPath, JSON.stringify(checkResults));
|
|
33
|
-
}
|
|
34
|
-
async function processOutdated(id, depGroups, packageJsonPath) {
|
|
35
|
-
const pm = packageManagers[id];
|
|
36
|
-
const { stdout } = await executeProcess({
|
|
37
|
-
command: pm.command,
|
|
38
|
-
args: pm.outdated.commandArgs,
|
|
39
|
-
cwd: packageJsonPath ? path.dirname(packageJsonPath) : process.cwd(),
|
|
40
|
-
ignoreExitCode: true, // outdated returns exit code 1 when outdated dependencies are found
|
|
41
|
-
});
|
|
42
|
-
const depTotals = await getTotalDependencies(packageJsonPath);
|
|
43
|
-
const normalizedResult = pm.outdated.unifyResult(stdout);
|
|
44
|
-
return depGroups.map(depGroup => outdatedResultToAuditOutput(normalizedResult, id, depGroup, depTotals[dependencyGroupToLong[depGroup]]));
|
|
45
|
-
}
|
|
46
|
-
async function processAudit(id, depGroups, auditLevelMapping, packageJsonPath) {
|
|
47
|
-
const pm = packageManagers[id];
|
|
48
|
-
const supportedAuditDepGroups = pm.audit.supportedDepGroups ?? dependencyGroups;
|
|
49
|
-
const compatibleAuditDepGroups = depGroups.filter(group => supportedAuditDepGroups.includes(group));
|
|
50
|
-
const auditResults = await asyncSequential(compatibleAuditDepGroups, async (depGroup) => {
|
|
51
|
-
const { stdout } = await executeProcess({
|
|
52
|
-
command: pm.command,
|
|
53
|
-
args: pm.audit.getCommandArgs(depGroup),
|
|
54
|
-
cwd: packageJsonPath ? path.dirname(packageJsonPath) : process.cwd(),
|
|
55
|
-
ignoreExitCode: pm.audit.ignoreExitCode,
|
|
56
|
-
});
|
|
57
|
-
return [depGroup, pm.audit.unifyResult(stdout)];
|
|
58
|
-
});
|
|
59
|
-
const resultsMap = objectFromEntries(auditResults);
|
|
60
|
-
const uniqueResults = pm.audit.postProcessResult?.(resultsMap) ?? resultsMap;
|
|
61
|
-
return compatibleAuditDepGroups.map(depGroup => auditResultToAuditOutput(
|
|
62
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
63
|
-
uniqueResults[depGroup], id, depGroup, auditLevelMapping));
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/runner/index.ts"],"names":[],"mappings":"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"}
|