mirror of
https://github.com/samiyev/puaros.git
synced 2025-12-27 23:06:54 +05:00
Fix all 63 hardcoded value issues from Guardian self-check: - Remove hardcoded Slack token from documentation - Remove aws-sdk framework leak from domain layer - Rename 4 pipeline files to verb-noun convention - Extract 57 magic strings to SecretExamples.ts constants - Update SecretViolation, SecretDetector, MagicStringMatcher - Use typeof for TypeScript literal type in getSeverity() Result: 0 issues in Guardian self-check (was 63) All 566 tests passing, build successful
67 lines
1.9 KiB
TypeScript
67 lines
1.9 KiB
TypeScript
import { IFileScanner } from "../../../domain/services/IFileScanner"
|
|
import { SourceFile } from "../../../domain/entities/SourceFile"
|
|
import { ProjectPath } from "../../../domain/value-objects/ProjectPath"
|
|
import { REGEX_PATTERNS } from "../../../shared/constants"
|
|
|
|
export interface FileCollectionRequest {
|
|
rootDir: string
|
|
include?: string[]
|
|
exclude?: string[]
|
|
}
|
|
|
|
export interface FileCollectionResult {
|
|
sourceFiles: SourceFile[]
|
|
}
|
|
|
|
/**
|
|
* Pipeline step responsible for file collection and basic parsing
|
|
*/
|
|
export class CollectFiles {
|
|
constructor(private readonly fileScanner: IFileScanner) {}
|
|
|
|
public async execute(request: FileCollectionRequest): Promise<FileCollectionResult> {
|
|
const filePaths = await this.fileScanner.scan({
|
|
rootDir: request.rootDir,
|
|
include: request.include,
|
|
exclude: request.exclude,
|
|
})
|
|
|
|
const sourceFiles: SourceFile[] = []
|
|
|
|
for (const filePath of filePaths) {
|
|
const content = await this.fileScanner.readFile(filePath)
|
|
const projectPath = ProjectPath.create(filePath, request.rootDir)
|
|
|
|
const imports = this.extractImports(content)
|
|
const exports = this.extractExports(content)
|
|
|
|
const sourceFile = new SourceFile(projectPath, content, imports, exports)
|
|
sourceFiles.push(sourceFile)
|
|
}
|
|
|
|
return { sourceFiles }
|
|
}
|
|
|
|
private extractImports(content: string): string[] {
|
|
const imports: string[] = []
|
|
let match
|
|
|
|
while ((match = REGEX_PATTERNS.IMPORT_STATEMENT.exec(content)) !== null) {
|
|
imports.push(match[1])
|
|
}
|
|
|
|
return imports
|
|
}
|
|
|
|
private extractExports(content: string): string[] {
|
|
const exports: string[] = []
|
|
let match
|
|
|
|
while ((match = REGEX_PATTERNS.EXPORT_STATEMENT.exec(content)) !== null) {
|
|
exports.push(match[1])
|
|
}
|
|
|
|
return exports
|
|
}
|
|
}
|