@eagleoutice/flowr 1.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +27 -0
- package/benchmark/benchmark-slicer.js +223 -0
- package/benchmark/index.d.ts +3 -0
- package/benchmark/index.js +20 -0
- package/benchmark/slicer.d.ts +100 -0
- package/benchmark/slicer.js +223 -0
- package/benchmark/stats/index.d.ts +10 -0
- package/benchmark/stats/index.js +27 -0
- package/benchmark/stats/print.d.ts +7 -0
- package/benchmark/stats/print.js +157 -0
- package/benchmark/stats/stats.d.ts +41 -0
- package/benchmark/stats/stats.js +6 -0
- package/benchmark/stopwatch.d.ts +35 -0
- package/benchmark/stopwatch.js +79 -0
- package/cli/benchmark-app.d.ts +9 -0
- package/cli/benchmark-app.js +52 -0
- package/cli/benchmark-helper-app.d.ts +7 -0
- package/cli/benchmark-helper-app.js +60 -0
- package/cli/common/features.d.ts +3 -0
- package/cli/common/features.js +30 -0
- package/cli/common/index.d.ts +2 -0
- package/cli/common/index.js +19 -0
- package/cli/common/options.d.ts +20 -0
- package/cli/common/options.js +82 -0
- package/cli/common/script.d.ts +21 -0
- package/cli/common/script.js +61 -0
- package/cli/common/scripts-info.d.ts +24 -0
- package/cli/common/scripts-info.js +69 -0
- package/cli/export-quads-app.d.ts +7 -0
- package/cli/export-quads-app.js +46 -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 +11 -0
- package/cli/repl/commands/commands.js +103 -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/index.d.ts +2 -0
- package/cli/repl/commands/index.js +19 -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 +109 -0
- package/cli/repl/commands/quit.d.ts +2 -0
- package/cli/repl/commands/quit.js +12 -0
- package/cli/repl/commands/version.d.ts +16 -0
- package/cli/repl/commands/version.js +33 -0
- package/cli/repl/core.d.ts +41 -0
- package/cli/repl/core.js +89 -0
- package/cli/repl/execute.d.ts +28 -0
- package/cli/repl/execute.js +79 -0
- package/cli/repl/index.d.ts +5 -0
- package/cli/repl/index.js +22 -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 +217 -0
- package/cli/repl/server/messages/analysis.d.ts +71 -0
- package/cli/repl/server/messages/analysis.js +21 -0
- package/cli/repl/server/messages/error.d.ts +11 -0
- package/cli/repl/server/messages/error.js +3 -0
- package/cli/repl/server/messages/hello.d.ts +20 -0
- package/cli/repl/server/messages/hello.js +3 -0
- package/cli/repl/server/messages/index.d.ts +1 -0
- package/cli/repl/server/messages/index.js +3 -0
- package/cli/repl/server/messages/messages.d.ts +35 -0
- package/cli/repl/server/messages/messages.js +20 -0
- package/cli/repl/server/messages/repl.d.ts +33 -0
- package/cli/repl/server/messages/repl.js +17 -0
- package/cli/repl/server/messages/slice.d.ts +25 -0
- package/cli/repl/server/messages/slice.js +17 -0
- package/cli/repl/server/net.d.ts +33 -0
- package/cli/repl/server/net.js +24 -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 +81 -0
- package/cli/statistics-app.d.ts +11 -0
- package/cli/statistics-app.js +98 -0
- package/cli/statistics-helper-app.d.ts +11 -0
- package/cli/statistics-helper-app.js +83 -0
- package/cli/summarizer-app.d.ts +18 -0
- package/cli/summarizer-app.js +67 -0
- package/core/index.d.ts +4 -0
- package/core/index.js +23 -0
- package/core/input.d.ts +42 -0
- package/core/input.js +3 -0
- package/core/output.d.ts +15 -0
- package/core/output.js +3 -0
- package/core/pipeline-executor.js +221 -0
- package/core/print/dataflow-printer.d.ts +8 -0
- package/core/print/dataflow-printer.js +62 -0
- package/core/print/normalize-printer.d.ts +7 -0
- package/core/print/normalize-printer.js +31 -0
- package/core/print/parse-printer.d.ts +3 -0
- package/core/print/parse-printer.js +29 -0
- package/core/print/print.d.ts +47 -0
- package/core/print/print.js +13 -0
- package/core/print/slice-diff-ansi.d.ts +2 -0
- package/core/print/slice-diff-ansi.js +49 -0
- package/core/slicer.d.ts +123 -0
- package/core/slicer.js +227 -0
- package/core/stepping-slicer.js +160 -0
- package/core/steps/all/00-parse.js +19 -0
- package/core/steps/all/10-normalize.js +21 -0
- package/core/steps/all/20-dataflow.js +21 -0
- package/core/steps/all/30-slice.js +16 -0
- package/core/steps/all/40-reconstruct.js +16 -0
- package/core/steps/all/core/00-parse.js +24 -0
- package/core/steps/all/core/10-normalize.js +46 -0
- package/core/steps/all/core/20-dataflow.js +39 -0
- package/core/steps/all/static-slicing/00-slice.js +21 -0
- package/core/steps/all/static-slicing/10-reconstruct.js +21 -0
- package/core/steps/index.js +21 -0
- package/core/steps/input.js +3 -0
- package/core/steps/output.js +3 -0
- package/core/steps/pipeline/create.js +130 -0
- package/core/steps/pipeline/default.js +15 -0
- package/core/steps/pipeline/dependency-checker.js +76 -0
- package/core/steps/pipeline/index.js +20 -0
- package/core/steps/pipeline/invalid-pipeline-error.js +14 -0
- package/core/steps/pipeline/pipeline.js +28 -0
- package/core/steps/step.js +8 -0
- package/core/steps/steps-provider.js +3 -0
- package/core/steps/steps.js +35 -0
- package/core/steps.d.ts +166 -0
- package/core/steps.js +99 -0
- package/dataflow/common/environments/append.js +48 -0
- package/dataflow/common/environments/environment.js +165 -0
- package/dataflow/common/environments/index.js +23 -0
- package/dataflow/common/environments/overwrite.js +82 -0
- package/dataflow/common/environments/register.js +49 -0
- package/dataflow/common/environments/resolve-by-name.js +35 -0
- package/dataflow/common/environments/scopes.js +6 -0
- package/dataflow/common/environments/scoping.js +27 -0
- package/dataflow/environments/append.d.ts +8 -0
- package/dataflow/environments/append.js +48 -0
- package/dataflow/environments/environment.d.ts +78 -0
- package/dataflow/environments/environment.js +161 -0
- package/dataflow/environments/index.d.ts +7 -0
- package/dataflow/environments/index.js +23 -0
- package/dataflow/environments/overwrite.d.ts +6 -0
- package/dataflow/environments/overwrite.js +82 -0
- package/dataflow/environments/register.d.ts +7 -0
- package/dataflow/environments/register.js +39 -0
- package/dataflow/environments/resolve-by-name.d.ts +12 -0
- package/dataflow/environments/resolve-by-name.js +35 -0
- package/dataflow/environments/scopes.d.ts +6 -0
- package/dataflow/environments/scopes.js +6 -0
- package/dataflow/environments/scoping.d.ts +4 -0
- package/dataflow/environments/scoping.js +27 -0
- package/dataflow/extractor.d.ts +6 -0
- package/dataflow/extractor.js +60 -0
- package/dataflow/graph/diff.d.ts +18 -0
- package/dataflow/graph/diff.js +206 -0
- package/dataflow/graph/edge.d.ts +37 -0
- package/dataflow/graph/edge.js +32 -0
- package/dataflow/graph/equal.js +127 -0
- package/dataflow/graph/graph.d.ts +120 -0
- package/dataflow/graph/graph.js +298 -0
- package/dataflow/graph/index.d.ts +4 -0
- package/dataflow/graph/index.js +21 -0
- package/dataflow/graph/quads.d.ts +8 -0
- package/dataflow/graph/quads.js +27 -0
- package/dataflow/graph/vertex.d.ts +86 -0
- package/dataflow/graph/vertex.js +3 -0
- package/dataflow/index.d.ts +5 -0
- package/dataflow/index.js +24 -0
- package/dataflow/internal/info.d.ts +21 -0
- package/dataflow/internal/info.js +16 -0
- package/dataflow/internal/linker.d.ts +41 -0
- package/dataflow/internal/linker.js +255 -0
- package/dataflow/internal/process/access.d.ts +4 -0
- package/dataflow/internal/process/access.js +53 -0
- package/dataflow/internal/process/expression-list.d.ts +8 -0
- package/dataflow/internal/process/expression-list.js +148 -0
- package/dataflow/internal/process/functions/argument.d.ts +8 -0
- package/dataflow/internal/process/functions/argument.js +46 -0
- package/dataflow/internal/process/functions/exit-points.d.ts +2 -0
- package/dataflow/internal/process/functions/exit-points.js +121 -0
- package/dataflow/internal/process/functions/function-call.d.ts +5 -0
- package/dataflow/internal/process/functions/function-call.js +99 -0
- package/dataflow/internal/process/functions/function-definition.d.ts +4 -0
- package/dataflow/internal/process/functions/function-definition.js +176 -0
- package/dataflow/internal/process/functions/parameter.d.ts +4 -0
- package/dataflow/internal/process/functions/parameter.js +47 -0
- package/dataflow/internal/process/if-then-else.d.ts +4 -0
- package/dataflow/internal/process/if-then-else.js +56 -0
- package/dataflow/internal/process/loops/for-loop.d.ts +4 -0
- package/dataflow/internal/process/loops/for-loop.js +54 -0
- package/dataflow/internal/process/loops/repeat-loop.d.ts +4 -0
- package/dataflow/internal/process/loops/repeat-loop.js +21 -0
- package/dataflow/internal/process/loops/while-loop.d.ts +4 -0
- package/dataflow/internal/process/loops/while-loop.js +31 -0
- package/dataflow/internal/process/operators/assignment.d.ts +4 -0
- package/dataflow/internal/process/operators/assignment.js +129 -0
- package/dataflow/internal/process/operators/non-assignment-binary-op.d.ts +4 -0
- package/dataflow/internal/process/operators/non-assignment-binary-op.js +25 -0
- package/dataflow/internal/process/operators/pipe.d.ts +4 -0
- package/dataflow/internal/process/operators/pipe.js +46 -0
- package/dataflow/internal/process/operators/unary-op.d.ts +4 -0
- package/dataflow/internal/process/operators/unary-op.js +10 -0
- package/dataflow/internal/process/symbol.d.ts +4 -0
- package/dataflow/internal/process/symbol.js +21 -0
- package/dataflow/internal/process/uninteresting-leaf.d.ts +3 -0
- package/dataflow/internal/process/uninteresting-leaf.js +9 -0
- package/dataflow/processor.d.ts +47 -0
- package/dataflow/processor.js +20 -0
- package/dataflow/v1/extractor.js +60 -0
- package/dataflow/v1/graph/diff.js +206 -0
- package/dataflow/v1/graph/edge.js +32 -0
- package/dataflow/v1/graph/graph.js +298 -0
- package/dataflow/v1/graph/index.js +21 -0
- package/dataflow/v1/graph/quads.js +27 -0
- package/dataflow/v1/graph/vertex.js +3 -0
- package/dataflow/v1/index.js +24 -0
- package/dataflow/v1/internal/info.js +16 -0
- package/dataflow/v1/internal/linker.js +255 -0
- package/dataflow/v1/internal/process/access.js +54 -0
- package/dataflow/v1/internal/process/expression-list.js +154 -0
- package/dataflow/v1/internal/process/functions/argument.js +46 -0
- package/dataflow/v1/internal/process/functions/exit-points.js +125 -0
- package/dataflow/v1/internal/process/functions/function-call.js +99 -0
- package/dataflow/v1/internal/process/functions/function-definition.js +176 -0
- package/dataflow/v1/internal/process/functions/parameter.js +47 -0
- package/dataflow/v1/internal/process/if-then-else.js +57 -0
- package/dataflow/v1/internal/process/loops/for-loop.js +54 -0
- package/dataflow/v1/internal/process/loops/repeat-loop.js +21 -0
- package/dataflow/v1/internal/process/loops/while-loop.js +31 -0
- package/dataflow/v1/internal/process/operators/assignment.js +129 -0
- package/dataflow/v1/internal/process/operators/non-assignment-binary-op.js +25 -0
- package/dataflow/v1/internal/process/operators/pipe.js +46 -0
- package/dataflow/v1/internal/process/operators/unary-op.js +10 -0
- package/dataflow/v1/internal/process/symbol.js +21 -0
- package/dataflow/v1/internal/process/uninteresting-leaf.js +9 -0
- package/dataflow/v1/processor.js +20 -0
- package/dataflow/v2/entry.js +11 -0
- package/flowr-1.3.7.tgz +0 -0
- package/flowr.d.ts +26 -0
- package/flowr.js +135 -0
- package/index.d.ts +6 -0
- package/index.js +23 -0
- package/package.json +384 -0
- package/r-bridge/index.d.ts +11 -0
- package/r-bridge/index.js +28 -0
- package/r-bridge/lang-4.x/ast/index.d.ts +2 -0
- package/r-bridge/lang-4.x/ast/index.js +19 -0
- package/r-bridge/lang-4.x/ast/model/collect.d.ts +9 -0
- package/r-bridge/lang-4.x/ast/model/collect.js +23 -0
- package/r-bridge/lang-4.x/ast/model/index.d.ts +6 -0
- package/r-bridge/lang-4.x/ast/model/index.js +23 -0
- package/r-bridge/lang-4.x/ast/model/model.d.ts +127 -0
- package/r-bridge/lang-4.x/ast/model/model.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/index.d.ts +21 -0
- package/r-bridge/lang-4.x/ast/model/nodes/index.js +38 -0
- package/r-bridge/lang-4.x/ast/model/nodes/info/index.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/model/nodes/info/index.js +27 -0
- package/r-bridge/lang-4.x/ast/model/nodes/info/r-delimiter.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/model/nodes/info/r-delimiter.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-access.d.ts +24 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-access.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-argument.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-argument.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.d.ts +25 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-break.d.ts +5 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-break.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-comment.d.ts +6 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-comment.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.d.ts +6 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-for-loop.d.ts +18 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-for-loop.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.d.ts +31 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-if-then-else.d.ts +9 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-if-then-else.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-line-directive.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-line-directive.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-logical.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-logical.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-next.d.ts +5 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-next.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +8 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-number.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-parameter.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-parameter.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-pipe.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-pipe.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-repeat-loop.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-repeat-loop.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-string.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.js +9 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.d.ts +18 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-while-loop.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-while-loop.js +3 -0
- package/r-bridge/lang-4.x/ast/model/operators.d.ts +46 -0
- package/r-bridge/lang-4.x/ast/model/operators.js +67 -0
- package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +81 -0
- package/r-bridge/lang-4.x/ast/model/processing/decorate.js +342 -0
- package/r-bridge/lang-4.x/ast/model/processing/fold.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/model/processing/fold.js +20 -0
- package/r-bridge/lang-4.x/ast/model/processing/index.d.ts +5 -0
- package/r-bridge/lang-4.x/ast/model/processing/index.js +22 -0
- package/r-bridge/lang-4.x/ast/model/processing/role.d.ts +41 -0
- package/r-bridge/lang-4.x/ast/model/processing/role.js +17 -0
- package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +61 -0
- package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.js +87 -0
- package/r-bridge/lang-4.x/ast/model/processing/visitor.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/model/processing/visitor.js +109 -0
- package/r-bridge/lang-4.x/ast/model/type.d.ts +206 -0
- package/r-bridge/lang-4.x/ast/model/type.js +18 -0
- package/r-bridge/lang-4.x/ast/model/versions.d.ts +9 -0
- package/r-bridge/lang-4.x/ast/model/versions.js +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/common/config.js +16 -0
- package/r-bridge/lang-4.x/ast/parser/xml/common/input-format.js +42 -0
- package/r-bridge/lang-4.x/ast/parser/xml/common/meta.js +118 -0
- package/r-bridge/lang-4.x/ast/parser/xml/common/xml-to-json.js +58 -0
- package/r-bridge/lang-4.x/ast/parser/xml/config.d.ts +25 -0
- package/r-bridge/lang-4.x/ast/parser/xml/config.js +16 -0
- package/r-bridge/lang-4.x/ast/parser/xml/data.d.ts +22 -0
- package/r-bridge/lang-4.x/ast/parser/xml/data.js +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/hooks.d.ts +292 -0
- package/r-bridge/lang-4.x/ast/parser/xml/hooks.js +136 -0
- package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +5 -0
- package/r-bridge/lang-4.x/ast/parser/xml/index.js +22 -0
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +32 -0
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +33 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/access.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/access.js +107 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then-else.d.ts +15 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then-else.js +32 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then.js +46 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.d.ts +2 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.js +19 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +65 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.d.ts +1 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/argument.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/argument.js +74 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/call.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/call.js +149 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.js +60 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.d.ts +2 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/parameter.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/parameter.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +27 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.js +72 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.d.ts +5 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.js +22 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.js +42 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.js +45 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/meta.d.ts +50 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/meta.js +118 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/binary.d.ts +8 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/binary.js +162 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.d.ts +6 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +59 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.d.ts +1 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.js +55 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +159 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.js +56 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.js +41 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/symbol.d.ts +14 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/symbol.js +56 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/xml-to-json.d.ts +9 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/xml-to-json.js +51 -0
- package/r-bridge/lang-4.x/ast/parser/xml/parser.d.ts +17 -0
- package/r-bridge/lang-4.x/ast/parser/xml/parser.js +30 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/data.js +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/hooks.js +136 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/index.js +22 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/access.js +107 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/if-then-else.js +32 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/if-then.js +46 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/index.js +19 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/expression/expression.js +65 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/expression/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/argument.js +74 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/call.js +149 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/definition.js +60 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/parameter.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/index.js +27 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/break.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/for.js +72 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/index.js +22 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/next.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/repeat.js +42 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/while.js +45 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/binary.js +162 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/special.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/unary.js +59 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/comment.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/line-directive.js +55 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/elements.js +159 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/root.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/single-element.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/number.js +56 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/string.js +41 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/symbol.js +56 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/normalize.js +30 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/data.js +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/access.js +95 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/expression.js +99 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/functions/argument.js +71 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/binary.js +30 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/index.js +19 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/unary.js +35 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/comment.js +25 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/line-directive.js +38 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/root.js +26 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/single-element.js +63 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/number.js +46 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/string.js +33 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/symbol.js +63 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/normalize.js +25 -0
- package/r-bridge/lang-4.x/index.d.ts +2 -0
- package/r-bridge/lang-4.x/index.js +19 -0
- package/r-bridge/lang-4.x/values.d.ts +39 -0
- package/r-bridge/lang-4.x/values.js +149 -0
- package/r-bridge/retriever.d.ts +48 -0
- package/r-bridge/retriever.js +71 -0
- package/r-bridge/shell.d.ts +147 -0
- package/r-bridge/shell.js +423 -0
- package/reconstruct/reconstruct.d.ts +28 -0
- package/reconstruct/reconstruct.js +448 -0
- package/slicing/criterion/collect-all.d.ts +36 -0
- package/slicing/criterion/collect-all.js +23 -0
- package/slicing/criterion/filters/all-variables.d.ts +2 -0
- package/slicing/criterion/filters/all-variables.js +63 -0
- package/slicing/criterion/filters/index.d.ts +1 -0
- package/slicing/criterion/filters/index.js +18 -0
- package/slicing/criterion/index.d.ts +3 -0
- package/slicing/criterion/index.js +20 -0
- package/slicing/criterion/parse.d.ts +20 -0
- package/slicing/criterion/parse.js +79 -0
- package/slicing/index.d.ts +3 -0
- package/slicing/index.js +20 -0
- package/slicing/static/index.d.ts +1 -0
- package/slicing/static/index.js +18 -0
- package/slicing/static/static-slicer.d.ts +29 -0
- package/slicing/static/static-slicer.js +186 -0
- package/statistics/features/common-syntax-probability.d.ts +30 -0
- package/statistics/features/common-syntax-probability.js +159 -0
- package/statistics/features/feature.d.ts +175 -0
- package/statistics/features/feature.js +30 -0
- package/statistics/features/index.d.ts +1 -0
- package/statistics/features/index.js +18 -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 +11 -0
- package/statistics/features/supported/assignments/assignments.js +53 -0
- package/statistics/features/supported/assignments/index.d.ts +1 -0
- package/statistics/features/supported/assignments/index.js +6 -0
- package/statistics/features/supported/assignments/post-process.d.ts +3 -0
- package/statistics/features/supported/assignments/post-process.js +125 -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/index.d.ts +1 -0
- package/statistics/features/supported/comments/index.js +6 -0
- package/statistics/features/supported/comments/post-process.d.ts +3 -0
- package/statistics/features/supported/comments/post-process.js +50 -0
- package/statistics/features/supported/control-flow/control-flow.d.ts +17 -0
- package/statistics/features/supported/control-flow/control-flow.js +67 -0
- package/statistics/features/supported/control-flow/index.d.ts +1 -0
- package/statistics/features/supported/control-flow/index.js +6 -0
- package/statistics/features/supported/control-flow/post-process.d.ts +3 -0
- package/statistics/features/supported/control-flow/post-process.js +65 -0
- package/statistics/features/supported/data-access/data-access.d.ts +15 -0
- package/statistics/features/supported/data-access/data-access.js +118 -0
- package/statistics/features/supported/data-access/index.d.ts +1 -0
- package/statistics/features/supported/data-access/index.js +6 -0
- package/statistics/features/supported/data-access/post-process.d.ts +3 -0
- package/statistics/features/supported/data-access/post-process.js +107 -0
- package/statistics/features/supported/defined-functions/defined-functions.d.ts +35 -0
- package/statistics/features/supported/defined-functions/defined-functions.js +139 -0
- package/statistics/features/supported/defined-functions/index.d.ts +1 -0
- package/statistics/features/supported/defined-functions/index.js +6 -0
- package/statistics/features/supported/defined-functions/post-process.d.ts +6 -0
- package/statistics/features/supported/defined-functions/post-process.js +177 -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/index.d.ts +1 -0
- package/statistics/features/supported/expression-list/index.js +6 -0
- package/statistics/features/supported/expression-list/post-process.d.ts +3 -0
- package/statistics/features/supported/expression-list/post-process.js +44 -0
- package/statistics/features/supported/index.d.ts +10 -0
- package/statistics/features/supported/index.js +27 -0
- package/statistics/features/supported/loops/index.d.ts +1 -0
- package/statistics/features/supported/loops/index.js +6 -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 +72 -0
- package/statistics/features/supported/used-functions/index.d.ts +1 -0
- package/statistics/features/supported/used-functions/index.js +6 -0
- package/statistics/features/supported/used-functions/post-process.d.ts +6 -0
- package/statistics/features/supported/used-functions/post-process.js +179 -0
- package/statistics/features/supported/used-functions/used-functions.d.ts +24 -0
- package/statistics/features/supported/used-functions/used-functions.js +95 -0
- package/statistics/features/supported/used-packages/index.d.ts +1 -0
- package/statistics/features/supported/used-packages/index.js +6 -0
- package/statistics/features/supported/used-packages/post-process.d.ts +3 -0
- package/statistics/features/supported/used-packages/post-process.js +121 -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/index.d.ts +1 -0
- package/statistics/features/supported/values/index.js +6 -0
- package/statistics/features/supported/values/post-process.d.ts +3 -0
- package/statistics/features/supported/values/post-process.js +72 -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/index.d.ts +1 -0
- package/statistics/features/supported/variables/index.js +6 -0
- package/statistics/features/supported/variables/post-process.d.ts +9 -0
- package/statistics/features/supported/variables/post-process.js +122 -0
- package/statistics/features/supported/variables/variables.d.ts +15 -0
- package/statistics/features/supported/variables/variables.js +70 -0
- package/statistics/index.d.ts +6 -0
- package/statistics/index.js +24 -0
- package/statistics/meta-statistics.d.ts +33 -0
- package/statistics/meta-statistics.js +17 -0
- package/statistics/output/ansi.d.ts +50 -0
- package/statistics/output/ansi.js +58 -0
- package/statistics/output/file-provider.d.ts +37 -0
- package/statistics/output/file-provider.js +97 -0
- package/statistics/output/index.d.ts +4 -0
- package/statistics/output/index.js +21 -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 +24 -0
- package/statistics/statistics.js +109 -0
- package/util/args.d.ts +14 -0
- package/util/args.js +67 -0
- package/util/arrays.d.ts +44 -0
- package/util/arrays.js +145 -0
- package/util/assert.d.ts +11 -0
- package/util/assert.js +35 -0
- package/util/bimap.d.ts +24 -0
- package/util/bimap.js +71 -0
- package/util/cfg.d.ts +55 -0
- package/util/cfg.js +498 -0
- package/util/defaultmap.d.ts +34 -0
- package/util/defaultmap.js +65 -0
- package/util/diff.d.ts +43 -0
- package/util/diff.js +28 -0
- package/util/files.d.ts +54 -0
- package/util/files.js +144 -0
- package/util/json.d.ts +2 -0
- package/util/json.js +28 -0
- package/util/log.d.ts +22 -0
- package/util/log.js +48 -0
- package/util/mermaid/ast.d.ts +6 -0
- package/util/mermaid/ast.js +28 -0
- package/util/mermaid/cfg.d.ts +7 -0
- package/util/mermaid/cfg.js +44 -0
- package/util/mermaid/dfg.d.ts +21 -0
- package/util/mermaid/dfg.js +165 -0
- package/util/mermaid/index.d.ts +3 -0
- package/util/mermaid/index.js +20 -0
- package/util/mermaid/mermaid.d.ts +7 -0
- package/util/mermaid/mermaid.js +24 -0
- package/util/numbers.d.ts +1 -0
- package/util/numbers.js +9 -0
- package/util/objects.d.ts +17 -0
- package/util/objects.js +60 -0
- package/util/os.d.ts +2 -0
- package/util/os.js +25 -0
- package/util/parallel.d.ts +30 -0
- package/util/parallel.js +103 -0
- package/util/quads.d.ts +92 -0
- package/util/quads.js +189 -0
- package/util/random.d.ts +4 -0
- package/util/random.js +22 -0
- package/util/range.d.ts +32 -0
- package/util/range.js +61 -0
- package/util/set.d.ts +8 -0
- package/util/set.js +32 -0
- package/util/strings.d.ts +12 -0
- package/util/strings.js +41 -0
- package/util/summarizer/auto-detect.d.ts +2 -0
- package/util/summarizer/auto-detect.js +32 -0
- package/util/summarizer/benchmark/benchmark-summarizer.js +208 -0
- package/util/summarizer/benchmark/data.d.ts +66 -0
- package/util/summarizer/benchmark/data.js +13 -0
- package/util/summarizer/benchmark/first-phase/input.d.ts +2 -0
- package/util/summarizer/benchmark/first-phase/input.js +59 -0
- package/util/summarizer/benchmark/first-phase/process.d.ts +10 -0
- package/util/summarizer/benchmark/first-phase/process.js +208 -0
- package/util/summarizer/benchmark/second-phase/graph.d.ts +2 -0
- package/util/summarizer/benchmark/second-phase/graph.js +54 -0
- package/util/summarizer/benchmark/second-phase/process.d.ts +4 -0
- package/util/summarizer/benchmark/second-phase/process.js +89 -0
- package/util/summarizer/benchmark/summarizer.d.ts +34 -0
- package/util/summarizer/benchmark/summarizer.js +53 -0
- package/util/summarizer/statistics/first-phase/process.d.ts +6 -0
- package/util/summarizer/statistics/first-phase/process.js +81 -0
- package/util/summarizer/statistics/post-process/clusterer.d.ts +26 -0
- package/util/summarizer/statistics/post-process/clusterer.js +43 -0
- package/util/summarizer/statistics/post-process/file-based-count.d.ts +17 -0
- package/util/summarizer/statistics/post-process/file-based-count.js +49 -0
- package/util/summarizer/statistics/post-process/histogram.d.ts +59 -0
- package/util/summarizer/statistics/post-process/histogram.js +128 -0
- package/util/summarizer/statistics/post-process/index.d.ts +4 -0
- package/util/summarizer/statistics/post-process/index.js +21 -0
- package/util/summarizer/statistics/post-process/post-process-output.d.ts +16 -0
- package/util/summarizer/statistics/post-process/post-process-output.js +104 -0
- package/util/summarizer/statistics/second-phase/process.d.ts +11 -0
- package/util/summarizer/statistics/second-phase/process.js +117 -0
- package/util/summarizer/statistics/summarizer.d.ts +34 -0
- package/util/summarizer/statistics/summarizer.js +135 -0
- package/util/summarizer/summarizer.d.ts +25 -0
- package/util/summarizer/summarizer.js +13 -0
- package/util/time.d.ts +6 -0
- package/util/time.js +13 -0
package/util/files.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { RParseRequestFromFile } from '../r-bridge';
|
|
3
|
+
/**
|
|
4
|
+
* Represents a table, identified by a header and a list of rows.
|
|
5
|
+
*/
|
|
6
|
+
export interface Table {
|
|
7
|
+
header: string[];
|
|
8
|
+
rows: string[][];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Retrieves all files in the given directory recursively
|
|
12
|
+
* @param dir - Directory-path to start the search from
|
|
13
|
+
* @param suffix - Suffix of the files to be retrieved
|
|
14
|
+
* Based on {@link https://stackoverflow.com/a/45130990}
|
|
15
|
+
*/
|
|
16
|
+
export declare function getAllFiles(dir: string, suffix?: RegExp): AsyncGenerator<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Retrieves all R files in a given directory (asynchronously)
|
|
19
|
+
*
|
|
20
|
+
*
|
|
21
|
+
* @param input - directory-path to start the search from, can be a file as well. Will just return the file then.
|
|
22
|
+
* @param limit - limit the number of files to be retrieved
|
|
23
|
+
*
|
|
24
|
+
* @returns Number of files processed (normally ≤ `limit`, is ≥ `limit` if limit was reached).
|
|
25
|
+
* Will be `1`, if `input` is an R file (and `0` if it isn't).
|
|
26
|
+
*
|
|
27
|
+
* @see getAllFiles
|
|
28
|
+
*/
|
|
29
|
+
export declare function allRFiles(input: string, limit?: number): AsyncGenerator<RParseRequestFromFile, number>;
|
|
30
|
+
/**
|
|
31
|
+
* Retrieves all R files in a given set of directories and files (asynchronously)
|
|
32
|
+
*
|
|
33
|
+
* @param inputs - Files or directories to validate for R-files
|
|
34
|
+
* @param limit - Limit the number of files to be retrieved
|
|
35
|
+
* @returns Number of files processed (≤ limit)
|
|
36
|
+
*
|
|
37
|
+
* @see allRFiles
|
|
38
|
+
*/
|
|
39
|
+
export declare function allRFilesFrom(inputs: string[], limit?: number): AsyncGenerator<RParseRequestFromFile, number>;
|
|
40
|
+
export declare function writeTableAsCsv(table: Table, file: string, sep?: string, newline?: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Reads a file line by line and calls the given function for each line.
|
|
43
|
+
* The `lineNumber` starts at `0`.
|
|
44
|
+
*
|
|
45
|
+
* See {@link readLineByLineSync} for a synchronous version.
|
|
46
|
+
*/
|
|
47
|
+
export declare function readLineByLine(filePath: string, onLine: (line: Buffer, lineNumber: number) => Promise<void>): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Reads a file line by line and calls the given function for each line.
|
|
50
|
+
* The `lineNumber` starts at `0`.
|
|
51
|
+
*
|
|
52
|
+
* See {@link readLineByLine} for an asynchronous version.
|
|
53
|
+
*/
|
|
54
|
+
export declare function readLineByLineSync(filePath: string, onLine: (line: Buffer, lineNumber: number) => void): void;
|
package/util/files.js
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
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.readLineByLineSync = exports.readLineByLine = exports.writeTableAsCsv = exports.allRFilesFrom = exports.allRFiles = exports.getAllFiles = void 0;
|
|
30
|
+
const fs_1 = __importStar(require("fs"));
|
|
31
|
+
const path_1 = __importDefault(require("path"));
|
|
32
|
+
const log_1 = require("./log");
|
|
33
|
+
const n_readlines_1 = __importDefault(require("n-readlines"));
|
|
34
|
+
/**
|
|
35
|
+
* Retrieves all files in the given directory recursively
|
|
36
|
+
* @param dir - Directory-path to start the search from
|
|
37
|
+
* @param suffix - Suffix of the files to be retrieved
|
|
38
|
+
* Based on {@link https://stackoverflow.com/a/45130990}
|
|
39
|
+
*/
|
|
40
|
+
async function* getAllFiles(dir, suffix = /.*/) {
|
|
41
|
+
const entries = await fs_1.promises.readdir(dir, { withFileTypes: true, recursive: false });
|
|
42
|
+
for (const subEntries of entries) {
|
|
43
|
+
const res = path_1.default.resolve(dir, subEntries.name);
|
|
44
|
+
if (subEntries.isDirectory()) {
|
|
45
|
+
yield* getAllFiles(res, suffix);
|
|
46
|
+
}
|
|
47
|
+
else if (suffix.test(subEntries.name)) {
|
|
48
|
+
yield res;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.getAllFiles = getAllFiles;
|
|
53
|
+
const rFileRegex = /\.[rR]$/;
|
|
54
|
+
/**
|
|
55
|
+
* Retrieves all R files in a given directory (asynchronously)
|
|
56
|
+
*
|
|
57
|
+
*
|
|
58
|
+
* @param input - directory-path to start the search from, can be a file as well. Will just return the file then.
|
|
59
|
+
* @param limit - limit the number of files to be retrieved
|
|
60
|
+
*
|
|
61
|
+
* @returns Number of files processed (normally ≤ `limit`, is ≥ `limit` if limit was reached).
|
|
62
|
+
* Will be `1`, if `input` is an R file (and `0` if it isn't).
|
|
63
|
+
*
|
|
64
|
+
* @see getAllFiles
|
|
65
|
+
*/
|
|
66
|
+
async function* allRFiles(input, limit = Number.MAX_VALUE) {
|
|
67
|
+
let count = 0;
|
|
68
|
+
if (fs_1.default.statSync(input).isFile()) {
|
|
69
|
+
if (rFileRegex.test(input)) {
|
|
70
|
+
yield { request: 'file', content: input };
|
|
71
|
+
return 1;
|
|
72
|
+
}
|
|
73
|
+
log_1.log.warn(`Input ${input} is not an R file`);
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
for await (const f of getAllFiles(input, rFileRegex)) {
|
|
77
|
+
if (++count > limit) {
|
|
78
|
+
return count;
|
|
79
|
+
}
|
|
80
|
+
yield { request: 'file', content: f };
|
|
81
|
+
}
|
|
82
|
+
return count;
|
|
83
|
+
}
|
|
84
|
+
exports.allRFiles = allRFiles;
|
|
85
|
+
/**
|
|
86
|
+
* Retrieves all R files in a given set of directories and files (asynchronously)
|
|
87
|
+
*
|
|
88
|
+
* @param inputs - Files or directories to validate for R-files
|
|
89
|
+
* @param limit - Limit the number of files to be retrieved
|
|
90
|
+
* @returns Number of files processed (≤ limit)
|
|
91
|
+
*
|
|
92
|
+
* @see allRFiles
|
|
93
|
+
*/
|
|
94
|
+
async function* allRFilesFrom(inputs, limit) {
|
|
95
|
+
limit ??= Number.MAX_VALUE;
|
|
96
|
+
if (inputs.length === 0) {
|
|
97
|
+
log_1.log.info('No inputs given, nothing to do');
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
let count = 0;
|
|
101
|
+
for (const input of inputs) {
|
|
102
|
+
count += yield* allRFiles(input, limit - count);
|
|
103
|
+
}
|
|
104
|
+
return count;
|
|
105
|
+
}
|
|
106
|
+
exports.allRFilesFrom = allRFilesFrom;
|
|
107
|
+
function writeTableAsCsv(table, file, sep = ',', newline = '\n') {
|
|
108
|
+
const csv = [table.header.join(sep), ...table.rows.map(row => row.join(sep))].join(newline);
|
|
109
|
+
fs_1.default.writeFileSync(file, csv);
|
|
110
|
+
}
|
|
111
|
+
exports.writeTableAsCsv = writeTableAsCsv;
|
|
112
|
+
/**
|
|
113
|
+
* Reads a file line by line and calls the given function for each line.
|
|
114
|
+
* The `lineNumber` starts at `0`.
|
|
115
|
+
*
|
|
116
|
+
* See {@link readLineByLineSync} for a synchronous version.
|
|
117
|
+
*/
|
|
118
|
+
async function readLineByLine(filePath, onLine) {
|
|
119
|
+
const reader = new n_readlines_1.default(filePath);
|
|
120
|
+
let line;
|
|
121
|
+
let counter = 0;
|
|
122
|
+
// eslint-disable-next-line no-cond-assign
|
|
123
|
+
while (line = reader.next()) {
|
|
124
|
+
await onLine(line, counter++);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.readLineByLine = readLineByLine;
|
|
128
|
+
/**
|
|
129
|
+
* Reads a file line by line and calls the given function for each line.
|
|
130
|
+
* The `lineNumber` starts at `0`.
|
|
131
|
+
*
|
|
132
|
+
* See {@link readLineByLine} for an asynchronous version.
|
|
133
|
+
*/
|
|
134
|
+
function readLineByLineSync(filePath, onLine) {
|
|
135
|
+
const reader = new n_readlines_1.default(filePath);
|
|
136
|
+
let line;
|
|
137
|
+
let counter = 0;
|
|
138
|
+
// eslint-disable-next-line no-cond-assign
|
|
139
|
+
while (line = reader.next()) {
|
|
140
|
+
onLine(line, counter++);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
exports.readLineByLineSync = readLineByLineSync;
|
|
144
|
+
//# sourceMappingURL=files.js.map
|
package/util/json.d.ts
ADDED
package/util/json.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.jsonRetriever = exports.jsonReplacer = void 0;
|
|
4
|
+
// to get the types within JSON.stringify
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
6
|
+
function jsonReplacer(key, value) {
|
|
7
|
+
if (value instanceof Map || value instanceof Set) {
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
9
|
+
return [...value];
|
|
10
|
+
}
|
|
11
|
+
else if (typeof value === 'bigint') {
|
|
12
|
+
return `${value.toString()}n`;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.jsonReplacer = jsonReplacer;
|
|
19
|
+
function jsonRetriever(key, value) {
|
|
20
|
+
if (typeof value === 'string' && value.endsWith('n')) {
|
|
21
|
+
return BigInt(value.slice(0, -1));
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.jsonRetriever = jsonRetriever;
|
|
28
|
+
//# sourceMappingURL=json.js.map
|
package/util/log.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ILogObj, type ISettingsParam, Logger } from 'tslog';
|
|
2
|
+
import { type Options } from 'rotating-file-stream';
|
|
3
|
+
export declare class FlowrLogger extends Logger<ILogObj> {
|
|
4
|
+
/** by keeping track of all children we can propagate updates of the settings (e.g., in tests) */
|
|
5
|
+
private readonly childLoggers;
|
|
6
|
+
getSubLogger(settings?: ISettingsParam<ILogObj>, logObj?: ILogObj): Logger<ILogObj>;
|
|
7
|
+
updateSettings(updater: (logger: Logger<ILogObj>) => void): void;
|
|
8
|
+
/**
|
|
9
|
+
* make the logger log to a file as well
|
|
10
|
+
*/
|
|
11
|
+
logToFile(filename?: string, options?: Options): void;
|
|
12
|
+
}
|
|
13
|
+
export declare const enum LogLevel {
|
|
14
|
+
Silly = 0,
|
|
15
|
+
Trace = 1,
|
|
16
|
+
Debug = 2,
|
|
17
|
+
Info = 3,
|
|
18
|
+
Warn = 4,
|
|
19
|
+
Error = 5,
|
|
20
|
+
Fatal = 6
|
|
21
|
+
}
|
|
22
|
+
export declare const log: FlowrLogger;
|
package/util/log.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.log = exports.FlowrLogger = void 0;
|
|
4
|
+
const tslog_1 = require("tslog");
|
|
5
|
+
const rotating_file_stream_1 = require("rotating-file-stream");
|
|
6
|
+
class FlowrLogger extends tslog_1.Logger {
|
|
7
|
+
/** by keeping track of all children we can propagate updates of the settings (e.g., in tests) */
|
|
8
|
+
childLoggers = [];
|
|
9
|
+
getSubLogger(settings, logObj) {
|
|
10
|
+
const newSubLogger = super.getSubLogger(settings, logObj);
|
|
11
|
+
this.childLoggers.push(newSubLogger);
|
|
12
|
+
return newSubLogger;
|
|
13
|
+
}
|
|
14
|
+
updateSettings(updater) {
|
|
15
|
+
updater(this);
|
|
16
|
+
this.childLoggers.forEach((child) => {
|
|
17
|
+
updater(child);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* make the logger log to a file as well
|
|
22
|
+
*/
|
|
23
|
+
logToFile(filename = 'flowr.log', options = {
|
|
24
|
+
size: '10M',
|
|
25
|
+
interval: '1d',
|
|
26
|
+
compress: 'gzip',
|
|
27
|
+
}) {
|
|
28
|
+
const stream = (0, rotating_file_stream_1.createStream)(filename, options);
|
|
29
|
+
exports.log.attachTransport((logObj) => {
|
|
30
|
+
stream.write(`${JSON.stringify(logObj)}\n`);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.FlowrLogger = FlowrLogger;
|
|
35
|
+
function getActiveLog() {
|
|
36
|
+
return new FlowrLogger({
|
|
37
|
+
type: 'pretty',
|
|
38
|
+
name: 'main',
|
|
39
|
+
stylePrettyLogs: true,
|
|
40
|
+
prettyLogStyles: {
|
|
41
|
+
logLevelName: {
|
|
42
|
+
'*': ['bold', 'black', 'dim']
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
exports.log = getActiveLog();
|
|
48
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { RNodeWithParent } from '../../r-bridge';
|
|
2
|
+
export declare function normalizedAstToMermaid(ast: RNodeWithParent, prefix?: string): string;
|
|
3
|
+
/**
|
|
4
|
+
* Use mermaid to visualize the normalized AST.
|
|
5
|
+
*/
|
|
6
|
+
export declare function normalizedAstToMermaidUrl(ast: RNodeWithParent, prefix?: string): string;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizedAstToMermaidUrl = exports.normalizedAstToMermaid = void 0;
|
|
4
|
+
const r_bridge_1 = require("../../r-bridge");
|
|
5
|
+
const mermaid_1 = require("./mermaid");
|
|
6
|
+
function normalizedAstToMermaid(ast, prefix = '') {
|
|
7
|
+
let output = prefix + 'flowchart TD\n';
|
|
8
|
+
(0, r_bridge_1.visitAst)(ast, n => {
|
|
9
|
+
const name = `${n.type} (${n.info.id})\\n${n.lexeme ?? ' '}`;
|
|
10
|
+
output += ` n${n.info.id}(["${(0, mermaid_1.escapeMarkdown)(name)}"])\n`;
|
|
11
|
+
if (n.info.parent !== undefined) {
|
|
12
|
+
const context = n.info;
|
|
13
|
+
const roleSuffix = context.role === "expr-list-child" /* RoleInParent.ExpressionListChild */ || context.role === "call-argument" /* RoleInParent.FunctionCallArgument */ || context.role === "function-def-param" /* RoleInParent.FunctionDefinitionParameter */ ? `-${context.index}` : '';
|
|
14
|
+
output += ` n${n.info.parent} -->|"${context.role}${roleSuffix}"| n${n.info.id}\n`;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
});
|
|
18
|
+
return output;
|
|
19
|
+
}
|
|
20
|
+
exports.normalizedAstToMermaid = normalizedAstToMermaid;
|
|
21
|
+
/**
|
|
22
|
+
* Use mermaid to visualize the normalized AST.
|
|
23
|
+
*/
|
|
24
|
+
function normalizedAstToMermaidUrl(ast, prefix = '') {
|
|
25
|
+
return (0, mermaid_1.mermaidCodeToUrl)(normalizedAstToMermaid(ast, prefix));
|
|
26
|
+
}
|
|
27
|
+
exports.normalizedAstToMermaidUrl = normalizedAstToMermaidUrl;
|
|
28
|
+
//# sourceMappingURL=ast.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { NormalizedAst } from '../../r-bridge';
|
|
2
|
+
import { ControlFlowInformation } from '../cfg';
|
|
3
|
+
export declare function cfgToMermaid(cfg: ControlFlowInformation, normalizedAst: NormalizedAst, prefix?: string): string;
|
|
4
|
+
/**
|
|
5
|
+
* Use mermaid to visualize the normalized AST.
|
|
6
|
+
*/
|
|
7
|
+
export declare function cfgToMermaidUrl(cfg: ControlFlowInformation, normalizedAst: NormalizedAst, prefix?: string): string;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cfgToMermaidUrl = exports.cfgToMermaid = void 0;
|
|
4
|
+
const mermaid_1 = require("./mermaid");
|
|
5
|
+
function getLexeme(n) {
|
|
6
|
+
return n ? n.info.fullLexeme ?? n.lexeme ?? '<unknown>' : '';
|
|
7
|
+
}
|
|
8
|
+
function cfgToMermaid(cfg, normalizedAst, prefix = '') {
|
|
9
|
+
let output = prefix + 'flowchart TD\n';
|
|
10
|
+
for (const [id, vertex] of cfg.graph.vertices()) {
|
|
11
|
+
const normalizedVertex = normalizedAst.idMap.get(id);
|
|
12
|
+
const content = getLexeme(normalizedVertex);
|
|
13
|
+
if (content.length > 0) {
|
|
14
|
+
const name = `"\`${(0, mermaid_1.escapeMarkdown)(vertex.name)} (${id})\n${(0, mermaid_1.escapeMarkdown)(JSON.stringify(content))}\`"`;
|
|
15
|
+
output += ` n${id}[${name}]\n`;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
output += ` n${id}(( ))\n`;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
for (const [from, targets] of cfg.graph.edges()) {
|
|
22
|
+
for (const [to, edge] of targets) {
|
|
23
|
+
const edgeType = edge.label === 'CD' ? '-->' : '-.->';
|
|
24
|
+
const edgeSuffix = edge.label === 'CD' ? ` (${edge.when})` : '';
|
|
25
|
+
output += ` n${from} ${edgeType}|"${(0, mermaid_1.escapeMarkdown)(edge.label)}${edgeSuffix}"| n${to}\n`;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
for (const entryPoint of cfg.entryPoints) {
|
|
29
|
+
output += ` style n${entryPoint} stroke:cyan,stroke-width:6.5px;`;
|
|
30
|
+
}
|
|
31
|
+
for (const exitPoint of cfg.exitPoints) {
|
|
32
|
+
output += ` style n${exitPoint} stroke:green,stroke-width:6.5px;`;
|
|
33
|
+
}
|
|
34
|
+
return output;
|
|
35
|
+
}
|
|
36
|
+
exports.cfgToMermaid = cfgToMermaid;
|
|
37
|
+
/**
|
|
38
|
+
* Use mermaid to visualize the normalized AST.
|
|
39
|
+
*/
|
|
40
|
+
function cfgToMermaidUrl(cfg, normalizedAst, prefix = '') {
|
|
41
|
+
return (0, mermaid_1.mermaidCodeToUrl)(cfgToMermaid(cfg, normalizedAst, prefix));
|
|
42
|
+
}
|
|
43
|
+
exports.cfgToMermaidUrl = cfgToMermaidUrl;
|
|
44
|
+
//# sourceMappingURL=cfg.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { NodeId } from '../../r-bridge';
|
|
2
|
+
import { SourceRange } from '../range';
|
|
3
|
+
import { DataflowGraph, DataflowMap } from '../../dataflow';
|
|
4
|
+
export declare function formatRange(range: SourceRange | undefined): string;
|
|
5
|
+
export declare function graphToMermaid(graph: DataflowGraph, dataflowIdMap: DataflowMap | undefined, prefix?: string | null, idPrefix?: string, includeEnvironments?: boolean, mark?: Set<NodeId>, rootGraph?: DataflowGraph): string;
|
|
6
|
+
/**
|
|
7
|
+
* Converts a dataflow graph to a mermaid url that visualizes the graph.
|
|
8
|
+
*
|
|
9
|
+
* @param graph - The graph to convert
|
|
10
|
+
* @param dataflowIdMap - ID map to use to get access to the graph id mappings
|
|
11
|
+
* @param includeEnvironments - Whether to include the environments in the mermaid graph code
|
|
12
|
+
* @param mark - Special nodes to mark (e.g. those included in the slice)
|
|
13
|
+
*/
|
|
14
|
+
export declare function graphToMermaidUrl(graph: DataflowGraph, dataflowIdMap: DataflowMap, includeEnvironments?: boolean, mark?: Set<NodeId>): string;
|
|
15
|
+
export interface LabeledDiffGraph {
|
|
16
|
+
label: string;
|
|
17
|
+
graph: DataflowGraph;
|
|
18
|
+
}
|
|
19
|
+
/** uses same id map but ensures, it is different from the rhs so that mermaid can work with that */
|
|
20
|
+
export declare function diffGraphsToMermaid(left: LabeledDiffGraph, right: LabeledDiffGraph, dataflowIdMap: DataflowMap | undefined, prefix: string): string;
|
|
21
|
+
export declare function diffGraphsToMermaidUrl(left: LabeledDiffGraph, right: LabeledDiffGraph, dataflowIdMap: DataflowMap | undefined, prefix: string): string;
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.diffGraphsToMermaidUrl = exports.diffGraphsToMermaid = exports.graphToMermaidUrl = exports.graphToMermaid = exports.formatRange = void 0;
|
|
4
|
+
const dataflow_1 = require("../../dataflow");
|
|
5
|
+
const assert_1 = require("../assert");
|
|
6
|
+
const json_1 = require("../json");
|
|
7
|
+
const mermaid_1 = require("./mermaid");
|
|
8
|
+
function formatRange(range) {
|
|
9
|
+
if (range === undefined) {
|
|
10
|
+
return '??';
|
|
11
|
+
}
|
|
12
|
+
return `${range.start.line}.${range.start.column}-${range.end.line}.${range.end.column}`;
|
|
13
|
+
}
|
|
14
|
+
exports.formatRange = formatRange;
|
|
15
|
+
function scopeToMermaid(scope, when) {
|
|
16
|
+
const whenText = when === 'always' ? '' : `, ${when}`;
|
|
17
|
+
return `, *${scope.replace('<', '#lt;')}${whenText}*`;
|
|
18
|
+
}
|
|
19
|
+
function createArtificialExitPoints(exitPoints, mermaid, dataflowIdMap, idPrefix) {
|
|
20
|
+
for (const exitPoint of exitPoints) {
|
|
21
|
+
if (!mermaid.rootGraph.hasNode(exitPoint, true)) {
|
|
22
|
+
const node = dataflowIdMap.get(exitPoint);
|
|
23
|
+
(0, assert_1.guard)(node !== undefined, 'exit point not found');
|
|
24
|
+
mermaid.nodeLines.push(` ${idPrefix}${exitPoint}{{"${node.lexeme ?? '??'} (${exitPoint})\n ${formatRange(dataflowIdMap.get(exitPoint)?.location)}"}}`);
|
|
25
|
+
}
|
|
26
|
+
mermaid.nodeLines.push(` style ${idPrefix}${exitPoint} stroke-width:6.5px;`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function subflowToMermaid(nodeId, exitPoints, subflow, dataflowIdMap, mermaid, idPrefix = '') {
|
|
30
|
+
if (subflow === undefined) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const subflowId = `${idPrefix}flow-${nodeId}`;
|
|
34
|
+
mermaid.nodeLines.push(`\nsubgraph "${subflowId}" [function ${nodeId}]`);
|
|
35
|
+
const subgraph = graphToMermaidGraph(subflow.graph, mermaid.rootGraph, dataflowIdMap, null, idPrefix, mermaid.includeEnvironments, mermaid.mark, mermaid.rootGraph);
|
|
36
|
+
mermaid.nodeLines.push(...subgraph.nodeLines);
|
|
37
|
+
mermaid.edgeLines.push(...subgraph.edgeLines);
|
|
38
|
+
for (const [color, pool] of [['purple', subflow.in], ['green', subflow.out], ['orange', subflow.unknownReferences]]) {
|
|
39
|
+
for (const out of pool) {
|
|
40
|
+
if (!mermaid.mark?.has(out.nodeId)) {
|
|
41
|
+
// in/out/active for unmarked
|
|
42
|
+
mermaid.nodeLines.push(` style ${idPrefix}${out.nodeId} stroke:${color},stroke-width:4px; `);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (dataflowIdMap !== undefined) {
|
|
47
|
+
createArtificialExitPoints(exitPoints, mermaid, dataflowIdMap, idPrefix);
|
|
48
|
+
}
|
|
49
|
+
mermaid.nodeLines.push('end');
|
|
50
|
+
mermaid.edgeLines.push(`${idPrefix}${nodeId} -.-|function| ${subflowId}\n`);
|
|
51
|
+
}
|
|
52
|
+
function printArg(arg) {
|
|
53
|
+
if (arg === 'empty') {
|
|
54
|
+
return '';
|
|
55
|
+
}
|
|
56
|
+
if (arg === undefined || arg === '<value>') {
|
|
57
|
+
return '??';
|
|
58
|
+
}
|
|
59
|
+
return `${arg.nodeId}`;
|
|
60
|
+
}
|
|
61
|
+
function displayFunctionArgMapping(argMapping) {
|
|
62
|
+
const result = [];
|
|
63
|
+
for (const arg of argMapping) {
|
|
64
|
+
result.push(Array.isArray(arg) ? `${arg[0]} -> ${printArg(arg[1])}` : `${printArg(arg)}`);
|
|
65
|
+
}
|
|
66
|
+
return result.length === 0 ? '' : `\n (${result.join(', ')})`;
|
|
67
|
+
}
|
|
68
|
+
function encodeEdge(from, to, types, attribute) {
|
|
69
|
+
// sort from and to for same edges and relates be order independent
|
|
70
|
+
if (types.has(dataflow_1.EdgeType.SameReadRead) || types.has(dataflow_1.EdgeType.SameDefDef) || types.has(dataflow_1.EdgeType.Relates)) {
|
|
71
|
+
if (from > to) {
|
|
72
|
+
({ from, to } = { from: to, to: from });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return `${from}->${to}["${[...types].join(':')} (${attribute})"]`;
|
|
76
|
+
}
|
|
77
|
+
function mermaidNodeBrackets(def, fCall) {
|
|
78
|
+
let open;
|
|
79
|
+
let close;
|
|
80
|
+
if (def) {
|
|
81
|
+
open = '[';
|
|
82
|
+
close = ']';
|
|
83
|
+
}
|
|
84
|
+
else if (fCall) {
|
|
85
|
+
open = '[[';
|
|
86
|
+
close = ']]';
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
open = '([';
|
|
90
|
+
close = '])';
|
|
91
|
+
}
|
|
92
|
+
return { open, close };
|
|
93
|
+
}
|
|
94
|
+
function nodeToMermaid(graph, info, mermaid, id, idPrefix, dataflowIdMap, mark) {
|
|
95
|
+
const def = info.tag === 'variable-definition' || info.tag === 'function-definition';
|
|
96
|
+
const fCall = info.tag === 'function-call';
|
|
97
|
+
const defText = def ? scopeToMermaid(info.scope, info.when) : '';
|
|
98
|
+
const { open, close } = mermaidNodeBrackets(def, fCall);
|
|
99
|
+
if (mermaid.includeEnvironments) {
|
|
100
|
+
mermaid.nodeLines.push(` %% ${id}: ${JSON.stringify(info.environment, json_1.jsonReplacer)}`);
|
|
101
|
+
}
|
|
102
|
+
mermaid.nodeLines.push(` ${idPrefix}${id}${open}"\`${(0, mermaid_1.escapeMarkdown)(info.name)} (${id}${defText})\n *${formatRange(dataflowIdMap?.get(id)?.location)}*${fCall ? displayFunctionArgMapping(info.args) : ''}\`"${close}`);
|
|
103
|
+
if (mark?.has(id)) {
|
|
104
|
+
mermaid.nodeLines.push(` style ${idPrefix}${id} stroke:black,stroke-width:7px; `);
|
|
105
|
+
}
|
|
106
|
+
const edges = mermaid.rootGraph.get(id, true);
|
|
107
|
+
(0, assert_1.guard)(edges !== undefined, `node ${id} must be found`);
|
|
108
|
+
for (const [target, edge] of [...edges[1]]) {
|
|
109
|
+
const dotEdge = edge.types.has(dataflow_1.EdgeType.SameDefDef) || edge.types.has(dataflow_1.EdgeType.SameReadRead) || edge.types.has(dataflow_1.EdgeType.Relates);
|
|
110
|
+
const edgeId = encodeEdge(idPrefix + id, idPrefix + target, edge.types, edge.attribute);
|
|
111
|
+
if (!mermaid.presentEdges.has(edgeId)) {
|
|
112
|
+
mermaid.presentEdges.add(edgeId);
|
|
113
|
+
mermaid.edgeLines.push(` ${idPrefix}${id} ${dotEdge ? '-.-' : '-->'}|"${[...edge.types].join(', ')} (${edge.attribute})"| ${idPrefix}${target}`);
|
|
114
|
+
if (target === dataflow_1.BuiltIn) {
|
|
115
|
+
mermaid.hasBuiltIn = true;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (info.tag === 'function-definition') {
|
|
120
|
+
subflowToMermaid(id, info.exitPoints, info.subflow, dataflowIdMap, mermaid, idPrefix);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// make the passing of root ids more performant again
|
|
124
|
+
function graphToMermaidGraph(rootIds, graph, dataflowIdMap, prefix = 'flowchart TD', idPrefix = '', includeEnvironments = true, mark, rootGraph) {
|
|
125
|
+
const mermaid = { nodeLines: prefix === null ? [] : [prefix], edgeLines: [], presentEdges: new Set(), hasBuiltIn: false, mark, rootGraph: rootGraph ?? graph, includeEnvironments };
|
|
126
|
+
for (const [id, info] of graph.vertices(true)) {
|
|
127
|
+
if (rootIds.has(id)) {
|
|
128
|
+
nodeToMermaid(graph, info, mermaid, id, idPrefix, dataflowIdMap, mark);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (mermaid.hasBuiltIn) {
|
|
132
|
+
mermaid.nodeLines.push(` ${idPrefix}${dataflow_1.BuiltIn}["Built-in"]`);
|
|
133
|
+
}
|
|
134
|
+
return mermaid;
|
|
135
|
+
}
|
|
136
|
+
function graphToMermaid(graph, dataflowIdMap, prefix = 'flowchart TD', idPrefix = '', includeEnvironments, mark, rootGraph) {
|
|
137
|
+
const mermaid = graphToMermaidGraph(graph.rootIds(), graph, dataflowIdMap, prefix, idPrefix, includeEnvironments, mark, rootGraph);
|
|
138
|
+
return `${mermaid.nodeLines.join('\n')}\n${mermaid.edgeLines.join('\n')}`;
|
|
139
|
+
}
|
|
140
|
+
exports.graphToMermaid = graphToMermaid;
|
|
141
|
+
/**
|
|
142
|
+
* Converts a dataflow graph to a mermaid url that visualizes the graph.
|
|
143
|
+
*
|
|
144
|
+
* @param graph - The graph to convert
|
|
145
|
+
* @param dataflowIdMap - ID map to use to get access to the graph id mappings
|
|
146
|
+
* @param includeEnvironments - Whether to include the environments in the mermaid graph code
|
|
147
|
+
* @param mark - Special nodes to mark (e.g. those included in the slice)
|
|
148
|
+
*/
|
|
149
|
+
function graphToMermaidUrl(graph, dataflowIdMap, includeEnvironments, mark) {
|
|
150
|
+
return (0, mermaid_1.mermaidCodeToUrl)(graphToMermaid(graph, dataflowIdMap, undefined, undefined, includeEnvironments, mark));
|
|
151
|
+
}
|
|
152
|
+
exports.graphToMermaidUrl = graphToMermaidUrl;
|
|
153
|
+
/** uses same id map but ensures, it is different from the rhs so that mermaid can work with that */
|
|
154
|
+
function diffGraphsToMermaid(left, right, dataflowIdMap, prefix) {
|
|
155
|
+
// we add the prefix ourselves
|
|
156
|
+
const leftGraph = graphToMermaid(left.graph, dataflowIdMap, '', `l-${left.label}`);
|
|
157
|
+
const rightGraph = graphToMermaid(right.graph, dataflowIdMap, '', `r-${right.label}`);
|
|
158
|
+
return `${prefix}flowchart TD\nsubgraph "${left.label}"\n${leftGraph}\nend\nsubgraph "${right.label}"\n${rightGraph}\nend`;
|
|
159
|
+
}
|
|
160
|
+
exports.diffGraphsToMermaid = diffGraphsToMermaid;
|
|
161
|
+
function diffGraphsToMermaidUrl(left, right, dataflowIdMap, prefix) {
|
|
162
|
+
return (0, mermaid_1.mermaidCodeToUrl)(diffGraphsToMermaid(left, right, dataflowIdMap, prefix));
|
|
163
|
+
}
|
|
164
|
+
exports.diffGraphsToMermaidUrl = diffGraphsToMermaidUrl;
|
|
165
|
+
//# sourceMappingURL=dfg.js.map
|
|
@@ -0,0 +1,20 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./ast"), exports);
|
|
18
|
+
__exportStar(require("./cfg"), exports);
|
|
19
|
+
__exportStar(require("./dfg"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function escapeMarkdown(text: string): string;
|
|
2
|
+
/**
|
|
3
|
+
* Converts mermaid code (potentially produced by {@link graphToMermaid}) to an url that presents the graph in the mermaid editor.
|
|
4
|
+
*
|
|
5
|
+
* @param code - code to convert
|
|
6
|
+
*/
|
|
7
|
+
export declare function mermaidCodeToUrl(code: string): string;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mermaidCodeToUrl = exports.escapeMarkdown = void 0;
|
|
4
|
+
function escapeMarkdown(text) {
|
|
5
|
+
return text.replaceAll(/([+*])/g, '\\$1').replaceAll('"', '\'\'');
|
|
6
|
+
}
|
|
7
|
+
exports.escapeMarkdown = escapeMarkdown;
|
|
8
|
+
/**
|
|
9
|
+
* Converts mermaid code (potentially produced by {@link graphToMermaid}) to an url that presents the graph in the mermaid editor.
|
|
10
|
+
*
|
|
11
|
+
* @param code - code to convert
|
|
12
|
+
*/
|
|
13
|
+
function mermaidCodeToUrl(code) {
|
|
14
|
+
const obj = {
|
|
15
|
+
code,
|
|
16
|
+
mermaid: {},
|
|
17
|
+
updateEditor: false,
|
|
18
|
+
autoSync: true,
|
|
19
|
+
updateDiagram: false
|
|
20
|
+
};
|
|
21
|
+
return `https://mermaid.live/edit#base64:${Buffer.from(JSON.stringify(obj)).toString('base64')}`;
|
|
22
|
+
}
|
|
23
|
+
exports.mermaidCodeToUrl = mermaidCodeToUrl;
|
|
24
|
+
//# sourceMappingURL=mermaid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function bigint2number(a: bigint | string): number;
|
package/util/numbers.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bigint2number = void 0;
|
|
4
|
+
function bigint2number(a) {
|
|
5
|
+
// we have to remove the trailing `n`
|
|
6
|
+
return Number(String(a).slice(0, -1));
|
|
7
|
+
}
|
|
8
|
+
exports.bigint2number = bigint2number;
|
|
9
|
+
//# sourceMappingURL=numbers.js.map
|