@flow-scanner/lightning-flow-scanner-core 6.17.1 → 6.17.3

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 (508) hide show
  1. package/README.md +642 -0
  2. package/{types/main → main}/models/FlowGraph.d.ts +11 -1
  3. package/{out/main → main}/models/FlowGraph.js +18 -7
  4. package/{out/main → main}/rules/MissingRecordTriggerFilter.js +4 -2
  5. package/package.json +9 -58
  6. package/.husky/pre-commit +0 -1
  7. package/.husky/pre-push +0 -1
  8. package/.prettierignore +0 -5
  9. package/.swcrc +0 -26
  10. package/.turbo/turbo-build.log +0 -17
  11. package/.turbo/turbo-test.log +0 -144
  12. package/.turbo/turbo-vite$colon$dist.log +0 -21
  13. package/coverage/coverage-final.json +0 -63
  14. package/coverage/lcov-report/base.css +0 -224
  15. package/coverage/lcov-report/block-navigation.js +0 -87
  16. package/coverage/lcov-report/favicon.png +0 -0
  17. package/coverage/lcov-report/index.html +0 -236
  18. package/coverage/lcov-report/prettify.css +0 -1
  19. package/coverage/lcov-report/prettify.js +0 -2
  20. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  21. package/coverage/lcov-report/sorter.js +0 -210
  22. package/coverage/lcov-report/src/index.html +0 -116
  23. package/coverage/lcov-report/src/index.ts.html +0 -238
  24. package/coverage/lcov-report/src/main/adapters/RegexAdapter.ts.html +0 -118
  25. package/coverage/lcov-report/src/main/adapters/index.html +0 -116
  26. package/coverage/lcov-report/src/main/config/NodeIcons.ts.html +0 -376
  27. package/coverage/lcov-report/src/main/config/RuleRegistry.ts.html +0 -646
  28. package/coverage/lcov-report/src/main/config/VariableIcons.ts.html +0 -253
  29. package/coverage/lcov-report/src/main/config/index.html +0 -146
  30. package/coverage/lcov-report/src/main/enums/MetaType.ts.html +0 -100
  31. package/coverage/lcov-report/src/main/enums/MetadataType.ts.html +0 -103
  32. package/coverage/lcov-report/src/main/enums/MetadataTypes.ts.html +0 -100
  33. package/coverage/lcov-report/src/main/enums/index.html +0 -116
  34. package/coverage/lcov-report/src/main/interfaces/IRulesConfig.ts.html +0 -133
  35. package/coverage/lcov-report/src/main/interfaces/index.html +0 -116
  36. package/coverage/lcov-report/src/main/internals/index.html +0 -116
  37. package/coverage/lcov-report/src/main/internals/internals.ts.html +0 -190
  38. package/coverage/lcov-report/src/main/libs/BuildFlow.ts.html +0 -127
  39. package/coverage/lcov-report/src/main/libs/Compiler.ts.html +0 -241
  40. package/coverage/lcov-report/src/main/libs/ConvertFlowNodes.ts.html +0 -97
  41. package/coverage/lcov-report/src/main/libs/DynamicRule.ts.html +0 -118
  42. package/coverage/lcov-report/src/main/libs/ExportDetails.ts.html +0 -256
  43. package/coverage/lcov-report/src/main/libs/ExportDiagram.ts.html +0 -331
  44. package/coverage/lcov-report/src/main/libs/ExportSarif.ts.html +0 -358
  45. package/coverage/lcov-report/src/main/libs/FixFlows.ts.html +0 -265
  46. package/coverage/lcov-report/src/main/libs/GenerateMarkdown.ts.html +0 -331
  47. package/coverage/lcov-report/src/main/libs/GetRuleDefinitions.ts.html +0 -274
  48. package/coverage/lcov-report/src/main/libs/ParseFlows.ts.html +0 -184
  49. package/coverage/lcov-report/src/main/libs/RuleDocumentation.ts.html +0 -190
  50. package/coverage/lcov-report/src/main/libs/ScanFlows.ts.html +0 -508
  51. package/coverage/lcov-report/src/main/libs/exportAsDetails.ts.html +0 -160
  52. package/coverage/lcov-report/src/main/libs/exportAsSarif.ts.html +0 -346
  53. package/coverage/lcov-report/src/main/libs/index.html +0 -251
  54. package/coverage/lcov-report/src/main/models/FlatViolation.ts.html +0 -106
  55. package/coverage/lcov-report/src/main/models/Flow.ts.html +0 -1057
  56. package/coverage/lcov-report/src/main/models/FlowAttribute.ts.html +0 -115
  57. package/coverage/lcov-report/src/main/models/FlowElement.ts.html +0 -133
  58. package/coverage/lcov-report/src/main/models/FlowElementConnector.ts.html +0 -169
  59. package/coverage/lcov-report/src/main/models/FlowGraph.ts.html +0 -1672
  60. package/coverage/lcov-report/src/main/models/FlowMetadata.ts.html +0 -106
  61. package/coverage/lcov-report/src/main/models/FlowNode.ts.html +0 -1252
  62. package/coverage/lcov-report/src/main/models/FlowResource.ts.html +0 -106
  63. package/coverage/lcov-report/src/main/models/FlowType.ts.html +0 -244
  64. package/coverage/lcov-report/src/main/models/FlowVariable.ts.html +0 -553
  65. package/coverage/lcov-report/src/main/models/LoopRuleCommon.ts.html +0 -235
  66. package/coverage/lcov-report/src/main/models/ParsedFlow.ts.html +0 -121
  67. package/coverage/lcov-report/src/main/models/RuleCommon.ts.html +0 -442
  68. package/coverage/lcov-report/src/main/models/RuleResult.ts.html +0 -172
  69. package/coverage/lcov-report/src/main/models/ScanResult.ts.html +0 -121
  70. package/coverage/lcov-report/src/main/models/Violation.ts.html +0 -316
  71. package/coverage/lcov-report/src/main/models/index.html +0 -341
  72. package/coverage/lcov-report/src/main/rules/APIVersion.ts.html +0 -361
  73. package/coverage/lcov-report/src/main/rules/ActionCallsInLoop.ts.html +0 -157
  74. package/coverage/lcov-report/src/main/rules/AutoLayout.ts.html +0 -220
  75. package/coverage/lcov-report/src/main/rules/CopyAPIName.ts.html +0 -175
  76. package/coverage/lcov-report/src/main/rules/CyclomaticComplexity.ts.html +0 -292
  77. package/coverage/lcov-report/src/main/rules/DMLStatementInLoop.ts.html +0 -163
  78. package/coverage/lcov-report/src/main/rules/DuplicateDMLOperation.ts.html +0 -334
  79. package/coverage/lcov-report/src/main/rules/FlowDescription.ts.html +0 -184
  80. package/coverage/lcov-report/src/main/rules/FlowName.ts.html +0 -229
  81. package/coverage/lcov-report/src/main/rules/GetRecordAllFields.ts.html +0 -280
  82. package/coverage/lcov-report/src/main/rules/HardcodedId.ts.html +0 -238
  83. package/coverage/lcov-report/src/main/rules/HardcodedSecret.ts.html +0 -238
  84. package/coverage/lcov-report/src/main/rules/HardcodedUrl.ts.html +0 -247
  85. package/coverage/lcov-report/src/main/rules/InactiveFlow.ts.html +0 -184
  86. package/coverage/lcov-report/src/main/rules/MissingFaultPath.ts.html +0 -397
  87. package/coverage/lcov-report/src/main/rules/MissingFilterRecordTrigger.ts.html +0 -229
  88. package/coverage/lcov-report/src/main/rules/MissingMetadataDescription.ts.html +0 -211
  89. package/coverage/lcov-report/src/main/rules/MissingNullHandler.ts.html +0 -460
  90. package/coverage/lcov-report/src/main/rules/MissingRecordTriggerFilter.ts.html +0 -235
  91. package/coverage/lcov-report/src/main/rules/ProcessBuilder.ts.html +0 -190
  92. package/coverage/lcov-report/src/main/rules/RecordIdAsString.ts.html +0 -274
  93. package/coverage/lcov-report/src/main/rules/RecursiveAfterUpdate.ts.html +0 -364
  94. package/coverage/lcov-report/src/main/rules/SOQLQueryInLoop.ts.html +0 -160
  95. package/coverage/lcov-report/src/main/rules/SameRecordFieldUpdates.ts.html +0 -283
  96. package/coverage/lcov-report/src/main/rules/TransformInsteadOfLoop.ts.html +0 -250
  97. package/coverage/lcov-report/src/main/rules/TriggerOrder.ts.html +0 -238
  98. package/coverage/lcov-report/src/main/rules/UnconnectedElement.ts.html +0 -178
  99. package/coverage/lcov-report/src/main/rules/UnsafeRunningContext.ts.html +0 -226
  100. package/coverage/lcov-report/src/main/rules/UnusedVariable.ts.html +0 -283
  101. package/coverage/lcov-report/src/main/rules/index.html +0 -521
  102. package/coverage/lcov-report/src/main/store/DefaultRuleStore.ts.html +0 -265
  103. package/coverage/lcov-report/src/main/store/RuleRegistry.ts.html +0 -118
  104. package/coverage/lcov-report/src/main/store/index.html +0 -116
  105. package/coverage/lcov.info +0 -6261
  106. package/eslint.config.mjs +0 -36
  107. package/jest.config.cjs +0 -32
  108. package/jest.env-setup.js +0 -101
  109. package/lint-staged.config.mjs +0 -8
  110. package/out/main/models/FlowGraph.d.ts +0 -85
  111. package/prettier.config.mjs +0 -5
  112. package/src/index.ts +0 -52
  113. package/src/main/config/NodeIcons.ts +0 -98
  114. package/src/main/config/RegexAdapter.ts +0 -98
  115. package/src/main/config/RuleRegistry.ts +0 -188
  116. package/src/main/config/VariableIcons.ts +0 -57
  117. package/src/main/enums/MetadataTypes.ts +0 -6
  118. package/src/main/interfaces/IExceptions.ts +0 -6
  119. package/src/main/interfaces/IRuleConfig.ts +0 -6
  120. package/src/main/interfaces/IRuleDefinition.ts +0 -15
  121. package/src/main/interfaces/IRuleOptions.ts +0 -5
  122. package/src/main/interfaces/IRulesConfig.ts +0 -17
  123. package/src/main/internals/internals.ts +0 -35
  124. package/src/main/libs/BuildFlow.ts +0 -14
  125. package/src/main/libs/Compiler.ts +0 -53
  126. package/src/main/libs/ExportDetails.ts +0 -58
  127. package/src/main/libs/ExportDiagram.ts +0 -83
  128. package/src/main/libs/ExportSarif.ts +0 -92
  129. package/src/main/libs/FixFlows.ts +0 -61
  130. package/src/main/libs/GetRuleDefinitions.ts +0 -64
  131. package/src/main/libs/ParseFlows.ts +0 -34
  132. package/src/main/libs/RuleDocumentation.ts +0 -35
  133. package/src/main/libs/ScanFlows.ts +0 -142
  134. package/src/main/models/FlatViolation.ts +0 -16
  135. package/src/main/models/Flow.ts +0 -325
  136. package/src/main/models/FlowAttribute.ts +0 -11
  137. package/src/main/models/FlowElement.ts +0 -16
  138. package/src/main/models/FlowElementConnector.ts +0 -28
  139. package/src/main/models/FlowGraph.ts +0 -530
  140. package/src/main/models/FlowMetadata.ts +0 -8
  141. package/src/main/models/FlowNode.ts +0 -390
  142. package/src/main/models/FlowResource.ts +0 -8
  143. package/src/main/models/FlowType.ts +0 -53
  144. package/src/main/models/FlowVariable.ts +0 -157
  145. package/src/main/models/LoopRuleCommon.ts +0 -51
  146. package/src/main/models/ParsedFlow.ts +0 -13
  147. package/src/main/models/RuleCommon.ts +0 -120
  148. package/src/main/models/RuleInfo.ts +0 -54
  149. package/src/main/models/RuleResult.ts +0 -29
  150. package/src/main/models/ScanResult.ts +0 -12
  151. package/src/main/models/Violation.ts +0 -78
  152. package/src/main/rules/APIVersion.ts +0 -93
  153. package/src/main/rules/ActionCallsInLoop.ts +0 -25
  154. package/src/main/rules/AutoLayout.ts +0 -46
  155. package/src/main/rules/CopyAPIName.ts +0 -31
  156. package/src/main/rules/CyclomaticComplexity.ts +0 -70
  157. package/src/main/rules/DMLStatementInLoop.ts +0 -26
  158. package/src/main/rules/DuplicateDMLOperation.ts +0 -83
  159. package/src/main/rules/FlowDescription.ts +0 -34
  160. package/src/main/rules/FlowName.ts +0 -49
  161. package/src/main/rules/GetRecordAllFields.ts +0 -65
  162. package/src/main/rules/HardcodedId.ts +0 -51
  163. package/src/main/rules/HardcodedSecret.ts +0 -51
  164. package/src/main/rules/HardcodedUrl.ts +0 -54
  165. package/src/main/rules/InactiveFlow.ts +0 -33
  166. package/src/main/rules/MissingFaultPath.ts +0 -105
  167. package/src/main/rules/MissingMetadataDescription.ts +0 -42
  168. package/src/main/rules/MissingNullHandler.ts +0 -126
  169. package/src/main/rules/MissingRecordTriggerFilter.ts +0 -51
  170. package/src/main/rules/ProcessBuilder.ts +0 -35
  171. package/src/main/rules/RecordIdAsString.ts +0 -64
  172. package/src/main/rules/RecursiveAfterUpdate.ts +0 -94
  173. package/src/main/rules/SOQLQueryInLoop.ts +0 -26
  174. package/src/main/rules/SameRecordFieldUpdates.ts +0 -66
  175. package/src/main/rules/TransformInsteadOfLoop.ts +0 -56
  176. package/src/main/rules/TriggerOrder.ts +0 -51
  177. package/src/main/rules/UnconnectedElement.ts +0 -32
  178. package/src/main/rules/UnsafeRunningContext.ts +0 -47
  179. package/src/main/rules/UnusedVariable.ts +0 -66
  180. package/stryker.config.mjs +0 -23
  181. package/tests/APIVersion.test.ts +0 -87
  182. package/tests/AutoLayout.test.ts +0 -41
  183. package/tests/Config.test.ts +0 -122
  184. package/tests/ConfigBetaMode.test.ts +0 -26
  185. package/tests/CopyAPIName.test.ts +0 -45
  186. package/tests/CyclomaticComplexity.test.ts +0 -125
  187. package/tests/DMLStatementInLoop.test.ts +0 -32
  188. package/tests/DuplicateDMLOperation.test.ts +0 -43
  189. package/tests/EnabledFalse.test.ts +0 -63
  190. package/tests/Exceptions.test.ts +0 -815
  191. package/tests/ExportSarif.test.ts +0 -62
  192. package/tests/FlowDescription.test.ts +0 -44
  193. package/tests/FlowDocumentation.test.ts +0 -74
  194. package/tests/FlowName.test.ts +0 -61
  195. package/tests/GetRecordElementAllFields.test.ts +0 -182
  196. package/tests/HardcodedId.test.ts +0 -16
  197. package/tests/HardcodedSecret.test.ts +0 -32
  198. package/tests/HardcodedUrl.test.ts +0 -253
  199. package/tests/InactiveFlow.test.ts +0 -103
  200. package/tests/MissingFaultPath.test.ts +0 -52
  201. package/tests/MissingMetadataDescription.test.ts +0 -25
  202. package/tests/MissingNullHandler.test.ts +0 -45
  203. package/tests/MissingRecordTriggerFilter.test.ts +0 -54
  204. package/tests/RecordIdAsString.test.ts +0 -60
  205. package/tests/RecursiveAfterUpdate.test.ts +0 -183
  206. package/tests/SOQLQueryInLoop.test.ts +0 -33
  207. package/tests/SameRecordFieldUpdates.test.ts +0 -205
  208. package/tests/SanityTest.test.ts +0 -15
  209. package/tests/TransformInsteadOfLoop.test.ts +0 -33
  210. package/tests/TriggerOrder.test.ts +0 -112
  211. package/tests/UnconnectedElement.test.ts +0 -76
  212. package/tests/UnsafeRunningContext.test.ts +0 -46
  213. package/tests/UnusedVariable.test.ts +0 -59
  214. package/tests/UnusedVariableExceptions.test.ts +0 -87
  215. package/tests/jsonfiles/MissingFaultPath_BeforeSave_Bypass.json +0 -128
  216. package/tests/jsonfiles/MissingFaultPath_WaitConditions.json +0 -102
  217. package/tests/jsonfiles/MissingFaultPath_WaitDate.json +0 -88
  218. package/tests/jsonfiles/MissingFaultPath_WaitDuration.json +0 -90
  219. package/tests/models/Flow.test.ts +0 -107
  220. package/tests/models/LoopRuleCommon.test.ts +0 -246
  221. package/tests/models/RuleCommon.test.ts +0 -41
  222. package/tsconfig.json +0 -28
  223. package/tsconfig.types.json +0 -26
  224. package/types/index.d.ts +0 -27
  225. package/types/index.d.ts.map +0 -1
  226. package/types/main/adapters/RegexAdapter.d.ts +0 -33
  227. package/types/main/adapters/RegexAdapter.d.ts.map +0 -1
  228. package/types/main/config/NodeIcons.d.ts +0 -25
  229. package/types/main/config/NodeIcons.d.ts.map +0 -1
  230. package/types/main/config/RegexAdapter.d.ts +0 -33
  231. package/types/main/config/RegexAdapter.d.ts.map +0 -1
  232. package/types/main/config/RuleRegistry.d.ts +0 -23
  233. package/types/main/config/RuleRegistry.d.ts.map +0 -1
  234. package/types/main/config/VariableIcons.d.ts +0 -26
  235. package/types/main/config/VariableIcons.d.ts.map +0 -1
  236. package/types/main/enums/MetadataTypes.d.ts +0 -7
  237. package/types/main/enums/MetadataTypes.d.ts.map +0 -1
  238. package/types/main/interfaces/IExceptions.d.ts +0 -6
  239. package/types/main/interfaces/IExceptions.d.ts.map +0 -1
  240. package/types/main/interfaces/IRuleConfig.d.ts +0 -7
  241. package/types/main/interfaces/IRuleConfig.d.ts.map +0 -1
  242. package/types/main/interfaces/IRuleDefinition.d.ts +0 -18
  243. package/types/main/interfaces/IRuleDefinition.d.ts.map +0 -1
  244. package/types/main/interfaces/IRuleOptions.d.ts +0 -5
  245. package/types/main/interfaces/IRuleOptions.d.ts.map +0 -1
  246. package/types/main/interfaces/IRulesConfig.d.ts +0 -16
  247. package/types/main/interfaces/IRulesConfig.d.ts.map +0 -1
  248. package/types/main/internals/internals.d.ts +0 -19
  249. package/types/main/internals/internals.d.ts.map +0 -1
  250. package/types/main/libs/BuildFlow.d.ts +0 -2
  251. package/types/main/libs/BuildFlow.d.ts.map +0 -1
  252. package/types/main/libs/Compiler.d.ts +0 -8
  253. package/types/main/libs/Compiler.d.ts.map +0 -1
  254. package/types/main/libs/ConvertFlowNodes.d.ts +0 -2
  255. package/types/main/libs/ConvertFlowNodes.d.ts.map +0 -1
  256. package/types/main/libs/DynamicRule.d.ts +0 -5
  257. package/types/main/libs/DynamicRule.d.ts.map +0 -1
  258. package/types/main/libs/ExportDetails.d.ts +0 -4
  259. package/types/main/libs/ExportDetails.d.ts.map +0 -1
  260. package/types/main/libs/ExportDiagram.d.ts +0 -42
  261. package/types/main/libs/ExportDiagram.d.ts.map +0 -1
  262. package/types/main/libs/ExportSarif.d.ts +0 -3
  263. package/types/main/libs/ExportSarif.d.ts.map +0 -1
  264. package/types/main/libs/FixFlows.d.ts +0 -4
  265. package/types/main/libs/FixFlows.d.ts.map +0 -1
  266. package/types/main/libs/GetRuleDefinitions.d.ts +0 -5
  267. package/types/main/libs/GetRuleDefinitions.d.ts.map +0 -1
  268. package/types/main/libs/ParseFlows.d.ts +0 -3
  269. package/types/main/libs/ParseFlows.d.ts.map +0 -1
  270. package/types/main/libs/RuleDocumentation.d.ts +0 -21
  271. package/types/main/libs/RuleDocumentation.d.ts.map +0 -1
  272. package/types/main/libs/ScanFlows.d.ts +0 -5
  273. package/types/main/libs/ScanFlows.d.ts.map +0 -1
  274. package/types/main/libs/exportAsDetails.d.ts +0 -4
  275. package/types/main/libs/exportAsDetails.d.ts.map +0 -1
  276. package/types/main/libs/exportAsSarif.d.ts +0 -3
  277. package/types/main/libs/exportAsSarif.d.ts.map +0 -1
  278. package/types/main/models/FlatViolation.d.ts +0 -16
  279. package/types/main/models/FlatViolation.d.ts.map +0 -1
  280. package/types/main/models/Flow.d.ts +0 -70
  281. package/types/main/models/Flow.d.ts.map +0 -1
  282. package/types/main/models/FlowAttribute.d.ts +0 -6
  283. package/types/main/models/FlowAttribute.d.ts.map +0 -1
  284. package/types/main/models/FlowElement.d.ts +0 -11
  285. package/types/main/models/FlowElement.d.ts.map +0 -1
  286. package/types/main/models/FlowElementConnector.d.ts +0 -16
  287. package/types/main/models/FlowElementConnector.d.ts.map +0 -1
  288. package/types/main/models/FlowGraph.d.ts.map +0 -1
  289. package/types/main/models/FlowMetadata.d.ts +0 -5
  290. package/types/main/models/FlowMetadata.d.ts.map +0 -1
  291. package/types/main/models/FlowNode.d.ts +0 -66
  292. package/types/main/models/FlowNode.d.ts.map +0 -1
  293. package/types/main/models/FlowResource.d.ts +0 -5
  294. package/types/main/models/FlowResource.d.ts.map +0 -1
  295. package/types/main/models/FlowType.d.ts +0 -24
  296. package/types/main/models/FlowType.d.ts.map +0 -1
  297. package/types/main/models/FlowVariable.d.ts +0 -64
  298. package/types/main/models/FlowVariable.d.ts.map +0 -1
  299. package/types/main/models/LoopRuleCommon.d.ts +0 -15
  300. package/types/main/models/LoopRuleCommon.d.ts.map +0 -1
  301. package/types/main/models/ParsedFlow.d.ts +0 -8
  302. package/types/main/models/ParsedFlow.d.ts.map +0 -1
  303. package/types/main/models/RuleCommon.d.ts +0 -58
  304. package/types/main/models/RuleCommon.d.ts.map +0 -1
  305. package/types/main/models/RuleInfo.d.ts +0 -50
  306. package/types/main/models/RuleInfo.d.ts.map +0 -1
  307. package/types/main/models/RuleResult.d.ts +0 -15
  308. package/types/main/models/RuleResult.d.ts.map +0 -1
  309. package/types/main/models/ScanResult.d.ts +0 -8
  310. package/types/main/models/ScanResult.d.ts.map +0 -1
  311. package/types/main/models/Violation.d.ts +0 -12
  312. package/types/main/models/Violation.d.ts.map +0 -1
  313. package/types/main/rules/APIVersion.d.ts +0 -10
  314. package/types/main/rules/APIVersion.d.ts.map +0 -1
  315. package/types/main/rules/ActionCallsInLoop.d.ts +0 -7
  316. package/types/main/rules/ActionCallsInLoop.d.ts.map +0 -1
  317. package/types/main/rules/AutoLayout.d.ts +0 -8
  318. package/types/main/rules/AutoLayout.d.ts.map +0 -1
  319. package/types/main/rules/CopyAPIName.d.ts +0 -8
  320. package/types/main/rules/CopyAPIName.d.ts.map +0 -1
  321. package/types/main/rules/CyclomaticComplexity.d.ts +0 -12
  322. package/types/main/rules/CyclomaticComplexity.d.ts.map +0 -1
  323. package/types/main/rules/DMLStatementInLoop.d.ts +0 -7
  324. package/types/main/rules/DMLStatementInLoop.d.ts.map +0 -1
  325. package/types/main/rules/DuplicateDMLOperation.d.ts +0 -9
  326. package/types/main/rules/DuplicateDMLOperation.d.ts.map +0 -1
  327. package/types/main/rules/FlowDescription.d.ts +0 -8
  328. package/types/main/rules/FlowDescription.d.ts.map +0 -1
  329. package/types/main/rules/FlowName.d.ts +0 -16
  330. package/types/main/rules/FlowName.d.ts.map +0 -1
  331. package/types/main/rules/GetRecordAllFields.d.ts +0 -8
  332. package/types/main/rules/GetRecordAllFields.d.ts.map +0 -1
  333. package/types/main/rules/HardcodedId.d.ts +0 -14
  334. package/types/main/rules/HardcodedId.d.ts.map +0 -1
  335. package/types/main/rules/HardcodedSecret.d.ts +0 -14
  336. package/types/main/rules/HardcodedSecret.d.ts.map +0 -1
  337. package/types/main/rules/HardcodedUrl.d.ts +0 -14
  338. package/types/main/rules/HardcodedUrl.d.ts.map +0 -1
  339. package/types/main/rules/InactiveFlow.d.ts +0 -8
  340. package/types/main/rules/InactiveFlow.d.ts.map +0 -1
  341. package/types/main/rules/MissingFaultPath.d.ts +0 -15
  342. package/types/main/rules/MissingFaultPath.d.ts.map +0 -1
  343. package/types/main/rules/MissingFilterRecordTrigger.d.ts +0 -8
  344. package/types/main/rules/MissingFilterRecordTrigger.d.ts.map +0 -1
  345. package/types/main/rules/MissingMetadataDescription.d.ts +0 -8
  346. package/types/main/rules/MissingMetadataDescription.d.ts.map +0 -1
  347. package/types/main/rules/MissingNullHandler.d.ts +0 -8
  348. package/types/main/rules/MissingNullHandler.d.ts.map +0 -1
  349. package/types/main/rules/MissingRecordTriggerFilter.d.ts +0 -8
  350. package/types/main/rules/MissingRecordTriggerFilter.d.ts.map +0 -1
  351. package/types/main/rules/ProcessBuilder.d.ts +0 -8
  352. package/types/main/rules/ProcessBuilder.d.ts.map +0 -1
  353. package/types/main/rules/RecordIdAsString.d.ts +0 -8
  354. package/types/main/rules/RecordIdAsString.d.ts.map +0 -1
  355. package/types/main/rules/RecursiveAfterUpdate.d.ts +0 -9
  356. package/types/main/rules/RecursiveAfterUpdate.d.ts.map +0 -1
  357. package/types/main/rules/SOQLQueryInLoop.d.ts +0 -7
  358. package/types/main/rules/SOQLQueryInLoop.d.ts.map +0 -1
  359. package/types/main/rules/SameRecordFieldUpdates.d.ts +0 -9
  360. package/types/main/rules/SameRecordFieldUpdates.d.ts.map +0 -1
  361. package/types/main/rules/TransformInsteadOfLoop.d.ts +0 -8
  362. package/types/main/rules/TransformInsteadOfLoop.d.ts.map +0 -1
  363. package/types/main/rules/TriggerOrder.d.ts +0 -8
  364. package/types/main/rules/TriggerOrder.d.ts.map +0 -1
  365. package/types/main/rules/UnconnectedElement.d.ts +0 -8
  366. package/types/main/rules/UnconnectedElement.d.ts.map +0 -1
  367. package/types/main/rules/UnsafeRunningContext.d.ts +0 -8
  368. package/types/main/rules/UnsafeRunningContext.d.ts.map +0 -1
  369. package/types/main/rules/UnusedVariable.d.ts +0 -8
  370. package/types/main/rules/UnusedVariable.d.ts.map +0 -1
  371. package/types/main/store/DefaultRuleStore.d.ts +0 -3
  372. package/types/main/store/DefaultRuleStore.d.ts.map +0 -1
  373. package/types/main/store/RuleRegistry.d.ts +0 -23
  374. package/types/main/store/RuleRegistry.d.ts.map +0 -1
  375. package/vite.config.ts +0 -33
  376. /package/{out/index.d.ts → index.d.ts} +0 -0
  377. /package/{out/index.js → index.js} +0 -0
  378. /package/{out/main → main}/config/NodeIcons.d.ts +0 -0
  379. /package/{out/main → main}/config/NodeIcons.js +0 -0
  380. /package/{out/main → main}/config/RegexAdapter.d.ts +0 -0
  381. /package/{out/main → main}/config/RegexAdapter.js +0 -0
  382. /package/{out/main → main}/config/RuleRegistry.d.ts +0 -0
  383. /package/{out/main → main}/config/RuleRegistry.js +0 -0
  384. /package/{out/main → main}/config/VariableIcons.d.ts +0 -0
  385. /package/{out/main → main}/config/VariableIcons.js +0 -0
  386. /package/{out/main → main}/enums/MetadataTypes.d.ts +0 -0
  387. /package/{out/main → main}/enums/MetadataTypes.js +0 -0
  388. /package/{out/main → main}/interfaces/IExceptions.d.ts +0 -0
  389. /package/{out/main → main}/interfaces/IExceptions.js +0 -0
  390. /package/{out/main → main}/interfaces/IRuleConfig.d.ts +0 -0
  391. /package/{out/main → main}/interfaces/IRuleConfig.js +0 -0
  392. /package/{out/main → main}/interfaces/IRuleDefinition.d.ts +0 -0
  393. /package/{out/main → main}/interfaces/IRuleDefinition.js +0 -0
  394. /package/{out/main → main}/interfaces/IRuleOptions.d.ts +0 -0
  395. /package/{out/main → main}/interfaces/IRuleOptions.js +0 -0
  396. /package/{out/main → main}/interfaces/IRulesConfig.d.ts +0 -0
  397. /package/{out/main → main}/interfaces/IRulesConfig.js +0 -0
  398. /package/{out/main → main}/internals/internals.d.ts +0 -0
  399. /package/{out/main → main}/internals/internals.js +0 -0
  400. /package/{out/main → main}/libs/BuildFlow.d.ts +0 -0
  401. /package/{out/main → main}/libs/BuildFlow.js +0 -0
  402. /package/{out/main → main}/libs/Compiler.d.ts +0 -0
  403. /package/{out/main → main}/libs/Compiler.js +0 -0
  404. /package/{out/main → main}/libs/ExportDetails.d.ts +0 -0
  405. /package/{out/main → main}/libs/ExportDetails.js +0 -0
  406. /package/{out/main → main}/libs/ExportDiagram.d.ts +0 -0
  407. /package/{out/main → main}/libs/ExportDiagram.js +0 -0
  408. /package/{out/main → main}/libs/ExportSarif.d.ts +0 -0
  409. /package/{out/main → main}/libs/ExportSarif.js +0 -0
  410. /package/{out/main → main}/libs/FixFlows.d.ts +0 -0
  411. /package/{out/main → main}/libs/FixFlows.js +0 -0
  412. /package/{out/main → main}/libs/GetRuleDefinitions.d.ts +0 -0
  413. /package/{out/main → main}/libs/GetRuleDefinitions.js +0 -0
  414. /package/{out/main → main}/libs/ParseFlows.d.ts +0 -0
  415. /package/{out/main → main}/libs/ParseFlows.js +0 -0
  416. /package/{out/main → main}/libs/RuleDocumentation.d.ts +0 -0
  417. /package/{out/main → main}/libs/RuleDocumentation.js +0 -0
  418. /package/{out/main → main}/libs/ScanFlows.d.ts +0 -0
  419. /package/{out/main → main}/libs/ScanFlows.js +0 -0
  420. /package/{out/main → main}/models/FlatViolation.d.ts +0 -0
  421. /package/{out/main → main}/models/FlatViolation.js +0 -0
  422. /package/{out/main → main}/models/Flow.d.ts +0 -0
  423. /package/{out/main → main}/models/Flow.js +0 -0
  424. /package/{out/main → main}/models/FlowAttribute.d.ts +0 -0
  425. /package/{out/main → main}/models/FlowAttribute.js +0 -0
  426. /package/{out/main → main}/models/FlowElement.d.ts +0 -0
  427. /package/{out/main → main}/models/FlowElement.js +0 -0
  428. /package/{out/main → main}/models/FlowElementConnector.d.ts +0 -0
  429. /package/{out/main → main}/models/FlowElementConnector.js +0 -0
  430. /package/{out/main → main}/models/FlowMetadata.d.ts +0 -0
  431. /package/{out/main → main}/models/FlowMetadata.js +0 -0
  432. /package/{out/main → main}/models/FlowNode.d.ts +0 -0
  433. /package/{out/main → main}/models/FlowNode.js +0 -0
  434. /package/{out/main → main}/models/FlowResource.d.ts +0 -0
  435. /package/{out/main → main}/models/FlowResource.js +0 -0
  436. /package/{out/main → main}/models/FlowType.d.ts +0 -0
  437. /package/{out/main → main}/models/FlowType.js +0 -0
  438. /package/{out/main → main}/models/FlowVariable.d.ts +0 -0
  439. /package/{out/main → main}/models/FlowVariable.js +0 -0
  440. /package/{out/main → main}/models/LoopRuleCommon.d.ts +0 -0
  441. /package/{out/main → main}/models/LoopRuleCommon.js +0 -0
  442. /package/{out/main → main}/models/ParsedFlow.d.ts +0 -0
  443. /package/{out/main → main}/models/ParsedFlow.js +0 -0
  444. /package/{out/main → main}/models/RuleCommon.d.ts +0 -0
  445. /package/{out/main → main}/models/RuleCommon.js +0 -0
  446. /package/{out/main → main}/models/RuleInfo.d.ts +0 -0
  447. /package/{out/main → main}/models/RuleInfo.js +0 -0
  448. /package/{out/main → main}/models/RuleResult.d.ts +0 -0
  449. /package/{out/main → main}/models/RuleResult.js +0 -0
  450. /package/{out/main → main}/models/ScanResult.d.ts +0 -0
  451. /package/{out/main → main}/models/ScanResult.js +0 -0
  452. /package/{out/main → main}/models/Violation.d.ts +0 -0
  453. /package/{out/main → main}/models/Violation.js +0 -0
  454. /package/{out/main → main}/rules/APIVersion.d.ts +0 -0
  455. /package/{out/main → main}/rules/APIVersion.js +0 -0
  456. /package/{out/main → main}/rules/ActionCallsInLoop.d.ts +0 -0
  457. /package/{out/main → main}/rules/ActionCallsInLoop.js +0 -0
  458. /package/{out/main → main}/rules/AutoLayout.d.ts +0 -0
  459. /package/{out/main → main}/rules/AutoLayout.js +0 -0
  460. /package/{out/main → main}/rules/CopyAPIName.d.ts +0 -0
  461. /package/{out/main → main}/rules/CopyAPIName.js +0 -0
  462. /package/{out/main → main}/rules/CyclomaticComplexity.d.ts +0 -0
  463. /package/{out/main → main}/rules/CyclomaticComplexity.js +0 -0
  464. /package/{out/main → main}/rules/DMLStatementInLoop.d.ts +0 -0
  465. /package/{out/main → main}/rules/DMLStatementInLoop.js +0 -0
  466. /package/{out/main → main}/rules/DuplicateDMLOperation.d.ts +0 -0
  467. /package/{out/main → main}/rules/DuplicateDMLOperation.js +0 -0
  468. /package/{out/main → main}/rules/FlowDescription.d.ts +0 -0
  469. /package/{out/main → main}/rules/FlowDescription.js +0 -0
  470. /package/{out/main → main}/rules/FlowName.d.ts +0 -0
  471. /package/{out/main → main}/rules/FlowName.js +0 -0
  472. /package/{out/main → main}/rules/GetRecordAllFields.d.ts +0 -0
  473. /package/{out/main → main}/rules/GetRecordAllFields.js +0 -0
  474. /package/{out/main → main}/rules/HardcodedId.d.ts +0 -0
  475. /package/{out/main → main}/rules/HardcodedId.js +0 -0
  476. /package/{out/main → main}/rules/HardcodedSecret.d.ts +0 -0
  477. /package/{out/main → main}/rules/HardcodedSecret.js +0 -0
  478. /package/{out/main → main}/rules/HardcodedUrl.d.ts +0 -0
  479. /package/{out/main → main}/rules/HardcodedUrl.js +0 -0
  480. /package/{out/main → main}/rules/InactiveFlow.d.ts +0 -0
  481. /package/{out/main → main}/rules/InactiveFlow.js +0 -0
  482. /package/{out/main → main}/rules/MissingFaultPath.d.ts +0 -0
  483. /package/{out/main → main}/rules/MissingFaultPath.js +0 -0
  484. /package/{out/main → main}/rules/MissingMetadataDescription.d.ts +0 -0
  485. /package/{out/main → main}/rules/MissingMetadataDescription.js +0 -0
  486. /package/{out/main → main}/rules/MissingNullHandler.d.ts +0 -0
  487. /package/{out/main → main}/rules/MissingNullHandler.js +0 -0
  488. /package/{out/main → main}/rules/MissingRecordTriggerFilter.d.ts +0 -0
  489. /package/{out/main → main}/rules/ProcessBuilder.d.ts +0 -0
  490. /package/{out/main → main}/rules/ProcessBuilder.js +0 -0
  491. /package/{out/main → main}/rules/RecordIdAsString.d.ts +0 -0
  492. /package/{out/main → main}/rules/RecordIdAsString.js +0 -0
  493. /package/{out/main → main}/rules/RecursiveAfterUpdate.d.ts +0 -0
  494. /package/{out/main → main}/rules/RecursiveAfterUpdate.js +0 -0
  495. /package/{out/main → main}/rules/SOQLQueryInLoop.d.ts +0 -0
  496. /package/{out/main → main}/rules/SOQLQueryInLoop.js +0 -0
  497. /package/{out/main → main}/rules/SameRecordFieldUpdates.d.ts +0 -0
  498. /package/{out/main → main}/rules/SameRecordFieldUpdates.js +0 -0
  499. /package/{out/main → main}/rules/TransformInsteadOfLoop.d.ts +0 -0
  500. /package/{out/main → main}/rules/TransformInsteadOfLoop.js +0 -0
  501. /package/{out/main → main}/rules/TriggerOrder.d.ts +0 -0
  502. /package/{out/main → main}/rules/TriggerOrder.js +0 -0
  503. /package/{out/main → main}/rules/UnconnectedElement.d.ts +0 -0
  504. /package/{out/main → main}/rules/UnconnectedElement.js +0 -0
  505. /package/{out/main → main}/rules/UnsafeRunningContext.d.ts +0 -0
  506. /package/{out/main → main}/rules/UnsafeRunningContext.js +0 -0
  507. /package/{out/main → main}/rules/UnusedVariable.d.ts +0 -0
  508. /package/{out/main → main}/rules/UnusedVariable.js +0 -0
