@fabasoad/sarif-to-slack 0.2.4 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/.github/workflows/release.yml +1 -1
  2. package/.github/workflows/security.yml +0 -1
  3. package/.github/workflows/send-sarif-to-slack.yml +148 -76
  4. package/.gitleaksignore +8 -0
  5. package/.pre-commit-config.yaml +3 -3
  6. package/.tool-versions +1 -1
  7. package/dist/Logger.js +4 -1
  8. package/dist/SarifToSlackClient.d.ts +33 -0
  9. package/dist/SarifToSlackClient.d.ts.map +1 -0
  10. package/dist/SarifToSlackClient.js +178 -0
  11. package/dist/SlackMessageBuilder.js +34 -82
  12. package/dist/System.d.ts +2 -0
  13. package/dist/System.d.ts.map +1 -0
  14. package/dist/System.js +15 -0
  15. package/dist/index.cjs +843 -467
  16. package/dist/index.d.ts +35 -12
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +36 -12
  19. package/dist/model/Color.d.ts +70 -0
  20. package/dist/model/Color.d.ts.map +1 -0
  21. package/dist/model/Color.js +119 -0
  22. package/dist/model/Finding.d.ts +2 -0
  23. package/dist/model/Finding.d.ts.map +1 -0
  24. package/dist/model/Finding.js +93 -0
  25. package/dist/model/FindingsArray.d.ts +2 -0
  26. package/dist/model/FindingsArray.d.ts.map +1 -0
  27. package/dist/model/FindingsArray.js +24 -0
  28. package/dist/processors/CodeQLProcessor.d.ts +2 -0
  29. package/dist/processors/CodeQLProcessor.d.ts.map +1 -0
  30. package/dist/processors/CodeQLProcessor.js +17 -0
  31. package/dist/processors/CommonProcessor.d.ts +2 -0
  32. package/dist/processors/CommonProcessor.d.ts.map +1 -0
  33. package/dist/processors/CommonProcessor.js +84 -0
  34. package/dist/processors/ProcessorFactory.d.ts +2 -0
  35. package/dist/processors/ProcessorFactory.d.ts.map +1 -0
  36. package/dist/processors/ProcessorFactory.js +22 -0
  37. package/dist/processors/SnykProcessor.d.ts +2 -0
  38. package/dist/processors/SnykProcessor.d.ts.map +1 -0
  39. package/dist/processors/SnykProcessor.js +18 -0
  40. package/dist/representations/CompactGroupByRepresentation.d.ts +2 -0
  41. package/dist/representations/CompactGroupByRepresentation.d.ts.map +1 -0
  42. package/dist/representations/CompactGroupByRepresentation.js +58 -0
  43. package/dist/representations/CompactGroupByRunPerLevelRepresentation.d.ts +2 -0
  44. package/dist/representations/CompactGroupByRunPerLevelRepresentation.d.ts.map +1 -0
  45. package/dist/representations/CompactGroupByRunPerLevelRepresentation.js +13 -0
  46. package/dist/representations/CompactGroupByRunPerSeverityRepresentation.d.ts +2 -0
  47. package/dist/representations/CompactGroupByRunPerSeverityRepresentation.d.ts.map +1 -0
  48. package/dist/representations/CompactGroupByRunPerSeverityRepresentation.js +13 -0
  49. package/dist/representations/CompactGroupByRunRepresentation.d.ts +2 -0
  50. package/dist/representations/CompactGroupByRunRepresentation.d.ts.map +1 -0
  51. package/dist/representations/CompactGroupByRunRepresentation.js +39 -0
  52. package/dist/representations/CompactGroupBySarifPerLevelRepresentation.d.ts +2 -0
  53. package/dist/representations/CompactGroupBySarifPerLevelRepresentation.d.ts.map +1 -0
  54. package/dist/representations/CompactGroupBySarifPerLevelRepresentation.js +13 -0
  55. package/dist/representations/CompactGroupBySarifPerSeverityRepresentation.d.ts +2 -0
  56. package/dist/representations/CompactGroupBySarifPerSeverityRepresentation.d.ts.map +1 -0
  57. package/dist/representations/CompactGroupBySarifPerSeverityRepresentation.js +13 -0
  58. package/dist/representations/CompactGroupBySarifRepresentation.d.ts +2 -0
  59. package/dist/representations/CompactGroupBySarifRepresentation.d.ts.map +1 -0
  60. package/dist/representations/CompactGroupBySarifRepresentation.js +40 -0
  61. package/dist/representations/CompactGroupByToolNamePerLevelRepresentation.d.ts +2 -0
  62. package/dist/representations/CompactGroupByToolNamePerLevelRepresentation.d.ts.map +1 -0
  63. package/dist/representations/CompactGroupByToolNamePerLevelRepresentation.js +13 -0
  64. package/dist/representations/CompactGroupByToolNamePerSeverityRepresentation.d.ts +2 -0
  65. package/dist/representations/CompactGroupByToolNamePerSeverityRepresentation.d.ts.map +1 -0
  66. package/dist/representations/CompactGroupByToolNamePerSeverityRepresentation.js +13 -0
  67. package/dist/representations/CompactGroupByToolNameRepresentation.d.ts +2 -0
  68. package/dist/representations/CompactGroupByToolNameRepresentation.d.ts.map +1 -0
  69. package/dist/representations/CompactGroupByToolNameRepresentation.js +39 -0
  70. package/dist/representations/CompactTotalPerLevelRepresentation.d.ts +2 -0
  71. package/dist/representations/CompactTotalPerLevelRepresentation.d.ts.map +1 -0
  72. package/dist/representations/CompactTotalPerLevelRepresentation.js +13 -0
  73. package/dist/representations/CompactTotalPerSeverityRepresentation.d.ts +2 -0
  74. package/dist/representations/CompactTotalPerSeverityRepresentation.d.ts.map +1 -0
  75. package/dist/representations/CompactTotalPerSeverityRepresentation.js +13 -0
  76. package/dist/representations/CompactTotalRepresentation.d.ts +2 -0
  77. package/dist/representations/CompactTotalRepresentation.d.ts.map +1 -0
  78. package/dist/representations/CompactTotalRepresentation.js +25 -0
  79. package/dist/representations/Representation.d.ts +2 -0
  80. package/dist/representations/Representation.d.ts.map +1 -0
  81. package/dist/representations/Representation.js +28 -0
  82. package/dist/representations/RepresentationFactory.d.ts +2 -0
  83. package/dist/representations/RepresentationFactory.d.ts.map +1 -0
  84. package/dist/representations/RepresentationFactory.js +37 -0
  85. package/dist/sarif-to-slack.d.ts +337 -85
  86. package/dist/tsdoc-metadata.json +1 -1
  87. package/dist/types.d.ts +215 -51
  88. package/dist/types.d.ts.map +1 -1
  89. package/dist/types.js +225 -33
  90. package/dist/utils/Comparators.d.ts +2 -0
  91. package/dist/utils/Comparators.d.ts.map +1 -0
  92. package/dist/utils/Comparators.js +18 -0
  93. package/dist/utils/ExtendedArray.d.ts +2 -0
  94. package/dist/utils/ExtendedArray.d.ts.map +1 -0
  95. package/dist/utils/ExtendedArray.js +11 -0
  96. package/dist/utils/FileUtils.d.ts +2 -0
  97. package/dist/utils/FileUtils.d.ts.map +1 -0
  98. package/dist/utils/FileUtils.js +51 -0
  99. package/dist/utils/SarifUtils.js +19 -53
  100. package/etc/sarif-to-slack.api.md +161 -99
  101. package/jest.config.json +2 -2
  102. package/package.json +9 -9
  103. package/scripts/save-metadata.sh +15 -0
  104. package/src/Logger.ts +4 -0
  105. package/src/SarifToSlackClient.ts +202 -0
  106. package/src/SlackMessageBuilder.ts +35 -115
  107. package/src/System.ts +16 -0
  108. package/src/index.ts +47 -20
  109. package/src/model/Color.ts +201 -0
  110. package/src/model/Finding.ts +137 -0
  111. package/src/model/FindingsArray.ts +27 -0
  112. package/src/processors/CodeQLProcessor.ts +19 -0
  113. package/src/processors/CommonProcessor.ts +103 -0
  114. package/src/processors/ProcessorFactory.ts +23 -0
  115. package/src/processors/SnykProcessor.ts +19 -0
  116. package/src/representations/CompactGroupByRepresentation.ts +67 -0
  117. package/src/representations/CompactGroupByRunPerLevelRepresentation.ts +14 -0
  118. package/src/representations/CompactGroupByRunPerSeverityRepresentation.ts +14 -0
  119. package/src/representations/CompactGroupByRunRepresentation.ts +44 -0
  120. package/src/representations/CompactGroupBySarifPerLevelRepresentation.ts +15 -0
  121. package/src/representations/CompactGroupBySarifPerSeverityRepresentation.ts +15 -0
  122. package/src/representations/CompactGroupBySarifRepresentation.ts +45 -0
  123. package/src/representations/CompactGroupByToolNamePerLevelRepresentation.ts +15 -0
  124. package/src/representations/CompactGroupByToolNamePerSeverityRepresentation.ts +15 -0
  125. package/src/representations/CompactGroupByToolNameRepresentation.ts +44 -0
  126. package/src/representations/CompactTotalPerLevelRepresentation.ts +14 -0
  127. package/src/representations/CompactTotalPerSeverityRepresentation.ts +14 -0
  128. package/src/representations/CompactTotalRepresentation.ts +27 -0
  129. package/src/representations/Representation.ts +35 -0
  130. package/src/representations/RepresentationFactory.ts +49 -0
  131. package/src/types.ts +270 -53
  132. package/src/utils/Comparators.ts +19 -0
  133. package/src/utils/ExtendedArray.ts +11 -0
  134. package/src/utils/FileUtils.ts +60 -0
  135. package/src/utils/SarifUtils.ts +19 -71
  136. package/test-data/sarif/codeql-python.sarif +1448 -1
  137. package/test-data/sarif/codeql-typescript.sarif +3474 -1
  138. package/test-data/sarif/grype-github-actions.sarif +65 -0
  139. package/test-data/sarif/osv-scanner-composer.sarif +972 -0
  140. package/test-data/sarif/osv-scanner-container.sarif +2278 -0
  141. package/test-data/sarif/osv-scanner-gomodules.sarif +813 -0
  142. package/test-data/sarif/osv-scanner-hex.sarif +147 -0
  143. package/test-data/sarif/osv-scanner-maven.sarif +171 -0
  144. package/test-data/sarif/osv-scanner-npm.sarif +627 -0
  145. package/test-data/sarif/osv-scanner-pip.sarif +206 -0
  146. package/test-data/sarif/osv-scanner-pipenv.sarif +243 -0
  147. package/test-data/sarif/osv-scanner-pnpm.sarif +174 -0
  148. package/test-data/sarif/osv-scanner-poetry.sarif +1893 -0
  149. package/test-data/sarif/osv-scanner-rubygems.sarif +402 -0
  150. package/test-data/sarif/osv-scanner-uv.sarif +206 -0
  151. package/test-data/sarif/osv-scanner-yarn.sarif +5207 -0
  152. package/test-data/sarif/runs-0.sarif +5 -0
  153. package/test-data/sarif/runs-2-tools-2-results-0.sarif +1 -1
  154. package/test-data/sarif/runs-2-tools-2.sarif +1 -1
  155. package/test-data/sarif/runs-3-tools-2-results-0.sarif +1 -1
  156. package/test-data/sarif/runs-3-tools-2.sarif +1 -1
  157. package/test-data/sarif/tmp/codeql-csharp.sarif +1 -0
  158. package/test-data/sarif/tmp/grype-container.sarif +1774 -0
  159. package/test-data/sarif/tmp/runs-1-tools-1-results-0.sarif +18 -0
  160. package/test-data/sarif/tmp/runs-2-tools-2.sarif +686 -0
  161. package/test-data/sarif/trivy-iac.sarif +1 -1
  162. package/tests/integration/SendSarifToSlack.spec.ts +95 -27
  163. package/tsconfig.json +2 -0
  164. package/dist/Processors.d.ts +0 -2
  165. package/dist/Processors.d.ts.map +0 -1
  166. package/dist/Processors.js +0 -61
  167. package/dist/SarifToSlackService.d.ts +0 -39
  168. package/dist/SarifToSlackService.d.ts.map +0 -1
  169. package/dist/SarifToSlackService.js +0 -102
  170. package/dist/model/SarifModelPerRun.d.ts +0 -2
  171. package/dist/model/SarifModelPerRun.d.ts.map +0 -1
  172. package/dist/model/SarifModelPerRun.js +0 -90
  173. package/dist/model/SarifModelPerSarif.d.ts +0 -2
  174. package/dist/model/SarifModelPerSarif.d.ts.map +0 -1
  175. package/dist/model/SarifModelPerSarif.js +0 -102
  176. package/dist/model/types.d.ts +0 -2
  177. package/dist/model/types.d.ts.map +0 -1
  178. package/dist/model/types.js +0 -49
  179. package/dist/utils/SortUtils.d.ts +0 -2
  180. package/dist/utils/SortUtils.d.ts.map +0 -1
  181. package/dist/utils/SortUtils.js +0 -20
  182. package/dist/version.d.ts +0 -2
  183. package/dist/version.d.ts.map +0 -1
  184. package/dist/version.js +0 -11
  185. package/scripts/save-version.sh +0 -13
  186. package/src/Processors.ts +0 -68
  187. package/src/SarifToSlackService.ts +0 -115
  188. package/src/model/SarifModelPerRun.ts +0 -123
  189. package/src/model/SarifModelPerSarif.ts +0 -126
  190. package/src/model/types.ts +0 -50
  191. package/src/utils/SortUtils.ts +0 -33
  192. package/src/version.ts +0 -10
  193. package/tests/Processors.spec.ts +0 -76
