@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.
Files changed (80) hide show
  1. package/LICENSE +119 -0
  2. package/README.md +694 -0
  3. package/dist/analyze-results.js +253 -0
  4. package/dist/analyzer.d.ts +366 -0
  5. package/dist/analyzer.d.ts.map +1 -0
  6. package/dist/analyzer.js +2592 -0
  7. package/dist/analyzer.js.map +1 -0
  8. package/dist/analyzers/async-error-analyzer.d.ts +72 -0
  9. package/dist/analyzers/async-error-analyzer.d.ts.map +1 -0
  10. package/dist/analyzers/async-error-analyzer.js +243 -0
  11. package/dist/analyzers/async-error-analyzer.js.map +1 -0
  12. package/dist/analyzers/event-listener-analyzer.d.ts +102 -0
  13. package/dist/analyzers/event-listener-analyzer.d.ts.map +1 -0
  14. package/dist/analyzers/event-listener-analyzer.js +253 -0
  15. package/dist/analyzers/event-listener-analyzer.js.map +1 -0
  16. package/dist/analyzers/react-query-analyzer.d.ts +66 -0
  17. package/dist/analyzers/react-query-analyzer.d.ts.map +1 -0
  18. package/dist/analyzers/react-query-analyzer.js +341 -0
  19. package/dist/analyzers/react-query-analyzer.js.map +1 -0
  20. package/dist/analyzers/return-value-analyzer.d.ts +61 -0
  21. package/dist/analyzers/return-value-analyzer.d.ts.map +1 -0
  22. package/dist/analyzers/return-value-analyzer.js +225 -0
  23. package/dist/analyzers/return-value-analyzer.js.map +1 -0
  24. package/dist/code-snippet.d.ts +48 -0
  25. package/dist/code-snippet.d.ts.map +1 -0
  26. package/dist/code-snippet.js +84 -0
  27. package/dist/code-snippet.js.map +1 -0
  28. package/dist/corpus-loader.d.ts +33 -0
  29. package/dist/corpus-loader.d.ts.map +1 -0
  30. package/dist/corpus-loader.js +155 -0
  31. package/dist/corpus-loader.js.map +1 -0
  32. package/dist/fixture-tester.d.ts +28 -0
  33. package/dist/fixture-tester.d.ts.map +1 -0
  34. package/dist/fixture-tester.js +176 -0
  35. package/dist/fixture-tester.js.map +1 -0
  36. package/dist/index.d.ts +6 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +375 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/package-discovery.d.ts +62 -0
  41. package/dist/package-discovery.d.ts.map +1 -0
  42. package/dist/package-discovery.js +299 -0
  43. package/dist/package-discovery.js.map +1 -0
  44. package/dist/reporter.d.ts +43 -0
  45. package/dist/reporter.d.ts.map +1 -0
  46. package/dist/reporter.js +347 -0
  47. package/dist/reporter.js.map +1 -0
  48. package/dist/reporters/benchmarking.d.ts +70 -0
  49. package/dist/reporters/benchmarking.d.ts.map +1 -0
  50. package/dist/reporters/benchmarking.js +191 -0
  51. package/dist/reporters/benchmarking.js.map +1 -0
  52. package/dist/reporters/d3-visualizer.d.ts +40 -0
  53. package/dist/reporters/d3-visualizer.d.ts.map +1 -0
  54. package/dist/reporters/d3-visualizer.js +803 -0
  55. package/dist/reporters/d3-visualizer.js.map +1 -0
  56. package/dist/reporters/health-score.d.ts +33 -0
  57. package/dist/reporters/health-score.d.ts.map +1 -0
  58. package/dist/reporters/health-score.js +149 -0
  59. package/dist/reporters/health-score.js.map +1 -0
  60. package/dist/reporters/index.d.ts +11 -0
  61. package/dist/reporters/index.d.ts.map +1 -0
  62. package/dist/reporters/index.js +11 -0
  63. package/dist/reporters/index.js.map +1 -0
  64. package/dist/reporters/package-breakdown.d.ts +48 -0
  65. package/dist/reporters/package-breakdown.d.ts.map +1 -0
  66. package/dist/reporters/package-breakdown.js +185 -0
  67. package/dist/reporters/package-breakdown.js.map +1 -0
  68. package/dist/reporters/positive-evidence.d.ts +42 -0
  69. package/dist/reporters/positive-evidence.d.ts.map +1 -0
  70. package/dist/reporters/positive-evidence.js +436 -0
  71. package/dist/reporters/positive-evidence.js.map +1 -0
  72. package/dist/tsconfig-generator.d.ts +17 -0
  73. package/dist/tsconfig-generator.d.ts.map +1 -0
  74. package/dist/tsconfig-generator.js +107 -0
  75. package/dist/tsconfig-generator.js.map +1 -0
  76. package/dist/types.d.ts +298 -0
  77. package/dist/types.d.ts.map +1 -0
  78. package/dist/types.js +5 -0
  79. package/dist/types.js.map +1 -0
  80. package/package.json +59 -0
