devlens-cli-susmit 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 +21 -0
- package/README.md +184 -0
- package/dist/analyzer.d.ts +23 -0
- package/dist/analyzer.d.ts.map +1 -0
- package/dist/analyzer.js +334 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/cicd.d.ts +10 -0
- package/dist/cicd.d.ts.map +1 -0
- package/dist/cicd.js +105 -0
- package/dist/cicd.js.map +1 -0
- package/dist/cli.d.ts +16 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +203 -0
- package/dist/cli.js.map +1 -0
- package/dist/detector.d.ts +13 -0
- package/dist/detector.d.ts.map +1 -0
- package/dist/detector.js +203 -0
- package/dist/detector.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +116 -0
- package/dist/index.js.map +1 -0
- package/dist/platform.d.ts +29 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +97 -0
- package/dist/platform.js.map +1 -0
- package/dist/registry.d.ts +27 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +141 -0
- package/dist/registry.js.map +1 -0
- package/dist/runner.d.ts +30 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +157 -0
- package/dist/runner.js.map +1 -0
- package/dist/summarizer.d.ts +34 -0
- package/dist/summarizer.d.ts.map +1 -0
- package/dist/summarizer.js +180 -0
- package/dist/summarizer.js.map +1 -0
- package/package.json +60 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 devlens contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# devlens
|
|
2
|
+
|
|
3
|
+
> **Universal project summarizer, error root-cause analyzer & test runner.**
|
|
4
|
+
> Supports every major language, framework, game engine, CI/CD tool, database, API stack, AI/ML project, DSA practice, mobile app, desktop app ā and runs on **macOS**, **Windows**, and **Linux**.
|
|
5
|
+
|
|
6
|
+
[](https://www.npmjs.com/package/devlens)
|
|
7
|
+
[](./LICENSE)
|
|
8
|
+
[](https://nodejs.org)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## ⨠Features
|
|
13
|
+
|
|
14
|
+
| Capability | Details |
|
|
15
|
+
|---|---|
|
|
16
|
+
| **Project Detection** | Auto-detects 100+ languages, frameworks, game engines, AI/ML libs, databases, CI/CD tools, APIs |
|
|
17
|
+
| **Summarizer** | Produces a human-readable markdown summary with stats, commands, README excerpt |
|
|
18
|
+
| **Error Root-Cause Analyzer** | Parses build/test/run output and pinpoints errors with explanations & fix suggestions |
|
|
19
|
+
| **Smart Test Runner** | Picks the right test command; auto-scaffolds **GoogleTest** for C/C++ projects with no framework |
|
|
20
|
+
| **CI/CD Advisor** | Lints GitHub Actions, Dockerfiles, Docker Compose files for common issues |
|
|
21
|
+
| **Cross-Platform** | Works identically on macOS, Windows, Linux (Node ā„ 18) |
|
|
22
|
+
| **Programmatic API** | Full TypeScript API ā integrate into your own tools |
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## š¦ Install
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Global (CLI)
|
|
30
|
+
npm install -g devlens
|
|
31
|
+
|
|
32
|
+
# Local (programmatic)
|
|
33
|
+
npm install devlens
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## š CLI Usage
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Summarize current directory
|
|
42
|
+
devlens
|
|
43
|
+
|
|
44
|
+
# Summarize a specific project
|
|
45
|
+
devlens ./my-project
|
|
46
|
+
|
|
47
|
+
# Run tests and analyze output
|
|
48
|
+
devlens ./my-project --action test
|
|
49
|
+
|
|
50
|
+
# Build and analyze errors
|
|
51
|
+
devlens ./my-project --action build
|
|
52
|
+
|
|
53
|
+
# Run the project and analyze
|
|
54
|
+
devlens ./my-project --action run
|
|
55
|
+
|
|
56
|
+
# Lint CI/CD configuration
|
|
57
|
+
devlens ./my-project --action cicd
|
|
58
|
+
|
|
59
|
+
# Analyze raw output from a file
|
|
60
|
+
devlens --action analyze --input build-output.txt
|
|
61
|
+
|
|
62
|
+
# Analyze piped output
|
|
63
|
+
cat build.log | devlens --action analyze
|
|
64
|
+
|
|
65
|
+
# Output JSON
|
|
66
|
+
devlens ./my-project --json
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Options
|
|
70
|
+
|
|
71
|
+
| Flag | Description |
|
|
72
|
+
|---|---|
|
|
73
|
+
| `[project-root]` | Path to project (default: current directory) |
|
|
74
|
+
| `-a, --action <action>` | `summarize` \| `test` \| `build` \| `run` \| `cicd` \| `analyze` |
|
|
75
|
+
| `-i, --input <file>` | Raw output file to analyze |
|
|
76
|
+
| `--json` | Output as JSON |
|
|
77
|
+
| `--no-color` | Disable colors |
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## š Programmatic API
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
import { devlens, detect, summarize, analyze, resolveTestStrategy } from "devlens";
|
|
85
|
+
|
|
86
|
+
// Full report
|
|
87
|
+
const report = await devlens({
|
|
88
|
+
projectRoot: "./my-project",
|
|
89
|
+
action: "test",
|
|
90
|
+
onData: chunk => process.stdout.write(chunk),
|
|
91
|
+
});
|
|
92
|
+
console.log(report.formattedOutput);
|
|
93
|
+
|
|
94
|
+
// Just detect technologies
|
|
95
|
+
const detection = detect("./my-project");
|
|
96
|
+
console.log(detection.detected);
|
|
97
|
+
|
|
98
|
+
// Analyze raw output
|
|
99
|
+
const result = analyze(myBuildOutput);
|
|
100
|
+
console.log(result.errors[0].rootCause);
|
|
101
|
+
console.log(result.errors[0].suggestion);
|
|
102
|
+
|
|
103
|
+
// Summarize
|
|
104
|
+
const summary = summarize(detection);
|
|
105
|
+
console.log(summary.markdown);
|
|
106
|
+
|
|
107
|
+
// Resolve test command (auto-scaffolds GoogleTest for C/C++)
|
|
108
|
+
const strategy = resolveTestStrategy(detection);
|
|
109
|
+
console.log(strategy.command); // e.g. "cmake -S . -B build && ctest"
|
|
110
|
+
console.log(strategy.framework); // e.g. "GoogleTest (scaffolded)"
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## š Supported Technologies
|
|
116
|
+
|
|
117
|
+
### Languages
|
|
118
|
+
TypeScript Ā· JavaScript Ā· Python Ā· Rust Ā· Go Ā· Java Ā· Kotlin Ā· C Ā· C++ Ā· C# Ā· Ruby Ā· PHP Ā· Swift Ā· Dart Ā· Lua Ā· Zig Ā· Elixir Ā· Haskell Ā· Scala Ā· R Ā· Julia Ā· COBOL Ā· Fortran Ā· Assembly Ā· Bash/Shell Ā· PowerShell
|
|
119
|
+
|
|
120
|
+
### Web Frameworks
|
|
121
|
+
React Ā· Next.js Ā· Vue Ā· Nuxt Ā· Angular Ā· Svelte Ā· SolidJS Ā· Astro Ā· Django Ā· Flask Ā· FastAPI Ā· Express Ā· NestJS Ā· Laravel Ā· Spring Boot Ā· Ruby on Rails Ā· Gin Ā· Fiber Ā· Actix Ā· ASP.NET Core
|
|
122
|
+
|
|
123
|
+
### Mobile / App
|
|
124
|
+
Flutter Ā· React Native Ā· Expo Ā· Tauri Ā· Electron Ā· Android (Gradle) Ā· iOS (Xcode)
|
|
125
|
+
|
|
126
|
+
### Game Engines
|
|
127
|
+
Unity Ā· Unreal Engine Ā· Godot Ā· Bevy Ā· Pygame Ā· LĆVE2D Ā· Phaser Ā· MonoGame Ā· LibGDX Ā· raylib
|
|
128
|
+
|
|
129
|
+
### AI / ML
|
|
130
|
+
PyTorch Ā· TensorFlow Ā· JAX Ā· Hugging Face Transformers Ā· LangChain Ā· scikit-learn Ā· Keras Ā· ONNX Ā· LlamaIndex
|
|
131
|
+
|
|
132
|
+
### Databases
|
|
133
|
+
PostgreSQL Ā· MySQL Ā· MongoDB Ā· Redis Ā· SQLite Ā· Prisma Ā· Drizzle Ā· Sequelize Ā· TypeORM Ā· SQLAlchemy Ā· Supabase Ā· Firebase Ā· Cassandra Ā· Elasticsearch
|
|
134
|
+
|
|
135
|
+
### CI/CD
|
|
136
|
+
GitHub Actions Ā· GitLab CI Ā· CircleCI Ā· Jenkins Ā· Travis CI Ā· Bitbucket Pipelines Ā· Azure Pipelines Ā· Drone CI Ā· Tekton Ā· ArgoCD Ā· Docker Ā· Kubernetes
|
|
137
|
+
|
|
138
|
+
### APIs
|
|
139
|
+
GraphQL Ā· tRPC Ā· gRPC Ā· REST (OpenAPI) Ā· WebSocket Ā· Kafka Ā· RabbitMQ
|
|
140
|
+
|
|
141
|
+
### Testing
|
|
142
|
+
Jest Ā· Vitest Ā· Pytest Ā· JUnit Ā· RSpec Ā· PHPUnit Ā· go test Ā· cargo test Ā· **GoogleTest** (auto-scaffolded) Ā· Catch2 Ā· Mocha Ā· Cypress Ā· Playwright Ā· Bats Ā· NUnit Ā· xUnit
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## š§© GoogleTest Auto-Scaffolding
|
|
147
|
+
|
|
148
|
+
When devlens detects a **C or C++** project with no test framework, it automatically:
|
|
149
|
+
|
|
150
|
+
1. Creates a `CMakeLists.txt` that fetches GoogleTest via `FetchContent`
|
|
151
|
+
2. Creates a `devlens_test_wrapper.h` convenience header
|
|
152
|
+
3. Returns the complete cmake + ctest command
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
devlens ./my-cpp-project --action test
|
|
156
|
+
# ā” Scaffolded GoogleTest (scaffolded)
|
|
157
|
+
# cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug && cmake --build build && cd build && ctest --output-on-failure
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## š Error Root-Cause Analysis
|
|
163
|
+
|
|
164
|
+
devlens understands error output from all major toolchains:
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
š“ [TypeScript type error] TS2345: Argument of type 'string' is not assignable to 'number'
|
|
168
|
+
š File: src/utils.ts:42:5
|
|
169
|
+
š Root Cause: TypeScript compiler error TS2345: Argument type mismatch.
|
|
170
|
+
š” Suggestion: Verify the function signature.
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## š Requirements
|
|
176
|
+
|
|
177
|
+
- Node.js ā„ 18
|
|
178
|
+
- The toolchain for the language you want to build/test (e.g. `cargo` for Rust, `python` for Python)
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## š License
|
|
183
|
+
|
|
184
|
+
MIT
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* analyzer.ts ā parses raw build/test/run output and extracts root-cause errors.
|
|
3
|
+
*/
|
|
4
|
+
export interface ErrorMatch {
|
|
5
|
+
type: string;
|
|
6
|
+
message: string;
|
|
7
|
+
file?: string;
|
|
8
|
+
line?: number;
|
|
9
|
+
column?: number;
|
|
10
|
+
rootCause: string;
|
|
11
|
+
suggestion: string;
|
|
12
|
+
severity: "error" | "warning" | "fatal";
|
|
13
|
+
}
|
|
14
|
+
export interface AnalysisResult {
|
|
15
|
+
errors: ErrorMatch[];
|
|
16
|
+
warnings: ErrorMatch[];
|
|
17
|
+
summary: string;
|
|
18
|
+
exitCode: number | null;
|
|
19
|
+
hasFailed: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function analyze(output: string, exitCode?: number | null): AnalysisResult;
|
|
22
|
+
export declare function formatAnalysis(result: AnalysisResult): string;
|
|
23
|
+
//# sourceMappingURL=analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;CACpB;AA2RD,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,GAAG,IAAW,GAAG,cAAc,CA+CtF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAsB7D"}
|
package/dist/analyzer.js
ADDED
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* analyzer.ts ā parses raw build/test/run output and extracts root-cause errors.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.analyze = analyze;
|
|
7
|
+
exports.formatAnalysis = formatAnalysis;
|
|
8
|
+
const PATTERNS = [
|
|
9
|
+
// āā TypeScript / JavaScript āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
10
|
+
{
|
|
11
|
+
name: "TypeScript type error",
|
|
12
|
+
regex: /^(.*\.tsx?)\((\d+),(\d+)\): error (TS\d+): (.+)$/m,
|
|
13
|
+
severity: "error",
|
|
14
|
+
file: m => m[1], line: m => +m[2], column: m => +m[3],
|
|
15
|
+
rootCause: m => `TypeScript compiler error ${m[4]}: ${m[5]}`,
|
|
16
|
+
suggestion: m => suggestTS(m[4], m[5]),
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: "Node.js unhandled exception",
|
|
20
|
+
regex: /UnhandledPromiseRejectionWarning: (.+)/,
|
|
21
|
+
severity: "fatal",
|
|
22
|
+
rootCause: m => `Unhandled promise rejection: ${m[1]}`,
|
|
23
|
+
suggestion: () => "Wrap the async call in try/catch or add .catch() handler.",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: "Node.js module not found",
|
|
27
|
+
regex: /Cannot find module '(.+)'/,
|
|
28
|
+
severity: "error",
|
|
29
|
+
rootCause: m => `Module '${m[1]}' not found`,
|
|
30
|
+
suggestion: m => `Run \`npm install ${m[1]}\` or check the import path.`,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "ESLint error",
|
|
34
|
+
regex: /^\s+(\d+):(\d+)\s+error\s+(.+?)\s{2,}(.+)$/m,
|
|
35
|
+
severity: "error",
|
|
36
|
+
line: m => +m[1], column: m => +m[2],
|
|
37
|
+
rootCause: m => `ESLint rule violation: ${m[4]} ā ${m[3]}`,
|
|
38
|
+
suggestion: m => `Fix the code at line ${m[1]}:${m[2]} or disable the rule with an eslint-disable comment.`,
|
|
39
|
+
},
|
|
40
|
+
// āā Python āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
41
|
+
{
|
|
42
|
+
name: "Python SyntaxError",
|
|
43
|
+
regex: /File "(.+?)", line (\d+)[\s\S]*?SyntaxError: (.+)/,
|
|
44
|
+
severity: "error",
|
|
45
|
+
file: m => m[1], line: m => +m[2],
|
|
46
|
+
rootCause: m => `Python SyntaxError at line ${m[2]}: ${m[3]}`,
|
|
47
|
+
suggestion: () => "Check for missing colons, unmatched brackets, or incorrect indentation.",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: "Python ImportError",
|
|
51
|
+
regex: /ModuleNotFoundError: No module named '(.+?)'/,
|
|
52
|
+
severity: "error",
|
|
53
|
+
rootCause: m => `Python module '${m[1]}' not installed`,
|
|
54
|
+
suggestion: m => `Run \`pip install ${m[1]}\` or add it to requirements.txt.`,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "Python TypeError",
|
|
58
|
+
regex: /TypeError: (.+)/,
|
|
59
|
+
severity: "error",
|
|
60
|
+
rootCause: m => `Python TypeError: ${m[1]}`,
|
|
61
|
+
suggestion: () => "Check argument types passed to the function.",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: "Python AttributeError",
|
|
65
|
+
regex: /AttributeError: (.+)/,
|
|
66
|
+
severity: "error",
|
|
67
|
+
rootCause: m => `AttributeError: ${m[1]}`,
|
|
68
|
+
suggestion: () => "Check that the object has the attribute/method you are accessing.",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: "Pytest FAILED",
|
|
72
|
+
regex: /FAILED (.+?) - (.+)/,
|
|
73
|
+
severity: "error",
|
|
74
|
+
file: m => m[1],
|
|
75
|
+
rootCause: m => `Test failed: ${m[1]} ā ${m[2]}`,
|
|
76
|
+
suggestion: () => "Read the assertion error details above and fix the logic under test.",
|
|
77
|
+
},
|
|
78
|
+
// āā Rust āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
79
|
+
{
|
|
80
|
+
name: "Rust compile error",
|
|
81
|
+
regex: /error(\[E\d+\])?: (.+)\n\s+--> (.+?):(\d+):(\d+)/,
|
|
82
|
+
severity: "error",
|
|
83
|
+
file: m => m[3], line: m => +m[4], column: m => +m[5],
|
|
84
|
+
rootCause: m => `Rust compiler error${m[1] ? " " + m[1] : ""}: ${m[2]}`,
|
|
85
|
+
suggestion: m => m[1] ? `Run \`rustc --explain ${m[1].slice(1, -1)}\` for details.` : "Check the borrow checker rules or type mismatch.",
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: "Rust panic",
|
|
89
|
+
regex: /thread '.+?' panicked at '(.+?)', (.+?):(\d+)/,
|
|
90
|
+
severity: "fatal",
|
|
91
|
+
file: m => m[2], line: m => +m[3],
|
|
92
|
+
rootCause: m => `Rust runtime panic: ${m[1]}`,
|
|
93
|
+
suggestion: () => "Add proper error handling with Result/Option instead of unwrap/expect.",
|
|
94
|
+
},
|
|
95
|
+
// āā Go āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
96
|
+
{
|
|
97
|
+
name: "Go build error",
|
|
98
|
+
regex: /^(.+\.go):(\d+):(\d+): (.+)$/m,
|
|
99
|
+
severity: "error",
|
|
100
|
+
file: m => m[1], line: m => +m[2], column: m => +m[3],
|
|
101
|
+
rootCause: m => `Go build error at ${m[1]}:${m[2]}: ${m[4]}`,
|
|
102
|
+
suggestion: m => suggestGo(m[4]),
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: "Go test failure",
|
|
106
|
+
regex: /--- FAIL: (.+?) \((.+?)\)/,
|
|
107
|
+
severity: "error",
|
|
108
|
+
rootCause: m => `Go test '${m[1]}' failed after ${m[2]}`,
|
|
109
|
+
suggestion: () => "Check the test log above for assertion details.",
|
|
110
|
+
},
|
|
111
|
+
// āā Java / Kotlin / JVM āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
112
|
+
{
|
|
113
|
+
name: "Java compilation error",
|
|
114
|
+
regex: /^(.+\.java):(\d+): error: (.+)$/m,
|
|
115
|
+
severity: "error",
|
|
116
|
+
file: m => m[1], line: m => +m[2],
|
|
117
|
+
rootCause: m => `Java compilation error at line ${m[2]}: ${m[3]}`,
|
|
118
|
+
suggestion: () => "Check imports, types, and method signatures.",
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: "NullPointerException",
|
|
122
|
+
regex: /java\.lang\.NullPointerException(: (.+))?/,
|
|
123
|
+
severity: "fatal",
|
|
124
|
+
rootCause: m => `NullPointerException: ${m[2] || "object reference is null"}`,
|
|
125
|
+
suggestion: () => "Add null checks or use Optional before dereferencing.",
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: "JUnit test failure",
|
|
129
|
+
regex: /Tests run: \d+, Failures: (\d+), Errors: (\d+)/,
|
|
130
|
+
severity: "error",
|
|
131
|
+
rootCause: m => `${m[1]} test failure(s) and ${m[2]} error(s) in test suite`,
|
|
132
|
+
suggestion: () => "Review the FAILURE details above and fix the affected test logic.",
|
|
133
|
+
},
|
|
134
|
+
// āā C / C++ āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
135
|
+
{
|
|
136
|
+
name: "GCC/Clang error",
|
|
137
|
+
regex: /^(.+?):(\d+):(\d+): error: (.+)$/m,
|
|
138
|
+
severity: "error",
|
|
139
|
+
file: m => m[1], line: m => +m[2], column: m => +m[3],
|
|
140
|
+
rootCause: m => `C/C++ compiler error at ${m[1]}:${m[2]}:${m[3]}: ${m[4]}`,
|
|
141
|
+
suggestion: m => suggestCCpp(m[4]),
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
name: "Linker error",
|
|
145
|
+
regex: /undefined reference to `(.+?)'/,
|
|
146
|
+
severity: "error",
|
|
147
|
+
rootCause: m => `Linker: undefined reference to '${m[1]}'`,
|
|
148
|
+
suggestion: m => `Ensure '${m[1]}' is defined and linked. Check CMakeLists.txt target_link_libraries.`,
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: "Segmentation fault",
|
|
152
|
+
regex: /Segmentation fault|SIGSEGV/,
|
|
153
|
+
severity: "fatal",
|
|
154
|
+
rootCause: () => "Segmentation fault ā invalid memory access",
|
|
155
|
+
suggestion: () => "Run with AddressSanitizer (ASAN) or valgrind to pinpoint the bad pointer.",
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: "GoogleTest failure",
|
|
159
|
+
regex: /\[ {2}FAILED {2}\] (.+?) \(\d+ ms\)/,
|
|
160
|
+
severity: "error",
|
|
161
|
+
rootCause: m => `GoogleTest: test '${m[1]}' failed`,
|
|
162
|
+
suggestion: () => "Check the EXPECT_*/ASSERT_* output above for the actual vs expected values.",
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
name: "CMake error",
|
|
166
|
+
regex: /CMake Error(?: at (.+?):(\d+))?: (.+)/,
|
|
167
|
+
severity: "error",
|
|
168
|
+
file: m => m[1], line: m => m[2] ? +m[2] : undefined,
|
|
169
|
+
rootCause: m => `CMake configuration error: ${m[3]}`,
|
|
170
|
+
suggestion: () => "Check CMakeLists.txt for missing find_package, wrong paths, or missing targets.",
|
|
171
|
+
},
|
|
172
|
+
// āā C# / .NET āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
173
|
+
{
|
|
174
|
+
name: "C# build error",
|
|
175
|
+
regex: /error (CS\d+): (.+)/,
|
|
176
|
+
severity: "error",
|
|
177
|
+
rootCause: m => `C# compiler error ${m[1]}: ${m[2]}`,
|
|
178
|
+
suggestion: m => `Search 'C# ${m[1]}' for documentation on this error code.`,
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
name: ".NET exception",
|
|
182
|
+
regex: /Unhandled exception\. (.+?Exception): (.+)/,
|
|
183
|
+
severity: "fatal",
|
|
184
|
+
rootCause: m => `${m[1]}: ${m[2]}`,
|
|
185
|
+
suggestion: () => "Wrap the code in try/catch and inspect the full stack trace.",
|
|
186
|
+
},
|
|
187
|
+
// āā Ruby āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
188
|
+
{
|
|
189
|
+
name: "Ruby error",
|
|
190
|
+
regex: /(.+\.rb):(\d+):in `.+?': (.+) \((.+Error)\)/,
|
|
191
|
+
severity: "error",
|
|
192
|
+
file: m => m[1], line: m => +m[2],
|
|
193
|
+
rootCause: m => `Ruby ${m[4]} at ${m[1]}:${m[2]}: ${m[3]}`,
|
|
194
|
+
suggestion: () => "Check the error type and backtrace to find the root cause.",
|
|
195
|
+
},
|
|
196
|
+
// āā PHP āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
197
|
+
{
|
|
198
|
+
name: "PHP Fatal error",
|
|
199
|
+
regex: /PHP Fatal error:\s+(.+?) in (.+?) on line (\d+)/,
|
|
200
|
+
severity: "fatal",
|
|
201
|
+
file: m => m[2], line: m => +m[3],
|
|
202
|
+
rootCause: m => `PHP Fatal error: ${m[1]} in ${m[2]}:${m[3]}`,
|
|
203
|
+
suggestion: () => "Fix the fatal error shown ā common causes: undefined function, class not found, syntax.",
|
|
204
|
+
},
|
|
205
|
+
// āā Docker / CI āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
206
|
+
{
|
|
207
|
+
name: "Docker build error",
|
|
208
|
+
regex: /ERROR \[stage-.+?\] RUN (.+)/,
|
|
209
|
+
severity: "error",
|
|
210
|
+
rootCause: m => `Docker build failed at RUN command: ${m[1]}`,
|
|
211
|
+
suggestion: () => "Check the command exit code and ensure all dependencies are available in the build stage.",
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: "GitHub Actions error",
|
|
215
|
+
regex: /##\[error\](.+)/,
|
|
216
|
+
severity: "error",
|
|
217
|
+
rootCause: m => `GitHub Actions error: ${m[1]}`,
|
|
218
|
+
suggestion: () => "Check the workflow YAML for syntax errors and inspect the step logs.",
|
|
219
|
+
},
|
|
220
|
+
// āā Database āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
221
|
+
{
|
|
222
|
+
name: "SQL error",
|
|
223
|
+
regex: /ERROR:\s+(.+?)\n|SqlException: (.+?)\n|OperationalError: (.+)/,
|
|
224
|
+
severity: "error",
|
|
225
|
+
rootCause: m => `Database SQL error: ${m[1] || m[2] || m[3]}`,
|
|
226
|
+
suggestion: () => "Check the SQL syntax, column/table names, and connection settings.",
|
|
227
|
+
},
|
|
228
|
+
// āā Generic fallback āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
229
|
+
{
|
|
230
|
+
name: "Generic error",
|
|
231
|
+
regex: /\b(Error|Exception|FAILED|fatal error|Traceback)\b.{0,120}/i,
|
|
232
|
+
severity: "error",
|
|
233
|
+
rootCause: m => m[0].trim(),
|
|
234
|
+
suggestion: () => "See the full output above for context. Search the error message for solutions.",
|
|
235
|
+
},
|
|
236
|
+
];
|
|
237
|
+
// āā Language-specific suggestion helpers āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
238
|
+
function suggestTS(code, msg) {
|
|
239
|
+
if (code === "TS2304")
|
|
240
|
+
return `'${msg.match(/'(.+?)'/)?.[1] ?? "symbol"}' is not defined. Check imports or type declarations.`;
|
|
241
|
+
if (code === "TS2322")
|
|
242
|
+
return "Type mismatch. Check the expected vs actual types and cast if needed.";
|
|
243
|
+
if (code === "TS2339")
|
|
244
|
+
return "Property does not exist on the type. Check spelling or add it to the interface.";
|
|
245
|
+
if (code === "TS2345")
|
|
246
|
+
return "Argument type mismatch. Verify the function signature.";
|
|
247
|
+
if (code === "TS7006")
|
|
248
|
+
return "Parameter implicitly has 'any' type. Add an explicit type annotation.";
|
|
249
|
+
return `Look up TypeScript error code ${code} in the official docs.`;
|
|
250
|
+
}
|
|
251
|
+
function suggestGo(msg) {
|
|
252
|
+
if (msg.includes("undefined"))
|
|
253
|
+
return "Symbol is undefined ā check for missing import or typo.";
|
|
254
|
+
if (msg.includes("cannot use"))
|
|
255
|
+
return "Type mismatch ā check the variable types.";
|
|
256
|
+
if (msg.includes("declared but not used"))
|
|
257
|
+
return "Remove the unused variable or use blank identifier `_`.";
|
|
258
|
+
return "Review the Go compiler message and check the affected line.";
|
|
259
|
+
}
|
|
260
|
+
function suggestCCpp(msg) {
|
|
261
|
+
if (msg.includes("undeclared identifier"))
|
|
262
|
+
return "Variable/function not declared. Check includes and scope.";
|
|
263
|
+
if (msg.includes("no member named"))
|
|
264
|
+
return "Check the struct/class member name ā possible typo.";
|
|
265
|
+
if (msg.includes("expected"))
|
|
266
|
+
return "Syntax error ā check for missing semicolons, brackets, or keywords.";
|
|
267
|
+
return "Review the compiler message and check the affected line.";
|
|
268
|
+
}
|
|
269
|
+
// āā Core analysis function āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
270
|
+
function analyze(output, exitCode = null) {
|
|
271
|
+
const errors = [];
|
|
272
|
+
const warnings = [];
|
|
273
|
+
const seen = new Set();
|
|
274
|
+
for (const pattern of PATTERNS) {
|
|
275
|
+
const matches = [...output.matchAll(new RegExp(pattern.regex.source, pattern.regex.flags + (pattern.regex.flags.includes("g") ? "" : "g")))];
|
|
276
|
+
for (const match of matches) {
|
|
277
|
+
const key = `${pattern.name}::${match[0].slice(0, 80)}`;
|
|
278
|
+
if (seen.has(key))
|
|
279
|
+
continue;
|
|
280
|
+
seen.add(key);
|
|
281
|
+
const entry = {
|
|
282
|
+
type: pattern.name,
|
|
283
|
+
message: match[0].trim().slice(0, 200),
|
|
284
|
+
file: pattern.file?.(match),
|
|
285
|
+
line: pattern.line?.(match),
|
|
286
|
+
column: pattern.column?.(match),
|
|
287
|
+
rootCause: pattern.rootCause(match),
|
|
288
|
+
suggestion: pattern.suggestion(match),
|
|
289
|
+
severity: pattern.severity,
|
|
290
|
+
};
|
|
291
|
+
if (entry.severity === "warning") {
|
|
292
|
+
warnings.push(entry);
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
// deduplicate generic errors if a specific one already covers it
|
|
296
|
+
errors.push(entry);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// Remove generic fallback matches that overlap with specific ones
|
|
301
|
+
const specificErrors = errors.filter(e => e.type !== "Generic error");
|
|
302
|
+
const genericErrors = errors.filter(e => e.type === "Generic error").filter(g => {
|
|
303
|
+
return !specificErrors.some(s => g.message.includes(s.message.slice(0, 40)));
|
|
304
|
+
});
|
|
305
|
+
const finalErrors = [...specificErrors, ...genericErrors].slice(0, 50);
|
|
306
|
+
const hasFailed = finalErrors.some(e => e.severity === "fatal" || e.severity === "error")
|
|
307
|
+
|| (exitCode !== null && exitCode !== 0);
|
|
308
|
+
const summary = hasFailed
|
|
309
|
+
? `ā ${finalErrors.length} error(s) found.${finalErrors.length > 0 ? ` Root cause: ${finalErrors[0].rootCause}` : ""}`
|
|
310
|
+
: `ā
No errors detected.`;
|
|
311
|
+
return { errors: finalErrors, warnings, summary, exitCode, hasFailed };
|
|
312
|
+
}
|
|
313
|
+
function formatAnalysis(result) {
|
|
314
|
+
const lines = [];
|
|
315
|
+
lines.push(`\n${"ā".repeat(60)}`);
|
|
316
|
+
lines.push(result.summary);
|
|
317
|
+
lines.push("ā".repeat(60));
|
|
318
|
+
for (const err of result.errors) {
|
|
319
|
+
lines.push(`\nš“ [${err.type}] ${err.message}`);
|
|
320
|
+
if (err.file)
|
|
321
|
+
lines.push(` š File: ${err.file}${err.line ? `:${err.line}` : ""}${err.column ? `:${err.column}` : ""}`);
|
|
322
|
+
lines.push(` š Root Cause: ${err.rootCause}`);
|
|
323
|
+
lines.push(` š” Suggestion: ${err.suggestion}`);
|
|
324
|
+
}
|
|
325
|
+
for (const warn of result.warnings) {
|
|
326
|
+
lines.push(`\nš” [${warn.type}] ${warn.message}`);
|
|
327
|
+
lines.push(` š” Suggestion: ${warn.suggestion}`);
|
|
328
|
+
}
|
|
329
|
+
if (result.errors.length === 0 && result.warnings.length === 0) {
|
|
330
|
+
lines.push("\nAll checks passed.");
|
|
331
|
+
}
|
|
332
|
+
return lines.join("\n");
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":";AAAA;;GAEG;;AA8SH,0BA+CC;AAED,wCAsBC;AAnVD,MAAM,QAAQ,GAAmB;IAC/B,8EAA8E;IAC9E;QACE,IAAI,EAAE,uBAAuB;QAC7B,KAAK,EAAE,mDAAmD;QAC1D,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAC5D,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KACvC;IACD;QACE,IAAI,EAAE,6BAA6B;QACnC,KAAK,EAAE,wCAAwC;QAC/C,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,EAAE;QACtD,UAAU,EAAE,GAAG,EAAE,CAAC,2DAA2D;KAC9E;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,KAAK,EAAE,2BAA2B;QAClC,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa;QAC5C,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,8BAA8B;KACzE;IACD;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,6CAA6C;QACpD,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QAC1D,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,sDAAsD;KAC5G;IAED,8EAA8E;IAC9E;QACE,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,mDAAmD;QAC1D,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7D,UAAU,EAAE,GAAG,EAAE,CAAC,yEAAyE;KAC5F;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,8CAA8C;QACrD,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,iBAAiB;QACvD,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,mCAAmC;KAC9E;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,iBAAiB;QACxB,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE;QAC3C,UAAU,EAAE,GAAG,EAAE,CAAC,8CAA8C;KACjE;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,KAAK,EAAE,sBAAsB;QAC7B,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE;QACzC,UAAU,EAAE,GAAG,EAAE,CAAC,mEAAmE;KACtF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,qBAAqB;QAC5B,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QAChD,UAAU,EAAE,GAAG,EAAE,CAAC,sEAAsE;KACzF;IAED,8EAA8E;IAC9E;QACE,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,kDAAkD;QACzD,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QACvE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kDAAkD;KACxI;IACD;QACE,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,+CAA+C;QACtD,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7C,UAAU,EAAE,GAAG,EAAE,CAAC,wEAAwE;KAC3F;IAED,8EAA8E;IAC9E;QACE,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,+BAA+B;QACtC,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAC5D,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACjC;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,2BAA2B;QAClC,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE;QACxD,UAAU,EAAE,GAAG,EAAE,CAAC,iDAAiD;KACpE;IAED,8EAA8E;IAC9E;QACE,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,kCAAkC;QACzC,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QACjE,UAAU,EAAE,GAAG,EAAE,CAAC,8CAA8C;KACjE;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,2CAA2C;QAClD,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,IAAI,0BAA0B,EAAE;QAC7E,UAAU,EAAE,GAAG,EAAE,CAAC,uDAAuD;KAC1E;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,gDAAgD;QACvD,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,yBAAyB;QAC5E,UAAU,EAAE,GAAG,EAAE,CAAC,mEAAmE;KACtF;IAED,8EAA8E;IAC9E;QACE,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,mCAAmC;QAC1C,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAC1E,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACnC;IACD;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,gCAAgC;QACvC,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,mCAAmC,CAAC,CAAC,CAAC,CAAC,GAAG;QAC1D,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,sEAAsE;KACvG;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,4BAA4B;QACnC,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,GAAG,EAAE,CAAC,4CAA4C;QAC7D,UAAU,EAAE,GAAG,EAAE,CAAC,2EAA2E;KAC9F;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,qCAAqC;QAC5C,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,UAAU;QACnD,UAAU,EAAE,GAAG,EAAE,CAAC,6EAA6E;KAChG;IACD;QACE,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,uCAAuC;QAC9C,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QACpD,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,EAAE;QACpD,UAAU,EAAE,GAAG,EAAE,CAAC,iFAAiF;KACpG;IAED,8EAA8E;IAC9E;QACE,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,qBAAqB;QAC5B,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QACpD,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,yCAAyC;KAC7E;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,4CAA4C;QACnD,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAClC,UAAU,EAAE,GAAG,EAAE,CAAC,8DAA8D;KACjF;IAED,8EAA8E;IAC9E;QACE,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,6CAA6C;QACpD,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAC1D,UAAU,EAAE,GAAG,EAAE,CAAC,4DAA4D;KAC/E;IAED,8EAA8E;IAC9E;QACE,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,iDAAiD;QACxD,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7D,UAAU,EAAE,GAAG,EAAE,CAAC,yFAAyF;KAC5G;IAED,8EAA8E;IAC9E;QACE,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,8BAA8B;QACrC,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,uCAAuC,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7D,UAAU,EAAE,GAAG,EAAE,CAAC,2FAA2F;KAC9G;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,iBAAiB;QACxB,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE;QAC/C,UAAU,EAAE,GAAG,EAAE,CAAC,sEAAsE;KACzF;IAED,8EAA8E;IAC9E;QACE,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,+DAA+D;QACtE,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7D,UAAU,EAAE,GAAG,EAAE,CAAC,oEAAoE;KACvF;IAED,8EAA8E;IAC9E;QACE,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,6DAA6D;QACpE,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QAC3B,UAAU,EAAE,GAAG,EAAE,CAAC,gFAAgF;KACnG;CACF,CAAC;AAEF,iFAAiF;AAEjF,SAAS,SAAS,CAAC,IAAY,EAAE,GAAW;IAC1C,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,uDAAuD,CAAC;IAC/H,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,uEAAuE,CAAC;IACtG,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,iFAAiF,CAAC;IAChH,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,wDAAwD,CAAC;IACvF,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,uEAAuE,CAAC;IACtG,OAAO,iCAAiC,IAAI,wBAAwB,CAAC;AACvE,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,yDAAyD,CAAC;IAChG,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,2CAA2C,CAAC;IACnF,IAAI,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAAE,OAAO,yDAAyD,CAAC;IAC5G,OAAO,6DAA6D,CAAC;AACvE,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAAE,OAAO,2DAA2D,CAAC;IAC9G,IAAI,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAAE,OAAO,qDAAqD,CAAC;IAClG,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,qEAAqE,CAAC;IAC3G,OAAO,0DAA0D,CAAC;AACpE,CAAC;AAED,iFAAiF;AAEjF,SAAgB,OAAO,CAAC,MAAc,EAAE,WAA0B,IAAI;IACpE,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7I,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACxD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEd,MAAM,KAAK,GAAe;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBACtC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;gBAC3B,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;gBAC3B,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC;gBAC/B,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;gBACnC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;gBACrC,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC;YAEF,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACjC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,iEAAiE;gBACjE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QAC9E,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEvE,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;WACpF,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,CAAC,CAAC,CAAC;IAE3C,MAAM,OAAO,GAAG,SAAS;QACvB,CAAC,CAAC,KAAK,WAAW,CAAC,MAAM,mBAAmB,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QACtH,CAAC,CAAC,uBAAuB,CAAC;IAE5B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACzE,CAAC;AAED,SAAgB,cAAc,CAAC,MAAsB;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,IAAI,GAAG,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1H,KAAK,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,qBAAqB,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/dist/cicd.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DetectedTech } from "./detector";
|
|
2
|
+
export interface CicdAdvisory {
|
|
3
|
+
tool: string;
|
|
4
|
+
configFile: string;
|
|
5
|
+
issues: string[];
|
|
6
|
+
tips: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare function adviseCicd(projectRoot: string, _detected: DetectedTech[]): CicdAdvisory[];
|
|
9
|
+
export declare function formatCicdAdvisories(advisories: CicdAdvisory[]): string;
|
|
10
|
+
//# sourceMappingURL=cicd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cicd.d.ts","sourceRoot":"","sources":["../src/cicd.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAmDD,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAQzF;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,CAUvE"}
|