code-auditor-mcp 2.6.1 → 3.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/README.md +319 -147
- package/dist/analyzers/analyzerUtils.d.ts +13 -11
- package/dist/analyzers/analyzerUtils.d.ts.map +1 -1
- package/dist/analyzers/analyzerUtils.js +22 -56
- package/dist/analyzers/analyzerUtils.js.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
- package/dist/analyzers/dataAccessAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/dataAccessAnalyzer.js +50 -24
- package/dist/analyzers/dataAccessAnalyzer.js.map +1 -1
- package/dist/analyzers/documentationAnalyzer.d.ts +4 -1
- package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/documentationAnalyzer.js +210 -111
- package/dist/analyzers/documentationAnalyzer.js.map +1 -1
- package/dist/analyzers/dryAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/dryAnalyzer.js +190 -58
- package/dist/analyzers/dryAnalyzer.js.map +1 -1
- package/dist/analyzers/invariantsAnalyzer.d.ts +20 -0
- package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/invariantsAnalyzer.js +148 -0
- package/dist/analyzers/invariantsAnalyzer.js.map +1 -0
- package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/reactAnalyzer.js +2 -2
- package/dist/analyzers/reactAnalyzer.js.map +1 -1
- package/dist/analyzers/schemaAnalyzer.d.ts +2 -0
- package/dist/analyzers/schemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/schemaAnalyzer.js +306 -147
- package/dist/analyzers/schemaAnalyzer.js.map +1 -1
- package/dist/analyzers/solidAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/solidAnalyzer.js +145 -119
- package/dist/analyzers/solidAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +3 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +41 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +8 -8
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +6 -6
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
- package/dist/api/index.js +1 -0
- package/dist/api/index.js.map +1 -1
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +367 -24
- package/dist/auditRunner.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +740 -18
- package/dist/cli.js.map +1 -1
- package/dist/codeIndexDB-enhanced.d.ts +35 -13
- package/dist/codeIndexDB-enhanced.d.ts.map +1 -1
- package/dist/codeIndexDB-enhanced.js +311 -214
- package/dist/codeIndexDB-enhanced.js.map +1 -1
- package/dist/codeIndexDB.d.ts +222 -0
- package/dist/codeIndexDB.d.ts.map +1 -0
- package/dist/codeIndexDB.js +2042 -0
- package/dist/codeIndexDB.js.map +1 -0
- package/dist/codeIndexService.d.ts.map +1 -1
- package/dist/codeIndexService.js.map +1 -1
- package/dist/componentScanner.d.ts +14 -8
- package/dist/componentScanner.d.ts.map +1 -1
- package/dist/componentScanner.js +136 -113
- package/dist/componentScanner.js.map +1 -1
- package/dist/config/configLoader.d.ts.map +1 -1
- package/dist/config/configLoader.js +10 -7
- package/dist/config/configLoader.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/fingerprint.d.ts +15 -0
- package/dist/fingerprint.d.ts.map +1 -0
- package/dist/fingerprint.js +32 -0
- package/dist/fingerprint.js.map +1 -0
- package/dist/functionScanner.d.ts +5 -0
- package/dist/functionScanner.d.ts.map +1 -1
- package/dist/functionScanner.js +417 -341
- package/dist/functionScanner.js.map +1 -1
- package/dist/generators/AWSQConfigGenerator.d.ts.map +1 -1
- package/dist/generators/AiderConfigGenerator.d.ts.map +1 -1
- package/dist/generators/BaseConfigGenerator.d.ts.map +1 -1
- package/dist/generators/BaseConfigGenerator.js.map +1 -1
- package/dist/generators/ClaudeConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ClineConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CodeiumConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ConfigGeneratorFactory.d.ts.map +1 -1
- package/dist/generators/ConfigGeneratorFactory.js.map +1 -1
- package/dist/generators/ContinueConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CopilotConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CursorConfigGenerator.d.ts.map +1 -1
- package/dist/generators/JetBrainsConfigGenerator.d.ts.map +1 -1
- package/dist/generators/VSCodeConfigGenerator.d.ts.map +1 -1
- package/dist/grammars/tree-sitter-go.wasm +0 -0
- package/dist/grammars/tree-sitter-javascript.wasm +0 -0
- package/dist/grammars/tree-sitter-tsx.wasm +0 -0
- package/dist/grammars/tree-sitter-typescript.wasm +0 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/invariants/index.d.ts +9 -0
- package/dist/invariants/index.d.ts.map +1 -0
- package/dist/invariants/index.js +4 -0
- package/dist/invariants/index.js.map +1 -0
- package/dist/invariants/invariant-rules.schema.json +137 -0
- package/dist/invariants/ruleEngine.d.ts +32 -0
- package/dist/invariants/ruleEngine.d.ts.map +1 -0
- package/dist/invariants/ruleEngine.js +536 -0
- package/dist/invariants/ruleEngine.js.map +1 -0
- package/dist/invariants/ruleValidator.d.ts +17 -0
- package/dist/invariants/ruleValidator.d.ts.map +1 -0
- package/dist/invariants/ruleValidator.js +264 -0
- package/dist/invariants/ruleValidator.js.map +1 -0
- package/dist/invariants/types.d.ts +78 -0
- package/dist/invariants/types.d.ts.map +1 -0
- package/dist/invariants/types.js +5 -0
- package/dist/invariants/types.js.map +1 -0
- package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
- package/dist/languages/LanguageOrchestrator.js.map +1 -1
- package/dist/languages/LanguageRegistry.d.ts.map +1 -1
- package/dist/languages/RuntimeManager.d.ts.map +1 -1
- package/dist/languages/RuntimeManager.js +1 -1
- package/dist/languages/RuntimeManager.js.map +1 -1
- package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
- package/dist/languages/UniversalAnalyzer.js.map +1 -1
- package/dist/languages/adapterBridge.d.ts +102 -0
- package/dist/languages/adapterBridge.d.ts.map +1 -0
- package/dist/languages/adapterBridge.js +382 -0
- package/dist/languages/adapterBridge.js.map +1 -0
- package/dist/languages/go/GoAdapter.d.ts +37 -26
- package/dist/languages/go/GoAdapter.d.ts.map +1 -1
- package/dist/languages/go/GoAdapter.js +560 -281
- package/dist/languages/go/GoAdapter.js.map +1 -1
- package/dist/languages/index.d.ts +5 -2
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +11 -9
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/tree-sitter/converter.d.ts +43 -0
- package/dist/languages/tree-sitter/converter.d.ts.map +1 -0
- package/dist/languages/tree-sitter/converter.js +150 -0
- package/dist/languages/tree-sitter/converter.js.map +1 -0
- package/dist/languages/tree-sitter/parser.d.ts +36 -0
- package/dist/languages/tree-sitter/parser.d.ts.map +1 -0
- package/dist/languages/tree-sitter/parser.js +114 -0
- package/dist/languages/tree-sitter/parser.js.map +1 -0
- package/dist/languages/types.d.ts +11 -0
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +92 -0
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -0
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +951 -0
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -0
- package/dist/mcp-tools/projectTasks.d.ts +80 -11
- package/dist/mcp-tools/projectTasks.d.ts.map +1 -1
- package/dist/mcp-tools/projectTasks.js +279 -13
- package/dist/mcp-tools/projectTasks.js.map +1 -1
- package/dist/mcp-tools/whitelistTools.d.ts +21 -21
- package/dist/mcp-tools/whitelistTools.d.ts.map +1 -1
- package/dist/mcp-tools/workflowGuide.d.ts.map +1 -1
- package/dist/mcp-tools/workflowGuide.js +130 -126
- package/dist/mcp-tools/workflowGuide.js.map +1 -1
- package/dist/mcp-tools-shared.d.ts.map +1 -1
- package/dist/mcp-tools-shared.js.map +1 -1
- package/dist/mcp-ui-simple.js +1 -1
- package/dist/mcp-ui-simple.js.map +1 -1
- package/dist/mcp.d.ts +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +1455 -1132
- package/dist/mcp.js.map +1 -1
- package/dist/mcpAuditJobs.d.ts +4 -0
- package/dist/mcpAuditJobs.d.ts.map +1 -1
- package/dist/mcpAuditJobs.js +49 -2
- package/dist/mcpAuditJobs.js.map +1 -1
- package/dist/mcpDiagnostics.d.ts.map +1 -1
- package/dist/mcpDiagnostics.js +8 -5
- package/dist/mcpDiagnostics.js.map +1 -1
- package/dist/mcpToolErrors.d.ts.map +1 -1
- package/dist/mcpToolErrors.js.map +1 -1
- package/dist/native/ast-grep-napi.darwin-arm64.node +0 -0
- package/dist/native/ast-grep-napi.darwin-x64.node +0 -0
- package/dist/native/ast-grep-napi.linux-arm64-gnu.node +0 -0
- package/dist/native/ast-grep-napi.linux-arm64-musl.node +0 -0
- package/dist/native/ast-grep-napi.linux-x64-gnu.node +0 -0
- package/dist/native/ast-grep-napi.linux-x64-musl.node +0 -0
- package/dist/native/ast-grep-napi.win32-x64-msvc.node +0 -0
- package/dist/native-bootstrap.d.ts +15 -0
- package/dist/native-bootstrap.d.ts.map +1 -0
- package/dist/native-bootstrap.js +75 -0
- package/dist/native-bootstrap.js.map +1 -0
- package/dist/reporting/csvReportGenerator.d.ts.map +1 -1
- package/dist/reporting/htmlReportGenerator.d.ts.map +1 -1
- package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
- package/dist/reporting/reportGenerator.d.ts.map +1 -1
- package/dist/reporting/reportGenerator.js +4 -0
- package/dist/reporting/reportGenerator.js.map +1 -1
- package/dist/reporting/sarifReportGenerator.d.ts +39 -0
- package/dist/reporting/sarifReportGenerator.d.ts.map +1 -0
- package/dist/reporting/sarifReportGenerator.js +229 -0
- package/dist/reporting/sarifReportGenerator.js.map +1 -0
- package/dist/search/QueryParser.d.ts +41 -0
- package/dist/search/QueryParser.d.ts.map +1 -1
- package/dist/search/QueryParser.js +200 -19
- package/dist/search/QueryParser.js.map +1 -1
- package/dist/services/CodeMapGenerator.d.ts.map +1 -1
- package/dist/services/CodeMapGenerator.js +4 -4
- package/dist/services/CodeMapGenerator.js.map +1 -1
- package/dist/services/ProjectTaskRepository.d.ts +34 -9
- package/dist/services/ProjectTaskRepository.d.ts.map +1 -1
- package/dist/services/ProjectTaskRepository.js +385 -10
- package/dist/services/ProjectTaskRepository.js.map +1 -1
- package/dist/services/SchemaParser.d.ts.map +1 -1
- package/dist/services/SchemaParser.js +5 -8
- package/dist/services/SchemaParser.js.map +1 -1
- package/dist/services/auditJobService.d.ts +1 -1
- package/dist/services/projectTaskHelpers.js.map +1 -1
- package/dist/services/whitelistService.d.ts.map +1 -1
- package/dist/services/whitelistService.js +1 -1
- package/dist/services/whitelistService.js.map +1 -1
- package/dist/tool-registry.d.ts +79 -0
- package/dist/tool-registry.d.ts.map +1 -0
- package/dist/tool-registry.js +139 -0
- package/dist/tool-registry.js.map +1 -0
- package/dist/types/projectTask.d.ts +31 -0
- package/dist/types/projectTask.d.ts.map +1 -1
- package/dist/types.d.ts +26 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/ui/InteractivePrompts.d.ts.map +1 -1
- package/dist/ui/InteractivePrompts.js.map +1 -1
- package/dist/utils/astParser.d.ts +31 -38
- package/dist/utils/astParser.d.ts.map +1 -1
- package/dist/utils/astParser.js +138 -196
- package/dist/utils/astParser.js.map +1 -1
- package/dist/utils/astUtils.d.ts +87 -58
- package/dist/utils/astUtils.d.ts.map +1 -1
- package/dist/utils/astUtils.js +852 -581
- package/dist/utils/astUtils.js.map +1 -1
- package/dist/utils/componentPatterns.js.map +1 -1
- package/dist/utils/componentResponsibility.d.ts +13 -9
- package/dist/utils/componentResponsibility.d.ts.map +1 -1
- package/dist/utils/componentResponsibility.js +236 -206
- package/dist/utils/componentResponsibility.js.map +1 -1
- package/dist/utils/dependencyExtractor.d.ts +11 -6
- package/dist/utils/dependencyExtractor.d.ts.map +1 -1
- package/dist/utils/dependencyExtractor.js +200 -119
- package/dist/utils/dependencyExtractor.js.map +1 -1
- package/dist/utils/fileDiscovery.d.ts +1 -1
- package/dist/utils/fileDiscovery.d.ts.map +1 -1
- package/dist/utils/fileDiscovery.js.map +1 -1
- package/dist/utils/jsDocParser.d.ts +27 -30
- package/dist/utils/jsDocParser.d.ts.map +1 -1
- package/dist/utils/jsDocParser.js +271 -207
- package/dist/utils/jsDocParser.js.map +1 -1
- package/dist/utils/reactDetection.d.ts +27 -12
- package/dist/utils/reactDetection.d.ts.map +1 -1
- package/dist/utils/reactDetection.js +331 -219
- package/dist/utils/reactDetection.js.map +1 -1
- package/dist/workers/auditWorker.js +17 -3
- package/dist/workers/auditWorker.js.map +1 -1
- package/package.json +54 -51
- package/dist/adapters/GoAdapter.d.ts +0 -53
- package/dist/adapters/GoAdapter.d.ts.map +0 -1
- package/dist/adapters/GoAdapter.js +0 -611
- package/dist/adapters/GoAdapter.js.map +0 -1
- package/dist/adapters/GoConfig.d.ts +0 -35
- package/dist/adapters/GoConfig.d.ts.map +0 -1
- package/dist/adapters/GoConfig.js +0 -155
- package/dist/adapters/GoConfig.js.map +0 -1
- package/dist/adapters/LanguageAdapter.d.ts +0 -135
- package/dist/adapters/LanguageAdapter.d.ts.map +0 -1
- package/dist/adapters/LanguageAdapter.js +0 -47
- package/dist/adapters/LanguageAdapter.js.map +0 -1
- package/dist/adapters/TypeScriptAdapter.d.ts +0 -43
- package/dist/adapters/TypeScriptAdapter.d.ts.map +0 -1
- package/dist/adapters/TypeScriptAdapter.js +0 -386
- package/dist/adapters/TypeScriptAdapter.js.map +0 -1
- package/dist/adapters/UniversalAnalyzer.d.ts +0 -42
- package/dist/adapters/UniversalAnalyzer.d.ts.map +0 -1
- package/dist/adapters/UniversalAnalyzer.js +0 -103
- package/dist/adapters/UniversalAnalyzer.js.map +0 -1
- package/dist/adapters/UniversalSOLIDAnalyzer.d.ts +0 -48
- package/dist/adapters/UniversalSOLIDAnalyzer.d.ts.map +0 -1
- package/dist/adapters/UniversalSOLIDAnalyzer.js +0 -178
- package/dist/adapters/UniversalSOLIDAnalyzer.js.map +0 -1
- package/dist/adapters/solidAnalyzerCompat.d.ts +0 -21
- package/dist/adapters/solidAnalyzerCompat.d.ts.map +0 -1
- package/dist/adapters/solidAnalyzerCompat.js +0 -78
- package/dist/adapters/solidAnalyzerCompat.js.map +0 -1
- package/dist/analyzers/dataAccessAnalyzerCompat.d.ts +0 -20
- package/dist/analyzers/dataAccessAnalyzerCompat.d.ts.map +0 -1
- package/dist/analyzers/dataAccessAnalyzerCompat.js +0 -59
- package/dist/analyzers/dataAccessAnalyzerCompat.js.map +0 -1
- package/dist/analyzers/documentationAnalyzerCompat.d.ts +0 -20
- package/dist/analyzers/documentationAnalyzerCompat.d.ts.map +0 -1
- package/dist/analyzers/documentationAnalyzerCompat.js +0 -52
- package/dist/analyzers/documentationAnalyzerCompat.js.map +0 -1
- package/dist/analyzers/dryAnalyzerCompat.d.ts +0 -20
- package/dist/analyzers/dryAnalyzerCompat.d.ts.map +0 -1
- package/dist/analyzers/dryAnalyzerCompat.js +0 -44
- package/dist/analyzers/dryAnalyzerCompat.js.map +0 -1
- package/dist/analyzers/schemaAnalyzerCompat.d.ts +0 -20
- package/dist/analyzers/schemaAnalyzerCompat.d.ts.map +0 -1
- package/dist/analyzers/schemaAnalyzerCompat.js +0 -69
- package/dist/analyzers/schemaAnalyzerCompat.js.map +0 -1
- package/dist/analyzers/solidAnalyzerCompat.d.ts +0 -20
- package/dist/analyzers/solidAnalyzerCompat.d.ts.map +0 -1
- package/dist/analyzers/solidAnalyzerCompat.js +0 -78
- package/dist/analyzers/solidAnalyzerCompat.js.map +0 -1
- package/dist/codeIndexDb.d.ts +0 -394
- package/dist/codeIndexDb.d.ts.map +0 -1
- package/dist/codeIndexDb.js +0 -2077
- package/dist/codeIndexDb.js.map +0 -1
- package/dist/languages/typescript/TypeScriptAdapter.d.ts +0 -108
- package/dist/languages/typescript/TypeScriptAdapter.d.ts.map +0 -1
- package/dist/languages/typescript/TypeScriptAdapter.js +0 -567
- package/dist/languages/typescript/TypeScriptAdapter.js.map +0 -1
- package/dist/languages/typescript/test-extraction.d.ts +0 -2
- package/dist/languages/typescript/test-extraction.d.ts.map +0 -1
- package/dist/languages/typescript/test-extraction.js +0 -36
- package/dist/languages/typescript/test-extraction.js.map +0 -1
- package/dist/mcp-hybrid.d.ts +0 -10
- package/dist/mcp-hybrid.d.ts.map +0 -1
- package/dist/mcp-hybrid.js +0 -41
- package/dist/mcp-hybrid.js.map +0 -1
- package/dist/mcp-index.d.ts +0 -13
- package/dist/mcp-index.d.ts.map +0 -1
- package/dist/mcp-index.js +0 -123
- package/dist/mcp-index.js.map +0 -1
- package/dist/mcp-standalone.d.ts +0 -3
- package/dist/mcp-standalone.d.ts.map +0 -1
- package/dist/mcp-standalone.js +0 -1201
- package/dist/mcp-standalone.js.map +0 -1
- package/dist/mcp-ui-server.d.ts +0 -27
- package/dist/mcp-ui-server.d.ts.map +0 -1
- package/dist/mcp-ui-server.js +0 -484
- package/dist/mcp-ui-server.js.map +0 -1
- package/dist/test-multi-strategy-search.d.ts +0 -3
- package/dist/test-multi-strategy-search.d.ts.map +0 -1
- package/dist/test-multi-strategy-search.js +0 -170
- package/dist/test-multi-strategy-search.js.map +0 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* native-bootstrap.ts
|
|
3
|
+
*
|
|
4
|
+
* Sets NAPI_RS_NATIVE_LIBRARY_PATH before any module imports @ast-grep/napi.
|
|
5
|
+
*
|
|
6
|
+
* npm cli#4828 prevents platform-specific optionalDependencies from installing
|
|
7
|
+
* on stock npm. Our mitigation: we ship bundled .node files for all supported
|
|
8
|
+
* platforms in dist/native/. This module detects the current platform and points
|
|
9
|
+
* the @ast-grep/napi loader at the correct bundled binary.
|
|
10
|
+
*
|
|
11
|
+
* This file MUST be the FIRST import in every entry point (cli.ts, mcp.ts).
|
|
12
|
+
* It imports only Node.js built-ins — nothing that could pull in @ast-grep/napi.
|
|
13
|
+
*/
|
|
14
|
+
import { platform, arch } from 'node:process';
|
|
15
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
16
|
+
import { dirname, join } from 'node:path';
|
|
17
|
+
import { fileURLToPath } from 'node:url';
|
|
18
|
+
import { execSync } from 'node:child_process';
|
|
19
|
+
// ── Musl detection (same logic as @ast-grep/napi's isMusl) ──────────────────
|
|
20
|
+
function isMusl() {
|
|
21
|
+
if (platform !== 'linux')
|
|
22
|
+
return false;
|
|
23
|
+
// Approach 1: check /usr/bin/ldd
|
|
24
|
+
try {
|
|
25
|
+
if (readFileSync('/usr/bin/ldd', 'utf-8').includes('musl'))
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
catch { /* not found */ }
|
|
29
|
+
// Approach 2: spawn ldd --version
|
|
30
|
+
try {
|
|
31
|
+
const out = execSync('ldd --version', { encoding: 'utf8', timeout: 2000 });
|
|
32
|
+
if (out.includes('musl'))
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
catch { /* not found or timed out */ }
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
// ── Platform → binding name mapping ────────────────────────────────────────
|
|
39
|
+
function getBindingFileName() {
|
|
40
|
+
if (platform === 'darwin') {
|
|
41
|
+
if (arch === 'arm64')
|
|
42
|
+
return 'ast-grep-napi.darwin-arm64.node';
|
|
43
|
+
if (arch === 'x64')
|
|
44
|
+
return 'ast-grep-napi.darwin-x64.node';
|
|
45
|
+
}
|
|
46
|
+
if (platform === 'win32') {
|
|
47
|
+
if (arch === 'x64')
|
|
48
|
+
return 'ast-grep-napi.win32-x64-msvc.node';
|
|
49
|
+
}
|
|
50
|
+
if (platform === 'linux') {
|
|
51
|
+
const musl = isMusl();
|
|
52
|
+
if (arch === 'x64')
|
|
53
|
+
return musl ? 'ast-grep-napi.linux-x64-musl.node' : 'ast-grep-napi.linux-x64-gnu.node';
|
|
54
|
+
if (arch === 'arm64')
|
|
55
|
+
return musl ? 'ast-grep-napi.linux-arm64-musl.node' : 'ast-grep-napi.linux-arm64-gnu.node';
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
// ── Bootstrap ──────────────────────────────────────────────────────────────
|
|
60
|
+
function bootstrapNativeBinding() {
|
|
61
|
+
// User override always wins — if they set it, don't touch
|
|
62
|
+
if (process.env.NAPI_RS_NATIVE_LIBRARY_PATH)
|
|
63
|
+
return;
|
|
64
|
+
const bindingName = getBindingFileName();
|
|
65
|
+
if (!bindingName)
|
|
66
|
+
return;
|
|
67
|
+
// Resolve relative to this module's directory (dist/)
|
|
68
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
69
|
+
const bundledPath = join(__dirname, 'native', bindingName);
|
|
70
|
+
if (existsSync(bundledPath)) {
|
|
71
|
+
process.env.NAPI_RS_NATIVE_LIBRARY_PATH = bundledPath;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
bootstrapNativeBinding();
|
|
75
|
+
//# sourceMappingURL=native-bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-bootstrap.js","sourceRoot":"","sources":["../src/native-bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,+EAA+E;AAE/E,SAAS,MAAM;IACb,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAEvC,iCAAiC;IACjC,IAAI,CAAC;QACH,IAAI,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IAE3B,kCAAkC;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC,CAAC,4BAA4B,CAAC,CAAC;IAExC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAE9E,SAAS,kBAAkB;IACzB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,iCAAiC,CAAC;QAC/D,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,+BAA+B,CAAC;IAC7D,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,mCAAmC,CAAC;IACjE,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;QACtB,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,kCAAkC,CAAC;QAC3G,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,oCAAoC,CAAC;IACnH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAE9E,SAAS,sBAAsB;IAC7B,0DAA0D;IAC1D,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B;QAAE,OAAO;IAEpD,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,sDAAsD;IACtD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAE3D,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,2BAA2B,GAAG,WAAW,CAAC;IACxD,CAAC;AACH,CAAC;AAED,sBAAsB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csvReportGenerator.d.ts","sourceRoot":"","sources":["../../src/reporting/csvReportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC,CAAC;CACzF;AAiBD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,eAAe,GACvB,MAAM,CAoBR;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,eAAe,GACvB,MAAM,CAiCR;AAmGD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAsBlE;AAGD,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"csvReportGenerator.d.ts","sourceRoot":"","sources":["../../src/reporting/csvReportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC,CAAC;CACzF;AAiBD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,eAAe,GACvB,MAAM,CAoBR;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,eAAe,GACvB,MAAM,CAiCR;AAmGD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAsBlE;AAGD,eAAO,MAAM,kBAAkB;IAC7B,QAAQ;CACT,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htmlReportGenerator.d.ts","sourceRoot":"","sources":["../../src/reporting/htmlReportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAa,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,gBAAgB,GACxB,MAAM,CAyBR;AA8UD,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"htmlReportGenerator.d.ts","sourceRoot":"","sources":["../../src/reporting/htmlReportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAa,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,gBAAgB,GACxB,MAAM,CAyBR;AA8UD,eAAO,MAAM,mBAAmB;IAC9B,QAAQ;CACT,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonReportGenerator.d.ts","sourceRoot":"","sources":["../../src/reporting/jsonReportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,gBAAgB,GACxB,MAAM,CAYR;AA4ED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAqBrE;AAGD,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"jsonReportGenerator.d.ts","sourceRoot":"","sources":["../../src/reporting/jsonReportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,gBAAgB,GACxB,MAAM,CAYR;AA4ED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAqBrE;AAGD,eAAO,MAAM,mBAAmB;IAC9B,QAAQ;CACT,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportGenerator.d.ts","sourceRoot":"","sources":["../../src/reporting/reportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"reportGenerator.d.ts","sourceRoot":"","sources":["../../src/reporting/reportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMxD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAahF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,MAAM,CAAC;IAUpG,QAAQ,SAAS,WAAW,UAAU,MAAM,GAAG,MAAM;IAQrD,iBAAiB,SAAS,MAAM,aAAa,CAAC,MAAM,EAAE,WAAW,KAAK,MAAM;IAI5E,mBAAmB,IAAI,MAAM,EAAE;EAIlC;AAGD,eAAO,MAAM,eAAe;IAC1B,QAAQ;CACT,CAAC"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { generateHTMLReport } from './htmlReportGenerator.js';
|
|
6
6
|
import { generateJSONReport } from './jsonReportGenerator.js';
|
|
7
7
|
import { generateCSVReport } from './csvReportGenerator.js';
|
|
8
|
+
import { generateSARIFReport } from './sarifReportGenerator.js';
|
|
8
9
|
/**
|
|
9
10
|
* Generate a report in the specified format
|
|
10
11
|
*/
|
|
@@ -16,6 +17,8 @@ export function generateReport(result, format) {
|
|
|
16
17
|
return generateJSONReport(result);
|
|
17
18
|
case 'csv':
|
|
18
19
|
return generateCSVReport(result);
|
|
20
|
+
case 'sarif':
|
|
21
|
+
return generateSARIFReport(result);
|
|
19
22
|
default:
|
|
20
23
|
throw new Error(`Unknown report format: ${format}`);
|
|
21
24
|
}
|
|
@@ -28,6 +31,7 @@ export function createReportGenerator(customFormatters) {
|
|
|
28
31
|
html: generateHTMLReport,
|
|
29
32
|
json: generateJSONReport,
|
|
30
33
|
csv: generateCSVReport,
|
|
34
|
+
sarif: generateSARIFReport,
|
|
31
35
|
...customFormatters
|
|
32
36
|
};
|
|
33
37
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportGenerator.js","sourceRoot":"","sources":["../../src/reporting/reportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"reportGenerator.js","sourceRoot":"","sources":["../../src/reporting/reportGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAmB,EAAE,MAAoB;IACtE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,MAAM;YACT,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,KAAK;YACR,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,OAAO;YACV,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACrC;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,gBAAkE;IACtG,MAAM,UAAU,GAAoD;QAClE,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,kBAAkB;QACxB,GAAG,EAAE,iBAAiB;QACtB,KAAK,EAAE,mBAAmB;QAC1B,GAAG,gBAAgB;KACpB,CAAC;IAEF,OAAO;QACL,QAAQ,CAAC,MAAmB,EAAE,MAAc;YAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QAED,iBAAiB,CAAC,MAAc,EAAE,SAA0C;YAC1E,UAAU,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;QACjC,CAAC;QAED,mBAAmB;YACjB,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE,cAAc;CACzB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SARIF 2.1.0 Report Generator
|
|
3
|
+
*
|
|
4
|
+
* Produces valid SARIF output consumable by GitHub Code Scanning
|
|
5
|
+
* (via github/codeql-action/upload-sarif).
|
|
6
|
+
*
|
|
7
|
+
* Spec 06 — R1: SARIF 2.1.0 emitter for code-auditor-mcp.
|
|
8
|
+
*/
|
|
9
|
+
import type { AuditResult, Violation } from '../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Resolves the stable rule identifier for a violation.
|
|
12
|
+
* The format is `{analyzerName}/{ruleId}`.
|
|
13
|
+
*
|
|
14
|
+
* Precedence for the rule-id portion:
|
|
15
|
+
* 1. `violation.rule` (React, Universal Schema, Invariants)
|
|
16
|
+
* 2. `violation.principle` (SOLID)
|
|
17
|
+
* 3. `violation.details.rule` (React — nested)
|
|
18
|
+
* 4. `violation.type` (DRY, Data Access, Dependency Graph)
|
|
19
|
+
* 5. `violation.schemaType` (Schema)
|
|
20
|
+
* 6. `violation.violationType` (general fallback)
|
|
21
|
+
* 7. `'unknown'`
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolveRuleId(violation: Violation): string;
|
|
24
|
+
/**
|
|
25
|
+
* Builds the full SARIF rule ID: `{analyzerName}/{localRuleId}`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildFullRuleId(analyzerName: string, violation: Violation): string;
|
|
28
|
+
export interface SARIFReportConfig {
|
|
29
|
+
/** Base path for making artifact URIs relative (default: process.cwd()) */
|
|
30
|
+
rootDir?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Generates a SARIF 2.1.0 log string from an AuditResult.
|
|
34
|
+
*/
|
|
35
|
+
export declare function generateSARIFReport(result: AuditResult, config?: SARIFReportConfig): string;
|
|
36
|
+
export declare const SARIFReportGenerator: {
|
|
37
|
+
generate: typeof generateSARIFReport;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=sarifReportGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sarifReportGenerator.d.ts","sourceRoot":"","sources":["../../src/reporting/sarifReportGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAsB1D;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CA0B1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAGlF;AAiCD,MAAM,WAAW,iBAAiB;IAChC,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,CA8F3F;AAkFD,eAAO,MAAM,oBAAoB;IAC/B,QAAQ;CACT,CAAC"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SARIF 2.1.0 Report Generator
|
|
3
|
+
*
|
|
4
|
+
* Produces valid SARIF output consumable by GitHub Code Scanning
|
|
5
|
+
* (via github/codeql-action/upload-sarif).
|
|
6
|
+
*
|
|
7
|
+
* Spec 06 — R1: SARIF 2.1.0 emitter for code-auditor-mcp.
|
|
8
|
+
*/
|
|
9
|
+
import { PACKAGE_VERSION } from '../constants.js';
|
|
10
|
+
import { fingerprint } from '../fingerprint.js';
|
|
11
|
+
// ── Constants ───────────────────────────────────────────────────────────────
|
|
12
|
+
const SARIF_SCHEMA = 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json';
|
|
13
|
+
const SARIF_VERSION = '2.1.0';
|
|
14
|
+
const TOOL_NAME = 'code-auditor-mcp';
|
|
15
|
+
const INFORMATION_URI = 'https://github.com/BenAHammond/code-auditor-mcp';
|
|
16
|
+
// ── Severity mapping (Spec 06 R1.4) ────────────────────────────────────────
|
|
17
|
+
const SEVERITY_TO_LEVEL = {
|
|
18
|
+
critical: 'error',
|
|
19
|
+
warning: 'warning',
|
|
20
|
+
suggestion: 'note',
|
|
21
|
+
};
|
|
22
|
+
// ── Rule ID resolution ──────────────────────────────────────────────────────
|
|
23
|
+
/**
|
|
24
|
+
* Resolves the stable rule identifier for a violation.
|
|
25
|
+
* The format is `{analyzerName}/{ruleId}`.
|
|
26
|
+
*
|
|
27
|
+
* Precedence for the rule-id portion:
|
|
28
|
+
* 1. `violation.rule` (React, Universal Schema, Invariants)
|
|
29
|
+
* 2. `violation.principle` (SOLID)
|
|
30
|
+
* 3. `violation.details.rule` (React — nested)
|
|
31
|
+
* 4. `violation.type` (DRY, Data Access, Dependency Graph)
|
|
32
|
+
* 5. `violation.schemaType` (Schema)
|
|
33
|
+
* 6. `violation.violationType` (general fallback)
|
|
34
|
+
* 7. `'unknown'`
|
|
35
|
+
*/
|
|
36
|
+
export function resolveRuleId(violation) {
|
|
37
|
+
if (violation.rule && typeof violation.rule === 'string') {
|
|
38
|
+
return violation.rule;
|
|
39
|
+
}
|
|
40
|
+
if (violation.principle && typeof violation.principle === 'string') {
|
|
41
|
+
return violation.principle;
|
|
42
|
+
}
|
|
43
|
+
if (violation.details &&
|
|
44
|
+
typeof violation.details === 'object' &&
|
|
45
|
+
!Array.isArray(violation.details) &&
|
|
46
|
+
violation.details.rule &&
|
|
47
|
+
typeof violation.details.rule === 'string') {
|
|
48
|
+
return violation.details.rule;
|
|
49
|
+
}
|
|
50
|
+
if (violation.type && typeof violation.type === 'string') {
|
|
51
|
+
return violation.type;
|
|
52
|
+
}
|
|
53
|
+
if (violation.schemaType && typeof violation.schemaType === 'string') {
|
|
54
|
+
return violation.schemaType;
|
|
55
|
+
}
|
|
56
|
+
if (violation.violationType && typeof violation.violationType === 'string') {
|
|
57
|
+
return violation.violationType;
|
|
58
|
+
}
|
|
59
|
+
return 'unknown';
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Builds the full SARIF rule ID: `{analyzerName}/{localRuleId}`.
|
|
63
|
+
*/
|
|
64
|
+
export function buildFullRuleId(analyzerName, violation) {
|
|
65
|
+
const localId = resolveRuleId(violation);
|
|
66
|
+
return `${normalizeAnalyzerName(analyzerName)}/${localId}`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Normalizes analyzer names to short kebab-case identifiers.
|
|
70
|
+
*/
|
|
71
|
+
function normalizeAnalyzerName(name) {
|
|
72
|
+
const mapping = {
|
|
73
|
+
'solid-analyzer': 'solid',
|
|
74
|
+
'dry-analyzer': 'dry',
|
|
75
|
+
'react-analyzer': 'react',
|
|
76
|
+
'data-access-analyzer': 'data-access',
|
|
77
|
+
'documentation-analyzer': 'documentation',
|
|
78
|
+
'schema-analyzer': 'schema',
|
|
79
|
+
'universal-schema-analyzer': 'universal-schema',
|
|
80
|
+
'invariants-analyzer': 'invariants',
|
|
81
|
+
'dependency-graph-analyzer': 'dependency-graph',
|
|
82
|
+
'cross-language-solid-analyzer': 'solid',
|
|
83
|
+
'solid': 'solid',
|
|
84
|
+
'dry': 'dry',
|
|
85
|
+
'react': 'react',
|
|
86
|
+
'data-access': 'data-access',
|
|
87
|
+
'documentation': 'documentation',
|
|
88
|
+
'schema': 'schema',
|
|
89
|
+
'universal-schema': 'universal-schema',
|
|
90
|
+
'invariants': 'invariants',
|
|
91
|
+
'dependency-graph': 'dependency-graph',
|
|
92
|
+
'cross-language-solid': 'solid',
|
|
93
|
+
};
|
|
94
|
+
return mapping[name] ?? name.replace(/[^a-z0-9-]/g, '-').toLowerCase();
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Generates a SARIF 2.1.0 log string from an AuditResult.
|
|
98
|
+
*/
|
|
99
|
+
export function generateSARIFReport(result, config) {
|
|
100
|
+
const rootDir = config?.rootDir ?? process.cwd();
|
|
101
|
+
const driverRules = [];
|
|
102
|
+
const seenRuleIds = new Set();
|
|
103
|
+
const results = [];
|
|
104
|
+
// Walk all analyzer results and build rules + results
|
|
105
|
+
for (const [analyzerName, analyzerResult] of Object.entries(result.analyzerResults)) {
|
|
106
|
+
const normName = normalizeAnalyzerName(analyzerName);
|
|
107
|
+
for (const violation of analyzerResult.violations) {
|
|
108
|
+
const fullRuleId = buildFullRuleId(analyzerName, violation);
|
|
109
|
+
// Collect unique rules
|
|
110
|
+
if (!seenRuleIds.has(fullRuleId)) {
|
|
111
|
+
seenRuleIds.add(fullRuleId);
|
|
112
|
+
driverRules.push({
|
|
113
|
+
id: fullRuleId,
|
|
114
|
+
shortDescription: {
|
|
115
|
+
text: buildShortDescription(normName, resolveRuleId(violation)),
|
|
116
|
+
},
|
|
117
|
+
fullDescription: {
|
|
118
|
+
text: violation.message,
|
|
119
|
+
},
|
|
120
|
+
helpUri: buildHelpUri(fullRuleId),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
// Build result
|
|
124
|
+
const region = {};
|
|
125
|
+
if (violation.line != null) {
|
|
126
|
+
region.startLine = violation.line;
|
|
127
|
+
region.endLine = violation.line;
|
|
128
|
+
}
|
|
129
|
+
if (violation.column != null) {
|
|
130
|
+
region.startColumn = violation.column;
|
|
131
|
+
}
|
|
132
|
+
const artifactUri = makeRelativeUri(violation.file, rootDir);
|
|
133
|
+
const sarifResult = {
|
|
134
|
+
ruleId: fullRuleId,
|
|
135
|
+
level: mapSeverity(violation.severity),
|
|
136
|
+
message: {
|
|
137
|
+
text: violation.message,
|
|
138
|
+
},
|
|
139
|
+
locations: [
|
|
140
|
+
{
|
|
141
|
+
physicalLocation: {
|
|
142
|
+
artifactLocation: {
|
|
143
|
+
uri: artifactUri,
|
|
144
|
+
},
|
|
145
|
+
region: Object.keys(region).length > 0 ? region : undefined,
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
],
|
|
149
|
+
partialFingerprints: buildPartialFingerprints(analyzerName, violation),
|
|
150
|
+
};
|
|
151
|
+
// Add suggestion as a fix if present
|
|
152
|
+
if (violation.suggestion) {
|
|
153
|
+
sarifResult.fixes = [
|
|
154
|
+
{
|
|
155
|
+
description: {
|
|
156
|
+
text: `Suggestion: ${violation.suggestion}`,
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
];
|
|
160
|
+
}
|
|
161
|
+
results.push(sarifResult);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Build the SARIF log
|
|
165
|
+
const sarifLog = {
|
|
166
|
+
$schema: SARIF_SCHEMA,
|
|
167
|
+
version: SARIF_VERSION,
|
|
168
|
+
runs: [
|
|
169
|
+
{
|
|
170
|
+
tool: {
|
|
171
|
+
driver: {
|
|
172
|
+
name: TOOL_NAME,
|
|
173
|
+
version: PACKAGE_VERSION,
|
|
174
|
+
informationUri: INFORMATION_URI,
|
|
175
|
+
rules: driverRules,
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
results,
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
};
|
|
182
|
+
return JSON.stringify(sarifLog, null, 2);
|
|
183
|
+
}
|
|
184
|
+
function mapSeverity(severity) {
|
|
185
|
+
return SEVERITY_TO_LEVEL[severity] ?? 'warning';
|
|
186
|
+
}
|
|
187
|
+
function makeRelativeUri(filePath, rootDir) {
|
|
188
|
+
// Normalize and make relative to root directory
|
|
189
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
190
|
+
if (rootDir && normalized.startsWith(rootDir.replace(/\\/g, '/'))) {
|
|
191
|
+
let relative = normalized.slice(rootDir.replace(/\\/g, '/').length);
|
|
192
|
+
if (relative.startsWith('/')) {
|
|
193
|
+
relative = relative.slice(1);
|
|
194
|
+
}
|
|
195
|
+
return relative || '.';
|
|
196
|
+
}
|
|
197
|
+
return normalized;
|
|
198
|
+
}
|
|
199
|
+
function buildShortDescription(analyzerName, ruleId) {
|
|
200
|
+
return `${analyzerName}: ${ruleId}`;
|
|
201
|
+
}
|
|
202
|
+
function buildHelpUri(fullRuleId) {
|
|
203
|
+
return `${INFORMATION_URI}#${fullRuleId.replace(/\//g, '-')}`;
|
|
204
|
+
}
|
|
205
|
+
function buildPartialFingerprints(analyzerName, violation) {
|
|
206
|
+
const normName = normalizeAnalyzerName(analyzerName);
|
|
207
|
+
const localRule = resolveRuleId(violation);
|
|
208
|
+
const symbol = violation.className ??
|
|
209
|
+
violation.functionName ??
|
|
210
|
+
violation.componentName ??
|
|
211
|
+
violation.symbol ??
|
|
212
|
+
violation.methodName ??
|
|
213
|
+
violation.name ??
|
|
214
|
+
'unknown';
|
|
215
|
+
const fp = fingerprint({
|
|
216
|
+
analyzer: normName,
|
|
217
|
+
rule: localRule,
|
|
218
|
+
file: violation.file,
|
|
219
|
+
symbol,
|
|
220
|
+
});
|
|
221
|
+
return {
|
|
222
|
+
'primary': fp,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
// ── Backward-compatible object export ────────────────────────────────────────
|
|
226
|
+
export const SARIFReportGenerator = {
|
|
227
|
+
generate: generateSARIFReport,
|
|
228
|
+
};
|
|
229
|
+
//# sourceMappingURL=sarifReportGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sarifReportGenerator.js","sourceRoot":"","sources":["../../src/reporting/sarifReportGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,+EAA+E;AAE/E,MAAM,YAAY,GAChB,gGAAgG,CAAC;AACnG,MAAM,aAAa,GAAG,OAAO,CAAC;AAC9B,MAAM,SAAS,GAAG,kBAAkB,CAAC;AACrC,MAAM,eAAe,GAAG,iDAAiD,CAAC;AAE1E,8EAA8E;AAE9E,MAAM,iBAAiB,GAA2B;IAChD,QAAQ,EAAE,OAAO;IACjB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,MAAM;CACnB,CAAC;AAEF,+EAA+E;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,SAAoB;IAChD,IAAI,SAAS,CAAC,IAAI,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzD,OAAO,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;IACD,IAAI,SAAS,CAAC,SAAS,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACnE,OAAO,SAAS,CAAC,SAAS,CAAC;IAC7B,CAAC;IACD,IACE,SAAS,CAAC,OAAO;QACjB,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;QACrC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QACjC,SAAS,CAAC,OAAO,CAAC,IAAI;QACtB,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAC1C,CAAC;QACD,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;IAChC,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzD,OAAO,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;IACD,IAAI,SAAS,CAAC,UAAU,IAAI,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACrE,OAAO,SAAS,CAAC,UAAU,CAAC;IAC9B,CAAC;IACD,IAAI,SAAS,CAAC,aAAa,IAAI,OAAO,SAAS,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;QAC3E,OAAO,SAAS,CAAC,aAAa,CAAC;IACjC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,YAAoB,EAAE,SAAoB;IACxE,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,GAAG,qBAAqB,CAAC,YAAY,CAAC,IAAI,OAAO,EAAE,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,IAAY;IACzC,MAAM,OAAO,GAA2B;QACtC,gBAAgB,EAAE,OAAO;QACzB,cAAc,EAAE,KAAK;QACrB,gBAAgB,EAAE,OAAO;QACzB,sBAAsB,EAAE,aAAa;QACrC,wBAAwB,EAAE,eAAe;QACzC,iBAAiB,EAAE,QAAQ;QAC3B,2BAA2B,EAAE,kBAAkB;QAC/C,qBAAqB,EAAE,YAAY;QACnC,2BAA2B,EAAE,kBAAkB;QAC/C,+BAA+B,EAAE,OAAO;QACxC,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,OAAO;QAChB,aAAa,EAAE,aAAa;QAC5B,eAAe,EAAE,eAAe;QAChC,QAAQ,EAAE,QAAQ;QAClB,kBAAkB,EAAE,kBAAkB;QACtC,YAAY,EAAE,YAAY;QAC1B,kBAAkB,EAAE,kBAAkB;QACtC,sBAAsB,EAAE,OAAO;KAChC,CAAC;IACF,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACzE,CAAC;AASD;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAmB,EAAE,MAA0B;IACjF,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACjD,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,sDAAsD;IACtD,KAAK,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;QACpF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;QAErD,KAAK,MAAM,SAAS,IAAI,cAAc,CAAC,UAAU,EAAE,CAAC;YAClD,MAAM,UAAU,GAAG,eAAe,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAE5D,uBAAuB;YACvB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC5B,WAAW,CAAC,IAAI,CAAC;oBACf,EAAE,EAAE,UAAU;oBACd,gBAAgB,EAAE;wBAChB,IAAI,EAAE,qBAAqB,CAAC,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;qBAChE;oBACD,eAAe,EAAE;wBACf,IAAI,EAAE,SAAS,CAAC,OAAO;qBACxB;oBACD,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC;iBAClC,CAAC,CAAC;YACL,CAAC;YAED,eAAe;YACf,MAAM,MAAM,GAAgB,EAAE,CAAC;YAC/B,IAAI,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBAC3B,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC;gBAClC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC;YAClC,CAAC;YACD,IAAI,SAAS,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;gBAC7B,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;YACxC,CAAC;YAED,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAE7D,MAAM,WAAW,GAAgB;gBAC/B,MAAM,EAAE,UAAU;gBAClB,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC;gBACtC,OAAO,EAAE;oBACP,IAAI,EAAE,SAAS,CAAC,OAAO;iBACxB;gBACD,SAAS,EAAE;oBACT;wBACE,gBAAgB,EAAE;4BAChB,gBAAgB,EAAE;gCAChB,GAAG,EAAE,WAAW;6BACjB;4BACD,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;yBAC5D;qBACF;iBACF;gBACD,mBAAmB,EAAE,wBAAwB,CAAC,YAAY,EAAE,SAAS,CAAC;aACvE,CAAC;YAEF,qCAAqC;YACrC,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;gBACzB,WAAW,CAAC,KAAK,GAAG;oBAClB;wBACE,WAAW,EAAE;4BACX,IAAI,EAAE,eAAe,SAAS,CAAC,UAAU,EAAE;yBAC5C;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,MAAM,QAAQ,GAAG;QACf,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,aAAa;QACtB,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE;wBACN,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,eAAe;wBACxB,cAAc,EAAE,eAAe;wBAC/B,KAAK,EAAE,WAAW;qBACnB;iBACF;gBACD,OAAO;aACR;SACF;KACF,CAAC;IAEF,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AA+BD,SAAS,WAAW,CAAC,QAAgB;IACnC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB,EAAE,OAAe;IACxD,gDAAgD;IAChD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,IAAI,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QAClE,IAAI,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QACpE,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,QAAQ,IAAI,GAAG,CAAC;IACzB,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,qBAAqB,CAAC,YAAoB,EAAE,MAAc;IACjE,OAAO,GAAG,YAAY,KAAK,MAAM,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,YAAY,CAAC,UAAkB;IACtC,OAAO,GAAG,eAAe,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,wBAAwB,CAAC,YAAoB,EAAE,SAAoB;IAC1E,MAAM,QAAQ,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,MAAM,GACV,SAAS,CAAC,SAAS;QACnB,SAAS,CAAC,YAAY;QACtB,SAAS,CAAC,aAAa;QACvB,SAAS,CAAC,MAAM;QAChB,SAAS,CAAC,UAAU;QACpB,SAAS,CAAC,IAAI;QACd,SAAS,CAAC;IAEZ,MAAM,EAAE,GAAG,WAAW,CAAC;QACrB,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,MAAM;KACP,CAAC,CAAC;IAEH,OAAO;QACL,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,QAAQ,EAAE,mBAAmB;CAC9B,CAAC"}
|
|
@@ -59,4 +59,45 @@ export declare class QueryParser {
|
|
|
59
59
|
expandQuery(query: string): string;
|
|
60
60
|
}
|
|
61
61
|
export declare const queryParser: QueryParser;
|
|
62
|
+
/** Compiled SQL query fragments for use with the SQLite-backed CodeIndexDB. */
|
|
63
|
+
export interface SqlQuery {
|
|
64
|
+
/** FTS5 MATCH expression, or null if no free-text terms */
|
|
65
|
+
ftsMatch: string | null;
|
|
66
|
+
/** WHERE clause fragments (ANDed together) */
|
|
67
|
+
whereClauses: string[];
|
|
68
|
+
/** JOIN clauses for call/dependency graph traversal */
|
|
69
|
+
joinClauses: string[];
|
|
70
|
+
/** Named parameters for the prepared statement */
|
|
71
|
+
params: Record<string, any>;
|
|
72
|
+
/** ORDER BY clause */
|
|
73
|
+
orderBy: string;
|
|
74
|
+
/** LIMIT value */
|
|
75
|
+
limit: number;
|
|
76
|
+
/** OFFSET value */
|
|
77
|
+
offset: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Compile a parsed query into SQL fragments for the SQLite-backed CodeIndexDB.
|
|
81
|
+
*
|
|
82
|
+
* The caller assembles the final SQL from the returned fragments:
|
|
83
|
+
* ```sql
|
|
84
|
+
* SELECT f.* [, bm25(functions_fts) as score]
|
|
85
|
+
* FROM functions f
|
|
86
|
+
* [JOIN functions_fts ON functions_fts.rowid = f.id] -- when ftsMatch is set
|
|
87
|
+
* {joinClauses...}
|
|
88
|
+
* WHERE 1=1
|
|
89
|
+
* [AND functions_fts MATCH @ftsMatch] -- when ftsMatch is set
|
|
90
|
+
* {whereClauses...}
|
|
91
|
+
* ORDER BY {orderBy}
|
|
92
|
+
* LIMIT {limit} OFFSET {offset}
|
|
93
|
+
* ```
|
|
94
|
+
*
|
|
95
|
+
* @param parsedQuery The parsed query from {@link QueryParser.parse}.
|
|
96
|
+
* @param options Optional overrides for limit/offset.
|
|
97
|
+
* @returns Compiled SQL fragments.
|
|
98
|
+
*/
|
|
99
|
+
export declare function compileToSQL(parsedQuery: ParsedQuery, options?: {
|
|
100
|
+
defaultLimit?: number;
|
|
101
|
+
offset?: number;
|
|
102
|
+
}): SqlQuery;
|
|
62
103
|
//# sourceMappingURL=QueryParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryParser.d.ts","sourceRoot":"","sources":["../../src/search/QueryParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,qBAAa,WAAW;IAEtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CA6D9B;IAGF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"QueryParser.d.ts","sourceRoot":"","sources":["../../src/search/QueryParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,qBAAa,WAAW;IAEtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CA6D9B;IAGF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAoCtB;IAEX;;;;OAIG;IACI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CA8EvC;IAED;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IA0DtB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAqFxB;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IA+K5B;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IA8BhB;;;;OAIG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBzC;IAED;;;;OAIG;IACI,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIxC;CACF;AAGD,eAAO,MAAM,WAAW,aAAoB,CAAC;AAI7C,+EAA+E;AAC/E,MAAM,WAAW,QAAQ;IACvB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,uDAAuD;IACvD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAOD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACnD,QAAQ,CAiKV"}
|