Skip to content

Commit e93232f

Browse files
committed
fix(plugin-eslint): artifacts options
1 parent 1c1e201 commit e93232f

File tree

3 files changed

+47
-32
lines changed

3 files changed

+47
-32
lines changed

packages/plugin-eslint/src/lib/__snapshots__/eslint-plugin.int.test.ts.snap

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -346,16 +346,7 @@ exports[`eslintPlugin > should initialize ESLint plugin for React application 1`
346346
],
347347
"icon": "eslint",
348348
"packageName": "@code-pushup/eslint-plugin",
349-
"runner": {
350-
"args": [
351-
""<dirname>/bin.js"",
352-
"--runnerConfigPath="node_modules/.code-pushup/eslint/<timestamp>/plugin-config.json"",
353-
"--runnerOutputPath="node_modules/.code-pushup/eslint/<timestamp>/runner-output.json"",
354-
],
355-
"command": "node",
356-
"configFile": "node_modules/.code-pushup/eslint/<timestamp>/plugin-config.json",
357-
"outputFile": "node_modules/.code-pushup/eslint/<timestamp>/runner-output.json",
358-
},
349+
"runner": [Function],
359350
"slug": "eslint",
360351
"title": "ESLint",
361352
"version": Any<String>,

packages/plugin-eslint/src/lib/eslint-plugin.int.test.ts

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ import path from 'node:path';
33
import process from 'node:process';
44
import { fileURLToPath } from 'node:url';
55
import type { MockInstance } from 'vitest';
6-
import type { Audit, PluginConfig, RunnerConfig } from '@code-pushup/models';
7-
import { toUnixPath } from '@code-pushup/utils';
6+
import type { Audit, PluginConfig } from '@code-pushup/models';
87
import { eslintPlugin } from './eslint-plugin.js';
98

109
describe('eslintPlugin', () => {
@@ -15,26 +14,7 @@ describe('eslintPlugin', () => {
1514
let cwdSpy: MockInstance<[], string>;
1615
let platformSpy: MockInstance<[], NodeJS.Platform>;
1716

18-
const replaceAbsolutePath = (plugin: PluginConfig): PluginConfig => ({
19-
...plugin,
20-
runner: {
21-
...(plugin.runner as RunnerConfig),
22-
args: (plugin.runner as RunnerConfig).args?.map(arg =>
23-
toUnixPath(arg.replace(path.dirname(thisDir), '<dirname>')).replace(
24-
/\/eslint\/\d+\//,
25-
'/eslint/<timestamp>/',
26-
),
27-
),
28-
...((plugin.runner as RunnerConfig).configFile && {
29-
configFile: toUnixPath(
30-
(plugin.runner as RunnerConfig).configFile!,
31-
).replace(/\/eslint\/\d+\//, '/eslint/<timestamp>/'),
32-
}),
33-
outputFile: toUnixPath(
34-
(plugin.runner as RunnerConfig).outputFile,
35-
).replace(/\/eslint\/\d+\//, '/eslint/<timestamp>/'),
36-
},
37-
});
17+
const replaceAbsolutePath = (plugin: PluginConfig): PluginConfig => plugin;
3818

3919
beforeAll(() => {
4020
cwdSpy = vi.spyOn(process, 'cwd');

packages/plugin-eslint/src/lib/runner/index.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@ import path from 'node:path';
33
import type {
44
Audit,
55
AuditOutput,
6+
AuditOutputs,
7+
PersistConfig,
8+
PluginArtifactOptions,
69
RunnerConfig,
710
RunnerFilesPaths,
11+
RunnerFunction,
812
} from '@code-pushup/models';
913
import {
1014
asyncSequential,
@@ -18,6 +22,7 @@ import {
1822
import type { ESLintPluginRunnerConfig, ESLintTarget } from '../config.js';
1923
import { lint } from './lint.js';
2024
import { lintResultsToAudits, mergeLinterOutputs } from './transform.js';
25+
import { loadArtifacts } from './utils';
2126

2227
export async function executeRunner({
2328
runnerConfigPath,
@@ -78,3 +83,42 @@ export async function createRunnerConfig(
7883
outputFile: runnerOutputPath,
7984
};
8085
}
86+
87+
export async function createRunnerFunction(options: {
88+
audits: Audit[];
89+
targets: ESLintTarget[];
90+
artifacts?: PluginArtifactOptions;
91+
}): Promise<RunnerFunction> {
92+
const { audits, targets, artifacts } = options;
93+
const config: ESLintPluginRunnerConfig = {
94+
targets,
95+
slugs: audits.map(audit => audit.slug),
96+
};
97+
98+
return async ({ outputDir }: PersistConfig): Promise<AuditOutputs> => {
99+
ui().logger.log(`ESLint plugin executing ${targets.length} lint targets`);
100+
101+
const linterOutputs = artifacts
102+
? await loadArtifacts(artifacts)
103+
: await asyncSequential(
104+
targets.map(target => ({
105+
...target,
106+
outputDir,
107+
})),
108+
lint,
109+
);
110+
const lintResults = mergeLinterOutputs(linterOutputs);
111+
const failedAudits = lintResultsToAudits(lintResults);
112+
113+
return config.slugs.map(
114+
(slug): AuditOutput =>
115+
failedAudits.find(audit => audit.slug === slug) ?? {
116+
slug,
117+
score: 1,
118+
value: 0,
119+
displayValue: 'passed',
120+
details: { issues: [] },
121+
},
122+
);
123+
};
124+
}

0 commit comments

Comments
 (0)