@fabasoad/sarif-to-slack 0.2.5 → 1.1.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 (192) 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 +145 -73
  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 +1 -3
  13. package/dist/System.d.ts.map +1 -1
  14. package/dist/System.js +10 -3
  15. package/dist/index.cjs +826 -472
  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 +80 -0
  20. package/dist/model/Color.d.ts.map +1 -0
  21. package/dist/model/Color.js +106 -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 +347 -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 +20 -54
  100. package/etc/sarif-to-slack.api.md +162 -99
  101. package/jest.config.json +2 -2
  102. package/package.json +7 -7
  103. package/scripts/save-metadata.sh +12 -10
  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 +9 -2
  108. package/src/index.ts +47 -20
  109. package/src/model/Color.ts +195 -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 +20 -72
  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 -104
  170. package/dist/metadata.d.ts +0 -2
  171. package/dist/metadata.d.ts.map +0 -1
  172. package/dist/metadata.js +0 -11
  173. package/dist/model/SarifModelPerRun.d.ts +0 -2
  174. package/dist/model/SarifModelPerRun.d.ts.map +0 -1
  175. package/dist/model/SarifModelPerRun.js +0 -90
  176. package/dist/model/SarifModelPerSarif.d.ts +0 -2
  177. package/dist/model/SarifModelPerSarif.d.ts.map +0 -1
  178. package/dist/model/SarifModelPerSarif.js +0 -102
  179. package/dist/model/types.d.ts +0 -2
  180. package/dist/model/types.d.ts.map +0 -1
  181. package/dist/model/types.js +0 -49
  182. package/dist/utils/SortUtils.d.ts +0 -2
  183. package/dist/utils/SortUtils.d.ts.map +0 -1
  184. package/dist/utils/SortUtils.js +0 -20
  185. package/src/Processors.ts +0 -68
  186. package/src/SarifToSlackService.ts +0 -117
  187. package/src/metadata.ts +0 -10
  188. package/src/model/SarifModelPerRun.ts +0 -120
  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/tests/Processors.spec.ts +0 -76
package/dist/index.d.ts CHANGED
@@ -2,24 +2,45 @@
2
2
  * Sarif to Slack message converter library.
3
3
  *
4
4
  * @remarks
5
- * This library provides a service to send a Slack messages based on the provided
5
+ * This library provides a client to send a Slack messages based on the provided
6
6
  * SARIF (Static Analysis Results Interchange Format) files.
7
7
  *
8
8
  * @example
9
9
  * ```typescript
10
- * import { SarifToSlackService, FooterType } from '@fabasoad/sarif-to-slack';
10
+ * import {
11
+ * Color,
12
+ * FooterType,
13
+ * LogLevel,
14
+ * RepresentationType,
15
+ * SarifToSlackClient,
16
+ * SendIf
17
+ * } from '@fabasoad/sarif-to-slack';
11
18
  *
12
- * const service = await SarifToSlackService.create({
19
+ * const client: SarifToSlackClient = await SarifToSlackClient.create({
13
20
  * webhookUrl: 'https://hooks.slack.com/services/your/webhook/url',
14
- * sarifPath: 'path/to/your/sarif/file.sarif',
21
+ * username: 'SARIF to Slack Bot',
22
+ * iconUrl: 'https://example.com/icon.png',
23
+ * color: {
24
+ * bySeverity: {
25
+ * critical: new Color('#ff0000'),
26
+ * high: new Color('#ff4500'),
27
+ * medium: new Color('#ffa500'),
28
+ * low: new Color('#ffff00'),
29
+ * none: new Color('#808080'),
30
+ * unknown: new Color('#800080'),
31
+ * empty: new Color('#d3d3d3'),
32
+ * },
33
+ * },
34
+ * sarif: {
35
+ * path: 'path/to/your/sarif-files',
36
+ * recursive: true,
37
+ * extension: 'sarif',
38
+ * },
15
39
  * log: {
16
40
  * level: LogLevel.Info,
17
41
  * template: '[{{logLevelName}}] [{{name}}] {{dateIsoStr}} ',
18
42
  * colored: false,
19
43
  * },
20
- * username: 'SARIF Bot',
21
- * iconUrl: 'https://example.com/icon.png',
22
- * color: '#36a64f',
23
44
  * header: {
24
45
  * include: true,
25
46
  * value: 'SARIF Analysis Results'
@@ -36,15 +57,17 @@
36
57
  * run: {
37
58
  * include: true
38
59
  * },
60
+ * representation: RepresentationType.CompactGroupByToolNamePerSeverity,
61
+ * sendIf: SendIf.MediumOrHigher,
39
62
  * });
40
- * await service.sendAll();
63
+ * await client.send();
41
64
  * ```