@@ -126,7 +126,7 @@
126
126
  "columnKind": "utf16CodeUnits",
127
127
  "originalUriBaseIds": {
128
128
  "ROOTPATH": {
129
- "uri": "file:///Users/john.doe/Source/personal/business-card-deployment/"
129
+ "uri": "file:///Users/john.doe/projects/business-card-deployment/"
130
130
  }
131
131
  }
132
132
  }
@@ -1,26 +1,12 @@
1
1
  import {
2
- CalculateResultsBy,
3
- GroupResultsBy,
2
+ Color,
4
3
  LogLevel,
5
- SarifToSlackService
4
+ RepresentationType,
5
+ SarifToSlackClient,
6
+ SendIf
6
7
  } from '../../src'
7
8
 
8
- function groupByMap(groupBy?: string): GroupResultsBy {
9
- switch (groupBy) {
10
- case 'Tool name': return GroupResultsBy.ToolName
11
- case 'Run': return GroupResultsBy.Run
12
- default: return GroupResultsBy.Total
13
- }
14
- }
15
-
16
- function calculateByMap(calculateBy?: string): CalculateResultsBy {
17
- switch (calculateBy) {
18
- case 'Level': return CalculateResultsBy.Level
19
- default: return CalculateResultsBy.Severity
20
- }
21
- }
22
-
23
- describe('(integration): SendSarifToSlack', () => {
9
+ describe('(integration): SendSarifToSlack', (): void => {
24
10
  function processLogLevel(logLevel?: string): LogLevel | undefined {
25
11
  if (!logLevel) {
26
12
  return undefined
@@ -45,13 +31,97 @@ describe('(integration): SendSarifToSlack', () => {
45
31
  }
46
32
  }
47
33
 
34
+ function processRepresentationType(representation?: string): RepresentationType | undefined {
35
+ if (representation == null) {
36
+ return undefined
37
+ }
38
+
39
+ switch (representation.toLowerCase()) {
40
+ case 'compact-group-by-run-per-level':
41
+ return RepresentationType.CompactGroupByRunPerLevel
42
+ case 'compact-group-by-run-per-severity':
43
+ return RepresentationType.CompactGroupByRunPerSeverity
44
+ case 'compact-group-by-tool-name-per-level':
45
+ return RepresentationType.CompactGroupByToolNamePerLevel
46
+ case 'compact-group-by-tool-name-per-severity':
47
+ return RepresentationType.CompactGroupByToolNamePerSeverity
48
+ case 'compact-group-by-sarif-per-level':
49
+ return RepresentationType.CompactGroupBySarifPerLevel
50
+ case 'compact-group-by-sarif-per-severity':
51
+ return RepresentationType.CompactGroupBySarifPerSeverity
52
+ case 'compact-total-per-level':
53
+ return RepresentationType.CompactTotalPerLevel
54
+ case 'compact-total-per-severity':
55
+ return RepresentationType.CompactTotalPerSeverity
56
+ default:
57
+ return undefined
58
+ }
59
+ }
60
+
61
+ function processSendIf(sendIf?: string): SendIf | undefined {
62
+ if (sendIf == null) {
63
+ return undefined
64
+ }
65
+
66
+ switch (sendIf.toLowerCase()) {
67
+ case 'severity-critical': return SendIf.SeverityCritical
68
+ case 'severity-high': return SendIf.SeverityHigh
69
+ case 'severity-high-or-higher': return SendIf.SeverityHighOrHigher
70
+ case 'severity-medium': return SendIf.SeverityMedium
71
+ case 'severity-medium-or-higher': return SendIf.SeverityMediumOrHigher
72
+ case 'severity-low': return SendIf.SeverityLow
73
+ case 'severity-low-or-higher': return SendIf.SeverityLowOrHigher
74
+ case 'severity-none': return SendIf.SeverityNone
75
+ case 'severity-none-or-higher': return SendIf.SeverityNoneOrHigher
76
+ case 'severity-unknown': return SendIf.SeverityUnknown
77
+ case 'severity-unknown-or-higher': return SendIf.SeverityUnknownOrHigher
78
+ case 'level-error': return SendIf.LevelError
79
+ case 'level-warning': return SendIf.LevelWarning
80
+ case 'level-warning-or-higher': return SendIf.LevelWarningOrHigher
81
+ case 'level-note': return SendIf.LevelNote
82
+ case 'level-note-or-higher': return SendIf.LevelNoteOrHigher
83
+ case 'level-none': return SendIf.LevelNone
84
+ case 'level-none-or-higher': return SendIf.LevelNoneOrHigher
85
+ case 'level-unknown': return SendIf.LevelUnknown
86
+ case 'level-unknown-or-higher': return SendIf.LevelUnknownOrHigher
87
+ case 'always': return SendIf.Always
88
+ case 'some': return SendIf.Some
89
+ case 'empty': return SendIf.Empty
90
+ case 'never': return SendIf.Never
91
+ default: return undefined
92
+ }
93
+ }
94
+
48
95
  test('Should send Sarif to Slack', async () => {
49
- const sarifToSlackService: SarifToSlackService = await SarifToSlackService.create({
96
+ const client: SarifToSlackClient = await SarifToSlackClient.create({
50
97
  webhookUrl: process.env.SARIF_TO_SLACK_WEBHOOK_URL as string,
51
98
  username: process.env.SARIF_TO_SLACK_USERNAME,
52
99
  iconUrl: process.env.SARIF_TO_SLACK_ICON_URL,
53
- color: process.env.SARIF_TO_SLACK_COLOR,
54
- sarifPath: `./test-data/sarif/${process.env.SARIF_TO_SLACK_SARIF_FILE_NAME}`,
100
+ color: process.env.SARIF_TO_SLACK_COLOR
101
+ ? new Color(process.env.SARIF_TO_SLACK_COLOR)
102
+ : {
103
+ // byLevel: {
104
+ // error: new Color(process.env.SARIF_TO_SLACK_COLOR_ERROR),
105
+ // warning: new Color(process.env.SARIF_TO_SLACK_COLOR_WARNING),
106
+ // note: new Color(process.env.SARIF_TO_SLACK_COLOR_NOTE),
107
+ // none: new Color(process.env.SARIF_TO_SLACK_COLOR_NONE),
108
+ // unknown: new Color(process.env.SARIF_TO_SLACK_COLOR_UNKNOWN),
109
+ // empty: new Color(process.env.SARIF_TO_SLACK_COLOR_EMPTY),
110
+ // },
111
+ bySeverity: {
112
+ critical: new Color(process.env.SARIF_TO_SLACK_COLOR_CRITICAL),
113
+ high: new Color(process.env.SARIF_TO_SLACK_COLOR_HIGH),
114
+ medium: new Color(process.env.SARIF_TO_SLACK_COLOR_MEDIUM),
115
+ low: new Color(process.env.SARIF_TO_SLACK_COLOR_LOW),
116
+ none: new Color(process.env.SARIF_TO_SLACK_COLOR_NONE),
117
+ unknown: new Color(process.env.SARIF_TO_SLACK_COLOR_UNKNOWN),
118
+ empty: new Color(process.env.SARIF_TO_SLACK_COLOR_EMPTY),
119
+ },
120
+ },
121
+ sarif: {
122
+ path: process.env.SARIF_TO_SLACK_SARIF_PATH as string,
123
+ recursive: true,
124
+ },
55
125
  log: {
56
126
  level: processLogLevel(process.env.SARIF_TO_SLACK_LOG_LEVEL),
57
127
  },
@@ -70,11 +140,9 @@ describe('(integration): SendSarifToSlack', () => {
70
140
  run: {
71
141
  include: Boolean(process.env.SARIF_TO_SLACK_INCLUDE_RUN),
72
142
  },
73
- output: {
74
- groupBy: groupByMap(process.env.SARIF_TO_SLACK_GROUP_BY),
75
- calculateBy: calculateByMap(process.env.SARIF_TO_SLACK_CALCULATE_BY),
76
- }
143
+ representation: processRepresentationType(process.env.SARIF_TO_SLACK_REPRESENTATION),
144
+ sendIf: processSendIf(process.env.SARIF_TO_SLACK_SEND_IF),
77
145
  })
78
- await sarifToSlackService.sendAll()
146
+ await client.send()
79
147
  })
80
148
  })
package/tsconfig.json CHANGED
@@ -19,10 +19,12 @@
19
19
  "newLine": "lf",
20
20
  "noFallthroughCasesInSwitch": true,
21
21
  "noImplicitAny": true,
22
+ "noImplicitOverride": true,
22
23
  "noImplicitThis": true,
23
24
  "noUnusedLocals": true,
24
25
  "noUnusedParameters": true,
25
26
  "outDir": "dist",
27
+ "resolveJsonModule": true,
26
28
  "skipLibCheck": true,
27
29
  "strict": true,
28
30
  "stripInternal": true,
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=Processors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Processors.d.ts","sourceRoot":"","sources":["../src/Processors.ts"],"names":[],"mappings":""}
@@ -1,61 +0,0 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
- import Logger from './Logger';
4
- /**
5
- * Processes a color string and converts it to a specific hex code if it matches
6
- * a CI status identifier.
7
- * @param color - The color string to process, which can be a CI status identifier
8
- * or a custom color.
9
- * @returns The processed color as a hex string or undefined if the input is not
10
- * a recognized CI status identifier.
11
- * @internal
12
- */
13
- export function processColor(color) {
14
- switch (color) {
15
- case 'success':
16
- Logger.info(`Converting "${color}" to #008000`);
17
- return '#008000';
18
- case 'failure':
19
- Logger.info(`Converting "${color}" to #ff0000`);
20
- return '#ff0000';
21
- case 'cancelled':
22
- Logger.info(`Converting "${color}" to #0047ab`);
23
- return '#0047ab';
24
- case 'skipped':
25
- Logger.info(`Converting "${color}" to #808080`);
26
- return '#808080';
27
- default:
28
- Logger.debug(`"${color}" color is not a CI status identifier. Returning as is.`);
29
- return color;
30
- }
31
- }
32
- /**
33
- * Processes the SARIF path, which can be a file or a directory. If it's a
34
- * directory, it returns an array of paths to all `.sarif` files, otherwise it
35
- * returns an array with a single path to the file.
36
- * @param sarifPath - The path to the SARIF file or directory.
37
- * @returns An array of strings representing the paths to the SARIF files.
38
- * @throws Error If the path does not exist, or if it is neither a file nor a
39
- * directory.
40
- * @internal
41
- */
42
- export function processSarifPath(sarifPath) {
43
- if (!fs.existsSync(sarifPath)) {
44
- throw new Error(`"sarif-path" does not exist: ${sarifPath}`);
45
- }
46
- const sarifStats = fs.statSync(sarifPath);
47
- if (sarifStats.isDirectory()) {
48
- Logger.info(`"sarif-path" is a directory: ${sarifPath}`);
49
- const files = fs.readdirSync(sarifPath);
50
- const filteredFiles = files.filter((file) => path.extname(file).toLowerCase() === '.sarif');
51
- Logger.info(`Found ${filteredFiles.length} SARIF files in ${sarifPath} directory`);
52
- Logger.debug(`Filtered SARIF files: ${filteredFiles.join(', ')}`);
53
- return filteredFiles.map((file) => path.join(sarifPath, file));
54
- }
55
- if (sarifStats.isFile()) {
56
- Logger.info(`"sarif-path" is a file: ${sarifPath}`);
57
- return [sarifPath];
58
- }
59
- throw new Error(`"sarif-path" is neither a file nor a directory: ${sarifPath}`);
60
- }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvY2Vzc29ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Qcm9jZXNzb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ3hCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQzVCLE9BQU8sTUFBTSxNQUFNLFVBQVUsQ0FBQTtBQUU3Qjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYztJQUN6QyxRQUFRLEtBQUssRUFBRSxDQUFDO1FBQ2QsS0FBSyxTQUFTO1lBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYyxDQUFDLENBQUE7WUFDL0MsT0FBTyxTQUFTLENBQUE7UUFDbEIsS0FBSyxTQUFTO1lBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYyxDQUFDLENBQUE7WUFDL0MsT0FBTyxTQUFTLENBQUE7UUFDbEIsS0FBSyxXQUFXO1lBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYyxDQUFDLENBQUE7WUFDL0MsT0FBTyxTQUFTLENBQUE7UUFDbEIsS0FBSyxTQUFTO1lBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYyxDQUFDLENBQUE7WUFDL0MsT0FBTyxTQUFTLENBQUE7UUFDbEI7WUFDRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyx5REFBeUQsQ0FBQyxDQUFBO1lBQ2hGLE9BQU8sS0FBSyxDQUFBO0lBQ2hCLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFNBQWlCO0lBQ2hELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsU0FBUyxFQUFFLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUVuRCxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDeEQsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNqRCxNQUFNLGFBQWEsR0FBYSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLENBQzlDLENBQUE7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsYUFBYSxDQUFDLE1BQU0sbUJBQW1CLFNBQVMsWUFBWSxDQUFDLENBQUE7UUFDbEYsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDakUsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDbkQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3BCLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxTQUFTLEVBQUUsQ0FBQyxDQUFBO0FBQ2pGLENBQUMifQ==
@@ -1,39 +0,0 @@
1
- import { SarifToSlackServiceOptions, SlackMessage } from './types';
2
- /**
3
- * Service to convert SARIF files to Slack messages and send them.
4
- * @public
5
- */
6
- export declare class SarifToSlackService {
7
- private readonly _slackMessages;
8
- private constructor();
9
- /**
10
- * Gets the Slack messages prepared for each SARIF file.
11
- * @returns A read-only map where keys are SARIF file paths and values are SlackMessage instances.
12
- * @public
13
- */
14
- get slackMessages(): ReadonlyMap<string, SlackMessage>;
15
- /**
16
- * Creates an instance of SarifToSlackService.
17
- * @param opts - Options for the service, including webhook URL, SARIF path, and other configurations.
18
- * @returns A promise that resolves to an instance of SarifToSlackService.
19
- * @throws Error if no SARIF files are found at the provided path.
20
- * @public
21
- */
22
- static create(opts: SarifToSlackServiceOptions): Promise<SarifToSlackService>;
23
- /**
24
- * Sends all prepared Slack messages.
25
- * @returns A promise that resolves when all messages have been sent.
26
- * @throws Error if a Slack message was not prepared for a SARIF path.
27
- * @public
28
- */
29
- sendAll(): Promise<void>;
30
- /**
31
- * Sends a Slack message for a specific SARIF path.
32
- * @param sarifPath - The path of the SARIF file for which the message should be sent.
33
- * @returns A promise that resolves when the message has been sent.
34
- * @throws Error if a Slack message was not prepared for the given SARIF path.
35
- * @public
36
- */
37
- send(sarifPath: string): Promise<void>;
38
- }
39
- //# sourceMappingURL=SarifToSlackService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SarifToSlackService.d.ts","sourceRoot":"","sources":["../src/SarifToSlackService.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,0BAA0B,EAC1B,YAAY,EACb,MAAM,SAAS,CAAA;AA4ChB;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAE3D,OAAO;IAIP;;;;OAIG;IACH,IAAW,aAAa,IAAI,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAE5D;IAED;;;;;;OAMG;WACiB,MAAM,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAQ1F;;;;;OAKG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrC;;;;;;OAMG;IACU,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQpD"}
@@ -1,102 +0,0 @@
1
- import { promises as fs } from 'fs';
2
- import Logger from './Logger';
3
- import { processColor, processSarifPath } from './Processors';
4
- import { SlackMessageBuilder } from './SlackMessageBuilder';
5
- /**
6
- * The main function to initialize a list of {@link SlackMessage} objects based
7
- * on the given SARIF file(s).
8
- * @param opts An instance of {@link SarifToSlackServiceOptions} object.
9
- * @returns A map where key is the SARIF file and value is an instance of
10
- * {@link SlackMessage} object
11
- * @private
12
- */
13
- async function initialize(opts) {
14
- const slackMessages = new Map();
15
- const sarifFiles = processSarifPath(opts.sarifPath);
16
- if (sarifFiles.length === 0) {
17
- throw new Error(`No SARIF files found at the provided path: ${opts.sarifPath}`);
18
- }
19
- for (const sarifFile of sarifFiles) {
20
- const jsonString = await fs.readFile(sarifFile, 'utf8');
21
- const messageBuilder = new SlackMessageBuilder(opts.webhookUrl, {
22
- username: opts.username,
23
- iconUrl: opts.iconUrl,
24
- color: processColor(opts.color),
25
- sarif: JSON.parse(jsonString),
26
- output: opts.output,
27
- });
28
- if (opts.header?.include) {
29
- messageBuilder.withHeader(opts.header?.value);
30
- }
31
- if (opts.footer?.include) {
32
- messageBuilder.withFooter(opts.footer?.value, opts.footer?.type);
33
- }
34
- if (opts.actor?.include) {
35
- messageBuilder.withActor(opts.actor?.value);
36
- }
37
- if (opts.run?.include) {
38
- messageBuilder.withRun();
39
- }
40
- slackMessages.set(sarifFile, messageBuilder);
41
- }
42
- return slackMessages;
43
- }
44
- /**
45
- * Service to convert SARIF files to Slack messages and send them.
46
- * @public
47
- */
48
- export class SarifToSlackService {
49
- _slackMessages;
50
- constructor() {
51
- this._slackMessages = new Map();
52
- }
53
- /**
54
- * Gets the Slack messages prepared for each SARIF file.
55
- * @returns A read-only map where keys are SARIF file paths and values are SlackMessage instances.
56
- * @public
57
- */
58
- get slackMessages() {
59
- return this._slackMessages;
60
- }
61
- /**
62
- * Creates an instance of SarifToSlackService.
63
- * @param opts - Options for the service, including webhook URL, SARIF path, and other configurations.
64
- * @returns A promise that resolves to an instance of SarifToSlackService.
65
- * @throws Error if no SARIF files are found at the provided path.
66
- * @public
67
- */
68
- static async create(opts) {
69
- Logger.initialize(opts.log);
70
- const instance = new SarifToSlackService();
71
- const map = await initialize(opts);
72
- map.forEach((val, key) => instance._slackMessages.set(key, val));
73
- return instance;
74
- }
75
- /**
76
- * Sends all prepared Slack messages.
77
- * @returns A promise that resolves when all messages have been sent.
78
- * @throws Error if a Slack message was not prepared for a SARIF path.
79
- * @public
80
- */
81
- async sendAll() {
82
- for (const sarifPath of this._slackMessages.keys()) {
83
- await this.send(sarifPath);
84
- }
85
- }
86
- /**
87
- * Sends a Slack message for a specific SARIF path.
88
- * @param sarifPath - The path of the SARIF file for which the message should be sent.
89
- * @returns A promise that resolves when the message has been sent.
90
- * @throws Error if a Slack message was not prepared for the given SARIF path.
91
- * @public
92
- */
93
- async send(sarifPath) {
94
- const message = this._slackMessages.get(sarifPath);
95
- if (!message) {
96
- throw new Error(`Slack message was not prepared for SARIF path: ${sarifPath}.`);
97
- }
98
- const text = await message.send();
99
- Logger.info(`Message sent for ${sarifPath} file. Status:`, text);
100
- }
101
- }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2FyaWZUb1NsYWNrU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9TYXJpZlRvU2xhY2tTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLElBQUksRUFBRSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BDLE9BQU8sTUFBTSxNQUFNLFVBQVUsQ0FBQTtBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBTzNEOzs7Ozs7O0dBT0c7QUFDSCxLQUFLLFVBQVUsVUFBVSxDQUFDLElBQWdDO0lBQ3hELE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBQ3RELE1BQU0sVUFBVSxHQUFhLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUM3RCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7SUFDakYsQ0FBQztJQUVELEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7UUFDbkMsTUFBTSxVQUFVLEdBQVcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUUvRCxNQUFNLGNBQWMsR0FBRyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDOUQsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixLQUFLLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFhO1lB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
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=SarifModelPerRun.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SarifModelPerRun.d.ts","sourceRoot":"","sources":["../../src/model/SarifModelPerRun.ts"],"names":[],"mappings":""}
@@ -1,90 +0,0 @@
1
- import { findToolComponentByResult, tryGetRulePropertyByResult } from '../utils/SarifUtils';
2
- import { SecurityLevel, SecuritySeverity } from './types';
3
- import Logger from '../Logger';
4
- import { Map as ImmutableMap } from 'immutable';
5
- import { sortSecurityLevelMap, sortSecuritySeverityMap } from '../utils/SortUtils';
6
- /**
7
- * This class keeps information about results per run. It has 2 hash maps:
8
- * - severity to number: the amount of results for each severity
9
- * - level to number: the amount of results for each level
10
- * @internal
11
- */
12
- export class SarifModelPerRun {
13
- toolName;
14
- _securitySeverityMap;
15
- _securityLevelMap;
16
- constructor(run) {
17
- this.toolName = findToolComponentByResult(run, run.results?.[0]).name;
18
- this._securitySeverityMap = ImmutableMap().asMutable();
19
- this._securityLevelMap = ImmutableMap().asMutable();
20
- this.buildSecuritySeverityMap(run);
21
- this.buildSecurityLevelMap(run);
22
- }
23
- identifySecuritySeverity(score) {
24
- if (score === undefined) {
25
- return SecuritySeverity.Unknown;
26
- }
27
- if (score >= 9 && score <= 10) {
28
- return SecuritySeverity.Critical;
29
- }
30
- if (score >= 7) {
31
- return SecuritySeverity.High;
32
- }
33
- if (score >= 4) {
34
- return SecuritySeverity.Medium;
35
- }
36
- if (score >= 0.1) {
37
- return SecuritySeverity.Low;
38
- }
39
- if (score == 0) {
40
- return SecuritySeverity.None;
41
- }
42
- Logger.warn(`Unsupported "${score}" security severity. Saving as "Unknown".`);
43
- return SecuritySeverity.Unknown;
44
- }
45
- identifySecurityLevel(level) {
46
- if (level === undefined) {
47
- return SecurityLevel.Unknown;
48
- }
49
- if (level.toLowerCase() === 'error') {
50
- return SecurityLevel.Error;
51
- }
52
- if (level.toLowerCase() === 'warning') {
53
- return SecurityLevel.Warning;
54
- }
55
- if (level.toLowerCase() === 'note') {
56
- return SecurityLevel.Note;
57
- }
58
- Logger.warn(`Unsupported ${level} security level. Saving as "Unknown".`);
59
- return SecurityLevel.Unknown;
60
- }
61
- buildSecuritySeverityMap(run) {
62
- const results = run.results ?? [];
63
- for (const result of results) {
64
- const severity = this.identifySecuritySeverity(tryGetRulePropertyByResult(run, result, 'security-severity'));
65
- const count = this._securitySeverityMap.get(severity) || 0;
66
- this._securitySeverityMap.set(severity, count + 1);
67
- }
68
- }
69
- tryGetSecurityLevel(run, result) {
70
- if (result.level) {
71
- return result.level;
72
- }
73
- return tryGetRulePropertyByResult(run, result, 'problem.severity');
74
- }
75
- buildSecurityLevelMap(run) {
76
- const results = run.results ?? [];
77
- for (const result of results) {
78
- const level = this.identifySecurityLevel(this.tryGetSecurityLevel(run, result));
79
- const count = this._securityLevelMap.get(level) || 0;
80
- this._securityLevelMap.set(level, count + 1);
81
- }
82
- }
83
- get securitySeverityMap() {
84
- return sortSecuritySeverityMap(this._securitySeverityMap);
85
- }
86
- get securityLevelMap() {
87
- return sortSecurityLevelMap(this._securityLevelMap);
88
- }
89
- }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2FyaWZNb2RlbFBlclJ1bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9TYXJpZk1vZGVsUGVyUnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzNCLE1BQU0scUJBQXFCLENBQUE7QUFDNUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN6RCxPQUFPLE1BQU0sTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxFQUFFLEdBQUcsSUFBSSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDL0MsT0FBTyxFQUNMLG9CQUFvQixFQUNwQix1QkFBdUIsRUFDeEIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1Qjs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFDWCxRQUFRLENBQVE7SUFFZixvQkFBb0IsQ0FBd0M7SUFDNUQsaUJBQWlCLENBQXFDO0lBRXZFLFlBQVksR0FBUTtRQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFFckUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFlBQVksRUFBNEIsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUNoRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxFQUF5QixDQUFDLFNBQVMsRUFBRSxDQUFBO1FBRTFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNsQyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDakMsQ0FBQztJQUVPLHdCQUF3QixDQUFDLEtBQWM7UUFDN0MsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEIsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUE7UUFD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
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=SarifModelPerSarif.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SarifModelPerSarif.d.ts","sourceRoot":"","sources":["../../src/model/SarifModelPerSarif.ts"],"names":[],"mappings":""}
@@ -1,102 +0,0 @@
1
- import { Map as ImmutableMap } from 'immutable';
2
- import { SarifModelPerRun } from './SarifModelPerRun';
3
- import { sortSecurityLevelMap, sortSecuritySeverityMap } from '../utils/SortUtils';
4
- /**
5
- * This class is used to group results by different fields, such as grouping by
6
- * tool name, runs, etc.
7
- * @internal
8
- */
9
- export class SarifModelPerSarif {
10
- sarifModelPerRunList;
11
- constructor(sarif) {
12
- this.sarifModelPerRunList = new Array();
13
- this.buildRunsList(sarif);
14
- }
15
- buildRunsList(sarif) {
16
- for (const run of sarif.runs) {
17
- this.sarifModelPerRunList.push(new SarifModelPerRun(run));
18
- }
19
- }
20
- groupByToolNameWithSecurityLevel() {
21
- const result = new Map();
22
- for (const sarifModelPerRun of this.sarifModelPerRunList) {
23
- if (!result.has(sarifModelPerRun.toolName)) {
24
- result.set(sarifModelPerRun.toolName, ImmutableMap().asMutable());
25
- }
26
- for (const [k, v] of sarifModelPerRun.securityLevelMap.entries()) {
27
- const count = result.get(sarifModelPerRun.toolName)?.get(k) || 0;
28
- result.get(sarifModelPerRun.toolName)?.set(k, count + v);
29
- }
30
- }
31
- // Sort
32
- for (const [k, v] of result) {
33
- result.set(k, sortSecurityLevelMap(v));
34
- }
35
- return result;
36
- }
37
- groupByRunWithSecurityLevel() {
38
- const result = new Array();
39
- for (const sarifModelPerRun of this.sarifModelPerRunList) {
40
- result.push({
41
- toolName: sarifModelPerRun.toolName,
42
- data: sarifModelPerRun.securityLevelMap,
43
- });
44
- }
45
- return result;
46
- }
47
- groupByTotalWithSecurityLevel() {
48
- const result = ImmutableMap().asMutable();
49
- for (const sarifModelPerRun of this.sarifModelPerRunList) {
50
- for (const [k, v] of sarifModelPerRun.securityLevelMap.entries()) {
51
- const count = result.get(k) || 0;
52
- result.set(k, count + v);
53
- }
54
- }
55
- return sortSecurityLevelMap(result);
56
- }
57
- groupByToolNameWithSecuritySeverity() {
58
- const result = new Map();
59
- for (const sarifModelPerRun of this.sarifModelPerRunList) {
60
- if (!result.has(sarifModelPerRun.toolName)) {
61
- result.set(sarifModelPerRun.toolName, ImmutableMap().asMutable());
62
- }
63
- for (const [k, v] of sarifModelPerRun.securitySeverityMap.entries()) {
64
- const count = result.get(sarifModelPerRun.toolName)?.get(k) || 0;
65
- result.get(sarifModelPerRun.toolName)?.set(k, count + v);
66
- }
67
- }
68
- // Sort
69
- for (const [k, v] of result.entries()) {
70
- result.set(k, sortSecuritySeverityMap(v));
71
- }
72
- return result;
73
- }
74
- groupByRunWithSecuritySeverity() {
75
- const result = new Array();
76
- for (const sarifModelPerRun of this.sarifModelPerRunList) {
77
- result.push({
78
- toolName: sarifModelPerRun.toolName,
79
- data: sarifModelPerRun.securitySeverityMap,
80
- });
81
- }
82
- return result;
83
- }
84
- groupByTotalWithSecuritySeverity() {
85
- const result = ImmutableMap().asMutable();
86
- for (const sarifModelPerRun of this.sarifModelPerRunList) {
87
- for (const [k, v] of sarifModelPerRun.securitySeverityMap.entries()) {
88
- const count = result.get(k) || 0;
89
- result.set(k, count + v);
90
- }
91
- }
92
- return sortSecuritySeverityMap(result);
93
- }
94
- listToolNames() {
95
- const toolNames = new Set();
96
- for (const sarifModelPerRun of this.sarifModelPerRunList) {
97
- toolNames.add(sarifModelPerRun.toolName);
98
- }
99
- return toolNames;
100
- }
101
- }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2FyaWZNb2RlbFBlclNhcmlmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL1NhcmlmTW9kZWxQZXJTYXJpZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsR0FBRyxJQUFJLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVyRCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHVCQUF1QixFQUN4QixNQUFNLG9CQUFvQixDQUFDO0FBWTVCOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ1osb0JBQW9CLENBQTBCO0lBRS9ELFlBQVksS0FBZTtRQUN6QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxLQUFLLEVBQW9CLENBQUE7UUFDekQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMzQixDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQWU7UUFDbkMsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDM0QsQ0FBQztJQUNILENBQUM7SUFFTSxnQ0FBZ0M7UUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQStDLENBQUE7UUFDckUsS0FBSyxNQUFNLGdCQUFnQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBeUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO1lBQzFGLENBQUM7WUFDRCxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDakUsTUFBTSxLQUFLLEdBQVcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN4RSxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQzFELENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTztRQUNQLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUM1QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hDLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFTSwyQkFBMkI7UUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQW1DLENBQUE7UUFDM0QsS0FBSyxNQUFNLGdCQUFnQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1YsUUFBUSxFQUFFLGdCQUFnQixDQUFDLFFBQVE7Z0JBQ25DLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxnQkFBZ0I7YUFDeEMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVNLDZCQUE2QjtRQUNsQyxNQUFNLE1BQU0sR0FBRyxZQUFZLEVBQXlCLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDaEUsS0FBSyxNQUFNLGdCQUFnQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pELEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUNqRSxNQUFNLEtBQUssR0FBVyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDeEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQzFCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRU0sbUNBQW1DO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFrRCxDQUFBO1FBQ3hFLEtBQUssTUFBTSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQTRCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtZQUM3RixDQUFDO1lBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ3BFLE1BQU0sS0FBSyxHQUFXLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDeEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUMxRCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU87UUFDUCxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDdEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMzQyxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRU0sOEJBQThCO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxFQUFzQyxDQUFBO1FBQzlELEtBQUssTUFBTSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUN6RCxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRO2dCQUNuQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsbUJBQW1CO2FBQzNDLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFTSxnQ0FBZ0M7UUFDckMsTUFBTSxNQUFNLEdBQUcsWUFBWSxFQUE0QixDQUFDLFNBQVMsRUFBRSxDQUFBO1FBQ25FLEtBQUssTUFBTSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUN6RCxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDcEUsTUFBTSxLQUFLLEdBQVcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUMxQixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDeEMsQ0FBQztJQUVNLGFBQWE7UUFDbEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQTtRQUNuQyxLQUFLLE1BQU0sZ0JBQWdCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDekQsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMxQyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztDQUNGIn0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/model/types.ts"],"names":[],"mappings":""}