api-tests-coverage 1.0.23 → 1.0.24
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 +39 -0
- package/config.yaml.example +35 -0
- package/dist/dashboard/dist/assets/_basePickBy-D4Hl8chy.js +1 -0
- package/dist/dashboard/dist/assets/_baseUniq-BSUUnV_V.js +1 -0
- package/dist/dashboard/dist/assets/arc-DhDluTY5.js +1 -0
- package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-DGlUU7dC.js +36 -0
- package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-CgXi3kEZ.js +122 -0
- package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-Cr3xB15y.js +10 -0
- package/dist/dashboard/dist/assets/channel-DYAie-7m.js +1 -0
- package/dist/dashboard/dist/assets/chunk-4BX2VUAB-BaW3__pI.js +1 -0
- package/dist/dashboard/dist/assets/chunk-55IACEB6-DyYevfEQ.js +1 -0
- package/dist/dashboard/dist/assets/chunk-B4BG7PRW-C2bwZFec.js +165 -0
- package/dist/dashboard/dist/assets/chunk-DI55MBZ5-DO0T2xne.js +220 -0
- package/dist/dashboard/dist/assets/chunk-FMBD7UC4-CCYA4j_f.js +15 -0
- package/dist/dashboard/dist/assets/chunk-QN33PNHL-Cdhqs7xo.js +1 -0
- package/dist/dashboard/dist/assets/chunk-QZHKN3VN-BzHw38Ki.js +1 -0
- package/dist/dashboard/dist/assets/chunk-TZMSLE5B-dkJ0rsgF.js +1 -0
- package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-DiIv5Pho.js +1 -0
- package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-DiIv5Pho.js +1 -0
- package/dist/dashboard/dist/assets/clone-B4LorrSy.js +1 -0
- package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-jzGbyPIS.js +1 -0
- package/dist/dashboard/dist/assets/dagre-6UL2VRFP-D7rgvBx1.js +4 -0
- package/dist/dashboard/dist/assets/diagram-PSM6KHXK-2rYklqon.js +24 -0
- package/dist/dashboard/dist/assets/diagram-QEK2KX5R-CGrvALqm.js +43 -0
- package/dist/dashboard/dist/assets/diagram-S2PKOQOG-DA3c-QP4.js +24 -0
- package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-BsYH8cLH.js +60 -0
- package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-Da_JhBCy.js +162 -0
- package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-D8FTswNn.js +267 -0
- package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-BFJR-ITH.js +65 -0
- package/dist/dashboard/dist/assets/graph-CIvnjOQQ.js +1 -0
- package/dist/dashboard/dist/assets/index-BWX0sSZn.css +1 -0
- package/dist/dashboard/dist/assets/index-CbAFWEor.js +777 -0
- package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-OcK0Lxgi.js +2 -0
- package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-DTJukVOY.js +139 -0
- package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-Di65fNuD.js +89 -0
- package/dist/dashboard/dist/assets/layout-DAt24RVX.js +1 -0
- package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-DxI8MXCF.js +68 -0
- package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-BafKx3_Y.js +30 -0
- package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-BcZsArkk.js +7 -0
- package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-CqFAO2t6.js +64 -0
- package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-CqSaCg-3.js +10 -0
- package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-6IXD1uqW.js +145 -0
- package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-DvSVQAfp.js +1 -0
- package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-BMFdt0QQ.js +1 -0
- package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-Cll7Nvth.js +61 -0
- package/dist/dashboard/dist/assets/treemap-GDKQZRPO-DtqX8zNC.js +162 -0
- package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-zxwS9i0A.js +7 -0
- package/dist/dashboard/dist/index.html +2 -2
- package/dist/dashboard/dist/reports/coverage-summary.json +75 -1
- package/dist/dashboard/dist/reports/security-full.json +157 -0
- package/dist/src/compatibilityCoverage.d.ts +34 -15
- package/dist/src/compatibilityCoverage.d.ts.map +1 -1
- package/dist/src/compatibilityCoverage.js +387 -85
- package/dist/src/config/defaultConfig.d.ts.map +1 -1
- package/dist/src/config/defaultConfig.js +62 -0
- package/dist/src/config/schema.d.ts.map +1 -1
- package/dist/src/config/schema.js +1 -1
- package/dist/src/config/types.d.ts +81 -1
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/config/validateConfig.d.ts.map +1 -1
- package/dist/src/config/validateConfig.js +126 -0
- package/dist/src/contracts/compatibilityMatrix.d.ts +20 -0
- package/dist/src/contracts/compatibilityMatrix.d.ts.map +1 -0
- package/dist/src/contracts/compatibilityMatrix.js +198 -0
- package/dist/src/contracts/pactBrokerClient.d.ts +10 -0
- package/dist/src/contracts/pactBrokerClient.d.ts.map +1 -0
- package/dist/src/contracts/pactBrokerClient.js +117 -0
- package/dist/src/contracts/schemaEvolutionChecker.d.ts +17 -0
- package/dist/src/contracts/schemaEvolutionChecker.d.ts.map +1 -0
- package/dist/src/contracts/schemaEvolutionChecker.js +95 -0
- package/dist/src/contracts/springCloudContractParser.d.ts +10 -0
- package/dist/src/contracts/springCloudContractParser.d.ts.map +1 -0
- package/dist/src/contracts/springCloudContractParser.js +144 -0
- package/dist/src/discovery/fileClassifier.d.ts.map +1 -1
- package/dist/src/discovery/fileClassifier.js +25 -0
- package/dist/src/discovery/projectDiscovery.d.ts +2 -0
- package/dist/src/discovery/projectDiscovery.d.ts.map +1 -1
- package/dist/src/discovery/projectDiscovery.js +25 -25
- package/dist/src/index.js +233 -16
- package/dist/src/inference/routeInference.d.ts +10 -2
- package/dist/src/inference/routeInference.d.ts.map +1 -1
- package/dist/src/inference/routeInference.js +363 -62
- package/dist/src/languageDetection.d.ts.map +1 -1
- package/dist/src/languageDetection.js +21 -4
- package/dist/src/lib/index.d.ts +3 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +3 -1
- package/dist/src/pipeline/stages/tia/parameterizedTestExpander.js +152 -79
- package/dist/src/pipeline/stages/tia/testEndpointMapper.d.ts +5 -1
- package/dist/src/pipeline/stages/tia/testEndpointMapper.d.ts.map +1 -1
- package/dist/src/pipeline/stages/tia/testEndpointMapper.js +356 -42
- package/dist/src/pipeline/stages/tia/testLayerClassifier.d.ts.map +1 -1
- package/dist/src/pipeline/stages/tia/testLayerClassifier.js +20 -5
- package/dist/src/pipeline/stages/tia/tiaStage.d.ts.map +1 -1
- package/dist/src/pipeline/stages/tia/tiaStage.js +3 -1
- package/dist/src/pipeline/stages/tia/types.d.ts +11 -2
- package/dist/src/pipeline/stages/tia/types.d.ts.map +1 -1
- package/dist/src/projectDefaults.d.ts +6 -0
- package/dist/src/projectDefaults.d.ts.map +1 -0
- package/dist/src/projectDefaults.js +43 -0
- package/dist/src/security/hub.d.ts +81 -0
- package/dist/src/security/hub.d.ts.map +1 -0
- package/dist/src/security/hub.js +420 -0
- package/dist/src/security/index.d.ts +1 -0
- package/dist/src/security/index.d.ts.map +1 -1
- package/dist/src/security/index.js +8 -2
- package/dist/src/security/normalizers/gitleaks.d.ts +7 -0
- package/dist/src/security/normalizers/gitleaks.d.ts.map +1 -0
- package/dist/src/security/normalizers/gitleaks.js +32 -0
- package/dist/src/security/scanners/gitleaks.d.ts +3 -0
- package/dist/src/security/scanners/gitleaks.d.ts.map +1 -0
- package/dist/src/security/scanners/gitleaks.js +105 -0
- package/dist/src/security/scanners/semgrep.d.ts.map +1 -1
- package/dist/src/security/scanners/semgrep.js +24 -2
- package/dist/src/security/scanners/trivy.d.ts.map +1 -1
- package/dist/src/security/scanners/trivy.js +24 -2
- package/dist/src/security/scanners/zap.d.ts.map +1 -1
- package/dist/src/security/scanners/zap.js +27 -2
- package/dist/src/security/types.d.ts +15 -1
- package/dist/src/security/types.d.ts.map +1 -1
- package/dist/src/streaming/schema/index.d.ts +23 -0
- package/dist/src/streaming/schema/index.d.ts.map +1 -0
- package/dist/src/streaming/schema/index.js +196 -0
- package/dist/src/summary/markdownRenderer.d.ts.map +1 -1
- package/dist/src/summary/markdownRenderer.js +15 -1
- package/dist/src/summary/summaryTypes.d.ts.map +1 -1
- package/dist/src/summary/summaryTypes.js +1 -0
- package/dist/src/unitAnalysis.d.ts +145 -0
- package/dist/src/unitAnalysis.d.ts.map +1 -0
- package/dist/src/unitAnalysis.js +1392 -0
- package/package.json +1 -1
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.runGitleaks = runGitleaks;
|
|
37
|
+
/**
|
|
38
|
+
* Gitleaks scanner integration.
|
|
39
|
+
* Supports embedded (binary) and import (pre-generated JSON) modes.
|
|
40
|
+
*/
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const child_process_1 = require("child_process");
|
|
44
|
+
const util_1 = require("util");
|
|
45
|
+
const gitleaks_1 = require("../normalizers/gitleaks");
|
|
46
|
+
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
47
|
+
const GITLEAKS_COMMAND = 'gitleaks detect --report-format json --report-path reports/gitleaks.json';
|
|
48
|
+
function reportGeneratedAt(reportPath) {
|
|
49
|
+
return fs.statSync(reportPath).mtime.toISOString();
|
|
50
|
+
}
|
|
51
|
+
async function runEmbedded(config, workspace) {
|
|
52
|
+
var _a, _b;
|
|
53
|
+
const binary = (_a = config.binaryPath) !== null && _a !== void 0 ? _a : 'gitleaks';
|
|
54
|
+
const timeout = ((_b = config.timeout) !== null && _b !== void 0 ? _b : 120) * 1000;
|
|
55
|
+
const reportFile = path.join(workspace, 'reports', 'gitleaks.json');
|
|
56
|
+
fs.mkdirSync(path.dirname(reportFile), { recursive: true });
|
|
57
|
+
await execFileAsync(binary, ['detect', '--source', workspace, '--report-format', 'json', '--report-path', reportFile], { timeout, maxBuffer: 50 * 1024 * 1024 });
|
|
58
|
+
const content = fs.readFileSync(reportFile, 'utf-8');
|
|
59
|
+
return { findings: (0, gitleaks_1.normalizeGitleaksOutput)(JSON.parse(content)), reportFile };
|
|
60
|
+
}
|
|
61
|
+
function importFromFile(reportPath) {
|
|
62
|
+
const resolved = path.resolve(reportPath);
|
|
63
|
+
if (!fs.existsSync(resolved)) {
|
|
64
|
+
throw new Error(`Gitleaks report file not found: ${resolved}`);
|
|
65
|
+
}
|
|
66
|
+
return (0, gitleaks_1.normalizeGitleaksOutput)(JSON.parse(fs.readFileSync(resolved, 'utf-8')));
|
|
67
|
+
}
|
|
68
|
+
async function runGitleaks(config, workspace = '.') {
|
|
69
|
+
if (!config.enabled || config.mode === 'disabled') {
|
|
70
|
+
return { scanner: 'gitleaks', findings: [], success: true };
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
if (config.mode === 'import') {
|
|
74
|
+
if (!config.reportPath) {
|
|
75
|
+
throw new Error('Gitleaks import mode requires reportPath to be set');
|
|
76
|
+
}
|
|
77
|
+
const resolved = path.resolve(config.reportPath);
|
|
78
|
+
return {
|
|
79
|
+
scanner: 'gitleaks',
|
|
80
|
+
findings: importFromFile(resolved),
|
|
81
|
+
success: true,
|
|
82
|
+
metadata: {
|
|
83
|
+
reportFile: resolved,
|
|
84
|
+
generatedAt: reportGeneratedAt(resolved),
|
|
85
|
+
command: GITLEAKS_COMMAND,
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const embedded = await runEmbedded(config, workspace);
|
|
90
|
+
return {
|
|
91
|
+
scanner: 'gitleaks',
|
|
92
|
+
findings: embedded.findings,
|
|
93
|
+
success: true,
|
|
94
|
+
metadata: {
|
|
95
|
+
reportFile: embedded.reportFile,
|
|
96
|
+
generatedAt: reportGeneratedAt(embedded.reportFile),
|
|
97
|
+
command: GITLEAKS_COMMAND,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
103
|
+
return { scanner: 'gitleaks', findings: [], success: false, error };
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semgrep.d.ts","sourceRoot":"","sources":["../../../../src/security/scanners/semgrep.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAmB,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"semgrep.d.ts","sourceRoot":"","sources":["../../../../src/security/scanners/semgrep.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAmB,aAAa,EAAE,MAAM,UAAU,CAAC;AAsEhF;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,oBAAoB,EAC5B,SAAS,GAAE,MAAY,GACtB,OAAO,CAAC,aAAa,CAAC,CAyCxB"}
|
|
@@ -44,6 +44,9 @@ const child_process_1 = require("child_process");
|
|
|
44
44
|
const util_1 = require("util");
|
|
45
45
|
const semgrep_1 = require("../normalizers/semgrep");
|
|
46
46
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
47
|
+
function reportGeneratedAt(reportPath) {
|
|
48
|
+
return fs.statSync(reportPath).mtime.toISOString();
|
|
49
|
+
}
|
|
47
50
|
/**
|
|
48
51
|
* Run Semgrep in embedded mode.
|
|
49
52
|
* Invokes the `semgrep` binary and parses its JSON output.
|
|
@@ -101,6 +104,7 @@ function importFromFile(reportPath) {
|
|
|
101
104
|
* Run the Semgrep scanner according to the given configuration.
|
|
102
105
|
*/
|
|
103
106
|
async function runSemgrep(config, workspace = '.') {
|
|
107
|
+
var _a, _b;
|
|
104
108
|
if (!config.enabled || config.mode === 'disabled') {
|
|
105
109
|
return { scanner: 'semgrep', findings: [], success: true };
|
|
106
110
|
}
|
|
@@ -110,13 +114,31 @@ async function runSemgrep(config, workspace = '.') {
|
|
|
110
114
|
if (!config.reportPath) {
|
|
111
115
|
throw new Error('Semgrep import mode requires reportPath to be set');
|
|
112
116
|
}
|
|
113
|
-
|
|
117
|
+
const reportFile = path.resolve(config.reportPath);
|
|
118
|
+
findings = importFromFile(reportFile);
|
|
119
|
+
return {
|
|
120
|
+
scanner: 'semgrep',
|
|
121
|
+
findings,
|
|
122
|
+
success: true,
|
|
123
|
+
metadata: {
|
|
124
|
+
reportFile,
|
|
125
|
+
generatedAt: reportGeneratedAt(reportFile),
|
|
126
|
+
command: `semgrep scan --json --config ${(_a = config.config) !== null && _a !== void 0 ? _a : 'p/default'} > ${reportFile}`,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
114
129
|
}
|
|
115
130
|
else {
|
|
116
131
|
// embedded or hybrid: run the binary
|
|
117
132
|
findings = await runEmbedded(config, workspace);
|
|
118
133
|
}
|
|
119
|
-
return {
|
|
134
|
+
return {
|
|
135
|
+
scanner: 'semgrep',
|
|
136
|
+
findings,
|
|
137
|
+
success: true,
|
|
138
|
+
metadata: {
|
|
139
|
+
command: `semgrep scan --json --config ${(_b = config.config) !== null && _b !== void 0 ? _b : 'p/default'} ${workspace}`,
|
|
140
|
+
},
|
|
141
|
+
};
|
|
120
142
|
}
|
|
121
143
|
catch (err) {
|
|
122
144
|
const error = err instanceof Error ? err.message : String(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trivy.d.ts","sourceRoot":"","sources":["../../../../src/security/scanners/trivy.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAmB,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"trivy.d.ts","sourceRoot":"","sources":["../../../../src/security/scanners/trivy.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAmB,aAAa,EAAE,MAAM,UAAU,CAAC;AA2D9E;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,SAAS,GAAE,MAAY,GACtB,OAAO,CAAC,aAAa,CAAC,CAwCxB"}
|
|
@@ -44,6 +44,9 @@ const child_process_1 = require("child_process");
|
|
|
44
44
|
const util_1 = require("util");
|
|
45
45
|
const trivy_1 = require("../normalizers/trivy");
|
|
46
46
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
47
|
+
function reportGeneratedAt(reportPath) {
|
|
48
|
+
return fs.statSync(reportPath).mtime.toISOString();
|
|
49
|
+
}
|
|
47
50
|
/**
|
|
48
51
|
* Run Trivy in embedded mode.
|
|
49
52
|
* Invokes the `trivy` binary and parses its JSON output.
|
|
@@ -92,6 +95,7 @@ function importFromFile(reportPath) {
|
|
|
92
95
|
* Run the Trivy scanner according to the given configuration.
|
|
93
96
|
*/
|
|
94
97
|
async function runTrivy(config, workspace = '.') {
|
|
98
|
+
var _a, _b, _c, _d;
|
|
95
99
|
if (!config.enabled || config.mode === 'disabled') {
|
|
96
100
|
return { scanner: 'trivy', findings: [], success: true };
|
|
97
101
|
}
|
|
@@ -101,12 +105,30 @@ async function runTrivy(config, workspace = '.') {
|
|
|
101
105
|
if (!config.reportPath) {
|
|
102
106
|
throw new Error('Trivy import mode requires reportPath to be set');
|
|
103
107
|
}
|
|
104
|
-
|
|
108
|
+
const reportFile = path.resolve(config.reportPath);
|
|
109
|
+
findings = importFromFile(reportFile);
|
|
110
|
+
return {
|
|
111
|
+
scanner: 'trivy',
|
|
112
|
+
findings,
|
|
113
|
+
success: true,
|
|
114
|
+
metadata: {
|
|
115
|
+
reportFile,
|
|
116
|
+
generatedAt: reportGeneratedAt(reportFile),
|
|
117
|
+
command: `trivy ${((_a = config.scanMode) !== null && _a !== void 0 ? _a : 'fs')} --format json --scanners ${((_b = config.scanners) !== null && _b !== void 0 ? _b : ['vuln', 'secret']).join(',')} ${workspace}`,
|
|
118
|
+
},
|
|
119
|
+
};
|
|
105
120
|
}
|
|
106
121
|
else {
|
|
107
122
|
findings = await runEmbedded(config, workspace);
|
|
108
123
|
}
|
|
109
|
-
return {
|
|
124
|
+
return {
|
|
125
|
+
scanner: 'trivy',
|
|
126
|
+
findings,
|
|
127
|
+
success: true,
|
|
128
|
+
metadata: {
|
|
129
|
+
command: `trivy ${((_c = config.scanMode) !== null && _c !== void 0 ? _c : 'fs')} --format json --scanners ${((_d = config.scanners) !== null && _d !== void 0 ? _d : ['vuln', 'secret']).join(',')} ${workspace}`,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
110
132
|
}
|
|
111
133
|
catch (err) {
|
|
112
134
|
const error = err instanceof Error ? err.message : String(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zap.d.ts","sourceRoot":"","sources":["../../../../src/security/scanners/zap.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAmB,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"zap.d.ts","sourceRoot":"","sources":["../../../../src/security/scanners/zap.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAmB,aAAa,EAAE,MAAM,UAAU,CAAC;AAmF5E;;GAEG;AACH,wBAAsB,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CA4C7E"}
|
|
@@ -44,6 +44,9 @@ const child_process_1 = require("child_process");
|
|
|
44
44
|
const util_1 = require("util");
|
|
45
45
|
const zap_1 = require("../normalizers/zap");
|
|
46
46
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
47
|
+
function reportGeneratedAt(reportPath) {
|
|
48
|
+
return fs.statSync(reportPath).mtime.toISOString();
|
|
49
|
+
}
|
|
47
50
|
/**
|
|
48
51
|
* Run ZAP in embedded mode using the baseline scan script.
|
|
49
52
|
*/
|
|
@@ -121,12 +124,34 @@ async function runZap(config) {
|
|
|
121
124
|
if (!config.reportPath) {
|
|
122
125
|
throw new Error('ZAP import mode requires reportPath to be set');
|
|
123
126
|
}
|
|
124
|
-
|
|
127
|
+
const reportFile = path.resolve(config.reportPath);
|
|
128
|
+
findings = importFromFile(reportFile);
|
|
129
|
+
return {
|
|
130
|
+
scanner: 'zap',
|
|
131
|
+
findings,
|
|
132
|
+
success: true,
|
|
133
|
+
metadata: {
|
|
134
|
+
reportFile,
|
|
135
|
+
generatedAt: reportGeneratedAt(reportFile),
|
|
136
|
+
command: config.targetUrl
|
|
137
|
+
? `zap-baseline.py -J reports/zap.json -t ${config.targetUrl}`
|
|
138
|
+
: 'zap-baseline.py -J reports/zap.json -t https://your-service.example.com',
|
|
139
|
+
},
|
|
140
|
+
};
|
|
125
141
|
}
|
|
126
142
|
else {
|
|
127
143
|
findings = await runEmbedded(config);
|
|
128
144
|
}
|
|
129
|
-
return {
|
|
145
|
+
return {
|
|
146
|
+
scanner: 'zap',
|
|
147
|
+
findings,
|
|
148
|
+
success: true,
|
|
149
|
+
metadata: {
|
|
150
|
+
command: config.targetUrl
|
|
151
|
+
? `zap-baseline.py -t ${config.targetUrl} -J reports/zap-raw.json`
|
|
152
|
+
: undefined,
|
|
153
|
+
},
|
|
154
|
+
};
|
|
130
155
|
}
|
|
131
156
|
catch (err) {
|
|
132
157
|
const error = err instanceof Error ? err.message : String(err);
|
|
@@ -28,6 +28,12 @@ export interface SecurityFinding {
|
|
|
28
28
|
secretType?: string;
|
|
29
29
|
scannerNativePayload?: unknown;
|
|
30
30
|
}
|
|
31
|
+
export interface ScannerMetadata {
|
|
32
|
+
reportFile?: string;
|
|
33
|
+
version?: string;
|
|
34
|
+
generatedAt?: string;
|
|
35
|
+
command?: string;
|
|
36
|
+
}
|
|
31
37
|
export type ScannerMode = 'embedded' | 'import' | 'disabled';
|
|
32
38
|
export interface SemgrepScannerConfig {
|
|
33
39
|
enabled: boolean;
|
|
@@ -79,10 +85,18 @@ export interface ZapScannerConfig {
|
|
|
79
85
|
/** Path to pre-generated ZAP JSON/XML report (import mode) */
|
|
80
86
|
reportPath?: string;
|
|
81
87
|
}
|
|
88
|
+
export interface GitleaksScannerConfig {
|
|
89
|
+
enabled: boolean;
|
|
90
|
+
mode: ScannerMode;
|
|
91
|
+
binaryPath?: string;
|
|
92
|
+
timeout?: number;
|
|
93
|
+
reportPath?: string;
|
|
94
|
+
}
|
|
82
95
|
export interface SecurityScannerConfigs {
|
|
83
96
|
semgrep?: SemgrepScannerConfig;
|
|
84
97
|
trivy?: TrivyScannerConfig;
|
|
85
98
|
zap?: ZapScannerConfig;
|
|
99
|
+
gitleaks?: GitleaksScannerConfig;
|
|
86
100
|
}
|
|
87
101
|
export interface SecurityGateConfig {
|
|
88
102
|
/** Fail if any CRITICAL finding exists */
|
|
@@ -117,7 +131,7 @@ export interface ScannerResult {
|
|
|
117
131
|
/** Error message if the scanner failed */
|
|
118
132
|
error?: string;
|
|
119
133
|
/** Raw output or metadata from the scanner */
|
|
120
|
-
metadata?: Record<string, unknown>;
|
|
134
|
+
metadata?: ScannerMetadata & Record<string, unknown>;
|
|
121
135
|
}
|
|
122
136
|
export interface SecurityScanSummary {
|
|
123
137
|
scannersRun: ScannerName[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/security/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/security/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type SchemaFormat = 'avro' | 'protobuf' | 'json-schema';
|
|
2
|
+
export interface ParsedSchemaField {
|
|
3
|
+
name: string;
|
|
4
|
+
type: string;
|
|
5
|
+
required: boolean;
|
|
6
|
+
nullable?: boolean;
|
|
7
|
+
defaultValue?: string;
|
|
8
|
+
enumValues?: string[];
|
|
9
|
+
fields?: ParsedSchemaField[];
|
|
10
|
+
}
|
|
11
|
+
export interface ParsedSchema {
|
|
12
|
+
name: string;
|
|
13
|
+
format: SchemaFormat;
|
|
14
|
+
sourcePath?: string;
|
|
15
|
+
fields: ParsedSchemaField[];
|
|
16
|
+
raw: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function parseAvroSchema(raw: string, sourcePath?: string): ParsedSchema;
|
|
19
|
+
export declare function parseProtoSchema(raw: string, sourcePath?: string): ParsedSchema;
|
|
20
|
+
export declare function parseJsonSchema(raw: string, sourcePath?: string): ParsedSchema;
|
|
21
|
+
export declare function parseSchemaFile(filePath: string): ParsedSchema | null;
|
|
22
|
+
export declare function discoverSchemaFiles(patterns: string | string[]): Promise<string[]>;
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/streaming/schema/index.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;CACb;AAuED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CAW9E;AAiBD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CA4B/E;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CAoB9E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAOrE;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASxF"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.parseAvroSchema = parseAvroSchema;
|
|
40
|
+
exports.parseProtoSchema = parseProtoSchema;
|
|
41
|
+
exports.parseJsonSchema = parseJsonSchema;
|
|
42
|
+
exports.parseSchemaFile = parseSchemaFile;
|
|
43
|
+
exports.discoverSchemaFiles = discoverSchemaFiles;
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const fast_glob_1 = __importDefault(require("fast-glob"));
|
|
47
|
+
function stringifyDefault(value) {
|
|
48
|
+
if (value === undefined)
|
|
49
|
+
return undefined;
|
|
50
|
+
if (typeof value === 'string')
|
|
51
|
+
return value;
|
|
52
|
+
return JSON.stringify(value);
|
|
53
|
+
}
|
|
54
|
+
function parseAvroFieldType(typeValue) {
|
|
55
|
+
var _a;
|
|
56
|
+
if (Array.isArray(typeValue)) {
|
|
57
|
+
const nonNull = typeValue.filter((entry) => entry !== 'null');
|
|
58
|
+
const parsed = parseAvroFieldType((_a = nonNull[0]) !== null && _a !== void 0 ? _a : 'unknown');
|
|
59
|
+
return { ...parsed, nullable: typeValue.includes('null') };
|
|
60
|
+
}
|
|
61
|
+
if (typeof typeValue === 'string') {
|
|
62
|
+
return { type: typeValue, nullable: false };
|
|
63
|
+
}
|
|
64
|
+
if (!typeValue || typeof typeValue !== 'object') {
|
|
65
|
+
return { type: 'unknown', nullable: false };
|
|
66
|
+
}
|
|
67
|
+
const obj = typeValue;
|
|
68
|
+
const rawType = obj['type'];
|
|
69
|
+
if (rawType === 'enum') {
|
|
70
|
+
return {
|
|
71
|
+
type: 'enum',
|
|
72
|
+
nullable: false,
|
|
73
|
+
enumValues: Array.isArray(obj['symbols']) ? obj['symbols'] : [],
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (rawType === 'record') {
|
|
77
|
+
const nestedFields = Array.isArray(obj['fields']) ? obj['fields'] : [];
|
|
78
|
+
return {
|
|
79
|
+
type: 'record',
|
|
80
|
+
nullable: false,
|
|
81
|
+
fields: nestedFields.map(parseAvroField),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
if (typeof rawType === 'string') {
|
|
85
|
+
return { type: rawType, nullable: false };
|
|
86
|
+
}
|
|
87
|
+
return { type: 'unknown', nullable: false };
|
|
88
|
+
}
|
|
89
|
+
function parseAvroField(field) {
|
|
90
|
+
const parsedType = parseAvroFieldType(field['type']);
|
|
91
|
+
const hasDefault = Object.prototype.hasOwnProperty.call(field, 'default');
|
|
92
|
+
const required = !parsedType.nullable && !hasDefault;
|
|
93
|
+
return {
|
|
94
|
+
name: typeof field['name'] === 'string' ? field['name'] : 'unknown',
|
|
95
|
+
type: parsedType.type,
|
|
96
|
+
required,
|
|
97
|
+
nullable: parsedType.nullable,
|
|
98
|
+
defaultValue: stringifyDefault(field['default']),
|
|
99
|
+
enumValues: parsedType.enumValues,
|
|
100
|
+
fields: parsedType.fields,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function parseAvroSchema(raw, sourcePath) {
|
|
104
|
+
const doc = JSON.parse(raw);
|
|
105
|
+
const fields = Array.isArray(doc['fields']) ? doc['fields'] : [];
|
|
106
|
+
return {
|
|
107
|
+
name: typeof doc['name'] === 'string' ? doc['name'] : path.basename(sourcePath !== null && sourcePath !== void 0 ? sourcePath : 'schema.avsc', '.avsc'),
|
|
108
|
+
format: 'avro',
|
|
109
|
+
sourcePath,
|
|
110
|
+
raw,
|
|
111
|
+
fields: fields.map(parseAvroField),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function parseProtoEnums(raw) {
|
|
115
|
+
const enumMap = new Map();
|
|
116
|
+
const enumRegex = /enum\s+(\w+)\s*\{([\s\S]*?)\}/g;
|
|
117
|
+
let match;
|
|
118
|
+
while ((match = enumRegex.exec(raw)) !== null) {
|
|
119
|
+
const symbols = match[2]
|
|
120
|
+
.split('\n')
|
|
121
|
+
.map((line) => line.trim())
|
|
122
|
+
.filter((line) => /^[A-Z0-9_]+\s*=/.test(line))
|
|
123
|
+
.map((line) => line.split('=')[0].trim());
|
|
124
|
+
enumMap.set(match[1], symbols);
|
|
125
|
+
}
|
|
126
|
+
return enumMap;
|
|
127
|
+
}
|
|
128
|
+
function parseProtoSchema(raw, sourcePath) {
|
|
129
|
+
var _a, _b, _c;
|
|
130
|
+
const enums = parseProtoEnums(raw);
|
|
131
|
+
const messageMatch = raw.match(/message\s+(\w+)\s*\{([\s\S]*?)\}/);
|
|
132
|
+
const body = (_a = messageMatch === null || messageMatch === void 0 ? void 0 : messageMatch[2]) !== null && _a !== void 0 ? _a : '';
|
|
133
|
+
const fieldRegex = /\b(optional|required|repeated)?\s*([\w.<>]+)\s+(\w+)\s*=\s*\d+/g;
|
|
134
|
+
const fields = [];
|
|
135
|
+
let fieldMatch;
|
|
136
|
+
while ((fieldMatch = fieldRegex.exec(body)) !== null) {
|
|
137
|
+
const qualifier = (_b = fieldMatch[1]) !== null && _b !== void 0 ? _b : '';
|
|
138
|
+
const type = fieldMatch[2];
|
|
139
|
+
const name = fieldMatch[3];
|
|
140
|
+
fields.push({
|
|
141
|
+
name,
|
|
142
|
+
type,
|
|
143
|
+
required: qualifier === 'required',
|
|
144
|
+
nullable: qualifier !== 'required',
|
|
145
|
+
enumValues: enums.get(type),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
name: (_c = messageMatch === null || messageMatch === void 0 ? void 0 : messageMatch[1]) !== null && _c !== void 0 ? _c : path.basename(sourcePath !== null && sourcePath !== void 0 ? sourcePath : 'schema.proto', '.proto'),
|
|
150
|
+
format: 'protobuf',
|
|
151
|
+
sourcePath,
|
|
152
|
+
raw,
|
|
153
|
+
fields,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function parseJsonSchema(raw, sourcePath) {
|
|
157
|
+
var _a;
|
|
158
|
+
const doc = JSON.parse(raw);
|
|
159
|
+
const required = new Set(Array.isArray(doc['required']) ? doc['required'] : []);
|
|
160
|
+
const properties = ((_a = doc['properties']) !== null && _a !== void 0 ? _a : {});
|
|
161
|
+
const fields = Object.entries(properties).map(([name, schema]) => ({
|
|
162
|
+
name,
|
|
163
|
+
type: typeof schema['type'] === 'string' ? schema['type'] : 'unknown',
|
|
164
|
+
required: required.has(name),
|
|
165
|
+
nullable: schema['nullable'] === true,
|
|
166
|
+
defaultValue: stringifyDefault(schema['default']),
|
|
167
|
+
enumValues: Array.isArray(schema['enum']) ? schema['enum'].map(String) : undefined,
|
|
168
|
+
}));
|
|
169
|
+
return {
|
|
170
|
+
name: typeof doc['title'] === 'string' ? doc['title'] : path.basename(sourcePath !== null && sourcePath !== void 0 ? sourcePath : 'schema.json'),
|
|
171
|
+
format: 'json-schema',
|
|
172
|
+
sourcePath,
|
|
173
|
+
raw,
|
|
174
|
+
fields,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
function parseSchemaFile(filePath) {
|
|
178
|
+
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
179
|
+
if (filePath.endsWith('.avsc'))
|
|
180
|
+
return parseAvroSchema(raw, filePath);
|
|
181
|
+
if (filePath.endsWith('.proto'))
|
|
182
|
+
return parseProtoSchema(raw, filePath);
|
|
183
|
+
if (filePath.endsWith('.schema.json') || filePath.endsWith('.json'))
|
|
184
|
+
return parseJsonSchema(raw, filePath);
|
|
185
|
+
console.warn(`Skipping unsupported schema file: ${filePath}`);
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
async function discoverSchemaFiles(patterns) {
|
|
189
|
+
const entries = Array.isArray(patterns)
|
|
190
|
+
? patterns
|
|
191
|
+
: patterns
|
|
192
|
+
.split(',')
|
|
193
|
+
.map((entry) => entry.trim())
|
|
194
|
+
.filter(Boolean);
|
|
195
|
+
return (0, fast_glob_1.default)(entries, { absolute: true, onlyFiles: true, unique: true });
|
|
196
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdownRenderer.d.ts","sourceRoot":"","sources":["../../../src/summary/markdownRenderer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAIpE,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,EAAE,EAAE,MAAM,CAAC;IACX,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,QAAQ,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,aAAa,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,qCAAqC;IACrC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,+DAA+D;IAC/D,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,iEAAiE;IACjE,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAChD,mCAAmC;IACnC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,mBAAmB,CAAC,EAAE;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,2BAA2B,EAAE,MAAM,CAAC;QACpC,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClD,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;CACH;AAED,sFAAsF;AACtF,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAID;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"markdownRenderer.d.ts","sourceRoot":"","sources":["../../../src/summary/markdownRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,7 @@ function coverageTypeTitle(type) {
|
|
|
34
34
|
resilience: 'Resilience Coverage',
|
|
35
35
|
compatibility: 'Compatibility & Contract Coverage',
|
|
36
36
|
event: 'Event / Message Coverage',
|
|
37
|
+
unit: 'Unit Test Coverage',
|
|
37
38
|
};
|
|
38
39
|
return (_a = titles[type]) !== null && _a !== void 0 ? _a : `${type.charAt(0).toUpperCase()}${type.slice(1)} Coverage`;
|
|
39
40
|
}
|
|
@@ -61,7 +62,7 @@ function pct(value) {
|
|
|
61
62
|
* Returns up to `limit` bullet items.
|
|
62
63
|
*/
|
|
63
64
|
function extractGaps(result, limit = 10) {
|
|
64
|
-
var _a, _b, _c;
|
|
65
|
+
var _a, _b, _c, _d;
|
|
65
66
|
const uncovered = result.totalItems - result.coveredItems;
|
|
66
67
|
if (uncovered <= 0)
|
|
67
68
|
return [];
|
|
@@ -94,6 +95,19 @@ function extractGaps(result, limit = 10) {
|
|
|
94
95
|
gapCandidates.push(`\`${String(item)}\``);
|
|
95
96
|
}
|
|
96
97
|
}
|
|
98
|
+
const detailItems = details['items'];
|
|
99
|
+
if (Array.isArray(detailItems) && gapCandidates.length === 0) {
|
|
100
|
+
for (const item of detailItems) {
|
|
101
|
+
if (typeof item === 'object' && item !== null && item['covered'] === false) {
|
|
102
|
+
const id = String((_d = item['id']) !== null && _d !== void 0 ? _d : '');
|
|
103
|
+
if (id) {
|
|
104
|
+
gapCandidates.push(`\`${id}\``);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (gapCandidates.length >= limit)
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
97
111
|
// integrationCoverage: details.uncoveredFlows = string[]
|
|
98
112
|
const uncoveredFlows = details['uncoveredFlows'];
|
|
99
113
|
if (Array.isArray(uncoveredFlows) && gapCandidates.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summaryTypes.d.ts","sourceRoot":"","sources":["../../../src/summary/summaryTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,QAAQ,EAAE,OAAO,CAAC;IAClB,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,wDAAwD;IACxD,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,2DAA2D;AAC3D,eAAO,MAAM,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"summaryTypes.d.ts","sourceRoot":"","sources":["../../../src/summary/summaryTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,QAAQ,EAAE,OAAO,CAAC;IAClB,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,wDAAwD;IACxD,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,2DAA2D;AAC3D,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAYtC,CAAC"}
|