@eagleoutice/flowr 1.3.11

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 (668) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +27 -0
  3. package/benchmark/benchmark-slicer.js +223 -0
  4. package/benchmark/index.d.ts +3 -0
  5. package/benchmark/index.js +20 -0
  6. package/benchmark/slicer.d.ts +100 -0
  7. package/benchmark/slicer.js +223 -0
  8. package/benchmark/stats/index.d.ts +10 -0
  9. package/benchmark/stats/index.js +27 -0
  10. package/benchmark/stats/print.d.ts +7 -0
  11. package/benchmark/stats/print.js +157 -0
  12. package/benchmark/stats/stats.d.ts +41 -0
  13. package/benchmark/stats/stats.js +6 -0
  14. package/benchmark/stopwatch.d.ts +35 -0
  15. package/benchmark/stopwatch.js +79 -0
  16. package/cli/benchmark-app.d.ts +9 -0
  17. package/cli/benchmark-app.js +52 -0
  18. package/cli/benchmark-helper-app.d.ts +7 -0
  19. package/cli/benchmark-helper-app.js +60 -0
  20. package/cli/common/features.d.ts +3 -0
  21. package/cli/common/features.js +30 -0
  22. package/cli/common/index.d.ts +2 -0
  23. package/cli/common/index.js +19 -0
  24. package/cli/common/options.d.ts +20 -0
  25. package/cli/common/options.js +82 -0
  26. package/cli/common/script.d.ts +21 -0
  27. package/cli/common/script.js +61 -0
  28. package/cli/common/scripts-info.d.ts +24 -0
  29. package/cli/common/scripts-info.js +69 -0
  30. package/cli/export-quads-app.d.ts +7 -0
  31. package/cli/export-quads-app.js +46 -0
  32. package/cli/repl/commands/cfg.d.ts +3 -0
  33. package/cli/repl/commands/cfg.js +37 -0
  34. package/cli/repl/commands/commands.d.ts +11 -0
  35. package/cli/repl/commands/commands.js +103 -0
  36. package/cli/repl/commands/dataflow.d.ts +3 -0
  37. package/cli/repl/commands/dataflow.js +34 -0
  38. package/cli/repl/commands/execute.d.ts +4 -0
  39. package/cli/repl/commands/execute.js +27 -0
  40. package/cli/repl/commands/index.d.ts +2 -0
  41. package/cli/repl/commands/index.js +19 -0
  42. package/cli/repl/commands/main.d.ts +39 -0
  43. package/cli/repl/commands/main.js +14 -0
  44. package/cli/repl/commands/normalize.d.ts +3 -0
  45. package/cli/repl/commands/normalize.js +34 -0
  46. package/cli/repl/commands/parse.d.ts +2 -0
  47. package/cli/repl/commands/parse.js +109 -0
  48. package/cli/repl/commands/quit.d.ts +2 -0
  49. package/cli/repl/commands/quit.js +12 -0
  50. package/cli/repl/commands/version.d.ts +16 -0
  51. package/cli/repl/commands/version.js +33 -0
  52. package/cli/repl/core.d.ts +41 -0
  53. package/cli/repl/core.js +89 -0
  54. package/cli/repl/execute.d.ts +28 -0
  55. package/cli/repl/execute.js +79 -0
  56. package/cli/repl/index.d.ts +5 -0
  57. package/cli/repl/index.js +22 -0
  58. package/cli/repl/prompt.d.ts +2 -0
  59. package/cli/repl/prompt.js +9 -0
  60. package/cli/repl/server/connection.d.ts +21 -0
  61. package/cli/repl/server/connection.js +217 -0
  62. package/cli/repl/server/messages/analysis.d.ts +71 -0
  63. package/cli/repl/server/messages/analysis.js +21 -0
  64. package/cli/repl/server/messages/error.d.ts +11 -0
  65. package/cli/repl/server/messages/error.js +3 -0
  66. package/cli/repl/server/messages/hello.d.ts +20 -0
  67. package/cli/repl/server/messages/hello.js +3 -0
  68. package/cli/repl/server/messages/index.d.ts +1 -0
  69. package/cli/repl/server/messages/index.js +3 -0
  70. package/cli/repl/server/messages/messages.d.ts +35 -0
  71. package/cli/repl/server/messages/messages.js +20 -0
  72. package/cli/repl/server/messages/repl.d.ts +33 -0
  73. package/cli/repl/server/messages/repl.js +17 -0
  74. package/cli/repl/server/messages/slice.d.ts +25 -0
  75. package/cli/repl/server/messages/slice.js +17 -0
  76. package/cli/repl/server/net.d.ts +33 -0
  77. package/cli/repl/server/net.js +24 -0
  78. package/cli/repl/server/send.d.ts +4 -0
  79. package/cli/repl/server/send.js +18 -0
  80. package/cli/repl/server/server.d.ts +20 -0
  81. package/cli/repl/server/server.js +66 -0
  82. package/cli/repl/server/validate.d.ts +15 -0
  83. package/cli/repl/server/validate.js +34 -0
  84. package/cli/slicer-app.d.ts +11 -0
  85. package/cli/slicer-app.js +81 -0
  86. package/cli/statistics-app.d.ts +11 -0
  87. package/cli/statistics-app.js +98 -0
  88. package/cli/statistics-helper-app.d.ts +11 -0
  89. package/cli/statistics-helper-app.js +83 -0
  90. package/cli/summarizer-app.d.ts +18 -0
  91. package/cli/summarizer-app.js +67 -0
  92. package/core/index.d.ts +4 -0
  93. package/core/index.js +23 -0
  94. package/core/input.d.ts +42 -0
  95. package/core/input.js +3 -0
  96. package/core/output.d.ts +15 -0
  97. package/core/output.js +3 -0
  98. package/core/pipeline-executor.js +221 -0
  99. package/core/print/dataflow-printer.d.ts +8 -0
  100. package/core/print/dataflow-printer.js +62 -0
  101. package/core/print/normalize-printer.d.ts +7 -0
  102. package/core/print/normalize-printer.js +31 -0
  103. package/core/print/parse-printer.d.ts +3 -0
  104. package/core/print/parse-printer.js +29 -0
  105. package/core/print/print.d.ts +47 -0
  106. package/core/print/print.js +13 -0
  107. package/core/print/slice-diff-ansi.d.ts +2 -0
  108. package/core/print/slice-diff-ansi.js +49 -0
  109. package/core/slicer.d.ts +123 -0
  110. package/core/slicer.js +227 -0
  111. package/core/stepping-slicer.js +160 -0
  112. package/core/steps/all/00-parse.js +19 -0
  113. package/core/steps/all/10-normalize.js +21 -0
  114. package/core/steps/all/20-dataflow.js +21 -0
  115. package/core/steps/all/30-slice.js +16 -0
  116. package/core/steps/all/40-reconstruct.js +16 -0
  117. package/core/steps/all/core/00-parse.js +24 -0
  118. package/core/steps/all/core/10-normalize.js +46 -0
  119. package/core/steps/all/core/20-dataflow.js +39 -0
  120. package/core/steps/all/static-slicing/00-slice.js +21 -0
  121. package/core/steps/all/static-slicing/10-reconstruct.js +21 -0
  122. package/core/steps/index.js +21 -0
  123. package/core/steps/input.js +3 -0
  124. package/core/steps/output.js +3 -0
  125. package/core/steps/pipeline/create.js +130 -0
  126. package/core/steps/pipeline/default.js +15 -0
  127. package/core/steps/pipeline/dependency-checker.js +76 -0
  128. package/core/steps/pipeline/index.js +20 -0
  129. package/core/steps/pipeline/invalid-pipeline-error.js +14 -0
  130. package/core/steps/pipeline/pipeline.js +28 -0
  131. package/core/steps/step.js +8 -0
  132. package/core/steps/steps-provider.js +3 -0
  133. package/core/steps/steps.js +35 -0
  134. package/core/steps.d.ts +166 -0
  135. package/core/steps.js +99 -0
  136. package/dataflow/common/environments/append.js +48 -0
  137. package/dataflow/common/environments/environment.js +165 -0
  138. package/dataflow/common/environments/index.js +23 -0
  139. package/dataflow/common/environments/overwrite.js +82 -0
  140. package/dataflow/common/environments/register.js +49 -0
  141. package/dataflow/common/environments/resolve-by-name.js +35 -0
  142. package/dataflow/common/environments/scopes.js +6 -0
  143. package/dataflow/common/environments/scoping.js +27 -0
  144. package/dataflow/environments/append.d.ts +8 -0
  145. package/dataflow/environments/append.js +48 -0
  146. package/dataflow/environments/environment.d.ts +78 -0
  147. package/dataflow/environments/environment.js +161 -0
  148. package/dataflow/environments/index.d.ts +7 -0
  149. package/dataflow/environments/index.js +23 -0
  150. package/dataflow/environments/overwrite.d.ts +6 -0
  151. package/dataflow/environments/overwrite.js +82 -0
  152. package/dataflow/environments/register.d.ts +7 -0
  153. package/dataflow/environments/register.js +39 -0
  154. package/dataflow/environments/resolve-by-name.d.ts +12 -0
  155. package/dataflow/environments/resolve-by-name.js +35 -0
  156. package/dataflow/environments/scopes.d.ts +6 -0
  157. package/dataflow/environments/scopes.js +6 -0
  158. package/dataflow/environments/scoping.d.ts +4 -0
  159. package/dataflow/environments/scoping.js +27 -0
  160. package/dataflow/extractor.d.ts +6 -0
  161. package/dataflow/extractor.js +60 -0
  162. package/dataflow/graph/diff.d.ts +18 -0
  163. package/dataflow/graph/diff.js +206 -0
  164. package/dataflow/graph/edge.d.ts +37 -0
  165. package/dataflow/graph/edge.js +32 -0
  166. package/dataflow/graph/equal.js +127 -0
  167. package/dataflow/graph/graph.d.ts +120 -0
  168. package/dataflow/graph/graph.js +298 -0
  169. package/dataflow/graph/index.d.ts +4 -0
  170. package/dataflow/graph/index.js +21 -0
  171. package/dataflow/graph/quads.d.ts +8 -0
  172. package/dataflow/graph/quads.js +27 -0
  173. package/dataflow/graph/vertex.d.ts +86 -0
  174. package/dataflow/graph/vertex.js +3 -0
  175. package/dataflow/index.d.ts +5 -0
  176. package/dataflow/index.js +24 -0
  177. package/dataflow/internal/info.d.ts +21 -0
  178. package/dataflow/internal/info.js +16 -0
  179. package/dataflow/internal/linker.d.ts +41 -0
  180. package/dataflow/internal/linker.js +255 -0
  181. package/dataflow/internal/process/access.d.ts +4 -0
  182. package/dataflow/internal/process/access.js +53 -0
  183. package/dataflow/internal/process/expression-list.d.ts +8 -0
  184. package/dataflow/internal/process/expression-list.js +148 -0
  185. package/dataflow/internal/process/functions/argument.d.ts +8 -0
  186. package/dataflow/internal/process/functions/argument.js +46 -0
  187. package/dataflow/internal/process/functions/exit-points.d.ts +2 -0
  188. package/dataflow/internal/process/functions/exit-points.js +121 -0
  189. package/dataflow/internal/process/functions/function-call.d.ts +5 -0
  190. package/dataflow/internal/process/functions/function-call.js +99 -0
  191. package/dataflow/internal/process/functions/function-definition.d.ts +4 -0
  192. package/dataflow/internal/process/functions/function-definition.js +176 -0
  193. package/dataflow/internal/process/functions/parameter.d.ts +4 -0
  194. package/dataflow/internal/process/functions/parameter.js +47 -0
  195. package/dataflow/internal/process/if-then-else.d.ts +4 -0
  196. package/dataflow/internal/process/if-then-else.js +56 -0
  197. package/dataflow/internal/process/loops/for-loop.d.ts +4 -0
  198. package/dataflow/internal/process/loops/for-loop.js +54 -0
  199. package/dataflow/internal/process/loops/repeat-loop.d.ts +4 -0
  200. package/dataflow/internal/process/loops/repeat-loop.js +21 -0
  201. package/dataflow/internal/process/loops/while-loop.d.ts +4 -0
  202. package/dataflow/internal/process/loops/while-loop.js +31 -0
  203. package/dataflow/internal/process/operators/assignment.d.ts +4 -0
  204. package/dataflow/internal/process/operators/assignment.js +129 -0
  205. package/dataflow/internal/process/operators/non-assignment-binary-op.d.ts +4 -0
  206. package/dataflow/internal/process/operators/non-assignment-binary-op.js +25 -0
  207. package/dataflow/internal/process/operators/pipe.d.ts +4 -0
  208. package/dataflow/internal/process/operators/pipe.js +46 -0
  209. package/dataflow/internal/process/operators/unary-op.d.ts +4 -0
  210. package/dataflow/internal/process/operators/unary-op.js +10 -0
  211. package/dataflow/internal/process/symbol.d.ts +4 -0
  212. package/dataflow/internal/process/symbol.js +21 -0
  213. package/dataflow/internal/process/uninteresting-leaf.d.ts +3 -0
  214. package/dataflow/internal/process/uninteresting-leaf.js +9 -0
  215. package/dataflow/processor.d.ts +47 -0
  216. package/dataflow/processor.js +20 -0
  217. package/dataflow/v1/extractor.js +60 -0
  218. package/dataflow/v1/graph/diff.js +206 -0
  219. package/dataflow/v1/graph/edge.js +32 -0
  220. package/dataflow/v1/graph/graph.js +298 -0
  221. package/dataflow/v1/graph/index.js +21 -0
  222. package/dataflow/v1/graph/quads.js +27 -0
  223. package/dataflow/v1/graph/vertex.js +3 -0
  224. package/dataflow/v1/index.js +24 -0
  225. package/dataflow/v1/internal/info.js +16 -0
  226. package/dataflow/v1/internal/linker.js +255 -0
  227. package/dataflow/v1/internal/process/access.js +54 -0
  228. package/dataflow/v1/internal/process/expression-list.js +154 -0
  229. package/dataflow/v1/internal/process/functions/argument.js +46 -0
  230. package/dataflow/v1/internal/process/functions/exit-points.js +125 -0
  231. package/dataflow/v1/internal/process/functions/function-call.js +99 -0
  232. package/dataflow/v1/internal/process/functions/function-definition.js +176 -0
  233. package/dataflow/v1/internal/process/functions/parameter.js +47 -0
  234. package/dataflow/v1/internal/process/if-then-else.js +57 -0
  235. package/dataflow/v1/internal/process/loops/for-loop.js +54 -0
  236. package/dataflow/v1/internal/process/loops/repeat-loop.js +21 -0
  237. package/dataflow/v1/internal/process/loops/while-loop.js +31 -0
  238. package/dataflow/v1/internal/process/operators/assignment.js +129 -0
  239. package/dataflow/v1/internal/process/operators/non-assignment-binary-op.js +25 -0
  240. package/dataflow/v1/internal/process/operators/pipe.js +46 -0
  241. package/dataflow/v1/internal/process/operators/unary-op.js +10 -0
  242. package/dataflow/v1/internal/process/symbol.js +21 -0
  243. package/dataflow/v1/internal/process/uninteresting-leaf.js +9 -0
  244. package/dataflow/v1/processor.js +20 -0
  245. package/dataflow/v2/entry.js +11 -0
  246. package/flowr-1.3.7.tgz +0 -0
  247. package/flowr.d.ts +26 -0
  248. package/flowr.js +135 -0
  249. package/index.d.ts +6 -0
  250. package/index.js +23 -0
  251. package/package.json +384 -0
  252. package/r-bridge/index.d.ts +11 -0
  253. package/r-bridge/index.js +28 -0
  254. package/r-bridge/lang-4.x/ast/index.d.ts +2 -0
  255. package/r-bridge/lang-4.x/ast/index.js +19 -0
  256. package/r-bridge/lang-4.x/ast/model/collect.d.ts +9 -0
  257. package/r-bridge/lang-4.x/ast/model/collect.js +23 -0
  258. package/r-bridge/lang-4.x/ast/model/index.d.ts +6 -0
  259. package/r-bridge/lang-4.x/ast/model/index.js +23 -0
  260. package/r-bridge/lang-4.x/ast/model/model.d.ts +127 -0
  261. package/r-bridge/lang-4.x/ast/model/model.js +3 -0
  262. package/r-bridge/lang-4.x/ast/model/nodes/index.d.ts +21 -0
  263. package/r-bridge/lang-4.x/ast/model/nodes/index.js +38 -0
  264. package/r-bridge/lang-4.x/ast/model/nodes/info/index.d.ts +13 -0
  265. package/r-bridge/lang-4.x/ast/model/nodes/info/index.js +27 -0
  266. package/r-bridge/lang-4.x/ast/model/nodes/info/r-delimiter.d.ts +12 -0
  267. package/r-bridge/lang-4.x/ast/model/nodes/info/r-delimiter.js +3 -0
  268. package/r-bridge/lang-4.x/ast/model/nodes/r-access.d.ts +24 -0
  269. package/r-bridge/lang-4.x/ast/model/nodes/r-access.js +3 -0
  270. package/r-bridge/lang-4.x/ast/model/nodes/r-argument.d.ts +11 -0
  271. package/r-bridge/lang-4.x/ast/model/nodes/r-argument.js +3 -0
  272. package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.d.ts +25 -0
  273. package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.js +3 -0
  274. package/r-bridge/lang-4.x/ast/model/nodes/r-break.d.ts +5 -0
  275. package/r-bridge/lang-4.x/ast/model/nodes/r-break.js +3 -0
  276. package/r-bridge/lang-4.x/ast/model/nodes/r-comment.d.ts +6 -0
  277. package/r-bridge/lang-4.x/ast/model/nodes/r-comment.js +3 -0
  278. package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.d.ts +6 -0
  279. package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.js +3 -0
  280. package/r-bridge/lang-4.x/ast/model/nodes/r-for-loop.d.ts +18 -0
  281. package/r-bridge/lang-4.x/ast/model/nodes/r-for-loop.js +3 -0
  282. package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.d.ts +31 -0
  283. package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.js +3 -0
  284. package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.d.ts +10 -0
  285. package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.js +3 -0
  286. package/r-bridge/lang-4.x/ast/model/nodes/r-if-then-else.d.ts +9 -0
  287. package/r-bridge/lang-4.x/ast/model/nodes/r-if-then-else.js +3 -0
  288. package/r-bridge/lang-4.x/ast/model/nodes/r-line-directive.d.ts +7 -0
  289. package/r-bridge/lang-4.x/ast/model/nodes/r-line-directive.js +3 -0
  290. package/r-bridge/lang-4.x/ast/model/nodes/r-logical.d.ts +7 -0
  291. package/r-bridge/lang-4.x/ast/model/nodes/r-logical.js +3 -0
  292. package/r-bridge/lang-4.x/ast/model/nodes/r-next.d.ts +5 -0
  293. package/r-bridge/lang-4.x/ast/model/nodes/r-next.js +3 -0
  294. package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +8 -0
  295. package/r-bridge/lang-4.x/ast/model/nodes/r-number.js +3 -0
  296. package/r-bridge/lang-4.x/ast/model/nodes/r-parameter.d.ts +13 -0
  297. package/r-bridge/lang-4.x/ast/model/nodes/r-parameter.js +3 -0
  298. package/r-bridge/lang-4.x/ast/model/nodes/r-pipe.d.ts +7 -0
  299. package/r-bridge/lang-4.x/ast/model/nodes/r-pipe.js +3 -0
  300. package/r-bridge/lang-4.x/ast/model/nodes/r-repeat-loop.d.ts +12 -0
  301. package/r-bridge/lang-4.x/ast/model/nodes/r-repeat-loop.js +3 -0
  302. package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +7 -0
  303. package/r-bridge/lang-4.x/ast/model/nodes/r-string.js +3 -0
  304. package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.d.ts +7 -0
  305. package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.js +9 -0
  306. package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.d.ts +18 -0
  307. package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.js +3 -0
  308. package/r-bridge/lang-4.x/ast/model/nodes/r-while-loop.d.ts +13 -0
  309. package/r-bridge/lang-4.x/ast/model/nodes/r-while-loop.js +3 -0
  310. package/r-bridge/lang-4.x/ast/model/operators.d.ts +46 -0
  311. package/r-bridge/lang-4.x/ast/model/operators.js +67 -0
  312. package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +81 -0
  313. package/r-bridge/lang-4.x/ast/model/processing/decorate.js +342 -0
  314. package/r-bridge/lang-4.x/ast/model/processing/fold.d.ts +10 -0
  315. package/r-bridge/lang-4.x/ast/model/processing/fold.js +20 -0
  316. package/r-bridge/lang-4.x/ast/model/processing/index.d.ts +5 -0
  317. package/r-bridge/lang-4.x/ast/model/processing/index.js +22 -0
  318. package/r-bridge/lang-4.x/ast/model/processing/role.d.ts +41 -0
  319. package/r-bridge/lang-4.x/ast/model/processing/role.js +17 -0
  320. package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +61 -0
  321. package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.js +87 -0
  322. package/r-bridge/lang-4.x/ast/model/processing/visitor.d.ts +13 -0
  323. package/r-bridge/lang-4.x/ast/model/processing/visitor.js +109 -0
  324. package/r-bridge/lang-4.x/ast/model/type.d.ts +206 -0
  325. package/r-bridge/lang-4.x/ast/model/type.js +18 -0
  326. package/r-bridge/lang-4.x/ast/model/versions.d.ts +9 -0
  327. package/r-bridge/lang-4.x/ast/model/versions.js +13 -0
  328. package/r-bridge/lang-4.x/ast/parser/xml/common/config.js +16 -0
  329. package/r-bridge/lang-4.x/ast/parser/xml/common/input-format.js +42 -0
  330. package/r-bridge/lang-4.x/ast/parser/xml/common/meta.js +118 -0
  331. package/r-bridge/lang-4.x/ast/parser/xml/common/xml-to-json.js +58 -0
  332. package/r-bridge/lang-4.x/ast/parser/xml/config.d.ts +25 -0
  333. package/r-bridge/lang-4.x/ast/parser/xml/config.js +16 -0
  334. package/r-bridge/lang-4.x/ast/parser/xml/data.d.ts +22 -0
  335. package/r-bridge/lang-4.x/ast/parser/xml/data.js +3 -0
  336. package/r-bridge/lang-4.x/ast/parser/xml/hooks.d.ts +292 -0
  337. package/r-bridge/lang-4.x/ast/parser/xml/hooks.js +136 -0
  338. package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +5 -0
  339. package/r-bridge/lang-4.x/ast/parser/xml/index.js +22 -0
  340. package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +32 -0
  341. package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +33 -0
  342. package/r-bridge/lang-4.x/ast/parser/xml/internal/access.d.ts +12 -0
  343. package/r-bridge/lang-4.x/ast/parser/xml/internal/access.js +107 -0
  344. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then-else.d.ts +15 -0
  345. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then-else.js +32 -0
  346. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then.d.ts +13 -0
  347. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then.js +46 -0
  348. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.d.ts +2 -0
  349. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.js +19 -0
  350. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.d.ts +10 -0
  351. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +65 -0
  352. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.d.ts +1 -0
  353. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.js +18 -0
  354. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/argument.d.ts +13 -0
  355. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/argument.js +74 -0
  356. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/call.d.ts +13 -0
  357. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/call.js +149 -0
  358. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.d.ts +12 -0
  359. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.js +60 -0
  360. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.d.ts +2 -0
  361. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.js +20 -0
  362. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/parameter.d.ts +13 -0
  363. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/parameter.js +64 -0
  364. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +10 -0
  365. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +27 -0
  366. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.d.ts +4 -0
  367. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.js +24 -0
  368. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.d.ts +4 -0
  369. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.js +72 -0
  370. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.d.ts +5 -0
  371. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.js +22 -0
  372. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.d.ts +4 -0
  373. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.js +24 -0
  374. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.d.ts +13 -0
  375. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.js +42 -0
  376. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.d.ts +4 -0
  377. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.js +45 -0
  378. package/r-bridge/lang-4.x/ast/parser/xml/internal/meta.d.ts +50 -0
  379. package/r-bridge/lang-4.x/ast/parser/xml/internal/meta.js +118 -0
  380. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/binary.d.ts +8 -0
  381. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/binary.js +162 -0
  382. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.d.ts +3 -0
  383. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.js +20 -0
  384. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.d.ts +6 -0
  385. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.js +24 -0
  386. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.d.ts +13 -0
  387. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +59 -0
  388. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.d.ts +11 -0
  389. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.js +34 -0
  390. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.d.ts +1 -0
  391. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.js +18 -0
  392. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.d.ts +12 -0
  393. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.js +55 -0
  394. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.d.ts +10 -0
  395. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +159 -0
  396. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.d.ts +3 -0
  397. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.js +20 -0
  398. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.d.ts +4 -0
  399. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +34 -0
  400. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.d.ts +13 -0
  401. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +64 -0
  402. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.d.ts +3 -0
  403. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.js +20 -0
  404. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.d.ts +13 -0
  405. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.js +56 -0
  406. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.d.ts +11 -0
  407. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.js +41 -0
  408. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/symbol.d.ts +14 -0
  409. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/symbol.js +56 -0
  410. package/r-bridge/lang-4.x/ast/parser/xml/internal/xml-to-json.d.ts +9 -0
  411. package/r-bridge/lang-4.x/ast/parser/xml/internal/xml-to-json.js +51 -0
  412. package/r-bridge/lang-4.x/ast/parser/xml/parser.d.ts +17 -0
  413. package/r-bridge/lang-4.x/ast/parser/xml/parser.js +30 -0
  414. package/r-bridge/lang-4.x/ast/parser/xml/v1/data.js +3 -0
  415. package/r-bridge/lang-4.x/ast/parser/xml/v1/hooks.js +136 -0
  416. package/r-bridge/lang-4.x/ast/parser/xml/v1/index.js +22 -0
  417. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/access.js +107 -0
  418. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/if-then-else.js +32 -0
  419. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/if-then.js +46 -0
  420. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/index.js +19 -0
  421. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/expression/expression.js +65 -0
  422. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/expression/index.js +18 -0
  423. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/argument.js +74 -0
  424. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/call.js +149 -0
  425. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/definition.js +60 -0
  426. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/index.js +20 -0
  427. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/parameter.js +64 -0
  428. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/index.js +27 -0
  429. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/break.js +24 -0
  430. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/for.js +72 -0
  431. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/index.js +22 -0
  432. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/next.js +24 -0
  433. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/repeat.js +42 -0
  434. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/while.js +45 -0
  435. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/binary.js +162 -0
  436. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/index.js +20 -0
  437. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/special.js +24 -0
  438. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/unary.js +59 -0
  439. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/comment.js +34 -0
  440. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/index.js +18 -0
  441. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/line-directive.js +55 -0
  442. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/elements.js +159 -0
  443. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/index.js +20 -0
  444. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/root.js +34 -0
  445. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/single-element.js +64 -0
  446. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/index.js +20 -0
  447. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/number.js +56 -0
  448. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/string.js +41 -0
  449. package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/symbol.js +56 -0
  450. package/r-bridge/lang-4.x/ast/parser/xml/v1/normalize.js +30 -0
  451. package/r-bridge/lang-4.x/ast/parser/xml/v2/data.js +3 -0
  452. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/access.js +95 -0
  453. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/expression.js +99 -0
  454. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/functions/argument.js +71 -0
  455. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/binary.js +30 -0
  456. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/index.js +19 -0
  457. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/unary.js +35 -0
  458. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/comment.js +25 -0
  459. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/index.js +18 -0
  460. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/line-directive.js +38 -0
  461. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/root.js +26 -0
  462. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/single-element.js +63 -0
  463. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/index.js +18 -0
  464. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/number.js +46 -0
  465. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/string.js +33 -0
  466. package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/symbol.js +63 -0
  467. package/r-bridge/lang-4.x/ast/parser/xml/v2/normalize.js +25 -0
  468. package/r-bridge/lang-4.x/index.d.ts +2 -0
  469. package/r-bridge/lang-4.x/index.js +19 -0
  470. package/r-bridge/lang-4.x/values.d.ts +39 -0
  471. package/r-bridge/lang-4.x/values.js +149 -0
  472. package/r-bridge/retriever.d.ts +48 -0
  473. package/r-bridge/retriever.js +71 -0
  474. package/r-bridge/shell.d.ts +147 -0
  475. package/r-bridge/shell.js +423 -0
  476. package/reconstruct/reconstruct.d.ts +28 -0
  477. package/reconstruct/reconstruct.js +448 -0
  478. package/slicing/criterion/collect-all.d.ts +36 -0
  479. package/slicing/criterion/collect-all.js +23 -0
  480. package/slicing/criterion/filters/all-variables.d.ts +2 -0
  481. package/slicing/criterion/filters/all-variables.js +63 -0
  482. package/slicing/criterion/filters/index.d.ts +1 -0
  483. package/slicing/criterion/filters/index.js +18 -0
  484. package/slicing/criterion/index.d.ts +3 -0
  485. package/slicing/criterion/index.js +20 -0
  486. package/slicing/criterion/parse.d.ts +20 -0
  487. package/slicing/criterion/parse.js +79 -0
  488. package/slicing/index.d.ts +3 -0
  489. package/slicing/index.js +20 -0
  490. package/slicing/static/index.d.ts +1 -0
  491. package/slicing/static/index.js +18 -0
  492. package/slicing/static/static-slicer.d.ts +29 -0
  493. package/slicing/static/static-slicer.js +186 -0
  494. package/statistics/features/common-syntax-probability.d.ts +30 -0
  495. package/statistics/features/common-syntax-probability.js +159 -0
  496. package/statistics/features/feature.d.ts +175 -0
  497. package/statistics/features/feature.js +30 -0
  498. package/statistics/features/index.d.ts +1 -0
  499. package/statistics/features/index.js +18 -0
  500. package/statistics/features/post-processing.d.ts +12 -0
  501. package/statistics/features/post-processing.js +21 -0
  502. package/statistics/features/supported/assignments/assignments.d.ts +11 -0
  503. package/statistics/features/supported/assignments/assignments.js +53 -0
  504. package/statistics/features/supported/assignments/index.d.ts +1 -0
  505. package/statistics/features/supported/assignments/index.js +6 -0
  506. package/statistics/features/supported/assignments/post-process.d.ts +3 -0
  507. package/statistics/features/supported/assignments/post-process.js +125 -0
  508. package/statistics/features/supported/comments/comments.d.ts +18 -0
  509. package/statistics/features/supported/comments/comments.js +133 -0
  510. package/statistics/features/supported/comments/index.d.ts +1 -0
  511. package/statistics/features/supported/comments/index.js +6 -0
  512. package/statistics/features/supported/comments/post-process.d.ts +3 -0
  513. package/statistics/features/supported/comments/post-process.js +50 -0
  514. package/statistics/features/supported/control-flow/control-flow.d.ts +17 -0
  515. package/statistics/features/supported/control-flow/control-flow.js +67 -0
  516. package/statistics/features/supported/control-flow/index.d.ts +1 -0
  517. package/statistics/features/supported/control-flow/index.js +6 -0
  518. package/statistics/features/supported/control-flow/post-process.d.ts +3 -0
  519. package/statistics/features/supported/control-flow/post-process.js +65 -0
  520. package/statistics/features/supported/data-access/data-access.d.ts +15 -0
  521. package/statistics/features/supported/data-access/data-access.js +118 -0
  522. package/statistics/features/supported/data-access/index.d.ts +1 -0
  523. package/statistics/features/supported/data-access/index.js +6 -0
  524. package/statistics/features/supported/data-access/post-process.d.ts +3 -0
  525. package/statistics/features/supported/data-access/post-process.js +107 -0
  526. package/statistics/features/supported/defined-functions/defined-functions.d.ts +35 -0
  527. package/statistics/features/supported/defined-functions/defined-functions.js +139 -0
  528. package/statistics/features/supported/defined-functions/index.d.ts +1 -0
  529. package/statistics/features/supported/defined-functions/index.js +6 -0
  530. package/statistics/features/supported/defined-functions/post-process.d.ts +6 -0
  531. package/statistics/features/supported/defined-functions/post-process.js +177 -0
  532. package/statistics/features/supported/expression-list/expression-list.d.ts +9 -0
  533. package/statistics/features/supported/expression-list/expression-list.js +36 -0
  534. package/statistics/features/supported/expression-list/index.d.ts +1 -0
  535. package/statistics/features/supported/expression-list/index.js +6 -0
  536. package/statistics/features/supported/expression-list/post-process.d.ts +3 -0
  537. package/statistics/features/supported/expression-list/post-process.js +44 -0
  538. package/statistics/features/supported/index.d.ts +10 -0
  539. package/statistics/features/supported/index.js +27 -0
  540. package/statistics/features/supported/loops/index.d.ts +1 -0
  541. package/statistics/features/supported/loops/index.js +6 -0
  542. package/statistics/features/supported/loops/loops.d.ts +20 -0
  543. package/statistics/features/supported/loops/loops.js +79 -0
  544. package/statistics/features/supported/loops/post-process.d.ts +3 -0
  545. package/statistics/features/supported/loops/post-process.js +72 -0
  546. package/statistics/features/supported/used-functions/index.d.ts +1 -0
  547. package/statistics/features/supported/used-functions/index.js +6 -0
  548. package/statistics/features/supported/used-functions/post-process.d.ts +6 -0
  549. package/statistics/features/supported/used-functions/post-process.js +179 -0
  550. package/statistics/features/supported/used-functions/used-functions.d.ts +24 -0
  551. package/statistics/features/supported/used-functions/used-functions.js +95 -0
  552. package/statistics/features/supported/used-packages/index.d.ts +1 -0
  553. package/statistics/features/supported/used-packages/index.js +6 -0
  554. package/statistics/features/supported/used-packages/post-process.d.ts +3 -0
  555. package/statistics/features/supported/used-packages/post-process.js +121 -0
  556. package/statistics/features/supported/used-packages/used-packages.d.ts +16 -0
  557. package/statistics/features/supported/used-packages/used-packages.js +130 -0
  558. package/statistics/features/supported/values/index.d.ts +1 -0
  559. package/statistics/features/supported/values/index.js +6 -0
  560. package/statistics/features/supported/values/post-process.d.ts +3 -0
  561. package/statistics/features/supported/values/post-process.js +72 -0
  562. package/statistics/features/supported/values/values.d.ts +14 -0
  563. package/statistics/features/supported/values/values.js +101 -0
  564. package/statistics/features/supported/variables/index.d.ts +1 -0
  565. package/statistics/features/supported/variables/index.js +6 -0
  566. package/statistics/features/supported/variables/post-process.d.ts +9 -0
  567. package/statistics/features/supported/variables/post-process.js +122 -0
  568. package/statistics/features/supported/variables/variables.d.ts +15 -0
  569. package/statistics/features/supported/variables/variables.js +70 -0
  570. package/statistics/index.d.ts +6 -0
  571. package/statistics/index.js +24 -0
  572. package/statistics/meta-statistics.d.ts +33 -0
  573. package/statistics/meta-statistics.js +17 -0
  574. package/statistics/output/ansi.d.ts +50 -0
  575. package/statistics/output/ansi.js +58 -0
  576. package/statistics/output/file-provider.d.ts +37 -0
  577. package/statistics/output/file-provider.js +97 -0
  578. package/statistics/output/index.d.ts +4 -0
  579. package/statistics/output/index.js +21 -0
  580. package/statistics/output/print-stats.d.ts +17 -0
  581. package/statistics/output/print-stats.js +69 -0
  582. package/statistics/output/statistics-file.d.ts +37 -0
  583. package/statistics/output/statistics-file.js +69 -0
  584. package/statistics/statistics.d.ts +24 -0
  585. package/statistics/statistics.js +109 -0
  586. package/util/args.d.ts +14 -0
  587. package/util/args.js +67 -0
  588. package/util/arrays.d.ts +44 -0
  589. package/util/arrays.js +145 -0
  590. package/util/assert.d.ts +11 -0
  591. package/util/assert.js +35 -0
  592. package/util/bimap.d.ts +24 -0
  593. package/util/bimap.js +71 -0
  594. package/util/cfg.d.ts +55 -0
  595. package/util/cfg.js +498 -0
  596. package/util/defaultmap.d.ts +34 -0
  597. package/util/defaultmap.js +65 -0
  598. package/util/diff.d.ts +43 -0
  599. package/util/diff.js +28 -0
  600. package/util/files.d.ts +54 -0
  601. package/util/files.js +144 -0
  602. package/util/json.d.ts +2 -0
  603. package/util/json.js +28 -0
  604. package/util/log.d.ts +22 -0
  605. package/util/log.js +48 -0
  606. package/util/mermaid/ast.d.ts +6 -0
  607. package/util/mermaid/ast.js +28 -0
  608. package/util/mermaid/cfg.d.ts +7 -0
  609. package/util/mermaid/cfg.js +44 -0
  610. package/util/mermaid/dfg.d.ts +21 -0
  611. package/util/mermaid/dfg.js +165 -0
  612. package/util/mermaid/index.d.ts +3 -0
  613. package/util/mermaid/index.js +20 -0
  614. package/util/mermaid/mermaid.d.ts +7 -0
  615. package/util/mermaid/mermaid.js +24 -0
  616. package/util/numbers.d.ts +1 -0
  617. package/util/numbers.js +9 -0
  618. package/util/objects.d.ts +17 -0
  619. package/util/objects.js +60 -0
  620. package/util/os.d.ts +2 -0
  621. package/util/os.js +25 -0
  622. package/util/parallel.d.ts +30 -0
  623. package/util/parallel.js +103 -0
  624. package/util/quads.d.ts +92 -0
  625. package/util/quads.js +189 -0
  626. package/util/random.d.ts +4 -0
  627. package/util/random.js +22 -0
  628. package/util/range.d.ts +32 -0
  629. package/util/range.js +61 -0
  630. package/util/set.d.ts +8 -0
  631. package/util/set.js +32 -0
  632. package/util/strings.d.ts +12 -0
  633. package/util/strings.js +41 -0
  634. package/util/summarizer/auto-detect.d.ts +2 -0
  635. package/util/summarizer/auto-detect.js +32 -0
  636. package/util/summarizer/benchmark/benchmark-summarizer.js +208 -0
  637. package/util/summarizer/benchmark/data.d.ts +66 -0
  638. package/util/summarizer/benchmark/data.js +13 -0
  639. package/util/summarizer/benchmark/first-phase/input.d.ts +2 -0
  640. package/util/summarizer/benchmark/first-phase/input.js +59 -0
  641. package/util/summarizer/benchmark/first-phase/process.d.ts +10 -0
  642. package/util/summarizer/benchmark/first-phase/process.js +208 -0
  643. package/util/summarizer/benchmark/second-phase/graph.d.ts +2 -0
  644. package/util/summarizer/benchmark/second-phase/graph.js +54 -0
  645. package/util/summarizer/benchmark/second-phase/process.d.ts +4 -0
  646. package/util/summarizer/benchmark/second-phase/process.js +89 -0
  647. package/util/summarizer/benchmark/summarizer.d.ts +34 -0
  648. package/util/summarizer/benchmark/summarizer.js +53 -0
  649. package/util/summarizer/statistics/first-phase/process.d.ts +6 -0
  650. package/util/summarizer/statistics/first-phase/process.js +81 -0
  651. package/util/summarizer/statistics/post-process/clusterer.d.ts +26 -0
  652. package/util/summarizer/statistics/post-process/clusterer.js +43 -0
  653. package/util/summarizer/statistics/post-process/file-based-count.d.ts +17 -0
  654. package/util/summarizer/statistics/post-process/file-based-count.js +49 -0
  655. package/util/summarizer/statistics/post-process/histogram.d.ts +59 -0
  656. package/util/summarizer/statistics/post-process/histogram.js +128 -0
  657. package/util/summarizer/statistics/post-process/index.d.ts +4 -0
  658. package/util/summarizer/statistics/post-process/index.js +21 -0
  659. package/util/summarizer/statistics/post-process/post-process-output.d.ts +16 -0
  660. package/util/summarizer/statistics/post-process/post-process-output.js +104 -0
  661. package/util/summarizer/statistics/second-phase/process.d.ts +11 -0
  662. package/util/summarizer/statistics/second-phase/process.js +117 -0
  663. package/util/summarizer/statistics/summarizer.d.ts +34 -0
  664. package/util/summarizer/statistics/summarizer.js +135 -0
  665. package/util/summarizer/summarizer.d.ts +25 -0
  666. package/util/summarizer/summarizer.js +13 -0
  667. package/util/time.d.ts +6 -0
  668. package/util/time.js +13 -0
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PipelineExecutor = void 0;
4
+ const assert_1 = require("../util/assert");
5
+ /**
6
+ * The pipeline executor allows to execute arbitrary {@link Pipeline|pipelines} in a step-by-step fashion.
7
+ * If you are not yet in the possession of a {@link Pipeline|pipeline}, you can use the {@link createPipeline} function
8
+ * to create one for yourself, based on the steps that you want to execute.
9
+ *
10
+ * Those steps are split into two phases or "stages" (which is the name that we will use in the following), represented
11
+ * by the {@link PipelineStepStage} type. These allow us to separate things that have to be done
12
+ * once per-file, e.g., actually parsing the AST, from those, that we need to repeat 'once per request' (whatever this
13
+ * request may be). In other words, what can be cached between operations and what can not.
14
+ *
15
+ * Furthermore, this executor follows an iterable fashion to be *as flexible as possible*
16
+ * (e.g., to be instrumented with measurements). So, you can use the pipeline executor like this:
17
+ *
18
+ * ```ts
19
+ * const stepper = new PipelineExecutor( ... )
20
+ * while(stepper.hasNextStep()) {
21
+ * await stepper.nextStep()
22
+ * }
23
+ *
24
+ * stepper.switchToRequestStage()
25
+ *
26
+ * while(stepper.hasNextStep()) {
27
+ * await stepper.nextStep()
28
+ * }
29
+ *
30
+ * const result = stepper.getResults()
31
+ * ```
32
+ *
33
+ * Of course, you might think, that this is rather overkill if you simply want to receive the result.
34
+ * And this is true. Therefore, if you do not want to perform some kind of magic in-between steps, you can use the
35
+ * **{@link allRemainingSteps}** function like this:
36
+ *
37
+ * ```ts
38
+ * const stepper = new PipelineExecutor( ... )
39
+ * const result = await stepper.allRemainingSteps()
40
+ * ```
41
+ *
42
+ * As the name suggest, you can combine this name with previous calls to {@link nextStep} to only execute the remaining
43
+ * steps in case, for whatever reason you only want to instrument some steps.
44
+ *
45
+ * By default, the {@link PipelineExecutor} does not offer an automatic way to repeat requests (mostly to prevent accidental errors).
46
+ * However, you can use the
47
+ * **{@link updateRequest}** function to reset the request steps and re-execute them for a new request. This allows something like the following:
48
+ *
49
+ * ```ts
50
+ * const stepper = new PipelineExecutor( ... )
51
+ * const result = await stepper.allRemainingSteps()
52
+ *
53
+ * stepper.updateRequest( ... )
54
+ * const result2 = await stepper.allRemainingSteps()
55
+ * ```
56
+ *
57
+ * **Example - Slicing With the Pipeline Executor**:
58
+ *
59
+ * Suppose, you want to... you know _slice_ a file (which was, at one point the origin of flowR), then you can
60
+ * either create a pipeline yourself with the respective steps, or you can use the {@link DEFAULT_SLICING_PIPELINE} (and friends).
61
+ * With it, slicing essentially becomes 'easy-as-pie':
62
+ *
63
+ * ```ts
64
+ * const slicer = new PipelineExecutor(DEFAULT_SLICING_PIPELINE, {
65
+ * shell: new RShell(),
66
+ * // of course, the criterion and request given here are just examples, you can use whatever you want to slice!
67
+ * criterion: ['2@b'],
68
+ * request: requestFromInput('b <- 3; x <- 5\ncat(b)'),
69
+ * })
70
+ * const result = await slicer.allRemainingSteps()
71
+ * ```
72
+ *
73
+ * But now, we want to slice for `x` in the first line as well! We can do that by adding:
74
+ *
75
+ * ```ts
76
+ * stepper.updateRequest({ criterion: ['1@x'] })
77
+ * const result2 = await stepper.allRemainingSteps()
78
+ * ```
79
+ *
80
+ * @note Even though using the pipeline executor introduces a small performance overhead, we consider
81
+ * it to be the baseline for performance benchmarking. It may very well be possible to squeeze out a little bit more by
82
+ * directly constructing the steps in the right order. However, we consider this to be negligible when compared with the time required
83
+ * for, for example, the dataflow analysis of larger files.
84
+ *
85
+ * @see PipelineExecutor#allRemainingSteps
86
+ * @see PipelineExecutor#nextStep
87
+ */
88
+ class PipelineExecutor {
89
+ pipeline;
90
+ length;
91
+ input;
92
+ output = {};
93
+ currentExecutionStage = 0 /* PipelineStepStage.OncePerFile */;
94
+ stepCounter = 0;
95
+ /**
96
+ * Construct a new pipeline executor.
97
+ * The required additional input is specified by the {@link IPipelineStep#requiredInput|required input configuration} of each step in the `pipeline`.
98
+ *
99
+ * @param pipeline - The {@link Pipeline} to execute, probably created with {@link createPipeline}.
100
+ * @param input - External {@link PipelineInput|configuration and input} required to execute the given pipeline.
101
+ */
102
+ constructor(pipeline, input) {
103
+ this.pipeline = pipeline;
104
+ this.length = pipeline.order.length;
105
+ this.input = input;
106
+ }
107
+ /**
108
+ * Retrieve the current {@link PipelineStepStage|stage} the pipeline executor is in.
109
+ *
110
+ * @see currentExecutionStage
111
+ * @see switchToRequestStage
112
+ * @see PipelineStepStage
113
+ */
114
+ getCurrentStage() {
115
+ return this.currentExecutionStage;
116
+ }
117
+ /**
118
+ * Switch to the next {@link PipelineStepStage|stage} of the pipeline executor.
119
+ *
120
+ * This will fail if either a step change is currently not valid (as not all steps have been executed),
121
+ * or if there is no next stage (i.e., the pipeline is already completed or in the last stage).
122
+ *
123
+ * @see PipelineExecutor
124
+ * @see getCurrentStage
125
+ */
126
+ switchToRequestStage() {
127
+ (0, assert_1.guard)(this.stepCounter === this.pipeline.firstStepPerRequest, 'First need to complete all steps before switching');
128
+ (0, assert_1.guard)(this.currentExecutionStage === 0 /* PipelineStepStage.OncePerFile */, 'Cannot switch to next stage, already in per-request stage.');
129
+ this.currentExecutionStage = 1 /* PipelineStepStage.OncePerRequest */;
130
+ }
131
+ /**
132
+ * Returns the results of the pipeline.
133
+ *
134
+ * @param intermediate - Normally you can only receive the results *after* the stepper completed the step of interested.
135
+ * However, if you pass `true` to this parameter, you can also receive the results *before* the {@link PipelineExecutor|pipeline executor}
136
+ * completed, although the typing system then can not guarantee which of the steps have already happened.
137
+ */
138
+ getResults(intermediate = false) {
139
+ (0, assert_1.guard)(intermediate || this.stepCounter >= this.length, 'Without the intermediate flag, the pipeline must be completed before providing access to the results.');
140
+ return this.output;
141
+ }
142
+ /**
143
+ * Returns true only if
144
+ * 1) there are more {@link IPipelineStep|steps} to-do for the current {@link PipelineStepStage|stage} and
145
+ * 2) we have not yet reached the end of the {@link Pipeline|pipeline}.
146
+ */
147
+ hasNextStep() {
148
+ return (this.stepCounter < this.length && this.currentExecutionStage !== 0 /* PipelineStepStage.OncePerFile */)
149
+ || this.stepCounter < this.pipeline.firstStepPerRequest;
150
+ }
151
+ /**
152
+ * Execute the next {@link IPipelineStep|step} and return the name of the {@link IPipelineStep|step} that was executed,
153
+ * so you can guard if the {@link IPipelineStep|step} differs from what you are interested in.
154
+ * Furthermore, it returns the {@link IPipelineStep|step's} result.
155
+ *
156
+ * @param expectedStepName - A safeguard if you want to retrieve the result.
157
+ * If given, it causes the execution to fail if the next step is not the one you expect.
158
+ *
159
+ * _Without `expectedStepName`, please refrain from accessing the result, as you have no safeguards if the pipeline changes._
160
+ */
161
+ async nextStep(expectedStepName) {
162
+ const [step, result] = this._doNextStep(expectedStepName);
163
+ const awaitedResult = await result;
164
+ this.output[step] = awaitedResult;
165
+ this.stepCounter++;
166
+ return { name: step, result: awaitedResult };
167
+ }
168
+ _doNextStep(expectedStepName) {
169
+ const step = this.pipeline.steps.get(this.pipeline.order[this.stepCounter]);
170
+ (0, assert_1.guard)(step !== undefined, () => `Cannot execute next step, step ${this.pipeline.order[this.stepCounter]} does not exist.`);
171
+ if (expectedStepName !== undefined) {
172
+ (0, assert_1.guard)(step.name === expectedStepName, () => `Cannot execute next step, expected step ${JSON.stringify(expectedStepName)} but got ${step.name}.`);
173
+ }
174
+ return [step.name, step.processor(this.output, this.input)];
175
+ }
176
+ /**
177
+ * This only makes sense if you have already run a request and want to re-use the per-file results for a new one.
178
+ * (or if for whatever reason you did not pass information for the pipeline with the constructor).
179
+ *
180
+ * @param newRequestData - Data for the new request
181
+ */
182
+ updateRequest(newRequestData) {
183
+ const requestStep = this.pipeline.firstStepPerRequest;
184
+ (0, assert_1.guard)(this.stepCounter >= requestStep, 'Cannot reset request prior to once-per-request stage');
185
+ this.input = {
186
+ ...this.input,
187
+ ...newRequestData
188
+ };
189
+ this.stepCounter = requestStep;
190
+ // clear the results for all steps with an index >= firstStepPerRequest, this is more of a sanity check
191
+ for (let i = requestStep; i < this.length; i++) {
192
+ this.output[this.pipeline.order[i]] = undefined;
193
+ }
194
+ }
195
+ /**
196
+ * Execute all remaining steps and automatically call {@link switchToRequestStage} if necessary.
197
+ * @param canSwitchStage - If true, automatically switch to the request stage if necessary
198
+ * (i.e., this is what you want if you have never executed {@link nextStep} and you want to execute *all* steps).
199
+ * However, passing false allows you to only execute the steps of the 'once-per-file' stage (i.e., the steps that can be cached).
200
+ *
201
+ * @note There is a small type difference if you pass 'false' and already have manually switched to the 'once-per-request' stage.
202
+ * Because now, the results of these steps are no longer part of the result type (although they are still included).
203
+ * In such a case, you may be better off with simply passing 'true' as the function will detect that the stage is already switched.
204
+ * We could solve this type problem by separating the {@link PipelineExecutor} class into two for each stage,
205
+ * but this would break the improved readability and unified handling of the executor that I wanted to achieve with this class.
206
+ */
207
+ async allRemainingSteps(canSwitchStage = true) {
208
+ while (this.hasNextStep()) {
209
+ await this.nextStep();
210
+ }
211
+ if (canSwitchStage && this.stepCounter < this.length && this.currentExecutionStage === 0 /* PipelineStepStage.OncePerFile */) {
212
+ this.switchToRequestStage();
213
+ while (this.hasNextStep()) {
214
+ await this.nextStep();
215
+ }
216
+ }
217
+ return this.stepCounter < this.length ? this.getResults(true) : this.getResults();
218
+ }
219
+ }
220
+ exports.PipelineExecutor = PipelineExecutor;
221
+ //# sourceMappingURL=pipeline-executor.js.map
@@ -0,0 +1,8 @@
1
+ import { DataflowInformation } from '../../dataflow/internal/info';
2
+ import { QuadSerializationConfiguration } from '../../util/quads';
3
+ import { DataflowMap } from '../../dataflow';
4
+ /** Should work with larger things as well */
5
+ export declare function dataflowGraphToJson(df: DataflowInformation): string;
6
+ export declare function dataflowGraphToMermaid(df: DataflowInformation, idMap: DataflowMap): string;
7
+ export declare function dataflowGraphToMermaidUrl(df: DataflowInformation, idMap: DataflowMap): string;
8
+ export declare function dataflowGraphToQuads(df: DataflowInformation, config: QuadSerializationConfiguration): string;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dataflowGraphToQuads = exports.dataflowGraphToMermaidUrl = exports.dataflowGraphToMermaid = exports.dataflowGraphToJson = void 0;
4
+ const json_1 = require("../../util/json");
5
+ const quads_1 = require("../../dataflow/graph/quads");
6
+ const mermaid_1 = require("../../util/mermaid");
7
+ function mayObjectJson(d) {
8
+ if (typeof d === 'object') {
9
+ return objectJson(d);
10
+ }
11
+ else {
12
+ return JSON.stringify(d, json_1.jsonReplacer);
13
+ }
14
+ }
15
+ function objectJson(df) {
16
+ const elems = [];
17
+ for (const [key, value] of Object.entries(df)) {
18
+ switch (typeof value) {
19
+ case 'undefined':
20
+ case 'function':
21
+ continue;
22
+ case 'object':
23
+ if (Array.isArray(value)) {
24
+ elems.push([key, `[${value.map(x => mayObjectJson(x)).join(',')}]`]);
25
+ }
26
+ else if (value instanceof Set) {
27
+ elems.push([key, `[${[...value].map(x => mayObjectJson(x)).join(',')}]`]);
28
+ }
29
+ else if (value instanceof Map) {
30
+ elems.push([key, `[${[...value].map(([k, v]) => `[${mayObjectJson(k)},${mayObjectJson(v)}]`).join(',')}]`]);
31
+ }
32
+ else {
33
+ elems.push([key, objectJson(value)]);
34
+ }
35
+ break;
36
+ case 'bigint':
37
+ elems.push([key, `${value.toString()}n`]);
38
+ break;
39
+ default:
40
+ elems.push([key, JSON.stringify(value, json_1.jsonReplacer)]);
41
+ }
42
+ }
43
+ return `{${elems.map(([key, value]) => `"${key}":${value}`).join(',')}}`;
44
+ }
45
+ /** Should work with larger things as well */
46
+ function dataflowGraphToJson(df) {
47
+ return objectJson(df);
48
+ }
49
+ exports.dataflowGraphToJson = dataflowGraphToJson;
50
+ function dataflowGraphToMermaid(df, idMap) {
51
+ return (0, mermaid_1.graphToMermaid)(df.graph, idMap);
52
+ }
53
+ exports.dataflowGraphToMermaid = dataflowGraphToMermaid;
54
+ function dataflowGraphToMermaidUrl(df, idMap) {
55
+ return (0, mermaid_1.graphToMermaidUrl)(df.graph, idMap);
56
+ }
57
+ exports.dataflowGraphToMermaidUrl = dataflowGraphToMermaidUrl;
58
+ function dataflowGraphToQuads(df, config) {
59
+ return (0, quads_1.df2quads)(df.graph, config);
60
+ }
61
+ exports.dataflowGraphToQuads = dataflowGraphToQuads;
62
+ //# sourceMappingURL=dataflow-printer.js.map
@@ -0,0 +1,7 @@
1
+ import { NormalizedAst } from '../../r-bridge';
2
+ import { QuadSerializationConfiguration } from '../../util/quads';
3
+ /** Should work with larger things as well */
4
+ export declare function normalizedAstToJson(ast: NormalizedAst): string;
5
+ export declare function normalizedAstToQuads(ast: NormalizedAst, config: QuadSerializationConfiguration): string;
6
+ export declare function printNormalizedAstToMermaid(ast: NormalizedAst): string;
7
+ export declare function printNormalizedAstToMermaidUrl(ast: NormalizedAst): string;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.printNormalizedAstToMermaidUrl = exports.printNormalizedAstToMermaid = exports.normalizedAstToQuads = exports.normalizedAstToJson = void 0;
4
+ const json_1 = require("../../util/json");
5
+ const quads_1 = require("../../util/quads");
6
+ const mermaid_1 = require("../../util/mermaid");
7
+ /** Should work with larger things as well */
8
+ function normalizedAstToJson(ast) {
9
+ // we never serialize the idmap, as it just duplicates the ast, additionally we now miss the full-lexeme to further safe memory
10
+ return JSON.stringify({ ...ast.ast, idMap: undefined }, (k, v) => {
11
+ if (k === 'fullLexeme') {
12
+ return undefined;
13
+ }
14
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
15
+ return (0, json_1.jsonReplacer)(k, v);
16
+ });
17
+ }
18
+ exports.normalizedAstToJson = normalizedAstToJson;
19
+ function normalizedAstToQuads(ast, config) {
20
+ return (0, quads_1.serialize2quads)(ast.ast, config);
21
+ }
22
+ exports.normalizedAstToQuads = normalizedAstToQuads;
23
+ function printNormalizedAstToMermaid(ast) {
24
+ return (0, mermaid_1.normalizedAstToMermaid)(ast.ast);
25
+ }
26
+ exports.printNormalizedAstToMermaid = printNormalizedAstToMermaid;
27
+ function printNormalizedAstToMermaidUrl(ast) {
28
+ return (0, mermaid_1.normalizedAstToMermaidUrl)(ast.ast);
29
+ }
30
+ exports.printNormalizedAstToMermaidUrl = printNormalizedAstToMermaidUrl;
31
+ //# sourceMappingURL=normalize-printer.js.map
@@ -0,0 +1,3 @@
1
+ import { QuadSerializationConfiguration } from '../../util/quads';
2
+ import { XmlParserConfig } from '../../r-bridge';
3
+ export declare function parseToQuads(code: string, config: QuadSerializationConfiguration, parseConfig: XmlParserConfig): Promise<string>;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseToQuads = void 0;
4
+ const quads_1 = require("../../util/quads");
5
+ const internal_1 = require("../../r-bridge/lang-4.x/ast/parser/xml/internal");
6
+ function filterObject(obj, keys) {
7
+ if (typeof obj !== 'object') {
8
+ return obj;
9
+ }
10
+ else if (Array.isArray(obj)) {
11
+ return obj.map(e => filterObject(e, keys));
12
+ }
13
+ if (Object.keys(obj).some(k => keys.has(k))) {
14
+ return Object.fromEntries(Object.entries(obj)
15
+ .filter(([k]) => keys.has(k))
16
+ .map(([k, v]) => [k, filterObject(v, keys)]));
17
+ }
18
+ else {
19
+ return Object.fromEntries(Object.entries(obj)
20
+ .map(([k, v]) => [k, filterObject(v, keys)]));
21
+ }
22
+ }
23
+ async function parseToQuads(code, config, parseConfig) {
24
+ const obj = await (0, internal_1.xlm2jsonObject)(parseConfig, code);
25
+ // recursively filter so that if the object contains one of the keys 'a', 'b' or 'c', all other keys are ignored
26
+ return (0, quads_1.serialize2quads)(filterObject(obj, new Set([parseConfig.attributeName, parseConfig.childrenName, parseConfig.contentName])), config);
27
+ }
28
+ exports.parseToQuads = parseToQuads;
29
+ //# sourceMappingURL=parse-printer.js.map
@@ -0,0 +1,47 @@
1
+ import { StepFunction } from '../steps';
2
+ /**
3
+ * Defines the output format of a step that you are interested in.
4
+ */
5
+ export declare const enum StepOutputFormat {
6
+ /**
7
+ * [Internal]
8
+ * This output format is special as it corresponds to whatever the step would normally produce - unchanged - as a typescript object.
9
+ * There is no special way to influence this output format, and it is not to be serialized.
10
+ */
11
+ Internal = 0,
12
+ /**
13
+ * A human-readable textual representation of the result. Depending on the step this may be of lesser use as the results
14
+ * of the dataflow analysis are not easily readable in text form.
15
+ */
16
+ Text = 1,
17
+ /**
18
+ * This is usually a one-to-one serialization of the internal format, although it is possible that some recursive references are broken.
19
+ */
20
+ Json = 2,
21
+ /**
22
+ * If possible, this will produce a mermaid graph of the result and contain the mermaid code.
23
+ * This is only really possible for some of the step (e.g., the dataflow analysis).
24
+ */
25
+ Mermaid = 3,
26
+ /**
27
+ * This is an extension of the {@link Mermaid} format. Instead of returning
28
+ * the mermaid code, it will return an url to mermaid live.
29
+ */
30
+ MermaidUrl = 4,
31
+ /**
32
+ * Produce n-quads as the output.
33
+ * See {@link serialize2quads}
34
+ */
35
+ RdfQuads = 5
36
+ }
37
+ /**
38
+ * Helper function to support the {@link Internal} format, as it is simply returning the input.
39
+ *
40
+ * @see IStepPrinter
41
+ */
42
+ export declare function internalPrinter<Input>(input: Input): Input;
43
+ /**
44
+ * A mapping function that maps the result of a step (i.e., the dataflow graph)
45
+ * to another representation (linked by {@link StepOutputFormat} in an {@link IStep}).
46
+ */
47
+ export type IStepPrinter<StepInput extends StepFunction, Format extends StepOutputFormat, AdditionalInput extends unknown[]> = Format extends StepOutputFormat.Internal ? (input: Awaited<ReturnType<StepInput>>) => Awaited<ReturnType<StepInput>> : (input: Awaited<ReturnType<StepInput>>, ...additional: AdditionalInput) => Promise<string> | string;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.internalPrinter = void 0;
4
+ /**
5
+ * Helper function to support the {@link Internal} format, as it is simply returning the input.
6
+ *
7
+ * @see IStepPrinter
8
+ */
9
+ function internalPrinter(input) {
10
+ return input;
11
+ }
12
+ exports.internalPrinter = internalPrinter;
13
+ //# sourceMappingURL=print.js.map
@@ -0,0 +1,2 @@
1
+ import { NodeId, NormalizedAst } from '../../r-bridge';
2
+ export declare function sliceDiffAnsi(slice: Set<NodeId>, normalized: NormalizedAst, criteriaIds: Set<NodeId>, originalCode: string): string;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sliceDiffAnsi = void 0;
4
+ const range_1 = require("../../util/range");
5
+ const assert_1 = require("../../util/assert");
6
+ const statistics_1 = require("../../statistics");
7
+ function grayOut() {
8
+ return statistics_1.ansiFormatter.getFormatString({ color: 7 /* Colors.White */, effect: statistics_1.ColorEffect.Foreground, style: 2 /* FontStyles.Faint */ });
9
+ }
10
+ function mergeJointRangesInSorted(loc) {
11
+ return loc.reduce((acc, curr) => {
12
+ if ((0, range_1.rangesOverlap)(acc[acc.length - 1].location, curr.location)) {
13
+ return [
14
+ ...acc.slice(0, -1), {
15
+ selected: curr.selected || acc[acc.length - 1].selected,
16
+ location: (0, range_1.mergeRanges)(acc[acc.length - 1].location, curr.location)
17
+ }
18
+ ];
19
+ }
20
+ else {
21
+ return [...acc, curr];
22
+ }
23
+ }, [loc[0]]);
24
+ }
25
+ function highlight(s, selected) {
26
+ const primary = statistics_1.ansiFormatter.format(s, { color: 3 /* Colors.Yellow */, effect: statistics_1.ColorEffect.Foreground, style: 1 /* FontStyles.Bold */ });
27
+ return selected ? statistics_1.ansiFormatter.format(primary, { style: 4 /* FontStyles.Underline */ }) : primary;
28
+ }
29
+ function sliceDiffAnsi(slice, normalized, criteriaIds, originalCode) {
30
+ let importantLocations = Array.from(normalized.idMap.entries())
31
+ .filter(([id, { location }]) => slice.has(id) && (0, assert_1.isNotUndefined)(location))
32
+ .map(([id, { location }]) => ({ selected: criteriaIds.has(id), location: location }));
33
+ if (importantLocations.length === 0) {
34
+ return `${grayOut()}${originalCode}${statistics_1.ansiFormatter.reset()}`;
35
+ }
36
+ // we sort all locations from back to front so that replacements do not screw up the indices
37
+ importantLocations.sort((a, b) => -(0, range_1.rangeCompare)(a.location, b.location));
38
+ // we need to merge all ranges that overlap, otherwise even reversed traversal can still crew us up
39
+ importantLocations = mergeJointRangesInSorted(importantLocations);
40
+ const lines = originalCode.split('\n');
41
+ for (const { selected, location } of importantLocations) {
42
+ const { start, end } = location;
43
+ const line = lines[start.line - 1];
44
+ lines[start.line - 1] = `${line.substring(0, start.column - 1)}${statistics_1.ansiFormatter.reset()}${highlight(line.substring(start.column - 1, end.column), selected)}${grayOut()}${line.substring(end.column)}`;
45
+ }
46
+ return `${grayOut()}${lines.join('\n')}${statistics_1.ansiFormatter.reset()}`;
47
+ }
48
+ exports.sliceDiffAnsi = sliceDiffAnsi;
49
+ //# sourceMappingURL=slice-diff-ansi.js.map
@@ -0,0 +1,123 @@
1
+ import { LAST_PER_FILE_STEP, LAST_STEP, StepRequired, STEPS_PER_SLICE, StepName, StepResult } from './steps';
2
+ import { SlicingCriteria } from '../slicing';
3
+ import { SteppingSlicerInput } from './input';
4
+ import { StepResults } from './output';
5
+ /**
6
+ * This is ultimately the root of flowR's static slicing procedure.
7
+ * It clearly defines the steps that are to be executed and splits them into two stages.
8
+ * - `once-per-file`: for steps that are executed once per file. These can be performed *without* the knowledge of a slicing criteria,
9
+ * and they can be cached and re-used if you want to slice the same file multiple times.
10
+ * - `once-per-slice`: for steps that are executed once per slice. These can only be performed *with* a slicing criteria.
11
+ *
12
+ * Furthermore, this stepper follows an iterable fashion to be *as flexible as possible* (e.g., to be instrumented with measurements).
13
+ * So, you can use the stepping slicer like this:
14
+ *
15
+ * ```ts
16
+ * const slicer = new SteppingSlicer({ ... })
17
+ * while(slicer.hasNextStep()) {
18
+ * await slicer.nextStep()
19
+ * }
20
+ *
21
+ * slicer.switchToSliceStage()
22
+ *
23
+ * while(slicer.hasNextStep()) {
24
+ * await slicer.nextStep()
25
+ * }
26
+ *
27
+ * const result = slicer.getResults()
28
+ * ```
29
+ *
30
+ * Of course, you might think, that this is rather overkill if you simply want to receive the slice of a given input source or in general
31
+ * the result of any step. And this is true. Therefore, if you do not want to perform some kind of magic in-between steps, you can use the
32
+ * **{@link allRemainingSteps}** function like this:
33
+ *
34
+ * ```ts
35
+ * const slicer = new SteppingSlicer({ ... })
36
+ * const result = await slicer.allRemainingSteps()
37
+ * ```
38
+ *
39
+ * As the name suggest, you can combine this name with previous calls to {@link nextStep} to only execute the remaining steps.
40
+ *
41
+ * Giving the **step of interest** allows you to declare the maximum step to execute.
42
+ * So, if you pass `dataflow` as the step of interest, the stepping slicer will stop after the dataflow step.
43
+ * If you do not pass a step, the stepping slicer will execute all steps.
44
+ *
45
+ * By default, the {@link SteppingSlicer} does not offer an automatic way to repeat the per-slice steps for multiple slices (this is mostly to prevent accidental errors).
46
+ * However, you can use the **{@link updateCriterion}** function to reset the per-slice steps and re-execute them for a new slice. This allows something like the following:
47
+ *
48
+ * ```ts
49
+ * const slicer = new SteppingSlicer({ ... })
50
+ * const result = await slicer.allRemainingSteps()
51
+ *
52
+ * slicer.updateCriterion(...)
53
+ * const result2 = await slicer.allRemainingSteps()
54
+ * ```
55
+ *
56
+ * @note Even though, using the stepping slicer introduces some performance overhead, we consider
57
+ * it to be the baseline for performance benchmarking. It may very well be possible to squeeze out some more performance by
58
+ * directly constructing the steps in the right order. However, we consider this to be negligible when compared with the time required
59
+ * for, for example, the dataflow analysis.
60
+ *
61
+ * @see retrieveResultOfStep
62
+ * @see SteppingSlicer#doNextStep
63
+ * @see StepName
64
+ */
65
+ export declare class SteppingSlicer<InterestedIn extends StepName | undefined = typeof LAST_STEP> {
66
+ static readonly maximumNumberOfStepsPerFile: number;
67
+ static readonly maximumNumberOfStepsPerSlice: number;
68
+ private readonly shell;
69
+ private readonly stepOfInterest;
70
+ private readonly request;
71
+ private readonly hooks?;
72
+ private readonly getId?;
73
+ private criterion?;
74
+ private results;
75
+ private stage;
76
+ private stepCounter;
77
+ private reachedWanted;
78
+ /**
79
+ * Create a new stepping slicer. For more details on the arguments please see {@link SteppingSlicerInput}.
80
+ */
81
+ constructor(input: SteppingSlicerInput<InterestedIn>);
82
+ /**
83
+ * Retrieve the current stage the stepping slicer is in.
84
+ * @see StepRequired
85
+ * @see switchToSliceStage
86
+ */
87
+ getCurrentStage(): StepRequired;
88
+ /**
89
+ * Switch to the next stage of the stepping slicer.
90
+ * @see SteppingSlicer
91
+ * @see getCurrentStage
92
+ */
93
+ switchToSliceStage(): void;
94
+ getResults(intermediate?: false): StepResults<InterestedIn>;
95
+ getResults(intermediate: true): Partial<StepResults<InterestedIn>>;
96
+ /**
97
+ * Returns true only if 1) there are more steps to-do for the current stage and 2) we have not yet reached the step we are interested in
98
+ */
99
+ hasNextStep(): boolean;
100
+ /**
101
+ * Execute the next step (guarded with {@link hasNextStep}) and return the name of the step that was executed, so you can guard if the step differs from what you are interested in.
102
+ * Furthermore, it returns the step's result.
103
+ *
104
+ * The `step` parameter is a safeguard if you want to retrieve the result.
105
+ * If given, it causes the execution to fail if the next step is not the one you expect.
106
+ * *Without step, please refrain from accessing the result.*
107
+ */
108
+ nextStep<PassedName extends StepName>(expectedStepName?: PassedName): Promise<{
109
+ name: typeof expectedStepName extends undefined ? StepName : PassedName;
110
+ result: typeof expectedStepName extends undefined ? unknown : StepResult<Exclude<PassedName, undefined>>;
111
+ }>;
112
+ private getGuardStep;
113
+ private doNextStep;
114
+ /**
115
+ * This only makes sense if you have already sliced a file (e.g., by running up to the `slice` step) and want to do so again while caching the results.
116
+ * Or if for whatever reason you did not pass a criterion with the constructor.
117
+ *
118
+ * @param newCriterion - the new slicing criterion to use for the next slice
119
+ */
120
+ updateCriterion(newCriterion: SlicingCriteria): void;
121
+ allRemainingSteps(canSwitchStage: false): Promise<Partial<StepResults<InterestedIn extends keyof typeof STEPS_PER_SLICE | undefined ? typeof LAST_PER_FILE_STEP : InterestedIn>>>;
122
+ allRemainingSteps(canSwitchStage?: true): Promise<StepResults<InterestedIn>>;
123
+ }