42
65
  *
43
- * @see {@link SarifToSlackService}
66
+ * @see {@link SarifToSlackClient}
44
67
  *
45
68
  * @packageDocumentation
46
69
  */
47
- export { SarifToSlackService } from './SarifToSlackService';
48
- export { CalculateResultsBy, FooterType, GroupResultsBy, LogLevel, SlackMessage } from './types';
49
- export type { FooterOptions, IncludeAwareOptions, IncludeAwareWithValueOptions, LogOptions, SarifLog, SarifToSlackOutput, SarifToSlackServiceOptions } from './types';
70
+ export { Color, ColorOptions, ColorGroupByLevel, ColorGroupBySeverity } from './model/Color';
71
+ export { SarifToSlackClient } from './SarifToSlackClient';
72
+ export { FooterOptions, FooterType, IncludeAwareOptions, IncludeAwareWithValueOptions, LogLevel, LogOptions, RepresentationType, SarifFileExtension, SarifOptions, SarifToSlackClientOptions, SendIf, SlackMessage, } from './types';
50
73
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,cAAc,EACd,QAAQ,EACR,YAAY,EACb,MAAM,SAAS,CAAA;AAChB,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,4BAA4B,EAC5B,UAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AACH,OAAO,EACL,KAAK,EACL,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EACL,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,4BAA4B,EAC5B,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,yBAAyB,EACzB,MAAM,EACN,YAAY,GACb,MAAM,SAAS,CAAA"}
package/dist/index.js CHANGED
@@ -3,24 +3,45 @@
3
3
  * Sarif to Slack message converter library.
4
4
  *
5
5
  * @remarks
6
- * This library provides a service to send a Slack messages based on the provided
6
+ * This library provides a client to send a Slack messages based on the provided
7
7
  * SARIF (Static Analysis Results Interchange Format) files.
8
8
  *
9
9
  * @example
10
10
  * ```typescript
11
- * import { SarifToSlackService, FooterType } from '@fabasoad/sarif-to-slack';
11
+ * import {
12
+ * Color,
13
+ * FooterType,
14
+ * LogLevel,
15
+ * RepresentationType,
16
+ * SarifToSlackClient,
17
+ * SendIf
18
+ * } from '@fabasoad/sarif-to-slack';
12
19
  *
13
- * const service = await SarifToSlackService.create({
20
+ * const client: SarifToSlackClient = await SarifToSlackClient.create({
14
21
  * webhookUrl: 'https://hooks.slack.com/services/your/webhook/url',
15
- * sarifPath: 'path/to/your/sarif/file.sarif',
22
+ * username: 'SARIF to Slack Bot',
23
+ * iconUrl: 'https://example.com/icon.png',
24
+ * color: {
25
+ * bySeverity: {
26
+ * critical: new Color('#ff0000'),
27
+ * high: new Color('#ff4500'),
28
+ * medium: new Color('#ffa500'),
29
+ * low: new Color('#ffff00'),
30
+ * none: new Color('#808080'),
31
+ * unknown: new Color('#800080'),
32
+ * empty: new Color('#d3d3d3'),
33
+ * },
34
+ * },
35
+ * sarif: {
36
+ * path: 'path/to/your/sarif-files',
37
+ * recursive: true,
38
+ * extension: 'sarif',
39
+ * },
16
40
  * log: {
17
41
  * level: LogLevel.Info,
18
42
  * template: '[{{logLevelName}}] [{{name}}] {{dateIsoStr}} ',
19
43
  * colored: false,
20
44
  * },
21
- * username: 'SARIF Bot',
22
- * iconUrl: 'https://example.com/icon.png',
23
- * color: '#36a64f',
24
45
  * header: {
25
46
  * include: true,
26
47
  * value: 'SARIF Analysis Results'
@@ -37,14 +58,17 @@
37
58
  * run: {
38
59
  * include: true
39
60
  * },
61
+ * representation: RepresentationType.CompactGroupByToolNamePerSeverity,
62
+ * sendIf: SendIf.MediumOrHigher,
40
63
  * });
41
- * await service.sendAll();
64
+ * await client.send();
42
65
  * ```
43
66
  *
