@behavioral-contracts/verify-cli 1.0.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/LICENSE +119 -0
- package/README.md +694 -0
- package/dist/analyze-results.js +253 -0
- package/dist/analyzer.d.ts +366 -0
- package/dist/analyzer.d.ts.map +1 -0
- package/dist/analyzer.js +2592 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/analyzers/async-error-analyzer.d.ts +72 -0
- package/dist/analyzers/async-error-analyzer.d.ts.map +1 -0
- package/dist/analyzers/async-error-analyzer.js +243 -0
- package/dist/analyzers/async-error-analyzer.js.map +1 -0
- package/dist/analyzers/event-listener-analyzer.d.ts +102 -0
- package/dist/analyzers/event-listener-analyzer.d.ts.map +1 -0
- package/dist/analyzers/event-listener-analyzer.js +253 -0
- package/dist/analyzers/event-listener-analyzer.js.map +1 -0
- package/dist/analyzers/react-query-analyzer.d.ts +66 -0
- package/dist/analyzers/react-query-analyzer.d.ts.map +1 -0
- package/dist/analyzers/react-query-analyzer.js +341 -0
- package/dist/analyzers/react-query-analyzer.js.map +1 -0
- package/dist/analyzers/return-value-analyzer.d.ts +61 -0
- package/dist/analyzers/return-value-analyzer.d.ts.map +1 -0
- package/dist/analyzers/return-value-analyzer.js +225 -0
- package/dist/analyzers/return-value-analyzer.js.map +1 -0
- package/dist/code-snippet.d.ts +48 -0
- package/dist/code-snippet.d.ts.map +1 -0
- package/dist/code-snippet.js +84 -0
- package/dist/code-snippet.js.map +1 -0
- package/dist/corpus-loader.d.ts +33 -0
- package/dist/corpus-loader.d.ts.map +1 -0
- package/dist/corpus-loader.js +155 -0
- package/dist/corpus-loader.js.map +1 -0
- package/dist/fixture-tester.d.ts +28 -0
- package/dist/fixture-tester.d.ts.map +1 -0
- package/dist/fixture-tester.js +176 -0
- package/dist/fixture-tester.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +375 -0
- package/dist/index.js.map +1 -0
- package/dist/package-discovery.d.ts +62 -0
- package/dist/package-discovery.d.ts.map +1 -0
- package/dist/package-discovery.js +299 -0
- package/dist/package-discovery.js.map +1 -0
- package/dist/reporter.d.ts +43 -0
- package/dist/reporter.d.ts.map +1 -0
- package/dist/reporter.js +347 -0
- package/dist/reporter.js.map +1 -0
- package/dist/reporters/benchmarking.d.ts +70 -0
- package/dist/reporters/benchmarking.d.ts.map +1 -0
- package/dist/reporters/benchmarking.js +191 -0
- package/dist/reporters/benchmarking.js.map +1 -0
- package/dist/reporters/d3-visualizer.d.ts +40 -0
- package/dist/reporters/d3-visualizer.d.ts.map +1 -0
- package/dist/reporters/d3-visualizer.js +803 -0
- package/dist/reporters/d3-visualizer.js.map +1 -0
- package/dist/reporters/health-score.d.ts +33 -0
- package/dist/reporters/health-score.d.ts.map +1 -0
- package/dist/reporters/health-score.js +149 -0
- package/dist/reporters/health-score.js.map +1 -0
- package/dist/reporters/index.d.ts +11 -0
- package/dist/reporters/index.d.ts.map +1 -0
- package/dist/reporters/index.js +11 -0
- package/dist/reporters/index.js.map +1 -0
- package/dist/reporters/package-breakdown.d.ts +48 -0
- package/dist/reporters/package-breakdown.d.ts.map +1 -0
- package/dist/reporters/package-breakdown.js +185 -0
- package/dist/reporters/package-breakdown.js.map +1 -0
- package/dist/reporters/positive-evidence.d.ts +42 -0
- package/dist/reporters/positive-evidence.d.ts.map +1 -0
- package/dist/reporters/positive-evidence.js +436 -0
- package/dist/reporters/positive-evidence.js.map +1 -0
- package/dist/tsconfig-generator.d.ts +17 -0
- package/dist/tsconfig-generator.d.ts.map +1 -0
- package/dist/tsconfig-generator.js +107 -0
- package/dist/tsconfig-generator.js.map +1 -0
- package/dist/types.d.ts +298 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package Discovery Module
|
|
3
|
+
*
|
|
4
|
+
* Scans a project to discover all packages used, check which have contracts,
|
|
5
|
+
* and provide coverage statistics.
|
|
6
|
+
*/
|
|
7
|
+
import { PackageDiscoveryResult, PackageContract } from './types.js';
|
|
8
|
+
export declare class PackageDiscovery {
|
|
9
|
+
private corpusContracts;
|
|
10
|
+
private pathAliases;
|
|
11
|
+
constructor(corpusContracts: Map<string, PackageContract>);
|
|
12
|
+
/**
|
|
13
|
+
* Discover all packages used in a project
|
|
14
|
+
*/
|
|
15
|
+
discoverPackages(projectRoot: string, tsconfigPath: string): Promise<PackageDiscoveryResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Read dependencies from package.json
|
|
18
|
+
*/
|
|
19
|
+
private readPackageJson;
|
|
20
|
+
/**
|
|
21
|
+
* Scan TypeScript source files for import statements
|
|
22
|
+
*/
|
|
23
|
+
private scanImports;
|
|
24
|
+
/**
|
|
25
|
+
* Extract path aliases from tsconfig to filter them out
|
|
26
|
+
*
|
|
27
|
+
* Examples:
|
|
28
|
+
* - "@/*" -> "@"
|
|
29
|
+
* - "@/components/*" -> "@/components"
|
|
30
|
+
* - "~/*" -> "~"
|
|
31
|
+
*/
|
|
32
|
+
private extractPathAliases;
|
|
33
|
+
/**
|
|
34
|
+
* Extract import statements from a TypeScript source file
|
|
35
|
+
*/
|
|
36
|
+
private extractImportsFromFile;
|
|
37
|
+
/**
|
|
38
|
+
* Extract the package name from an import path
|
|
39
|
+
*
|
|
40
|
+
* Examples:
|
|
41
|
+
* - 'axios' -> 'axios'
|
|
42
|
+
* - '@prisma/client' -> '@prisma/client'
|
|
43
|
+
* - 'axios/lib/core' -> 'axios'
|
|
44
|
+
* - './local' -> null
|
|
45
|
+
* - '../relative' -> null
|
|
46
|
+
* - '@/components' -> null (path alias)
|
|
47
|
+
*/
|
|
48
|
+
private extractPackageName;
|
|
49
|
+
/**
|
|
50
|
+
* Merge packages from package.json and actual imports
|
|
51
|
+
*/
|
|
52
|
+
private mergePackages;
|
|
53
|
+
/**
|
|
54
|
+
* Check which packages have contracts in the corpus
|
|
55
|
+
*/
|
|
56
|
+
private checkContracts;
|
|
57
|
+
/**
|
|
58
|
+
* Generate a coverage report
|
|
59
|
+
*/
|
|
60
|
+
generateCoverageReport(discovery: PackageDiscoveryResult): string;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=package-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-discovery.d.ts","sourceRoot":"","sources":["../src/package-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAqB,sBAAsB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAExF,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,eAAe;IAHzB,OAAO,CAAC,WAAW,CAA0B;gBAGnC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;IAGvD;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAyBlG;;OAEG;YACW,eAAe;IAqB7B;;OAEG;YACW,WAAW;IAgCzB;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4C9B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,kBAAkB;IAqC1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAkCrB;;OAEG;IACH,OAAO,CAAC,cAAc;IA6BtB;;OAEG;IACH,sBAAsB,CAAC,SAAS,EAAE,sBAAsB,GAAG,MAAM;CAyClE"}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package Discovery Module
|
|
3
|
+
*
|
|
4
|
+
* Scans a project to discover all packages used, check which have contracts,
|
|
5
|
+
* and provide coverage statistics.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs/promises';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import * as ts from 'typescript';
|
|
10
|
+
export class PackageDiscovery {
|
|
11
|
+
corpusContracts;
|
|
12
|
+
pathAliases = new Set();
|
|
13
|
+
constructor(corpusContracts) {
|
|
14
|
+
this.corpusContracts = corpusContracts;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Discover all packages used in a project
|
|
18
|
+
*/
|
|
19
|
+
async discoverPackages(projectRoot, tsconfigPath) {
|
|
20
|
+
// Step 1: Read package.json dependencies
|
|
21
|
+
const packageJsonDeps = await this.readPackageJson(projectRoot);
|
|
22
|
+
// Step 2: Scan source files for actual imports
|
|
23
|
+
const importedPackages = await this.scanImports(tsconfigPath);
|
|
24
|
+
// Step 3: Merge and dedupe
|
|
25
|
+
const allPackages = this.mergePackages(packageJsonDeps, importedPackages);
|
|
26
|
+
// Step 4: Check which have contracts
|
|
27
|
+
const packagesWithContracts = this.checkContracts(allPackages);
|
|
28
|
+
// Step 5: Calculate statistics
|
|
29
|
+
const withContracts = packagesWithContracts.filter(p => p.hasContract).length;
|
|
30
|
+
const withoutContracts = packagesWithContracts.length - withContracts;
|
|
31
|
+
return {
|
|
32
|
+
total: packagesWithContracts.length,
|
|
33
|
+
withContracts,
|
|
34
|
+
withoutContracts,
|
|
35
|
+
packages: packagesWithContracts,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Read dependencies from package.json
|
|
40
|
+
*/
|
|
41
|
+
async readPackageJson(projectRoot) {
|
|
42
|
+
const packages = new Map();
|
|
43
|
+
try {
|
|
44
|
+
const packageJsonPath = path.join(projectRoot, 'package.json');
|
|
45
|
+
const content = await fs.readFile(packageJsonPath, 'utf-8');
|
|
46
|
+
const packageJson = JSON.parse(content);
|
|
47
|
+
// Collect dependencies and devDependencies
|
|
48
|
+
const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };
|
|
49
|
+
for (const [name, version] of Object.entries(deps)) {
|
|
50
|
+
packages.set(name, { version: version });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
console.warn('Could not read package.json:', error);
|
|
55
|
+
}
|
|
56
|
+
return packages;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Scan TypeScript source files for import statements
|
|
60
|
+
*/
|
|
61
|
+
async scanImports(tsconfigPath) {
|
|
62
|
+
const imports = new Map(); // packageName -> Set<fileName>
|
|
63
|
+
try {
|
|
64
|
+
// Load tsconfig
|
|
65
|
+
const configFile = ts.readConfigFile(tsconfigPath, ts.sys.readFile);
|
|
66
|
+
const parsedConfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, path.dirname(tsconfigPath));
|
|
67
|
+
// Extract path aliases to filter them out
|
|
68
|
+
this.extractPathAliases(configFile.config, tsconfigPath);
|
|
69
|
+
// Create program
|
|
70
|
+
const program = ts.createProgram(parsedConfig.fileNames, parsedConfig.options);
|
|
71
|
+
// Scan each source file
|
|
72
|
+
for (const sourceFile of program.getSourceFiles()) {
|
|
73
|
+
if (sourceFile.isDeclarationFile)
|
|
74
|
+
continue;
|
|
75
|
+
if (sourceFile.fileName.includes('node_modules'))
|
|
76
|
+
continue;
|
|
77
|
+
this.extractImportsFromFile(sourceFile, imports);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.warn('Could not scan imports:', error);
|
|
82
|
+
}
|
|
83
|
+
return imports;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Extract path aliases from tsconfig to filter them out
|
|
87
|
+
*
|
|
88
|
+
* Examples:
|
|
89
|
+
* - "@/*" -> "@"
|
|
90
|
+
* - "@/components/*" -> "@/components"
|
|
91
|
+
* - "~/*" -> "~"
|
|
92
|
+
*/
|
|
93
|
+
extractPathAliases(config, tsconfigPath) {
|
|
94
|
+
this.pathAliases.clear();
|
|
95
|
+
// Check current config
|
|
96
|
+
const paths = config.compilerOptions?.paths;
|
|
97
|
+
if (paths) {
|
|
98
|
+
for (const alias of Object.keys(paths)) {
|
|
99
|
+
// Extract the base alias (remove /* suffix)
|
|
100
|
+
const baseAlias = alias.replace(/\/\*$/, '');
|
|
101
|
+
this.pathAliases.add(baseAlias);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Check extends (recursively load parent tsconfig)
|
|
105
|
+
if (config.extends) {
|
|
106
|
+
try {
|
|
107
|
+
const extendsPath = path.resolve(path.dirname(tsconfigPath), config.extends);
|
|
108
|
+
const parentConfig = ts.readConfigFile(extendsPath, ts.sys.readFile);
|
|
109
|
+
if (parentConfig.config) {
|
|
110
|
+
this.extractPathAliases(parentConfig.config, extendsPath);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// Ignore errors loading parent config
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Extract import statements from a TypeScript source file
|
|
120
|
+
*/
|
|
121
|
+
extractImportsFromFile(sourceFile, imports) {
|
|
122
|
+
const visit = (node) => {
|
|
123
|
+
// Handle: import { x } from 'package'
|
|
124
|
+
if (ts.isImportDeclaration(node)) {
|
|
125
|
+
const moduleSpecifier = node.moduleSpecifier;
|
|
126
|
+
if (ts.isStringLiteral(moduleSpecifier)) {
|
|
127
|
+
const packageName = this.extractPackageName(moduleSpecifier.text);
|
|
128
|
+
if (packageName) {
|
|
129
|
+
if (!imports.has(packageName)) {
|
|
130
|
+
imports.set(packageName, new Set());
|
|
131
|
+
}
|
|
132
|
+
imports.get(packageName).add(sourceFile.fileName);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Handle: require('package')
|
|
137
|
+
if (ts.isCallExpression(node)) {
|
|
138
|
+
if (node.expression.kind === ts.SyntaxKind.Identifier) {
|
|
139
|
+
const identifier = node.expression;
|
|
140
|
+
if (identifier.text === 'require' && node.arguments.length > 0) {
|
|
141
|
+
const arg = node.arguments[0];
|
|
142
|
+
if (ts.isStringLiteral(arg)) {
|
|
143
|
+
const packageName = this.extractPackageName(arg.text);
|
|
144
|
+
if (packageName) {
|
|
145
|
+
if (!imports.has(packageName)) {
|
|
146
|
+
imports.set(packageName, new Set());
|
|
147
|
+
}
|
|
148
|
+
imports.get(packageName).add(sourceFile.fileName);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
ts.forEachChild(node, visit);
|
|
155
|
+
};
|
|
156
|
+
visit(sourceFile);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Extract the package name from an import path
|
|
160
|
+
*
|
|
161
|
+
* Examples:
|
|
162
|
+
* - 'axios' -> 'axios'
|
|
163
|
+
* - '@prisma/client' -> '@prisma/client'
|
|
164
|
+
* - 'axios/lib/core' -> 'axios'
|
|
165
|
+
* - './local' -> null
|
|
166
|
+
* - '../relative' -> null
|
|
167
|
+
* - '@/components' -> null (path alias)
|
|
168
|
+
*/
|
|
169
|
+
extractPackageName(importPath) {
|
|
170
|
+
// Ignore relative imports
|
|
171
|
+
if (importPath.startsWith('.')) {
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
// Ignore path aliases (e.g., @/*, ~/* from tsconfig.json)
|
|
175
|
+
for (const alias of this.pathAliases) {
|
|
176
|
+
if (importPath === alias || importPath.startsWith(alias + '/')) {
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Ignore Node.js built-ins
|
|
181
|
+
const builtins = [
|
|
182
|
+
'fs', 'path', 'crypto', 'http', 'https', 'os', 'util', 'events',
|
|
183
|
+
'stream', 'buffer', 'child_process', 'url', 'querystring', 'net',
|
|
184
|
+
'zlib', 'assert', 'readline', 'process', 'fs/promises'
|
|
185
|
+
];
|
|
186
|
+
if (builtins.includes(importPath)) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
// Handle scoped packages: @scope/package or @scope/package/subpath
|
|
190
|
+
if (importPath.startsWith('@')) {
|
|
191
|
+
const parts = importPath.split('/');
|
|
192
|
+
if (parts.length >= 2) {
|
|
193
|
+
return `${parts[0]}/${parts[1]}`;
|
|
194
|
+
}
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
// Handle regular packages: package or package/subpath
|
|
198
|
+
const parts = importPath.split('/');
|
|
199
|
+
return parts[0];
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Merge packages from package.json and actual imports
|
|
203
|
+
*/
|
|
204
|
+
mergePackages(packageJsonDeps, importedPackages) {
|
|
205
|
+
const merged = new Map();
|
|
206
|
+
// Add all package.json dependencies
|
|
207
|
+
for (const [name, { version }] of packageJsonDeps) {
|
|
208
|
+
merged.set(name, {
|
|
209
|
+
version,
|
|
210
|
+
source: 'package.json',
|
|
211
|
+
usedIn: [],
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
// Add/update with actual imports
|
|
215
|
+
for (const [name, files] of importedPackages) {
|
|
216
|
+
if (merged.has(name)) {
|
|
217
|
+
const existing = merged.get(name);
|
|
218
|
+
existing.source = 'both';
|
|
219
|
+
existing.usedIn = Array.from(files);
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
// Package is imported but not in package.json (might be transitive)
|
|
223
|
+
merged.set(name, {
|
|
224
|
+
version: 'unknown',
|
|
225
|
+
source: 'import',
|
|
226
|
+
usedIn: Array.from(files),
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return merged;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Check which packages have contracts in the corpus
|
|
234
|
+
*/
|
|
235
|
+
checkContracts(packages) {
|
|
236
|
+
const result = [];
|
|
237
|
+
for (const [name, { version, source, usedIn }] of packages) {
|
|
238
|
+
const contract = this.corpusContracts.get(name);
|
|
239
|
+
result.push({
|
|
240
|
+
name,
|
|
241
|
+
version,
|
|
242
|
+
source,
|
|
243
|
+
hasContract: contract !== undefined,
|
|
244
|
+
contractVersion: contract?.contract_version,
|
|
245
|
+
usedIn,
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
// Sort by: contracts first, then alphabetically
|
|
249
|
+
result.sort((a, b) => {
|
|
250
|
+
if (a.hasContract !== b.hasContract) {
|
|
251
|
+
return a.hasContract ? -1 : 1;
|
|
252
|
+
}
|
|
253
|
+
return a.name.localeCompare(b.name);
|
|
254
|
+
});
|
|
255
|
+
return result;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Generate a coverage report
|
|
259
|
+
*/
|
|
260
|
+
generateCoverageReport(discovery) {
|
|
261
|
+
const lines = [];
|
|
262
|
+
const coveragePercent = discovery.total > 0
|
|
263
|
+
? ((discovery.withContracts / discovery.total) * 100).toFixed(1)
|
|
264
|
+
: '0.0';
|
|
265
|
+
lines.push('');
|
|
266
|
+
lines.push('════════════════════════════════════════════════════════════════');
|
|
267
|
+
lines.push('Package Discovery & Coverage');
|
|
268
|
+
lines.push('════════════════════════════════════════════════════════════════');
|
|
269
|
+
lines.push('');
|
|
270
|
+
lines.push(`Total packages: ${discovery.total}`);
|
|
271
|
+
lines.push(`Packages with contracts: ${discovery.withContracts} (${coveragePercent}%)`);
|
|
272
|
+
lines.push(`Packages without contracts: ${discovery.withoutContracts}`);
|
|
273
|
+
lines.push('');
|
|
274
|
+
if (discovery.withContracts > 0) {
|
|
275
|
+
lines.push('✓ Packages with contracts:');
|
|
276
|
+
for (const pkg of discovery.packages.filter(p => p.hasContract)) {
|
|
277
|
+
lines.push(` ${pkg.name}@${pkg.version} (contract v${pkg.contractVersion})`);
|
|
278
|
+
}
|
|
279
|
+
lines.push('');
|
|
280
|
+
}
|
|
281
|
+
if (discovery.withoutContracts > 0 && discovery.withoutContracts <= 20) {
|
|
282
|
+
lines.push('⚠ Packages without contracts:');
|
|
283
|
+
for (const pkg of discovery.packages.filter(p => !p.hasContract)) {
|
|
284
|
+
lines.push(` ${pkg.name}@${pkg.version}`);
|
|
285
|
+
}
|
|
286
|
+
lines.push('');
|
|
287
|
+
}
|
|
288
|
+
else if (discovery.withoutContracts > 20) {
|
|
289
|
+
lines.push(`⚠ ${discovery.withoutContracts} packages without contracts (showing top 20):`);
|
|
290
|
+
for (const pkg of discovery.packages.filter(p => !p.hasContract).slice(0, 20)) {
|
|
291
|
+
lines.push(` ${pkg.name}@${pkg.version}`);
|
|
292
|
+
}
|
|
293
|
+
lines.push(` ... and ${discovery.withoutContracts - 20} more`);
|
|
294
|
+
lines.push('');
|
|
295
|
+
}
|
|
296
|
+
return lines.join('\n');
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=package-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-discovery.js","sourceRoot":"","sources":["../src/package-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reporter - generates audit records and terminal output
|
|
3
|
+
*/
|
|
4
|
+
import type { AuditRecord, Violation, EnhancedAuditRecord, PackageDiscoveryResult } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Enriches violations with code snippets
|
|
7
|
+
*/
|
|
8
|
+
export declare function enrichViolationsWithSnippets(violations: Violation[]): Promise<Violation[]>;
|
|
9
|
+
/**
|
|
10
|
+
* Generates an audit record from violations
|
|
11
|
+
*/
|
|
12
|
+
export declare function generateAuditRecord(violations: Violation[], config: {
|
|
13
|
+
tsconfigPath: string;
|
|
14
|
+
packagesAnalyzed: string[];
|
|
15
|
+
contractsApplied: number;
|
|
16
|
+
filesAnalyzed: number;
|
|
17
|
+
corpusVersion: string;
|
|
18
|
+
}): Promise<AuditRecord>;
|
|
19
|
+
/**
|
|
20
|
+
* Writes audit record to JSON file
|
|
21
|
+
*/
|
|
22
|
+
export declare function writeAuditRecord(record: AuditRecord, outputPath: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Prints violations to terminal in human-readable format
|
|
25
|
+
*/
|
|
26
|
+
export declare function printTerminalReport(record: AuditRecord): void;
|
|
27
|
+
/**
|
|
28
|
+
* Prints corpus loading errors
|
|
29
|
+
*/
|
|
30
|
+
export declare function printCorpusErrors(errors: string[]): void;
|
|
31
|
+
/**
|
|
32
|
+
* Generates an enhanced audit record with package discovery
|
|
33
|
+
*/
|
|
34
|
+
export declare function generateEnhancedAuditRecord(baseRecord: AuditRecord, packageDiscovery: PackageDiscoveryResult): EnhancedAuditRecord;
|
|
35
|
+
/**
|
|
36
|
+
* Prints package discovery report
|
|
37
|
+
*/
|
|
38
|
+
export declare function printPackageDiscoveryReport(discovery: PackageDiscoveryResult): void;
|
|
39
|
+
/**
|
|
40
|
+
* Prints enhanced terminal report with violations grouped by package
|
|
41
|
+
*/
|
|
42
|
+
export declare function printEnhancedTerminalReport(record: EnhancedAuditRecord): void;
|
|
43
|
+
//# sourceMappingURL=reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAuB,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAM3H;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,SAAS,EAAE,CAAC,CAiBtB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE;IACN,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC,WAAW,CAAC,CAsBtB;AAyCD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAG9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CA0D7D;AA8ED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAMxD;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,WAAW,EACvB,gBAAgB,EAAE,sBAAsB,GACvC,mBAAmB,CAmCrB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI,CAkCnF;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CA2D7E"}
|