@eagleoutice/flowr 1.5.2 → 2.0.1

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 (570) hide show
  1. package/abstract-interpretation/handler/binop/binop.d.ts +3 -4
  2. package/abstract-interpretation/handler/binop/binop.js +4 -2
  3. package/abstract-interpretation/handler/binop/operators.d.ts +2 -2
  4. package/abstract-interpretation/handler/binop/operators.js +14 -28
  5. package/abstract-interpretation/processor.d.ts +3 -2
  6. package/abstract-interpretation/processor.js +2 -2
  7. package/benchmark/slicer.d.ts +101 -0
  8. package/benchmark/slicer.js +214 -0
  9. package/benchmark/stats/print.d.ts +7 -0
  10. package/benchmark/stats/print.js +151 -0
  11. package/benchmark/stats/stats.d.ts +42 -0
  12. package/benchmark/stats/stats.js +6 -0
  13. package/benchmark/stopwatch.d.ts +35 -0
  14. package/benchmark/stopwatch.js +79 -0
  15. package/benchmark/summarizer/data.d.ts +54 -0
  16. package/benchmark/summarizer/first-phase/input.d.ts +3 -0
  17. package/benchmark/summarizer/first-phase/input.js +76 -0
  18. package/benchmark/summarizer/first-phase/process.d.ts +11 -0
  19. package/benchmark/summarizer/first-phase/process.js +205 -0
  20. package/benchmark/summarizer/second-phase/graph.d.ts +2 -0
  21. package/benchmark/summarizer/second-phase/graph.js +54 -0
  22. package/benchmark/summarizer/second-phase/process.d.ts +6 -0
  23. package/benchmark/summarizer/second-phase/process.js +127 -0
  24. package/benchmark/summarizer/summarizer.d.ts +31 -0
  25. package/benchmark/summarizer/summarizer.js +58 -0
  26. package/cli/benchmark-app.d.ts +10 -0
  27. package/cli/benchmark-app.js +67 -0
  28. package/cli/benchmark-helper-app.d.ts +9 -0
  29. package/cli/benchmark-helper-app.js +69 -0
  30. package/cli/common/features.d.ts +3 -0
  31. package/cli/common/features.js +30 -0
  32. package/cli/common/options.d.ts +20 -0
  33. package/cli/common/options.js +85 -0
  34. package/cli/common/script.d.ts +21 -0
  35. package/cli/common/script.js +61 -0
  36. package/cli/common/scripts-info.d.ts +25 -0
  37. package/cli/common/scripts-info.js +83 -0
  38. package/cli/export-quads-app.d.ts +7 -0
  39. package/cli/export-quads-app.js +43 -0
  40. package/cli/flowr.d.ts +29 -0
  41. package/cli/flowr.js +141 -0
  42. package/cli/repl/commands/cfg.d.ts +3 -0
  43. package/cli/repl/commands/cfg.js +37 -0
  44. package/cli/repl/commands/commands.d.ts +13 -0
  45. package/cli/repl/commands/commands.js +142 -0
  46. package/cli/repl/commands/dataflow.d.ts +3 -0
  47. package/cli/repl/commands/dataflow.js +34 -0
  48. package/cli/repl/commands/execute.d.ts +4 -0
  49. package/cli/repl/commands/execute.js +27 -0
  50. package/cli/repl/commands/main.d.ts +39 -0
  51. package/cli/repl/commands/main.js +14 -0
  52. package/cli/repl/commands/normalize.d.ts +3 -0
  53. package/cli/repl/commands/normalize.js +34 -0
  54. package/cli/repl/commands/parse.d.ts +2 -0
  55. package/cli/repl/commands/parse.js +110 -0
  56. package/cli/repl/commands/quit.d.ts +2 -0
  57. package/cli/repl/commands/quit.js +15 -0
  58. package/cli/repl/commands/version.d.ts +16 -0
  59. package/cli/repl/commands/version.js +28 -0
  60. package/cli/repl/core.d.ts +36 -0
  61. package/cli/repl/core.js +174 -0
  62. package/cli/repl/execute.d.ts +28 -0
  63. package/cli/repl/execute.js +79 -0
  64. package/cli/repl/print-version.d.ts +2 -0
  65. package/cli/repl/print-version.js +10 -0
  66. package/cli/repl/prompt.d.ts +2 -0
  67. package/cli/repl/prompt.js +9 -0
  68. package/cli/repl/server/connection.d.ts +21 -0
  69. package/cli/repl/server/connection.js +218 -0
  70. package/cli/repl/server/messages/analysis.d.ts +72 -0
  71. package/cli/repl/server/messages/analysis.js +21 -0
  72. package/cli/repl/server/messages/error.d.ts +11 -0
  73. package/{core/input.js → cli/repl/server/messages/error.js} +1 -1
  74. package/cli/repl/server/messages/hello.d.ts +20 -0
  75. package/{core/output.js → cli/repl/server/messages/hello.js} +1 -1
  76. package/cli/repl/server/messages/messages.d.ts +35 -0
  77. package/cli/repl/server/messages/messages.js +40 -0
  78. package/cli/repl/server/messages/repl.d.ts +33 -0
  79. package/cli/repl/server/messages/repl.js +37 -0
  80. package/cli/repl/server/messages/slice.d.ts +26 -0
  81. package/cli/repl/server/messages/slice.js +37 -0
  82. package/cli/repl/server/net.d.ts +49 -0
  83. package/cli/repl/server/net.js +63 -0
  84. package/cli/repl/server/send.d.ts +4 -0
  85. package/cli/repl/server/send.js +18 -0
  86. package/cli/repl/server/server.d.ts +20 -0
  87. package/cli/repl/server/server.js +66 -0
  88. package/cli/repl/server/validate.d.ts +15 -0
  89. package/cli/repl/server/validate.js +34 -0
  90. package/cli/slicer-app.d.ts +11 -0
  91. package/cli/slicer-app.js +83 -0
  92. package/cli/statistics-app.d.ts +11 -0
  93. package/cli/statistics-app.js +99 -0
  94. package/cli/statistics-helper-app.d.ts +11 -0
  95. package/cli/statistics-helper-app.js +87 -0
  96. package/cli/summarizer-app.d.ts +18 -0
  97. package/cli/summarizer-app.js +66 -0
  98. package/core/pipeline-executor.d.ts +154 -0
  99. package/core/pipeline-executor.js +221 -0
  100. package/core/print/dataflow-printer.d.ts +3 -4
  101. package/core/print/dataflow-printer.js +5 -5
  102. package/core/print/normalize-printer.d.ts +1 -1
  103. package/core/print/normalize-printer.js +3 -3
  104. package/core/print/parse-printer.js +3 -3
  105. package/core/print/print.d.ts +13 -4
  106. package/core/print/print.js +13 -2
  107. package/core/print/slice-diff-ansi.d.ts +3 -2
  108. package/core/print/slice-diff-ansi.js +4 -4
  109. package/core/steps/all/core/00-parse.d.ts +28 -0
  110. package/core/steps/all/core/00-parse.js +24 -0
  111. package/core/steps/all/core/10-normalize.d.ts +29 -0
  112. package/core/steps/all/core/10-normalize.js +26 -0
  113. package/core/steps/all/core/20-dataflow.d.ts +27 -0
  114. package/core/steps/all/core/20-dataflow.js +29 -0
  115. package/core/steps/all/static-slicing/00-slice.d.ts +28 -0
  116. package/core/steps/all/static-slicing/00-slice.js +21 -0
  117. package/core/steps/all/static-slicing/10-reconstruct.d.ts +25 -0
  118. package/core/steps/all/static-slicing/10-reconstruct.js +21 -0
  119. package/core/steps/pipeline/create-pipeline.d.ts +6 -0
  120. package/core/steps/pipeline/create-pipeline.js +130 -0
  121. package/core/steps/pipeline/default-pipelines.d.ts +251 -0
  122. package/core/steps/pipeline/default-pipelines.js +18 -0
  123. package/core/steps/pipeline/invalid-pipeline-error.d.ts +6 -0
  124. package/core/steps/pipeline/invalid-pipeline-error.js +14 -0
  125. package/core/steps/pipeline/pipeline.d.ts +60 -0
  126. package/core/steps/pipeline/pipeline.js +28 -0
  127. package/core/steps/pipeline-step.d.ts +85 -0
  128. package/core/steps/pipeline-step.js +8 -0
  129. package/dataflow/environments/append.d.ts +4 -4
  130. package/dataflow/environments/append.js +4 -4
  131. package/dataflow/environments/built-in.d.ts +25 -0
  132. package/dataflow/environments/built-in.js +123 -0
  133. package/dataflow/environments/clone.d.ts +2 -0
  134. package/dataflow/environments/clone.js +23 -0
  135. package/dataflow/environments/{register.d.ts → define.d.ts} +3 -3
  136. package/dataflow/environments/define.js +51 -0
  137. package/dataflow/environments/diff.d.ts +6 -0
  138. package/dataflow/environments/diff.js +85 -0
  139. package/dataflow/environments/environment.d.ts +10 -43
  140. package/dataflow/environments/environment.js +32 -138
  141. package/dataflow/environments/identifier.d.ts +31 -0
  142. package/dataflow/environments/identifier.js +3 -0
  143. package/dataflow/environments/overwrite.d.ts +4 -4
  144. package/dataflow/environments/overwrite.js +9 -22
  145. package/dataflow/environments/resolve-by-name.d.ts +7 -6
  146. package/dataflow/environments/resolve-by-name.js +35 -19
  147. package/dataflow/environments/scoping.js +1 -4
  148. package/dataflow/extractor.d.ts +6 -6
  149. package/dataflow/extractor.js +47 -57
  150. package/dataflow/graph/diff.d.ts +24 -7
  151. package/dataflow/graph/diff.js +114 -74
  152. package/dataflow/graph/edge.d.ts +66 -20
  153. package/dataflow/graph/edge.js +73 -27
  154. package/dataflow/graph/graph.d.ts +53 -29
  155. package/dataflow/graph/graph.js +84 -89
  156. package/dataflow/graph/quads.js +2 -2
  157. package/dataflow/graph/vertex.d.ts +37 -34
  158. package/dataflow/info.d.ts +49 -0
  159. package/dataflow/info.js +29 -0
  160. package/dataflow/internal/linker.d.ts +11 -10
  161. package/dataflow/internal/linker.js +64 -90
  162. package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +6 -0
  163. package/dataflow/internal/process/functions/call/argument/make-argument.js +31 -0
  164. package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +3 -0
  165. package/dataflow/internal/process/functions/call/argument/unpack-argument.js +18 -0
  166. package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +9 -0
  167. package/dataflow/internal/process/functions/call/built-in/built-in-access.js +82 -0
  168. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.d.ts +29 -0
  169. package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +167 -0
  170. package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.d.ts +11 -0
  171. package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +165 -0
  172. package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.d.ts +7 -0
  173. package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +97 -0
  174. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.d.ts +7 -0
  175. package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +165 -0
  176. package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +7 -0
  177. package/dataflow/internal/process/functions/call/built-in/built-in-get.js +36 -0
  178. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.d.ts +7 -0
  179. package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +100 -0
  180. package/dataflow/internal/process/functions/call/built-in/built-in-library.d.ts +7 -0
  181. package/dataflow/internal/process/functions/call/built-in/built-in-library.js +32 -0
  182. package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.d.ts +9 -0
  183. package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.js +35 -0
  184. package/dataflow/internal/process/functions/call/built-in/built-in-pipe.d.ts +7 -0
  185. package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +35 -0
  186. package/dataflow/internal/process/functions/call/built-in/built-in-quote.d.ts +9 -0
  187. package/dataflow/internal/process/functions/call/built-in/built-in-quote.js +29 -0
  188. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +7 -0
  189. package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +32 -0
  190. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.d.ts +12 -0
  191. package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +45 -0
  192. package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +11 -0
  193. package/dataflow/internal/process/functions/call/built-in/built-in-source.js +72 -0
  194. package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.d.ts +7 -0
  195. package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +61 -0
  196. package/dataflow/internal/process/functions/call/common.d.ts +35 -0
  197. package/dataflow/internal/process/functions/call/common.js +70 -0
  198. package/dataflow/internal/process/functions/call/default-call-handling.d.ts +5 -0
  199. package/dataflow/internal/process/functions/call/default-call-handling.js +15 -0
  200. package/dataflow/internal/process/functions/call/known-call-handling.d.ts +26 -0
  201. package/dataflow/internal/process/functions/call/known-call-handling.js +62 -0
  202. package/dataflow/internal/process/functions/call/named-call-handling.d.ts +7 -0
  203. package/dataflow/internal/process/functions/call/named-call-handling.js +53 -0
  204. package/dataflow/internal/process/functions/call/unnamed-call-handling.d.ts +6 -0
  205. package/dataflow/internal/process/functions/call/unnamed-call-handling.js +58 -0
  206. package/dataflow/internal/process/functions/process-argument.d.ts +9 -0
  207. package/dataflow/internal/process/functions/{argument.js → process-argument.js} +25 -20
  208. package/dataflow/internal/process/functions/{parameter.d.ts → process-parameter.d.ts} +3 -2
  209. package/dataflow/internal/process/functions/{parameter.js → process-parameter.js} +10 -13
  210. package/dataflow/internal/process/process-named-call.d.ts +6 -0
  211. package/dataflow/internal/process/process-named-call.js +17 -0
  212. package/dataflow/internal/process/process-symbol.d.ts +5 -0
  213. package/dataflow/internal/process/process-symbol.js +26 -0
  214. package/dataflow/internal/process/process-uninteresting-leaf.d.ts +4 -0
  215. package/dataflow/internal/process/process-uninteresting-leaf.js +9 -0
  216. package/dataflow/internal/process/process-value.d.ts +4 -0
  217. package/dataflow/internal/process/process-value.js +22 -0
  218. package/dataflow/logger.d.ts +1 -0
  219. package/dataflow/logger.js +6 -0
  220. package/dataflow/processor.d.ts +18 -13
  221. package/dataflow/processor.js +1 -1
  222. package/package.json +48 -85
  223. package/r-bridge/data/data.d.ts +603 -0
  224. package/r-bridge/data/data.js +753 -0
  225. package/r-bridge/data/get.d.ts +19 -0
  226. package/r-bridge/data/get.js +51 -0
  227. package/r-bridge/data/print.d.ts +1 -0
  228. package/r-bridge/data/print.js +58 -0
  229. package/r-bridge/data/types.d.ts +33 -0
  230. package/r-bridge/data/types.js +3 -0
  231. package/r-bridge/init.d.ts +3 -0
  232. package/r-bridge/init.js +22 -0
  233. package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
  234. package/r-bridge/lang-4.x/ast/model/collect.js +2 -2
  235. package/r-bridge/lang-4.x/ast/model/model.d.ts +26 -5
  236. package/r-bridge/lang-4.x/ast/model/nodes/r-access.d.ts +4 -3
  237. package/r-bridge/lang-4.x/ast/model/nodes/r-argument.d.ts +4 -0
  238. package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.d.ts +0 -17
  239. package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.d.ts +3 -1
  240. package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.d.ts +6 -4
  241. package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.js +2 -0
  242. package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.d.ts +2 -3
  243. package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +1 -1
  244. package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +1 -1
  245. package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.js +2 -2
  246. package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.d.ts +0 -11
  247. package/r-bridge/lang-4.x/ast/model/operators.d.ts +6 -18
  248. package/r-bridge/lang-4.x/ast/model/operators.js +36 -48
  249. package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +19 -15
  250. package/r-bridge/lang-4.x/ast/model/processing/decorate.js +59 -54
  251. package/r-bridge/lang-4.x/ast/model/processing/node-id.d.ts +8 -0
  252. package/r-bridge/lang-4.x/ast/model/processing/node-id.js +18 -0
  253. package/r-bridge/lang-4.x/ast/model/processing/role.d.ts +2 -2
  254. package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +28 -17
  255. package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.js +7 -34
  256. package/r-bridge/lang-4.x/ast/model/processing/visitor.js +5 -2
  257. package/r-bridge/lang-4.x/ast/model/type.js +13 -6
  258. package/r-bridge/lang-4.x/ast/parser/json/format.d.ts +4 -1
  259. package/r-bridge/lang-4.x/ast/parser/json/format.js +9 -2
  260. package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +5 -5
  261. package/r-bridge/lang-4.x/ast/parser/json/parser.js +22 -27
  262. package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +10 -7
  263. package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +19 -11
  264. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.d.ts → normalize-if-then-else.d.ts} +3 -3
  265. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.js → normalize-if-then-else.js} +10 -13
  266. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.d.ts → normalize-if-then.d.ts} +3 -3
  267. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.js → normalize-if-then.js} +9 -12
  268. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.d.ts +10 -0
  269. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.js +64 -0
  270. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.d.ts → normalize-argument.d.ts} +4 -4
  271. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.js → normalize-argument.js} +13 -17
  272. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.d.ts → normalize-call.d.ts} +6 -4
  273. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.js → normalize-call.js} +24 -29
  274. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/normalize-definition.d.ts +12 -0
  275. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{definition.js → normalize-definition.js} +14 -19
  276. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.d.ts → normalize-parameter.d.ts} +4 -4
  277. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.js → normalize-parameter.js} +12 -16
  278. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-break.d.ts +4 -0
  279. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{break.js → normalize-break.js} +6 -8
  280. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-for.d.ts +4 -0
  281. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{for.js → normalize-for.js} +18 -20
  282. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-next.d.ts +4 -0
  283. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{next.js → normalize-next.js} +6 -8
  284. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-repeat.d.ts +13 -0
  285. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{repeat.js → normalize-repeat.js} +13 -16
  286. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-while.d.ts +4 -0
  287. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{while.js → normalize-while.js} +10 -12
  288. package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.d.ts → normalize-access.d.ts} +4 -4
  289. package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.js → normalize-access.js} +44 -45
  290. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.d.ts → normalize-binary.d.ts} +3 -3
  291. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.js → normalize-binary.js} +23 -73
  292. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.d.ts +13 -0
  293. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.js +47 -0
  294. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-comment.d.ts +11 -0
  295. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{comment.js → normalize-comment.js} +5 -10
  296. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-line-directive.d.ts +13 -0
  297. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{line-directive.js → normalize-line-directive.js} +7 -12
  298. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.d.ts +3 -0
  299. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.js +15 -0
  300. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.d.ts +10 -0
  301. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.js +182 -0
  302. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.d.ts +4 -0
  303. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.js +34 -0
  304. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.d.ts +13 -0
  305. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.js +59 -0
  306. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-number.d.ts +16 -0
  307. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{number.js → normalize-number.js} +12 -18
  308. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-string.d.ts +11 -0
  309. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{string.js → normalize-string.js} +7 -12
  310. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.d.ts → normalize-symbol.d.ts} +4 -4
  311. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.js → normalize-symbol.js} +12 -15
  312. package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.d.ts → normalize-meta.d.ts} +5 -3
  313. package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.js → normalize-meta.js} +8 -8
  314. package/r-bridge/lang-4.x/ast/parser/xml/{data.d.ts → normalizer-data.d.ts} +1 -5
  315. package/r-bridge/lang-4.x/ast/parser/xml/normalizer-data.js +3 -0
  316. package/r-bridge/lang-4.x/{values.d.ts → convert-values.d.ts} +2 -2
  317. package/r-bridge/lang-4.x/{values.js → convert-values.js} +5 -5
  318. package/r-bridge/retriever.d.ts +5 -5
  319. package/r-bridge/retriever.js +11 -24
  320. package/r-bridge/shell-executor.d.ts +0 -1
  321. package/r-bridge/shell-executor.js +7 -12
  322. package/r-bridge/shell.d.ts +14 -12
  323. package/r-bridge/shell.js +50 -45
  324. package/reconstruct/reconstruct.d.ts +4 -2
  325. package/reconstruct/reconstruct.js +193 -185
  326. package/slicing/criterion/collect-all.d.ts +4 -3
  327. package/slicing/criterion/collect-all.js +5 -1
  328. package/slicing/criterion/filters/all-variables.js +14 -22
  329. package/slicing/criterion/parse.d.ts +4 -2
  330. package/slicing/criterion/parse.js +13 -11
  331. package/slicing/static/fingerprint.d.ts +5 -0
  332. package/slicing/static/fingerprint.js +17 -0
  333. package/slicing/static/slice-call.d.ts +10 -0
  334. package/slicing/static/slice-call.js +86 -0
  335. package/slicing/static/slicer-types.d.ts +33 -0
  336. package/slicing/static/slicer-types.js +3 -0
  337. package/slicing/static/static-slicer.d.ts +6 -24
  338. package/slicing/static/static-slicer.js +54 -155
  339. package/slicing/static/visiting-queue.d.ts +23 -0
  340. package/slicing/static/visiting-queue.js +53 -0
  341. package/statistics/features/common-syntax-probability.d.ts +29 -0
  342. package/statistics/features/common-syntax-probability.js +159 -0
  343. package/statistics/features/feature.d.ts +182 -0
  344. package/statistics/features/feature.js +39 -0
  345. package/statistics/features/post-processing.d.ts +12 -0
  346. package/statistics/features/post-processing.js +21 -0
  347. package/statistics/features/supported/assignments/assignments.d.ts +12 -0
  348. package/statistics/features/supported/assignments/assignments.js +55 -0
  349. package/statistics/features/supported/assignments/post-process.d.ts +3 -0
  350. package/statistics/features/supported/assignments/post-process.js +124 -0
  351. package/statistics/features/supported/comments/comments.d.ts +18 -0
  352. package/statistics/features/supported/comments/comments.js +133 -0
  353. package/statistics/features/supported/comments/post-process.d.ts +3 -0
  354. package/statistics/features/supported/comments/post-process.js +49 -0
  355. package/statistics/features/supported/control-flow/control-flow.d.ts +17 -0
  356. package/statistics/features/supported/control-flow/control-flow.js +68 -0
  357. package/statistics/features/supported/control-flow/post-process.d.ts +3 -0
  358. package/statistics/features/supported/control-flow/post-process.js +64 -0
  359. package/statistics/features/supported/data-access/data-access.d.ts +15 -0
  360. package/statistics/features/supported/data-access/data-access.js +120 -0
  361. package/statistics/features/supported/data-access/post-process.d.ts +3 -0
  362. package/statistics/features/supported/data-access/post-process.js +106 -0
  363. package/statistics/features/supported/defined-functions/defined-functions.d.ts +34 -0
  364. package/statistics/features/supported/defined-functions/defined-functions.js +142 -0
  365. package/statistics/features/supported/defined-functions/post-process.d.ts +6 -0
  366. package/statistics/features/supported/defined-functions/post-process.js +169 -0
  367. package/statistics/features/supported/expression-list/expression-list.d.ts +9 -0
  368. package/statistics/features/supported/expression-list/expression-list.js +36 -0
  369. package/statistics/features/supported/expression-list/post-process.d.ts +3 -0
  370. package/statistics/features/supported/expression-list/post-process.js +43 -0
  371. package/statistics/features/supported/loops/loops.d.ts +20 -0
  372. package/statistics/features/supported/loops/loops.js +79 -0
  373. package/statistics/features/supported/loops/post-process.d.ts +3 -0
  374. package/statistics/features/supported/loops/post-process.js +71 -0
  375. package/statistics/features/supported/used-functions/post-process.d.ts +6 -0
  376. package/statistics/features/supported/used-functions/post-process.js +178 -0
  377. package/statistics/features/supported/used-functions/used-functions.d.ts +24 -0
  378. package/statistics/features/supported/used-functions/used-functions.js +97 -0
  379. package/statistics/features/supported/used-packages/post-process.d.ts +3 -0
  380. package/statistics/features/supported/used-packages/post-process.js +120 -0
  381. package/statistics/features/supported/used-packages/used-packages.d.ts +16 -0
  382. package/statistics/features/supported/used-packages/used-packages.js +130 -0
  383. package/statistics/features/supported/values/post-process.d.ts +3 -0
  384. package/statistics/features/supported/values/post-process.js +71 -0
  385. package/statistics/features/supported/values/values.d.ts +14 -0
  386. package/statistics/features/supported/values/values.js +101 -0
  387. package/statistics/features/supported/variables/post-process.d.ts +9 -0
  388. package/statistics/features/supported/variables/post-process.js +121 -0
  389. package/statistics/features/supported/variables/variables.d.ts +15 -0
  390. package/statistics/features/supported/variables/variables.js +60 -0
  391. package/statistics/meta-statistics.d.ts +33 -0
  392. package/statistics/meta-statistics.js +17 -0
  393. package/statistics/output/file-provider.d.ts +37 -0
  394. package/statistics/output/file-provider.js +97 -0
  395. package/statistics/output/print-stats.d.ts +17 -0
  396. package/statistics/output/print-stats.js +69 -0
  397. package/statistics/output/statistics-file.d.ts +37 -0
  398. package/statistics/output/statistics-file.js +69 -0
  399. package/statistics/statistics.d.ts +28 -0
  400. package/statistics/statistics.js +108 -0
  401. package/statistics/summarizer/auto-detect.d.ts +2 -0
  402. package/statistics/summarizer/auto-detect.js +32 -0
  403. package/statistics/summarizer/first-phase/process.d.ts +6 -0
  404. package/statistics/summarizer/first-phase/process.js +81 -0
  405. package/statistics/summarizer/post-process/clusterer.d.ts +26 -0
  406. package/statistics/summarizer/post-process/clusterer.js +43 -0
  407. package/statistics/summarizer/post-process/file-based-count.d.ts +17 -0
  408. package/statistics/summarizer/post-process/file-based-count.js +49 -0
  409. package/statistics/summarizer/post-process/histogram.d.ts +59 -0
  410. package/statistics/summarizer/post-process/histogram.js +128 -0
  411. package/statistics/summarizer/post-process/post-process-output.d.ts +16 -0
  412. package/statistics/summarizer/post-process/post-process-output.js +105 -0
  413. package/statistics/summarizer/second-phase/process.d.ts +11 -0
  414. package/statistics/summarizer/second-phase/process.js +116 -0
  415. package/statistics/summarizer/summarizer.d.ts +35 -0
  416. package/statistics/summarizer/summarizer.js +135 -0
  417. package/util/ansi.d.ts +2 -2
  418. package/util/ansi.js +2 -2
  419. package/util/arrays.d.ts +11 -1
  420. package/util/arrays.js +34 -1
  421. package/util/assert.d.ts +1 -0
  422. package/util/assert.js +5 -1
  423. package/util/cfg/cfg.d.ts +3 -2
  424. package/util/cfg/cfg.js +17 -28
  425. package/util/cfg/visitor.d.ts +1 -1
  426. package/util/defaultmap.d.ts +1 -1
  427. package/util/defaultmap.js +1 -1
  428. package/util/diff.d.ts +4 -4
  429. package/util/files.d.ts +2 -2
  430. package/util/files.js +1 -1
  431. package/util/log.d.ts +1 -0
  432. package/util/log.js +7 -1
  433. package/util/logic.d.ts +1 -0
  434. package/util/logic.js +3 -0
  435. package/util/mermaid/ast.d.ts +1 -1
  436. package/util/mermaid/ast.js +2 -2
  437. package/util/mermaid/cfg.d.ts +1 -1
  438. package/util/mermaid/dfg.d.ts +34 -8
  439. package/util/mermaid/dfg.js +99 -70
  440. package/util/mermaid/mermaid.d.ts +1 -1
  441. package/util/mermaid/mermaid.js +6 -7
  442. package/util/objects.js +4 -0
  443. package/util/quads.d.ts +3 -3
  444. package/util/quads.js +0 -1
  445. package/util/range.d.ts +27 -14
  446. package/util/range.js +31 -27
  447. package/util/version.js +1 -1
  448. package/core/index.d.ts +0 -4
  449. package/core/index.js +0 -23
  450. package/core/input.d.ts +0 -42
  451. package/core/output.d.ts +0 -15
  452. package/core/slicer.d.ts +0 -124
  453. package/core/slicer.js +0 -227
  454. package/core/steps.d.ts +0 -508
  455. package/core/steps.js +0 -100
  456. package/dataflow/environments/index.d.ts +0 -7
  457. package/dataflow/environments/index.js +0 -23
  458. package/dataflow/environments/register.js +0 -40
  459. package/dataflow/environments/scopes.d.ts +0 -6
  460. package/dataflow/environments/scopes.js +0 -6
  461. package/dataflow/graph/index.d.ts +0 -4
  462. package/dataflow/graph/index.js +0 -21
  463. package/dataflow/index.d.ts +0 -5
  464. package/dataflow/index.js +0 -24
  465. package/dataflow/internal/info.d.ts +0 -21
  466. package/dataflow/internal/info.js +0 -16
  467. package/dataflow/internal/process/access.d.ts +0 -4
  468. package/dataflow/internal/process/access.js +0 -53
  469. package/dataflow/internal/process/expression-list.d.ts +0 -8
  470. package/dataflow/internal/process/expression-list.js +0 -144
  471. package/dataflow/internal/process/functions/argument.d.ts +0 -8
  472. package/dataflow/internal/process/functions/exit-points.d.ts +0 -2
  473. package/dataflow/internal/process/functions/exit-points.js +0 -121
  474. package/dataflow/internal/process/functions/function-call.d.ts +0 -5
  475. package/dataflow/internal/process/functions/function-call.js +0 -105
  476. package/dataflow/internal/process/functions/function-definition.d.ts +0 -4
  477. package/dataflow/internal/process/functions/function-definition.js +0 -176
  478. package/dataflow/internal/process/functions/source.d.ts +0 -8
  479. package/dataflow/internal/process/functions/source.js +0 -81
  480. package/dataflow/internal/process/if-then-else.d.ts +0 -4
  481. package/dataflow/internal/process/if-then-else.js +0 -56
  482. package/dataflow/internal/process/loops/for-loop.d.ts +0 -4
  483. package/dataflow/internal/process/loops/for-loop.js +0 -54
  484. package/dataflow/internal/process/loops/repeat-loop.d.ts +0 -4
  485. package/dataflow/internal/process/loops/repeat-loop.js +0 -21
  486. package/dataflow/internal/process/loops/while-loop.d.ts +0 -4
  487. package/dataflow/internal/process/loops/while-loop.js +0 -31
  488. package/dataflow/internal/process/operators/assignment.d.ts +0 -4
  489. package/dataflow/internal/process/operators/assignment.js +0 -129
  490. package/dataflow/internal/process/operators/non-assignment-binary-op.d.ts +0 -4
  491. package/dataflow/internal/process/operators/non-assignment-binary-op.js +0 -25
  492. package/dataflow/internal/process/operators/pipe.d.ts +0 -4
  493. package/dataflow/internal/process/operators/pipe.js +0 -46
  494. package/dataflow/internal/process/operators/unary-op.d.ts +0 -4
  495. package/dataflow/internal/process/operators/unary-op.js +0 -10
  496. package/dataflow/internal/process/symbol.d.ts +0 -4
  497. package/dataflow/internal/process/symbol.js +0 -21
  498. package/dataflow/internal/process/uninteresting-leaf.d.ts +0 -3
  499. package/dataflow/internal/process/uninteresting-leaf.js +0 -9
  500. package/index.d.ts +0 -4
  501. package/index.js +0 -21
  502. package/r-bridge/index.d.ts +0 -11
  503. package/r-bridge/index.js +0 -28
  504. package/r-bridge/lang-4.x/ast/index.d.ts +0 -3
  505. package/r-bridge/lang-4.x/ast/index.js +0 -22
  506. package/r-bridge/lang-4.x/ast/model/index.d.ts +0 -6
  507. package/r-bridge/lang-4.x/ast/model/index.js +0 -23
  508. package/r-bridge/lang-4.x/ast/model/nodes/index.d.ts +0 -21
  509. package/r-bridge/lang-4.x/ast/model/nodes/index.js +0 -38
  510. package/r-bridge/lang-4.x/ast/model/nodes/info/index.d.ts +0 -13
  511. package/r-bridge/lang-4.x/ast/model/nodes/info/index.js +0 -27
  512. package/r-bridge/lang-4.x/ast/model/processing/index.d.ts +0 -5
  513. package/r-bridge/lang-4.x/ast/model/processing/index.js +0 -22
  514. package/r-bridge/lang-4.x/ast/parser/xml/hooks.d.ts +0 -292
  515. package/r-bridge/lang-4.x/ast/parser/xml/hooks.js +0 -136
  516. package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +0 -3
  517. package/r-bridge/lang-4.x/ast/parser/xml/index.js +0 -20
  518. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.d.ts +0 -2
  519. package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.js +0 -19
  520. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.d.ts +0 -10
  521. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +0 -65
  522. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.d.ts +0 -1
  523. package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.js +0 -18
  524. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.d.ts +0 -12
  525. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.d.ts +0 -2
  526. package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.js +0 -20
  527. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +0 -9
  528. package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +0 -26
  529. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.d.ts +0 -4
  530. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.d.ts +0 -4
  531. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.d.ts +0 -5
  532. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.js +0 -22
  533. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.d.ts +0 -4
  534. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.d.ts +0 -13
  535. package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.d.ts +0 -4
  536. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.d.ts +0 -3
  537. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.js +0 -20
  538. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.d.ts +0 -6
  539. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.js +0 -24
  540. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.d.ts +0 -13
  541. package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +0 -59
  542. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.d.ts +0 -11
  543. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.d.ts +0 -1
  544. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.js +0 -18
  545. package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.d.ts +0 -12
  546. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.d.ts +0 -10
  547. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +0 -159
  548. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.d.ts +0 -3
  549. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.js +0 -20
  550. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.d.ts +0 -4
  551. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +0 -33
  552. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.d.ts +0 -13
  553. package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +0 -64
  554. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.d.ts +0 -3
  555. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.js +0 -20
  556. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.d.ts +0 -13
  557. package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.d.ts +0 -11
  558. package/r-bridge/lang-4.x/index.d.ts +0 -2
  559. package/r-bridge/lang-4.x/index.js +0 -19
  560. package/slicing/criterion/filters/index.d.ts +0 -1
  561. package/slicing/criterion/filters/index.js +0 -18
  562. package/slicing/criterion/index.d.ts +0 -3
  563. package/slicing/criterion/index.js +0 -20
  564. package/slicing/index.d.ts +0 -3
  565. package/slicing/index.js +0 -20
  566. package/slicing/static/index.d.ts +0 -1
  567. package/slicing/static/index.js +0 -18
  568. package/util/mermaid/index.d.ts +0 -3
  569. package/util/mermaid/index.js +0 -20
  570. /package/{r-bridge/lang-4.x/ast/parser/xml → benchmark/summarizer}/data.js +0 -0
