sonar-sweep 0.1.0 → 0.2.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.
Files changed (55) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/index.d.mts +4 -0
  3. package/dist/cli/index.mjs +3 -0
  4. package/dist/cli-DYHj3O_0.mjs +650 -0
  5. package/dist/cli.d.mts +1 -0
  6. package/dist/cli.mjs +14 -0
  7. package/dist/index.d.mts +263 -0
  8. package/dist/index.mjs +3 -0
  9. package/dist/issue-transition-C1WIMpYQ.mjs +338 -0
  10. package/package.json +36 -11
  11. package/dist/cli/commands/issue-accept.d.ts +0 -13
  12. package/dist/cli/commands/issue-accept.js +0 -49
  13. package/dist/cli/commands/issue-accept.js.map +0 -1
  14. package/dist/cli/commands/pr-coverage.d.ts +0 -16
  15. package/dist/cli/commands/pr-coverage.js +0 -79
  16. package/dist/cli/commands/pr-coverage.js.map +0 -1
  17. package/dist/cli/commands/pr-issues.d.ts +0 -15
  18. package/dist/cli/commands/pr-issues.js +0 -78
  19. package/dist/cli/commands/pr-issues.js.map +0 -1
  20. package/dist/cli/commands/pr-report.d.ts +0 -13
  21. package/dist/cli/commands/pr-report.js +0 -94
  22. package/dist/cli/commands/pr-report.js.map +0 -1
  23. package/dist/cli/commands/pr-review.d.ts +0 -16
  24. package/dist/cli/commands/pr-review.js +0 -93
  25. package/dist/cli/commands/pr-review.js.map +0 -1
  26. package/dist/cli/index.d.ts +0 -1
  27. package/dist/cli/index.js +0 -28
  28. package/dist/cli/index.js.map +0 -1
  29. package/dist/cli/project-key.d.ts +0 -1
  30. package/dist/cli/project-key.js +0 -32
  31. package/dist/cli/project-key.js.map +0 -1
  32. package/dist/cli.d.ts +0 -2
  33. package/dist/cli.js +0 -8
  34. package/dist/cli.js.map +0 -1
  35. package/dist/index.d.ts +0 -6
  36. package/dist/index.js +0 -7
  37. package/dist/index.js.map +0 -1
  38. package/dist/service/issue-transition.d.ts +0 -12
  39. package/dist/service/issue-transition.js +0 -20
  40. package/dist/service/issue-transition.js.map +0 -1
  41. package/dist/service/pr-coverage.d.ts +0 -22
  42. package/dist/service/pr-coverage.js +0 -48
  43. package/dist/service/pr-coverage.js.map +0 -1
  44. package/dist/service/pr-issues.d.ts +0 -29
  45. package/dist/service/pr-issues.js +0 -45
  46. package/dist/service/pr-issues.js.map +0 -1
  47. package/dist/service/pr-report.d.ts +0 -27
  48. package/dist/service/pr-report.js +0 -59
  49. package/dist/service/pr-report.js.map +0 -1
  50. package/dist/service/pr-review.d.ts +0 -39
  51. package/dist/service/pr-review.js +0 -81
  52. package/dist/service/pr-review.js.map +0 -1
  53. package/dist/service/sonarcloud-client.d.ts +0 -100
  54. package/dist/service/sonarcloud-client.js +0 -112
  55. package/dist/service/sonarcloud-client.js.map +0 -1