44
- * @see {@link SarifToSlackService}
67
+ * @see {@link SarifToSlackClient}
45
68
  *
46
69
  * @packageDocumentation
47
70
  */
48
- export { SarifToSlackService } from './SarifToSlackService';
49
- export { CalculateResultsBy, FooterType, GroupResultsBy, LogLevel } from './types';
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEZBQTBGO0FBRTFGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Q0c7QUFDSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUMzRCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixjQUFjLEVBQ2QsUUFBUSxFQUVULE1BQU0sU0FBUyxDQUFBIn0=
71
+ export { Color } from './model/Color';
72
+ export { SarifToSlackClient } from './SarifToSlackClient';
73
+ export { FooterType, LogLevel, RepresentationType, SendIf, } from './types';
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEZBQTBGO0FBRTFGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9FRztBQUNILE9BQU8sRUFDTCxLQUFLLEVBSU4sTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDekQsT0FBTyxFQUVMLFVBQVUsRUFHVixRQUFRLEVBRVIsa0JBQWtCLEVBSWxCLE1BQU0sR0FFUCxNQUFNLFNBQVMsQ0FBQSJ9
@@ -0,0 +1,80 @@
1
+ /**
2
+ * This class represents a color in hex format.
3
+ * @public
4
+ */
5
+ export declare class Color {
6
+ private readonly _color?;
7
+ /**
8
+ * Creates an instance of {@link Color} class. Before creating an instance of
9
+ * {@link Color} class, it (if applicable) maps CI status into the hex color,
10
+ * and also validates {@param color} to be a valid string that represents a
11
+ * color in hex format.
12
+ * @param color Can be either undefined, valid color in hex format or GitHub
13
+ * CI status (one of: success, failure, cancelled, skipped)
14
+ * @public
15
+ */
16
+ constructor(color?: string);
17
+ /**
18
+ * Returns a valid string that represents a color in hex format, or undefined.
19
+ */
20
+ get value(): string | undefined;
21
+ private validateHexColor;
22
+ private mapColor;
23
+ }
24
+ /**
25
+ * Base type that has common fields for both {@link ColorGroupByLevel} and
26
+ * {@link ColorGroupBySeverity}.
27
+ * @private
28
+ */
29
+ type ColorGroupCommon = {
30
+ none?: Color;
31
+ unknown?: Color;
32
+ empty?: Color;
33
+ };
34
+ /**
35
+ * Color schema for the findings with the certain level. Color is used by the
36
+ * level importance, i.e. if at least 1 error finding exists then
37
+ * {@link ColorGroupByLevel.error} color is used, then if at least 1 warning
38
+ * finding exists then {@link ColorGroupByLevel.warning} color is used, etc.
39
+ * @public
40
+ */
41
+ export type ColorGroupByLevel = ColorGroupCommon & {
42
+ error?: Color;
43
+ warning?: Color;
44
+ note?: Color;
45
+ };
46
+ /**
47
+ * Color schema for the findings with the certain severity. Color is used by the
48
+ * severity importance, i.e. if at least 1 critical finding exists then
49
+ * {@link ColorGroupBySeverity.critical} color is used, then if at least 1 high
50
+ * finding exists then {@link ColorGroupBySeverity.high} color is used, etc.
51
+ * @public
52
+ */
53
+ export type ColorGroupBySeverity = ColorGroupCommon & {
54
+ critical?: Color;
55
+ high?: Color;
56
+ medium?: Color;
57
+ low?: Color;
58
+ };
59
+ /**
60
+ * Represents configuration of the color scheme. If both {@link ColorOptions.byLevel}
61
+ * and {@link ColorOptions.bySeverity} are defined, then {@link ColorOptions.bySeverity}
62
+ * takes precedence.
63
+ * @public
64
+ */
65
+ export type ColorOptions = {
66
+ /**
67
+ * Default color if specific color was not found. It is a fallback option.
68
+ */
69
+ default?: Color;
70
+ /**
71
+ * Color scheme for the findings where certain level is presented.
72
+ */
73
+ byLevel?: ColorGroupByLevel;
74
+ /**
75
+ * Color scheme for the findings where certain severity is presented.
76
+ */
77
+ bySeverity?: ColorGroupBySeverity;
78
+ };
79
+ export {};
80
+ //# sourceMappingURL=Color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Color.d.ts","sourceRoot":"","sources":["../../src/model/Color.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAQ;IAEhC;;;;;;;;OAQG;gBACgB,KAAK,CAAC,EAAE,MAAM;IAKjC;;OAEG;IACH,IAAW,KAAK,IAAI,MAAM,GAAG,SAAS,CAErC;IAED,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,QAAQ;CAcjB;AAED;;;;GAIG;AACH,KAAK,gBAAgB,GAAG;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG;IACjD,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,CAAC;CACd,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IACpD,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,GAAG,CAAC,EAAE,KAAK,CAAC;CACb,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB;;OAEG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B;;OAEG;IACH,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC,CAAA"}
@@ -0,0 +1,106 @@
1
+ import { SecurityLevel, SecuritySeverity } from '../types';
2
+ /**
3
+ * This class represents a color in hex format.
4
+ * @public
5
+ */
6
+ export class Color {
7
+ _color;
8
+ /**
9
+ * Creates an instance of {@link Color} class. Before creating an instance of
10
+ * {@link Color} class, it (if applicable) maps CI status into the hex color,
11
+ * and also validates {@param color} to be a valid string that represents a
12
+ * color in hex format.
13
+ * @param color Can be either undefined, valid color in hex format or GitHub
14
+ * CI status (one of: success, failure, cancelled, skipped)
15
+ * @public
16
+ */
17
+ constructor(color) {
18
+ this._color = this.mapColor(color);
19
+ this.validateHexColor();
20
+ }
21
+ /**
22
+ * Returns a valid string that represents a color in hex format, or undefined.
23
+ */
24
+ get value() {
25
+ return this._color;
26
+ }
27
+ validateHexColor() {
28
+ if (this._color != null) {
29
+ const hexColorRegex = /^#(?:[0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/;
30
+ if (!hexColorRegex.test(this._color)) {
31
+ throw new Error(`Invalid hex color: "${this._color}"`);
32
+ }
33
+ }
34
+ }
35
+ mapColor(from) {
36
+ switch (from) {
37
+ case 'success':
38
+ return '#008000';
39
+ case 'failure':
40
+ return '#ff0000';
41
+ case 'cancelled':
42
+ return '#0047ab';
43
+ case 'skipped':
44
+ return '#808080';
45
+ default:
46
+ return from;
47
+ }
48
+ }
49
+ }
50
+ function identifyColorCommon(findings, prop, none, unknown, color, defaultColor) {
51
+ if (color.none != null && findings.findByProperty(prop, none) != null) {
52
+ return color.none.value;
53
+ }
54
+ if (color.unknown != null && findings.findByProperty(prop, unknown) != null) {
55
+ return color.unknown.value;
56
+ }
57
+ if (color.empty != null && findings.length === 0) {
58
+ return color.empty.value;
59
+ }
60
+ return defaultColor?.value;
61
+ }
62
+ function identifyColorBySeverity(findings, color, defaultColor) {
63
+ if (color.critical != null && findings.findByProperty('severity', SecuritySeverity.Critical) != null) {
64
+ return color.critical.value;
65
+ }
66
+ if (color.high != null && findings.findByProperty('severity', SecuritySeverity.High) != null) {
67
+ return color.high.value;
68
+ }
69
+ if (color.medium != null && findings.findByProperty('severity', SecuritySeverity.Medium) != null) {
70
+ return color.medium.value;
71
+ }
72
+ if (color.low != null && findings.findByProperty('severity', SecuritySeverity.Low) != null) {
73
+ return color.low.value;
74
+ }
75
+ return identifyColorCommon(findings, 'severity', SecuritySeverity.None, SecuritySeverity.Unknown, color, defaultColor);
76
+ }
77
+ function identifyColorByLevel(findings, color, defaultColor) {
78
+ if (color.error != null && findings.findByProperty('level', SecurityLevel.Error) != null) {
79
+ return color.error.value;
80
+ }
81
+ if (color.warning != null && findings.findByProperty('level', SecurityLevel.Warning) != null) {
82
+ return color.warning.value;
83
+ }
84
+ if (color.note != null && findings.findByProperty('level', SecurityLevel.Note) != null) {
85
+ return color.note.value;
86
+ }
87
+ return identifyColorCommon(findings, 'level', SecurityLevel.None, SecurityLevel.Unknown, color, defaultColor);
88
+ }
89
+ /**
90
+ * Makes an ultimate decision on what color should be Slack message. The decision
91
+ * is based on the provided {@param colorOpts} parameter and {@param findings}
92
+ * list.
93
+ * @param findings An instance of {@link FindingsArray} object.
94
+ * @param colorOpts An instance of {@link ColorOptions} type.
95
+ * @internal
96
+ */
97
+ export function identifyColor(findings, colorOpts) {
98
+ if (colorOpts?.bySeverity != null) {
99
+ return identifyColorBySeverity(findings, colorOpts.bySeverity, colorOpts.default);
100
+ }
101
+ if (colorOpts?.byLevel != null) {
102
+ return identifyColorByLevel(findings, colorOpts.byLevel, colorOpts.default);
103
+ }
104
+ return colorOpts?.default?.value;
105
+ }
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvQ29sb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUkxRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sS0FBSztJQUNDLE1BQU0sQ0FBUztJQUVoQzs7Ozs7Ozs7T0FRRztJQUNILFlBQW1CLEtBQWM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQTtJQUNwQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4QixNQUFNLGFBQWEsR0FBRyxvRUFBb0UsQ0FBQztZQUUzRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDekQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sUUFBUSxDQUFDLElBQWE7UUFDNUIsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssU0FBUztnQkFDWixPQUFPLFNBQVMsQ0FBQTtZQUNsQixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxTQUFTLENBQUE7WUFDbEIsS0FBSyxXQUFXO2dCQUNkLE9BQU8sU0FBUyxDQUFBO1lBQ2xCLEtBQUssU0FBUztnQkFDWixPQUFPLFNBQVMsQ0FBQTtZQUNsQjtnQkFDRSxPQUFPLElBQUksQ0FBQTtRQUNmLENBQUM7SUFD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
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Finding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Finding.d.ts","sourceRoot":"","sources":["../../src/model/Finding.ts"],"names":[],"mappings":""}
@@ -0,0 +1,93 @@
1
+ import { SecurityLevel, SecuritySeverity } from '../types';
2
+ import Logger from '../Logger';
3
+ import { createProcessor } from '../processors/ProcessorFactory';
4
+ /**
5
+ * Creates a new instance of {@link Finding} class.
6
+ * @internal
7
+ */
8
+ export function createFinding(opts) {
9
+ return new SarifFinding(opts);
10
+ }
11
+ /**
12
+ * The only implementation of {@link Finding} interface. This class is private
13
+ * and is not supposed to be exposed. {@link createFinding} should be used to
14
+ * create a new {@link Finding}.
15
+ * @private
16
+ */
17
+ class SarifFinding {
18
+ _runMetadata;
19
+ _result;
20
+ _sarifPath;
21
+ _rule;
22
+ _processor;
23
+ _cvssScoreCacheProcessed = false;
24
+ _cvssScoreCache = undefined;
25
+ _levelCacheProcessed = false;
26
+ _levelCache = undefined;
27
+ constructor(opts) {
28
+ this._processor = createProcessor(opts.runMetadata.run, opts.result);
29
+ this._sarifPath = opts.sarifPath;
30
+ this._runMetadata = opts.runMetadata;
31
+ this._result = opts.result;
32
+ this._rule = this._processor.tryFindRule();
33
+ }
34
+ clone() {
35
+ return createFinding({
36
+ sarifPath: this._sarifPath,
37
+ runMetadata: this._runMetadata,
38
+ result: this._result
39
+ });
40
+ }
41
+ get sarifPath() {
42
+ return this._sarifPath;
43
+ }
44
+ get runId() {
45
+ return this._runMetadata.id;
46
+ }
47
+ get toolName() {
48
+ return this._processor.findToolComponent().name;
49
+ }
50
+ get cvssScore() {
51
+ if (!this._cvssScoreCacheProcessed) {
52
+ this._cvssScoreCacheProcessed = true;
53
+ this._cvssScoreCache = this._processor.tryFindCvssScore();
54
+ }
55
+ return this._cvssScoreCache;
56
+ }
57
+ get level() {
58
+ if (!this._levelCacheProcessed) {
59
+ this._levelCacheProcessed = true;
60
+ this._levelCache = this._processor.tryFindLevel();
61
+ }
62
+ if (this._levelCache === undefined) {
63
+ Logger.debug(`Unknown level of ${this._rule?.id} rule`);
64
+ return SecurityLevel.Unknown;
65
+ }
66
+ switch (this._levelCache) {
67
+ case 'error': return SecurityLevel.Error;
68
+ case 'warning': return SecurityLevel.Warning;
69
+ case 'note': return SecurityLevel.Note;
70
+ default: return SecurityLevel.None;
71
+ }
72
+ }
73
+ get severity() {
74
+ if (this.cvssScore == null || this.cvssScore < 0 || this.cvssScore > 10) {
75
+ Logger.debug(`Unsupported CVSS score ${this.cvssScore} in ${this._rule?.id} rule`);
76
+ return SecuritySeverity.Unknown;
77
+ }
78
+ if (this.cvssScore >= 9) {
79
+ return SecuritySeverity.Critical;
80
+ }
81
+ if (this.cvssScore >= 7) {
82
+ return SecuritySeverity.High;
83
+ }
84
+ if (this.cvssScore >= 4) {
85
+ return SecuritySeverity.Medium;
86
+ }
87
+ if (this.cvssScore >= 0.1) {
88
+ return SecuritySeverity.Low;
89
+ }
90
+ return SecuritySeverity.None;
91
+ }
92
+ }
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmluZGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9GaW5kaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBVyxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDbkUsT0FBTyxNQUFNLE1BQU0sV0FBVyxDQUFBO0FBRTlCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQTBCaEU7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUFvQjtJQUNoRCxPQUFPLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQy9CLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sWUFBWTtJQUNDLFlBQVksQ0FBUztJQUNyQixPQUFPLENBQVE7SUFDZixVQUFVLENBQVE7SUFDbEIsS0FBSyxDQUFzQjtJQUMzQixVQUFVLENBQWlCO0lBRXBDLHdCQUF3QixHQUFZLEtBQUssQ0FBQTtJQUN6QyxlQUFlLEdBQXVCLFNBQVMsQ0FBQTtJQUUvQyxvQkFBb0IsR0FBWSxLQUFLLENBQUE7SUFDckMsV0FBVyxHQUE2QixTQUFTLENBQUE7SUFFekQsWUFBWSxJQUFvQjtRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDcEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFBO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQTtRQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQzVDLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxhQUFhLENBQUM7WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzFCLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUM5QixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDckIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUE7SUFDeEIsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUE7SUFDN0IsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUE7SUFDakQsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQTtZQUNwQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUMzRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFBO0lBQzdCLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQTtZQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDbkQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDdkQsT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFBO1FBQzlCLENBQUM7UUFFRCxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QixLQUFLLE9BQU8sQ0FBQyxDQUFDLE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQTtZQUN4QyxLQUFLLFNBQVMsQ0FBQyxDQUFDLE9BQU8sYUFBYSxDQUFDLE9BQU8sQ0FBQTtZQUM1QyxLQUFLLE1BQU0sQ0FBQyxDQUFDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQTtZQUN0QyxPQUFPLENBQUMsQ0FBQyxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUE7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ3hFLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLElBQUksQ0FBQyxTQUFTLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ2xGLE9BQU8sZ0JBQWdCLENBQUMsT0FBTyxDQUFBO1FBQ2pDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUE7UUFDbEMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN4QixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQTtRQUM5QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFBO1FBQ2hDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksR0FBRyxFQUFFLENBQUM7WUFDMUIsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUE7UUFDN0IsQ0FBQztRQUVELE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFBO0lBQzlCLENBQUM7Q0FDRiJ9
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=FindingsArray.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FindingsArray.d.ts","sourceRoot":"","sources":["../../src/model/FindingsArray.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import ExtendedArray from '../utils/ExtendedArray';
2
+ import { SecurityLevel, SecuritySeverity } from '../types';
3
+ /**
4
+ * This class represents an array of {@link Finding} objects and adds additional
5
+ * useful methods to it.
6
+ * @internal
7
+ */
8
+ export default class FindingsArray extends ExtendedArray {
9
+ hasSeverityOrHigher(severity) {
10
+ return Object
11
+ .values(SecuritySeverity)
12
+ .filter((v) => typeof v === 'number')
13
+ .filter((v) => v >= severity)
14
+ .some((v) => this.findByProperty('severity', v) != null);
15
+ }
16
+ hasLevelOrHigher(level) {
17
+ return Object
18
+ .values(SecurityLevel)
19
+ .filter((v) => typeof v === 'number')
20
+ .filter((v) => v >= level)
21
+ .some((v) => this.findByProperty('level', v) != null);
22
+ }
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmluZGluZ3NBcnJheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9GaW5kaW5nc0FycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sYUFBYSxNQUFNLHdCQUF3QixDQUFBO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFMUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sYUFBYyxTQUFRLGFBQXNCO0lBRXhELG1CQUFtQixDQUFDLFFBQTBCO1FBQ25ELE9BQU8sTUFBTTthQUNWLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN4QixNQUFNLENBQUMsQ0FBQyxDQUE0QixFQUF5QixFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDO2FBQ3RGLE1BQU0sQ0FBQyxDQUFDLENBQW1CLEVBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUM7YUFDdkQsSUFBSSxDQUFDLENBQUMsQ0FBbUIsRUFBVyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7SUFDdkYsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQW9CO1FBQzFDLE9BQU8sTUFBTTthQUNWLE1BQU0sQ0FBQyxhQUFhLENBQUM7YUFDckIsTUFBTSxDQUFDLENBQUMsQ0FBeUIsRUFBc0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQzthQUNoRixNQUFNLENBQUMsQ0FBQyxDQUFnQixFQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO2FBQ2pELElBQUksQ0FBQyxDQUFDLENBQWdCLEVBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFBO0lBQ2pGLENBQUM7Q0FDRiJ9
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CodeQLProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeQLProcessor.d.ts","sourceRoot":"","sources":["../../src/processors/CodeQLProcessor.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { CommonProcessor } from './CommonProcessor';
2
+ /**
3
+ * This class has extra logic for processing SARIF files produced by CodeQL tool.
4
+ * @internal
5
+ */
6
+ export class CodeQLProcessor extends CommonProcessor {
7
+ /**
8
+ * Rules in SARIF files produced by CodeQL has additional "problem.severity"
9
+ * property where level is also defined. This method tries to get level in a
10
+ * common way but if it fails to do so, then it tries to get level from
11
+ * "problem.severity" property.
12
+ */
13
+ tryFindLevel() {
14
+ return super.tryFindLevel() ?? this.tryFindRuleProperty('problem.severity');
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29kZVFMUHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb2Nlc3NvcnMvQ29kZVFMUHJvY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUduRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxlQUFlO0lBRWxEOzs7OztPQUtHO0lBQ2EsWUFBWTtRQUMxQixPQUFPLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUM3RSxDQUFDO0NBQ0YifQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CommonProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommonProcessor.d.ts","sourceRoot":"","sources":["../../src/processors/CommonProcessor.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ import * as sarifUtils from '../utils/SarifUtils';
2
+ /**
3
+ * This class has logic of the SARIF file processing, such as finding rule,
4
+ * finding tool component, etc. It is used by default for all SARIF files.
5
+ * Derived classes from this class can implement extra logic for the specific
6
+ * use cases, such as SARIF files produced by specific tools. For example,
7
+ * {@link CodeQLProcessor} handles additional logic for processing SARIF files
8
+ * produced by CodeQL.
9
+ * @internal
10
+ */
11
+ export class CommonProcessor {
12
+ _run;
13
+ _result;
14
+ /**
15
+ * Creates an instance of {@link CommonProcessor} class.
16
+ * @param run An instance of {@link Run} object.
17
+ * @param result An instance of {@link Result} object.
18
+ */
19
+ constructor(run, result) {
20
+ this._run = run;
21
+ this._result = result;
22
+ }
23
+ tryFindCvssScore() {
24
+ return this.tryFindRuleProperty('security-severity');
25
+ }
26
+ tryFindLevel() {
27
+ return this._result.level ?? this.tryFindRule()?.defaultConfiguration?.level;
28
+ }
29
+ findToolComponentDriver() {
30
+ return sarifUtils.findToolComponentDriver(this._run);
31
+ }
32
+ tryFindToolComponentExtension() {
33
+ return sarifUtils.tryFindToolComponentExtension(this._run, this._result);
34
+ }
35
+ findToolComponent() {
36
+ return sarifUtils.findToolComponent(this._run, this._result);
37
+ }
38
+ /**
39
+ * This function tries to find the respective rule for the given result.
40
+ * @internal
41
+ */
42
+ tryFindRule() {
43
+ const ruleData = {};
44
+ if (this._result.rule) {
45
+ if (this._result.rule?.index != null) {
46
+ ruleData.index = this._result.rule.index;
47
+ }
48
+ if (this._result.rule?.id) {
49
+ ruleData.id = this._result.rule.id;
50
+ }
51
+ }
52
+ if (ruleData.index == null && this._result.ruleIndex != null) {
53
+ ruleData.index = this._result.ruleIndex;
54
+ }
55
+ if (!ruleData.id && this._result.ruleId) {
56
+ ruleData.id = this._result.ruleId;
57
+ }
58
+ const tool = this.findToolComponent();
59
+ if (ruleData.index != null
60
+ && tool?.rules
61
+ && ruleData.index < tool.rules.length) {
62
+ return tool.rules[ruleData.index];
63
+ }
64
+ // If failed to find rule by index then try to find by ruleId
65
+ if (ruleData.id && tool?.rules) {
66
+ return tool.rules.find((r) => r.id === ruleData.id);
67
+ }
68
+ return undefined;
69
+ }
70
+ /**
71
+ * This function searches respective rule for the given result, and then gets
72
+ * the property of interest from it.
73
+ * @param propertyName The property name that you want to get the value from.
74
+ * @protected
75
+ */
76
+ tryFindRuleProperty(propertyName) {
77
+ const rule = this.tryFindRule();
78
+ if (rule?.properties && propertyName in rule.properties) {
79
+ return rule.properties[propertyName];
80
+ }
81
+ return undefined;
82
+ }
83
+ }
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbW9uUHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb2Nlc3NvcnMvQ29tbW9uUHJvY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUE7QUFFakQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUNQLElBQUksQ0FBSztJQUNULE9BQU8sQ0FBUTtJQUVsQzs7OztPQUlHO0lBQ0gsWUFBbUIsR0FBUSxFQUFFLE1BQWM7UUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUE7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQTtJQUN2QixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLENBQUE7SUFDdEQsQ0FBQztJQUVNLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxDQUFBO0lBQzlFLENBQUM7SUFFTSx1QkFBdUI7UUFDNUIsT0FBTyxVQUFVLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3RELENBQUM7SUFFTSw2QkFBNkI7UUFDbEMsT0FBTyxVQUFVLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDMUUsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixPQUFPLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksV0FBVztRQUNoQixNQUFNLFFBQVEsR0FBb0MsRUFBRSxDQUFBO1FBRXBELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDckMsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUE7WUFDMUMsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQzFCLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFBO1lBQ3BDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM3RCxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFBO1FBQ3pDLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUE7UUFDbkMsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFrQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUVwRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSTtlQUNyQixJQUFJLEVBQUUsS0FBSztlQUNYLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ25DLENBQUM7UUFFRCw2REFBNkQ7UUFDN0QsSUFBSSxRQUFRLENBQUMsRUFBRSxJQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNwQixDQUFDLENBQXNCLEVBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FDMUQsQ0FBQTtRQUNILENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxtQkFBbUIsQ0FBSSxZQUFvQjtRQUNuRCxNQUFNLElBQUksR0FBb0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ2hFLElBQUksSUFBSSxFQUFFLFVBQVUsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQU0sQ0FBQTtRQUMzQyxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztDQUNGIn0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ProcessorFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessorFactory.d.ts","sourceRoot":"","sources":["../../src/processors/ProcessorFactory.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import { CommonProcessor } from './CommonProcessor';
2
+ import { findToolComponent } from '../utils/SarifUtils';
3
+ import { SnykProcessor } from './SnykProcessor';
4
+ import { CodeQLProcessor } from './CodeQLProcessor';
5
+ /**
6
+ * Creates a new instance of {@link CommonProcessor} class. It tries to find specific
7
+ * processor based on the tool component for the given {@param run} and
8
+ * {@param result} and if no specific processors exist, then it returns an
9
+ * instance of {@link CommonProcessor} class.
10
+ * @param run An instance of {@link Run} class.
11
+ * @param result An instance of {@link Result} class.
12
+ * @internal
13
+ */
14
+ export function createProcessor(run, result) {
15
+ const toolComponent = findToolComponent(run, result);
16
+ switch (toolComponent.name) {
17
+ case 'CodeQL': return new CodeQLProcessor(run, result);
18
+ case 'Snyk Open Source': return new SnykProcessor(run, result);
19
+ default: return new CommonProcessor(run, result);
20
+ }
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvY2Vzc29yRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzb3JzL1Byb2Nlc3NvckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRW5ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFbkQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEdBQVEsRUFBRSxNQUFjO0lBQ3RELE1BQU0sYUFBYSxHQUFrQixpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDbkUsUUFBUSxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsS0FBSyxRQUFRLENBQUMsQ0FBQyxPQUFPLElBQUksZUFBZSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUN0RCxLQUFLLGtCQUFrQixDQUFDLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDOUQsT0FBTyxDQUFDLENBQUMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDbEQsQ0FBQztBQUNILENBQUMifQ==