@@ -0,0 +1,16 @@
1
+ import type { ClusterReport } from './clusterer';
2
+ import type { FeatureSelection } from '../../features/feature';
3
+ /**
4
+ * Post process the collections in a given folder, reducing them in a memory preserving way.
5
+ *
6
+ * @param filepath - Path to the root file of the data collection like `statistics-out/top-2023-01-01-00-00-00/`
7
+ * @param features - Collection of features to post process, expects corresponding folders to exist
8
+ *
9
+ * @returns non-aggregated reports for each sub-key of each feature
10
+ */
11
+ export declare function postProcessFeatureFolder(filepath: string, features: FeatureSelection): ClusterReport[];
12
+ /**
13
+ * Prints the report to the console, but limits the output to the `limit` entries with the highest counts.
14
+ * The names of these entries (like `->`) are returned, so they can be used to filter the following histograms.
15
+ */
16
+ export declare function printClusterReport(report: ClusterReport, limit?: number): string[];
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.printClusterReport = exports.postProcessFeatureFolder = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const clusterer_1 = require("./clusterer");
10
+ const log_1 = require("../../../util/log");
11
+ const defaultmap_1 = require("../../../util/defaultmap");
12
+ const ansi_1 = require("../../../util/ansi");
13
+ const feature_1 = require("../../features/feature");
14
+ const decorate_1 = require("../../../r-bridge/lang-4.x/ast/model/processing/decorate");
15
+ const file_provider_1 = require("../../output/file-provider");
16
+ /**
17
+ * Post process the collections in a given folder, reducing them in a memory preserving way.
18
+ *
19
+ * @param filepath - Path to the root file of the data collection like `statistics-out/top-2023-01-01-00-00-00/`
20
+ * @param features - Collection of features to post process, expects corresponding folders to exist
21
+ *
22
+ * @returns non-aggregated reports for each sub-key of each feature
23
+ */
24
+ function postProcessFeatureFolder(filepath, features) {
25
+ if (!fs_1.default.existsSync(filepath)) {
26
+ log_1.log.warn(`Folder for ${filepath} does not exist, skipping post processing`);
27
+ return [];
28
+ }
29
+ const results = [];
30
+ for (const feature of features) {
31
+ const result = processFeatureFolder(filepath, feature);
32
+ if (result.length > 0) {
33
+ results.push(...result);
34
+ }
35
+ }
36
+ return results;
37
+ }
38
+ exports.postProcessFeatureFolder = postProcessFeatureFolder;
39
+ /**
40
+ * Process a single feature folder like `Assignments/`
41
+ *
42
+ * @param filepath - Same as the input to {@link postProcessFeatureFolder}
43
+ * @param feature - The (single) feature to process
44
+ */
45
+ function processFeatureFolder(filepath, feature) {
46
+ const featureInfo = feature_1.ALL_FEATURES[feature];
47
+ const targetPath = path_1.default.join(filepath, featureInfo.name);
48
+ if (!fs_1.default.existsSync(targetPath)) {
49
+ log_1.log.warn(`Folder for ${feature} does not exist at ${targetPath} skipping post processing of this feature`);
50
+ return [];
51
+ }
52
+ log_1.log.info(`Processing ${feature} at ${targetPath}`);
53
+ const contextIdMap = new defaultmap_1.DefaultMap((0, decorate_1.deterministicCountingIdGenerator)());
54
+ const featureSubKeys = Object.keys(featureInfo.initialValue);
55
+ const reports = [];
56
+ for (const subKey of featureSubKeys) {
57
+ const value = processFeatureSubKey(targetPath, subKey, contextIdMap);
58
+ if (value !== undefined) {
59
+ reports.push(value);
60
+ }
61
+ }
62
+ return reports;
63
+ }
64
+ function processFeatureSubKey(featurePath, subKey, contextIdMap) {
65
+ const targetPath = path_1.default.join(featurePath, `${subKey}${file_provider_1.defaultStatisticsFileSuffix}`);
66
+ if (!fs_1.default.existsSync(targetPath)) {
67
+ log_1.log.warn(`Folder for ${subKey} does not exist at ${targetPath} skipping post processing of this key`);
68
+ return undefined;
69
+ }
70
+ return (0, clusterer_1.clusterStatisticsOutput)(targetPath, contextIdMap);
71
+ }
72
+ /**
73
+ * Prints the report to the console, but limits the output to the `limit` entries with the highest counts.
74
+ * The names of these entries (like `->`) are returned, so they can be used to filter the following histograms.
75
+ */
76
+ function printClusterReport(report, limit = 1000) {
77
+ console.log('\n\n\n');
78
+ console.log(report.filepath);
79
+ const shortStats = [...report.valueInfoMap.entries()].map(([name, values]) => {
80
+ return {
81
+ name,
82
+ count: [...values.values()].reduce((a, b) => a + b, 0),
83
+ unique: values.size()
84
+ };
85
+ }).sort((a, b) => b.count - a.count).slice(0, limit);
86
+ const { longestName, longestCount, longestUnique } = shortStats.reduce((acc, { name, count, unique }) => {
87
+ return {
88
+ longestName: Math.max(acc.longestName, name.length),
89
+ longestCount: Math.max(acc.longestCount, count.toLocaleString().length),
90
+ longestUnique: Math.max(acc.longestUnique, unique.toLocaleString().length),
91
+ };
92
+ }, { longestName: 0, longestCount: 0, longestUnique: 0 });
93
+ for (const { name, count, unique } of shortStats) {
94
+ const strId = `${name}`.padEnd(longestName, ' ');
95
+ const strCount = count.toLocaleString().padStart(longestCount, ' ');
96
+ const strUnique = unique.toLocaleString().padStart(longestUnique, ' ');
97
+ const uniqueSuffix = `\t (${strUnique} ${ansi_1.formatter.format('unique', { color: 7 /* Colors.White */, effect: ansi_1.ColorEffect.Foreground })})`;
98
+ console.log(`\t${ansi_1.formatter.format(strId, { style: 1 /* FontStyles.Bold */ })}\t ${strCount} ` +
99
+ `${ansi_1.formatter.format('total', { color: 7 /* Colors.White */, effect: ansi_1.ColorEffect.Foreground })}`
100
+ + (count !== unique ? uniqueSuffix : ''));
101
+ }
102
+ return shortStats.map(({ name }) => name);
103
+ }
104
+ exports.printClusterReport = printClusterReport;
105
+ //# sourceMappingURL=post-process-output.js.map
@@ -0,0 +1,11 @@
1
+ import type { StatisticsSummarizerConfiguration } from '../summarizer';
2
+ import type { CommonSummarizerConfiguration } from '../../../util/summarizer';
3
+ /**
4
+ * Post process the collections in a given folder, retrieving the final summaries.
5
+ *
6
+ * @param logger - The logger to use for outputs
7
+ * @param filepath - Path to the root file of the data collection (contains all the archives)
8
+ * @param config - Configuration of the summarizer
9
+ * @param outputPath - The final outputPath to write the result to (may differ from the configured root folder)
10
+ */
11
+ export declare function postProcessFeatureFolder(logger: CommonSummarizerConfiguration['logger'], filepath: string, config: StatisticsSummarizerConfiguration, outputPath: string): void;
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.postProcessFeatureFolder = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const time_1 = require("../../../util/time");
10
+ const summarizer_1 = require("../../../util/summarizer");
11
+ const arrays_1 = require("../../../util/arrays");
12
+ const files_1 = require("../../../util/files");
13
+ const assert_1 = require("../../../util/assert");
14
+ const feature_1 = require("../../features/feature");
15
+ function postProcessFeatures(config, filepath, outputPath, logger, metaFeatureInformation) {
16
+ for (const featureName of config.featuresToUse) {
17
+ const featureInfo = feature_1.ALL_FEATURES[featureName];
18
+ const targetPath = path_1.default.join(filepath, featureInfo.name);
19
+ const targetFeature = path_1.default.join(outputPath, featureInfo.name);
20
+ if (!featureInfo.postProcess) {
21
+ logger(` Skipping post processing of ${featureName} as no post processing behavior is defined`);
22
+ continue;
23
+ }
24
+ logger(` Post processing of ${featureName}...`);
25
+ if (!fs_1.default.existsSync(targetFeature)) {
26
+ fs_1.default.mkdirSync(targetFeature, { recursive: true });
27
+ }
28
+ if (global.gc) {
29
+ logger(` [${(0, time_1.date2string)(new Date())}] Running garbage collection (--expose-gc)`);
30
+ global.gc();
31
+ }
32
+ featureInfo.postProcess(targetPath, metaFeatureInformation, targetFeature, config);
33
+ }
34
+ }
35
+ function postProcessMeta(config, filepath, outputPath, logger, metaFeatureInformation) {
36
+ const fileStatisticsSummary = {
37
+ successfulParsed: [],
38
+ processingTimeMs: [],
39
+ failedRequests: [],
40
+ // min lengths of 1 etc. could come from different line endings
41
+ lines: [],
42
+ characters: [],
43
+ numberOfNormalizedNodes: []
44
+ };
45
+ if (!fs_1.default.existsSync(path_1.default.join(outputPath, 'meta'))) {
46
+ fs_1.default.mkdirSync(path_1.default.join(outputPath, 'meta'), { recursive: true });
47
+ }
48
+ const out = fs_1.default.createWriteStream(path_1.default.join(outputPath, 'meta', 'stats.csv'));
49
+ out.write(`file,successfulParsed,${(0, summarizer_1.summarizedMeasurement2CsvHeader)('processing')},failedRequests,${(0, summarizer_1.summarizedMeasurement2CsvHeader)('line-length')},${(0, summarizer_1.summarizedMeasurement2CsvHeader)('lines')},${(0, summarizer_1.summarizedMeasurement2CsvHeader)('characters')},numberOfNormalizedNodes\n`);
50
+ for (const [file, info] of metaFeatureInformation) {
51
+ // we could retrieve these by summing later as well :thinking: however, this makes it more explicit
52
+ const characters = (0, arrays_1.sum)(info.stats.lines[0]);
53
+ out.write(`${JSON.stringify(file)},${info.stats.successfulParsed},${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)(info.stats.processingTimeMs))},`
54
+ + `${info.stats.failedRequests.length},${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)(info.stats.lines[0]))},${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)([info.stats.lines[0].length]))},${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)([characters]))},${info.stats.numberOfNormalizedNodes[0]}\n`);
55
+ fileStatisticsSummary.successfulParsed.push(info.stats.successfulParsed);
56
+ fileStatisticsSummary.processingTimeMs.push(...info.stats.processingTimeMs);
57
+ fileStatisticsSummary.failedRequests.push(info.stats.failedRequests.length);
58
+ fileStatisticsSummary.lines.push(info.stats.lines[0]);
59
+ fileStatisticsSummary.characters.push(characters);
60
+ fileStatisticsSummary.numberOfNormalizedNodes.push(info.stats.numberOfNormalizedNodes[0]);
61
+ }
62
+ out.write(`all,${(0, arrays_1.sum)(fileStatisticsSummary.successfulParsed)},${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)(fileStatisticsSummary.processingTimeMs))},`
63
+ + `${(0, arrays_1.sum)(fileStatisticsSummary.failedRequests)},${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)(fileStatisticsSummary.lines.flat()))},${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)(fileStatisticsSummary.lines.map(l => l.length)))},${(0, summarizer_1.summarizedMeasurement2Csv)((0, summarizer_1.summarizeMeasurement)(fileStatisticsSummary.characters))},${(0, arrays_1.sum)(fileStatisticsSummary.numberOfNormalizedNodes)}\n`);
64
+ out.close();
65
+ }
66
+ /**
67
+ * Post process the collections in a given folder, retrieving the final summaries.
68
+ *
69
+ * @param logger - The logger to use for outputs
70
+ * @param filepath - Path to the root file of the data collection (contains all the archives)
71
+ * @param config - Configuration of the summarizer
72
+ * @param outputPath - The final outputPath to write the result to (may differ from the configured root folder)
73
+ */
74
+ function postProcessFeatureFolder(logger, filepath, config, outputPath) {
75
+ if (!fs_1.default.existsSync(filepath)) {
76
+ logger(` Folder for ${filepath} does not exist, skipping post processing`);
77
+ return;
78
+ }
79
+ if (!fs_1.default.existsSync(outputPath)) {
80
+ fs_1.default.mkdirSync(outputPath, { recursive: true });
81
+ }
82
+ const metaFeatureInformation = extractMetaInformationFrom(logger, path_1.default.join(filepath, 'meta', 'features.txt'), path_1.default.join(filepath, 'meta', 'stats.txt'));
83
+ postProcessFeatures(config, filepath, outputPath, logger, metaFeatureInformation);
84
+ postProcessMeta(config, filepath, outputPath, logger, metaFeatureInformation);
85
+ }
86
+ exports.postProcessFeatureFolder = postProcessFeatureFolder;
87
+ function extractMetaInformationFrom(logger, metaFeaturesPath, metaStatsPath) {
88
+ const storage = new Map();
89
+ logger(` [${(0, time_1.date2string)(new Date())}] Collect feature statistics`);
90
+ (0, files_1.readLineByLineSync)(metaFeaturesPath, (line, lineNumber) => {
91
+ if (line.length === 0) {
92
+ return;
93
+ }
94
+ if (lineNumber % 2_500 === 0) {
95
+ logger(` [${(0, time_1.date2string)(new Date())}] ${lineNumber} meta feature lines processed`);
96
+ }
97
+ const meta = JSON.parse(line.toString());
98
+ storage.set(meta.file, meta.content);
99
+ });
100
+ logger(` [${(0, time_1.date2string)(new Date())}] Collect meta statistics`);
101
+ (0, files_1.readLineByLineSync)(metaStatsPath, (line, lineNumber) => {
102
+ if (line.length === 0) {
103
+ return;
104
+ }
105
+ if (lineNumber % 2_500 === 0) {
106
+ logger(` [${(0, time_1.date2string)(new Date())}] ${lineNumber} meta statistics lines processed`);
107
+ }
108
+ const meta = JSON.parse(line.toString());
109
+ const existing = storage.get(meta.file);
110
+ (0, assert_1.guard)(existing !== undefined, () => `Expected to find meta information for ${meta.file} in line ${lineNumber + 1} of ${metaFeaturesPath}`);
111
+ existing.stats = meta.content;
112
+ });
113
+ logger(` [${(0, time_1.date2string)(new Date())}] Done collecting meta information`);
114
+ return storage;
115
+ }
116
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1,35 @@
1
+ import type { CommonSummarizerConfiguration } from '../../util/summarizer';
2
+ import { Summarizer } from '../../util/summarizer';
3
+ import type { FeatureSelection } from '../features/feature';
4
+ export interface StatisticsSummarizerConfiguration extends CommonSummarizerConfiguration {
5
+ /**
6
+ * The input path to read all zips from
7
+ */
8
+ inputPath: string;
9
+ /**
10
+ * Features to extract the summaries for
11
+ */
12
+ featuresToUse: FeatureSelection;
13
+ /**
14
+ * Path for the intermediate results of the preparation phase
15
+ */
16
+ intermediateOutputPath: string;
17
+ /**
18
+ * Path for the final results of the summarization phase
19
+ */
20
+ outputPath: string;
21
+ /**
22
+ * How many folders to skip to find the project root
23
+ */
24
+ projectSkip: number;
25
+ }
26
+ export declare const statisticsFileNameRegex: RegExp;
27
+ export declare class StatisticsSummarizer extends Summarizer<unknown, StatisticsSummarizerConfiguration> {
28
+ constructor(config: StatisticsSummarizerConfiguration);
29
+ private removeIfExists;
30
+ /**
31
+ * The preparation phase essentially merges all files into one by just attaching lines together!
32
+ */
33
+ preparationPhase(useTypeClassification: boolean): Promise<void>;
34
+ summarizePhase(): Promise<unknown>;
35
+ }
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StatisticsSummarizer = exports.statisticsFileNameRegex = void 0;
7
+ const tar_1 = require("tar");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const process_1 = require("./first-phase/process");
11
+ const process_2 = require("./second-phase/process");
12
+ const summarizer_1 = require("../../util/summarizer");
13
+ const strings_1 = require("../../util/strings");
14
+ const files_1 = require("../../util/files");
15
+ const time_1 = require("../../util/time");
16
+ exports.statisticsFileNameRegex = /.*--.*\.tar\.gz$/;
17
+ /**
18
+ * The returned map contains the full path as key, mapping it to the complete contents.
19
+ */
20
+ async function retrieveAllFilesInArchive(f) {
21
+ const filenames = new Map();
22
+ const promises = [];
23
+ (0, tar_1.list)({
24
+ file: f,
25
+ onentry: entry => {
26
+ if (entry.type === 'File') {
27
+ promises.push(entry.concat().then(content => {
28
+ filenames.set(entry.path, content.toString());
29
+ }));
30
+ }
31
+ },
32
+ sync: true
33
+ });
34
+ await Promise.all(promises);
35
+ return filenames;
36
+ }
37
+ function identifyCommonPrefix(files) {
38
+ return (0, strings_1.longestCommonPrefix)([...files.keys()]);
39
+ }
40
+ /** returns the target path */
41
+ async function extractArchive(f) {
42
+ const files = await retrieveAllFilesInArchive(f);
43
+ const commonRoot = identifyCommonPrefix(files);
44
+ // post process until we find the '<filename>.(r|R)' suffix. otherwise, if there are no features and only the meta folder, the meta folder will be removed, resulting in a write
45
+ // to the toplevel!
46
+ const fname = path_1.default.basename(f).replace(/\.tar\.gz$/, '');
47
+ const findIndex = commonRoot.indexOf(fname);
48
+ const commonPart = findIndex < 0 ? commonRoot.length : findIndex + fname.length;
49
+ // transform all map keys by removing the common root
50
+ const transformed = new Map();
51
+ for (const [key, value] of files.entries()) {
52
+ transformed.set(key.slice(commonPart), value);
53
+ }
54
+ return transformed;
55
+ }
56
+ // due to a redefinition after the initial statistic extraction, we extract the type from the remaining path :D
57
+ // original: /^([^-]*)---?(.+)\.tar.gz/
58
+ const filePrefixRegex = /^[^-]*---?(?<fullname>([^/]+)\/(?<pathtest>.+))\.tar\.gz$/;
59
+ const testRegex = /.*test[-_]?(s|that|)\//i;
60
+ /** if it starts with example-, this will return `'example'`, etc. if it starts with '--' this will return `undefined` */
61
+ function identifyExtractionType(path) {
62
+ const match = filePrefixRegex.exec(path.replace(///g, '/'));
63
+ if (match === null || match?.groups === undefined) {
64
+ return undefined;
65
+ }
66
+ // recover
67
+ const originalFile = match.groups.fullname;
68
+ let folder;
69
+ if (testRegex.test(match.groups.pathtest)) {
70
+ folder = 'test';
71
+ }
72
+ else if (match.groups.pathtest.includes('example')) {
73
+ folder = 'example';
74
+ }
75
+ else {
76
+ folder = 'default';
77
+ }
78
+ return { folder, originalFile };
79
+ }
80
+ class StatisticsSummarizer extends summarizer_1.Summarizer {
81
+ constructor(config) {
82
+ super(config);
83
+ }
84
+ removeIfExists(path) {
85
+ if (path && fs_1.default.existsSync(path)) {
86
+ this.log(`Removing existing ${path}`);
87
+ fs_1.default.rmSync(path, { recursive: true, force: true });
88
+ }
89
+ }
90
+ /**
91
+ * The preparation phase essentially merges all files into one by just attaching lines together!
92
+ */
93
+ async preparationPhase(useTypeClassification) {
94
+ this.removeIfExists(this.config.intermediateOutputPath);
95
+ fs_1.default.mkdirSync(this.config.intermediateOutputPath, { recursive: true });
96
+ let count = 0;
97
+ const migrator = new process_1.FileMigrator();
98
+ for await (const f of (0, files_1.getAllFiles)(this.config.inputPath, /\.tar.gz$/)) {
99
+ this.log(`[${count++}, ${(0, time_1.date2string)()}] processing file ${f} (to ${this.config.intermediateOutputPath})`);
100
+ let target;
101
+ try {
102
+ target = await extractArchive(f);
103
+ this.log(' Collected!');
104
+ }
105
+ catch (e) {
106
+ this.log(` Failed to extract ${f}, skipping...`);
107
+ continue;
108
+ }
109
+ this.log(' Migrating files...');
110
+ const extracted = identifyExtractionType(path_1.default.basename(f));
111
+ await migrator.migrate(target, path_1.default.join(this.config.intermediateOutputPath, useTypeClassification ? extracted?.folder ?? 'default' : 'uncategorized'), extracted?.originalFile);
112
+ this.log(' Done! (Cleanup...)');
113
+ }
114
+ migrator.finish();
115
+ this.log(`Found ${count} files to summarize`);
116
+ return Promise.resolve();
117
+ }
118
+ // eslint-disable-next-line @typescript-eslint/require-await -- just to obey the structure
119
+ async summarizePhase() {
120
+ // detect all subfolders in the current folder (default, test...) for each: concat.
121
+ this.removeIfExists(this.config.outputPath);
122
+ fs_1.default.mkdirSync(this.config.outputPath, { recursive: true });
123
+ const folders = fs_1.default.readdirSync(this.config.intermediateOutputPath, { recursive: false });
124
+ for (const folder of folders) {
125
+ const folderStr = String(folder);
126
+ const output = path_1.default.join(this.config.outputPath, folderStr);
127
+ const input = path_1.default.join(this.config.intermediateOutputPath, folderStr);
128
+ this.log(`Summarizing for ${input} (target: ${output})`);
129
+ (0, process_2.postProcessFeatureFolder)(this.log, input, this.config, output);
130
+ }
131
+ return Promise.resolve(undefined);
132
+ }
133
+ }
134
+ exports.StatisticsSummarizer = StatisticsSummarizer;
135
+ //# sourceMappingURL=summarizer.js.map
package/util/ansi.d.ts CHANGED
@@ -33,11 +33,11 @@ export interface OutputFormatter {
33
33
  }
34
34
  export declare const voidFormatter: OutputFormatter;
35
35
  /**
36
- * This does not work if the {@link setFormatter | formatter} is void. Tries to format the text with a bold font weight.
36
+ * This does not work if the {@link setFormatter|formatter} is void. Tries to format the text with a bold font weight.
37
37
  */
38
38
  export declare function italic(s: string, f?: OutputFormatter, options?: FormatOptions): string;
39
39
  /**
40
- * This does not work if the {@link setFormatter | formatter} is void. Tries to format the text with an italic font shape.
40
+ * This does not work if the {@link setFormatter|formatter} is void. Tries to format the text with an italic font shape.
41
41
  */
42
42
  export declare function bold(s: string, f?: OutputFormatter, options?: FormatOptions): string;
43
43
  export declare const escape = "\u001B[";
package/util/ansi.js CHANGED
@@ -19,14 +19,14 @@ exports.voidFormatter = new class {
19
19
  }
20
20
  }();
21
21
  /**
22
- * This does not work if the {@link setFormatter | formatter} is void. Tries to format the text with a bold font weight.
22
+ * This does not work if the {@link setFormatter|formatter} is void. Tries to format the text with a bold font weight.
23
23
  */
24
24
  function italic(s, f = exports.formatter, options) {
25
25
  return f.format(s, { style: 3 /* FontStyles.Italic */, ...options });
26
26
  }
27
27
  exports.italic = italic;
28
28
  /**
29
- * This does not work if the {@link setFormatter | formatter} is void. Tries to format the text with an italic font shape.
29
+ * This does not work if the {@link setFormatter|formatter} is void. Tries to format the text with an italic font shape.
30
30
  */
31
31
  function bold(s, f = exports.formatter, options) {
32
32
  return f.format(s, { style: 1 /* FontStyles.Bold */, ...options });
package/util/arrays.d.ts CHANGED
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Returns the tail of an array (all elements except the first one).
3
+ */
4
+ export type TailOfArray<T extends unknown[]> = T extends [infer _, ...infer Rest] ? Rest : never;
1
5
  /**
2
6
  * Splits the array every time the given predicate fires.
3
7
  * The element the split appears on will not be included!
@@ -13,7 +17,12 @@
13
17
  * // => [[], [], [], []]
14
18
  * ```
15
19
  */
16
- export declare function splitArrayOn<T>(arr: T[], predicate: (elem: T) => boolean): T[][];
20
+ export declare function splitArrayOn<T>(arr: readonly T[], predicate: (elem: T) => boolean): T[][];
21
+ /**
22
+ * Returns a tuple of two arrays, where the first one contains all elements for which the predicate returned true,
23
+ * and the second one contains all elements for which the predicate returned false.
24
+ */
25
+ export declare function partitionArray<T>(arr: readonly T[], predicate: (elem: T) => boolean): [T[], T[]];
17
26
  /**
18
27
  * Generate all permutations of the given array using Heap's algorithm (with its non-recursive variant).
19
28
  *
@@ -42,3 +51,4 @@ export declare function sum(arr: number[]): number;
42
51
  * Converts an array into a bag data-structure (in the form of a map mapping the entries/keys to their counts)
43
52
  */
44
53
  export declare function array2bag<T>(arr: T[]): Map<T, number>;
54
+ export declare function arrayEqual<T>(a: readonly T[] | undefined, b: readonly T[] | undefined): boolean;
package/util/arrays.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.array2bag = exports.sum = exports.getUniqueCombinationsOfSize = exports.partition = exports.allPermutations = exports.splitArrayOn = void 0;
3
+ exports.arrayEqual = exports.array2bag = exports.sum = exports.getUniqueCombinationsOfSize = exports.partition = exports.allPermutations = exports.partitionArray = exports.splitArrayOn = void 0;
4
4
  const assert_1 = require("./assert");
5
5
  /**
6
6
  * Splits the array every time the given predicate fires.
@@ -37,6 +37,24 @@ function splitArrayOn(arr, predicate) {
37
37
  return result;
38
38
  }
39
39
  exports.splitArrayOn = splitArrayOn;
40
+ /**
41
+ * Returns a tuple of two arrays, where the first one contains all elements for which the predicate returned true,
42
+ * and the second one contains all elements for which the predicate returned false.
43
+ */
44
+ function partitionArray(arr, predicate) {
45
+ const left = [];
46
+ const right = [];
47
+ for (const elem of arr) {
48
+ if (predicate(elem)) {
49
+ left.push(elem);
50
+ }
51
+ else {
52
+ right.push(elem);
53
+ }
54
+ }
55
+ return [left, right];
56
+ }
57
+ exports.partitionArray = partitionArray;
40
58
  /**
41
59
  * Generate all permutations of the given array using Heap's algorithm (with its non-recursive variant).
42
60
  *
@@ -142,4 +160,19 @@ function array2bag(arr) {
142
160
  return result;
143
161
  }
144
162
  exports.array2bag = array2bag;
163
+ function arrayEqual(a, b) {
164
+ if (a === undefined || b === undefined) {
165
+ return a === b;
166
+ }
167
+ if (a.length !== b.length) {
168
+ return false;
169
+ }
170
+ for (let i = 0; i < a.length; ++i) {
171
+ if (a[i] !== b[i]) {
172
+ return false;
173
+ }
174
+ }
175
+ return true;
176
+ }
177
+ exports.arrayEqual = arrayEqual;
145
178
  //# sourceMappingURL=arrays.js.map
package/util/assert.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  /** use this to ensure that all cases are covered in case of a selection */
2
2
  export declare function assertUnreachable(x: never): never;
3
3
  export declare function isNotUndefined<T>(x: T | undefined): x is T;
4
+ export declare function isUndefined<T>(x: T | undefined): x is undefined;
4
5
  export declare function isNotNull<T>(x: T | null): x is T;
5
6
  export type GuardMessage = string | (() => string);
6
7
  /**
package/util/assert.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /** use this to ensure that all cases are covered in case of a selection */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.guard = exports.isNotNull = exports.isNotUndefined = exports.assertUnreachable = void 0;
4
+ exports.guard = exports.isNotNull = exports.isUndefined = exports.isNotUndefined = exports.assertUnreachable = void 0;
5
5
  /* istanbul ignore next */
6
6
  function assertUnreachable(x) {
7
7
  throw new Error(`Unexpected object: ${JSON.stringify(x)}`);
@@ -11,6 +11,10 @@ function isNotUndefined(x) {
11
11
  return x !== undefined;
12
12
  }
13
13
  exports.isNotUndefined = isNotUndefined;
14
+ function isUndefined(x) {
15
+ return x === undefined;
16
+ }
17
+ exports.isUndefined = isUndefined;
14
18
  function isNotNull(x) {
15
19
  return x !== null;
16
20
  }
package/util/cfg/cfg.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- import type { NodeId, NormalizedAst, ParentInformation } from '../../r-bridge';
2
- import { RFalse, RTrue } from '../../r-bridge';
3
1
  import type { MergeableRecord } from '../objects';
4
2
  import type { QuadSerializationConfiguration } from '../quads';
3
+ import type { NodeId } from '../../r-bridge/lang-4.x/ast/model/processing/node-id';
4
+ import type { NormalizedAst, ParentInformation } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
5
+ import { RFalse, RTrue } from '../../r-bridge/lang-4.x/convert-values';
5
6
  export declare const enum CfgVertexType {
6
7
  /** Marks a break point in a construct (e.g., between the name and the value of an argument, or the formals and the body of a function) */
7
8
  MidMarker = "mid-marker",