driftdetect 0.1.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/dist/bin/drift.d.ts +11 -0
- package/dist/bin/drift.d.ts.map +1 -0
- package/dist/bin/drift.js +83 -0
- package/dist/bin/drift.js.map +1 -0
- package/dist/commands/approve.d.ts +18 -0
- package/dist/commands/approve.d.ts.map +1 -0
- package/dist/commands/approve.js +271 -0
- package/dist/commands/approve.js.map +1 -0
- package/dist/commands/check.d.ts +39 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +268 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/export.d.ts +14 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +109 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/files.d.ts +13 -0
- package/dist/commands/files.d.ts.map +1 -0
- package/dist/commands/files.js +88 -0
- package/dist/commands/files.js.map +1 -0
- package/dist/commands/ignore.d.ts +18 -0
- package/dist/commands/ignore.d.ts.map +1 -0
- package/dist/commands/ignore.js +200 -0
- package/dist/commands/ignore.js.map +1 -0
- package/dist/commands/index.d.ts +16 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +16 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +19 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +320 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/report.d.ts +20 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +202 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/scan.d.ts +27 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +444 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/status.d.ts +18 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +199 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/where.d.ts +13 -0
- package/dist/commands/where.d.ts.map +1 -0
- package/dist/commands/where.js +80 -0
- package/dist/commands/where.js.map +1 -0
- package/dist/git/hooks.d.ts +108 -0
- package/dist/git/hooks.d.ts.map +1 -0
- package/dist/git/hooks.js +389 -0
- package/dist/git/hooks.js.map +1 -0
- package/dist/git/index.d.ts +6 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +6 -0
- package/dist/git/index.js.map +1 -0
- package/dist/git/staged-files.d.ts +41 -0
- package/dist/git/staged-files.d.ts.map +1 -0
- package/dist/git/staged-files.js +118 -0
- package/dist/git/staged-files.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/reporters/github-reporter.d.ts +13 -0
- package/dist/reporters/github-reporter.d.ts.map +1 -0
- package/dist/reporters/github-reporter.js +59 -0
- package/dist/reporters/github-reporter.js.map +1 -0
- package/dist/reporters/gitlab-reporter.d.ts +16 -0
- package/dist/reporters/gitlab-reporter.d.ts.map +1 -0
- package/dist/reporters/gitlab-reporter.js +62 -0
- package/dist/reporters/gitlab-reporter.js.map +1 -0
- package/dist/reporters/index.d.ts +9 -0
- package/dist/reporters/index.d.ts.map +1 -0
- package/dist/reporters/index.js +9 -0
- package/dist/reporters/index.js.map +1 -0
- package/dist/reporters/json-reporter.d.ts +13 -0
- package/dist/reporters/json-reporter.d.ts.map +1 -0
- package/dist/reporters/json-reporter.js +44 -0
- package/dist/reporters/json-reporter.js.map +1 -0
- package/dist/reporters/text-reporter.d.ts +13 -0
- package/dist/reporters/text-reporter.d.ts.map +1 -0
- package/dist/reporters/text-reporter.js +96 -0
- package/dist/reporters/text-reporter.js.map +1 -0
- package/dist/reporters/types.d.ts +42 -0
- package/dist/reporters/types.d.ts.map +1 -0
- package/dist/reporters/types.js +5 -0
- package/dist/reporters/types.js.map +1 -0
- package/dist/services/scanner-service.d.ts +166 -0
- package/dist/services/scanner-service.d.ts.map +1 -0
- package/dist/services/scanner-service.js +453 -0
- package/dist/services/scanner-service.js.map +1 -0
- package/dist/types/index.d.ts +24 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/index.d.ts +11 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +15 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/progress.d.ts +115 -0
- package/dist/ui/progress.d.ts.map +1 -0
- package/dist/ui/progress.js +232 -0
- package/dist/ui/progress.js.map +1 -0
- package/dist/ui/prompts.d.ts +91 -0
- package/dist/ui/prompts.d.ts.map +1 -0
- package/dist/ui/prompts.js +160 -0
- package/dist/ui/prompts.js.map +1 -0
- package/dist/ui/spinner.d.ts +109 -0
- package/dist/ui/spinner.d.ts.map +1 -0
- package/dist/ui/spinner.js +179 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/ui/table.d.ts +118 -0
- package/dist/ui/table.d.ts.map +1 -0
- package/dist/ui/table.js +235 -0
- package/dist/ui/table.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Reporter - GitHub Actions annotations
|
|
3
|
+
*
|
|
4
|
+
* @requirements 30.2
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Map severity to GitHub annotation level
|
|
8
|
+
*/
|
|
9
|
+
function severityToLevel(severity) {
|
|
10
|
+
switch (severity) {
|
|
11
|
+
case 'error':
|
|
12
|
+
return 'error';
|
|
13
|
+
case 'warning':
|
|
14
|
+
return 'warning';
|
|
15
|
+
case 'info':
|
|
16
|
+
case 'hint':
|
|
17
|
+
default:
|
|
18
|
+
return 'notice';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* GitHub Actions reporter for CI annotations
|
|
23
|
+
*/
|
|
24
|
+
export class GitHubReporter {
|
|
25
|
+
generate(data) {
|
|
26
|
+
const lines = [];
|
|
27
|
+
for (const violation of data.violations) {
|
|
28
|
+
const level = severityToLevel(violation.severity);
|
|
29
|
+
const file = violation.file;
|
|
30
|
+
const line = violation.range.start.line;
|
|
31
|
+
const endLine = violation.range.end.line;
|
|
32
|
+
const col = violation.range.start.character;
|
|
33
|
+
const endCol = violation.range.end.character;
|
|
34
|
+
const title = `Drift: ${violation.patternId}`;
|
|
35
|
+
const message = violation.message;
|
|
36
|
+
lines.push(`::${level} file=${file},line=${line},endLine=${endLine},col=${col},endColumn=${endCol},title=${title}::${message}`);
|
|
37
|
+
}
|
|
38
|
+
if (data.violations.length > 0) {
|
|
39
|
+
const parts = [];
|
|
40
|
+
if (data.summary.errors > 0)
|
|
41
|
+
parts.push(`${data.summary.errors} error(s)`);
|
|
42
|
+
if (data.summary.warnings > 0)
|
|
43
|
+
parts.push(`${data.summary.warnings} warning(s)`);
|
|
44
|
+
if (data.summary.infos > 0)
|
|
45
|
+
parts.push(`${data.summary.infos} info`);
|
|
46
|
+
if (data.summary.hints > 0)
|
|
47
|
+
parts.push(`${data.summary.hints} hint(s)`);
|
|
48
|
+
lines.push(`::notice::Drift found ${data.summary.total} violation(s): ${parts.join(', ')}`);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
lines.push('::notice::Drift: No violations found');
|
|
52
|
+
}
|
|
53
|
+
lines.push(`::set-output name=violations::${data.summary.total}`);
|
|
54
|
+
lines.push(`::set-output name=errors::${data.summary.errors}`);
|
|
55
|
+
lines.push(`::set-output name=warnings::${data.summary.warnings}`);
|
|
56
|
+
return lines.join('\n');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=github-reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-reporter.js","sourceRoot":"","sources":["../../src/reporters/github-reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,SAAS,eAAe,CAAC,QAAkB;IACzC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB,QAAQ,CAAC,IAAgB;QACvB,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;YACxC,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YACzC,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;YAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAC7C,MAAM,KAAK,GAAG,UAAU,SAAS,CAAC,SAAS,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YAElC,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,SAAS,IAAI,SAAS,IAAI,YAAY,OAAO,QAAQ,GAAG,cAAc,MAAM,UAAU,KAAK,KAAK,OAAO,EAAE,CACpH,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC;YAC3E,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,aAAa,CAAC,CAAC;YACjF,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC;YACrE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,CAAC;YACxE,KAAK,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,OAAO,CAAC,KAAK,kBAAkB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACrD,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,iCAAiC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,+BAA+B,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEnE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitLab Reporter - GitLab CI code quality format
|
|
3
|
+
*
|
|
4
|
+
* @requirements 30.3
|
|
5
|
+
*/
|
|
6
|
+
import type { Reporter, ReportData } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* GitLab CI reporter for code quality reports
|
|
9
|
+
*
|
|
10
|
+
* Generates reports in GitLab Code Quality format:
|
|
11
|
+
* https://docs.gitlab.com/ee/ci/testing/code_quality.html
|
|
12
|
+
*/
|
|
13
|
+
export declare class GitLabReporter implements Reporter {
|
|
14
|
+
generate(data: ReportData): string;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=gitlab-reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitlab-reporter.d.ts","sourceRoot":"","sources":["../../src/reporters/gitlab-reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA4DvD;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;CAgCnC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitLab Reporter - GitLab CI code quality format
|
|
3
|
+
*
|
|
4
|
+
* @requirements 30.3
|
|
5
|
+
*/
|
|
6
|
+
import * as crypto from 'node:crypto';
|
|
7
|
+
/**
|
|
8
|
+
* Map severity to GitLab Code Quality severity
|
|
9
|
+
*/
|
|
10
|
+
function severityToGitLab(severity) {
|
|
11
|
+
switch (severity) {
|
|
12
|
+
case 'error':
|
|
13
|
+
return 'critical';
|
|
14
|
+
case 'warning':
|
|
15
|
+
return 'major';
|
|
16
|
+
case 'info':
|
|
17
|
+
return 'minor';
|
|
18
|
+
case 'hint':
|
|
19
|
+
default:
|
|
20
|
+
return 'info';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generate a fingerprint for a violation
|
|
25
|
+
*/
|
|
26
|
+
function generateFingerprint(patternId, file, line, message) {
|
|
27
|
+
const content = `${patternId}:${file}:${line}:${message}`;
|
|
28
|
+
return crypto.createHash('md5').update(content).digest('hex');
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* GitLab CI reporter for code quality reports
|
|
32
|
+
*
|
|
33
|
+
* Generates reports in GitLab Code Quality format:
|
|
34
|
+
* https://docs.gitlab.com/ee/ci/testing/code_quality.html
|
|
35
|
+
*/
|
|
36
|
+
export class GitLabReporter {
|
|
37
|
+
generate(data) {
|
|
38
|
+
const issues = data.violations.map((violation) => {
|
|
39
|
+
const issue = {
|
|
40
|
+
type: 'issue',
|
|
41
|
+
check_name: `drift/${violation.patternId}`,
|
|
42
|
+
description: violation.message,
|
|
43
|
+
categories: ['Style', 'Consistency'],
|
|
44
|
+
location: {
|
|
45
|
+
path: violation.file,
|
|
46
|
+
lines: {
|
|
47
|
+
begin: violation.range.start.line,
|
|
48
|
+
end: violation.range.end.line,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
severity: severityToGitLab(violation.severity),
|
|
52
|
+
fingerprint: generateFingerprint(violation.patternId, violation.file, violation.range.start.line, violation.message),
|
|
53
|
+
};
|
|
54
|
+
if (violation.explanation) {
|
|
55
|
+
issue.content = { body: violation.explanation };
|
|
56
|
+
}
|
|
57
|
+
return issue;
|
|
58
|
+
});
|
|
59
|
+
return JSON.stringify(issues, null, 2);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=gitlab-reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitlab-reporter.js","sourceRoot":"","sources":["../../src/reporters/gitlab-reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAStC;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAAkB;IAC1C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,UAAU,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,OAAO,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,OAAO,CAAC;QACjB,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAwBD;;GAEG;AACH,SAAS,mBAAmB,CAC1B,SAAiB,EACjB,IAAY,EACZ,IAAY,EACZ,OAAe;IAEf,MAAM,OAAO,GAAG,GAAG,SAAS,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;IAC1D,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IACzB,QAAQ,CAAC,IAAgB;QACvB,MAAM,MAAM,GAAkB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YAC9D,MAAM,KAAK,GAAgB;gBACzB,IAAI,EAAE,OAAO;gBACb,UAAU,EAAE,SAAS,SAAS,CAAC,SAAS,EAAE;gBAC1C,WAAW,EAAE,SAAS,CAAC,OAAO;gBAC9B,UAAU,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;gBACpC,QAAQ,EAAE;oBACR,IAAI,EAAE,SAAS,CAAC,IAAI;oBACpB,KAAK,EAAE;wBACL,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;wBACjC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI;qBAC9B;iBACF;gBACD,QAAQ,EAAE,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAC9C,WAAW,EAAE,mBAAmB,CAC9B,SAAS,CAAC,SAAS,EACnB,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAC1B,SAAS,CAAC,OAAO,CAClB;aACF,CAAC;YAEF,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;gBAC1B,KAAK,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC;YAClD,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reporters module exports
|
|
3
|
+
*/
|
|
4
|
+
export * from './types.js';
|
|
5
|
+
export { TextReporter } from './text-reporter.js';
|
|
6
|
+
export { JsonReporter } from './json-reporter.js';
|
|
7
|
+
export { GitHubReporter } from './github-reporter.js';
|
|
8
|
+
export { GitLabReporter } from './gitlab-reporter.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reporters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reporters module exports
|
|
3
|
+
*/
|
|
4
|
+
export * from './types.js';
|
|
5
|
+
export { TextReporter } from './text-reporter.js';
|
|
6
|
+
export { JsonReporter } from './json-reporter.js';
|
|
7
|
+
export { GitHubReporter } from './github-reporter.js';
|
|
8
|
+
export { GitLabReporter } from './gitlab-reporter.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reporters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Reporter - Machine-readable JSON output
|
|
3
|
+
*
|
|
4
|
+
* @requirements 30.1
|
|
5
|
+
*/
|
|
6
|
+
import type { Reporter, ReportData } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* JSON reporter for machine-readable output
|
|
9
|
+
*/
|
|
10
|
+
export declare class JsonReporter implements Reporter {
|
|
11
|
+
generate(data: ReportData): string;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=json-reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-reporter.d.ts","sourceRoot":"","sources":["../../src/reporters/json-reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEvD;;GAEG;AACH,qBAAa,YAAa,YAAW,QAAQ;IAC3C,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;CAkCnC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Reporter - Machine-readable JSON output
|
|
3
|
+
*
|
|
4
|
+
* @requirements 30.1
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* JSON reporter for machine-readable output
|
|
8
|
+
*/
|
|
9
|
+
export class JsonReporter {
|
|
10
|
+
generate(data) {
|
|
11
|
+
const output = {
|
|
12
|
+
violations: data.violations.map((v) => ({
|
|
13
|
+
id: v.id,
|
|
14
|
+
patternId: v.patternId,
|
|
15
|
+
severity: v.severity,
|
|
16
|
+
file: v.file,
|
|
17
|
+
line: v.range.start.line,
|
|
18
|
+
column: v.range.start.character,
|
|
19
|
+
endLine: v.range.end.line,
|
|
20
|
+
endColumn: v.range.end.character,
|
|
21
|
+
message: v.message,
|
|
22
|
+
explanation: v.explanation,
|
|
23
|
+
expected: v.expected,
|
|
24
|
+
actual: v.actual,
|
|
25
|
+
})),
|
|
26
|
+
summary: {
|
|
27
|
+
total: data.summary.total,
|
|
28
|
+
errors: data.summary.errors,
|
|
29
|
+
warnings: data.summary.warnings,
|
|
30
|
+
infos: data.summary.infos,
|
|
31
|
+
hints: data.summary.hints,
|
|
32
|
+
},
|
|
33
|
+
patterns: data.patterns.map((p) => ({
|
|
34
|
+
id: p.id,
|
|
35
|
+
name: p.name,
|
|
36
|
+
category: p.category,
|
|
37
|
+
severity: p.severity,
|
|
38
|
+
})),
|
|
39
|
+
timestamp: data.timestamp,
|
|
40
|
+
};
|
|
41
|
+
return JSON.stringify(output, null, 2);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=json-reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-reporter.js","sourceRoot":"","sources":["../../src/reporters/json-reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,OAAO,YAAY;IACvB,QAAQ,CAAC,IAAgB;QACvB,MAAM,MAAM,GAAG;YACb,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;gBACxB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS;gBAC/B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI;gBACzB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS;gBAChC,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB,CAAC,CAAC;YACH,OAAO,EAAE;gBACP,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;gBACzB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAC/B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;gBACzB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;aAC1B;YACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;aACrB,CAAC,CAAC;YACH,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text Reporter - Human-readable text output
|
|
3
|
+
*
|
|
4
|
+
* @requirements 29.7
|
|
5
|
+
*/
|
|
6
|
+
import type { Reporter, ReportData } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Text reporter for human-readable output
|
|
9
|
+
*/
|
|
10
|
+
export declare class TextReporter implements Reporter {
|
|
11
|
+
generate(data: ReportData): string;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=text-reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-reporter.d.ts","sourceRoot":"","sources":["../../src/reporters/text-reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAuCvD;;GAEG;AACH,qBAAa,YAAa,YAAW,QAAQ;IAC3C,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;CA6DnC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text Reporter - Human-readable text output
|
|
3
|
+
*
|
|
4
|
+
* @requirements 29.7
|
|
5
|
+
*/
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
/**
|
|
8
|
+
* Format severity with color
|
|
9
|
+
*/
|
|
10
|
+
function formatSeverity(severity) {
|
|
11
|
+
switch (severity) {
|
|
12
|
+
case 'error':
|
|
13
|
+
return chalk.red('error');
|
|
14
|
+
case 'warning':
|
|
15
|
+
return chalk.yellow('warning');
|
|
16
|
+
case 'info':
|
|
17
|
+
return chalk.blue('info');
|
|
18
|
+
case 'hint':
|
|
19
|
+
return chalk.gray('hint');
|
|
20
|
+
default:
|
|
21
|
+
return severity;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get severity icon
|
|
26
|
+
*/
|
|
27
|
+
function getSeverityIcon(severity) {
|
|
28
|
+
switch (severity) {
|
|
29
|
+
case 'error':
|
|
30
|
+
return chalk.red('✖');
|
|
31
|
+
case 'warning':
|
|
32
|
+
return chalk.yellow('⚠');
|
|
33
|
+
case 'info':
|
|
34
|
+
return chalk.blue('ℹ');
|
|
35
|
+
case 'hint':
|
|
36
|
+
return chalk.gray('○');
|
|
37
|
+
default:
|
|
38
|
+
return ' ';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Text reporter for human-readable output
|
|
43
|
+
*/
|
|
44
|
+
export class TextReporter {
|
|
45
|
+
generate(data) {
|
|
46
|
+
const lines = [];
|
|
47
|
+
if (data.violations.length === 0) {
|
|
48
|
+
lines.push(chalk.green('✔ No violations found'));
|
|
49
|
+
return lines.join('\n');
|
|
50
|
+
}
|
|
51
|
+
// Group violations by file
|
|
52
|
+
const byFile = new Map();
|
|
53
|
+
for (const violation of data.violations) {
|
|
54
|
+
const existing = byFile.get(violation.file) ?? [];
|
|
55
|
+
existing.push(violation);
|
|
56
|
+
byFile.set(violation.file, existing);
|
|
57
|
+
}
|
|
58
|
+
// Output violations grouped by file
|
|
59
|
+
for (const [file, violations] of Array.from(byFile.entries())) {
|
|
60
|
+
lines.push('');
|
|
61
|
+
lines.push(chalk.underline(file));
|
|
62
|
+
// Sort by line number
|
|
63
|
+
violations.sort((a, b) => a.range.start.line - b.range.start.line);
|
|
64
|
+
for (const violation of violations) {
|
|
65
|
+
const icon = getSeverityIcon(violation.severity);
|
|
66
|
+
const location = chalk.gray(`${violation.range.start.line}:${violation.range.start.character}`);
|
|
67
|
+
const severity = formatSeverity(violation.severity);
|
|
68
|
+
const message = violation.message;
|
|
69
|
+
const patternId = chalk.gray(`(${violation.patternId})`);
|
|
70
|
+
lines.push(` ${icon} ${location} ${severity} ${message} ${patternId}`);
|
|
71
|
+
if (violation.explanation) {
|
|
72
|
+
lines.push(chalk.gray(` ${violation.explanation}`));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Summary
|
|
77
|
+
lines.push('');
|
|
78
|
+
lines.push(chalk.gray('─'.repeat(60)));
|
|
79
|
+
const parts = [];
|
|
80
|
+
if (data.summary.errors > 0) {
|
|
81
|
+
parts.push(chalk.red(`${data.summary.errors} error${data.summary.errors !== 1 ? 's' : ''}`));
|
|
82
|
+
}
|
|
83
|
+
if (data.summary.warnings > 0) {
|
|
84
|
+
parts.push(chalk.yellow(`${data.summary.warnings} warning${data.summary.warnings !== 1 ? 's' : ''}`));
|
|
85
|
+
}
|
|
86
|
+
if (data.summary.infos > 0) {
|
|
87
|
+
parts.push(chalk.blue(`${data.summary.infos} info`));
|
|
88
|
+
}
|
|
89
|
+
if (data.summary.hints > 0) {
|
|
90
|
+
parts.push(chalk.gray(`${data.summary.hints} hint${data.summary.hints !== 1 ? 's' : ''}`));
|
|
91
|
+
}
|
|
92
|
+
lines.push(`${parts.join(', ')} (${data.summary.total} total)`);
|
|
93
|
+
return lines.join('\n');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=text-reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-reporter.js","sourceRoot":"","sources":["../../src/reporters/text-reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reporter type definitions
|
|
3
|
+
*/
|
|
4
|
+
import type { Violation, Pattern } from 'driftdetect-core';
|
|
5
|
+
/**
|
|
6
|
+
* Summary of violations
|
|
7
|
+
*/
|
|
8
|
+
export interface ViolationSummary {
|
|
9
|
+
/** Total number of violations */
|
|
10
|
+
total: number;
|
|
11
|
+
/** Number of errors */
|
|
12
|
+
errors: number;
|
|
13
|
+
/** Number of warnings */
|
|
14
|
+
warnings: number;
|
|
15
|
+
/** Number of info violations */
|
|
16
|
+
infos: number;
|
|
17
|
+
/** Number of hints */
|
|
18
|
+
hints: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Data passed to reporters
|
|
22
|
+
*/
|
|
23
|
+
export interface ReportData {
|
|
24
|
+
/** Violations found */
|
|
25
|
+
violations: Violation[];
|
|
26
|
+
/** Summary statistics */
|
|
27
|
+
summary: ViolationSummary;
|
|
28
|
+
/** Patterns checked */
|
|
29
|
+
patterns: Pattern[];
|
|
30
|
+
/** Timestamp of the report */
|
|
31
|
+
timestamp: string;
|
|
32
|
+
/** Root directory */
|
|
33
|
+
rootDir: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Reporter interface
|
|
37
|
+
*/
|
|
38
|
+
export interface Reporter {
|
|
39
|
+
/** Generate a report from the data */
|
|
40
|
+
generate(data: ReportData): string;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/reporters/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,uBAAuB;IACvB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,yBAAyB;IACzB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,uBAAuB;IACvB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;CACpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/reporters/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scanner Service - Enterprise-grade pattern detection
|
|
3
|
+
*
|
|
4
|
+
* Uses the real detectors from driftdetect-detectors to find
|
|
5
|
+
* high-value architectural patterns and violations.
|
|
6
|
+
*
|
|
7
|
+
* Now includes manifest generation for pattern location discovery.
|
|
8
|
+
*/
|
|
9
|
+
import { ManifestStore, type Manifest } from 'driftdetect-core';
|
|
10
|
+
/**
|
|
11
|
+
* Project-wide context for detection
|
|
12
|
+
*/
|
|
13
|
+
export interface ProjectContext {
|
|
14
|
+
rootDir: string;
|
|
15
|
+
files: string[];
|
|
16
|
+
config: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Scanner service configuration
|
|
20
|
+
*/
|
|
21
|
+
export interface ScannerServiceConfig {
|
|
22
|
+
rootDir: string;
|
|
23
|
+
verbose?: boolean;
|
|
24
|
+
categories?: string[];
|
|
25
|
+
/** Only run critical/high-value detectors */
|
|
26
|
+
criticalOnly?: boolean;
|
|
27
|
+
/** Enable manifest generation */
|
|
28
|
+
generateManifest?: boolean;
|
|
29
|
+
/** Only scan changed files (incremental) */
|
|
30
|
+
incremental?: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Aggregated pattern match across files
|
|
34
|
+
*/
|
|
35
|
+
export interface AggregatedPattern {
|
|
36
|
+
patternId: string;
|
|
37
|
+
detectorId: string;
|
|
38
|
+
category: string;
|
|
39
|
+
subcategory: string;
|
|
40
|
+
name: string;
|
|
41
|
+
description: string;
|
|
42
|
+
locations: Array<{
|
|
43
|
+
file: string;
|
|
44
|
+
line: number;
|
|
45
|
+
column: number;
|
|
46
|
+
}>;
|
|
47
|
+
confidence: number;
|
|
48
|
+
occurrences: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Aggregated violation across files
|
|
52
|
+
*/
|
|
53
|
+
export interface AggregatedViolation {
|
|
54
|
+
patternId: string;
|
|
55
|
+
detectorId: string;
|
|
56
|
+
category: string;
|
|
57
|
+
severity: 'error' | 'warning' | 'info' | 'hint';
|
|
58
|
+
file: string;
|
|
59
|
+
line: number;
|
|
60
|
+
column: number;
|
|
61
|
+
message: string;
|
|
62
|
+
explanation?: string | undefined;
|
|
63
|
+
suggestedFix?: string | undefined;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Scan result for a single file
|
|
67
|
+
*/
|
|
68
|
+
export interface FileScanResult {
|
|
69
|
+
file: string;
|
|
70
|
+
patterns: Array<{
|
|
71
|
+
patternId: string;
|
|
72
|
+
detectorId: string;
|
|
73
|
+
confidence: number;
|
|
74
|
+
location: {
|
|
75
|
+
file: string;
|
|
76
|
+
line: number;
|
|
77
|
+
column: number;
|
|
78
|
+
};
|
|
79
|
+
}>;
|
|
80
|
+
violations: AggregatedViolation[];
|
|
81
|
+
duration: number;
|
|
82
|
+
error?: string;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Overall scan results
|
|
86
|
+
*/
|
|
87
|
+
export interface ScanResults {
|
|
88
|
+
files: FileScanResult[];
|
|
89
|
+
patterns: AggregatedPattern[];
|
|
90
|
+
violations: AggregatedViolation[];
|
|
91
|
+
totalPatterns: number;
|
|
92
|
+
totalViolations: number;
|
|
93
|
+
totalFiles: number;
|
|
94
|
+
duration: number;
|
|
95
|
+
errors: string[];
|
|
96
|
+
detectorStats: {
|
|
97
|
+
total: number;
|
|
98
|
+
ran: number;
|
|
99
|
+
skipped: number;
|
|
100
|
+
};
|
|
101
|
+
/** Manifest with semantic locations (if generateManifest is true) */
|
|
102
|
+
manifest?: Manifest;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Scanner Service
|
|
106
|
+
*
|
|
107
|
+
* Orchestrates pattern detection across files using real detectors
|
|
108
|
+
* from driftdetect-detectors package.
|
|
109
|
+
*/
|
|
110
|
+
export declare class ScannerService {
|
|
111
|
+
private config;
|
|
112
|
+
private detectors;
|
|
113
|
+
private initialized;
|
|
114
|
+
private manifestStore;
|
|
115
|
+
constructor(config: ScannerServiceConfig);
|
|
116
|
+
/**
|
|
117
|
+
* Initialize the scanner service - loads all detectors
|
|
118
|
+
*/
|
|
119
|
+
initialize(): Promise<void>;
|
|
120
|
+
/**
|
|
121
|
+
* Get detector count
|
|
122
|
+
*/
|
|
123
|
+
getDetectorCount(): number;
|
|
124
|
+
/**
|
|
125
|
+
* Get detector counts by category
|
|
126
|
+
*/
|
|
127
|
+
getDetectorCounts(): {
|
|
128
|
+
api: number;
|
|
129
|
+
auth: number;
|
|
130
|
+
security: number;
|
|
131
|
+
errors: number;
|
|
132
|
+
structural: number;
|
|
133
|
+
components: number;
|
|
134
|
+
styling: number;
|
|
135
|
+
logging: number;
|
|
136
|
+
testing: number;
|
|
137
|
+
dataAccess: number;
|
|
138
|
+
config: number;
|
|
139
|
+
types: number;
|
|
140
|
+
accessibility: number;
|
|
141
|
+
documentation: number;
|
|
142
|
+
performance: number;
|
|
143
|
+
total: number;
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Scan files for patterns using real detectors
|
|
147
|
+
*/
|
|
148
|
+
scanFiles(files: string[], projectContext: ProjectContext): Promise<ScanResults>;
|
|
149
|
+
/**
|
|
150
|
+
* Create a semantic location from a basic location
|
|
151
|
+
*/
|
|
152
|
+
private createSemanticLocation;
|
|
153
|
+
/**
|
|
154
|
+
* Extract semantic information from a line of code
|
|
155
|
+
*/
|
|
156
|
+
private extractSemanticInfo;
|
|
157
|
+
/**
|
|
158
|
+
* Get the manifest store (for external access)
|
|
159
|
+
*/
|
|
160
|
+
getManifestStore(): ManifestStore | null;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Create a scanner service
|
|
164
|
+
*/
|
|
165
|
+
export declare function createScannerService(config: ScannerServiceConfig): ScannerService;
|
|
166
|
+
//# sourceMappingURL=scanner-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner-service.d.ts","sourceRoot":"","sources":["../../src/services/scanner-service.ts"],"names":[],"mappings":"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"}
|