@@ -0,0 +1,298 @@
1
+ /**
2
+ * Core type definitions for behavioral contract verification
3
+ */
4
+ export type Severity = 'error' | 'warning' | 'info';
5
+ /**
6
+ * A precondition that must be true before calling a function
7
+ */
8
+ export interface Precondition {
9
+ id: string;
10
+ description: string;
11
+ source: string;
12
+ severity: Severity;
13
+ }
14
+ /**
15
+ * A postcondition describing what happens after calling a function
16
+ */
17
+ export interface Postcondition {
18
+ id: string;
19
+ condition: string;
20
+ returns?: string;
21
+ throws?: string;
22
+ required_handling?: string;
23
+ source: string;
24
+ severity: Severity;
25
+ }
26
+ /**
27
+ * An edge case documenting surprising but not incorrect behavior
28
+ */
29
+ export interface EdgeCase {
30
+ id: string;
31
+ description: string;
32
+ source: string;
33
+ severity: 'warning' | 'info';
34
+ }
35
+ /**
36
+ * A function contract specifying behavioral expectations
37
+ */
38
+ export interface FunctionContract {
39
+ name: string;
40
+ import_path: string;
41
+ description: string;
42
+ namespace?: string;
43
+ preconditions?: Precondition[];
44
+ postconditions?: Postcondition[];
45
+ edge_cases?: EdgeCase[];
46
+ }
47
+ /**
48
+ * Required event listener configuration
49
+ */
50
+ export interface RequiredEventListener {
51
+ /** Event name (e.g., "error", "failed") */
52
+ event: string;
53
+ /** Whether this listener is required */
54
+ required: boolean;
55
+ /** Severity if missing (error, warning, info) */
56
+ severity?: 'error' | 'warning' | 'info';
57
+ }
58
+ /**
59
+ * Detection rules for identifying package usage in code
60
+ */
61
+ export interface DetectionRules {
62
+ /** Class names used for instantiation (e.g., ["Octokit", "PrismaClient"]) */
63
+ class_names?: string[];
64
+ /** TypeScript type names used in declarations (e.g., ["Octokit", "AxiosInstance"]) */
65
+ type_names?: string[];
66
+ /** Factory method names (e.g., ["createClient", "create"]) */
67
+ factory_methods?: string[];
68
+ /** Patterns to match in await expressions (e.g., [".repos.", ".pulls."]) */
69
+ await_patterns?: string[];
70
+ /**
71
+ * If true, ONLY detect violations on tracked instances (no pattern fallback)
72
+ * Use this for packages with generic method names (mongoose, Prisma, TypeORM)
73
+ * to eliminate false positives from pattern matching
74
+ */
75
+ require_instance_tracking?: boolean;
76
+ /** Required event listeners for event-emitting classes */
77
+ required_event_listeners?: RequiredEventListener[];
78
+ }
79
+ /**
80
+ * A complete package contract
81
+ */
82
+ export interface PackageContract {
83
+ package: string;
84
+ semver: string;
85
+ contract_version: string;
86
+ maintainer: string;
87
+ last_verified: string;
88
+ /** Quality/validation status (production, draft, in-development, deprecated) */
89
+ status?: 'production' | 'draft' | 'in-development' | 'deprecated';
90
+ deprecated?: boolean;
91
+ deprecated_reason?: string;
92
+ deprecated_date?: string;
93
+ /** Detection rules for analyzer integration */
94
+ detection?: DetectionRules;
95
+ functions: FunctionContract[];
96
+ }
97
+ /**
98
+ * A violation found in user code
99
+ */
100
+ export interface Violation {
101
+ id: string;
102
+ severity: Severity;
103
+ file: string;
104
+ line: number;
105
+ column: number;
106
+ package: string;
107
+ function: string;
108
+ contract_clause: string;
109
+ description: string;
110
+ source_doc: string;
111
+ suggested_fix?: string;
112
+ code_snippet?: {
113
+ startLine: number;
114
+ endLine: number;
115
+ lines: Array<{
116
+ line: number;
117
+ content: string;
118
+ highlighted: boolean;
119
+ }>;
120
+ };
121
+ }
122
+ /**
123
+ * Summary statistics for a verification run
124
+ */
125
+ export interface VerificationSummary {
126
+ total_violations: number;
127
+ error_count: number;
128
+ warning_count: number;
129
+ info_count: number;
130
+ passed: boolean;
131
+ }
132
+ /**
133
+ * Complete audit record produced by a verification run
134
+ */
135
+ export interface AuditRecord {
136
+ tool: string;
137
+ tool_version: string;
138
+ corpus_version: string;
139
+ timestamp: string;
140
+ git_commit?: string;
141
+ git_branch?: string;
142
+ tsconfig: string;
143
+ packages_analyzed: string[];
144
+ contracts_applied: number;
145
+ files_analyzed: number;
146
+ violations: Violation[];
147
+ summary: VerificationSummary;
148
+ }
149
+ /**
150
+ * Location of a function call in the AST
151
+ */
152
+ export interface CallSite {
153
+ file: string;
154
+ line: number;
155
+ column: number;
156
+ functionName: string;
157
+ packageName: string;
158
+ }
159
+ /**
160
+ * Result of analyzing a single call site
161
+ */
162
+ export interface CallSiteAnalysis {
163
+ callSite: CallSite;
164
+ hasTryCatch: boolean;
165
+ hasPromiseCatch: boolean;
166
+ checksResponseExists: boolean;
167
+ checksStatusCode: boolean;
168
+ handledStatusCodes: number[];
169
+ hasRetryLogic: boolean;
170
+ }
171
+ /**
172
+ * Configuration options for the analyzer
173
+ */
174
+ export interface AnalyzerConfig {
175
+ tsconfigPath: string;
176
+ corpusPath: string;
177
+ includePaths?: string[];
178
+ excludePaths?: string[];
179
+ severityThreshold?: Severity;
180
+ /** Whether to include test files in analysis (default: false) */
181
+ includeTests?: boolean;
182
+ }
183
+ /**
184
+ * Result of loading the corpus
185
+ */
186
+ export interface CorpusLoadResult {
187
+ contracts: Map<string, PackageContract>;
188
+ errors: string[];
189
+ skipped?: Array<{
190
+ package: string;
191
+ status: string;
192
+ reason: string;
193
+ }>;
194
+ }
195
+ /**
196
+ * A package discovered in the project
197
+ */
198
+ export interface DiscoveredPackage {
199
+ name: string;
200
+ version: string;
201
+ source: 'package.json' | 'import' | 'both';
202
+ hasContract: boolean;
203
+ contractVersion?: string;
204
+ usedIn: string[];
205
+ }
206
+ /**
207
+ * Result of package discovery scan
208
+ */
209
+ export interface PackageDiscoveryResult {
210
+ total: number;
211
+ withContracts: number;
212
+ withoutContracts: number;
213
+ packages: DiscoveredPackage[];
214
+ }
215
+ /**
216
+ * Enhanced audit record with package discovery
217
+ */
218
+ export interface EnhancedAuditRecord extends AuditRecord {
219
+ package_discovery: PackageDiscoveryResult;
220
+ violations_by_package: Record<string, {
221
+ total: number;
222
+ errors: number;
223
+ warnings: number;
224
+ info: number;
225
+ violations: Violation[];
226
+ }>;
227
+ }
228
+ /**
229
+ * A positive pattern (best practice) detected in code
230
+ */
231
+ export interface PositivePattern {
232
+ id: string;
233
+ name: string;
234
+ description: string;
235
+ file: string;
236
+ line: number;
237
+ column: number;
238
+ category: 'configuration' | 'error-handling' | 'performance' | 'consistency';
239
+ benefit: string;
240
+ code_snippet?: {
241
+ startLine: number;
242
+ endLine: number;
243
+ lines: Array<{
244
+ line: number;
245
+ content: string;
246
+ highlighted: boolean;
247
+ }>;
248
+ };
249
+ }
250
+ /**
251
+ * React Query hook call detection
252
+ */
253
+ export interface HookCall {
254
+ hookName: 'useQuery' | 'useMutation' | 'useInfiniteQuery' | 'QueryClient';
255
+ location: {
256
+ file: string;
257
+ line: number;
258
+ column: number;
259
+ };
260
+ returnValues: Map<string, string>;
261
+ options: {
262
+ onError?: boolean;
263
+ onMutate?: boolean;
264
+ onSuccess?: boolean;
265
+ retry?: 'default' | 'number' | 'boolean' | 'function';
266
+ };
267
+ }
268
+ /**
269
+ * Variable usage tracking for hook return values
270
+ */
271
+ export interface VariableUsage {
272
+ variableName: string;
273
+ propertyName: string;
274
+ declaredAt: {
275
+ file: string;
276
+ line: number;
277
+ };
278
+ usedIn: {
279
+ conditionals: number;
280
+ jsxExpressions: number;
281
+ callbacks: number;
282
+ };
283
+ }
284
+ /**
285
+ * Analysis of error handling in React Query hooks
286
+ */
287
+ export interface HookErrorHandling {
288
+ hasErrorStateCheck: boolean;
289
+ hasOnErrorCallback: boolean;
290
+ hasGlobalHandler: boolean;
291
+ errorCheckedBeforeDataAccess: boolean;
292
+ hasOptimisticUpdateRollback?: boolean;
293
+ retryAnalysis?: {
294
+ type: 'default' | 'number' | 'boolean' | 'function';
295
+ avoidsClientErrors: boolean;
296
+ };
297
+ }
298
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Core type definitions for behavioral contract verification
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@behavioral-contracts/verify-cli",
3
+ "version": "1.0.0",
4
+ "description": "CLI tool for verifying TypeScript code against behavioral contracts",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "verify-cli": "./dist/index.js",
9
+ "behavioral-contracts": "./dist/index.js"
10
+ },
11
+ "files": [
12
+ "dist/**/*",
13
+ "README.md",
14
+ "LICENSE"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "dev": "tsc --watch",
19
+ "test": "vitest",
20
+ "test:ci": "vitest run",
21
+ "test:fixtures": "vitest run fixture-regression",
22
+ "test:fixtures:watch": "vitest fixture-regression",
23
+ "test:fixtures:generate": "node scripts/generate-expected-outputs.js",
24
+ "lint": "eslint src --ext .ts",
25
+ "clean": "rm -rf dist"
26
+ },
27
+ "keywords": [
28
+ "typescript",
29
+ "verification",
30
+ "behavioral-contracts",
31
+ "static-analysis",
32
+ "code-quality"
33
+ ],
34
+ "author": "Behavioral Contracts",
35
+ "license": "AGPL-3.0",
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "https://github.com/behavioral-contracts/verify-cli.git"
39
+ },
40
+ "engines": {
41
+ "node": ">=18.0.0"
42
+ },
43
+ "dependencies": {
44
+ "@behavioral-contracts/corpus": "^1.0.0",
45
+ "ajv": "^8.12.0",
46
+ "chalk": "^5.3.0",
47
+ "commander": "^12.0.0",
48
+ "glob": "^10.3.10",
49
+ "typescript": "^5.3.3",
50
+ "yaml": "^2.3.4"
51
+ },
52
+ "devDependencies": {
53
+ "@types/node": "^20.11.0",
54
+ "@typescript-eslint/eslint-plugin": "^6.19.0",
55
+ "@typescript-eslint/parser": "^6.19.0",
56
+ "eslint": "^8.56.0",
57
+ "vitest": "^1.2.0"
58
+ }
59
+ }