@code-pushup/eslint-plugin 0.94.0 → 0.95.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-pushup/eslint-plugin",
3
- "version": "0.94.0",
3
+ "version": "0.95.0",
4
4
  "license": "MIT",
5
5
  "description": "Code PushUp plugin for detecting problems in source code using ESLint.📋",
6
6
  "homepage": "https://github.com/code-pushup/cli/tree/main/packages/plugin-eslint#readme",
@@ -38,9 +38,10 @@
38
38
  },
39
39
  "type": "module",
40
40
  "dependencies": {
41
+ "ansis": "^3.3.2",
41
42
  "glob": "^11.0.0",
42
- "@code-pushup/utils": "0.94.0",
43
- "@code-pushup/models": "0.94.0",
43
+ "@code-pushup/utils": "0.95.0",
44
+ "@code-pushup/models": "0.95.0",
44
45
  "zod": "^4.0.5"
45
46
  },
46
47
  "peerDependencies": {
@@ -1 +1,2 @@
1
1
  export declare const ESLINT_PLUGIN_SLUG = "eslint";
2
+ export declare const ESLINT_PLUGIN_TITLE = "ESLint";
@@ -1,2 +1,3 @@
1
1
  export const ESLINT_PLUGIN_SLUG = 'eslint';
2
+ export const ESLINT_PLUGIN_TITLE = 'ESLint';
2
3
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';
2
2
  import { validate } from '@code-pushup/models';
3
3
  import { eslintPluginConfigSchema, eslintPluginOptionsSchema, } from './config.js';
4
- import { ESLINT_PLUGIN_SLUG } from './constants.js';
4
+ import { ESLINT_PLUGIN_SLUG, ESLINT_PLUGIN_TITLE } from './constants.js';
5
5
  import { listAuditsAndGroups } from './meta/index.js';
6
6
  import { createRunnerFunction } from './runner/index.js';
7
7
  /**
@@ -32,7 +32,7 @@ export async function eslintPlugin(config, options) {
32
32
  const packageJson = createRequire(import.meta.url)('../../package.json');
33
33
  return {
34
34
  slug: ESLINT_PLUGIN_SLUG,
35
- title: 'ESLint',
35
+ title: ESLINT_PLUGIN_TITLE,
36
36
  icon: 'eslint',
37
37
  description: 'Official Code PushUp ESLint plugin',
38
38
  docsUrl: 'https://www.npmjs.com/package/@code-pushup/eslint-plugin',
@@ -40,7 +40,7 @@ export async function eslintPlugin(config, options) {
40
40
  version: packageJson.version,
41
41
  audits,
42
42
  groups,
43
- runner: await createRunnerFunction({
43
+ runner: createRunnerFunction({
44
44
  audits,
45
45
  targets,
46
46
  ...(artifacts ? { artifacts } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"eslint-plugin.js","sourceRoot":"","sources":["../../../src/lib/eslint-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAqB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAGL,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAA0B,EAC1B,OAA6B;IAE7B,MAAM,OAAO,GAAG,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;IAE3D,MAAM,EACJ,MAAM,EAAE,YAAY,EACpB,SAAS,EACT,YAAY,GACb,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEhE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAE5E,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAChD,oBAAoB,CACkB,CAAC;IAEzC,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,oCAAoC;QACjD,OAAO,EAAE,0DAA0D;QACnE,WAAW,EAAE,WAAW,CAAC,IAAI;QAC7B,OAAO,EAAE,WAAW,CAAC,OAAO;QAE5B,MAAM;QACN,MAAM;QAEN,MAAM,EAAE,MAAM,oBAAoB,CAAC;YACjC,MAAM;YACN,OAAO;YACP,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpC,CAAC;QACF,GAAG,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"eslint-plugin.js","sourceRoot":"","sources":["../../../src/lib/eslint-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAqB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAGL,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAA0B,EAC1B,OAA6B;IAE7B,MAAM,OAAO,GAAG,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;IAE3D,MAAM,EACJ,MAAM,EAAE,YAAY,EACpB,SAAS,EACT,YAAY,GACb,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEhE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAE5E,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAChD,oBAAoB,CACkB,CAAC;IAEzC,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,mBAAmB;QAC1B,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,oCAAoC;QACjD,OAAO,EAAE,0DAA0D;QACnE,WAAW,EAAE,WAAW,CAAC,IAAI;QAC7B,OAAO,EAAE,WAAW,CAAC,OAAO;QAE5B,MAAM;QACN,MAAM;QAEN,MAAM,EAAE,oBAAoB,CAAC;YAC3B,MAAM;YACN,OAAO;YACP,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpC,CAAC;QACF,GAAG,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const formatMetaLog: (message: string) => string;
@@ -0,0 +1,4 @@
1
+ import { pluginMetaLogFormatter } from '@code-pushup/utils';
2
+ import { ESLINT_PLUGIN_TITLE } from '../constants.js';
3
+ export const formatMetaLog = pluginMetaLogFormatter(ESLINT_PLUGIN_TITLE);
4
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../../src/lib/meta/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG,sBAAsB,CAAC,mBAAmB,CAAC,CAAC"}
@@ -1,7 +1,9 @@
1
1
  import type { Audit, Group } from '@code-pushup/models';
2
2
  import type { CustomGroup, ESLintTarget } from '../config.js';
3
+ import { formatMetaLog } from './format.js';
3
4
  export { ruleIdToSlug } from './hash.js';
4
5
  export { detectConfigVersion, type ConfigFormat } from './versions/index.js';
6
+ export { formatMetaLog };
5
7
  export declare function listAuditsAndGroups(targets: ESLintTarget[], customGroups?: CustomGroup[] | undefined): Promise<{
6
8
  audits: Audit[];
7
9
  groups: Group[];
@@ -1,19 +1,32 @@
1
+ import { formatAsciiTable, logger, pluralizeToken } from '@code-pushup/utils';
2
+ import { formatMetaLog } from './format.js';
1
3
  import { groupsFromCustomConfig, groupsFromRuleCategories, groupsFromRuleTypes, } from './groups.js';
2
4
  import { listRules } from './rules.js';
3
5
  import { ruleToAudit } from './transform.js';
4
6
  export { ruleIdToSlug } from './hash.js';
5
7
  export { detectConfigVersion } from './versions/index.js';
8
+ export { formatMetaLog };
6
9
  export async function listAuditsAndGroups(targets, customGroups) {
7
10
  const rules = await listRules(targets);
11
+ const audits = rules.map(ruleToAudit);
12
+ logger.info(formatMetaLog(`Found ${pluralizeToken('rule', rules.length)} in total for ${pluralizeToken('target', targets.length)}, mapped to audits`));
13
+ const resolvedTypeGroups = groupsFromRuleTypes(rules);
14
+ const resolvedCategoryGroups = groupsFromRuleCategories(rules);
8
15
  const resolvedCustomGroups = customGroups
9
16
  ? groupsFromCustomConfig(rules, customGroups)
10
17
  : [];
11
- const audits = rules.map(ruleToAudit);
12
18
  const groups = [
13
- ...groupsFromRuleTypes(rules),
14
- ...groupsFromRuleCategories(rules),
19
+ ...resolvedTypeGroups,
20
+ ...resolvedCategoryGroups,
15
21
  ...resolvedCustomGroups,
16
22
  ];
23
+ logger.info(formatMetaLog(`Created ${pluralizeToken('group', groups.length)} (${resolvedTypeGroups.length} from meta.type, ${resolvedCategoryGroups.length} from meta.docs.category, ${resolvedCustomGroups.length} from custom groups)`));
24
+ logger.debug(formatMetaLog(formatAsciiTable({
25
+ rows: groups.map(group => [
26
+ `• ${group.title}`,
27
+ pluralizeToken('audit', group.refs.length),
28
+ ]),
29
+ }, { borderless: true })));
17
30
  return { audits, groups };
18
31
  }
19
32
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/meta/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAqB,MAAM,qBAAqB,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAuB,EACvB,YAAwC;IAExC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IAEvC,MAAM,oBAAoB,GAAG,YAAY;QACvC,CAAC,CAAC,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC;QAC7C,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG;QACb,GAAG,mBAAmB,CAAC,KAAK,CAAC;QAC7B,GAAG,wBAAwB,CAAC,KAAK,CAAC;QAClC,GAAG,oBAAoB;KACxB,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/meta/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAqB,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAuB,EACvB,YAAwC;IAExC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAEtC,MAAM,CAAC,IAAI,CACT,aAAa,CACX,SAAS,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,iBAAiB,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAC3H,CACF,CAAC;IAEF,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,sBAAsB,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,oBAAoB,GAAG,YAAY;QACvC,CAAC,CAAC,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC;QAC7C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG;QACb,GAAG,kBAAkB;QACrB,GAAG,sBAAsB;QACzB,GAAG,oBAAoB;KACxB,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,CACX,WAAW,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,kBAAkB,CAAC,MAAM,oBAAoB,sBAAsB,CAAC,MAAM,6BAA6B,oBAAoB,CAAC,MAAM,sBAAsB,CAC/M,CACF,CAAC;IACF,MAAM,CAAC,KAAK,CACV,aAAa,CACX,gBAAgB,CACd;QACE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,KAAK,KAAK,CAAC,KAAK,EAAE;YAClB,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;SAC3C,CAAC;KACH,EACD,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CACF,CACF,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC"}
@@ -1,11 +1,16 @@
1
+ import ansis from 'ansis';
2
+ import { logger, pluralize, pluralizeToken, toArray } from '@code-pushup/utils';
3
+ import { formatMetaLog } from './format.js';
1
4
  import { jsonHash } from './hash.js';
2
5
  import { detectConfigVersion, selectRulesLoader } from './versions/index.js';
3
6
  export async function listRules(targets) {
4
7
  const version = await detectConfigVersion();
5
8
  const loadRulesMap = selectRulesLoader(version);
9
+ logger.debug(formatMetaLog(`Detected ${version} config format`));
6
10
  const rulesMap = await targets.reduce(async (acc, target) => {
7
11
  const map = await acc;
8
12
  const rules = await loadRulesMap(target);
13
+ logger.debug(formatMetaLog(`Found ${pluralizeToken('rule', rules.length)} for ${formatTarget(target)}`));
9
14
  return rules.reduce(mergeRuleIntoMap, map);
10
15
  }, Promise.resolve({}));
11
16
  return Object.values(rulesMap).flatMap(Object.values);
@@ -19,6 +24,15 @@ function mergeRuleIntoMap(map, rule) {
19
24
  },
20
25
  };
21
26
  }
27
+ function formatTarget(target) {
28
+ const patterns = toArray(target.patterns);
29
+ return [
30
+ `${pluralize('pattern', patterns.length)} ${ansis.bold(patterns.join(' '))}`,
31
+ target.eslintrc && `using config ${ansis.bold(target.eslintrc)}`,
32
+ ]
33
+ .filter(Boolean)
34
+ .join(' ');
35
+ }
22
36
  export function expandWildcardRules(wildcard, rules) {
23
37
  const prefix = wildcard.slice(0, -1);
24
38
  return rules.filter(rule => rule.startsWith(prefix));
@@ -1 +1 @@
1
- {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../../src/lib/meta/rules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI7E,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAuB;IACrD,MAAM,OAAO,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QAC1D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC,EAAE,OAAO,CAAC,OAAO,CAAW,EAAE,CAAC,CAAC,CAAC;IAElC,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAW,MAAM,CAAC,MAAM,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAa,EAAE,IAAc;IACrD,OAAO;QACL,GAAG,GAAG;QACN,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACT,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACf,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI;SAC/B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,KAAe;IAEf,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../../src/lib/meta/rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI7E,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAuB;IACrD,MAAM,OAAO,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,OAAO,gBAAgB,CAAC,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QAC1D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CACV,aAAa,CACX,SAAS,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,YAAY,CAAC,MAAM,CAAC,EAAE,CAC5E,CACF,CAAC;QACF,OAAO,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC,EAAE,OAAO,CAAC,OAAO,CAAW,EAAE,CAAC,CAAC,CAAC;IAElC,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAW,MAAM,CAAC,MAAM,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAa,EAAE,IAAc;IACrD,OAAO;QACL,GAAG,GAAG;QACN,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACT,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACf,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI;SAC/B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,MAAoB;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO;QACL,GAAG,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;QAC5E,MAAM,CAAC,QAAQ,IAAI,gBAAgB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;KACjE;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,KAAe;IAEf,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC"}
@@ -1,4 +1,5 @@
1
- import { logger, stringifyError } from '@code-pushup/utils';
1
+ import { logger, pluralizeToken, stringifyError } from '@code-pushup/utils';
2
+ import { formatMetaLog } from '../meta/format.js';
2
3
  import { filterProjectGraph } from './filter-project-graph.js';
3
4
  import { nxProjectsToConfig } from './projects-to-config.js';
4
5
  /**
@@ -11,7 +12,7 @@ async function resolveCachedProjectGraph() {
11
12
  return readCachedProjectGraph();
12
13
  }
13
14
  catch (error) {
14
- logger.info(`Could not read cached project graph, falling back to async creation.\n${stringifyError(error)}`);
15
+ logger.warn(`Could not read cached project graph, falling back to async creation.\n${stringifyError(error)}`);
15
16
  return await createProjectGraphAsync({ exitOnError: false });
16
17
  }
17
18
  }
@@ -44,7 +45,15 @@ async function resolveCachedProjectGraph() {
44
45
  export async function eslintConfigFromAllNxProjects(options = {}) {
45
46
  const projectGraph = await resolveCachedProjectGraph();
46
47
  const filteredProjectGraph = filterProjectGraph(projectGraph, options.exclude);
47
- return nxProjectsToConfig(filteredProjectGraph);
48
+ const targets = await nxProjectsToConfig(filteredProjectGraph);
49
+ logger.info(formatMetaLog([
50
+ `Inferred ${pluralizeToken('lint target', targets.length)} for all Nx projects`,
51
+ options.exclude?.length &&
52
+ `(excluding ${pluralizeToken('project', options.exclude.length)})`,
53
+ ]
54
+ .filter(Boolean)
55
+ .join(' ')));
56
+ return targets;
48
57
  }
49
58
  /**
50
59
  * @deprecated
@@ -1 +1 @@
1
- {"version":3,"file":"find-all-projects.js","sourceRoot":"","sources":["../../../../src/lib/nx/find-all-projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D;;;GAGG;AACH,KAAK,UAAU,yBAAyB;IACtC,MAAM,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CACtE,YAAY,CACb,CAAC;IACF,IAAI,CAAC;QACH,OAAO,sBAAsB,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CACT,yEAAyE,cAAc,CAAC,KAAK,CAAC,EAAE,CACjG,CAAC;QACF,OAAO,MAAM,uBAAuB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,UAAkC,EAAE;IAEpC,MAAM,YAAY,GAAG,MAAM,yBAAyB,EAAE,CAAC;IACvD,MAAM,oBAAoB,GAAG,kBAAkB,CAC7C,YAAY,EACZ,OAAO,CAAC,OAAO,CAChB,CAAC;IACF,OAAO,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,6BAA6B,CAAC"}
1
+ {"version":3,"file":"find-all-projects.js","sourceRoot":"","sources":["../../../../src/lib/nx/find-all-projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D;;;GAGG;AACH,KAAK,UAAU,yBAAyB;IACtC,MAAM,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CACtE,YAAY,CACb,CAAC;IACF,IAAI,CAAC;QACH,OAAO,sBAAsB,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CACT,yEAAyE,cAAc,CAAC,KAAK,CAAC,EAAE,CACjG,CAAC;QACF,OAAO,MAAM,uBAAuB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,UAAkC,EAAE;IAEpC,MAAM,YAAY,GAAG,MAAM,yBAAyB,EAAE,CAAC;IACvD,MAAM,oBAAoB,GAAG,kBAAkB,CAC7C,YAAY,EACZ,OAAO,CAAC,OAAO,CAChB,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;IAE/D,MAAM,CAAC,IAAI,CACT,aAAa,CACX;QACE,YAAY,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,sBAAsB;QAC/E,OAAO,CAAC,OAAO,EAAE,MAAM;YACrB,cAAc,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG;KACrE;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CACb,CACF,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,6BAA6B,CAAC"}
@@ -1,3 +1,6 @@
1
+ import { logger } from '@nx/devkit';
2
+ import { pluralizeToken } from '@code-pushup/utils';
3
+ import { formatMetaLog } from '../meta/format.js';
1
4
  import { nxProjectsToConfig } from './projects-to-config.js';
2
5
  import { findAllDependencies } from './traverse-graph.js';
3
6
  /**
@@ -29,7 +32,9 @@ export async function eslintConfigFromNxProjectAndDeps(projectName) {
29
32
  const { createProjectGraphAsync } = await import('@nx/devkit');
30
33
  const projectGraph = await createProjectGraphAsync({ exitOnError: false });
31
34
  const dependencies = findAllDependencies(projectName, projectGraph);
32
- return nxProjectsToConfig(projectGraph, project => !!project.name &&
35
+ const targets = await nxProjectsToConfig(projectGraph, project => !!project.name &&
33
36
  (project.name === projectName || dependencies.has(project.name)));
37
+ logger.info(formatMetaLog(`Inferred ${pluralizeToken('lint target', targets.length)} for Nx project "${projectName}" and its dependencies`));
38
+ return targets;
34
39
  }
35
40
  //# sourceMappingURL=find-project-with-deps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"find-project-with-deps.js","sourceRoot":"","sources":["../../../../src/lib/nx/find-project-with-deps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,WAAmB;IAEnB,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAE3E,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEpE,OAAO,kBAAkB,CACvB,YAAY,EACZ,OAAO,CAAC,EAAE,CACR,CAAC,CAAC,OAAO,CAAC,IAAI;QACd,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACnE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"find-project-with-deps.js","sourceRoot":"","sources":["../../../../src/lib/nx/find-project-with-deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,WAAmB;IAEnB,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAE3E,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEpE,MAAM,OAAO,GAAG,MAAM,kBAAkB,CACtC,YAAY,EACZ,OAAO,CAAC,EAAE,CACR,CAAC,CAAC,OAAO,CAAC,IAAI;QACd,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACnE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,CACX,YAAY,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,oBAAoB,WAAW,wBAAwB,CACjH,CACF,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,3 +1,5 @@
1
+ import { logger } from '@code-pushup/utils';
2
+ import { formatMetaLog } from '../meta/format.js';
1
3
  import { nxProjectsToConfig } from './projects-to-config.js';
2
4
  /**
3
5
  * Accepts a target Nx project, converts its lint configuration to Code PushUp ESLint plugin parameters.
@@ -31,6 +33,7 @@ export async function eslintConfigFromNxProject(projectName) {
31
33
  if (!project) {
32
34
  throw new Error(`Couldn't find Nx project named "${projectName}"`);
33
35
  }
36
+ logger.info(formatMetaLog(`Inferred lint target for Nx project "${projectName}"`));
34
37
  return project;
35
38
  }
36
39
  //# sourceMappingURL=find-project-without-deps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"find-project-without-deps.js","sourceRoot":"","sources":["../../../../src/lib/nx/find-project-without-deps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,WAAmB;IAEnB,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAE3E,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,kBAAkB,CACxC,YAAY,EACZ,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,WAAW,CAC7C,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mCAAmC,WAAW,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"find-project-without-deps.js","sourceRoot":"","sources":["../../../../src/lib/nx/find-project-without-deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,WAAmB;IAEnB,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAE3E,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,kBAAkB,CACxC,YAAY,EACZ,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,WAAW,CAC7C,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mCAAmC,WAAW,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,IAAI,CACT,aAAa,CAAC,wCAAwC,WAAW,GAAG,CAAC,CACtE,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,5 +1,6 @@
1
- import { asyncSequential, logger } from '@code-pushup/utils';
1
+ import { asyncSequential, logger, pluralizeToken, roundDecimals, } from '@code-pushup/utils';
2
2
  import { lint } from './lint.js';
3
+ import { aggregateLintResultsStats } from './stats.js';
3
4
  import { lintResultsToAudits, mergeLinterOutputs } from './transform.js';
4
5
  import { loadArtifacts } from './utils.js';
5
6
  export function createRunnerFunction(options) {
@@ -9,12 +10,21 @@ export function createRunnerFunction(options) {
9
10
  slugs: audits.map(audit => audit.slug),
10
11
  };
11
12
  return async () => {
12
- logger.info(`ESLint plugin executing ${targets.length} lint targets`);
13
+ logger.info(`ESLint plugin executing ${pluralizeToken('lint target', targets.length)}`);
13
14
  const linterOutputs = artifacts
14
15
  ? await loadArtifacts(artifacts)
15
16
  : await asyncSequential(targets, lint);
16
17
  const lintResults = mergeLinterOutputs(linterOutputs);
17
18
  const failedAudits = lintResultsToAudits(lintResults);
19
+ const stats = aggregateLintResultsStats(lintResults.results);
20
+ logger.info(stats.problemsCount === 0
21
+ ? 'ESLint did not find any problems'
22
+ : `ESLint found ${pluralizeToken('problem', stats.problemsCount)} from ${pluralizeToken('rule', stats.failedRulesCount)} across ${pluralizeToken('file', stats.failedFilesCount)}`);
23
+ const totalCount = config.slugs.length;
24
+ const failedCount = failedAudits.length;
25
+ const passedCount = totalCount - failedCount;
26
+ const percentage = roundDecimals((passedCount / totalCount) * 100, 2);
27
+ logger.info(`${pluralizeToken('audit', passedCount)} passed, ${pluralizeToken('audit', failedCount)} failed (${percentage}% success)`);
18
28
  return config.slugs.map((slug) => failedAudits.find(audit => audit.slug === slug) ?? {
19
29
  slug,
20
30
  score: 1,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/runner/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,UAAU,oBAAoB,CAAC,OAIpC;IACC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC/C,MAAM,MAAM,GAA6B;QACvC,OAAO;QACP,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;KACvC,CAAC;IAEF,OAAO,KAAK,IAA2B,EAAE;QACvC,MAAM,CAAC,IAAI,CAAC,2BAA2B,OAAO,CAAC,MAAM,eAAe,CAAC,CAAC;QAEtE,MAAM,aAAa,GAAG,SAAS;YAC7B,CAAC,CAAC,MAAM,aAAa,CAAC,SAAS,CAAC;YAChC,CAAC,CAAC,MAAM,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAEtD,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CACrB,CAAC,IAAI,EAAe,EAAE,CACpB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;YACjD,IAAI;YACJ,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,CAAC;YACR,YAAY,EAAE,QAAQ;YACtB,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;SACxB,CACJ,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/runner/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,eAAe,EACf,MAAM,EACN,cAAc,EACd,aAAa,GACd,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,UAAU,oBAAoB,CAAC,OAIpC;IACC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC/C,MAAM,MAAM,GAA6B;QACvC,OAAO;QACP,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;KACvC,CAAC;IAEF,OAAO,KAAK,IAA2B,EAAE;QACvC,MAAM,CAAC,IAAI,CACT,2BAA2B,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAC3E,CAAC;QAEF,MAAM,aAAa,GAAG,SAAS;YAC7B,CAAC,CAAC,MAAM,aAAa,CAAC,SAAS,CAAC;YAChC,CAAC,CAAC,MAAM,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEzC,MAAM,WAAW,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAG,yBAAyB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CACT,KAAK,CAAC,aAAa,KAAK,CAAC;YACvB,CAAC,CAAC,kCAAkC;YACpC,CAAC,CAAC,gBAAgB,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,SAAS,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,WAAW,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,EAAE,CACrL,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QACvC,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC;QACxC,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC;QAC7C,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,IAAI,CACT,GAAG,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,YAAY,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,YAAY,UAAU,YAAY,CAC1H,CAAC;QAEF,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CACrB,CAAC,IAAI,EAAe,EAAE,CACpB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;YACjD,IAAI;YACJ,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,CAAC;YACR,YAAY,EAAE,QAAQ;YACtB,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;SACxB,CACJ,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ESLint } from 'eslint';
2
+ export type LintResultsStats = {
3
+ problemsCount: number;
4
+ failedFilesCount: number;
5
+ failedRulesCount: number;
6
+ };
7
+ export declare function aggregateLintResultsStats(results: ESLint.LintResult[]): LintResultsStats;
@@ -0,0 +1,7 @@
1
+ export function aggregateLintResultsStats(results) {
2
+ const problemsCount = results.reduce((acc, result) => acc + result.messages.length, 0);
3
+ const failedFilesCount = results.length;
4
+ const failedRulesCount = new Set(results.flatMap(({ messages }) => messages.map(({ ruleId }) => ruleId).filter(Boolean))).size;
5
+ return { problemsCount, failedFilesCount, failedRulesCount };
6
+ }
7
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../../src/lib/runner/stats.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,yBAAyB,CACvC,OAA4B;IAE5B,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAClC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAC7C,CAAC,CACF,CAAC;IACF,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IACxC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAC/B,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CACrD,CACF,CAAC,IAAI,CAAC;IACP,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;AAC/D,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { glob } from 'glob';
2
- import { executeProcess, readJsonFile } from '@code-pushup/utils';
2
+ import { executeProcess, logger, pluralize, pluralizeToken, readJsonFile, toArray, } from '@code-pushup/utils';
3
3
  export async function loadArtifacts(artifacts) {
4
4
  if (artifacts.generateArtifactsCommand) {
5
5
  const { command, args = [] } = typeof artifacts.generateArtifactsCommand === 'string'
@@ -11,11 +11,9 @@ export async function loadArtifacts(artifacts) {
11
11
  ignoreExitCode: true,
12
12
  });
13
13
  }
14
- const initialArtifactPaths = Array.isArray(artifacts.artifactsPaths)
15
- ? artifacts.artifactsPaths
16
- : [artifacts.artifactsPaths];
17
- const artifactPaths = await glob(initialArtifactPaths);
18
- return await Promise.all(artifactPaths.map(async (artifactPath) => {
14
+ const artifactPatterns = toArray(artifacts.artifactsPaths);
15
+ const artifactPaths = await glob(artifactPatterns);
16
+ const outputs = await Promise.all(artifactPaths.map(async (artifactPath) => {
19
17
  // ESLint CLI outputs raw ESLint.LintResult[], but we need LinterOutput format
20
18
  const results = await readJsonFile(artifactPath);
21
19
  return {
@@ -23,5 +21,7 @@ export async function loadArtifacts(artifacts) {
23
21
  ruleOptionsPerFile: {}, // TODO
24
22
  };
25
23
  }));
24
+ logger.info(`Loaded lint outputs from ${pluralizeToken('artifact', artifactPaths.length)} matching ${pluralize('pattern', artifactPatterns.length)}: ${artifactPatterns.join(' ')}`);
25
+ return outputs;
26
26
  }
27
27
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/lib/runner/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAgC;IAEhC,IAAI,SAAS,CAAC,wBAAwB,EAAE,CAAC;QACvC,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,GAC1B,OAAO,SAAS,CAAC,wBAAwB,KAAK,QAAQ;YACpD,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,wBAAwB,EAAE;YACjD,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC;QAEzC,MAAM,cAAc,CAAC;YACnB,OAAO;YACP,IAAI;YACJ,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC;QAClE,CAAC,CAAC,SAAS,CAAC,cAAc;QAC1B,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAE/B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAEvD,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,aAAa,CAAC,GAAG,CAAC,KAAK,EAAC,YAAY,EAAC,EAAE;QACrC,8EAA8E;QAC9E,MAAM,OAAO,GAAG,MAAM,YAAY,CAAsB,YAAY,CAAC,CAAC;QACtE,OAAO;YACL,OAAO;YACP,kBAAkB,EAAE,EAAE,EAAE,OAAO;SAChC,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/lib/runner/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EACL,cAAc,EACd,MAAM,EACN,SAAS,EACT,cAAc,EACd,YAAY,EACZ,OAAO,GACR,MAAM,oBAAoB,CAAC;AAG5B,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAgC;IAEhC,IAAI,SAAS,CAAC,wBAAwB,EAAE,CAAC;QACvC,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,GAC1B,OAAO,SAAS,CAAC,wBAAwB,KAAK,QAAQ;YACpD,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,wBAAwB,EAAE;YACjD,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC;QAEzC,MAAM,cAAc,CAAC;YACnB,OAAO;YACP,IAAI;YACJ,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAE3D,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAEnD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,aAAa,CAAC,GAAG,CAAC,KAAK,EAAC,YAAY,EAAC,EAAE;QACrC,8EAA8E;QAC9E,MAAM,OAAO,GAAG,MAAM,YAAY,CAAsB,YAAY,CAAC,CAAC;QACtE,OAAO;YACL,OAAO;YACP,kBAAkB,EAAE,EAAE,EAAE,OAAO;SAChC,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,cAAc,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,aAAa,SAAS,CAAC,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,KAAK,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACxK,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"}