@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.
- package/abstract-interpretation/handler/binop/binop.d.ts +3 -4
- package/abstract-interpretation/handler/binop/binop.js +4 -2
- package/abstract-interpretation/handler/binop/operators.d.ts +2 -2
- package/abstract-interpretation/handler/binop/operators.js +14 -28
- package/abstract-interpretation/processor.d.ts +3 -2
- package/abstract-interpretation/processor.js +2 -2
- package/benchmark/slicer.d.ts +101 -0
- package/benchmark/slicer.js +214 -0
- package/benchmark/stats/print.d.ts +7 -0
- package/benchmark/stats/print.js +151 -0
- package/benchmark/stats/stats.d.ts +42 -0
- package/benchmark/stats/stats.js +6 -0
- package/benchmark/stopwatch.d.ts +35 -0
- package/benchmark/stopwatch.js +79 -0
- package/benchmark/summarizer/data.d.ts +54 -0
- package/benchmark/summarizer/first-phase/input.d.ts +3 -0
- package/benchmark/summarizer/first-phase/input.js +76 -0
- package/benchmark/summarizer/first-phase/process.d.ts +11 -0
- package/benchmark/summarizer/first-phase/process.js +205 -0
- package/benchmark/summarizer/second-phase/graph.d.ts +2 -0
- package/benchmark/summarizer/second-phase/graph.js +54 -0
- package/benchmark/summarizer/second-phase/process.d.ts +6 -0
- package/benchmark/summarizer/second-phase/process.js +127 -0
- package/benchmark/summarizer/summarizer.d.ts +31 -0
- package/benchmark/summarizer/summarizer.js +58 -0
- package/cli/benchmark-app.d.ts +10 -0
- package/cli/benchmark-app.js +67 -0
- package/cli/benchmark-helper-app.d.ts +9 -0
- package/cli/benchmark-helper-app.js +69 -0
- package/cli/common/features.d.ts +3 -0
- package/cli/common/features.js +30 -0
- package/cli/common/options.d.ts +20 -0
- package/cli/common/options.js +85 -0
- package/cli/common/script.d.ts +21 -0
- package/cli/common/script.js +61 -0
- package/cli/common/scripts-info.d.ts +25 -0
- package/cli/common/scripts-info.js +83 -0
- package/cli/export-quads-app.d.ts +7 -0
- package/cli/export-quads-app.js +43 -0
- package/cli/flowr.d.ts +29 -0
- package/cli/flowr.js +141 -0
- package/cli/repl/commands/cfg.d.ts +3 -0
- package/cli/repl/commands/cfg.js +37 -0
- package/cli/repl/commands/commands.d.ts +13 -0
- package/cli/repl/commands/commands.js +142 -0
- package/cli/repl/commands/dataflow.d.ts +3 -0
- package/cli/repl/commands/dataflow.js +34 -0
- package/cli/repl/commands/execute.d.ts +4 -0
- package/cli/repl/commands/execute.js +27 -0
- package/cli/repl/commands/main.d.ts +39 -0
- package/cli/repl/commands/main.js +14 -0
- package/cli/repl/commands/normalize.d.ts +3 -0
- package/cli/repl/commands/normalize.js +34 -0
- package/cli/repl/commands/parse.d.ts +2 -0
- package/cli/repl/commands/parse.js +110 -0
- package/cli/repl/commands/quit.d.ts +2 -0
- package/cli/repl/commands/quit.js +15 -0
- package/cli/repl/commands/version.d.ts +16 -0
- package/cli/repl/commands/version.js +28 -0
- package/cli/repl/core.d.ts +36 -0
- package/cli/repl/core.js +174 -0
- package/cli/repl/execute.d.ts +28 -0
- package/cli/repl/execute.js +79 -0
- package/cli/repl/print-version.d.ts +2 -0
- package/cli/repl/print-version.js +10 -0
- package/cli/repl/prompt.d.ts +2 -0
- package/cli/repl/prompt.js +9 -0
- package/cli/repl/server/connection.d.ts +21 -0
- package/cli/repl/server/connection.js +218 -0
- package/cli/repl/server/messages/analysis.d.ts +72 -0
- package/cli/repl/server/messages/analysis.js +21 -0
- package/cli/repl/server/messages/error.d.ts +11 -0
- package/{core/input.js → cli/repl/server/messages/error.js} +1 -1
- package/cli/repl/server/messages/hello.d.ts +20 -0
- package/{core/output.js → cli/repl/server/messages/hello.js} +1 -1
- package/cli/repl/server/messages/messages.d.ts +35 -0
- package/cli/repl/server/messages/messages.js +40 -0
- package/cli/repl/server/messages/repl.d.ts +33 -0
- package/cli/repl/server/messages/repl.js +37 -0
- package/cli/repl/server/messages/slice.d.ts +26 -0
- package/cli/repl/server/messages/slice.js +37 -0
- package/cli/repl/server/net.d.ts +49 -0
- package/cli/repl/server/net.js +63 -0
- package/cli/repl/server/send.d.ts +4 -0
- package/cli/repl/server/send.js +18 -0
- package/cli/repl/server/server.d.ts +20 -0
- package/cli/repl/server/server.js +66 -0
- package/cli/repl/server/validate.d.ts +15 -0
- package/cli/repl/server/validate.js +34 -0
- package/cli/slicer-app.d.ts +11 -0
- package/cli/slicer-app.js +83 -0
- package/cli/statistics-app.d.ts +11 -0
- package/cli/statistics-app.js +99 -0
- package/cli/statistics-helper-app.d.ts +11 -0
- package/cli/statistics-helper-app.js +87 -0
- package/cli/summarizer-app.d.ts +18 -0
- package/cli/summarizer-app.js +66 -0
- package/core/pipeline-executor.d.ts +154 -0
- package/core/pipeline-executor.js +221 -0
- package/core/print/dataflow-printer.d.ts +3 -4
- package/core/print/dataflow-printer.js +5 -5
- package/core/print/normalize-printer.d.ts +1 -1
- package/core/print/normalize-printer.js +3 -3
- package/core/print/parse-printer.js +3 -3
- package/core/print/print.d.ts +13 -4
- package/core/print/print.js +13 -2
- package/core/print/slice-diff-ansi.d.ts +3 -2
- package/core/print/slice-diff-ansi.js +4 -4
- package/core/steps/all/core/00-parse.d.ts +28 -0
- package/core/steps/all/core/00-parse.js +24 -0
- package/core/steps/all/core/10-normalize.d.ts +29 -0
- package/core/steps/all/core/10-normalize.js +26 -0
- package/core/steps/all/core/20-dataflow.d.ts +27 -0
- package/core/steps/all/core/20-dataflow.js +29 -0
- package/core/steps/all/static-slicing/00-slice.d.ts +28 -0
- package/core/steps/all/static-slicing/00-slice.js +21 -0
- package/core/steps/all/static-slicing/10-reconstruct.d.ts +25 -0
- package/core/steps/all/static-slicing/10-reconstruct.js +21 -0
- package/core/steps/pipeline/create-pipeline.d.ts +6 -0
- package/core/steps/pipeline/create-pipeline.js +130 -0
- package/core/steps/pipeline/default-pipelines.d.ts +251 -0
- package/core/steps/pipeline/default-pipelines.js +18 -0
- package/core/steps/pipeline/invalid-pipeline-error.d.ts +6 -0
- package/core/steps/pipeline/invalid-pipeline-error.js +14 -0
- package/core/steps/pipeline/pipeline.d.ts +60 -0
- package/core/steps/pipeline/pipeline.js +28 -0
- package/core/steps/pipeline-step.d.ts +85 -0
- package/core/steps/pipeline-step.js +8 -0
- package/dataflow/environments/append.d.ts +4 -4
- package/dataflow/environments/append.js +4 -4
- package/dataflow/environments/built-in.d.ts +25 -0
- package/dataflow/environments/built-in.js +123 -0
- package/dataflow/environments/clone.d.ts +2 -0
- package/dataflow/environments/clone.js +23 -0
- package/dataflow/environments/{register.d.ts → define.d.ts} +3 -3
- package/dataflow/environments/define.js +51 -0
- package/dataflow/environments/diff.d.ts +6 -0
- package/dataflow/environments/diff.js +85 -0
- package/dataflow/environments/environment.d.ts +10 -43
- package/dataflow/environments/environment.js +32 -138
- package/dataflow/environments/identifier.d.ts +31 -0
- package/dataflow/environments/identifier.js +3 -0
- package/dataflow/environments/overwrite.d.ts +4 -4
- package/dataflow/environments/overwrite.js +9 -22
- package/dataflow/environments/resolve-by-name.d.ts +7 -6
- package/dataflow/environments/resolve-by-name.js +35 -19
- package/dataflow/environments/scoping.js +1 -4
- package/dataflow/extractor.d.ts +6 -6
- package/dataflow/extractor.js +47 -57
- package/dataflow/graph/diff.d.ts +24 -7
- package/dataflow/graph/diff.js +114 -74
- package/dataflow/graph/edge.d.ts +66 -20
- package/dataflow/graph/edge.js +73 -27
- package/dataflow/graph/graph.d.ts +53 -29
- package/dataflow/graph/graph.js +84 -89
- package/dataflow/graph/quads.js +2 -2
- package/dataflow/graph/vertex.d.ts +37 -34
- package/dataflow/info.d.ts +49 -0
- package/dataflow/info.js +29 -0
- package/dataflow/internal/linker.d.ts +11 -10
- package/dataflow/internal/linker.js +64 -90
- package/dataflow/internal/process/functions/call/argument/make-argument.d.ts +6 -0
- package/dataflow/internal/process/functions/call/argument/make-argument.js +31 -0
- package/dataflow/internal/process/functions/call/argument/unpack-argument.d.ts +3 -0
- package/dataflow/internal/process/functions/call/argument/unpack-argument.js +18 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-access.d.ts +9 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-access.js +82 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.d.ts +29 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-assignment.js +167 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.d.ts +11 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-expression-list.js +165 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-for-loop.js +97 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-function-definition.js +165 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-get.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-get.js +36 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-if-then-else.js +100 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-library.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-library.js +32 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.d.ts +9 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-logical-bin-op.js +35 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-pipe.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-pipe.js +35 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-quote.d.ts +9 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-quote.js +29 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-repeat-loop.js +32 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-replacement.d.ts +12 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-replacement.js +45 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-source.d.ts +11 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-source.js +72 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.d.ts +7 -0
- package/dataflow/internal/process/functions/call/built-in/built-in-while-loop.js +61 -0
- package/dataflow/internal/process/functions/call/common.d.ts +35 -0
- package/dataflow/internal/process/functions/call/common.js +70 -0
- package/dataflow/internal/process/functions/call/default-call-handling.d.ts +5 -0
- package/dataflow/internal/process/functions/call/default-call-handling.js +15 -0
- package/dataflow/internal/process/functions/call/known-call-handling.d.ts +26 -0
- package/dataflow/internal/process/functions/call/known-call-handling.js +62 -0
- package/dataflow/internal/process/functions/call/named-call-handling.d.ts +7 -0
- package/dataflow/internal/process/functions/call/named-call-handling.js +53 -0
- package/dataflow/internal/process/functions/call/unnamed-call-handling.d.ts +6 -0
- package/dataflow/internal/process/functions/call/unnamed-call-handling.js +58 -0
- package/dataflow/internal/process/functions/process-argument.d.ts +9 -0
- package/dataflow/internal/process/functions/{argument.js → process-argument.js} +25 -20
- package/dataflow/internal/process/functions/{parameter.d.ts → process-parameter.d.ts} +3 -2
- package/dataflow/internal/process/functions/{parameter.js → process-parameter.js} +10 -13
- package/dataflow/internal/process/process-named-call.d.ts +6 -0
- package/dataflow/internal/process/process-named-call.js +17 -0
- package/dataflow/internal/process/process-symbol.d.ts +5 -0
- package/dataflow/internal/process/process-symbol.js +26 -0
- package/dataflow/internal/process/process-uninteresting-leaf.d.ts +4 -0
- package/dataflow/internal/process/process-uninteresting-leaf.js +9 -0
- package/dataflow/internal/process/process-value.d.ts +4 -0
- package/dataflow/internal/process/process-value.js +22 -0
- package/dataflow/logger.d.ts +1 -0
- package/dataflow/logger.js +6 -0
- package/dataflow/processor.d.ts +18 -13
- package/dataflow/processor.js +1 -1
- package/package.json +48 -85
- package/r-bridge/data/data.d.ts +603 -0
- package/r-bridge/data/data.js +753 -0
- package/r-bridge/data/get.d.ts +19 -0
- package/r-bridge/data/get.js +51 -0
- package/r-bridge/data/print.d.ts +1 -0
- package/r-bridge/data/print.js +58 -0
- package/r-bridge/data/types.d.ts +33 -0
- package/r-bridge/data/types.js +3 -0
- package/r-bridge/init.d.ts +3 -0
- package/r-bridge/init.js +22 -0
- package/r-bridge/lang-4.x/ast/model/collect.d.ts +2 -1
- package/r-bridge/lang-4.x/ast/model/collect.js +2 -2
- package/r-bridge/lang-4.x/ast/model/model.d.ts +26 -5
- package/r-bridge/lang-4.x/ast/model/nodes/r-access.d.ts +4 -3
- package/r-bridge/lang-4.x/ast/model/nodes/r-argument.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.d.ts +0 -17
- package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.d.ts +3 -1
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.d.ts +6 -4
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.js +2 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.d.ts +2 -3
- package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +1 -1
- package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +1 -1
- package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.js +2 -2
- package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.d.ts +0 -11
- package/r-bridge/lang-4.x/ast/model/operators.d.ts +6 -18
- package/r-bridge/lang-4.x/ast/model/operators.js +36 -48
- package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +19 -15
- package/r-bridge/lang-4.x/ast/model/processing/decorate.js +59 -54
- package/r-bridge/lang-4.x/ast/model/processing/node-id.d.ts +8 -0
- package/r-bridge/lang-4.x/ast/model/processing/node-id.js +18 -0
- package/r-bridge/lang-4.x/ast/model/processing/role.d.ts +2 -2
- package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +28 -17
- package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.js +7 -34
- package/r-bridge/lang-4.x/ast/model/processing/visitor.js +5 -2
- package/r-bridge/lang-4.x/ast/model/type.js +13 -6
- package/r-bridge/lang-4.x/ast/parser/json/format.d.ts +4 -1
- package/r-bridge/lang-4.x/ast/parser/json/format.js +9 -2
- package/r-bridge/lang-4.x/ast/parser/json/parser.d.ts +5 -5
- package/r-bridge/lang-4.x/ast/parser/json/parser.js +22 -27
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +10 -7
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +19 -11
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.d.ts → normalize-if-then-else.d.ts} +3 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then-else.js → normalize-if-then-else.js} +10 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.d.ts → normalize-if-then.d.ts} +3 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/{if-then.js → normalize-if-then.js} +9 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/normalize-expression.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.d.ts → normalize-argument.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{argument.js → normalize-argument.js} +13 -17
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.d.ts → normalize-call.d.ts} +6 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{call.js → normalize-call.js} +24 -29
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/normalize-definition.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{definition.js → normalize-definition.js} +14 -19
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.d.ts → normalize-parameter.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/{parameter.js → normalize-parameter.js} +12 -16
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-break.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{break.js → normalize-break.js} +6 -8
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-for.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{for.js → normalize-for.js} +18 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-next.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{next.js → normalize-next.js} +6 -8
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-repeat.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{repeat.js → normalize-repeat.js} +13 -16
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/normalize-while.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/{while.js → normalize-while.js} +10 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.d.ts → normalize-access.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/{access.js → normalize-access.js} +44 -45
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.d.ts → normalize-binary.d.ts} +3 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/{binary.js → normalize-binary.js} +23 -73
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/normalize-unary.js +47 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-comment.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{comment.js → normalize-comment.js} +5 -10
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/normalize-line-directive.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/{line-directive.js → normalize-line-directive.js} +7 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-delimiter.js +15 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-expressions.js +182 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-root.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/normalize-single-node.js +59 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-number.d.ts +16 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{number.js → normalize-number.js} +12 -18
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/normalize-string.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{string.js → normalize-string.js} +7 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.d.ts → normalize-symbol.d.ts} +4 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/{symbol.js → normalize-symbol.js} +12 -15
- package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.d.ts → normalize-meta.d.ts} +5 -3
- package/r-bridge/lang-4.x/ast/parser/xml/{internal/meta.js → normalize-meta.js} +8 -8
- package/r-bridge/lang-4.x/ast/parser/xml/{data.d.ts → normalizer-data.d.ts} +1 -5
- package/r-bridge/lang-4.x/ast/parser/xml/normalizer-data.js +3 -0
- package/r-bridge/lang-4.x/{values.d.ts → convert-values.d.ts} +2 -2
- package/r-bridge/lang-4.x/{values.js → convert-values.js} +5 -5
- package/r-bridge/retriever.d.ts +5 -5
- package/r-bridge/retriever.js +11 -24
- package/r-bridge/shell-executor.d.ts +0 -1
- package/r-bridge/shell-executor.js +7 -12
- package/r-bridge/shell.d.ts +14 -12
- package/r-bridge/shell.js +52 -47
- package/reconstruct/reconstruct.d.ts +4 -2
- package/reconstruct/reconstruct.js +193 -185
- package/slicing/criterion/collect-all.d.ts +4 -3
- package/slicing/criterion/collect-all.js +5 -1
- package/slicing/criterion/filters/all-variables.js +14 -22
- package/slicing/criterion/parse.d.ts +4 -2
- package/slicing/criterion/parse.js +13 -11
- package/slicing/static/fingerprint.d.ts +5 -0
- package/slicing/static/fingerprint.js +17 -0
- package/slicing/static/slice-call.d.ts +10 -0
- package/slicing/static/slice-call.js +86 -0
- package/slicing/static/slicer-types.d.ts +33 -0
- package/slicing/static/slicer-types.js +3 -0
- package/slicing/static/static-slicer.d.ts +6 -24
- package/slicing/static/static-slicer.js +54 -155
- package/slicing/static/visiting-queue.d.ts +23 -0
- package/slicing/static/visiting-queue.js +53 -0
- package/statistics/features/common-syntax-probability.d.ts +29 -0
- package/statistics/features/common-syntax-probability.js +159 -0
- package/statistics/features/feature.d.ts +182 -0
- package/statistics/features/feature.js +39 -0
- package/statistics/features/post-processing.d.ts +12 -0
- package/statistics/features/post-processing.js +21 -0
- package/statistics/features/supported/assignments/assignments.d.ts +12 -0
- package/statistics/features/supported/assignments/assignments.js +55 -0
- package/statistics/features/supported/assignments/post-process.d.ts +3 -0
- package/statistics/features/supported/assignments/post-process.js +124 -0
- package/statistics/features/supported/comments/comments.d.ts +18 -0
- package/statistics/features/supported/comments/comments.js +133 -0
- package/statistics/features/supported/comments/post-process.d.ts +3 -0
- package/statistics/features/supported/comments/post-process.js +49 -0
- package/statistics/features/supported/control-flow/control-flow.d.ts +17 -0
- package/statistics/features/supported/control-flow/control-flow.js +68 -0
- package/statistics/features/supported/control-flow/post-process.d.ts +3 -0
- package/statistics/features/supported/control-flow/post-process.js +64 -0
- package/statistics/features/supported/data-access/data-access.d.ts +15 -0
- package/statistics/features/supported/data-access/data-access.js +120 -0
- package/statistics/features/supported/data-access/post-process.d.ts +3 -0
- package/statistics/features/supported/data-access/post-process.js +106 -0
- package/statistics/features/supported/defined-functions/defined-functions.d.ts +34 -0
- package/statistics/features/supported/defined-functions/defined-functions.js +142 -0
- package/statistics/features/supported/defined-functions/post-process.d.ts +6 -0
- package/statistics/features/supported/defined-functions/post-process.js +169 -0
- package/statistics/features/supported/expression-list/expression-list.d.ts +9 -0
- package/statistics/features/supported/expression-list/expression-list.js +36 -0
- package/statistics/features/supported/expression-list/post-process.d.ts +3 -0
- package/statistics/features/supported/expression-list/post-process.js +43 -0
- package/statistics/features/supported/loops/loops.d.ts +20 -0
- package/statistics/features/supported/loops/loops.js +79 -0
- package/statistics/features/supported/loops/post-process.d.ts +3 -0
- package/statistics/features/supported/loops/post-process.js +71 -0
- package/statistics/features/supported/used-functions/post-process.d.ts +6 -0
- package/statistics/features/supported/used-functions/post-process.js +178 -0
- package/statistics/features/supported/used-functions/used-functions.d.ts +24 -0
- package/statistics/features/supported/used-functions/used-functions.js +97 -0
- package/statistics/features/supported/used-packages/post-process.d.ts +3 -0
- package/statistics/features/supported/used-packages/post-process.js +120 -0
- package/statistics/features/supported/used-packages/used-packages.d.ts +16 -0
- package/statistics/features/supported/used-packages/used-packages.js +130 -0
- package/statistics/features/supported/values/post-process.d.ts +3 -0
- package/statistics/features/supported/values/post-process.js +71 -0
- package/statistics/features/supported/values/values.d.ts +14 -0
- package/statistics/features/supported/values/values.js +101 -0
- package/statistics/features/supported/variables/post-process.d.ts +9 -0
- package/statistics/features/supported/variables/post-process.js +121 -0
- package/statistics/features/supported/variables/variables.d.ts +15 -0
- package/statistics/features/supported/variables/variables.js +60 -0
- package/statistics/meta-statistics.d.ts +33 -0
- package/statistics/meta-statistics.js +17 -0
- package/statistics/output/file-provider.d.ts +37 -0
- package/statistics/output/file-provider.js +97 -0
- package/statistics/output/print-stats.d.ts +17 -0
- package/statistics/output/print-stats.js +69 -0
- package/statistics/output/statistics-file.d.ts +37 -0
- package/statistics/output/statistics-file.js +69 -0
- package/statistics/statistics.d.ts +28 -0
- package/statistics/statistics.js +108 -0
- package/statistics/summarizer/auto-detect.d.ts +2 -0
- package/statistics/summarizer/auto-detect.js +32 -0
- package/statistics/summarizer/first-phase/process.d.ts +6 -0
- package/statistics/summarizer/first-phase/process.js +81 -0
- package/statistics/summarizer/post-process/clusterer.d.ts +26 -0
- package/statistics/summarizer/post-process/clusterer.js +43 -0
- package/statistics/summarizer/post-process/file-based-count.d.ts +17 -0
- package/statistics/summarizer/post-process/file-based-count.js +49 -0
- package/statistics/summarizer/post-process/histogram.d.ts +59 -0
- package/statistics/summarizer/post-process/histogram.js +128 -0
- package/statistics/summarizer/post-process/post-process-output.d.ts +16 -0
- package/statistics/summarizer/post-process/post-process-output.js +105 -0
- package/statistics/summarizer/second-phase/process.d.ts +11 -0
- package/statistics/summarizer/second-phase/process.js +116 -0
- package/statistics/summarizer/summarizer.d.ts +35 -0
- package/statistics/summarizer/summarizer.js +135 -0
- package/util/ansi.d.ts +2 -2
- package/util/ansi.js +2 -2
- package/util/arrays.d.ts +11 -1
- package/util/arrays.js +34 -1
- package/util/assert.d.ts +1 -0
- package/util/assert.js +5 -1
- package/util/cfg/cfg.d.ts +3 -2
- package/util/cfg/cfg.js +17 -28
- package/util/cfg/visitor.d.ts +1 -1
- package/util/defaultmap.d.ts +1 -1
- package/util/defaultmap.js +1 -1
- package/util/diff.d.ts +4 -4
- package/util/files.d.ts +2 -2
- package/util/files.js +1 -1
- package/util/log.d.ts +1 -0
- package/util/log.js +7 -1
- package/util/logic.d.ts +1 -0
- package/util/logic.js +3 -0
- package/util/mermaid/ast.d.ts +1 -1
- package/util/mermaid/ast.js +2 -2
- package/util/mermaid/cfg.d.ts +1 -1
- package/util/mermaid/dfg.d.ts +34 -8
- package/util/mermaid/dfg.js +99 -70
- package/util/mermaid/mermaid.d.ts +1 -1
- package/util/mermaid/mermaid.js +6 -7
- package/util/objects.js +4 -0
- package/util/quads.d.ts +3 -3
- package/util/quads.js +0 -1
- package/util/range.d.ts +27 -14
- package/util/range.js +31 -27
- package/util/version.js +1 -1
- package/core/index.d.ts +0 -4
- package/core/index.js +0 -23
- package/core/input.d.ts +0 -42
- package/core/output.d.ts +0 -15
- package/core/slicer.d.ts +0 -124
- package/core/slicer.js +0 -227
- package/core/steps.d.ts +0 -508
- package/core/steps.js +0 -100
- package/dataflow/environments/index.d.ts +0 -7
- package/dataflow/environments/index.js +0 -23
- package/dataflow/environments/register.js +0 -40
- package/dataflow/environments/scopes.d.ts +0 -6
- package/dataflow/environments/scopes.js +0 -6
- package/dataflow/graph/index.d.ts +0 -4
- package/dataflow/graph/index.js +0 -21
- package/dataflow/index.d.ts +0 -5
- package/dataflow/index.js +0 -24
- package/dataflow/internal/info.d.ts +0 -21
- package/dataflow/internal/info.js +0 -16
- package/dataflow/internal/process/access.d.ts +0 -4
- package/dataflow/internal/process/access.js +0 -53
- package/dataflow/internal/process/expression-list.d.ts +0 -8
- package/dataflow/internal/process/expression-list.js +0 -144
- package/dataflow/internal/process/functions/argument.d.ts +0 -8
- package/dataflow/internal/process/functions/exit-points.d.ts +0 -2
- package/dataflow/internal/process/functions/exit-points.js +0 -121
- package/dataflow/internal/process/functions/function-call.d.ts +0 -5
- package/dataflow/internal/process/functions/function-call.js +0 -105
- package/dataflow/internal/process/functions/function-definition.d.ts +0 -4
- package/dataflow/internal/process/functions/function-definition.js +0 -176
- package/dataflow/internal/process/functions/source.d.ts +0 -8
- package/dataflow/internal/process/functions/source.js +0 -81
- package/dataflow/internal/process/if-then-else.d.ts +0 -4
- package/dataflow/internal/process/if-then-else.js +0 -56
- package/dataflow/internal/process/loops/for-loop.d.ts +0 -4
- package/dataflow/internal/process/loops/for-loop.js +0 -54
- package/dataflow/internal/process/loops/repeat-loop.d.ts +0 -4
- package/dataflow/internal/process/loops/repeat-loop.js +0 -21
- package/dataflow/internal/process/loops/while-loop.d.ts +0 -4
- package/dataflow/internal/process/loops/while-loop.js +0 -31
- package/dataflow/internal/process/operators/assignment.d.ts +0 -4
- package/dataflow/internal/process/operators/assignment.js +0 -129
- package/dataflow/internal/process/operators/non-assignment-binary-op.d.ts +0 -4
- package/dataflow/internal/process/operators/non-assignment-binary-op.js +0 -25
- package/dataflow/internal/process/operators/pipe.d.ts +0 -4
- package/dataflow/internal/process/operators/pipe.js +0 -46
- package/dataflow/internal/process/operators/unary-op.d.ts +0 -4
- package/dataflow/internal/process/operators/unary-op.js +0 -10
- package/dataflow/internal/process/symbol.d.ts +0 -4
- package/dataflow/internal/process/symbol.js +0 -21
- package/dataflow/internal/process/uninteresting-leaf.d.ts +0 -3
- package/dataflow/internal/process/uninteresting-leaf.js +0 -9
- package/index.d.ts +0 -4
- package/index.js +0 -21
- package/r-bridge/index.d.ts +0 -11
- package/r-bridge/index.js +0 -28
- package/r-bridge/lang-4.x/ast/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/index.js +0 -22
- package/r-bridge/lang-4.x/ast/model/index.d.ts +0 -6
- package/r-bridge/lang-4.x/ast/model/index.js +0 -23
- package/r-bridge/lang-4.x/ast/model/nodes/index.d.ts +0 -21
- package/r-bridge/lang-4.x/ast/model/nodes/index.js +0 -38
- package/r-bridge/lang-4.x/ast/model/nodes/info/index.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/model/nodes/info/index.js +0 -27
- package/r-bridge/lang-4.x/ast/model/processing/index.d.ts +0 -5
- package/r-bridge/lang-4.x/ast/model/processing/index.js +0 -22
- package/r-bridge/lang-4.x/ast/parser/xml/hooks.d.ts +0 -292
- package/r-bridge/lang-4.x/ast/parser/xml/hooks.js +0 -136
- package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.js +0 -19
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.d.ts +0 -10
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +0 -65
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.js +0 -18
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.d.ts +0 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.d.ts +0 -2
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +0 -9
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +0 -26
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.d.ts +0 -5
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.js +0 -22
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.d.ts +0 -6
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.js +0 -24
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +0 -59
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.d.ts +0 -11
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.d.ts +0 -1
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.js +0 -18
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.d.ts +0 -12
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.d.ts +0 -10
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +0 -159
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.d.ts +0 -4
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +0 -33
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +0 -64
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.d.ts +0 -3
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.js +0 -20
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.d.ts +0 -13
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.d.ts +0 -11
- package/r-bridge/lang-4.x/index.d.ts +0 -2
- package/r-bridge/lang-4.x/index.js +0 -19
- package/slicing/criterion/filters/index.d.ts +0 -1
- package/slicing/criterion/filters/index.js +0 -18
- package/slicing/criterion/index.d.ts +0 -3
- package/slicing/criterion/index.js +0 -20
- package/slicing/index.d.ts +0 -3
- package/slicing/index.js +0 -20
- package/slicing/static/index.d.ts +0 -1
- package/slicing/static/index.js +0 -18
- package/util/mermaid/index.d.ts +0 -3
- package/util/mermaid/index.js +0 -20
- /package/{r-bridge/lang-4.x/ast/parser/xml → benchmark/summarizer}/data.js +0 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.quitCommand = void 0;
|
|
4
|
+
const log_1 = require("../../../util/log");
|
|
5
|
+
exports.quitCommand = {
|
|
6
|
+
description: 'End the repl',
|
|
7
|
+
aliases: ['q', 'exit'],
|
|
8
|
+
usageExample: ':quit',
|
|
9
|
+
script: false,
|
|
10
|
+
fn: () => {
|
|
11
|
+
log_1.log.info('bye');
|
|
12
|
+
process.exit(0);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=quit.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ReplCommand, ReplOutput } from './main';
|
|
2
|
+
import type { RShell } from '../../../r-bridge/shell';
|
|
3
|
+
type Version = `${number}.${number}.${number}`;
|
|
4
|
+
/**
|
|
5
|
+
* Describes the version of flowR and the used R interpreter.
|
|
6
|
+
*/
|
|
7
|
+
export interface VersionInformation {
|
|
8
|
+
/** The version of flowR */
|
|
9
|
+
flowr: Version;
|
|
10
|
+
/** The version of R identified by the underlying {@link RShell} */
|
|
11
|
+
r: Version | 'unknown';
|
|
12
|
+
}
|
|
13
|
+
export declare function retrieveVersionInformation(shell: RShell): Promise<VersionInformation>;
|
|
14
|
+
export declare function printVersionInformation(output: ReplOutput, shell: RShell): Promise<void>;
|
|
15
|
+
export declare const versionCommand: ReplCommand;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.versionCommand = exports.printVersionInformation = exports.retrieveVersionInformation = void 0;
|
|
4
|
+
const version_1 = require("../../../util/version");
|
|
5
|
+
const assert_1 = require("../../../util/assert");
|
|
6
|
+
const versionRegex = /^\d+\.\d+\.\d+/m;
|
|
7
|
+
async function retrieveVersionInformation(shell) {
|
|
8
|
+
const flowr = (0, version_1.flowrVersion)().toString();
|
|
9
|
+
const r = (await shell.usedRVersion())?.format() ?? 'unknown';
|
|
10
|
+
(0, assert_1.guard)(versionRegex.test(flowr), `flowR version ${flowr} does not match the expected format!`);
|
|
11
|
+
(0, assert_1.guard)(r === 'unknown' || versionRegex.test(r), `R version ${r} does not match the expected format!`);
|
|
12
|
+
return { flowr: flowr, r: r };
|
|
13
|
+
}
|
|
14
|
+
exports.retrieveVersionInformation = retrieveVersionInformation;
|
|
15
|
+
async function printVersionInformation(output, shell) {
|
|
16
|
+
const { flowr, r } = await retrieveVersionInformation(shell);
|
|
17
|
+
output.stdout(`flowR: ${flowr}`);
|
|
18
|
+
output.stdout(`R: ${r}`);
|
|
19
|
+
}
|
|
20
|
+
exports.printVersionInformation = printVersionInformation;
|
|
21
|
+
exports.versionCommand = {
|
|
22
|
+
description: 'Prints the version of flowR as well as the current version of R',
|
|
23
|
+
aliases: [],
|
|
24
|
+
usageExample: ':version',
|
|
25
|
+
script: false,
|
|
26
|
+
fn: (output, shell) => printVersionInformation(output, shell)
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import * as readline from 'readline';
|
|
3
|
+
import type { ReplOutput } from './commands/main';
|
|
4
|
+
import { RShell } from '../../r-bridge/shell';
|
|
5
|
+
/**
|
|
6
|
+
* Used by the repl to provide automatic completions for a given (partial) input line
|
|
7
|
+
*/
|
|
8
|
+
export declare function replCompleter(line: string): [string[], string];
|
|
9
|
+
export declare const DEFAULT_REPL_READLINE_CONFIGURATION: readline.ReadLineOptions;
|
|
10
|
+
/**
|
|
11
|
+
* This function interprets the given `expr` as a REPL command (see {@link repl} for more on the semantics).
|
|
12
|
+
*
|
|
13
|
+
* @param output - Defines two methods that every function in the repl uses to output its data.
|
|
14
|
+
* @param expr - The expression to process.
|
|
15
|
+
* @param shell - The {@link RShell} to use (see {@link repl}).
|
|
16
|
+
*/
|
|
17
|
+
export declare function replProcessAnswer(output: ReplOutput, expr: string, shell: RShell): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Provides a never-ending repl (read-evaluate-print loop) processor that can be used to interact with a {@link RShell} as well as all flowR scripts.
|
|
20
|
+
*
|
|
21
|
+
* The repl allows for two kinds of inputs:
|
|
22
|
+
* - Starting with a colon `:`, indicating a command (probe `:help`, and refer to {@link commands}) </li>
|
|
23
|
+
* - Starting with anything else, indicating default R code to be directly executed. If you kill the underlying shell, that is on you! </li>
|
|
24
|
+
*
|
|
25
|
+
* @param shell - The shell to use, if you do not pass one it will automatically create a new one with the `revive` option set to 'always'
|
|
26
|
+
* @param rl - A potentially customized readline interface to be used for the repl to *read* from the user, we write the output with the {@link ReplOutput | `output` } interface.
|
|
27
|
+
* If you want to provide a custom one but use the same `completer`, refer to {@link replCompleter}.
|
|
28
|
+
* For the default arguments, see {@link DEFAULT_REPL_READLINE_CONFIGURATION}.
|
|
29
|
+
* @param output - Defines two methods that every function in the repl uses to output its data.
|
|
30
|
+
* @param historyFile - The file to use for persisting the repl's history. Passing undefined causes history not to be saved.
|
|
31
|
+
*
|
|
32
|
+
* For the execution, this function makes use of {@link replProcessAnswer}
|
|
33
|
+
*
|
|
34
|
+
*/
|
|
35
|
+
export declare function repl(shell?: RShell, rl?: readline.Interface, output?: ReplOutput, historyFile?: string | undefined): Promise<void>;
|
|
36
|
+
export declare function loadReplHistory(historyFile: string): string[] | undefined;
|
package/cli/repl/core.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.loadReplHistory = exports.repl = exports.replProcessAnswer = exports.DEFAULT_REPL_READLINE_CONFIGURATION = exports.replCompleter = void 0;
|
|
30
|
+
/**
|
|
31
|
+
* Basically a helper file to allow the main 'flowr' script (located in the source root) to provide its repl
|
|
32
|
+
*
|
|
33
|
+
* @module
|
|
34
|
+
*/
|
|
35
|
+
const prompt_1 = require("./prompt");
|
|
36
|
+
const readline = __importStar(require("readline"));
|
|
37
|
+
const execute_1 = require("./commands/execute");
|
|
38
|
+
const os_1 = __importDefault(require("os"));
|
|
39
|
+
const path_1 = __importDefault(require("path"));
|
|
40
|
+
const fs_1 = __importDefault(require("fs"));
|
|
41
|
+
const args_1 = require("../../util/args");
|
|
42
|
+
const ansi_1 = require("../../util/ansi");
|
|
43
|
+
const commands_1 = require("./commands/commands");
|
|
44
|
+
const scripts_info_1 = require("../common/scripts-info");
|
|
45
|
+
const retriever_1 = require("../../r-bridge/retriever");
|
|
46
|
+
const main_1 = require("./commands/main");
|
|
47
|
+
const shell_1 = require("../../r-bridge/shell");
|
|
48
|
+
let _replCompleterKeywords = undefined;
|
|
49
|
+
function replCompleterKeywords() {
|
|
50
|
+
if (_replCompleterKeywords === undefined) {
|
|
51
|
+
_replCompleterKeywords = Array.from((0, commands_1.getCommandNames)(), s => `:${s}`);
|
|
52
|
+
}
|
|
53
|
+
return _replCompleterKeywords;
|
|
54
|
+
}
|
|
55
|
+
const defaultHistoryFile = path_1.default.join(os_1.default.tmpdir(), '.flowrhistory');
|
|
56
|
+
/**
|
|
57
|
+
* Used by the repl to provide automatic completions for a given (partial) input line
|
|
58
|
+
*/
|
|
59
|
+
function replCompleter(line) {
|
|
60
|
+
const splitLine = (0, args_1.splitAtEscapeSensitive)(line);
|
|
61
|
+
// did we just type a space (and are starting a new arg right now)?
|
|
62
|
+
const startingNewArg = line.endsWith(' ');
|
|
63
|
+
// if we typed a command fully already, autocomplete the arguments
|
|
64
|
+
if (splitLine.length > 1 || startingNewArg) {
|
|
65
|
+
const commandNameColon = replCompleterKeywords().find(k => splitLine[0] === k);
|
|
66
|
+
if (commandNameColon) {
|
|
67
|
+
const completions = [];
|
|
68
|
+
const commandName = commandNameColon.slice(1);
|
|
69
|
+
if ((0, commands_1.getCommand)(commandName)?.script === true) {
|
|
70
|
+
// autocomplete script arguments
|
|
71
|
+
const options = scripts_info_1.scripts[commandName].options;
|
|
72
|
+
completions.push(...(0, scripts_info_1.getValidOptionsForCompletion)(options, splitLine).map(o => `${o} `));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
// autocomplete command arguments (specifically, autocomplete the file:// protocol)
|
|
76
|
+
completions.push(retriever_1.fileProtocol);
|
|
77
|
+
}
|
|
78
|
+
// add an empty option so that it doesn't autocomplete the only defined option immediately
|
|
79
|
+
completions.push(' ');
|
|
80
|
+
const currentArg = startingNewArg ? '' : splitLine[splitLine.length - 1];
|
|
81
|
+
return [completions.filter(a => a.startsWith(currentArg)), currentArg];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// if no command is already typed, just return all commands that match
|
|
85
|
+
return [replCompleterKeywords().filter(k => k.startsWith(line)).map(k => `${k} `), line];
|
|
86
|
+
}
|
|
87
|
+
exports.replCompleter = replCompleter;
|
|
88
|
+
exports.DEFAULT_REPL_READLINE_CONFIGURATION = {
|
|
89
|
+
input: process.stdin,
|
|
90
|
+
output: process.stdout,
|
|
91
|
+
tabSize: 4,
|
|
92
|
+
terminal: true,
|
|
93
|
+
history: loadReplHistory(defaultHistoryFile),
|
|
94
|
+
removeHistoryDuplicates: true,
|
|
95
|
+
completer: replCompleter
|
|
96
|
+
};
|
|
97
|
+
async function replProcessStatement(output, statement, shell) {
|
|
98
|
+
if (statement.startsWith(':')) {
|
|
99
|
+
const command = statement.slice(1).split(' ')[0].toLowerCase();
|
|
100
|
+
const processor = (0, commands_1.getCommand)(command);
|
|
101
|
+
if (processor) {
|
|
102
|
+
try {
|
|
103
|
+
await processor.fn(output, shell, statement.slice(command.length + 2).trim());
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
console.log(`${(0, ansi_1.bold)(`Failed to execute command ${command}`)}: ${e?.message}. Using the ${(0, ansi_1.bold)('--verbose')} flag on startup may provide additional information.`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
console.log(`the command '${command}' is unknown, try ${(0, ansi_1.bold)(':help')} for more information`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
await (0, execute_1.executeRShellCommand)(output, shell, statement);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* This function interprets the given `expr` as a REPL command (see {@link repl} for more on the semantics).
|
|
119
|
+
*
|
|
120
|
+
* @param output - Defines two methods that every function in the repl uses to output its data.
|
|
121
|
+
* @param expr - The expression to process.
|
|
122
|
+
* @param shell - The {@link RShell} to use (see {@link repl}).
|
|
123
|
+
*/
|
|
124
|
+
async function replProcessAnswer(output, expr, shell) {
|
|
125
|
+
const statements = (0, args_1.splitAtEscapeSensitive)(expr, false, ';');
|
|
126
|
+
for (const statement of statements) {
|
|
127
|
+
await replProcessStatement(output, statement, shell);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.replProcessAnswer = replProcessAnswer;
|
|
131
|
+
/**
|
|
132
|
+
* Provides a never-ending repl (read-evaluate-print loop) processor that can be used to interact with a {@link RShell} as well as all flowR scripts.
|
|
133
|
+
*
|
|
134
|
+
* The repl allows for two kinds of inputs:
|
|
135
|
+
* - Starting with a colon `:`, indicating a command (probe `:help`, and refer to {@link commands}) </li>
|
|
136
|
+
* - Starting with anything else, indicating default R code to be directly executed. If you kill the underlying shell, that is on you! </li>
|
|
137
|
+
*
|
|
138
|
+
* @param shell - The shell to use, if you do not pass one it will automatically create a new one with the `revive` option set to 'always'
|
|
139
|
+
* @param rl - A potentially customized readline interface to be used for the repl to *read* from the user, we write the output with the {@link ReplOutput | `output` } interface.
|
|
140
|
+
* If you want to provide a custom one but use the same `completer`, refer to {@link replCompleter}.
|
|
141
|
+
* For the default arguments, see {@link DEFAULT_REPL_READLINE_CONFIGURATION}.
|
|
142
|
+
* @param output - Defines two methods that every function in the repl uses to output its data.
|
|
143
|
+
* @param historyFile - The file to use for persisting the repl's history. Passing undefined causes history not to be saved.
|
|
144
|
+
*
|
|
145
|
+
* For the execution, this function makes use of {@link replProcessAnswer}
|
|
146
|
+
*
|
|
147
|
+
*/
|
|
148
|
+
async function repl(shell = new shell_1.RShell({ revive: 2 /* RShellReviveOptions.Always */ }), rl = readline.createInterface(exports.DEFAULT_REPL_READLINE_CONFIGURATION), output = main_1.standardReplOutput, historyFile = defaultHistoryFile) {
|
|
149
|
+
if (historyFile) {
|
|
150
|
+
rl.on('history', h => fs_1.default.writeFileSync(historyFile, h.join('\n'), { encoding: 'utf-8' }));
|
|
151
|
+
}
|
|
152
|
+
// the incredible repl :D, we kill it with ':quit'
|
|
153
|
+
// eslint-disable-next-line no-constant-condition,@typescript-eslint/no-unnecessary-condition
|
|
154
|
+
while (true) {
|
|
155
|
+
await new Promise((resolve, reject) => {
|
|
156
|
+
rl.question((0, prompt_1.prompt)(), answer => {
|
|
157
|
+
rl.pause();
|
|
158
|
+
replProcessAnswer(output, answer, shell).then(() => {
|
|
159
|
+
rl.resume();
|
|
160
|
+
resolve();
|
|
161
|
+
}).catch(reject);
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
exports.repl = repl;
|
|
167
|
+
function loadReplHistory(historyFile) {
|
|
168
|
+
if (!fs_1.default.existsSync(historyFile)) {
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
return fs_1.default.readFileSync(historyFile, { encoding: 'utf-8' }).split('\n');
|
|
172
|
+
}
|
|
173
|
+
exports.loadReplHistory = loadReplHistory;
|
|
174
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { Readable, Writable } from 'stream';
|
|
3
|
+
type Stdio = [stdin: Writable | null, stdout: Readable | null, stderr: Readable | null, extra: Writable | Readable | null | undefined, extra: Writable | Readable | null | undefined];
|
|
4
|
+
export type StdioProcessor = (stdio: Stdio) => void;
|
|
5
|
+
/**
|
|
6
|
+
* Simply captures the output of the script executed by {@link waitOnScript}.
|
|
7
|
+
*
|
|
8
|
+
* @param stdio - The standard io tuple provided by {@link waitOnScript}
|
|
9
|
+
* @param onStdOutLine - The callback is executed each time we receive a new line from the standard output channel.
|
|
10
|
+
* @param onStdErrLine - The callback is executed each time we receive a new line from the standard error channel.
|
|
11
|
+
*/
|
|
12
|
+
export declare function stdioCaptureProcessor(stdio: Stdio, onStdOutLine: (msg: string) => void, onStdErrLine: (msg: string) => void): void;
|
|
13
|
+
/**
|
|
14
|
+
* Run the given module with the presented arguments, and wait for it to exit.
|
|
15
|
+
*
|
|
16
|
+
* @param module - The (flowR) module that you want to use for the fork.
|
|
17
|
+
* It is probably best to use {@link __dirname} so you can specify the module relative to your
|
|
18
|
+
* current one.
|
|
19
|
+
* @param args - The arguments you want to start your process with.
|
|
20
|
+
* @param io - If you omit this argument, the in-, out- and error-channels of the script execution
|
|
21
|
+
* will be automatically forwarded to the respective in-, out- and error-channels of your process.
|
|
22
|
+
* However, by defining `io` you essentially gain full control on what should happen
|
|
23
|
+
* with these streams. For a simple capturing processor, for example if you want to collect
|
|
24
|
+
* the output of the script, see {@link stdioCaptureProcessor}.
|
|
25
|
+
* @param exitOnError - If set to `true`, the process will exit with the exit code of the script.
|
|
26
|
+
*/
|
|
27
|
+
export declare function waitOnScript(module: string, args: string[], io?: StdioProcessor, exitOnError?: boolean): Promise<void>;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,79 @@
|
|
|
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.waitOnScript = exports.stdioCaptureProcessor = void 0;
|
|
7
|
+
const child_process_1 = __importDefault(require("child_process"));
|
|
8
|
+
const readline_1 = __importDefault(require("readline"));
|
|
9
|
+
const assert_1 = require("../../util/assert");
|
|
10
|
+
const log_1 = require("../../util/log");
|
|
11
|
+
/**
|
|
12
|
+
* Simply captures the output of the script executed by {@link waitOnScript}.
|
|
13
|
+
*
|
|
14
|
+
* @param stdio - The standard io tuple provided by {@link waitOnScript}
|
|
15
|
+
* @param onStdOutLine - The callback is executed each time we receive a new line from the standard output channel.
|
|
16
|
+
* @param onStdErrLine - The callback is executed each time we receive a new line from the standard error channel.
|
|
17
|
+
*/
|
|
18
|
+
function stdioCaptureProcessor(stdio, onStdOutLine, onStdErrLine) {
|
|
19
|
+
(0, assert_1.guard)(stdio[1] !== null, 'no stdout given in stdio!');
|
|
20
|
+
const outRl = readline_1.default.createInterface({
|
|
21
|
+
input: stdio[1],
|
|
22
|
+
terminal: false
|
|
23
|
+
});
|
|
24
|
+
(0, assert_1.guard)(stdio[2] !== null, 'no stderr given in stdio!');
|
|
25
|
+
const errRl = readline_1.default.createInterface({
|
|
26
|
+
input: stdio[2],
|
|
27
|
+
terminal: false
|
|
28
|
+
});
|
|
29
|
+
outRl.on('line', onStdOutLine);
|
|
30
|
+
errRl.on('line', onStdErrLine);
|
|
31
|
+
}
|
|
32
|
+
exports.stdioCaptureProcessor = stdioCaptureProcessor;
|
|
33
|
+
/**
|
|
34
|
+
* Run the given module with the presented arguments, and wait for it to exit.
|
|
35
|
+
*
|
|
36
|
+
* @param module - The (flowR) module that you want to use for the fork.
|
|
37
|
+
* It is probably best to use {@link __dirname} so you can specify the module relative to your
|
|
38
|
+
* current one.
|
|
39
|
+
* @param args - The arguments you want to start your process with.
|
|
40
|
+
* @param io - If you omit this argument, the in-, out- and error-channels of the script execution
|
|
41
|
+
* will be automatically forwarded to the respective in-, out- and error-channels of your process.
|
|
42
|
+
* However, by defining `io` you essentially gain full control on what should happen
|
|
43
|
+
* with these streams. For a simple capturing processor, for example if you want to collect
|
|
44
|
+
* the output of the script, see {@link stdioCaptureProcessor}.
|
|
45
|
+
* @param exitOnError - If set to `true`, the process will exit with the exit code of the script.
|
|
46
|
+
*/
|
|
47
|
+
async function waitOnScript(module, args, io, exitOnError = false) {
|
|
48
|
+
log_1.log.info(`starting script ${module} with args ${JSON.stringify(args)}`);
|
|
49
|
+
const child = child_process_1.default.fork(module, args, {
|
|
50
|
+
silent: io !== undefined
|
|
51
|
+
});
|
|
52
|
+
if (io !== undefined) {
|
|
53
|
+
io(child.stdio);
|
|
54
|
+
}
|
|
55
|
+
child.on('exit', (code, signal) => {
|
|
56
|
+
if (code) {
|
|
57
|
+
console.error(`Script ${module} exited with code ${String(code)} and signal ${JSON.stringify(signal)}`);
|
|
58
|
+
if (exitOnError) {
|
|
59
|
+
process.exit(code);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
child.on('error', err => {
|
|
64
|
+
console.error(`Script ${module} signaled error ${JSON.stringify(err)}`);
|
|
65
|
+
if (exitOnError) {
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
await new Promise((resolve, reject) => child.on('exit', code => {
|
|
70
|
+
if (exitOnError && code) {
|
|
71
|
+
reject(new Error(`Script ${module} exited with code ${String(code)}`));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
resolve();
|
|
75
|
+
}
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
exports.waitOnScript = waitOnScript;
|
|
79
|
+
//# sourceMappingURL=execute.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.printVersionRepl = void 0;
|
|
4
|
+
const version_1 = require("./commands/version");
|
|
5
|
+
async function printVersionRepl(shell) {
|
|
6
|
+
const version = await (0, version_1.retrieveVersionInformation)(shell);
|
|
7
|
+
console.log(`flowR repl using flowR ${version.flowr}, R ${version.r}`);
|
|
8
|
+
}
|
|
9
|
+
exports.printVersionRepl = printVersionRepl;
|
|
10
|
+
//# sourceMappingURL=print-version.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.prompt = exports.rawPrompt = void 0;
|
|
4
|
+
const ansi_1 = require("../../util/ansi");
|
|
5
|
+
exports.rawPrompt = 'R>';
|
|
6
|
+
// is a function as the 'formatter' is configured only after the cli options have been read
|
|
7
|
+
const prompt = () => `${ansi_1.formatter.format(exports.rawPrompt, { color: 6 /* Colors.Cyan */, effect: ansi_1.ColorEffect.Foreground })} `;
|
|
8
|
+
exports.prompt = prompt;
|
|
9
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Socket } from './net';
|
|
2
|
+
import type { RShell } from '../../../r-bridge/shell';
|
|
3
|
+
/**
|
|
4
|
+
* Each connection handles a single client, answering to its requests.
|
|
5
|
+
* There is no need to construct this class manually, {@link FlowRServer} will do it for you.
|
|
6
|
+
*/
|
|
7
|
+
export declare class FlowRServerConnection {
|
|
8
|
+
private readonly socket;
|
|
9
|
+
private readonly shell;
|
|
10
|
+
private readonly name;
|
|
11
|
+
private readonly logger;
|
|
12
|
+
private readonly fileMap;
|
|
13
|
+
constructor(socket: Socket, name: string, shell: RShell);
|
|
14
|
+
private currentMessageBuffer;
|
|
15
|
+
private handleData;
|
|
16
|
+
private handleFileAnalysisRequest;
|
|
17
|
+
private sendFileAnalysisResponse;
|
|
18
|
+
private createPipelineExecutorForRequest;
|
|
19
|
+
private handleSliceRequest;
|
|
20
|
+
private handleRepl;
|
|
21
|
+
}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FlowRServerConnection = void 0;
|
|
4
|
+
const send_1 = require("./send");
|
|
5
|
+
const validate_1 = require("./validate");
|
|
6
|
+
const analysis_1 = require("./messages/analysis");
|
|
7
|
+
const slice_1 = require("./messages/slice");
|
|
8
|
+
const server_1 = require("./server");
|
|
9
|
+
const repl_1 = require("./messages/repl");
|
|
10
|
+
const core_1 = require("../core");
|
|
11
|
+
const pipeline_executor_1 = require("../../../core/pipeline-executor");
|
|
12
|
+
const cfg_1 = require("../../../util/cfg/cfg");
|
|
13
|
+
const quads_1 = require("../../../util/quads");
|
|
14
|
+
const print_1 = require("../../../core/print/print");
|
|
15
|
+
const _00_parse_1 = require("../../../core/steps/all/core/00-parse");
|
|
16
|
+
const _10_normalize_1 = require("../../../core/steps/all/core/10-normalize");
|
|
17
|
+
const _20_dataflow_1 = require("../../../core/steps/all/core/20-dataflow");
|
|
18
|
+
const ansi_1 = require("../../../util/ansi");
|
|
19
|
+
const default_pipelines_1 = require("../../../core/steps/pipeline/default-pipelines");
|
|
20
|
+
/**
|
|
21
|
+
* Each connection handles a single client, answering to its requests.
|
|
22
|
+
* There is no need to construct this class manually, {@link FlowRServer} will do it for you.
|
|
23
|
+
*/
|
|
24
|
+
class FlowRServerConnection {
|
|
25
|
+
socket;
|
|
26
|
+
shell;
|
|
27
|
+
name;
|
|
28
|
+
logger;
|
|
29
|
+
// maps token to information
|
|
30
|
+
fileMap = new Map();
|
|
31
|
+
// we do not have to ensure synchronized shell-access as we are always running synchronized
|
|
32
|
+
constructor(socket, name, shell) {
|
|
33
|
+
this.socket = socket;
|
|
34
|
+
this.shell = shell;
|
|
35
|
+
this.name = name;
|
|
36
|
+
this.logger = server_1.serverLog.getSubLogger({ name });
|
|
37
|
+
this.socket.on('data', data => this.handleData(String(data)));
|
|
38
|
+
this.socket.on('error', e => this.logger.error(`[${this.name}] Error while handling connection: ${String(e)}`));
|
|
39
|
+
}
|
|
40
|
+
currentMessageBuffer = '';
|
|
41
|
+
handleData(message) {
|
|
42
|
+
if (!message.endsWith('\n')) {
|
|
43
|
+
this.currentMessageBuffer += message;
|
|
44
|
+
this.logger.trace(`[${this.name}] Received partial message. Buffering ${this.currentMessageBuffer.length}.`);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
message = this.currentMessageBuffer + message;
|
|
48
|
+
if (this.logger.settings.minLevel >= 2 /* LogLevel.Debug */) {
|
|
49
|
+
this.logger.debug(`[${this.name}] Received message: ${message}`);
|
|
50
|
+
}
|
|
51
|
+
this.currentMessageBuffer = '';
|
|
52
|
+
const request = (0, validate_1.validateBaseMessageFormat)(message);
|
|
53
|
+
if (request.type === 'error') {
|
|
54
|
+
(0, validate_1.answerForValidationError)(this.socket, request);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
switch (request.message.type) {
|
|
58
|
+
case 'request-file-analysis':
|
|
59
|
+
this.handleFileAnalysisRequest(request.message);
|
|
60
|
+
break;
|
|
61
|
+
case 'request-slice':
|
|
62
|
+
this.handleSliceRequest(request.message);
|
|
63
|
+
break;
|
|
64
|
+
case 'request-repl-execution':
|
|
65
|
+
this.handleRepl(request.message);
|
|
66
|
+
break;
|
|
67
|
+
default:
|
|
68
|
+
(0, send_1.sendMessage)(this.socket, {
|
|
69
|
+
id: request.message.id,
|
|
70
|
+
type: 'error',
|
|
71
|
+
fatal: true,
|
|
72
|
+
reason: `The message type ${JSON.stringify(request.message.type ?? 'undefined')} is not supported.`
|
|
73
|
+
});
|
|
74
|
+
this.socket.end();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
handleFileAnalysisRequest(base) {
|
|
78
|
+
const requestResult = (0, validate_1.validateMessage)(base, analysis_1.requestAnalysisMessage);
|
|
79
|
+
if (requestResult.type === 'error') {
|
|
80
|
+
(0, validate_1.answerForValidationError)(this.socket, requestResult, base.id);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const message = requestResult.message;
|
|
84
|
+
this.logger.info(`[${this.name}] Received file analysis request for ${message.filename ?? 'unknown file'}${message.filetoken ? ' with token: ' + message.filetoken : ''}`);
|
|
85
|
+
if (message.filetoken && this.fileMap.has(message.filetoken)) {
|
|
86
|
+
this.logger.warn(`File token ${message.filetoken} already exists. Overwriting.`);
|
|
87
|
+
}
|
|
88
|
+
const slicer = this.createPipelineExecutorForRequest(message);
|
|
89
|
+
void slicer.allRemainingSteps(false).then(async (results) => await this.sendFileAnalysisResponse(results, message))
|
|
90
|
+
.catch(e => {
|
|
91
|
+
this.logger.error(`[${this.name}] Error while analyzing file ${message.filename ?? 'unknown file'}: ${String(e)}`);
|
|
92
|
+
(0, send_1.sendMessage)(this.socket, {
|
|
93
|
+
id: message.id,
|
|
94
|
+
type: 'error',
|
|
95
|
+
fatal: false,
|
|
96
|
+
reason: `Error while analyzing file ${message.filename ?? 'unknown file'}: ${String(e)}`
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
async sendFileAnalysisResponse(results, message) {
|
|
101
|
+
let cfg = undefined;
|
|
102
|
+
if (message.cfg) {
|
|
103
|
+
cfg = (0, cfg_1.extractCFG)(results.normalize);
|
|
104
|
+
}
|
|
105
|
+
const config = () => ({ context: message.filename ?? 'unknown', getId: (0, quads_1.defaultQuadIdGenerator)() });
|
|
106
|
+
if (message.format === 'n-quads') {
|
|
107
|
+
(0, send_1.sendMessage)(this.socket, {
|
|
108
|
+
type: 'response-file-analysis',
|
|
109
|
+
format: 'n-quads',
|
|
110
|
+
id: message.id,
|
|
111
|
+
cfg: cfg ? (0, cfg_1.cfg2quads)(cfg, config()) : undefined,
|
|
112
|
+
results: {
|
|
113
|
+
parse: await (0, print_1.printStepResult)(_00_parse_1.PARSE_WITH_R_SHELL_STEP, results.parse, 5 /* StepOutputFormat.RdfQuads */, config()),
|
|
114
|
+
normalize: await (0, print_1.printStepResult)(_10_normalize_1.NORMALIZE, results.normalize, 5 /* StepOutputFormat.RdfQuads */, config()),
|
|
115
|
+
dataflow: await (0, print_1.printStepResult)(_20_dataflow_1.STATIC_DATAFLOW, results.dataflow, 5 /* StepOutputFormat.RdfQuads */, config())
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
(0, send_1.sendMessage)(this.socket, {
|
|
121
|
+
type: 'response-file-analysis',
|
|
122
|
+
format: 'json',
|
|
123
|
+
id: message.id,
|
|
124
|
+
cfg,
|
|
125
|
+
results: {
|
|
126
|
+
...results,
|
|
127
|
+
normalize: {
|
|
128
|
+
...results.normalize,
|
|
129
|
+
idMap: undefined
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
createPipelineExecutorForRequest(message) {
|
|
136
|
+
const slicer = new pipeline_executor_1.PipelineExecutor(default_pipelines_1.DEFAULT_SLICING_PIPELINE, {
|
|
137
|
+
shell: this.shell,
|
|
138
|
+
// we have to make sure that the content is not interpreted as a file path if it starts with 'file://' therefore, we do it manually
|
|
139
|
+
request: {
|
|
140
|
+
request: message.content === undefined ? 'file' : 'text',
|
|
141
|
+
content: message.content ?? message.filepath
|
|
142
|
+
},
|
|
143
|
+
criterion: [] // currently unknown
|
|
144
|
+
});
|
|
145
|
+
if (message.filetoken) {
|
|
146
|
+
this.logger.info(`Storing file token ${message.filetoken}`);
|
|
147
|
+
this.fileMap.set(message.filetoken, {
|
|
148
|
+
filename: message.filename,
|
|
149
|
+
pipeline: slicer
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return slicer;
|
|
153
|
+
}
|
|
154
|
+
handleSliceRequest(base) {
|
|
155
|
+
const requestResult = (0, validate_1.validateMessage)(base, slice_1.requestSliceMessage);
|
|
156
|
+
if (requestResult.type === 'error') {
|
|
157
|
+
(0, validate_1.answerForValidationError)(this.socket, requestResult, base.id);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const request = requestResult.message;
|
|
161
|
+
this.logger.info(`[${request.filetoken}] Received slice request with criteria ${JSON.stringify(request.criterion)}`);
|
|
162
|
+
const fileInformation = this.fileMap.get(request.filetoken);
|
|
163
|
+
if (!fileInformation) {
|
|
164
|
+
(0, send_1.sendMessage)(this.socket, {
|
|
165
|
+
id: request.id,
|
|
166
|
+
type: 'error',
|
|
167
|
+
fatal: false,
|
|
168
|
+
reason: `The file token ${request.filetoken} has never been analyzed.`
|
|
169
|
+
});
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
fileInformation.pipeline.updateRequest({ criterion: request.criterion });
|
|
173
|
+
void fileInformation.pipeline.allRemainingSteps(true).then(results => {
|
|
174
|
+
(0, send_1.sendMessage)(this.socket, {
|
|
175
|
+
type: 'response-slice',
|
|
176
|
+
id: request.id,
|
|
177
|
+
results: Object.fromEntries(Object.entries(results)
|
|
178
|
+
.filter(([k,]) => default_pipelines_1.DEFAULT_SLICING_PIPELINE.steps.get(k)?.executed === 1 /* PipelineStepStage.OncePerRequest */))
|
|
179
|
+
});
|
|
180
|
+
}).catch(e => {
|
|
181
|
+
this.logger.error(`[${this.name}] Error while analyzing file for token ${request.filetoken}: ${String(e)}`);
|
|
182
|
+
(0, send_1.sendMessage)(this.socket, {
|
|
183
|
+
id: request.id,
|
|
184
|
+
type: 'error',
|
|
185
|
+
fatal: false,
|
|
186
|
+
reason: `Error while analyzing file for token ${request.filetoken}: ${String(e)}`
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
handleRepl(base) {
|
|
191
|
+
const requestResult = (0, validate_1.validateMessage)(base, repl_1.requestExecuteReplExpressionMessage);
|
|
192
|
+
if (requestResult.type === 'error') {
|
|
193
|
+
(0, validate_1.answerForValidationError)(this.socket, requestResult, base.id);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
const request = requestResult.message;
|
|
197
|
+
const out = (stream, msg) => {
|
|
198
|
+
(0, send_1.sendMessage)(this.socket, {
|
|
199
|
+
type: 'response-repl-execution',
|
|
200
|
+
id: request.id,
|
|
201
|
+
result: msg,
|
|
202
|
+
stream
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
void (0, core_1.replProcessAnswer)({
|
|
206
|
+
formatter: request.ansi ? ansi_1.ansiFormatter : ansi_1.voidFormatter,
|
|
207
|
+
stdout: msg => out('stdout', msg),
|
|
208
|
+
stderr: msg => out('stderr', msg)
|
|
209
|
+
}, request.expression, this.shell).then(() => {
|
|
210
|
+
(0, send_1.sendMessage)(this.socket, {
|
|
211
|
+
type: 'end-repl-execution',
|
|
212
|
+
id: request.id
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
exports.FlowRServerConnection = FlowRServerConnection;
|
|
218
|
+
//# sourceMappingURL=connection.js.map
|