@eagleoutice/flowr 1.5.2 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +50 -45
- 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,72 @@
|
|
|
1
|
+
import type { IdMessageBase, MessageDefinition } from './messages';
|
|
2
|
+
import type { ControlFlowInformation } from '../../../../util/cfg/cfg';
|
|
3
|
+
import type { DEFAULT_DATAFLOW_PIPELINE, DEFAULT_SLICING_PIPELINE } from '../../../../core/steps/pipeline/default-pipelines';
|
|
4
|
+
import type { PipelineOutput } from '../../../../core/steps/pipeline/pipeline';
|
|
5
|
+
/**
|
|
6
|
+
* Send by the client to request an analysis of a given file.
|
|
7
|
+
* Answered by either an {@link FlowrErrorMessage} or a {@link FileAnalysisResponseMessageJson}.
|
|
8
|
+
*/
|
|
9
|
+
export interface FileAnalysisRequestMessage extends IdMessageBase {
|
|
10
|
+
type: 'request-file-analysis';
|
|
11
|
+
/**
|
|
12
|
+
* This is a unique token that you assign to subsequently slice the respective files.
|
|
13
|
+
* If you pass the same token multiple times, previous results will be overwritten.
|
|
14
|
+
*
|
|
15
|
+
* If you do not pass a file token, the server will _not_ store the results!
|
|
16
|
+
*/
|
|
17
|
+
filetoken?: string;
|
|
18
|
+
/**
|
|
19
|
+
* A human-readable file name. If you present a `filepath` or read from a file this should be straightforward.
|
|
20
|
+
* However, the name is only for debugging and bears no semantic meaning.
|
|
21
|
+
*/
|
|
22
|
+
filename?: string;
|
|
23
|
+
/** The contents of the file, or an R expression itself (like `1 + 1`), give either this or the `filepath`. */
|
|
24
|
+
content?: string;
|
|
25
|
+
/** The filepath on the local machine, accessible to flowR, or simply. Give either this or the `content` */
|
|
26
|
+
filepath?: string;
|
|
27
|
+
/** Can be used to additionally extract the {@link ControlFlowInformation} of the file, which is not exposed (and not fully calculated) by default. */
|
|
28
|
+
cfg?: boolean;
|
|
29
|
+
/** Controls the serialization of the `results` (and the {@link ControlFlowGraph} if the corresponding flag is set). If missing, we assume _json_. */
|
|
30
|
+
format?: 'json' | 'n-quads';
|
|
31
|
+
}
|
|
32
|
+
export declare const requestAnalysisMessage: MessageDefinition<FileAnalysisRequestMessage>;
|
|
33
|
+
/**
|
|
34
|
+
* Answer for a successful {@link FileAnalysisRequestMessage}.
|
|
35
|
+
* It contains the results of the analysis in JSON format (guided by {@link FileAnalysisRequestMessage#format}).
|
|
36
|
+
*
|
|
37
|
+
* The `idMap` of the normalization step (see {@link NormalizedAst}) is not serialized as it would essentially
|
|
38
|
+
* repeat the complete normalized AST.
|
|
39
|
+
*
|
|
40
|
+
* @note The serialization of maps and sets is controlled by the {@link jsonReplacer} as part of {@link sendMessage}.
|
|
41
|
+
*
|
|
42
|
+
* @see FileAnalysisResponseMessageNQuads
|
|
43
|
+
*/
|
|
44
|
+
export interface FileAnalysisResponseMessageJson extends IdMessageBase {
|
|
45
|
+
type: 'response-file-analysis';
|
|
46
|
+
format: 'json';
|
|
47
|
+
/**
|
|
48
|
+
* See the {@link SteppingSlicer} and {@link StepResults} for details on the results.
|
|
49
|
+
*/
|
|
50
|
+
results: PipelineOutput<typeof DEFAULT_SLICING_PIPELINE>;
|
|
51
|
+
/**
|
|
52
|
+
* Only if the {@link FileAnalysisRequestMessage} contained a `cfg: true` this will contain the {@link ControlFlowInformation} of the file.
|
|
53
|
+
*/
|
|
54
|
+
cfg?: ControlFlowInformation;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Similar to {@link FileAnalysisResponseMessageJson} but using n-quads as serialization format.
|
|
58
|
+
*/
|
|
59
|
+
export interface FileAnalysisResponseMessageNQuads extends IdMessageBase {
|
|
60
|
+
type: 'response-file-analysis';
|
|
61
|
+
format: 'n-quads';
|
|
62
|
+
/**
|
|
63
|
+
* @see FileAnalysisResponseMessageJson#results
|
|
64
|
+
*/
|
|
65
|
+
results: {
|
|
66
|
+
[K in keyof PipelineOutput<typeof DEFAULT_DATAFLOW_PIPELINE>]: string;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* @see FileAnalysisResponseMessageJson#cfg
|
|
70
|
+
*/
|
|
71
|
+
cfg?: string;
|
|
72
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
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.requestAnalysisMessage = void 0;
|
|
7
|
+
const joi_1 = __importDefault(require("joi"));
|
|
8
|
+
exports.requestAnalysisMessage = {
|
|
9
|
+
type: 'request-file-analysis',
|
|
10
|
+
schema: joi_1.default.object({
|
|
11
|
+
type: joi_1.default.string().valid('request-file-analysis').required(),
|
|
12
|
+
id: joi_1.default.string().optional(),
|
|
13
|
+
filetoken: joi_1.default.string().optional(),
|
|
14
|
+
filename: joi_1.default.string().optional(),
|
|
15
|
+
content: joi_1.default.string().optional(),
|
|
16
|
+
filepath: joi_1.default.string().optional(),
|
|
17
|
+
cfg: joi_1.default.boolean().optional(),
|
|
18
|
+
format: joi_1.default.string().valid('json', 'n-quads').optional()
|
|
19
|
+
}).xor('content', 'filepath')
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=analysis.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IdMessageBase } from './messages';
|
|
2
|
+
/**
|
|
3
|
+
* Sent in case of any error (e.g., if the analysis fails, or the message contains syntax errors).
|
|
4
|
+
*/
|
|
5
|
+
export interface FlowrErrorMessage extends IdMessageBase {
|
|
6
|
+
type: 'error';
|
|
7
|
+
/** if fatal, the connection will be partially closed afterward */
|
|
8
|
+
fatal: boolean;
|
|
9
|
+
/** the human-readable reason for the error */
|
|
10
|
+
reason: string;
|
|
11
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { VersionInformation } from '../../commands/version';
|
|
2
|
+
import type { IdMessageBase } from './messages';
|
|
3
|
+
/**
|
|
4
|
+
* The hello message is automatically send by the sever upon connection.
|
|
5
|
+
*/
|
|
6
|
+
export interface FlowrHelloResponseMessage extends IdMessageBase {
|
|
7
|
+
type: 'hello';
|
|
8
|
+
/** The hello message never has an id, it is always undefined */
|
|
9
|
+
id: undefined;
|
|
10
|
+
/**
|
|
11
|
+
* A unique name that is assigned to each client.
|
|
12
|
+
* It has no semantic meaning and is only used/useful for debugging.
|
|
13
|
+
*/
|
|
14
|
+
clientName: string;
|
|
15
|
+
/**
|
|
16
|
+
* Describes which versions are in use on the server.
|
|
17
|
+
* @see VersionInformation
|
|
18
|
+
*/
|
|
19
|
+
versions: VersionInformation;
|
|
20
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provides the capability of connecting to the repl of flowr via messages.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import * as Joi from 'joi';
|
|
7
|
+
import type { FlowrHelloResponseMessage } from './hello';
|
|
8
|
+
import type { FileAnalysisRequestMessage, FileAnalysisResponseMessageJson } from './analysis';
|
|
9
|
+
import type { ExecuteEndMessage, ExecuteIntermediateResponseMessage, ExecuteRequestMessage } from './repl';
|
|
10
|
+
import type { SliceRequestMessage, SliceResponseMessage } from './slice';
|
|
11
|
+
import type { FlowrErrorMessage } from './error';
|
|
12
|
+
/**
|
|
13
|
+
* If you send a message it must *not* contain a newline but the message must be terminated by a newline.
|
|
14
|
+
*/
|
|
15
|
+
export interface IdMessageBase {
|
|
16
|
+
/**
|
|
17
|
+
* The at this time unknown type
|
|
18
|
+
*/
|
|
19
|
+
type: string;
|
|
20
|
+
/**
|
|
21
|
+
* The id that links a request with its responses, it is up to the calling client to make sure it is unique.
|
|
22
|
+
* However, the client does not have to pass the id if it does not need to link the request with its response.
|
|
23
|
+
* The id is always undefined if the message is unprompted (e.g., with hello) or the id unknown.
|
|
24
|
+
*/
|
|
25
|
+
id: string | undefined;
|
|
26
|
+
}
|
|
27
|
+
export interface MessageDefinition<T extends FlowrMessage | IdMessageBase> {
|
|
28
|
+
type: T['type'] | undefined;
|
|
29
|
+
schema: Joi.Schema;
|
|
30
|
+
}
|
|
31
|
+
export declare const baseMessage: MessageDefinition<IdMessageBase>;
|
|
32
|
+
/**
|
|
33
|
+
* This is the main message type that should be used to represent a message in *flowR*
|
|
34
|
+
*/
|
|
35
|
+
export type FlowrMessage = FlowrHelloResponseMessage | FileAnalysisRequestMessage | FileAnalysisResponseMessageJson | ExecuteRequestMessage | ExecuteIntermediateResponseMessage | ExecuteEndMessage | SliceRequestMessage | SliceResponseMessage | FlowrErrorMessage;
|
|
@@ -0,0 +1,40 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.baseMessage = void 0;
|
|
27
|
+
/**
|
|
28
|
+
* Provides the capability of connecting to the repl of flowr via messages.
|
|
29
|
+
*
|
|
30
|
+
* @module
|
|
31
|
+
*/
|
|
32
|
+
const Joi = __importStar(require("joi"));
|
|
33
|
+
exports.baseMessage = {
|
|
34
|
+
type: '**base**',
|
|
35
|
+
schema: Joi.object({
|
|
36
|
+
type: Joi.string().required(),
|
|
37
|
+
id: Joi.string().optional()
|
|
38
|
+
}).unknown(true)
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { IdMessageBase, MessageDefinition } from './messages';
|
|
2
|
+
/**
|
|
3
|
+
* Request the execution of the given expression as a REPL statement.
|
|
4
|
+
* We strongly recommend that you make use of a unique {@link IdMessageBase#id}
|
|
5
|
+
* in case the message responses happen in parallel.
|
|
6
|
+
*
|
|
7
|
+
* @see ExecuteIntermediateResponseMessage
|
|
8
|
+
* @see ExecuteEndMessage
|
|
9
|
+
*/
|
|
10
|
+
export interface ExecuteRequestMessage extends IdMessageBase {
|
|
11
|
+
type: 'request-repl-execution';
|
|
12
|
+
/** Should ansi formatting be enabled for the response? Is `false` by default. */
|
|
13
|
+
ansi?: boolean;
|
|
14
|
+
/** The expression to execute */
|
|
15
|
+
expression: string;
|
|
16
|
+
}
|
|
17
|
+
export declare const requestExecuteReplExpressionMessage: MessageDefinition<ExecuteRequestMessage>;
|
|
18
|
+
/**
|
|
19
|
+
* This message may be sent multiple times, triggered for every "output" performed by the execution.
|
|
20
|
+
* {@link ExecuteEndMessage} marks the end of these messages.
|
|
21
|
+
*/
|
|
22
|
+
export interface ExecuteIntermediateResponseMessage extends IdMessageBase {
|
|
23
|
+
type: 'response-repl-execution';
|
|
24
|
+
stream: 'stdout' | 'stderr';
|
|
25
|
+
result: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Marks the end of the execution of the respective {@link ExecuteRequestMessage}.
|
|
29
|
+
* The underlying TCP connection should ensure the ordering so that this message is the last.
|
|
30
|
+
*/
|
|
31
|
+
export interface ExecuteEndMessage extends IdMessageBase {
|
|
32
|
+
type: 'end-repl-execution';
|
|
33
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.requestExecuteReplExpressionMessage = void 0;
|
|
27
|
+
const Joi = __importStar(require("joi"));
|
|
28
|
+
exports.requestExecuteReplExpressionMessage = {
|
|
29
|
+
type: 'request-repl-execution',
|
|
30
|
+
schema: Joi.object({
|
|
31
|
+
type: Joi.string().valid('request-repl-execution').required(),
|
|
32
|
+
id: Joi.string().optional(),
|
|
33
|
+
ansi: Joi.boolean().optional(),
|
|
34
|
+
expression: Joi.string().required(),
|
|
35
|
+
})
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=repl.js.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { IdMessageBase, MessageDefinition } from './messages';
|
|
2
|
+
import type { SlicingCriteria } from '../../../../slicing/criterion/parse';
|
|
3
|
+
import type { PipelineOutput } from '../../../../core/steps/pipeline/pipeline';
|
|
4
|
+
import type { DEFAULT_DATAFLOW_PIPELINE, DEFAULT_SLICING_PIPELINE } from '../../../../core/steps/pipeline/default-pipelines';
|
|
5
|
+
/**
|
|
6
|
+
* Can only be sent after you have sent the {@link FileAnalysisRequestMessage}.
|
|
7
|
+
* Using the same `filetoken` as in the {@link FileAnalysisRequestMessage} you
|
|
8
|
+
* can slice the respective file given the respective criteria.
|
|
9
|
+
*/
|
|
10
|
+
export interface SliceRequestMessage extends IdMessageBase {
|
|
11
|
+
type: 'request-slice';
|
|
12
|
+
/** The {@link FileAnalysisRequestMessage#filetoken} of the file/data to slice */
|
|
13
|
+
filetoken: string;
|
|
14
|
+
/** The slicing criteria to use */
|
|
15
|
+
criterion: SlicingCriteria;
|
|
16
|
+
}
|
|
17
|
+
export declare const requestSliceMessage: MessageDefinition<SliceRequestMessage>;
|
|
18
|
+
/**
|
|
19
|
+
* Similar to {@link FileAnalysisResponseMessage} this only contains the results of
|
|
20
|
+
* the slice steps.
|
|
21
|
+
*/
|
|
22
|
+
export interface SliceResponseMessage extends IdMessageBase {
|
|
23
|
+
type: 'response-slice';
|
|
24
|
+
/** only contains the results of the slice steps to not repeat ourselves */
|
|
25
|
+
results: Omit<PipelineOutput<typeof DEFAULT_SLICING_PIPELINE>, keyof PipelineOutput<typeof DEFAULT_DATAFLOW_PIPELINE>>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.requestSliceMessage = void 0;
|
|
27
|
+
const Joi = __importStar(require("joi"));
|
|
28
|
+
exports.requestSliceMessage = {
|
|
29
|
+
type: 'request-slice',
|
|
30
|
+
schema: Joi.object({
|
|
31
|
+
type: Joi.string().valid('request-slice').required(),
|
|
32
|
+
id: Joi.string().optional(),
|
|
33
|
+
filetoken: Joi.string().required(),
|
|
34
|
+
criterion: Joi.array().items(Joi.string().regex(/\d+:\d+|\d+@.*|\$\d+/)).min(0).required()
|
|
35
|
+
})
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=slice.js.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type WebSocket from 'ws';
|
|
3
|
+
/** Function handler that should be triggered when the respective socket connects */
|
|
4
|
+
export type OnConnect = (c: Socket) => void;
|
|
5
|
+
/**
|
|
6
|
+
* A generic server interface that allows us to mock the server's behavior in tests.
|
|
7
|
+
*/
|
|
8
|
+
export interface Server {
|
|
9
|
+
/**
|
|
10
|
+
* Register a function to be called when a new socket connects.
|
|
11
|
+
* This should be only called once per server.
|
|
12
|
+
*/
|
|
13
|
+
onConnect(handler: OnConnect): void;
|
|
14
|
+
start(port: number): void;
|
|
15
|
+
}
|
|
16
|
+
export declare class WebSocketServerWrapper implements Server {
|
|
17
|
+
private server;
|
|
18
|
+
private connectHandler;
|
|
19
|
+
onConnect(handler: OnConnect): void;
|
|
20
|
+
start(port: number): void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The socket abstraction of *flowR*.
|
|
24
|
+
* Essentially a subset of what the default `net.Socket` of `node` provides.
|
|
25
|
+
*/
|
|
26
|
+
export interface Socket {
|
|
27
|
+
remoteAddress?: string;
|
|
28
|
+
remotePort?: number;
|
|
29
|
+
on(event: 'error', listener: (e: unknown) => void): void;
|
|
30
|
+
on(event: 'close', listener: () => void): void;
|
|
31
|
+
on(event: 'data', listener: (data: Buffer) => void): void;
|
|
32
|
+
write(data: string): void;
|
|
33
|
+
end(): void;
|
|
34
|
+
}
|
|
35
|
+
export declare class WebSocketWrapper implements Socket {
|
|
36
|
+
private readonly socket;
|
|
37
|
+
remoteAddress?: string;
|
|
38
|
+
remotePort?: number;
|
|
39
|
+
constructor(socket: WebSocket);
|
|
40
|
+
write(data: string): void;
|
|
41
|
+
end(): void;
|
|
42
|
+
on(event: 'data' | 'close' | 'error', listener: (data: Buffer) => void): void;
|
|
43
|
+
}
|
|
44
|
+
export declare class NetServer implements Server {
|
|
45
|
+
private readonly server;
|
|
46
|
+
constructor();
|
|
47
|
+
onConnect(handler: OnConnect): void;
|
|
48
|
+
start(port: number): void;
|
|
49
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
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.NetServer = exports.WebSocketWrapper = exports.WebSocketServerWrapper = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* This is just a simple layer to allow me to mock the server's behavior in tests.
|
|
9
|
+
*/
|
|
10
|
+
const net_1 = __importDefault(require("net"));
|
|
11
|
+
const ws_1 = require("ws");
|
|
12
|
+
const server_1 = require("./server");
|
|
13
|
+
class WebSocketServerWrapper {
|
|
14
|
+
server;
|
|
15
|
+
connectHandler;
|
|
16
|
+
onConnect(handler) {
|
|
17
|
+
this.connectHandler = handler;
|
|
18
|
+
}
|
|
19
|
+
start(port) {
|
|
20
|
+
this.server = new ws_1.WebSocketServer({ port });
|
|
21
|
+
server_1.serverLog.info('WebSocket-Server wrapper is active!');
|
|
22
|
+
this.server.on('connection', c => this.connectHandler?.(new WebSocketWrapper(c)));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.WebSocketServerWrapper = WebSocketServerWrapper;
|
|
26
|
+
class WebSocketWrapper {
|
|
27
|
+
socket;
|
|
28
|
+
remoteAddress;
|
|
29
|
+
remotePort;
|
|
30
|
+
constructor(socket) {
|
|
31
|
+
this.socket = socket;
|
|
32
|
+
this.remoteAddress = socket.url;
|
|
33
|
+
}
|
|
34
|
+
write(data) {
|
|
35
|
+
this.socket.send(data);
|
|
36
|
+
}
|
|
37
|
+
end() {
|
|
38
|
+
this.socket.close();
|
|
39
|
+
}
|
|
40
|
+
on(event, listener) {
|
|
41
|
+
if (event === 'data') {
|
|
42
|
+
this.socket.on('message', listener);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.socket.on(event, listener);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.WebSocketWrapper = WebSocketWrapper;
|
|
50
|
+
class NetServer {
|
|
51
|
+
server;
|
|
52
|
+
constructor() {
|
|
53
|
+
this.server = net_1.default.createServer();
|
|
54
|
+
}
|
|
55
|
+
onConnect(handler) {
|
|
56
|
+
this.server.on('connection', handler);
|
|
57
|
+
}
|
|
58
|
+
start(port) {
|
|
59
|
+
this.server.listen(port);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.NetServer = NetServer;
|
|
63
|
+
//# sourceMappingURL=net.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendMessage = exports.getUnnamedSocketName = void 0;
|
|
4
|
+
const server_1 = require("./server");
|
|
5
|
+
const json_1 = require("../../../util/json");
|
|
6
|
+
function getUnnamedSocketName(c) {
|
|
7
|
+
return `${c.remoteAddress ?? '?'}@${c.remotePort ?? '?'}`;
|
|
8
|
+
}
|
|
9
|
+
exports.getUnnamedSocketName = getUnnamedSocketName;
|
|
10
|
+
function sendMessage(c, message) {
|
|
11
|
+
const msg = JSON.stringify(message, json_1.jsonReplacer);
|
|
12
|
+
if (server_1.serverLog.settings.minLevel >= 2 /* LogLevel.Debug */) {
|
|
13
|
+
server_1.serverLog.debug(`[${getUnnamedSocketName(c)}] sending message: ${msg}`);
|
|
14
|
+
}
|
|
15
|
+
c.write(`${msg}\n`);
|
|
16
|
+
}
|
|
17
|
+
exports.sendMessage = sendMessage;
|
|
18
|
+
//# sourceMappingURL=send.js.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Server } from './net';
|
|
2
|
+
import { FlowrLogger } from '../../../util/log';
|
|
3
|
+
import type { RShell } from '../../../r-bridge/shell';
|
|
4
|
+
export declare const serverLog: FlowrLogger;
|
|
5
|
+
/**
|
|
6
|
+
* This class controls the TCP server, which can be started by calling {@link start}.
|
|
7
|
+
* Afterward, each incoming connection will be greeted with {@link helloClient} and from
|
|
8
|
+
* thereon be handled by a {@link FlowRServerConnection}.
|
|
9
|
+
*/
|
|
10
|
+
export declare class FlowRServer {
|
|
11
|
+
private readonly server;
|
|
12
|
+
private readonly shell;
|
|
13
|
+
private versionInformation;
|
|
14
|
+
/** maps names to the respective connection */
|
|
15
|
+
private connections;
|
|
16
|
+
private nameCounter;
|
|
17
|
+
constructor(shell: RShell, server?: Server);
|
|
18
|
+
start(port: number): Promise<void>;
|
|
19
|
+
private onConnect;
|
|
20
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FlowRServer = exports.serverLog = void 0;
|
|
4
|
+
const version_1 = require("../commands/version");
|
|
5
|
+
const connection_1 = require("./connection");
|
|
6
|
+
const send_1 = require("./send");
|
|
7
|
+
const net_1 = require("./net");
|
|
8
|
+
const log_1 = require("../../../util/log");
|
|
9
|
+
// we detach from the main logger so that it can have its own switch
|
|
10
|
+
exports.serverLog = new log_1.FlowrLogger({ name: 'server' });
|
|
11
|
+
/**
|
|
12
|
+
* This class controls the TCP server, which can be started by calling {@link start}.
|
|
13
|
+
* Afterward, each incoming connection will be greeted with {@link helloClient} and from
|
|
14
|
+
* thereon be handled by a {@link FlowRServerConnection}.
|
|
15
|
+
*/
|
|
16
|
+
class FlowRServer {
|
|
17
|
+
server;
|
|
18
|
+
shell;
|
|
19
|
+
versionInformation;
|
|
20
|
+
/** maps names to the respective connection */
|
|
21
|
+
connections = new Map();
|
|
22
|
+
nameCounter = 0;
|
|
23
|
+
constructor(shell, server = new net_1.NetServer()) {
|
|
24
|
+
this.server = server;
|
|
25
|
+
this.server.onConnect(c => this.onConnect(c));
|
|
26
|
+
this.shell = shell;
|
|
27
|
+
}
|
|
28
|
+
async start(port) {
|
|
29
|
+
this.versionInformation = await (0, version_1.retrieveVersionInformation)(this.shell);
|
|
30
|
+
this.server.start(port);
|
|
31
|
+
exports.serverLog.info(`Server listening on port ${port}`);
|
|
32
|
+
}
|
|
33
|
+
onConnect(c) {
|
|
34
|
+
if (!this.versionInformation) {
|
|
35
|
+
notYetInitialized(c, undefined);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const name = `client-${this.nameCounter++}`;
|
|
39
|
+
exports.serverLog.info(`Client connected: ${(0, send_1.getUnnamedSocketName)(c)} as "${name}"`);
|
|
40
|
+
this.connections.set(name, new connection_1.FlowRServerConnection(c, name, this.shell));
|
|
41
|
+
helloClient(c, name, this.versionInformation);
|
|
42
|
+
c.on('close', () => {
|
|
43
|
+
this.connections.delete(name);
|
|
44
|
+
exports.serverLog.info(`Client "${name}" disconnected (${(0, send_1.getUnnamedSocketName)(c)})`);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.FlowRServer = FlowRServer;
|
|
49
|
+
function notYetInitialized(c, id) {
|
|
50
|
+
(0, send_1.sendMessage)(c, {
|
|
51
|
+
id,
|
|
52
|
+
type: 'error',
|
|
53
|
+
fatal: true,
|
|
54
|
+
reason: 'Server not initialized yet (or failed to), please try again later.'
|
|
55
|
+
});
|
|
56
|
+
c.end();
|
|
57
|
+
}
|
|
58
|
+
function helloClient(c, name, versionInformation) {
|
|
59
|
+
(0, send_1.sendMessage)(c, {
|
|
60
|
+
id: undefined,
|
|
61
|
+
type: 'hello',
|
|
62
|
+
clientName: name,
|
|
63
|
+
versions: versionInformation
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type * as Joi from 'joi';
|
|
2
|
+
import type { FlowrMessage, IdMessageBase, MessageDefinition } from './messages/messages';
|
|
3
|
+
import type { Socket } from './net';
|
|
4
|
+
export interface ValidationErrorResult {
|
|
5
|
+
type: 'error';
|
|
6
|
+
reason: Joi.ValidationError | Error;
|
|
7
|
+
}
|
|
8
|
+
export interface SuccessValidationResult<T extends IdMessageBase> {
|
|
9
|
+
type: 'success';
|
|
10
|
+
message: T;
|
|
11
|
+
}
|
|
12
|
+
export type ValidationResult<T extends IdMessageBase> = SuccessValidationResult<T> | ValidationErrorResult;
|
|
13
|
+
export declare function validateBaseMessageFormat(input: string): ValidationResult<IdMessageBase>;
|
|
14
|
+
export declare function validateMessage<T extends FlowrMessage | IdMessageBase>(input: IdMessageBase, def: MessageDefinition<T>): ValidationResult<T>;
|
|
15
|
+
export declare function answerForValidationError(client: Socket, result: ValidationErrorResult, id?: string): void;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.answerForValidationError = exports.validateMessage = exports.validateBaseMessageFormat = void 0;
|
|
4
|
+
const send_1 = require("./send");
|
|
5
|
+
const messages_1 = require("./messages/messages");
|
|
6
|
+
function validateBaseMessageFormat(input) {
|
|
7
|
+
try {
|
|
8
|
+
return validateMessage(JSON.parse(input), messages_1.baseMessage);
|
|
9
|
+
}
|
|
10
|
+
catch (e) {
|
|
11
|
+
return { type: 'error', reason: e };
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.validateBaseMessageFormat = validateBaseMessageFormat;
|
|
15
|
+
function validateMessage(input, def) {
|
|
16
|
+
try {
|
|
17
|
+
const result = def.schema.validate(input);
|
|
18
|
+
return result.error ? { type: 'error', reason: result.error } : { type: 'success', message: input };
|
|
19
|
+
}
|
|
20
|
+
catch (e) {
|
|
21
|
+
return { type: 'error', reason: e };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.validateMessage = validateMessage;
|
|
25
|
+
function answerForValidationError(client, result, id) {
|
|
26
|
+
(0, send_1.sendMessage)(client, {
|
|
27
|
+
type: 'error',
|
|
28
|
+
fatal: false,
|
|
29
|
+
id: id,
|
|
30
|
+
reason: `Invalid message format: ${result.reason.message}`
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
exports.answerForValidationError = answerForValidationError;
|
|
34
|
+
//# sourceMappingURL=validate.js.map
|