@@ -1,188 +0,0 @@
1
- import { IRuleDefinition } from "../interfaces/IRuleDefinition";
2
- import { IRuleConfig } from "../interfaces/IRuleConfig";
3
- import { IRulesConfig } from "../interfaces/IRulesConfig";
4
- // Import all rules
5
- import { ActionCallsInLoop } from "../rules/ActionCallsInLoop";
6
- import { APIVersion } from "../rules/APIVersion";
7
- import { AutoLayout } from "../rules/AutoLayout";
8
- import { CopyAPIName } from "../rules/CopyAPIName";
9
- import { CyclomaticComplexity } from "../rules/CyclomaticComplexity";
10
- import { DMLStatementInLoop } from "../rules/DMLStatementInLoop";
11
- import { DuplicateDMLOperation } from "../rules/DuplicateDMLOperation";
12
- import { FlowDescription } from "../rules/FlowDescription";
13
- import { FlowName } from "../rules/FlowName";
14
- import { GetRecordAllFields } from "../rules/GetRecordAllFields";
15
- import { HardcodedId } from "../rules/HardcodedId";
16
- import { HardcodedUrl } from "../rules/HardcodedUrl";
17
- import { HardcodedSecret } from "../rules/HardcodedSecret";
18
- import { InactiveFlow } from "../rules/InactiveFlow";
19
- import { MissingFaultPath } from "../rules/MissingFaultPath";
20
- import { MissingNullHandler } from "../rules/MissingNullHandler";
21
- import { ProcessBuilder } from "../rules/ProcessBuilder";
22
- import { RecursiveAfterUpdate } from "../rules/RecursiveAfterUpdate";
23
- import { SameRecordFieldUpdates } from "../rules/SameRecordFieldUpdates";
24
- import { SOQLQueryInLoop } from "../rules/SOQLQueryInLoop";
25
- import { TriggerOrder } from "../rules/TriggerOrder";
26
- import { UnconnectedElement } from "../rules/UnconnectedElement";
27
- import { UnsafeRunningContext } from "../rules/UnsafeRunningContext";
28
- import { UnusedVariable } from "../rules/UnusedVariable";
29
- import { MissingMetadataDescription } from "../rules/MissingMetadataDescription";
30
- import { MissingRecordTriggerFilter } from "../rules/MissingRecordTriggerFilter";
31
- import { TransformInsteadOfLoop } from "../rules/TransformInsteadOfLoop";
32
- import { RecordIdAsString } from "../rules/RecordIdAsString";
33
-
34
- type RuleConstructor = new () => IRuleDefinition;
35
-
36
- interface RuleRegistryEntry {
37
- ruleId: string;
38
- ruleClass: RuleConstructor;
39
- legacyName: string;
40
- isBeta: boolean;
41
- }
42
-
43
- class RuleRegistry {
44
- private rules: Map<string, RuleRegistryEntry> = new Map();
45
- private legacyNameMap: Map<string, string> = new Map();
46
-
47
- register(
48
- ruleId: string,
49
- ruleClass: RuleConstructor,
50
- legacyName: string,
51
- isBeta: boolean = false
52
- ): void {
53
- const entry: RuleRegistryEntry = {
54
- ruleId,
55
- ruleClass,
56
- legacyName,
57
- isBeta,
58
- };
59
- this.rules.set(ruleId, entry);
60
- this.legacyNameMap.set(legacyName, ruleId);
61
- }
62
-
63
- get(idOrLegacyName: string): RuleRegistryEntry | undefined {
64
- let entry = this.rules.get(idOrLegacyName);
65
- if (!entry) {
66
- const ruleId = this.legacyNameMap.get(idOrLegacyName);
67
- if (ruleId) {
68
- entry = this.rules.get(ruleId);
69
- }
70
- }
71
- return entry;
72
- }
73
-
74
- getAllRuleIds(includeBeta: boolean = false): string[] {
75
- return Array.from(this.rules.values())
76
- .filter(entry => includeBeta || !entry.isBeta)
77
- .map(entry => entry.ruleId);
78
- }
79
-
80
- has(idOrLegacyName: string): boolean {
81
- return this.get(idOrLegacyName) !== undefined;
82
- }
83
-
84
- createInstance(idOrLegacyName: string): IRuleDefinition {
85
- const entry = this.get(idOrLegacyName);
86
- if (!entry) {
87
- throw new Error(`Rule not found: ${idOrLegacyName}`);
88
- }
89
- return new entry.ruleClass();
90
- }
91
-
92
- getRules(
93
- ruleConfig?: Map<string, unknown>,
94
- options?: IRulesConfig
95
- ): IRuleDefinition[] {
96
- const includeBeta = options?.betaMode === true || options?.betamode === true;
97
- const rulesMode = options?.ruleMode || "merged";
98
- const selectedRules: IRuleDefinition[] = [];
99
-
100
- if (rulesMode === "isolated" && ruleConfig && ruleConfig.size > 0) {
101
- for (const key of ruleConfig.keys()) {
102
- const entry = this.get(key);
103
- if (!entry) continue;
104
-
105
- const config = ruleConfig.get(key) as IRuleConfig | undefined;
106
- if (config?.enabled === false) continue;
107
-
108
- const rule = this.createInstance(entry.ruleId);
109
- if (config?.severity) {
110
- rule.severity = config.severity;
111
- }
112
-
113
- selectedRules.push(rule);
114
- }
115
- return selectedRules;
116
- }
117
-
118
- const allRuleIds = this.getAllRuleIds(includeBeta);
119
-
120
- for (const ruleId of allRuleIds) {
121
- const rule = this.createInstance(ruleId);
122
-
123
- const config = (
124
- ruleConfig?.get(rule.ruleId) ??
125
- ruleConfig?.get(rule.name)
126
- ) as IRuleConfig | undefined;
127
-
128
- if (config?.enabled === false) continue;
129
- if (config?.severity) {
130
- rule.severity = config.severity;
131
- }
132
-
133
- selectedRules.push(rule);
134
- }
135
-
136
- return selectedRules;
137
- }
138
-
139
- getRulesByNames(ruleNames?: string[], options?: IRulesConfig): IRuleDefinition[] {
140
- if (!ruleNames || ruleNames.length === 0) {
141
- return this.getRules(undefined, options);
142
- }
143
-
144
- const config = new Map<string, IRuleConfig>();
145
- for (const identifier of ruleNames) {
146
- const entry = this.get(identifier);
147
- if (entry) {
148
- config.set(entry.ruleId, { enabled: true });
149
- }
150
- }
151
-
152
- return this.getRules(config, { ...options, ruleMode: "isolated" });
153
- }
154
- }
155
-
156
- const registry = new RuleRegistry();
157
-
158
- registry.register("action-call-in-loop", ActionCallsInLoop, "ActionCallsInLoop");
159
- registry.register("invalid-api-version", APIVersion, "APIVersion");
160
- registry.register("missing-auto-layout", AutoLayout, "AutoLayout");
161
- registry.register("unclear-api-naming", CopyAPIName, "CopyAPIName");
162
- registry.register("excessive-cyclomatic-complexity", CyclomaticComplexity, "CyclomaticComplexity");
163
- registry.register("dml-in-loop", DMLStatementInLoop, "DMLStatementInLoop");
164
- registry.register("duplicate-dml", DuplicateDMLOperation, "DuplicateDMLOperation");
165
- registry.register("missing-flow-description", FlowDescription, "FlowDescription");
166
- registry.register("invalid-naming-convention", FlowName, "FlowName");
167
- registry.register("get-record-all-fields", GetRecordAllFields, "GetRecordAllFields");
168
- registry.register("hardcoded-id", HardcodedId, "HardcodedId");
169
- registry.register("hardcoded-url", HardcodedUrl, "HardcodedUrl");
170
- registry.register("inactive-flow", InactiveFlow, "InactiveFlow");
171
- registry.register("missing-fault-path", MissingFaultPath, "MissingFaultPath");
172
- registry.register("missing-null-handler", MissingNullHandler, "MissingNullHandler");
173
- registry.register("process-builder-usage", ProcessBuilder, "ProcessBuilder");
174
- registry.register("recursive-record-update", RecursiveAfterUpdate, "RecursiveAfterUpdate");
175
- registry.register("same-record-field-updates", SameRecordFieldUpdates, "SameRecordFieldUpdates");
176
- registry.register("soql-in-loop", SOQLQueryInLoop, "SOQLQueryInLoop");
177
- registry.register("unspecified-trigger-order", TriggerOrder, "TriggerOrder");
178
- registry.register("unreachable-element", UnconnectedElement, "UnconnectedElement");
179
- registry.register("unsafe-running-context", UnsafeRunningContext, "UnsafeRunningContext");
180
- registry.register("unused-variable", UnusedVariable, "UnusedVariable");
181
-
182
- registry.register("missing-metadata-description", MissingMetadataDescription, "MissingMetadataDescription", true);
183
- registry.register("missing-record-trigger-filter", MissingRecordTriggerFilter, "MissingFilterRecordTrigger", true);
184
- registry.register("transform-instead-of-loop", TransformInsteadOfLoop, "TransformInsteadOfLoop", true);
185
- registry.register("record-id-as-string", RecordIdAsString, "RecordIdAsString", true);
186
- registry.register("hardcoded-secret", HardcodedSecret, "HardcodedSecret", true);
187
-
188
- export const ruleRegistry = registry;
@@ -1,57 +0,0 @@
1
- /**
2
- * Icon configuration for flow variable types.
3
- * Includes icons for variable subtypes and boolean states.
4
- */
5
-
6
- export interface VariableIconConfig {
7
- // Variable subtype icons
8
- subtypes: {
9
- [subtype: string]: string;
10
- };
11
- // Boolean state icons (for isCollection, isInput, isOutput)
12
- boolean: {
13
- true: string;
14
- false: string;
15
- };
16
- }
17
-
18
- /**
19
- * Default icons using emoji (recommended for modern environments)
20
- */
21
- export const DEFAULT_VARIABLE_ICONS: VariableIconConfig = {
22
- subtypes: {
23
- variables: '\uD83D\uDCCA', // BAR CHART (data/variable)
24
- constants: '\uD83D\uDD12', // LOCK (constant/immutable)
25
- formulas: '\uD83E\uDDEE', // ABACUS (calculation)
26
- choices: '\uD83D\uDCCB', // CLIPBOARD (picklist/choices)
27
- dynamicChoiceSets: '\uD83D\uDD04', // ARROWS (dynamic)
28
- },
29
- boolean: {
30
- true: '\u2705', // CHECK MARK
31
- false: '\u2B1C', // WHITE SQUARE
32
- }
33
- };
34
-
35
- /**
36
- * ASCII fallback icons (for environments without emoji support)
37
- */
38
- export const ASCII_VARIABLE_ICONS: VariableIconConfig = {
39
- subtypes: {
40
- variables: '[V]',
41
- constants: '[C]',
42
- formulas: '[F]',
43
- choices: '[CH]',
44
- dynamicChoiceSets: '[D]',
45
- },
46
- boolean: {
47
- true: '[X]',
48
- false: '[ ]',
49
- }
50
- };
51
-
52
- /**
53
- * Get default variable icon config
54
- */
55
- export function getDefaultVariableIconConfig(): VariableIconConfig {
56
- return DEFAULT_VARIABLE_ICONS;
57
- }
@@ -1,6 +0,0 @@
1
- export enum MetaType {
2
- ATTRIBUTE = "attribute",
3
- VARIABLE = "variable",
4
- RESOURCE = "resource",
5
- NODE = "node"
6
- }
@@ -1,6 +0,0 @@
1
- export interface IExceptions {
2
- [exceptionName: string]: {
3
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
- [property: string]: any[];
5
- };
6
- }
@@ -1,6 +0,0 @@
1
- export interface IRuleConfig {
2
- enabled?: boolean;
3
- severity?: "error" | "warning" | "note";
4
- message?: string; // Custom message to override rule description
5
- messageUrl?: string; // Custom URL for documentation (auto-generated if not provided)
6
- }
@@ -1,15 +0,0 @@
1
- import { Flow, RuleResult } from "../internals/internals";
2
-
3
- export interface IRuleDefinition {
4
- ruleId: string;
5
- description: string;
6
- summary: string; // Short summary (5-10 words) shown when no custom message
7
- docRefs: Array<{ label: string; path: string }>;
8
- execute(flow: Flow, options?: object, suppressions?: string[]): RuleResult;
9
- isConfigurable: boolean;
10
- label: string;
11
- name: string;
12
- severity?: string;
13
- supportedTypes: string[];
14
- uri?: string;
15
- }
@@ -1,5 +0,0 @@
1
- import { IRuleConfig } from "./IRuleConfig";
2
-
3
- export interface IRuleOptions {
4
- [ruleName: string]: IRuleConfig;
5
- }
@@ -1,17 +0,0 @@
1
- import { IExceptions } from "./IExceptions";
2
- import { IRuleOptions } from "./IRuleOptions";
3
-
4
- export enum DetailLevel {
5
- ENRICHED = 'enriched',
6
- SIMPLE = 'simple'
7
- }
8
-
9
- export interface IRulesConfig {
10
- betaMode?: boolean; // Toggles beta rules; defaults to false
11
- betamode?: boolean; // Use betaMode instead; to be removed
12
- detailLevel?: 'enriched' | 'simple' | DetailLevel;
13
- exceptions?: IExceptions;
14
- rules?: IRuleOptions;
15
- ruleMode?: "merged" | "isolated"; // Defaults to "merged"
16
- ignoreFlows?: string[]; // Flow API names to exclude from scanning
17
- }
@@ -1,35 +0,0 @@
1
- import type { IRuleDefinition } from "../interfaces/IRuleDefinition";
2
- import type { IRulesConfig } from "../interfaces/IRulesConfig";
3
-
4
- import { Compiler } from "../libs/Compiler";
5
- import { FlatViolation } from "../models/FlatViolation";
6
- import { Flow } from "../models/Flow";
7
- import { FlowAttribute } from "../models/FlowAttribute";
8
- import { FlowElement } from "../models/FlowElement";
9
- import { FlowNode } from "../models/FlowNode";
10
- import { FlowResource } from "../models/FlowResource";
11
- import { FlowType } from "../models/FlowType";
12
- import { FlowVariable } from "../models/FlowVariable";
13
- import { ParsedFlow } from "../models/ParsedFlow";
14
- import { RuleCommon } from "../models/RuleCommon";
15
- import { RuleResult } from "../models/RuleResult";
16
- import { ScanResult } from "../models/ScanResult";
17
- import { Violation } from "../models/Violation";
18
-
19
- // Used to prevent circular dependencies in Common JS
20
- export {
21
- FlowAttribute,
22
- FlowElement,
23
- FlowNode,
24
- FlowType,
25
- FlowVariable,
26
- FlowResource,
27
- Flow,
28
- Compiler,
29
- ScanResult,
30
- RuleResult,
31
- Violation,
32
- RuleCommon,
33
- ParsedFlow,
34
- };
35
- export type { IRuleDefinition, IRulesConfig, FlatViolation };
@@ -1,14 +0,0 @@
1
- export function BuildFlow(nodesToMerge) {
2
- let res = {};
3
- for (const nodeToMerge of nodesToMerge) {
4
- const subtype = nodeToMerge.subtype;
5
- const nodesOfType = nodesToMerge.filter((node) => subtype === node.subtype);
6
- res = convertFlowNodes(res, nodesOfType, subtype);
7
- }
8
- return res;
9
- }
10
-
11
- function convertFlowNodes(obj, nodes, key) {
12
- obj[key] = nodes.map((node) => node.element);
13
- return obj;
14
- }
@@ -1,53 +0,0 @@
1
- import { FlowNode } from "../models/FlowNode";
2
-
3
- export class Compiler {
4
- public visitedElements: Set<string>;
5
- constructor() {
6
- this.visitedElements = new Set<string>();
7
- }
8
- traverseFlow(
9
- startElementName: string,
10
- visitCallback: (element: FlowNode) => void,
11
- nodeMap: Map<string, FlowNode>,
12
- allConnectors: Map<string, Set<string>>,
13
- endElementName?: string
14
- ) {
15
- // Iterative Deepening Depth-First Search (IDDFS)
16
- let elementsToVisit = [startElementName];
17
- while (elementsToVisit.length > 0) {
18
- const nextElements: string[] = [];
19
- for (const elementName of elementsToVisit) {
20
- if (!this.visitedElements.has(elementName)) {
21
- const currentElement = nodeMap.get(elementName);
22
- if (currentElement) {
23
- visitCallback(currentElement);
24
- this.visitedElements.add(elementName);
25
- nextElements.push(...this.findNextElements(elementName, allConnectors, nodeMap, endElementName));
26
- }
27
- }
28
- }
29
- if (nextElements.length === 0) {
30
- // If no more next elements
31
- break; // Terminate the traversal
32
- }
33
- elementsToVisit = nextElements;
34
- }
35
- }
36
- private findNextElements(
37
- elementName: string,
38
- allConnectors: Map<string, Set<string>>,
39
- nodeMap: Map<string, FlowNode>,
40
- endElementName?: string
41
- ): string[] {
42
- const nextElements: string[] = [];
43
- const targets = allConnectors.get(elementName);
44
- if (targets) {
45
- for (const targetReference of targets) {
46
- if (targetReference !== endElementName && nodeMap.has(targetReference)) { // Safety check for existence
47
- nextElements.push(targetReference);
48
- }
49
- }
50
- }
51
- return nextElements;
52
- }
53
- }
@@ -1,58 +0,0 @@
1
- import { FlatViolation } from "../models/FlatViolation";
2
- import { ScanResult } from "../models/ScanResult";
3
-
4
- export function exportDetails(results: ScanResult[], includeDetails = false): FlatViolation[] {
5
- return results.flatMap(result => {
6
- const flow = result.flow;
7
- const flowName = flow.name || flow.label;
8
- // Prefer fsPath (resolved absolute path), fallback to uri (input path), or construct from name
9
- const flowFile = flow.fsPath
10
- ? flow.fsPath.replace(/\\/g, "/")
11
- : flow.uri
12
- ? flow.uri.replace(/\\/g, "/")
13
- : `${flow.name}.flow-meta.xml`;
14
-
15
- return result.ruleResults
16
- .filter(rule => rule.occurs && rule.details?.length)
17
- .flatMap(rule => rule.details.map(detail => {
18
- // Base violation without details
19
- const { details, ...base } = detail;
20
-
21
- // Build the flat violation with conditionally flattened details
22
- const exported: FlatViolation = {
23
- ...base,
24
- flowFile,
25
- flowName,
26
- ruleId: rule.ruleId,
27
- ruleName: rule.ruleName,
28
- severity: rule.severity ?? "warning",
29
- message: rule.message || rule.ruleDefinition.description,
30
- messageUrl: rule.messageUrl,
31
- };
32
-
33
- // Flatten details object into top-level properties if includeDetails is true
34
- if (includeDetails && details) {
35
- if ('dataType' in details) {
36
- exported.dataType = details.dataType as string;
37
- }
38
- if ('locationX' in details) {
39
- exported.locationX = String(details.locationX);
40
- }
41
- if ('locationY' in details) {
42
- exported.locationY = String(details.locationY);
43
- }
44
- if ('connectsTo' in details) {
45
- // Join array into comma-separated string
46
- exported.connectsTo = Array.isArray(details.connectsTo)
47
- ? details.connectsTo.join(', ')
48
- : String(details.connectsTo);
49
- }
50
- if ('expression' in details) {
51
- exported.expression = details.expression as string;
52
- }
53
- }
54
-
55
- return exported;
56
- }));
57
- });
58
- }
@@ -1,83 +0,0 @@
1
- import { Flow } from "../models/Flow";
2
- import { ParsedFlow } from "../models/ParsedFlow";
3
-
4
- export interface DiagramOptions {
5
- includeDetails?: boolean;
6
- includeMarkdownDocs?: boolean;
7
- collapsedDetails?: boolean;
8
- }
9
-
10
- /**
11
- * Generate Markdown documentation for parsed flows, including Mermaid diagrams for valid flows.
12
- *
13
- * This function can be chained after parse() to generate documentation.
14
- * It filters out errored parses and only documents valid flows.
15
- *
16
- * @param parsedFlows Array of ParsedFlow objects from parse()
17
- * @param options Visualization options for Mermaid diagrams
18
- *
19
- * @returns Markdown string with documentation
20
- *
21
- * @example
22
- * ```typescript
23
- * // Node.js usage
24
- * import { parse, exportFlowMarkdown } from "@flow-scanner/lightning-flow-scanner-core";
25
- * import fs from "fs/promises";
26
- *
27
- * const parsed = await parse(["flows/*.xml"]);
28
- * const md = exportFlowMarkdown(parsed, {
29
- * includeDetails: true,
30
- * includeMarkdownDocs: true,
31
- * collapsedDetails: true
32
- * });
33
- * await fs.writeFile("flow-doc.md", md);
34
- * ```
35
- *
36
- * @example
37
- * ```typescript
38
- * // Chained (async/await)
39
- * const md = await parse(["flows/*.xml"]).then(parsed =>
40
- * exportFlowMarkdown(parsed, { includeDetails: true })
41
- * );
42
- * ```
43
- */
44
- export function exportDiagram(
45
- parsedFlows: ParsedFlow[],
46
- options: DiagramOptions = {
47
- includeDetails: true,
48
- includeMarkdownDocs: true,
49
- collapsedDetails: true
50
- }
51
- ): string {
52
- const validFlows = parsedFlows.filter(p => p.flow).map(p => p.flow!);
53
-
54
- let markdown = "# Flow Documentation\n\n";
55
-
56
- if (validFlows.length === 0) {
57
- markdown += "No valid flows found.\n\n";
58
- }
59
-
60
- for (const flow of validFlows) {
61
- markdown += `## ${flow.name}\n\n`;
62
-
63
- const vizOptions = {
64
- includeDetails: options.includeDetails,
65
- includeMarkdownDocs: options.includeMarkdownDocs,
66
- collapsedDetails: options.collapsedDetails
67
- };
68
-
69
- markdown += flow.visualize("mermaid", vizOptions) + "\n\n";
70
- }
71
-
72
- // Optionally add errors section if any
73
- const errors = parsedFlows.filter(p => p.errorMessage);
74
- if (errors.length > 0) {
75
- markdown += "## Parse Errors\n\n";
76
- for (const err of errors) {
77
- markdown += `- ${err.uri}: ${err.errorMessage}\n`;
78
- }
79
- markdown += "\n";
80
- }
81
-
82
- return markdown;
83
- }
@@ -1,92 +0,0 @@
1
- import { Flow } from "../models/Flow";
2
- import { ScanResult } from "../models/ScanResult";
3
- import { Violation } from "../models/Violation";
4
-
5
- export function exportSarif(results: ScanResult[]): string {
6
- const runs = results.map((result) => {
7
- const flow = result.flow;
8
- const uri = getUri(flow);
9
- return {
10
- artifacts: [{ location: { uri }, sourceLanguage: "xml" }],
11
- results: result.ruleResults
12
- .filter(r => r.occurs)
13
- .flatMap(r => r.details.map(d => ({
14
- level: mapSeverity(r.severity),
15
- locations: [{
16
- physicalLocation: {
17
- artifactLocation: { index: 0, uri },
18
- region: mapRegion(d)
19
- },
20
- }],
21
- message: {
22
- text: r.errorMessage || (r.message || r.ruleDefinition.description
23
- ? `${r.message || r.ruleDefinition.description} (${d.name})`
24
- : `${r.ruleId} in ${d.name}`)
25
- },
26
- properties: {
27
- element: d.name,
28
- flow: flow.name,
29
- type: d.type,
30
- ...d.details,
31
- },
32
- ruleId: r.ruleId,
33
- }))),
34
- tool: {
35
- driver: {
36
- informationUri: "https://github.com/Flow-Scanner/lightning-flow-scanner",
37
- name: "Lightning Flow Scanner",
38
- rules: result.ruleResults
39
- .filter(r => r.occurs)
40
- .map(r => ({
41
- defaultConfiguration: { level: mapSeverity(r.severity) },
42
- fullDescription: { text: r.message || r.ruleDefinition.description || "" },
43
- id: r.ruleId,
44
- shortDescription: { text: r.message || r.ruleDefinition.description || r.ruleId },
45
- })),
46
- version: "1.0.0",
47
- },
48
- },
49
- };
50
- });
51
- return JSON.stringify({
52
- $schema: "https://json.schemastore.org/sarif-2.1.0.json",
53
- runs,
54
- version: "2.1.0",
55
- }, null, 2);
56
- }
57
-
58
- function getUri(flow: Flow): string {
59
- // Prefer uri (works in both browser and Node)
60
- if (flow.uri) {
61
- return flow.uri.replace(/\\/g, "/");
62
- }
63
-
64
- // Node only: fsPath is only set in Node environments
65
- if (flow.fsPath) {
66
- const match = flow.fsPath.match(/(?:force-app|src)\/.+$/);
67
- if (match) {
68
- return match[0].replace(/\\/g, "/");
69
- }
70
- return flow.fsPath.replace(/\\/g, "/");
71
- }
72
-
73
- return `flows/${flow.name}.flow-meta.xml`;
74
- }
75
-
76
- function mapRegion(detail: Violation): any {
77
- // Use pre-enriched line/column from Violation (added by enrichViolationsWithLineNumbers)
78
- // Fallback if somehow missing (e.g., unenriched legacy data)
79
- return {
80
- startColumn: detail.columnNumber ?? 1,
81
- startLine: detail.lineNumber ?? 1,
82
- };
83
- }
84
-
85
- function mapSeverity(sev: string): "error" | "note" | "warning" {
86
- switch (sev?.toLowerCase()) {
87
- case "info":
88
- case "note": return "note";
89
- case "warning": return "warning";
90
- default: return "warning";
91
- }
92
- }