@eagleoutice/flowr 1.5.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +52 -47
  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
@@ -11,10 +11,7 @@ class ValueConversionError extends Error {
11
11
  * transforms a value to something R can understand (e.g., booleans to TRUE/FALSE)
12
12
  */
13
13
  function ts2r(value) {
14
- if (typeof value === 'undefined') {
15
- return 'NA';
16
- }
17
- else if (typeof value === 'string') {
14
+ if (typeof value === 'string') {
18
15
  return JSON.stringify(value);
19
16
  }
20
17
  else if (typeof value === 'number') {
@@ -32,6 +29,9 @@ function ts2r(value) {
32
29
  else if (value === null) {
33
30
  return 'NULL';
34
31
  }
32
+ else if (typeof value === 'undefined') {
33
+ return 'NA';
34
+ }
35
35
  else if (Array.isArray(value)) {
36
36
  return `c(${value.map(ts2r).join(', ')})`;
37
37
  }
@@ -154,4 +154,4 @@ function isNA(value) {
154
154
  return value === exports.RNa;
155
155
  }
156
156
  exports.isNA = isNA;
157
- //# sourceMappingURL=values.js.map
157
+ //# sourceMappingURL=convert-values.js.map
@@ -1,11 +1,11 @@
1
1
  import { type RShell } from './shell';
2
- import type { XmlParserHooks, NormalizedAst } from './lang-4.x';
3
- import type { AsyncOrSync, DeepPartial } from 'ts-essentials';
2
+ import type { AsyncOrSync } from 'ts-essentials';
4
3
  import { RShellExecutor } from './shell-executor';
5
- export declare const fileProtocol: "file://";
4
+ import type { NormalizedAst } from './lang-4.x/ast/model/processing/decorate';
5
+ export declare const fileProtocol = "file://";
6
6
  export interface RParseRequestFromFile {
7
7
  readonly request: 'file';
8
- /** The path to the file (absolute paths are probably best here */
8
+ /** The path to the file (absolute paths are probably best here) */
9
9
  readonly content: string;
10
10
  }
11
11
  export interface RParseRequestFromText {
@@ -41,7 +41,7 @@ export declare function retrieveParseDataFromRCode(request: RParseRequest, shell
41
41
  * Uses {@link retrieveParseDataFromRCode} and returns the nicely formatted object-AST.
42
42
  * If successful, allows to further query the last result with {@link retrieveNumberOfRTokensOfLastParse}.
43
43
  */
44
- export declare function retrieveNormalizedAstFromRCode(request: RParseRequest, shell: RShell, hooks?: DeepPartial<XmlParserHooks>): Promise<NormalizedAst>;
44
+ export declare function retrieveNormalizedAstFromRCode(request: RParseRequest, shell: RShell): Promise<NormalizedAst>;
45
45
  /**
46
46
  * If the string has (R-)quotes around it, they will be removed, otherwise the string is returned unchanged.
47
47
  */
@@ -4,12 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.retrieveNumberOfRTokensOfLastParse = exports.removeRQuotes = exports.retrieveNormalizedAstFromRCode = exports.retrieveParseDataFromRCode = exports.requestFingerprint = exports.requestProviderFromText = exports.requestProviderFromFile = exports.requestFromInput = exports.fileProtocol = void 0;
7
- const lang_4_x_1 = require("./lang-4.x");
8
7
  const strings_1 = require("../util/strings");
9
8
  const assert_1 = require("../util/assert");
10
9
  const shell_executor_1 = require("./shell-executor");
11
10
  const object_hash_1 = __importDefault(require("object-hash"));
12
11
  const parser_1 = require("./lang-4.x/ast/parser/json/parser");
12
+ const init_1 = require("./init");
13
+ const convert_values_1 = require("./lang-4.x/convert-values");
13
14
  exports.fileProtocol = 'file://';
14
15
  /**
15
16
  * Creates a {@link RParseRequest} from a given input.
@@ -48,7 +49,6 @@ function requestFingerprint(request) {
48
49
  return (0, object_hash_1.default)(request);
49
50
  }
50
51
  exports.requestFingerprint = requestFingerprint;
51
- const ErrorMarker = 'err';
52
52
  /**
53
53
  * Provides the capability to parse R files/R code using the R parser.
54
54
  * Depends on {@link RShell} to provide a connection to R.
@@ -57,25 +57,12 @@ const ErrorMarker = 'err';
57
57
  * If successful, allows to further query the last result with {@link retrieveNumberOfRTokensOfLastParse}.
58
58
  */
59
59
  function retrieveParseDataFromRCode(request, shell) {
60
+ if (request.content.trim() === '') {
61
+ return Promise.resolve('');
62
+ }
60
63
  const suffix = request.request === 'file' ? ', encoding="utf-8"' : '';
61
- const eol = (0, lang_4_x_1.ts2r)(shell.options.eol);
62
- const command =
63
- /* first check if flowr_get is already part of the environment */
64
- 'if(!exists("flowr_get")){'
65
- /* if not, define it complete wrapped in a try so that we can handle failures gracefully on stdout */
66
- + 'flowr_get<-function(...){tryCatch({'
67
- /* the actual code to parse the R code, ... allows us to keep the old 'file=path' and 'text=content' semantics. we define flowr_output using the super assignment to persist it in the env! */
68
- + 'flowr_output<<-utils::getParseData(parse(...,keep.source=TRUE),includeText=TRUE);'
69
- /* json conversion of the output, dataframe="values" allows us to receive a list of lists (which is more compact)!
70
- * so we do not depend on jsonlite and friends, we do so manually (:sparkles:)
71
- */
72
- + `cat("[",paste0(apply(flowr_output,1,function(o)sprintf("[%s,%s,%s,%s,%s,%s,%s,%s,%s]",o[[1]],o[[2]],o[[3]],o[[4]],o[[5]],o[[6]],deparse(o[[7]]),if(o[[8]])"true"else"false",deparse(o[[9]]))),collapse=","),"]",${eol},sep="")`
73
- /* error handling (just produce the marker) */
74
- + `},error=function(e){cat("${ErrorMarker}",${eol})})};`
75
- /* compile the function to improve perf. */
76
- + 'flowr_get<-compiler::cmpfun(flowr_get)};'
77
- /* call the function with the request */
78
- + `flowr_get(${request.request}=${JSON.stringify(request.content)}${suffix})`;
64
+ /* call the function with the request */
65
+ const command = `flowr_get_ast(${request.request}=${JSON.stringify(request.content)}${suffix})`;
79
66
  if (shell instanceof shell_executor_1.RShellExecutor) {
80
67
  return guardRetrievedOutput(shell.run(command), request);
81
68
  }
@@ -88,9 +75,9 @@ exports.retrieveParseDataFromRCode = retrieveParseDataFromRCode;
88
75
  * Uses {@link retrieveParseDataFromRCode} and returns the nicely formatted object-AST.
89
76
  * If successful, allows to further query the last result with {@link retrieveNumberOfRTokensOfLastParse}.
90
77
  */
91
- async function retrieveNormalizedAstFromRCode(request, shell, hooks) {
78
+ async function retrieveNormalizedAstFromRCode(request, shell) {
92
79
  const data = await retrieveParseDataFromRCode(request, shell);
93
- return (0, parser_1.normalize)(data, hooks);
80
+ return (0, parser_1.normalize)(data);
94
81
  }
95
82
  exports.retrieveNormalizedAstFromRCode = retrieveNormalizedAstFromRCode;
96
83
  /**
@@ -109,13 +96,13 @@ exports.removeRQuotes = removeRQuotes;
109
96
  * Needs to be called *after* {@link retrieveParseDataFromRCode} (or {@link retrieveNormalizedAstFromRCode})
110
97
  */
111
98
  async function retrieveNumberOfRTokensOfLastParse(shell) {
112
- const result = await shell.sendCommandWithOutput(`cat(nrow(flowr_output),${(0, lang_4_x_1.ts2r)(shell.options.eol)})`);
99
+ const result = await shell.sendCommandWithOutput(`cat(nrow(flowr_output),${(0, convert_values_1.ts2r)(shell.options.eol)})`);
113
100
  (0, assert_1.guard)(result.length === 1, () => `expected exactly one line to obtain the number of R tokens, but got: ${JSON.stringify(result)}`);
114
101
  return Number(result[0]);
115
102
  }
116
103
  exports.retrieveNumberOfRTokensOfLastParse = retrieveNumberOfRTokensOfLastParse;
117
104
  function guardRetrievedOutput(output, request) {
118
- (0, assert_1.guard)(output !== ErrorMarker, () => `unable to parse R code (see the log for more information) for request ${JSON.stringify(request)}}`);
105
+ (0, assert_1.guard)(output !== init_1.ErrorMarker, () => `unable to parse R code (see the log for more information) for request ${JSON.stringify(request)}}`);
119
106
  return output;
120
107
  }
121
108
  //# sourceMappingURL=retriever.js.map
@@ -4,7 +4,6 @@ export declare class RShellExecutor {
4
4
  readonly options: Readonly<RShellExecutionOptions>;
5
5
  private readonly prerequisites;
6
6
  constructor(options?: Partial<RShellExecutionOptions>);
7
- continueOnError(): this;
8
7
  addPrerequisites(commands: string | string[]): this;
9
8
  usedRVersion(): SemVer | null;
10
9
  run(command: string, returnErr?: boolean): string;
@@ -7,35 +7,30 @@ exports.RShellExecutor = void 0;
7
7
  const shell_1 = require("./shell");
8
8
  const objects_1 = require("../util/objects");
9
9
  const child_process_1 = require("child_process");
10
- const lang_4_x_1 = require("./lang-4.x");
11
10
  const preload_1 = __importDefault(require("semver/preload"));
12
11
  const log_1 = require("../util/log");
12
+ const init_1 = require("./init");
13
+ const convert_values_1 = require("./lang-4.x/convert-values");
13
14
  const executorLog = log_1.log.getSubLogger({ name: 'RShellExecutor' });
14
15
  class RShellExecutor {
15
16
  options;
16
- prerequisites = [];
17
+ prerequisites;
17
18
  constructor(options) {
18
19
  this.options = (0, objects_1.deepMergeObject)(shell_1.DEFAULT_R_SHELL_OPTIONS, options);
19
- }
20
- continueOnError() {
21
- executorLog.info('continue in case of Errors');
22
- this.addPrerequisites('options(error=function() {})');
23
- return this;
20
+ this.prerequisites = [(0, init_1.initCommand)(this.options.eol)];
24
21
  }
25
22
  addPrerequisites(commands) {
26
23
  this.prerequisites.push(...(typeof commands == 'string' ? [commands] : commands));
27
24
  return this;
28
25
  }
29
26
  usedRVersion() {
30
- const version = this.run(`cat(paste0(R.version$major,".",R.version$minor), ${(0, lang_4_x_1.ts2r)(this.options.eol)})`);
31
- executorLog.trace(`raw version: ${JSON.stringify(version)}`);
27
+ const version = this.run(`cat(paste0(R.version$major,".",R.version$minor), ${(0, convert_values_1.ts2r)(this.options.eol)})`);
28
+ (0, log_1.expensiveTrace)(executorLog, () => `raw version: ${JSON.stringify(version)}`);
32
29
  return preload_1.default.coerce(version);
33
30
  }
34
31
  run(command, returnErr = false) {
35
32
  command += ';base::quit()';
36
- if (executorLog.settings.minLevel >= 1 /* LogLevel.Trace */) {
37
- executorLog.trace(`> ${JSON.stringify(command)}`);
38
- }
33
+ (0, log_1.expensiveTrace)(executorLog, () => `> ${JSON.stringify(command)}`);
39
34
  const returns = (0, child_process_1.spawnSync)(this.options.pathToRExecutable, this.options.commandLineOptions, {
40
35
  env: this.options.env,
41
36
  cwd: this.options.cwd,
@@ -1,16 +1,18 @@
1
1
  /// <reference types="node" />
2
2
  import { type MergeableRecord } from '../util/objects';
3
3
  import type { SemVer } from 'semver';
4
+ import type { AsyncOrSync } from 'ts-essentials';
4
5
  export type OutputStreamSelector = 'stdout' | 'stderr' | 'both';
5
6
  export interface CollectorTimeout extends MergeableRecord {
6
7
  /**
7
8
  * number of milliseconds to wait for the collection to finish
8
9
  */
9
10
  ms: number;
10
- /**
11
- * if true, the timeout will reset whenever we receive new data
12
- */
13
11
  resetOnNewData: boolean;
12
+ /**
13
+ * invoked when the timeout is reached. If not set, the promise will be rejected with an error.
14
+ */
15
+ onTimeout?: (resolve: (value: AsyncOrSync<string[]>) => void, reject: (value: AsyncOrSync<string[]>) => void, partialResult: string[]) => void;
14
16
  }
15
17
  /**
16
18
  * Configuration for the internal output collector used by the {@link RShell}
@@ -32,6 +34,11 @@ export interface OutputCollectorConfiguration extends MergeableRecord {
32
34
  automaticallyTrimOutput: boolean;
33
35
  }
34
36
  export declare const DEFAULT_OUTPUT_COLLECTOR_CONFIGURATION: OutputCollectorConfiguration;
37
+ export declare const enum RShellReviveOptions {
38
+ Never = 0,
39
+ OnError = 1,
40
+ Always = 2
41
+ }
35
42
  export interface RShellExecutionOptions extends MergeableRecord {
36
43
  /** The path to the R executable, can be only the executable if it is to be found on the PATH. */
37
44
  readonly pathToRExecutable: string;
@@ -42,13 +49,13 @@ export interface RShellExecutionOptions extends MergeableRecord {
42
49
  /** The character to use to mark the end of a line. Is probably always `\n` (even on windows). */
43
50
  readonly eol: string;
44
51
  /** The environment variables available in the R session. */
45
- readonly env: NodeJS.ProcessEnv;
52
+ readonly env: NodeJS.ProcessEnv | undefined;
46
53
  /** The path to the library directory, use undefined to let R figure that out for itself */
47
54
  readonly homeLibPath: string | undefined;
48
55
  }
49
56
  export interface RShellSessionOptions extends RShellExecutionOptions {
50
57
  /** If set, the R session will be restarted if it exits due to an error */
51
- readonly revive: 'never' | 'on-error' | 'always';
58
+ readonly revive: RShellReviveOptions;
52
59
  /** Called when the R session is restarted, this makes only sense if `revive` is not set to `'never'` */
53
60
  readonly onRevive: (code: number, signal: string | null) => void;
54
61
  }
@@ -84,7 +91,7 @@ export declare class RShell {
84
91
  */
85
92
  sendCommand(command: string): void;
86
93
  usedRVersion(): Promise<SemVer | null>;
87
- injectLibPaths(...paths: string[]): void;
94
+ injectLibPaths(...paths: readonly string[]): void;
88
95
  tryToInjectHomeLibPath(): void;
89
96
  /**
90
97
  * checks if a given package is already installed on the system!
@@ -103,16 +110,11 @@ export declare class RShell {
103
110
  *
104
111
  * @see sendCommand
105
112
  */
106
- sendCommands(...commands: string[]): void;
113
+ sendCommands(...commands: readonly string[]): void;
107
114
  /**
108
115
  * clears the R environment using the `rm` command.
109
116
  */
110
117
  clearEnvironment(): void;
111
- /**
112
- * usually R will stop execution on errors, with this the R session will try to
113
- * continue working!
114
- */
115
- continueOnError(): void;
116
118
  /**
117
119
  * Obtain the temporary directory used by R.
118
120
  * Additionally, this marks the directory for removal when the shell exits.
package/r-bridge/shell.js CHANGED
@@ -27,15 +27,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.RShell = exports.DEFAULT_R_SHELL_OPTIONS = exports.DEFAULT_R_SHELL_EXEC_OPTIONS = exports.DEFAULT_R_PATH = exports.DEFAULT_OUTPUT_COLLECTOR_CONFIGURATION = void 0;
30
- const child_process_1 = require("child_process");
30
+ const node_child_process_1 = require("node:child_process");
31
31
  const objects_1 = require("../util/objects");
32
32
  const readline = __importStar(require("readline"));
33
- const lang_4_x_1 = require("./lang-4.x");
34
33
  const log_1 = require("../util/log");
35
34
  const preload_1 = __importDefault(require("semver/preload"));
36
35
  const os_1 = require("../util/os");
37
36
  const fs_1 = __importDefault(require("fs"));
37
+ const init_1 = require("./init");
38
38
  const config_1 = require("../config");
39
+ const convert_values_1 = require("./lang-4.x/convert-values");
39
40
  exports.DEFAULT_OUTPUT_COLLECTOR_CONFIGURATION = {
40
41
  from: 'stdout',
41
42
  postamble: `🐧${'-'.repeat(5)}🐧`,
@@ -50,16 +51,16 @@ exports.DEFAULT_OUTPUT_COLLECTOR_CONFIGURATION = {
50
51
  exports.DEFAULT_R_PATH = (0, os_1.getPlatform)() === 'windows' ? 'R.exe' : 'R';
51
52
  exports.DEFAULT_R_SHELL_EXEC_OPTIONS = {
52
53
  pathToRExecutable: (0, config_1.getConfig)().rPath ?? exports.DEFAULT_R_PATH,
53
- commandLineOptions: ['--vanilla', '--quiet', '--no-echo', '--no-save'],
54
+ commandLineOptions: ['--vanilla', '--quiet', '--no-echo', '--no-save', '--slave'],
54
55
  cwd: process.cwd(),
55
- env: process.env,
56
+ env: undefined,
56
57
  eol: '\n',
57
58
  homeLibPath: (0, os_1.getPlatform)() === 'windows' ? undefined : '~/.r-libs'
58
59
  };
59
60
  exports.DEFAULT_R_SHELL_OPTIONS = {
60
61
  ...exports.DEFAULT_R_SHELL_EXEC_OPTIONS,
61
62
  sessionName: 'default',
62
- revive: 'never',
63
+ revive: 0 /* RShellReviveOptions.Never */,
63
64
  onRevive: () => { }
64
65
  };
65
66
  /**
@@ -78,17 +79,17 @@ class RShell {
78
79
  // should never be more than one, but let's be sure
79
80
  tempDirs = new Set();
80
81
  constructor(options) {
81
- this.options = (0, objects_1.deepMergeObject)(exports.DEFAULT_R_SHELL_OPTIONS, options);
82
+ this.options = { ...exports.DEFAULT_R_SHELL_OPTIONS, ...options };
82
83
  this.log = log_1.log.getSubLogger({ name: this.options.sessionName });
83
84
  this.session = new RShellSession(this.options, this.log);
84
85
  this.revive();
85
86
  }
86
87
  revive() {
87
- if (this.options.revive === 'never') {
88
+ if (this.options.revive === 0 /* RShellReviveOptions.Never */) {
88
89
  return;
89
90
  }
90
91
  this.session.onExit((code, signal) => {
91
- if (this.options.revive === 'always' || (this.options.revive === 'on-error' && code !== 0)) {
92
+ if (this.options.revive === 2 /* RShellReviveOptions.Always */ || (this.options.revive === 1 /* RShellReviveOptions.OnError */ && code !== 0)) {
92
93
  this.log.warn(`R session exited with code ${code}, reviving!`);
93
94
  this.options.onRevive(code, signal);
94
95
  this.session = new RShellSession(this.options, this.log);
@@ -101,7 +102,7 @@ class RShell {
101
102
  * will not do anything to alter input markers!
102
103
  */
103
104
  sendCommand(command) {
104
- if (this.log.settings.minLevel >= 1 /* LogLevel.Trace */) {
105
+ if (this.log.settings.minLevel <= 1 /* LogLevel.Trace */) {
105
106
  this.log.trace(`> ${JSON.stringify(command)}`);
106
107
  }
107
108
  this._sendCommand(command);
@@ -111,14 +112,26 @@ class RShell {
111
112
  return this.versionCache;
112
113
  }
113
114
  // retrieve raw version:
114
- const result = await this.sendCommandWithOutput(`cat(paste0(R.version$major,".",R.version$minor), ${(0, lang_4_x_1.ts2r)(this.options.eol)})`);
115
- this.log.trace(`raw version: ${JSON.stringify(result)}`);
116
- this.versionCache = preload_1.default.coerce(result[0]);
117
- return result.length === 1 ? this.versionCache : null;
115
+ const result = await this.sendCommandWithOutput(`cat(paste0(R.version$major,".",R.version$minor), ${(0, convert_values_1.ts2r)(this.options.eol)})`, {
116
+ timeout: {
117
+ ms: 5000,
118
+ resetOnNewData: false,
119
+ // just resolve on timeout and handle the empty array case below
120
+ onTimeout: resolve => resolve([])
121
+ }
122
+ });
123
+ (0, log_1.expensiveTrace)(this.log, () => `raw version: ${JSON.stringify(result)}`);
124
+ if (result.length === 1) {
125
+ this.versionCache = preload_1.default.coerce(result[0]);
126
+ return this.versionCache;
127
+ }
128
+ else {
129
+ return null;
130
+ }
118
131
  }
119
132
  injectLibPaths(...paths) {
120
- this.log.debug(`injecting lib paths ${JSON.stringify(paths)}`);
121
- this._sendCommand(`.libPaths(c(.libPaths(), ${paths.map(lang_4_x_1.ts2r).join(',')}))`);
133
+ (0, log_1.expensiveTrace)(this.log, () => `injecting lib paths ${JSON.stringify(paths)}`);
134
+ this._sendCommand(`.libPaths(c(.libPaths(), ${paths.map(convert_values_1.ts2r).join(',')}))`);
122
135
  }
123
136
  tryToInjectHomeLibPath() {
124
137
  // ensure the path exists first
@@ -148,16 +161,14 @@ class RShell {
148
161
  */
149
162
  async sendCommandWithOutput(command, addonConfig) {
150
163
  const config = (0, objects_1.deepMergeObject)(exports.DEFAULT_OUTPUT_COLLECTOR_CONFIGURATION, addonConfig);
151
- if (this.log.settings.minLevel >= 1 /* LogLevel.Trace */) {
152
- this.log.trace(`> ${JSON.stringify(command)}`);
153
- }
164
+ (0, log_1.expensiveTrace)(this.log, () => `> ${JSON.stringify(command)}`);
154
165
  const output = await this.session.collectLinesUntil(config.from, {
155
166
  predicate: data => data === config.postamble,
156
167
  includeInResult: config.keepPostamble // we do not want the postamble
157
168
  }, config.timeout, () => {
158
169
  this._sendCommand(command);
159
170
  if (config.from === 'stderr') {
160
- this._sendCommand(`cat("${config.postamble}${this.options.eol}", file=stderr())`);
171
+ this._sendCommand(`cat("${config.postamble}${this.options.eol}",file=stderr())`);
161
172
  }
162
173
  else {
163
174
  this._sendCommand(`cat("${config.postamble}${this.options.eol}")`);
@@ -187,21 +198,13 @@ class RShell {
187
198
  this.log.debug('clearing environment');
188
199
  this._sendCommand('rm(list=ls())');
189
200
  }
190
- /**
191
- * usually R will stop execution on errors, with this the R session will try to
192
- * continue working!
193
- */
194
- continueOnError() {
195
- this.log.info('continue in case of Errors');
196
- this._sendCommand('options(error=function() {})');
197
- }
198
201
  /**
199
202
  * Obtain the temporary directory used by R.
200
203
  * Additionally, this marks the directory for removal when the shell exits.
201
204
  */
202
205
  async obtainTmpDir() {
203
- this.sendCommand('temp <- tempdir()');
204
- const [tempdir] = await this.sendCommandWithOutput(`cat(temp, ${(0, lang_4_x_1.ts2r)(this.options.eol)})`);
206
+ this.sendCommand('temp<-tempdir()');
207
+ const [tempdir] = await this.sendCommandWithOutput(`cat(temp,${(0, convert_values_1.ts2r)(this.options.eol)})`);
205
208
  this.tempDirs.add(tempdir);
206
209
  return tempdir;
207
210
  }
@@ -226,10 +229,9 @@ class RShellSession {
226
229
  sessionStdOut;
227
230
  sessionStdErr;
228
231
  options;
229
- log;
230
232
  collectionTimeout;
231
233
  constructor(options, log) {
232
- this.bareSession = (0, child_process_1.spawn)(options.pathToRExecutable, options.commandLineOptions, {
234
+ this.bareSession = (0, node_child_process_1.spawn)(options.pathToRExecutable, options.commandLineOptions, {
233
235
  env: options.env,
234
236
  cwd: options.cwd,
235
237
  windowsHide: true
@@ -246,8 +248,19 @@ class RShellSession {
246
248
  this.end();
247
249
  });
248
250
  this.options = options;
249
- this.log = log;
250
- this.setupRSessionLoggers();
251
+ // initialize the session
252
+ this.writeLine((0, init_1.initCommand)(options.eol));
253
+ if (log.settings.minLevel <= 1 /* LogLevel.Trace */) {
254
+ this.bareSession.stdout.on('data', (data) => {
255
+ log.trace(`< ${data.toString()}`);
256
+ });
257
+ this.bareSession.on('close', (code) => {
258
+ log.trace(`session exited with code ${code}`);
259
+ });
260
+ }
261
+ this.bareSession.stderr.on('data', (data) => {
262
+ log.warn(`< ${data}`);
263
+ });
251
264
  }
252
265
  write(data) {
253
266
  this.bareSession.stdin.write(data);
@@ -271,7 +284,12 @@ class RShellSession {
271
284
  let error;
272
285
  return await new Promise((resolve, reject) => {
273
286
  const makeTimer = () => setTimeout(() => {
274
- reject(new Error(`timeout of ${timeout.ms}ms reached (${JSON.stringify(result)})`));
287
+ if (timeout.onTimeout) {
288
+ timeout.onTimeout(resolve, reject, result);
289
+ }
290
+ else {
291
+ reject(new Error(`timeout of ${timeout.ms}ms reached (${JSON.stringify(result)})`));
292
+ }
275
293
  }, timeout.ms);
276
294
  this.collectionTimeout = makeTimer();
277
295
  handler = (data) => {
@@ -324,19 +342,6 @@ class RShellSession {
324
342
  log_1.log.info(`killed R session with pid ${this.bareSession.pid ?? '<unknown>'} and result ${killResult ? 'successful' : 'failed'} (including streams)`);
325
343
  return killResult;
326
344
  }
327
- setupRSessionLoggers() {
328
- if (this.log.settings.minLevel >= 1 /* LogLevel.Trace */) {
329
- this.bareSession.stdout.on('data', (data) => {
330
- this.log.trace(`< ${data.toString()}`);
331
- });
332
- this.bareSession.on('close', (code) => {
333
- this.log.trace(`session exited with code ${code}`);
334
- });
335
- }
336
- this.bareSession.stderr.on('data', (data) => {
337
- this.log.warn(`< ${data}`);
338
- });
339
- }
340
345
  onExit(callback) {
341
346
  this.bareSession.on('exit', callback);
342
347
  this.bareSession.stdin.on('error', callback);
@@ -3,8 +3,10 @@
3
3
  * as the file itself is way too long). See {@link reconstructToCode}.
4
4
  * @module
5
5
  */
6
- import type { NormalizedAst, NodeId, ParentInformation, RNode } from '../r-bridge';
7
- type Selection = Set<NodeId>;
6
+ import type { NormalizedAst, ParentInformation } from '../r-bridge/lang-4.x/ast/model/processing/decorate';
7
+ import type { RNode } from '../r-bridge/lang-4.x/ast/model/model';
8
+ import type { NodeId } from '../r-bridge/lang-4.x/ast/model/processing/node-id';
9
+ type Selection = ReadonlySet<NodeId>;
8
10
  export declare const reconstructLogger: import("tslog").Logger<import("tslog").ILogObj>;
9
11
  /** The structure of the predicate that should be used to determine if a given normalized node should be included in the reconstructed code independent of if it is selected by the slice or not */
10
12
  export type AutoSelectPredicate = (node: RNode<ParentInformation>) => boolean;