@@ -1,49 +0,0 @@
1
- import { transitionIssue } from '../../service/issue-transition.js';
2
- export const command = 'issue-accept <issueKey>';
3
- export const describe = 'Mark a Sonar issue as accepted (transition=accept)';
4
- export function builder(yargs) {
5
- return yargs
6
- .positional('issueKey', {
7
- type: 'string',
8
- demandOption: 'Provide an issue key',
9
- coerce: (value) => String(value).trim(),
10
- })
11
- .option('token', {
12
- type: 'string',
13
- default: process.env.SONAR_TOKEN,
14
- defaultDescription: 'SONAR_TOKEN',
15
- demandOption: 'Provide --token or set SONAR_TOKEN',
16
- })
17
- .option('baseUrl', {
18
- alias: ['base-url', 'url'],
19
- type: 'string',
20
- default: process.env.SONAR_BASE_URL ?? 'https://sonarcloud.io',
21
- defaultDescription: 'SONAR_BASE_URL or https://sonarcloud.io',
22
- coerce: (value) => String(value).replace(/\/$/, ''),
23
- })
24
- .option('comment', {
25
- type: 'string',
26
- describe: 'Optional acceptance comment',
27
- })
28
- .option('json', {
29
- type: 'boolean',
30
- default: false,
31
- describe: 'Print raw JSON for automation/agents',
32
- });
33
- }
34
- export async function handler(args) {
35
- const result = await transitionIssue({
36
- token: args.token,
37
- baseUrl: args.baseUrl,
38
- }, {
39
- issueKey: args.issueKey,
40
- transition: 'accept',
41
- comment: args.comment,
42
- });
43
- if (args.json) {
44
- process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
45
- return;
46
- }
47
- process.stdout.write(`Accepted issue ${result.issueKey} (${result.transition})\n`);
48
- }
49
- //# sourceMappingURL=issue-accept.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"issue-accept.js","sourceRoot":"","sources":["../../../src/cli/commands/issue-accept.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AAUnE,MAAM,CAAC,MAAM,OAAO,GAAG,yBAAyB,CAAA;AAChD,MAAM,CAAC,MAAM,QAAQ,GAAG,oDAAoD,CAAA;AAE5E,MAAM,UAAU,OAAO,CAAC,KAAW;IACjC,OAAO,KAAK;SACT,UAAU,CAAC,UAAU,EAAE;QACtB,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,sBAAsB;QACpC,MAAM,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;KACjD,CAAC;SACD,MAAM,CAAC,OAAO,EAAE;QACf,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;QAChC,kBAAkB,EAAE,aAAa;QACjC,YAAY,EAAE,oCAAoC;KACnD,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,KAAK,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC;QAC1B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,uBAAuB;QAC9D,kBAAkB,EAAE,yCAAyC;QAC7D,MAAM,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;KAC7D,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,6BAA6B;KACxC,CAAC;SACD,MAAM,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,sCAAsC;KACjD,CAAC,CAAA;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAqB;IACjD,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC;QACE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,EACD;QACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CACF,CAAA;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;QAC5D,OAAM;IACR,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,UAAU,KAAK,CAAC,CAAA;AACpF,CAAC"}
@@ -1,16 +0,0 @@
1
- import type { Argv } from 'yargs';
2
- type PullRequestCoverageArgs = {
3
- token: string;
4
- baseUrl: string;
5
- projectKey?: string;
6
- pullRequest: string;
7
- threshold: number;
8
- includePassing: boolean;
9
- maxFiles: number;
10
- json: boolean;
11
- };
12
- export declare const command = "pr-coverage <pullRequest> [projectKey]";
13
- export declare const describe = "List files with low new-code coverage for a pull request";
14
- export declare function builder(yargs: Argv): Argv<PullRequestCoverageArgs>;
15
- export declare function handler(args: PullRequestCoverageArgs): Promise<void>;
16
- export {};
@@ -1,79 +0,0 @@
1
- import { resolveProjectKey } from '../project-key.js';
2
- import { getPullRequestCoverage } from '../../service/pr-coverage.js';
3
- export const command = 'pr-coverage <pullRequest> [projectKey]';
4
- export const describe = 'List files with low new-code coverage for a pull request';
5
- export function builder(yargs) {
6
- return yargs
7
- .positional('projectKey', {
8
- type: 'string',
9
- describe: 'Sonar project key (optional; auto-detected from sonar-project.properties)',
10
- })
11
- .positional('pullRequest', {
12
- type: 'string',
13
- demandOption: 'Provide a pull request key/id',
14
- coerce: (value) => String(value).trim(),
15
- })
16
- .option('token', {
17
- type: 'string',
18
- default: process.env.SONAR_TOKEN,
19
- defaultDescription: 'SONAR_TOKEN',
20
- demandOption: 'Provide --token or set SONAR_TOKEN',
21
- })
22
- .option('baseUrl', {
23
- alias: ['base-url', 'url'],
24
- type: 'string',
25
- default: process.env.SONAR_BASE_URL ?? 'https://sonarcloud.io',
26
- defaultDescription: 'SONAR_BASE_URL or https://sonarcloud.io',
27
- coerce: (value) => String(value).replace(/\/$/, ''),
28
- })
29
- .option('projectKey', {
30
- alias: ['project-key', 'k'],
31
- type: 'string',
32
- describe: 'Sonar project key (overrides auto-detection)',
33
- })
34
- .option('threshold', {
35
- type: 'number',
36
- default: 80,
37
- describe: 'Coverage threshold percentage',
38
- coerce: (value) => Math.max(0, Math.min(100, Number(value))),
39
- })
40
- .option('includePassing', {
41
- type: 'boolean',
42
- default: false,
43
- describe: 'Include files that meet threshold too',
44
- })
45
- .option('maxFiles', {
46
- alias: ['max', 'limit'],
47
- type: 'number',
48
- default: 20,
49
- coerce: (value) => Math.max(1, Number(value)),
50
- })
51
- .option('json', {
52
- type: 'boolean',
53
- default: false,
54
- describe: 'Print raw JSON for automation/agents',
55
- });
56
- }
57
- export async function handler(args) {
58
- const projectKey = resolveProjectKey(args.projectKey);
59
- const report = await getPullRequestCoverage({
60
- token: args.token,
61
- baseUrl: args.baseUrl,
62
- }, {
63
- projectKey,
64
- pullRequest: args.pullRequest,
65
- threshold: args.threshold,
66
- includePassing: args.includePassing,
67
- maxFiles: args.maxFiles,
68
- });
69
- if (args.json) {
70
- process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
71
- return;
72
- }
73
- process.stdout.write(`Found ${report.files.length} file(s) below ${report.threshold.toFixed(1)}% new-code coverage\n`);
74
- for (const file of report.files) {
75
- process.stdout.write(`- ${file.file}: ${file.coverageOnNewCode.toFixed(1)}% (${file.uncoveredLines}/${file.linesToCover} uncovered lines)\n`);
76
- }
77
- process.stdout.write(`See analysis details: ${report.analysisUrl}\n`);
78
- }
79
- //# sourceMappingURL=pr-coverage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pr-coverage.js","sourceRoot":"","sources":["../../../src/cli/commands/pr-coverage.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import type { Argv } from 'yargs';
2
- type PullRequestIssuesArgs = {
3
- token: string;
4
- baseUrl: string;
5
- projectKey?: string;
6
- pullRequest: string;
7
- page: number;
8
- pageSize: number;
9
- json: boolean;
10
- };
11
- export declare const command = "pr-issues <pullRequest> [projectKey]";
12
- export declare const describe = "Fetch SonarQube Cloud issue details for a pull request";
13
- export declare function builder(yargs: Argv): Argv<PullRequestIssuesArgs>;
14
- export declare function handler(args: PullRequestIssuesArgs): Promise<void>;
15
- export {};
@@ -1,78 +0,0 @@
1
- import { resolveProjectKey } from '../project-key.js';
2
- import { getPullRequestIssues } from '../../service/pr-issues.js';
3
- export const command = 'pr-issues <pullRequest> [projectKey]';
4
- export const describe = 'Fetch SonarQube Cloud issue details for a pull request';
5
- export function builder(yargs) {
6
- return yargs
7
- .positional('projectKey', {
8
- type: 'string',
9
- describe: 'Sonar project key (optional; auto-detected from sonar-project.properties)',
10
- })
11
- .positional('pullRequest', {
12
- type: 'string',
13
- demandOption: 'Provide a pull request key/id',
14
- coerce: (value) => String(value).trim(),
15
- })
16
- .option('token', {
17
- type: 'string',
18
- default: process.env.SONAR_TOKEN,
19
- defaultDescription: 'SONAR_TOKEN',
20
- demandOption: 'Provide --token or set SONAR_TOKEN',
21
- })
22
- .option('baseUrl', {
23
- alias: ['base-url', 'url'],
24
- type: 'string',
25
- default: process.env.SONAR_BASE_URL ?? 'https://sonarcloud.io',
26
- defaultDescription: 'SONAR_BASE_URL or https://sonarcloud.io',
27
- coerce: (value) => String(value).replace(/\/$/, ''),
28
- })
29
- .option('projectKey', {
30
- alias: ['project-key', 'k'],
31
- type: 'string',
32
- describe: 'Sonar project key (overrides auto-detection)',
33
- })
34
- .option('page', {
35
- alias: 'p',
36
- type: 'number',
37
- default: 1,
38
- coerce: (value) => Math.max(1, Number(value)),
39
- })
40
- .option('pageSize', {
41
- alias: ['ps', 'page-size'],
42
- type: 'number',
43
- default: 100,
44
- coerce: (value) => Math.min(500, Math.max(1, Number(value))),
45
- })
46
- .option('json', {
47
- type: 'boolean',
48
- default: false,
49
- describe: 'Print raw JSON for automation/agents',
50
- });
51
- }
52
- export async function handler(args) {
53
- const projectKey = resolveProjectKey(args.projectKey);
54
- const report = await getPullRequestIssues({
55
- token: args.token,
56
- baseUrl: args.baseUrl,
57
- }, {
58
- projectKey,
59
- pullRequest: args.pullRequest,
60
- page: args.page,
61
- pageSize: args.pageSize,
62
- });
63
- if (args.json) {
64
- process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
65
- return;
66
- }
67
- process.stdout.write(`Found ${report.total} open issue(s) in new code for PR ${report.pullRequest} (${report.projectKey})\n`);
68
- if (report.issues.length === 0) {
69
- process.stdout.write(`See analysis details: ${report.analysisUrl}\n`);
70
- return;
71
- }
72
- for (const issue of report.issues) {
73
- const location = issue.line ? `${issue.file}:${issue.line}` : issue.file;
74
- process.stdout.write(`- [${issue.issueStatus}] ${issue.severity} ${issue.type} ${issue.rule} ${location} - ${issue.message}\n`);
75
- }
76
- process.stdout.write(`See analysis details: ${report.analysisUrl}\n`);
77
- }
78
- //# sourceMappingURL=pr-issues.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pr-issues.js","sourceRoot":"","sources":["../../../src/cli/commands/pr-issues.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import type { Argv } from 'yargs';
2
- type PullRequestReportArgs = {
3
- token: string;
4
- baseUrl: string;
5
- projectKey?: string;
6
- pullRequest: string;
7
- json: boolean;
8
- };
9
- export declare const command = "pr-report <pullRequest> [projectKey]";
10
- export declare const describe = "Fetch SonarQube Cloud details for a pull request";
11
- export declare function builder(yargs: Argv): Argv<PullRequestReportArgs>;
12
- export declare function handler(args: PullRequestReportArgs): Promise<void>;
13
- export {};
@@ -1,94 +0,0 @@
1
- import { resolveProjectKey } from '../project-key.js';
2
- import { getPullRequestReport } from '../../service/pr-report.js';
3
- export const command = 'pr-report <pullRequest> [projectKey]';
4
- export const describe = 'Fetch SonarQube Cloud details for a pull request';
5
- export function builder(yargs) {
6
- return yargs
7
- .positional('projectKey', {
8
- type: 'string',
9
- describe: 'Sonar project key (optional; auto-detected from sonar-project.properties)',
10
- })
11
- .positional('pullRequest', {
12
- type: 'string',
13
- demandOption: 'Provide a pull request key/id',
14
- coerce: (value) => String(value).trim(),
15
- })
16
- .option('token', {
17
- type: 'string',
18
- default: process.env.SONAR_TOKEN,
19
- defaultDescription: 'SONAR_TOKEN',
20
- demandOption: 'Provide --token or set SONAR_TOKEN',
21
- })
22
- .option('baseUrl', {
23
- alias: ['base-url', 'url'],
24
- type: 'string',
25
- default: process.env.SONAR_BASE_URL ?? 'https://sonarcloud.io',
26
- defaultDescription: 'SONAR_BASE_URL or https://sonarcloud.io',
27
- coerce: (value) => String(value).replace(/\/$/, ''),
28
- })
29
- .option('projectKey', {
30
- alias: ['project-key', 'k'],
31
- type: 'string',
32
- describe: 'Sonar project key (overrides auto-detection)',
33
- })
34
- .option('json', {
35
- type: 'boolean',
36
- default: false,
37
- describe: 'Print raw JSON for automation/agents',
38
- });
39
- }
40
- export async function handler(args) {
41
- const projectKey = resolveProjectKey(args.projectKey);
42
- const report = await getPullRequestReport({
43
- token: args.token,
44
- baseUrl: args.baseUrl,
45
- }, {
46
- projectKey,
47
- pullRequest: args.pullRequest,
48
- });
49
- if (args.json) {
50
- process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
51
- return;
52
- }
53
- const qualityGate = report.qualityGateStatus === 'OK'
54
- ? 'Quality Gate passed'
55
- : `Quality Gate failed (${report.qualityGateStatus})`;
56
- process.stdout.write(`${qualityGate}\n\n`);
57
- if (report.failingQualityGateConditions.length > 0) {
58
- process.stdout.write('Quality Gate Conditions\n');
59
- for (const condition of report.failingQualityGateConditions) {
60
- const metric = formatMetricLabel(condition.metricKey);
61
- const threshold = condition.errorThreshold ?? 'n/a';
62
- const actual = condition.actualValue ?? 'n/a';
63
- process.stdout.write(`- ${metric}: actual=${actual}, threshold=${condition.comparator} ${threshold}\n`);
64
- }
65
- process.stdout.write('\n');
66
- }
67
- process.stdout.write('Issues\n');
68
- process.stdout.write(`- ${report.issueCounts.newIssues} New issues\n`);
69
- process.stdout.write(`- ${report.issueCounts.acceptedIssues} Accepted issues\n\n`);
70
- process.stdout.write('Measures\n');
71
- process.stdout.write(`- ${report.measures.securityHotspots} Security Hotspots\n`);
72
- process.stdout.write(`- ${report.measures.coverageOnNewCode.toFixed(1)}% Coverage on New Code\n`);
73
- process.stdout.write(`- ${report.measures.duplicationOnNewCode.toFixed(1)}% Duplication on New Code\n\n`);
74
- process.stdout.write(`See analysis details: ${report.analysisUrl}\n`);
75
- }
76
- function formatMetricLabel(metricKey) {
77
- switch (metricKey) {
78
- case 'new_coverage':
79
- return 'Coverage on New Code';
80
- case 'new_duplicated_lines_density':
81
- return 'Duplication on New Code';
82
- case 'new_security_hotspots_reviewed':
83
- return 'Security Hotspots Reviewed on New Code';
84
- case 'new_reliability_rating':
85
- return 'Reliability Rating on New Code';
86
- case 'new_security_rating':
87
- return 'Security Rating on New Code';
88
- case 'new_maintainability_rating':
89
- return 'Maintainability Rating on New Code';
90
- default:
91
- return metricKey;
92
- }
93
- }
94
- //# sourceMappingURL=pr-report.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pr-report.js","sourceRoot":"","sources":["../../../src/cli/commands/pr-report.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAUjE,MAAM,CAAC,MAAM,OAAO,GAAG,sCAAsC,CAAA;AAC7D,MAAM,CAAC,MAAM,QAAQ,GAAG,kDAAkD,CAAA;AAE1E,MAAM,UAAU,OAAO,CAAC,KAAW;IACjC,OAAO,KAAK;SACT,UAAU,CAAC,YAAY,EAAE;QACxB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,2EAA2E;KACtF,CAAC;SACD,UAAU,CAAC,aAAa,EAAE;QACzB,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,+BAA+B;QAC7C,MAAM,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;KACjD,CAAC;SACD,MAAM,CAAC,OAAO,EAAE;QACf,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;QAChC,kBAAkB,EAAE,aAAa;QACjC,YAAY,EAAE,oCAAoC;KACnD,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,KAAK,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC;QAC1B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,uBAAuB;QAC9D,kBAAkB,EAAE,yCAAyC;QAC7D,MAAM,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;KAC7D,CAAC;SACD,MAAM,CAAC,YAAY,EAAE;QACpB,KAAK,EAAE,CAAC,aAAa,EAAE,GAAG,CAAC;QAC3B,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,8CAA8C;KACzD,CAAC;SACD,MAAM,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,sCAAsC;KACjD,CAAC,CAAA;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA2B;IACvD,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACrD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;QACE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,EACD;QACE,UAAU;QACV,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CACF,CAAA;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;QAC5D,OAAM;IACR,CAAC;IAED,MAAM,WAAW,GACf,MAAM,CAAC,iBAAiB,KAAK,IAAI;QAC/B,CAAC,CAAC,qBAAqB;QACvB,CAAC,CAAC,wBAAwB,MAAM,CAAC,iBAAiB,GAAG,CAAA;IAEzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,MAAM,CAAC,CAAA;IAC1C,IAAI,MAAM,CAAC,4BAA4B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;QACjD,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,4BAA4B,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;YACrD,MAAM,SAAS,GAAG,SAAS,CAAC,cAAc,IAAI,KAAK,CAAA;YACnD,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,IAAI,KAAK,CAAA;YAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,MAAM,YAAY,MAAM,eAAe,SAAS,CAAC,UAAU,IAAI,SAAS,IAAI,CAClF,CAAA;QACH,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,SAAS,eAAe,CAAC,CAAA;IACtE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,cAAc,sBAAsB,CAAC,CAAA;IAClF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,gBAAgB,sBAAsB,CAAC,CAAA;IACjF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAA;IACjG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAA;IACzG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,MAAM,CAAC,WAAW,IAAI,CAAC,CAAA;AACvE,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,cAAc;YACjB,OAAO,sBAAsB,CAAA;QAC/B,KAAK,8BAA8B;YACjC,OAAO,yBAAyB,CAAA;QAClC,KAAK,gCAAgC;YACnC,OAAO,wCAAwC,CAAA;QACjD,KAAK,wBAAwB;YAC3B,OAAO,gCAAgC,CAAA;QACzC,KAAK,qBAAqB;YACxB,OAAO,6BAA6B,CAAA;QACtC,KAAK,4BAA4B;YAC/B,OAAO,oCAAoC,CAAA;QAC7C;YACE,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC"}
@@ -1,16 +0,0 @@
1
- import type { Argv } from 'yargs';
2
- type PullRequestReviewArgs = {
3
- token: string;
4
- baseUrl: string;
5
- projectKey?: string;
6
- pullRequest: string;
7
- contextLines: number;
8
- page: number;
9
- pageSize: number;
10
- json: boolean;
11
- };
12
- export declare const command = "pr-review <pullRequest> [projectKey]";
13
- export declare const describe = "Review Sonar pull request issues with code context snippets";
14
- export declare function builder(yargs: Argv): Argv<PullRequestReviewArgs>;
15
- export declare function handler(args: PullRequestReviewArgs): Promise<void>;
16
- export {};
@@ -1,93 +0,0 @@
1
- import { resolveProjectKey } from '../project-key.js';
2
- import { getPullRequestReview } from '../../service/pr-review.js';
3
- export const command = 'pr-review <pullRequest> [projectKey]';
4
- export const describe = 'Review Sonar pull request issues with code context snippets';
5
- export function builder(yargs) {
6
- return yargs
7
- .positional('projectKey', {
8
- type: 'string',
9
- describe: 'Sonar project key (optional; auto-detected from sonar-project.properties)',
10
- })
11
- .positional('pullRequest', {
12
- type: 'string',
13
- demandOption: 'Provide a pull request key/id',
14
- coerce: (value) => String(value).trim(),
15
- })
16
- .option('token', {
17
- type: 'string',
18
- default: process.env.SONAR_TOKEN,
19
- defaultDescription: 'SONAR_TOKEN',
20
- demandOption: 'Provide --token or set SONAR_TOKEN',
21
- })
22
- .option('baseUrl', {
23
- alias: ['base-url', 'url'],
24
- type: 'string',
25
- default: process.env.SONAR_BASE_URL ?? 'https://sonarcloud.io',
26
- defaultDescription: 'SONAR_BASE_URL or https://sonarcloud.io',
27
- coerce: (value) => String(value).replace(/\/$/, ''),
28
- })
29
- .option('projectKey', {
30
- alias: ['project-key', 'k'],
31
- type: 'string',
32
- describe: 'Sonar project key (overrides auto-detection)',
33
- })
34
- .option('contextLines', {
35
- alias: ['context', 'C'],
36
- type: 'number',
37
- default: 3,
38
- coerce: (value) => Math.max(0, Number(value)),
39
- })
40
- .option('page', {
41
- alias: 'p',
42
- type: 'number',
43
- default: 1,
44
- coerce: (value) => Math.max(1, Number(value)),
45
- })
46
- .option('pageSize', {
47
- alias: ['ps', 'page-size'],
48
- type: 'number',
49
- default: 20,
50
- coerce: (value) => Math.min(500, Math.max(1, Number(value))),
51
- })
52
- .option('json', {
53
- type: 'boolean',
54
- default: false,
55
- describe: 'Print raw JSON for automation/agents',
56
- });
57
- }
58
- export async function handler(args) {
59
- const projectKey = resolveProjectKey(args.projectKey);
60
- const report = await getPullRequestReview({
61
- token: args.token,
62
- baseUrl: args.baseUrl,
63
- }, {
64
- projectKey,
65
- pullRequest: args.pullRequest,
66
- contextLines: args.contextLines,
67
- page: args.page,
68
- pageSize: args.pageSize,
69
- });
70
- if (args.json) {
71
- process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
72
- return;
73
- }
74
- process.stdout.write(`Found ${report.total} open issue(s) in new code for PR ${report.pullRequest} (${report.projectKey})\n\n`);
75
- for (const issue of report.issues) {
76
- const location = issue.line ? `${issue.file}:${issue.line}` : issue.file;
77
- process.stdout.write(`[${issue.issueStatus}] ${issue.severity} ${issue.type} ${issue.rule} ${location}\n${issue.message}\n`);
78
- process.stdout.write(`Issue URL: ${issue.issueUrl}\n`);
79
- if (issue.snippet) {
80
- process.stdout.write('Context:\n');
81
- for (const line of issue.snippet.lines) {
82
- const marker = line.highlight ? '>' : ' ';
83
- process.stdout.write(`${marker} ${line.line.toString().padStart(4, ' ')} | ${line.text}\n`);
84
- }
85
- }
86
- else if (issue.sourceError) {
87
- process.stdout.write(`Context unavailable: ${issue.sourceError}\n`);
88
- }
89
- process.stdout.write('\n');
90
- }
91
- process.stdout.write(`See analysis details: ${report.analysisUrl}\n`);
92
- }
93
- //# sourceMappingURL=pr-review.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pr-review.js","sourceRoot":"","sources":["../../../src/cli/commands/pr-review.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export declare function run(argv?: string[]): Promise<void>;
package/dist/cli/index.js DELETED
@@ -1,28 +0,0 @@
1
- import { fileURLToPath } from 'node:url';
2
- import { hideBin } from 'yargs/helpers';
3
- import yargs from 'yargs/yargs';
4
- export async function run(argv = process.argv) {
5
- const commandsDir = fileURLToPath(new URL('./commands', import.meta.url));
6
- const cli = yargs(hideBin(argv))
7
- .scriptName('sonar-sweep')
8
- .env('SONAR')
9
- .commandDir(commandsDir, {
10
- extensions: ['js'],
11
- exclude: /\.test\.(ts|js)$/,
12
- });
13
- await cli
14
- .demandCommand(1, 'Provide a command')
15
- .strict()
16
- .help()
17
- .fail((message, error, yargsInstance) => {
18
- if (error) {
19
- process.stderr.write(`${error.message}\n`);
20
- process.exit(1);
21
- }
22
- process.stderr.write(`${message}\n`);
23
- yargsInstance.showHelp();
24
- process.exit(1);
25
- })
26
- .parseAsync();
27
- }
28
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,aAAa,CAAA;AAE/B,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAiB,OAAO,CAAC,IAAI;IACrD,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAEzE,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC7B,UAAU,CAAC,aAAa,CAAC;SACzB,GAAG,CAAC,OAAO,CAAC;SACZ,UAAU,CAAC,WAAW,EAAE;QACvB,UAAU,EAAE,CAAC,IAAI,CAAC;QAClB,OAAO,EAAE,kBAAkB;KAC5B,CAAC,CAAA;IAEJ,MAAM,GAAG;SACN,aAAa,CAAC,CAAC,EAAE,mBAAmB,CAAC;SACrC,MAAM,EAAE;SACR,IAAI,EAAE;SACN,IAAI,CAAC,CAAC,OAAe,EAAE,KAAwB,EAAE,aAAa,EAAE,EAAE;QACjE,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;YAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAA;QACpC,aAAa,CAAC,QAAQ,EAAE,CAAA;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC;SACD,UAAU,EAAE,CAAA;AACjB,CAAC"}
@@ -1 +0,0 @@
1
- export declare function resolveProjectKey(projectKey?: string): string;
@@ -1,32 +0,0 @@
1
- import { execFileSync } from 'node:child_process';
2
- import { existsSync, readFileSync } from 'node:fs';
3
- import { join } from 'node:path';
4
- export function resolveProjectKey(projectKey) {
5
- if (projectKey?.trim()) {
6
- return projectKey.trim();
7
- }
8
- const gitRoot = getGitRoot();
9
- const sonarPropsPath = join(gitRoot, 'sonar-project.properties');
10
- if (!existsSync(sonarPropsPath)) {
11
- throw new Error(`Missing projectKey and no sonar-project.properties found at ${sonarPropsPath}. Provide --projectKey explicitly.`);
12
- }
13
- const content = readFileSync(sonarPropsPath, 'utf8');
14
- const match = content.match(/^\s*sonar\.projectKey\s*=\s*(.+)\s*$/m);
15
- const key = match?.[1]?.trim();
16
- if (!key) {
17
- throw new Error(`Could not read sonar.projectKey from ${sonarPropsPath}. Provide --projectKey explicitly.`);
18
- }
19
- return key;
20
- }
21
- function getGitRoot() {
22
- try {
23
- return execFileSync('git', ['rev-parse', '--show-toplevel'], {
24
- encoding: 'utf8',
25
- stdio: ['ignore', 'pipe', 'ignore'],
26
- }).trim();
27
- }
28
- catch {
29
- return process.cwd();
30
- }
31
- }
32
- //# sourceMappingURL=project-key.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-key.js","sourceRoot":"","sources":["../../src/cli/project-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,UAAU,iBAAiB,CAAC,UAAmB;IACnD,IAAI,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC,IAAI,EAAE,CAAA;IAC1B,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAA;IAChE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,+DAA+D,cAAc,oCAAoC,CAClH,CAAA;IACH,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;IACpE,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAA;IAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,wCAAwC,cAAc,oCAAoC,CAC3F,CAAA;IACH,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE;YAC3D,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC,IAAI,EAAE,CAAA;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,GAAG,EAAE,CAAA;IACtB,CAAC;AACH,CAAC"}
package/dist/cli.d.ts DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
package/dist/cli.js DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env node
2
- import { run } from './cli/index.js';
3
- run(process.argv).catch((error) => {
4
- const message = error instanceof Error ? error.message : String(error);
5
- process.stderr.write(`${message}\n`);
6
- process.exit(1);
7
- });
8
- //# sourceMappingURL=cli.js.map
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAEpC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAChC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACtE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAA;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
package/dist/index.d.ts DELETED
@@ -1,6 +0,0 @@
1
- export * from './service/pr-report.js';
2
- export * from './service/pr-issues.js';
3
- export * from './service/pr-coverage.js';
4
- export * from './service/pr-review.js';
5
- export * from './service/issue-transition.js';
6
- export * from './service/sonarcloud-client.js';
package/dist/index.js DELETED
@@ -1,7 +0,0 @@
1
- export * from './service/pr-report.js';
2
- export * from './service/pr-issues.js';
3
- export * from './service/pr-coverage.js';
4
- export * from './service/pr-review.js';
5
- export * from './service/issue-transition.js';
6
- export * from './service/sonarcloud-client.js';
7
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,gCAAgC,CAAA"}
@@ -1,12 +0,0 @@
1
- import { type SonarCloudClientOptions } from './sonarcloud-client.js';
2
- export type IssueTransitionInput = {
3
- issueKey: string;
4
- transition: 'accept' | 'wontfix' | 'falsepositive' | 'confirm' | 'reopen' | 'resolve';
5
- comment?: string;
6
- };
7
- export type IssueTransitionResult = {
8
- issueKey: string;
9
- transition: string;
10
- applied: true;
11
- };
12
- export declare function transitionIssue(clientOptions: SonarCloudClientOptions, input: IssueTransitionInput): Promise<IssueTransitionResult>;