@gulibs/safe-coder 0.0.25 → 0.0.27
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/README.md +682 -902
- package/dist/cache/cache-manager.d.ts +71 -0
- package/dist/cache/cache-manager.d.ts.map +1 -0
- package/dist/cache/cache-manager.js +244 -0
- package/dist/cache/cache-manager.js.map +1 -0
- package/dist/executor/cli-executor.d.ts +106 -0
- package/dist/executor/cli-executor.d.ts.map +1 -0
- package/dist/executor/cli-executor.js +133 -0
- package/dist/executor/cli-executor.js.map +1 -0
- package/dist/executor/dependency-checker.d.ts +23 -0
- package/dist/executor/dependency-checker.d.ts.map +1 -0
- package/dist/executor/dependency-checker.js +62 -0
- package/dist/executor/dependency-checker.js.map +1 -0
- package/dist/index.js +3 -4
- package/dist/index.js.map +1 -1
- package/dist/processor/content-processor.d.ts +76 -0
- package/dist/processor/content-processor.d.ts.map +1 -0
- package/dist/processor/content-processor.js +182 -0
- package/dist/processor/content-processor.js.map +1 -0
- package/dist/processor/guide-generator.d.ts +68 -0
- package/dist/processor/guide-generator.d.ts.map +1 -0
- package/dist/processor/guide-generator.js +189 -0
- package/dist/processor/guide-generator.js.map +1 -0
- package/dist/server/safe-coder-mcp.d.ts +18 -0
- package/dist/server/safe-coder-mcp.d.ts.map +1 -0
- package/dist/server/safe-coder-mcp.js +164 -0
- package/dist/server/safe-coder-mcp.js.map +1 -0
- package/dist/tools/cache-tools.d.ts +42 -0
- package/dist/tools/cache-tools.d.ts.map +1 -0
- package/dist/tools/cache-tools.js +70 -0
- package/dist/tools/cache-tools.js.map +1 -0
- package/dist/tools/crawl-documentation.d.ts +57 -0
- package/dist/tools/crawl-documentation.d.ts.map +1 -0
- package/dist/tools/crawl-documentation.js +96 -0
- package/dist/tools/crawl-documentation.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/save-skill.d.ts +49 -0
- package/dist/tools/save-skill.d.ts.map +1 -0
- package/dist/tools/save-skill.js +207 -0
- package/dist/tools/save-skill.js.map +1 -0
- package/package.json +18 -22
- package/dist/documentation/browser-doc-browser.d.ts +0 -41
- package/dist/documentation/browser-doc-browser.d.ts.map +0 -1
- package/dist/documentation/browser-doc-browser.js +0 -357
- package/dist/documentation/browser-doc-browser.js.map +0 -1
- package/dist/documentation/cache.d.ts +0 -13
- package/dist/documentation/cache.d.ts.map +0 -1
- package/dist/documentation/cache.js +0 -48
- package/dist/documentation/cache.js.map +0 -1
- package/dist/documentation/checkpoint-manager.d.ts +0 -38
- package/dist/documentation/checkpoint-manager.d.ts.map +0 -1
- package/dist/documentation/checkpoint-manager.js +0 -101
- package/dist/documentation/checkpoint-manager.js.map +0 -1
- package/dist/documentation/doc-crawler.d.ts +0 -185
- package/dist/documentation/doc-crawler.d.ts.map +0 -1
- package/dist/documentation/doc-crawler.js +0 -1162
- package/dist/documentation/doc-crawler.js.map +0 -1
- package/dist/documentation/github-client.d.ts +0 -13
- package/dist/documentation/github-client.d.ts.map +0 -1
- package/dist/documentation/github-client.js +0 -90
- package/dist/documentation/github-client.js.map +0 -1
- package/dist/documentation/http-fetcher.d.ts +0 -8
- package/dist/documentation/http-fetcher.d.ts.map +0 -1
- package/dist/documentation/http-fetcher.js +0 -31
- package/dist/documentation/http-fetcher.js.map +0 -1
- package/dist/documentation/index.d.ts +0 -16
- package/dist/documentation/index.d.ts.map +0 -1
- package/dist/documentation/index.js +0 -159
- package/dist/documentation/index.js.map +0 -1
- package/dist/documentation/llms-txt/detector.d.ts +0 -31
- package/dist/documentation/llms-txt/detector.d.ts.map +0 -1
- package/dist/documentation/llms-txt/detector.js +0 -77
- package/dist/documentation/llms-txt/detector.js.map +0 -1
- package/dist/documentation/llms-txt/downloader.d.ts +0 -30
- package/dist/documentation/llms-txt/downloader.d.ts.map +0 -1
- package/dist/documentation/llms-txt/downloader.js +0 -84
- package/dist/documentation/llms-txt/downloader.js.map +0 -1
- package/dist/documentation/llms-txt/index.d.ts +0 -4
- package/dist/documentation/llms-txt/index.d.ts.map +0 -1
- package/dist/documentation/llms-txt/index.js +0 -4
- package/dist/documentation/llms-txt/index.js.map +0 -1
- package/dist/documentation/llms-txt/parser.d.ts +0 -43
- package/dist/documentation/llms-txt/parser.d.ts.map +0 -1
- package/dist/documentation/llms-txt/parser.js +0 -177
- package/dist/documentation/llms-txt/parser.js.map +0 -1
- package/dist/documentation/normalizer.d.ts +0 -6
- package/dist/documentation/normalizer.d.ts.map +0 -1
- package/dist/documentation/normalizer.js +0 -38
- package/dist/documentation/normalizer.js.map +0 -1
- package/dist/documentation/npm-client.d.ts +0 -19
- package/dist/documentation/npm-client.d.ts.map +0 -1
- package/dist/documentation/npm-client.js +0 -182
- package/dist/documentation/npm-client.js.map +0 -1
- package/dist/documentation/skill-generator.d.ts +0 -108
- package/dist/documentation/skill-generator.d.ts.map +0 -1
- package/dist/documentation/skill-generator.js +0 -642
- package/dist/documentation/skill-generator.js.map +0 -1
- package/dist/documentation/web-doc-browser.d.ts +0 -67
- package/dist/documentation/web-doc-browser.d.ts.map +0 -1
- package/dist/documentation/web-doc-browser.js +0 -555
- package/dist/documentation/web-doc-browser.js.map +0 -1
- package/dist/errors/api-validator.d.ts +0 -9
- package/dist/errors/api-validator.d.ts.map +0 -1
- package/dist/errors/api-validator.js +0 -57
- package/dist/errors/api-validator.js.map +0 -1
- package/dist/errors/contextual-analysis.d.ts +0 -14
- package/dist/errors/contextual-analysis.d.ts.map +0 -1
- package/dist/errors/contextual-analysis.js +0 -173
- package/dist/errors/contextual-analysis.js.map +0 -1
- package/dist/errors/cross-file-analyzer.d.ts +0 -16
- package/dist/errors/cross-file-analyzer.d.ts.map +0 -1
- package/dist/errors/cross-file-analyzer.js +0 -172
- package/dist/errors/cross-file-analyzer.js.map +0 -1
- package/dist/errors/eslint-integration.d.ts +0 -9
- package/dist/errors/eslint-integration.d.ts.map +0 -1
- package/dist/errors/eslint-integration.js +0 -131
- package/dist/errors/eslint-integration.js.map +0 -1
- package/dist/errors/framework-detector.d.ts +0 -10
- package/dist/errors/framework-detector.d.ts.map +0 -1
- package/dist/errors/framework-detector.js +0 -126
- package/dist/errors/framework-detector.js.map +0 -1
- package/dist/errors/index.d.ts +0 -18
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js +0 -134
- package/dist/errors/index.js.map +0 -1
- package/dist/errors/pattern-matcher.d.ts +0 -25
- package/dist/errors/pattern-matcher.d.ts.map +0 -1
- package/dist/errors/pattern-matcher.js +0 -44
- package/dist/errors/pattern-matcher.js.map +0 -1
- package/dist/errors/patterns.d.ts +0 -11
- package/dist/errors/patterns.d.ts.map +0 -1
- package/dist/errors/patterns.js +0 -351
- package/dist/errors/patterns.js.map +0 -1
- package/dist/errors/performance-detector.d.ts +0 -11
- package/dist/errors/performance-detector.d.ts.map +0 -1
- package/dist/errors/performance-detector.js +0 -119
- package/dist/errors/performance-detector.js.map +0 -1
- package/dist/errors/runtime-detector.d.ts +0 -7
- package/dist/errors/runtime-detector.d.ts.map +0 -1
- package/dist/errors/runtime-detector.js +0 -86
- package/dist/errors/runtime-detector.js.map +0 -1
- package/dist/errors/security-detector.d.ts +0 -6
- package/dist/errors/security-detector.d.ts.map +0 -1
- package/dist/errors/security-detector.js +0 -75
- package/dist/errors/security-detector.js.map +0 -1
- package/dist/errors/typescript-integration.d.ts +0 -6
- package/dist/errors/typescript-integration.d.ts.map +0 -1
- package/dist/errors/typescript-integration.js +0 -46
- package/dist/errors/typescript-integration.js.map +0 -1
- package/dist/server/mcp-server.d.ts +0 -14
- package/dist/server/mcp-server.d.ts.map +0 -1
- package/dist/server/mcp-server.js +0 -776
- package/dist/server/mcp-server.js.map +0 -1
- package/dist/types/documentation.d.ts +0 -26
- package/dist/types/documentation.d.ts.map +0 -1
- package/dist/types/documentation.js +0 -2
- package/dist/types/documentation.js.map +0 -1
- package/dist/utils/config.d.ts +0 -21
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -34
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/http-client.d.ts +0 -17
- package/dist/utils/http-client.d.ts.map +0 -1
- package/dist/utils/http-client.js +0 -62
- package/dist/utils/http-client.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -36
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -128
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/rate-limiter.d.ts +0 -9
- package/dist/utils/rate-limiter.d.ts.map +0 -1
- package/dist/utils/rate-limiter.js +0 -26
- package/dist/utils/rate-limiter.js.map +0 -1
- package/dist/validation/auto-fix.d.ts +0 -15
- package/dist/validation/auto-fix.d.ts.map +0 -1
- package/dist/validation/auto-fix.js +0 -49
- package/dist/validation/auto-fix.js.map +0 -1
- package/dist/validation/index.d.ts +0 -21
- package/dist/validation/index.d.ts.map +0 -1
- package/dist/validation/index.js +0 -45
- package/dist/validation/index.js.map +0 -1
- package/dist/validation/resolution-db.d.ts +0 -15
- package/dist/validation/resolution-db.d.ts.map +0 -1
- package/dist/validation/resolution-db.js +0 -62
- package/dist/validation/resolution-db.js.map +0 -1
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
export class FrameworkDetector {
|
|
2
|
-
detectErrors(code, filename = 'code.ts') {
|
|
3
|
-
const errors = [];
|
|
4
|
-
const lines = code.split('\n');
|
|
5
|
-
// Detect React code
|
|
6
|
-
const isReact = code.includes('react') || filename.endsWith('.tsx') || filename.endsWith('.jsx');
|
|
7
|
-
const isNextJs = code.includes('next/') || code.includes('getServerSideProps') || code.includes('getStaticProps');
|
|
8
|
-
const isVue = code.includes('vue') || filename.endsWith('.vue');
|
|
9
|
-
if (isReact) {
|
|
10
|
-
const reactErrors = this.detectReactErrors(code, lines);
|
|
11
|
-
errors.push(...reactErrors);
|
|
12
|
-
}
|
|
13
|
-
if (isNextJs) {
|
|
14
|
-
const nextErrors = this.detectNextJsErrors(code, lines);
|
|
15
|
-
errors.push(...nextErrors);
|
|
16
|
-
}
|
|
17
|
-
if (isVue) {
|
|
18
|
-
const vueErrors = this.detectVueErrors(code, lines);
|
|
19
|
-
errors.push(...vueErrors);
|
|
20
|
-
}
|
|
21
|
-
return this.prioritize(errors);
|
|
22
|
-
}
|
|
23
|
-
detectReactErrors(code, lines) {
|
|
24
|
-
const errors = [];
|
|
25
|
-
for (let i = 0; i < lines.length; i++) {
|
|
26
|
-
const line = lines[i];
|
|
27
|
-
const lineNumber = i + 1;
|
|
28
|
-
// Detect conditional hooks (already handled by ESLint, but add pattern matching)
|
|
29
|
-
const conditionalHookMatch = line.match(/(if|for|while|switch)\s*\([^)]*\)\s*\{[^}]*\b(use[A-Z]\w+)\s*\(/);
|
|
30
|
-
if (conditionalHookMatch) {
|
|
31
|
-
errors.push({
|
|
32
|
-
type: 'react',
|
|
33
|
-
message: `React Hook '${conditionalHookMatch[2]}' called conditionally violates Rules of Hooks`,
|
|
34
|
-
line: lineNumber,
|
|
35
|
-
column: line.indexOf(conditionalHookMatch[0]) + 1,
|
|
36
|
-
priority: 1,
|
|
37
|
-
fix: 'Move hook outside conditional or use early return',
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
// Detect missing key in map
|
|
41
|
-
const mapMatch = line.match(/\.map\s*\([^)]*\)\s*=>/);
|
|
42
|
-
if (mapMatch) {
|
|
43
|
-
// Check if next few lines have JSX without key
|
|
44
|
-
const nextLines = lines.slice(i, Math.min(i + 5, lines.length)).join('\n');
|
|
45
|
-
if (nextLines.includes('<') && !nextLines.includes('key=')) {
|
|
46
|
-
errors.push({
|
|
47
|
-
type: 'react',
|
|
48
|
-
message: 'List item missing key prop',
|
|
49
|
-
line: lineNumber,
|
|
50
|
-
column: line.indexOf(mapMatch[0]) + 1,
|
|
51
|
-
priority: 3,
|
|
52
|
-
fix: 'Add unique key prop to list items',
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
// Detect setState in render
|
|
57
|
-
const setStateMatch = line.match(/setState\s*\(/);
|
|
58
|
-
if (setStateMatch && this.isInRenderFunction(code, i)) {
|
|
59
|
-
errors.push({
|
|
60
|
-
type: 'react',
|
|
61
|
-
message: 'setState called during render may cause infinite loop',
|
|
62
|
-
line: lineNumber,
|
|
63
|
-
column: line.indexOf(setStateMatch[0]) + 1,
|
|
64
|
-
priority: 2,
|
|
65
|
-
fix: 'Move setState to useEffect or event handler',
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return errors;
|
|
70
|
-
}
|
|
71
|
-
detectNextJsErrors(code, lines) {
|
|
72
|
-
const errors = [];
|
|
73
|
-
for (let i = 0; i < lines.length; i++) {
|
|
74
|
-
const line = lines[i];
|
|
75
|
-
const lineNumber = i + 1;
|
|
76
|
-
// Detect server functions in client components
|
|
77
|
-
if (code.includes("'use client'")) {
|
|
78
|
-
const serverFuncMatch = line.match(/\b(getServerSideProps|getStaticProps|getStaticPaths)\s*\(/);
|
|
79
|
-
if (serverFuncMatch) {
|
|
80
|
-
errors.push({
|
|
81
|
-
type: 'nextjs',
|
|
82
|
-
message: `Server function '${serverFuncMatch[1]}' used in client component`,
|
|
83
|
-
line: lineNumber,
|
|
84
|
-
column: line.indexOf(serverFuncMatch[0]) + 1,
|
|
85
|
-
priority: 2,
|
|
86
|
-
fix: 'Remove server functions from client component',
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return errors;
|
|
92
|
-
}
|
|
93
|
-
detectVueErrors(code, lines) {
|
|
94
|
-
const errors = [];
|
|
95
|
-
// Basic Vue error detection
|
|
96
|
-
for (let i = 0; i < lines.length; i++) {
|
|
97
|
-
const line = lines[i];
|
|
98
|
-
const lineNumber = i + 1;
|
|
99
|
-
// Detect Vue lifecycle hook issues (basic)
|
|
100
|
-
const lifecycleMatch = line.match(/\b(mounted|created|updated)\s*\([^)]*\)\s*\{/);
|
|
101
|
-
if (lifecycleMatch) {
|
|
102
|
-
// Check if async without proper handling
|
|
103
|
-
if (line.includes('async') && !line.includes('await')) {
|
|
104
|
-
errors.push({
|
|
105
|
-
type: 'vue',
|
|
106
|
-
message: `Vue lifecycle hook '${lifecycleMatch[1]}' is async but may not handle errors`,
|
|
107
|
-
line: lineNumber,
|
|
108
|
-
column: line.indexOf(lifecycleMatch[0]) + 1,
|
|
109
|
-
priority: 3,
|
|
110
|
-
fix: 'Add error handling for async lifecycle hooks',
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return errors;
|
|
116
|
-
}
|
|
117
|
-
isInRenderFunction(code, lineIndex) {
|
|
118
|
-
const beforeCode = code.split('\n').slice(0, lineIndex + 1).join('\n');
|
|
119
|
-
// Simple heuristic: check if we're in a function that returns JSX
|
|
120
|
-
return beforeCode.includes('return') && (beforeCode.includes('<') || beforeCode.includes('React.createElement'));
|
|
121
|
-
}
|
|
122
|
-
prioritize(errors) {
|
|
123
|
-
return errors.sort((a, b) => a.priority - b.priority);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=framework-detector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"framework-detector.js","sourceRoot":"","sources":["../../src/errors/framework-detector.ts"],"names":[],"mappings":"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"}
|
package/dist/errors/index.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { type DetectedError } from './pattern-matcher.js';
|
|
2
|
-
import { type FileContext } from './cross-file-analyzer.js';
|
|
3
|
-
export declare class ErrorDetectionService {
|
|
4
|
-
private patternMatcher;
|
|
5
|
-
private eslint;
|
|
6
|
-
private typescript;
|
|
7
|
-
private contextual;
|
|
8
|
-
private runtime;
|
|
9
|
-
private performance;
|
|
10
|
-
private security;
|
|
11
|
-
private framework;
|
|
12
|
-
private apiValidator;
|
|
13
|
-
private crossFile;
|
|
14
|
-
constructor(enableRuntime?: boolean, enablePerformance?: boolean, enableSecurity?: boolean, enableFramework?: boolean, enableApiValidation?: boolean, enableCrossFile?: boolean);
|
|
15
|
-
detectErrors(code: string, filename?: string, files?: FileContext[]): Promise<DetectedError[]>;
|
|
16
|
-
private deduplicateAndPrioritize;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAS1E,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE/E,qBAAa,qBAAqB;IAChC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,SAAS,CAAoB;gBAGnC,aAAa,GAAE,OAAc,EAC7B,iBAAiB,GAAE,OAAc,EACjC,cAAc,GAAE,OAAc,EAC9B,eAAe,GAAE,OAAc,EAC/B,mBAAmB,GAAE,OAAc,EACnC,eAAe,GAAE,OAAe;IAc5B,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAAkB,EAC5B,KAAK,CAAC,EAAE,WAAW,EAAE,GACpB,OAAO,CAAC,aAAa,EAAE,CAAC;IAyF3B,OAAO,CAAC,wBAAwB;CAgBjC"}
|
package/dist/errors/index.js
DELETED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { PatternMatcher } from './pattern-matcher.js';
|
|
2
|
-
import { ESLintIntegration } from './eslint-integration.js';
|
|
3
|
-
import { TypeScriptIntegration } from './typescript-integration.js';
|
|
4
|
-
import { ContextualAnalysis } from './contextual-analysis.js';
|
|
5
|
-
import { RuntimeDetector } from './runtime-detector.js';
|
|
6
|
-
import { PerformanceDetector } from './performance-detector.js';
|
|
7
|
-
import { SecurityDetector } from './security-detector.js';
|
|
8
|
-
import { FrameworkDetector } from './framework-detector.js';
|
|
9
|
-
import { ApiValidator } from './api-validator.js';
|
|
10
|
-
import { CrossFileAnalyzer } from './cross-file-analyzer.js';
|
|
11
|
-
export class ErrorDetectionService {
|
|
12
|
-
patternMatcher;
|
|
13
|
-
eslint;
|
|
14
|
-
typescript;
|
|
15
|
-
contextual;
|
|
16
|
-
runtime;
|
|
17
|
-
performance;
|
|
18
|
-
security;
|
|
19
|
-
framework;
|
|
20
|
-
apiValidator;
|
|
21
|
-
crossFile;
|
|
22
|
-
constructor(enableRuntime = true, enablePerformance = true, enableSecurity = true, enableFramework = true, enableApiValidation = true, enableCrossFile = false) {
|
|
23
|
-
this.patternMatcher = new PatternMatcher();
|
|
24
|
-
this.eslint = new ESLintIntegration();
|
|
25
|
-
this.typescript = new TypeScriptIntegration();
|
|
26
|
-
this.contextual = new ContextualAnalysis();
|
|
27
|
-
this.runtime = enableRuntime ? new RuntimeDetector() : null;
|
|
28
|
-
this.performance = enablePerformance ? new PerformanceDetector() : null;
|
|
29
|
-
this.security = enableSecurity ? new SecurityDetector() : null;
|
|
30
|
-
this.framework = enableFramework ? new FrameworkDetector() : null;
|
|
31
|
-
this.apiValidator = enableApiValidation ? new ApiValidator() : null;
|
|
32
|
-
this.crossFile = new CrossFileAnalyzer(enableCrossFile);
|
|
33
|
-
}
|
|
34
|
-
async detectErrors(code, filename = 'code.ts', files) {
|
|
35
|
-
const allErrors = [];
|
|
36
|
-
// Layer 1: Static analysis (ESLint)
|
|
37
|
-
try {
|
|
38
|
-
const eslintErrors = await this.eslint.detectErrors(code, filename);
|
|
39
|
-
allErrors.push(...eslintErrors);
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
// Continue if ESLint fails
|
|
43
|
-
}
|
|
44
|
-
// Layer 2: TypeScript compiler
|
|
45
|
-
try {
|
|
46
|
-
const tsErrors = await this.typescript.detectErrors(code, filename);
|
|
47
|
-
allErrors.push(...tsErrors);
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
// Continue if TypeScript fails
|
|
51
|
-
}
|
|
52
|
-
// Layer 3: Pattern matching
|
|
53
|
-
const patternErrors = this.patternMatcher.detect(code);
|
|
54
|
-
allErrors.push(...patternErrors);
|
|
55
|
-
// Layer 4: Contextual analysis
|
|
56
|
-
const contextualErrors = this.contextual.detectErrors(code);
|
|
57
|
-
allErrors.push(...contextualErrors);
|
|
58
|
-
// Layer 5: Runtime error detection
|
|
59
|
-
if (this.runtime) {
|
|
60
|
-
try {
|
|
61
|
-
const runtimeErrors = this.runtime.detectErrors(code);
|
|
62
|
-
allErrors.push(...runtimeErrors);
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
// Continue if runtime detection fails
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// Layer 6: Performance issue detection
|
|
69
|
-
if (this.performance) {
|
|
70
|
-
try {
|
|
71
|
-
const performanceErrors = this.performance.detectErrors(code);
|
|
72
|
-
allErrors.push(...performanceErrors);
|
|
73
|
-
}
|
|
74
|
-
catch (error) {
|
|
75
|
-
// Continue if performance detection fails
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
// Layer 7: Security vulnerability detection
|
|
79
|
-
if (this.security) {
|
|
80
|
-
try {
|
|
81
|
-
const securityErrors = this.security.detectErrors(code);
|
|
82
|
-
allErrors.push(...securityErrors);
|
|
83
|
-
}
|
|
84
|
-
catch (error) {
|
|
85
|
-
// Continue if security detection fails
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
// Layer 8: Framework-specific detection
|
|
89
|
-
if (this.framework) {
|
|
90
|
-
try {
|
|
91
|
-
const frameworkErrors = this.framework.detectErrors(code, filename);
|
|
92
|
-
allErrors.push(...frameworkErrors);
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
// Continue if framework detection fails
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
// Layer 9: API usage validation
|
|
99
|
-
if (this.apiValidator) {
|
|
100
|
-
try {
|
|
101
|
-
const apiErrors = this.apiValidator.detectErrors(code, filename);
|
|
102
|
-
allErrors.push(...apiErrors);
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
// Continue if API validation fails
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
// Layer 10: Cross-file analysis (optional)
|
|
109
|
-
try {
|
|
110
|
-
const crossFileErrors = this.crossFile.detectErrors(code, filename, files);
|
|
111
|
-
allErrors.push(...crossFileErrors);
|
|
112
|
-
}
|
|
113
|
-
catch (error) {
|
|
114
|
-
// Continue if cross-file analysis fails
|
|
115
|
-
}
|
|
116
|
-
// Remove duplicates and prioritize
|
|
117
|
-
return this.deduplicateAndPrioritize(allErrors);
|
|
118
|
-
}
|
|
119
|
-
deduplicateAndPrioritize(errors) {
|
|
120
|
-
// Remove duplicates based on line, column, and type
|
|
121
|
-
const seen = new Set();
|
|
122
|
-
const unique = [];
|
|
123
|
-
for (const error of errors) {
|
|
124
|
-
const key = `${error.type}:${error.line}:${error.column}`;
|
|
125
|
-
if (!seen.has(key)) {
|
|
126
|
-
seen.add(key);
|
|
127
|
-
unique.push(error);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
// Sort by priority (lower = more critical)
|
|
131
|
-
return unique.sort((a, b) => a.priority - b.priority);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
//# sourceMappingURL=index.js.map
|
package/dist/errors/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export interface ErrorPattern {
|
|
2
|
-
id: string;
|
|
3
|
-
name: string;
|
|
4
|
-
priority: number;
|
|
5
|
-
pattern: string;
|
|
6
|
-
description: string;
|
|
7
|
-
fix: string;
|
|
8
|
-
}
|
|
9
|
-
export interface DetectedError {
|
|
10
|
-
type: string;
|
|
11
|
-
message: string;
|
|
12
|
-
line?: number;
|
|
13
|
-
column?: number;
|
|
14
|
-
priority: number;
|
|
15
|
-
fix?: string;
|
|
16
|
-
pattern?: string;
|
|
17
|
-
}
|
|
18
|
-
export declare class PatternMatcher {
|
|
19
|
-
private patterns;
|
|
20
|
-
constructor();
|
|
21
|
-
detect(code: string): DetectedError[];
|
|
22
|
-
private prioritize;
|
|
23
|
-
addPattern(pattern: ErrorPattern): void;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=pattern-matcher.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pattern-matcher.d.ts","sourceRoot":"","sources":["../../src/errors/pattern-matcher.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAiB;;IAMjC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE;IAkCrC,OAAO,CAAC,UAAU;IAIlB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;CAGxC"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { patterns as patternsData } from './patterns.js';
|
|
2
|
-
export class PatternMatcher {
|
|
3
|
-
patterns;
|
|
4
|
-
constructor() {
|
|
5
|
-
this.patterns = patternsData.patterns;
|
|
6
|
-
}
|
|
7
|
-
detect(code) {
|
|
8
|
-
const errors = [];
|
|
9
|
-
const lines = code.split('\n');
|
|
10
|
-
for (let i = 0; i < lines.length; i++) {
|
|
11
|
-
const line = lines[i];
|
|
12
|
-
const lineNumber = i + 1;
|
|
13
|
-
for (const pattern of this.patterns) {
|
|
14
|
-
try {
|
|
15
|
-
const regex = new RegExp(pattern.pattern, 'g');
|
|
16
|
-
const matches = line.matchAll(regex);
|
|
17
|
-
for (const match of matches) {
|
|
18
|
-
errors.push({
|
|
19
|
-
type: pattern.id,
|
|
20
|
-
message: `${pattern.name}: ${pattern.description}`,
|
|
21
|
-
line: lineNumber,
|
|
22
|
-
column: match.index ? match.index + 1 : undefined,
|
|
23
|
-
priority: pattern.priority,
|
|
24
|
-
fix: pattern.fix,
|
|
25
|
-
pattern: pattern.pattern,
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
catch (error) {
|
|
30
|
-
// Invalid regex pattern, skip
|
|
31
|
-
continue;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return this.prioritize(errors);
|
|
36
|
-
}
|
|
37
|
-
prioritize(errors) {
|
|
38
|
-
return errors.sort((a, b) => a.priority - b.priority);
|
|
39
|
-
}
|
|
40
|
-
addPattern(pattern) {
|
|
41
|
-
this.patterns.push(pattern);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=pattern-matcher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pattern-matcher.js","sourceRoot":"","sources":["../../src/errors/pattern-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,eAAe,CAAC;AAqBzD,MAAM,OAAO,cAAc;IACjB,QAAQ,CAAiB;IAEjC;QACE,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,QAA0B,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;YAEzB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAErC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC5B,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,OAAO,CAAC,EAAE;4BAChB,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,WAAW,EAAE;4BAClD,IAAI,EAAE,UAAU;4BAChB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;4BACjD,QAAQ,EAAE,OAAO,CAAC,QAAQ;4BAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;4BAChB,OAAO,EAAE,OAAO,CAAC,OAAO;yBACzB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,8BAA8B;oBAC9B,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAEO,UAAU,CAAC,MAAuB;QACxC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED,UAAU,CAAC,OAAqB;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/errors/patterns.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;;;;;;CAsWpB,CAAC"}
|