@grnsft/if 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -17
- package/Refactor-migration-guide.md +110 -164
- package/build/common/config/index.d.ts +1 -0
- package/build/common/config/index.js +6 -0
- package/build/common/config/strings.d.ts +9 -0
- package/build/common/config/strings.js +17 -0
- package/build/common/lib/load.d.ts +6 -0
- package/build/common/lib/load.js +18 -0
- package/build/{types → common/types}/manifest.d.ts +4 -1
- package/build/common/types/manifest.js +3 -0
- package/build/common/util/debug-logger.js +115 -0
- package/build/common/util/fs.js +94 -0
- package/build/common/util/helpers.d.ts +15 -0
- package/build/common/util/helpers.js +80 -0
- package/build/{util → common/util}/logger.js +1 -1
- package/build/{util → common/util}/validations.d.ts +149 -47
- package/build/common/util/validations.js +141 -0
- package/build/common/util/yaml.js +59 -0
- package/build/if-check/config/config.d.ts +6 -0
- package/build/if-check/config/config.js +31 -0
- package/build/{config → if-check/config}/index.d.ts +0 -1
- package/build/if-check/config/index.js +8 -0
- package/build/if-check/config/strings.d.ts +11 -0
- package/build/if-check/config/strings.js +15 -0
- package/build/if-check/index.js +98 -0
- package/build/if-check/types/process-args.d.ts +4 -0
- package/build/if-check/types/process-args.js +3 -0
- package/build/if-check/util/args.d.ts +10 -0
- package/build/if-check/util/args.js +56 -0
- package/build/if-check/util/helpers.d.ts +4 -0
- package/build/if-check/util/helpers.js +18 -0
- package/build/if-check/util/npm.d.ts +4 -0
- package/build/if-check/util/npm.js +59 -0
- package/build/if-csv/config/config.d.ts +6 -0
- package/build/if-csv/config/config.js +36 -0
- package/build/if-csv/config/index.d.ts +2 -0
- package/build/if-csv/config/index.js +8 -0
- package/build/if-csv/config/strings.d.ts +3 -0
- package/build/if-csv/config/strings.js +7 -0
- package/build/if-csv/index.js +63 -0
- package/build/if-csv/types/csv.d.ts +7 -0
- package/build/if-csv/types/csv.js +3 -0
- package/build/if-csv/types/process-args.d.ts +5 -0
- package/build/if-csv/types/process-args.js +3 -0
- package/build/if-csv/util/args.d.ts +12 -0
- package/build/if-csv/util/args.js +47 -0
- package/build/if-csv/util/helpers.d.ts +9 -0
- package/build/if-csv/util/helpers.js +95 -0
- package/build/if-diff/config/config.d.ts +6 -0
- package/build/if-diff/config/config.js +31 -0
- package/build/if-diff/config/index.d.ts +2 -0
- package/build/if-diff/config/index.js +8 -0
- package/build/if-diff/config/strings.d.ts +6 -0
- package/build/if-diff/config/strings.js +10 -0
- package/build/if-diff/index.js +46 -0
- package/build/{lib → if-diff/lib}/compare.d.ts +1 -1
- package/build/if-diff/lib/compare.js +56 -0
- package/build/{lib → if-diff/lib}/load.d.ts +16 -18
- package/build/if-diff/lib/load.js +51 -0
- package/build/if-diff/types/args.js +3 -0
- package/build/if-diff/types/compare.js +3 -0
- package/build/if-diff/types/process-args.d.ts +4 -0
- package/build/if-diff/types/process-args.js +3 -0
- package/build/if-diff/util/args.d.ts +5 -0
- package/build/if-diff/util/args.js +51 -0
- package/build/if-diff/util/helpers.d.ts +13 -0
- package/build/if-diff/util/helpers.js +75 -0
- package/build/if-env/config/config.d.ts +6 -0
- package/build/if-env/config/config.js +37 -0
- package/build/if-env/config/index.d.ts +2 -0
- package/build/if-env/config/index.js +8 -0
- package/build/if-env/config/strings.d.ts +7 -0
- package/build/if-env/config/strings.js +11 -0
- package/build/if-env/index.js +40 -0
- package/build/if-env/types/if-env.js +3 -0
- package/build/if-env/types/npm.js +3 -0
- package/build/if-env/types/process-args.d.ts +5 -0
- package/build/if-env/types/process-args.js +3 -0
- package/build/if-env/util/args.d.ts +12 -0
- package/build/if-env/util/args.js +47 -0
- package/build/if-env/util/helpers.d.ts +20 -0
- package/build/if-env/util/helpers.js +94 -0
- package/build/{util → if-env/util}/npm.d.ts +0 -4
- package/build/if-env/util/npm.js +126 -0
- package/build/if-merge/config/config.d.ts +6 -0
- package/build/if-merge/config/config.js +43 -0
- package/build/if-merge/config/index.d.ts +2 -0
- package/build/if-merge/config/index.js +8 -0
- package/build/if-merge/config/strings.d.ts +5 -0
- package/build/if-merge/config/strings.js +9 -0
- package/build/if-merge/index.d.ts +2 -0
- package/build/if-merge/index.js +26 -0
- package/build/if-merge/types/process-args.d.ts +6 -0
- package/build/if-merge/types/process-args.js +3 -0
- package/build/if-merge/util/args.d.ts +9 -0
- package/build/if-merge/util/args.js +59 -0
- package/build/if-merge/util/helpers.d.ts +5 -0
- package/build/if-merge/util/helpers.js +83 -0
- package/build/if-run/builtins/coefficient/index.d.ts +2 -0
- package/build/if-run/builtins/coefficient/index.js +67 -0
- package/build/if-run/builtins/copy-param/index.d.ts +2 -0
- package/build/if-run/builtins/copy-param/index.js +70 -0
- package/build/if-run/builtins/csv-lookup/index.d.ts +2 -0
- package/build/if-run/builtins/csv-lookup/index.js +190 -0
- package/build/if-run/builtins/divide/index.d.ts +2 -0
- package/build/if-run/builtins/divide/index.js +80 -0
- package/build/if-run/builtins/exponent/index.d.ts +2 -0
- package/build/if-run/builtins/exponent/index.js +60 -0
- package/build/{builtins → if-run/builtins}/export-log.d.ts +1 -1
- package/build/{builtins → if-run/builtins}/export-log.js +1 -1
- package/build/{builtins → if-run/builtins}/export-yaml.d.ts +1 -1
- package/build/if-run/builtins/export-yaml.js +30 -0
- package/build/{builtins → if-run/builtins}/index.d.ts +2 -2
- package/build/{builtins → if-run/builtins}/index.js +6 -6
- package/build/if-run/builtins/interpolation/index.d.ts +2 -0
- package/build/if-run/builtins/interpolation/index.js +151 -0
- package/build/if-run/builtins/mock-observations/helpers/common-generator.js +29 -0
- package/build/if-run/builtins/mock-observations/helpers/rand-int-generator.js +48 -0
- package/build/if-run/builtins/mock-observations/index.d.ts +2 -0
- package/build/if-run/builtins/mock-observations/index.js +116 -0
- package/build/if-run/builtins/mock-observations/interfaces/index.js +3 -0
- package/build/if-run/builtins/multiply/index.d.ts +2 -0
- package/build/if-run/builtins/multiply/index.js +59 -0
- package/build/if-run/builtins/regex/index.d.ts +2 -0
- package/build/if-run/builtins/regex/index.js +76 -0
- package/build/if-run/builtins/sci/index.d.ts +2 -0
- package/build/if-run/builtins/sci/index.js +92 -0
- package/build/if-run/builtins/sci-embodied/index.d.ts +2 -0
- package/build/if-run/builtins/sci-embodied/index.js +156 -0
- package/build/if-run/builtins/shell/index.d.ts +2 -0
- package/build/if-run/builtins/shell/index.js +60 -0
- package/build/if-run/builtins/subtract/index.d.ts +2 -0
- package/build/if-run/builtins/subtract/index.js +61 -0
- package/build/if-run/builtins/sum/index.d.ts +2 -0
- package/build/if-run/builtins/sum/index.js +66 -0
- package/build/if-run/builtins/time-converter/config.js +44 -0
- package/build/if-run/builtins/time-converter/index.d.ts +2 -0
- package/build/if-run/builtins/time-converter/index.js +79 -0
- package/build/if-run/builtins/time-sync/index.d.ts +17 -0
- package/build/if-run/builtins/time-sync/index.js +339 -0
- package/build/if-run/config/config.d.ts +9 -0
- package/build/if-run/config/config.js +73 -0
- package/build/if-run/config/index.d.ts +2 -0
- package/build/if-run/config/index.js +8 -0
- package/build/{config → if-run/config}/strings.d.ts +28 -54
- package/build/if-run/config/strings.js +76 -0
- package/build/if-run/index.d.ts +2 -0
- package/build/if-run/index.js +63 -0
- package/build/if-run/lib/aggregate.d.ts +15 -0
- package/build/if-run/lib/aggregate.js +123 -0
- package/build/if-run/lib/compute.js +142 -0
- package/build/{lib → if-run/lib}/environment.d.ts +1 -1
- package/build/if-run/lib/environment.js +75 -0
- package/build/{lib → if-run/lib}/exhaust.d.ts +1 -1
- package/build/if-run/lib/exhaust.js +27 -0
- package/build/if-run/lib/explain.d.ts +9 -0
- package/build/if-run/lib/explain.js +43 -0
- package/build/if-run/lib/initialize.d.ts +6 -0
- package/build/if-run/lib/initialize.js +109 -0
- package/build/if-run/lib/regroup.d.ts +5 -0
- package/build/if-run/lib/regroup.js +64 -0
- package/build/if-run/types/aggregation.d.ts +5 -0
- package/build/if-run/types/aggregation.js +6 -0
- package/build/{types → if-run/types}/compute.d.ts +12 -8
- package/build/if-run/types/compute.js +3 -0
- package/build/if-run/types/environment.js +3 -0
- package/build/{types → if-run/types}/exhaust-plugin-interface.d.ts +1 -1
- package/build/if-run/types/exhaust-plugin-interface.js +3 -0
- package/build/if-run/types/explain.d.ts +10 -0
- package/build/if-run/types/explain.js +3 -0
- package/build/if-run/types/interface.d.ts +3 -0
- package/build/if-run/types/interface.js +6 -0
- package/build/if-run/types/plugin-storage.js +3 -0
- package/build/if-run/types/process-args.d.ts +25 -0
- package/build/if-run/types/process-args.js +3 -0
- package/build/if-run/types/time-sync.js +3 -0
- package/build/{util → if-run/util}/aggregation-helper.d.ts +2 -1
- package/build/if-run/util/aggregation-helper.js +47 -0
- package/build/if-run/util/args.d.ts +9 -0
- package/build/if-run/util/args.js +60 -0
- package/build/if-run/util/helpers.d.ts +14 -0
- package/build/if-run/util/helpers.js +57 -0
- package/build/if-run/util/log-memoize.js +19 -0
- package/build/if-run/util/os-checker.js +97 -0
- package/build/{util → if-run/util}/plugin-storage.d.ts +1 -1
- package/build/if-run/util/plugin-storage.js +34 -0
- package/jest.config.js +2 -6
- package/manifests/examples/builtins/coefficient/failure-invalid-config-input-param.yml +2 -2
- package/manifests/examples/builtins/coefficient/failure-output-param-is-null.yaml +3 -3
- package/manifests/examples/builtins/coefficient/success.yml +2 -2
- package/manifests/examples/builtins/csv-lookup/cloud-metadata/failure-invalid-instance-type.yaml +3 -3
- package/manifests/examples/builtins/csv-lookup/cloud-metadata/failure-invalid-vendor.yaml +3 -3
- package/manifests/examples/builtins/csv-lookup/cloud-metadata/failure-missing-cloud-vendor.yml +3 -3
- package/manifests/examples/builtins/csv-lookup/cloud-metadata/success.yml +3 -3
- package/manifests/examples/builtins/csv-lookup/region-metadata/failure-missing-column.yml +3 -3
- package/manifests/examples/builtins/csv-lookup/region-metadata/failure-missing-output.yml +3 -3
- package/manifests/examples/builtins/csv-lookup/region-metadata/success-renaming.yml +4 -4
- package/manifests/examples/builtins/csv-lookup/region-metadata/success.yml +3 -3
- package/manifests/examples/builtins/csv-lookup/tdp-finder/failure-missing-input-param.yml +2 -2
- package/manifests/examples/builtins/csv-lookup/tdp-finder/failure-unsupported-physical-processor.yml +2 -2
- package/manifests/examples/builtins/csv-lookup/tdp-finder/success.yml +2 -2
- package/manifests/examples/builtins/divide/failure-denominator-equal-zero.yml +4 -4
- package/manifests/examples/builtins/divide/failure-invalid-config-denominator.yml +5 -5
- package/manifests/examples/builtins/divide/failure-missing-numerator.yml +4 -4
- package/manifests/examples/builtins/divide/success.yml +4 -6
- package/manifests/examples/builtins/exponent/success.yml +5 -7
- package/manifests/examples/builtins/interpolation/interpolation.yml +2 -2
- package/manifests/examples/builtins/interpolation/success.yml +2 -1
- package/manifests/examples/builtins/mock-observations/failure-invalid-config-cpu-range.yml +2 -2
- package/manifests/examples/builtins/mock-observations/failure-invalid-memory-utilization-range.yml +2 -2
- package/manifests/examples/builtins/mock-observations/failure-missing-timestamp-from-param.yml +2 -2
- package/manifests/examples/builtins/mock-observations/success.yml +2 -2
- package/manifests/examples/builtins/multiply/failure-input-parameter-is-missing.yml +2 -4
- package/manifests/examples/builtins/multiply/success-with-multiple-inputs.yml +2 -4
- package/manifests/examples/builtins/multiply/success.yml +3 -4
- package/manifests/examples/builtins/regex/failure-missing-input-param.yml +2 -4
- package/manifests/examples/builtins/regex/failure-not-matching-with-regex.yml +2 -4
- package/manifests/examples/builtins/regex/success.yml +2 -4
- package/manifests/examples/builtins/sci/failure-invalid-config-value.yml +2 -2
- package/manifests/examples/builtins/sci/failure-missing-input-param.yml +3 -2
- package/manifests/examples/builtins/sci/success.yml +2 -3
- package/manifests/examples/builtins/sci-embodied/failure-invalid-default-emission-value.yml +3 -3
- package/manifests/examples/builtins/sci-embodied/failure-missing-expected-lifespan.yml +2 -2
- package/manifests/examples/builtins/sci-embodied/success.yml +2 -2
- package/manifests/examples/builtins/shell/failure-invalid-command.yml +2 -2
- package/manifests/examples/builtins/shell/success.yml +2 -1
- package/manifests/examples/builtins/subtract/success.yml +6 -8
- package/manifests/examples/builtins/sum/failure-missing-input-param.yml +2 -4
- package/manifests/examples/builtins/sum/failure-missing-output-param.yml +3 -5
- package/manifests/examples/builtins/sum/success.yml +2 -4
- package/manifests/examples/builtins/time-converter/success.yaml +24 -0
- package/manifests/examples/builtins/time-sync/failure-config-start-later-end.yml +3 -3
- package/manifests/examples/builtins/time-sync/failure-missing-global-config.yml +3 -3
- package/manifests/examples/builtins/time-sync/success.yml +2 -2
- package/manifests/examples/{builtins/groupby/failure-invalid-config-group.yml → features/regroup/failure-invalid-regroup.yml} +4 -11
- package/manifests/examples/{builtins/groupby → features/regroup}/failure-missing-cloud-instance-type.yml +5 -12
- package/manifests/examples/{builtins/groupby → features/regroup}/success.yml +4 -11
- package/manifests/examples/pipelines/generics.yml +12 -13
- package/manifests/examples/pipelines/instance-metadata.yml +4 -5
- package/manifests/examples/pipelines/nesting.yml +157 -50
- package/manifests/examples/pipelines/outputs-if-diff/pipeline-with-aggregate.yaml +997 -0
- package/manifests/examples/pipelines/outputs-if-diff/pipeline-with-mocks.yaml +1059 -0
- package/manifests/examples/pipelines/pipeline-teads-sci.yml +11 -11
- package/manifests/examples/pipelines/pipeline-with-aggregate.yml +114 -37
- package/manifests/examples/pipelines/pipeline-with-mocks.yml +193 -103
- package/manifests/examples/pipelines/scenario-1.yml +34 -0
- package/manifests/examples/pipelines/scenario-2.yml +52 -0
- package/manifests/examples/pipelines/scenario-3.yml +86 -0
- package/manifests/examples/pipelines/scenario-4.yml +46 -0
- package/manifests/examples/pipelines/scenario-5.yml +46 -0
- package/manifests/examples/pipelines/sci.yml +15 -17
- package/manifests/examples/pipelines/teads-curve.yml +7 -6
- package/manifests/examples/pipelines/zeros.yml +15 -16
- package/manifests/outputs/bugs/aggregation-error-wrong-metric.yaml +51 -59
- package/manifests/outputs/bugs/input-error-missing-duration.yaml +14 -16
- package/manifests/outputs/bugs/mock-observations-failure-duration-is-zero.yaml +14 -16
- package/manifests/outputs/bugs/pipeline-error-naming-mismatch.yaml +14 -16
- package/manifests/outputs/bugs/pipeline-error-uninitialized-plugin.yaml +15 -17
- package/manifests/outputs/bugs/pipeline-ordering-error.yaml +23 -26
- package/manifests/outputs/bugs/sci-embodied-missing-resources-total.yaml +13 -14
- package/manifests/outputs/{plugins → builtins}/coefficient/failure-invalid-config-input-param.yaml +13 -17
- package/manifests/outputs/{plugins → builtins}/coefficient/failure-output-param-is-null.yaml +13 -17
- package/manifests/outputs/{plugins → builtins}/coefficient/success.yaml +11 -16
- package/manifests/outputs/builtins/csv-lookup/cloud-metadata/failure-invalid-instance-type.yaml +76 -0
- package/manifests/outputs/{plugins → builtins}/csv-lookup/cloud-metadata/failure-missing-cloud-vendor.yaml +16 -19
- package/manifests/outputs/{plugins → builtins}/csv-lookup/cloud-metadata/success.yaml +16 -19
- package/manifests/outputs/{plugins → builtins}/csv-lookup/region-metadata/failure-missing-column.yaml +14 -15
- package/manifests/outputs/{plugins → builtins}/csv-lookup/region-metadata/failure-missing-output.yaml +13 -15
- package/manifests/outputs/{plugins → builtins}/csv-lookup/region-metadata/success-renaming.yaml +13 -15
- package/manifests/outputs/{plugins → builtins}/csv-lookup/region-metadata/success.yaml +14 -16
- package/manifests/outputs/{plugins → builtins}/csv-lookup/tdp-finder/failure-missing-input-param.yaml +13 -16
- package/manifests/outputs/{plugins → builtins}/csv-lookup/tdp-finder/failure-unsupported-physical-processor.yaml +13 -15
- package/manifests/outputs/{plugins → builtins}/csv-lookup/tdp-finder/success.yaml +13 -15
- package/manifests/outputs/{plugins → builtins}/divide/failure-invalid-config-denominator.yaml +13 -17
- package/manifests/outputs/{plugins → builtins}/divide/failure-missing-numerator.yaml +13 -15
- package/manifests/outputs/{plugins → builtins}/divide/success-denominator-equal-zero.yaml +14 -18
- package/manifests/outputs/{plugins → builtins}/divide/success.yaml +14 -18
- package/manifests/outputs/{plugins → builtins}/exponent/success.yaml +13 -17
- package/manifests/outputs/{plugins → builtins}/interpolation/interpolation.yaml +14 -16
- package/manifests/outputs/{plugins → builtins}/interpolation/success.yaml +14 -16
- package/manifests/outputs/{plugins → builtins}/mock-observations/failure-invalid-config-cpu-range.yaml +13 -15
- package/manifests/outputs/{plugins → builtins}/mock-observations/failure-invalid-memory-utilization-range.yaml +13 -15
- package/manifests/outputs/{plugins → builtins}/mock-observations/failure-missing-timestamp-from-param.yaml +13 -15
- package/manifests/outputs/builtins/mock-observations/success.yaml +358 -0
- package/manifests/outputs/{plugins → builtins}/multiply/failure-input-parameter-is-missing.yaml +13 -17
- package/manifests/outputs/{plugins → builtins}/multiply/success-with-multiple-inputs.yaml +13 -17
- package/manifests/outputs/{plugins → builtins}/multiply/success.yaml +13 -17
- package/manifests/outputs/{plugins → builtins}/regex/failure-missing-input-param.yaml +13 -17
- package/manifests/outputs/{plugins → builtins}/regex/success.yaml +14 -19
- package/manifests/outputs/{plugins → builtins}/sci/failure-invalid-config-value.yaml +14 -16
- package/manifests/outputs/{plugins → builtins}/sci/failure-missing-input-param.yaml +13 -15
- package/manifests/outputs/{plugins/sci/success.yml.yaml → builtins/sci/success.yaml} +13 -16
- package/manifests/outputs/{plugins → builtins}/sci-embodied/failure-invalid-default-emission-value.yaml +13 -15
- package/manifests/outputs/{plugins → builtins}/sci-embodied/failure-missing-expected-lifespan.yaml +13 -15
- package/manifests/outputs/{plugins → builtins}/sci-embodied/success.yaml +13 -15
- package/manifests/outputs/{plugins → builtins}/shell/failure-invalid-command.yaml +14 -16
- package/manifests/outputs/{plugins → builtins}/shell/success.yaml +14 -16
- package/manifests/outputs/{plugins → builtins}/subtract/success.yaml +13 -17
- package/manifests/outputs/{plugins → builtins}/sum/failure-missing-input-param.yaml +13 -17
- package/manifests/outputs/{plugins → builtins}/sum/failure-missing-output-param.yaml +13 -17
- package/manifests/outputs/{plugins → builtins}/sum/success.yaml +13 -17
- package/manifests/outputs/{plugins → builtins}/time-sync/failure-config-start-later-end.yaml +20 -23
- package/manifests/outputs/{plugins → builtins}/time-sync/success.yaml +38 -35
- package/manifests/outputs/features/aggregate-failure-invalid-metrics.yaml +17 -18
- package/manifests/outputs/features/aggregate-failure-missing-metric-in-inputs.yaml +17 -18
- package/manifests/outputs/features/aggregate-horizontal.yaml +27 -23
- package/manifests/outputs/features/aggregate-vertical.yaml +33 -29
- package/manifests/outputs/features/aggregate.yaml +33 -29
- package/manifests/outputs/{plugins/groupby/failure-invalid-config-group.yaml → features/failure-invalid-regroup.yaml} +16 -25
- package/manifests/outputs/{plugins/groupby → features}/failure-missing-cloud-instance-type.yaml +16 -25
- package/manifests/outputs/pipelines/cloud-metadata-divide.yaml +14 -18
- package/manifests/outputs/pipelines/generics.yaml +239 -0
- package/manifests/outputs/pipelines/instance-metadata.yaml +98 -0
- package/manifests/outputs/pipelines/mock-obs-time-sync.yaml +246 -147
- package/manifests/outputs/pipelines/nesting.yaml +1799 -0
- package/manifests/outputs/pipelines/pipeline-teads-sci.yaml +276 -0
- package/manifests/outputs/pipelines/sci.yaml +297 -0
- package/manifests/outputs/pipelines/teads-curve.yaml +188 -0
- package/manifests/outputs/pipelines/zeros.yaml +198 -0
- package/package.json +17 -16
- package/src/__mocks__/mock-manifest.yaml +2 -3
- package/src/{config → if-env/config}/env-template.yml +2 -3
- package/src/{builtins → if-run/builtins}/coefficient/README.md +31 -9
- package/src/{builtins → if-run/builtins}/copy-param/README.md +30 -11
- package/src/{builtins → if-run/builtins}/csv-lookup/README.md +32 -20
- package/src/{builtins → if-run/builtins}/divide/README.md +21 -8
- package/src/{builtins → if-run/builtins}/exponent/README.md +19 -8
- package/src/{builtins → if-run/builtins}/interpolation/README.md +21 -6
- package/src/{builtins → if-run/builtins}/mock-observations/README.md +18 -4
- package/src/{builtins → if-run/builtins}/multiply/README.md +20 -8
- package/src/{builtins → if-run/builtins}/regex/README.md +19 -9
- package/src/{builtins → if-run/builtins}/sci/README.md +19 -9
- package/src/{builtins → if-run/builtins}/sci-embodied/README.md +17 -5
- package/src/{builtins → if-run/builtins}/shell/README.md +19 -7
- package/src/{builtins → if-run/builtins}/subtract/README.md +17 -6
- package/src/{builtins → if-run/builtins}/sum/README.md +34 -8
- package/src/if-run/builtins/time-converter/README.md +136 -0
- package/src/if-run/builtins/time-sync/README.md +267 -0
- package/build/builtins/coefficient/index.d.ts +0 -2
- package/build/builtins/coefficient/index.js +0 -65
- package/build/builtins/copy-param/index.d.ts +0 -2
- package/build/builtins/copy-param/index.js +0 -68
- package/build/builtins/csv-lookup/index.d.ts +0 -2
- package/build/builtins/csv-lookup/index.js +0 -188
- package/build/builtins/divide/index.d.ts +0 -2
- package/build/builtins/divide/index.js +0 -78
- package/build/builtins/exponent/index.d.ts +0 -2
- package/build/builtins/exponent/index.js +0 -58
- package/build/builtins/export-csv-raw.d.ts +0 -4
- package/build/builtins/export-csv-raw.js +0 -132
- package/build/builtins/export-csv.d.ts +0 -10
- package/build/builtins/export-csv.js +0 -96
- package/build/builtins/export-yaml.js +0 -30
- package/build/builtins/group-by.d.ts +0 -5
- package/build/builtins/group-by.js +0 -71
- package/build/builtins/interpolation/index.d.ts +0 -2
- package/build/builtins/interpolation/index.js +0 -148
- package/build/builtins/mock-observations/helpers/common-generator.js +0 -29
- package/build/builtins/mock-observations/helpers/rand-int-generator.js +0 -48
- package/build/builtins/mock-observations/index.d.ts +0 -2
- package/build/builtins/mock-observations/index.js +0 -114
- package/build/builtins/mock-observations/interfaces/index.js +0 -3
- package/build/builtins/multiply/index.d.ts +0 -2
- package/build/builtins/multiply/index.js +0 -57
- package/build/builtins/regex/index.d.ts +0 -2
- package/build/builtins/regex/index.js +0 -74
- package/build/builtins/sci/config.js +0 -44
- package/build/builtins/sci/index.d.ts +0 -2
- package/build/builtins/sci/index.js +0 -70
- package/build/builtins/sci-embodied/index.d.ts +0 -2
- package/build/builtins/sci-embodied/index.js +0 -114
- package/build/builtins/shell/index.d.ts +0 -2
- package/build/builtins/shell/index.js +0 -58
- package/build/builtins/subtract/index.d.ts +0 -2
- package/build/builtins/subtract/index.js +0 -59
- package/build/builtins/sum/index.d.ts +0 -2
- package/build/builtins/sum/index.js +0 -64
- package/build/builtins/time-sync.d.ts +0 -2
- package/build/builtins/time-sync.js +0 -300
- package/build/check.js +0 -95
- package/build/config/config.d.ts +0 -29
- package/build/config/config.js +0 -147
- package/build/config/index.js +0 -10
- package/build/config/params.d.ts +0 -2
- package/build/config/params.js +0 -196
- package/build/config/strings.js +0 -105
- package/build/diff.js +0 -46
- package/build/env.js +0 -38
- package/build/index.js +0 -48
- package/build/lib/aggregate.d.ts +0 -6
- package/build/lib/aggregate.js +0 -77
- package/build/lib/compare.js +0 -56
- package/build/lib/compute.js +0 -91
- package/build/lib/environment.js +0 -75
- package/build/lib/exhaust.js +0 -53
- package/build/lib/initialize.d.ts +0 -6
- package/build/lib/initialize.js +0 -101
- package/build/lib/load.js +0 -70
- package/build/lib/parameterize.d.ts +0 -6
- package/build/lib/parameterize.js +0 -55
- package/build/types/aggregation.d.ts +0 -2
- package/build/types/aggregation.js +0 -5
- package/build/types/compute.js +0 -3
- package/build/types/environment.js +0 -3
- package/build/types/exhaust-plugin-interface.js +0 -3
- package/build/types/if-env.js +0 -3
- package/build/types/interface.d.ts +0 -4
- package/build/types/interface.js +0 -8
- package/build/types/lib/compare.js +0 -3
- package/build/types/manifest.js +0 -3
- package/build/types/npm.js +0 -3
- package/build/types/parameters.d.ts +0 -5
- package/build/types/parameters.js +0 -5
- package/build/types/plugin-storage.js +0 -3
- package/build/types/process-args.d.ts +0 -33
- package/build/types/process-args.js +0 -3
- package/build/types/time-sync.js +0 -3
- package/build/types/util/args.js +0 -3
- package/build/util/aggregation-helper.js +0 -55
- package/build/util/args.d.ts +0 -37
- package/build/util/args.js +0 -205
- package/build/util/debug-logger.js +0 -118
- package/build/util/fs.js +0 -94
- package/build/util/helpers.d.ts +0 -57
- package/build/util/helpers.js +0 -251
- package/build/util/json.d.ts +0 -4
- package/build/util/json.js +0 -36
- package/build/util/log-memoize.js +0 -19
- package/build/util/npm.js +0 -152
- package/build/util/os-checker.js +0 -97
- package/build/util/plugin-storage.js +0 -34
- package/build/util/validations.js +0 -124
- package/build/util/yaml.js +0 -59
- package/manifests/outputs/bugs/initialize-error-no-config.yaml +0 -78
- package/manifests/outputs/bugs/initialize-error-no-path.yaml +0 -91
- package/manifests/outputs/bugs/initialize-error-no-plugins.yaml +0 -74
- package/manifests/outputs/divide.yaml +0 -93
- package/manifests/outputs/pipelines/mock-obs-group-by-cloud-meta.yaml +0 -645
- package/manifests/outputs/pipelines/mock-obs-groupby.yaml +0 -178
- package/manifests/outputs/plugins/csv-lookup/cloud-metadata/failure-invalid-instance-type.yaml +0 -27
- package/manifests/outputs/plugins/csv-lookup/cloud-metadata/failure-invalid-vendor.yaml +0 -27
- package/manifests/outputs/plugins/groupby/success.yaml +0 -101
- package/manifests/outputs/plugins/mock-observations/success.yaml +0 -220
- package/manifests/outputs/plugins/regex/failure-not-matching-with-regex.yaml +0 -76
- package/manifests/outputs/plugins/time-sync/failure-missing-global-config.yaml +0 -78
- package/src/__tests__/integration/templates/integration.yaml +0 -16
- package/src/builtins/README.md +0 -848
- /package/build/{util → common/util}/debug-logger.d.ts +0 -0
- /package/build/{util → common/util}/fs.d.ts +0 -0
- /package/build/{util → common/util}/logger.d.ts +0 -0
- /package/build/{util → common/util}/yaml.d.ts +0 -0
- /package/build/{index.d.ts → if-check/index.d.ts} +0 -0
- /package/build/{check.d.ts → if-csv/index.d.ts} +0 -0
- /package/build/{diff.d.ts → if-diff/index.d.ts} +0 -0
- /package/build/{types/util → if-diff/types}/args.d.ts +0 -0
- /package/build/{types/lib → if-diff/types}/compare.d.ts +0 -0
- /package/build/{env.d.ts → if-env/index.d.ts} +0 -0
- /package/build/{types → if-env/types}/if-env.d.ts +0 -0
- /package/build/{types → if-env/types}/npm.d.ts +0 -0
- /package/build/{builtins → if-run/builtins}/mock-observations/helpers/common-generator.d.ts +0 -0
- /package/build/{builtins → if-run/builtins}/mock-observations/helpers/rand-int-generator.d.ts +0 -0
- /package/build/{builtins → if-run/builtins}/mock-observations/interfaces/index.d.ts +0 -0
- /package/build/{builtins/sci → if-run/builtins/time-converter}/config.d.ts +0 -0
- /package/build/{lib → if-run/lib}/compute.d.ts +0 -0
- /package/build/{types → if-run/types}/environment.d.ts +0 -0
- /package/build/{types → if-run/types}/plugin-storage.d.ts +0 -0
- /package/build/{types → if-run/types}/time-sync.d.ts +0 -0
- /package/build/{util → if-run/util}/log-memoize.d.ts +0 -0
- /package/build/{util → if-run/util}/os-checker.d.ts +0 -0
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
import { ManifestParameter } from '../types/manifest';
|
|
2
1
|
export declare const STRINGS: {
|
|
3
|
-
MANIFEST_IS_MISSING: string;
|
|
4
2
|
MISSING_METHOD: string;
|
|
5
3
|
MISSING_PATH: string;
|
|
6
4
|
UNSUPPORTED_PLUGIN: string;
|
|
7
|
-
OVERRIDE_WARNING: string;
|
|
8
|
-
DISCLAIMER_MESSAGE: string;
|
|
9
5
|
NOT_NATIVE_PLUGIN: (path: string) => string;
|
|
10
6
|
INVALID_MODULE_PATH: (path: string, error?: any) => string;
|
|
11
7
|
INVALID_TIME_NORMALIZATION: string;
|
|
@@ -15,55 +11,19 @@ export declare const STRINGS: {
|
|
|
15
11
|
AVOIDING_PADDING_BY_EDGES: (start: boolean, end: boolean) => string;
|
|
16
12
|
INVALID_AGGREGATION_METHOD: (metric: string) => string;
|
|
17
13
|
METRIC_MISSING: (metric: string, index: number) => string;
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
INVALID_GROUP_KEY: (key: string) => string;
|
|
15
|
+
REGROUP_ERROR: string;
|
|
20
16
|
INVALID_EXHAUST_PLUGIN: (pluginName: string) => string;
|
|
21
17
|
UNKNOWN_PARAM: (name: string) => string;
|
|
22
18
|
NOT_INITALIZED_PLUGIN: (name: string) => string;
|
|
23
19
|
NO_OUTPUT: string;
|
|
24
|
-
SOURCE_IS_NOT_YAML: string;
|
|
25
|
-
TARGET_IS_NOT_YAML: string;
|
|
26
|
-
INVALID_TARGET: string;
|
|
27
|
-
INVALID_SOURCE: string;
|
|
28
20
|
UNSUPPORTED_ERROR: (errorName: string) => string;
|
|
29
|
-
/** Plugin messages */
|
|
30
|
-
MISSING_GLOBAL_CONFIG: string;
|
|
31
|
-
MISSING_INPUT_DATA: (param: string) => string;
|
|
32
|
-
MANIFEST_NOT_FOUND: string;
|
|
33
|
-
INITIALIZING_PACKAGE_JSON: string;
|
|
34
|
-
INSTALLING_NPM_PACKAGES: string;
|
|
35
|
-
NOT_NUMERIC_VALUE: (str: any) => string;
|
|
36
|
-
MISSING_FUNCTIONAL_UNIT_CONFIG: string;
|
|
37
|
-
MISSING_FUNCTIONAL_UNIT_INPUT: string;
|
|
38
|
-
REGEX_MISMATCH: (input: any, match: string) => string;
|
|
39
|
-
SCI_EMBODIED_ERROR: (unit: string) => string;
|
|
40
|
-
MISSING_MIN_MAX: string;
|
|
41
|
-
INVALID_MIN_MAX: (name: string) => string;
|
|
42
|
-
FILE_FETCH_FAILED: (filepath: string, message: string) => string;
|
|
43
|
-
FILE_READ_FAILED: (filepath: string, error: string) => string;
|
|
44
|
-
MISSING_CSV_COLUMN: (columnName: string) => string;
|
|
45
|
-
NO_QUERY_DATA: string;
|
|
46
|
-
INVALID_DATE_TYPE: (date: any) => string;
|
|
47
|
-
INVALID_OBSERVATION_OVERLAP: string;
|
|
48
|
-
SCI_MISSING_FN_UNIT: (functionalUnit: string) => string;
|
|
49
|
-
/** Exhaust messages */
|
|
50
|
-
OUTPUT_REQUIRED: string;
|
|
51
|
-
CSV_EXPORT: string;
|
|
52
|
-
WRITE_CSV_ERROR: (outputPath: string, error: any) => string;
|
|
53
|
-
INVALID_NAME: string;
|
|
54
|
-
START_LOWER_END: string;
|
|
55
|
-
TIMESTAMP_REQUIRED: (index: number) => string;
|
|
56
|
-
INVALID_DATETIME: (index: number) => string;
|
|
57
|
-
X_Y_EQUAL: string;
|
|
58
|
-
ARRAY_LENGTH_NON_EMPTY: string;
|
|
59
|
-
WITHIN_THE_RANGE: string;
|
|
60
21
|
/** Debugging logs */
|
|
61
22
|
STARTING_IF: string;
|
|
62
23
|
EXITING_IF: string;
|
|
63
24
|
LOADING_MANIFEST: string;
|
|
64
25
|
VALIDATING_MANIFEST: string;
|
|
65
26
|
CAPTURING_RUNTIME_ENVIRONMENT_DATA: string;
|
|
66
|
-
SYNCING_PARAMETERS: string;
|
|
67
27
|
CHECKING_AGGREGATION_METHOD: (unitName: string) => string;
|
|
68
28
|
INITIALIZING_PLUGINS: string;
|
|
69
29
|
INITIALIZING_PLUGIN: (pluginName: string) => string;
|
|
@@ -74,17 +34,31 @@ export declare const STRINGS: {
|
|
|
74
34
|
AGGREGATING_NODE: (nodeName: string) => string;
|
|
75
35
|
PREPARING_OUTPUT_DATA: string;
|
|
76
36
|
EXPORTING_TO_YAML_FILE: (savepath: string) => string;
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
37
|
+
EMPTY_PIPELINE: string;
|
|
38
|
+
/** Exhaust messages */
|
|
39
|
+
OUTPUT_REQUIRED: string;
|
|
40
|
+
/** Plugins messages */
|
|
41
|
+
INVALID_NAME: string;
|
|
42
|
+
START_LOWER_END: string;
|
|
43
|
+
TIMESTAMP_REQUIRED: (index: number) => string;
|
|
44
|
+
INVALID_DATETIME: (index: number) => string;
|
|
45
|
+
X_Y_EQUAL: string;
|
|
46
|
+
ARRAY_LENGTH_NON_EMPTY: string;
|
|
47
|
+
WITHIN_THE_RANGE: string;
|
|
48
|
+
MISSING_CSV_COLUMN: (columnName: string) => string;
|
|
49
|
+
NO_QUERY_DATA: string;
|
|
50
|
+
INVALID_DATE_TYPE: (date: any) => string;
|
|
51
|
+
INVALID_OBSERVATION_OVERLAP: string;
|
|
52
|
+
SCI_MISSING_FN_UNIT: (functionalUnit: string) => string;
|
|
53
|
+
MISSING_FUNCTIONAL_UNIT_CONFIG: string;
|
|
54
|
+
MISSING_FUNCTIONAL_UNIT_INPUT: string;
|
|
55
|
+
REGEX_MISMATCH: (input: any, match: string) => string;
|
|
56
|
+
SCI_EMBODIED_ERROR: (unit: string) => string;
|
|
57
|
+
MISSING_MIN_MAX: string;
|
|
58
|
+
INVALID_MIN_MAX: (name: string) => string;
|
|
59
|
+
FILE_FETCH_FAILED: (filepath: string, message: string) => string;
|
|
60
|
+
FILE_READ_FAILED: (filepath: string, error: string) => string;
|
|
89
61
|
ZERO_DIVISION: (moduleName: string, index: number) => string;
|
|
62
|
+
MISSING_GLOBAL_CONFIG: string;
|
|
63
|
+
MISSING_INPUT_DATA: (param: string) => string;
|
|
90
64
|
};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.STRINGS = void 0;
|
|
4
|
+
exports.STRINGS = {
|
|
5
|
+
MISSING_METHOD: "Initalization param 'method' is missing.",
|
|
6
|
+
MISSING_PATH: "Initalization param 'path' is missing.",
|
|
7
|
+
UNSUPPORTED_PLUGIN: "Plugin interface doesn't implement 'execute' or 'metadata' methods.",
|
|
8
|
+
NOT_NATIVE_PLUGIN: (path) => `
|
|
9
|
+
You are using plugin ${path} which is not part of the Impact Framework standard library. You should do your own research to ensure the plugins are up to date and accurate. They may not be actively maintained.`,
|
|
10
|
+
INVALID_MODULE_PATH: (path, error) => `Provided module \`${path}\` is invalid or not found. ${error ?? ''}
|
|
11
|
+
`,
|
|
12
|
+
INVALID_TIME_NORMALIZATION: 'Start time or end time is missing.',
|
|
13
|
+
UNEXPECTED_TIME_CONFIG: 'Unexpected node-level config provided for time-sync plugin.',
|
|
14
|
+
INVALID_TIME_INTERVAL: 'Interval is missing.',
|
|
15
|
+
AVOIDING_PADDING: (description) => `Avoiding padding at ${description}`,
|
|
16
|
+
AVOIDING_PADDING_BY_EDGES: (start, end) => `Avoiding padding at ${start && end ? 'start and end' : start ? 'start' : 'end'}`,
|
|
17
|
+
INVALID_AGGREGATION_METHOD: (metric) => `Aggregation is not possible for given ${metric} since method is 'none'.`,
|
|
18
|
+
METRIC_MISSING: (metric, index) => `Aggregation metric ${metric} is not found in inputs[${index}].`,
|
|
19
|
+
INVALID_GROUP_KEY: (key) => `Invalid group ${key}.`,
|
|
20
|
+
REGROUP_ERROR: 'not an array or should contain at least one key',
|
|
21
|
+
INVALID_EXHAUST_PLUGIN: (pluginName) => `Invalid exhaust plugin: ${pluginName}.`,
|
|
22
|
+
UNKNOWN_PARAM: (name) => `Unknown parameter: ${name}. Omitting from the output.`,
|
|
23
|
+
NOT_INITALIZED_PLUGIN: (name) => `Not initalized plugin: ${name}. Check if ${name} is in 'manifest.initalize.plugins'.`,
|
|
24
|
+
NO_OUTPUT: `
|
|
25
|
+
You have not added an output command:
|
|
26
|
+
--output <savepath>: will save your output data to the given filepath (do not provide file extension)
|
|
27
|
+
Note that for the '--output' option you also need to define the output type in your manifest file. See https://if.greensoftware.foundation/major-concepts/manifest-file#initialize`,
|
|
28
|
+
UNSUPPORTED_ERROR: (errorName) => `UnsupportedErrorClass: plugin threw error class: ${errorName} that is not recognized by Impact Framework`,
|
|
29
|
+
/** Debugging logs */
|
|
30
|
+
STARTING_IF: 'Starting IF',
|
|
31
|
+
EXITING_IF: 'Exiting IF',
|
|
32
|
+
LOADING_MANIFEST: 'Loading manifest',
|
|
33
|
+
VALIDATING_MANIFEST: 'Validating manifest',
|
|
34
|
+
CAPTURING_RUNTIME_ENVIRONMENT_DATA: 'Capturing runtime environment data',
|
|
35
|
+
CHECKING_AGGREGATION_METHOD: (unitName) => `Checking aggregation method for ${unitName}`,
|
|
36
|
+
INITIALIZING_PLUGINS: 'Initializing plugins',
|
|
37
|
+
INITIALIZING_PLUGIN: (pluginName) => `Initializing ${pluginName}`,
|
|
38
|
+
LOADING_PLUGIN_FROM_PATH: (pluginName, path) => `Loading ${pluginName} from ${path}`,
|
|
39
|
+
COMPUTING_PIPELINE_FOR_NODE: (nodeName) => `Computing pipeline for \`${nodeName}\``,
|
|
40
|
+
MERGING_DEFAULTS_WITH_INPUT_DATA: 'Merging defaults with input data',
|
|
41
|
+
AGGREGATING_OUTPUTS: 'Aggregating outputs',
|
|
42
|
+
AGGREGATING_NODE: (nodeName) => `Aggregating node ${nodeName}`,
|
|
43
|
+
PREPARING_OUTPUT_DATA: 'Preparing output data',
|
|
44
|
+
EXPORTING_TO_YAML_FILE: (savepath) => `Exporting to yaml file: ${savepath}`,
|
|
45
|
+
EMPTY_PIPELINE: `You're using an old style manifest. Please update for phased execution. More information can be found here:
|
|
46
|
+
https://if.greensoftware.foundation/major-concepts/manifest-file`,
|
|
47
|
+
/** Exhaust messages */
|
|
48
|
+
OUTPUT_REQUIRED: 'Output path is required, please make sure output is configured properly.',
|
|
49
|
+
/** Plugins messages */
|
|
50
|
+
INVALID_NAME: '`name` global config parameter is empty or contains all spaces',
|
|
51
|
+
START_LOWER_END: '`start-time` should be lower than `end-time`',
|
|
52
|
+
TIMESTAMP_REQUIRED: (index) => `required in input[${index}]`,
|
|
53
|
+
INVALID_DATETIME: (index) => `invalid datetime in input[${index}]`,
|
|
54
|
+
X_Y_EQUAL: 'The length of `x` and `y` should be equal',
|
|
55
|
+
ARRAY_LENGTH_NON_EMPTY: 'the length of the input arrays must be greater than 1',
|
|
56
|
+
WITHIN_THE_RANGE: 'The target x value must be within the range of the given x values',
|
|
57
|
+
MISSING_CSV_COLUMN: (columnName) => `There is no column with the name: ${columnName}.`,
|
|
58
|
+
NO_QUERY_DATA: 'One or more of the given query parameters are not found in the target CSV file column headers.',
|
|
59
|
+
INVALID_DATE_TYPE: (date) => `Unexpected date datatype: ${typeof date}: ${date}`,
|
|
60
|
+
INVALID_OBSERVATION_OVERLAP: 'Observation timestamps overlap, please check inputs.',
|
|
61
|
+
SCI_MISSING_FN_UNIT: (functionalUnit) => `'carbon' and ${functionalUnit} should be present in your input data.`,
|
|
62
|
+
MISSING_FUNCTIONAL_UNIT_CONFIG: '`functional-unit` should be provided in your global config',
|
|
63
|
+
MISSING_FUNCTIONAL_UNIT_INPUT: '`functional-unit` value is missing from input data or it is not a positive integer',
|
|
64
|
+
REGEX_MISMATCH: (input, match) => `\`${input}\` does not match the ${match} regex expression`,
|
|
65
|
+
SCI_EMBODIED_ERROR: (unit) => `invalid number. please provide it as \`${unit}\` to input`,
|
|
66
|
+
MISSING_MIN_MAX: 'Config is missing min or max value',
|
|
67
|
+
INVALID_MIN_MAX: (name) => `Min value should not be greater than or equal to max value of ${name}`,
|
|
68
|
+
FILE_FETCH_FAILED: (filepath, message) => `Failed fetching the file: ${filepath}.
|
|
69
|
+
${message}`,
|
|
70
|
+
FILE_READ_FAILED: (filepath, error) => `Failed reading the file: ${filepath}.
|
|
71
|
+
${error}`,
|
|
72
|
+
ZERO_DIVISION: (moduleName, index) => `-- SKIPPING -- DivisionByZero: you are attempting to divide by zero in ${moduleName} plugin : inputs[${index}]\n`,
|
|
73
|
+
MISSING_GLOBAL_CONFIG: 'Global config is not provided.',
|
|
74
|
+
MISSING_INPUT_DATA: (param) => `${param} is missing from the input array, or has nullish value.`,
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pZi1ydW4vY29uZmlnL3N0cmluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxPQUFPLEdBQUc7SUFDckIsY0FBYyxFQUFFLDBDQUEwQztJQUMxRCxZQUFZLEVBQUUsd0NBQXdDO0lBQ3RELGtCQUFrQixFQUNoQixxRUFBcUU7SUFDdkUsaUJBQWlCLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUNsQzt5QkFDcUIsSUFBSSxzTEFBc0w7SUFDak4sbUJBQW1CLEVBQUUsQ0FBQyxJQUFZLEVBQUUsS0FBVyxFQUFFLEVBQUUsQ0FDakQscUJBQXFCLElBQUksK0JBQStCLEtBQUssSUFBSSxFQUFFO0NBQ3RFO0lBQ0MsMEJBQTBCLEVBQUUsb0NBQW9DO0lBQ2hFLHNCQUFzQixFQUNwQiw2REFBNkQ7SUFDL0QscUJBQXFCLEVBQUUsc0JBQXNCO0lBQzdDLGdCQUFnQixFQUFFLENBQUMsV0FBbUIsRUFBRSxFQUFFLENBQ3hDLHVCQUF1QixXQUFXLEVBQUU7SUFDdEMseUJBQXlCLEVBQUUsQ0FBQyxLQUFjLEVBQUUsR0FBWSxFQUFFLEVBQUUsQ0FDMUQsdUJBQ0UsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FDckQsRUFBRTtJQUNKLDBCQUEwQixFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FDN0MseUNBQXlDLE1BQU0sMEJBQTBCO0lBQzNFLGNBQWMsRUFBRSxDQUFDLE1BQWMsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUNoRCxzQkFBc0IsTUFBTSwyQkFBMkIsS0FBSyxJQUFJO0lBQ2xFLGlCQUFpQixFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHO0lBQzNELGFBQWEsRUFBRSxpREFBaUQ7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QUE2QixRQUFRO0VBQzFDLE9BQU8sRUFBRTtJQUNULGdCQUFnQixFQUFFLENBQ2hCLFFBQWdCLEVBQ2hCLEtBQWEsRUFDYixFQUFFLENBQUMsNEJBQTRCLFFBQVE7RUFDekMsS0FBSyxFQUFFO0lBQ1AsYUFBYSxFQUFFLENBQUMsVUFBa0IsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUNuRCwwRUFBMEUsVUFBVSxvQkFBb0IsS0FBSyxLQUFLO0lBQ3BILHFCQUFxQixFQUFFLGdDQUFnQztJQUN2RCxrQkFBa0IsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQ3BDLEdBQUcsS0FBSyx5REFBeUQ7Q0FDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBTVFJJTkdTID0ge1xuICBNSVNTSU5HX01FVEhPRDogXCJJbml0YWxpemF0aW9uIHBhcmFtICdtZXRob2QnIGlzIG1pc3NpbmcuXCIsXG4gIE1JU1NJTkdfUEFUSDogXCJJbml0YWxpemF0aW9uIHBhcmFtICdwYXRoJyBpcyBtaXNzaW5nLlwiLFxuICBVTlNVUFBPUlRFRF9QTFVHSU46XG4gICAgXCJQbHVnaW4gaW50ZXJmYWNlIGRvZXNuJ3QgaW1wbGVtZW50ICdleGVjdXRlJyBvciAnbWV0YWRhdGEnIG1ldGhvZHMuXCIsXG4gIE5PVF9OQVRJVkVfUExVR0lOOiAocGF0aDogc3RyaW5nKSA9PlxuICAgIGBcbiAgWW91IGFyZSB1c2luZyBwbHVnaW4gJHtwYXRofSB3aGljaCBpcyBub3QgcGFydCBvZiB0aGUgSW1wYWN0IEZyYW1ld29yayBzdGFuZGFyZCBsaWJyYXJ5LiBZb3Ugc2hvdWxkIGRvIHlvdXIgb3duIHJlc2VhcmNoIHRvIGVuc3VyZSB0aGUgcGx1Z2lucyBhcmUgdXAgdG8gZGF0ZSBhbmQgYWNjdXJhdGUuIFRoZXkgbWF5IG5vdCBiZSBhY3RpdmVseSBtYWludGFpbmVkLmAsXG4gIElOVkFMSURfTU9EVUxFX1BBVEg6IChwYXRoOiBzdHJpbmcsIGVycm9yPzogYW55KSA9PlxuICAgIGBQcm92aWRlZCBtb2R1bGUgXFxgJHtwYXRofVxcYCBpcyBpbnZhbGlkIG9yIG5vdCBmb3VuZC4gJHtlcnJvciA/PyAnJ31cbmAsXG4gIElOVkFMSURfVElNRV9OT1JNQUxJWkFUSU9OOiAnU3RhcnQgdGltZSBvciBlbmQgdGltZSBpcyBtaXNzaW5nLicsXG4gIFVORVhQRUNURURfVElNRV9DT05GSUc6XG4gICAgJ1VuZXhwZWN0ZWQgbm9kZS1sZXZlbCBjb25maWcgcHJvdmlkZWQgZm9yIHRpbWUtc3luYyBwbHVnaW4uJyxcbiAgSU5WQUxJRF9USU1FX0lOVEVSVkFMOiAnSW50ZXJ2YWwgaXMgbWlzc2luZy4nLFxuICBBVk9JRElOR19QQURESU5HOiAoZGVzY3JpcHRpb246IHN0cmluZykgPT5cbiAgICBgQXZvaWRpbmcgcGFkZGluZyBhdCAke2Rlc2NyaXB0aW9ufWAsXG4gIEFWT0lESU5HX1BBRERJTkdfQllfRURHRVM6IChzdGFydDogYm9vbGVhbiwgZW5kOiBib29sZWFuKSA9PlxuICAgIGBBdm9pZGluZyBwYWRkaW5nIGF0ICR7XG4gICAgICBzdGFydCAmJiBlbmQgPyAnc3RhcnQgYW5kIGVuZCcgOiBzdGFydCA/ICdzdGFydCcgOiAnZW5kJ1xuICAgIH1gLFxuICBJTlZBTElEX0FHR1JFR0FUSU9OX01FVEhPRDogKG1ldHJpYzogc3RyaW5nKSA9PlxuICAgIGBBZ2dyZWdhdGlvbiBpcyBub3QgcG9zc2libGUgZm9yIGdpdmVuICR7bWV0cmljfSBzaW5jZSBtZXRob2QgaXMgJ25vbmUnLmAsXG4gIE1FVFJJQ19NSVNTSU5HOiAobWV0cmljOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+XG4gICAgYEFnZ3JlZ2F0aW9uIG1ldHJpYyAke21ldHJpY30gaXMgbm90IGZvdW5kIGluIGlucHV0c1ske2luZGV4fV0uYCxcbiAgSU5WQUxJRF9HUk9VUF9LRVk6IChrZXk6IHN0cmluZykgPT4gYEludmFsaWQgZ3JvdXAgJHtrZXl9LmAsXG4gIFJFR1JPVVBfRVJST1I6ICdub3QgYW4gYXJyYXkgb3Igc2hvdWxkIGNvbnRhaW4gYXQgbGVhc3Qgb25lIGtleScsXG4gIElOVkFMSURfRVhIQVVTVF9QTFVHSU46IChwbHVnaW5OYW1lOiBzdHJpbmcpID0+XG4gICAgYEludmFsaWQgZXhoYXVzdCBwbHVnaW46ICR7cGx1Z2luTmFtZX0uYCxcbiAgVU5LTk9XTl9QQVJBTTogKG5hbWU6IHN0cmluZykgPT5cbiAgICBgVW5rbm93biBwYXJhbWV0ZXI6ICR7bmFtZX0uIE9taXR0aW5nIGZyb20gdGhlIG91dHB1dC5gLFxuICBOT1RfSU5JVEFMSVpFRF9QTFVHSU46IChuYW1lOiBzdHJpbmcpID0+XG4gICAgYE5vdCBpbml0YWxpemVkIHBsdWdpbjogJHtuYW1lfS4gQ2hlY2sgaWYgJHtuYW1lfSBpcyBpbiAnbWFuaWZlc3QuaW5pdGFsaXplLnBsdWdpbnMnLmAsXG4gIE5PX09VVFBVVDogYFxuWW91IGhhdmUgbm90IGFkZGVkIGFuIG91dHB1dCBjb21tYW5kOiBcbi0tb3V0cHV0IDxzYXZlcGF0aD46IHdpbGwgc2F2ZSB5b3VyIG91dHB1dCBkYXRhIHRvIHRoZSBnaXZlbiBmaWxlcGF0aCAoZG8gbm90IHByb3ZpZGUgZmlsZSBleHRlbnNpb24pXG5Ob3RlIHRoYXQgZm9yIHRoZSAnLS1vdXRwdXQnIG9wdGlvbiB5b3UgYWxzbyBuZWVkIHRvIGRlZmluZSB0aGUgb3V0cHV0IHR5cGUgaW4geW91ciBtYW5pZmVzdCBmaWxlLiBTZWUgaHR0cHM6Ly9pZi5ncmVlbnNvZnR3YXJlLmZvdW5kYXRpb24vbWFqb3ItY29uY2VwdHMvbWFuaWZlc3QtZmlsZSNpbml0aWFsaXplYCxcbiAgVU5TVVBQT1JURURfRVJST1I6IChlcnJvck5hbWU6IHN0cmluZykgPT5cbiAgICBgVW5zdXBwb3J0ZWRFcnJvckNsYXNzOiBwbHVnaW4gdGhyZXcgZXJyb3IgY2xhc3M6ICR7ZXJyb3JOYW1lfSB0aGF0IGlzIG5vdCByZWNvZ25pemVkIGJ5IEltcGFjdCBGcmFtZXdvcmtgLFxuICAvKiogRGVidWdnaW5nIGxvZ3MgKi9cbiAgU1RBUlRJTkdfSUY6ICdTdGFydGluZyBJRicsXG4gIEVYSVRJTkdfSUY6ICdFeGl0aW5nIElGJyxcbiAgTE9BRElOR19NQU5JRkVTVDogJ0xvYWRpbmcgbWFuaWZlc3QnLFxuICBWQUxJREFUSU5HX01BTklGRVNUOiAnVmFsaWRhdGluZyBtYW5pZmVzdCcsXG4gIENBUFRVUklOR19SVU5USU1FX0VOVklST05NRU5UX0RBVEE6ICdDYXB0dXJpbmcgcnVudGltZSBlbnZpcm9ubWVudCBkYXRhJyxcbiAgQ0hFQ0tJTkdfQUdHUkVHQVRJT05fTUVUSE9EOiAodW5pdE5hbWU6IHN0cmluZykgPT5cbiAgICBgQ2hlY2tpbmcgYWdncmVnYXRpb24gbWV0aG9kIGZvciAke3VuaXROYW1lfWAsXG4gIElOSVRJQUxJWklOR19QTFVHSU5TOiAnSW5pdGlhbGl6aW5nIHBsdWdpbnMnLFxuICBJTklUSUFMSVpJTkdfUExVR0lOOiAocGx1Z2luTmFtZTogc3RyaW5nKSA9PiBgSW5pdGlhbGl6aW5nICR7cGx1Z2luTmFtZX1gLFxuICBMT0FESU5HX1BMVUdJTl9GUk9NX1BBVEg6IChwbHVnaW5OYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZykgPT5cbiAgICBgTG9hZGluZyAke3BsdWdpbk5hbWV9IGZyb20gJHtwYXRofWAsXG4gIENPTVBVVElOR19QSVBFTElORV9GT1JfTk9ERTogKG5vZGVOYW1lOiBzdHJpbmcpID0+XG4gICAgYENvbXB1dGluZyBwaXBlbGluZSBmb3IgXFxgJHtub2RlTmFtZX1cXGBgLFxuICBNRVJHSU5HX0RFRkFVTFRTX1dJVEhfSU5QVVRfREFUQTogJ01lcmdpbmcgZGVmYXVsdHMgd2l0aCBpbnB1dCBkYXRhJyxcbiAgQUdHUkVHQVRJTkdfT1VUUFVUUzogJ0FnZ3JlZ2F0aW5nIG91dHB1dHMnLFxuICBBR0dSRUdBVElOR19OT0RFOiAobm9kZU5hbWU6IHN0cmluZykgPT4gYEFnZ3JlZ2F0aW5nIG5vZGUgJHtub2RlTmFtZX1gLFxuICBQUkVQQVJJTkdfT1VUUFVUX0RBVEE6ICdQcmVwYXJpbmcgb3V0cHV0IGRhdGEnLFxuICBFWFBPUlRJTkdfVE9fWUFNTF9GSUxFOiAoc2F2ZXBhdGg6IHN0cmluZykgPT5cbiAgICBgRXhwb3J0aW5nIHRvIHlhbWwgZmlsZTogJHtzYXZlcGF0aH1gLFxuICBFTVBUWV9QSVBFTElORTogYFlvdSdyZSB1c2luZyBhbiBvbGQgc3R5bGUgbWFuaWZlc3QuIFBsZWFzZSB1cGRhdGUgZm9yIHBoYXNlZCBleGVjdXRpb24uIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGhlcmU6IFxuaHR0cHM6Ly9pZi5ncmVlbnNvZnR3YXJlLmZvdW5kYXRpb24vbWFqb3ItY29uY2VwdHMvbWFuaWZlc3QtZmlsZWAsXG4gIC8qKiBFeGhhdXN0IG1lc3NhZ2VzICovXG4gIE9VVFBVVF9SRVFVSVJFRDpcbiAgICAnT3V0cHV0IHBhdGggaXMgcmVxdWlyZWQsIHBsZWFzZSBtYWtlIHN1cmUgb3V0cHV0IGlzIGNvbmZpZ3VyZWQgcHJvcGVybHkuJyxcbiAgLyoqIFBsdWdpbnMgbWVzc2FnZXMgKi9cbiAgSU5WQUxJRF9OQU1FOlxuICAgICdgbmFtZWAgZ2xvYmFsIGNvbmZpZyBwYXJhbWV0ZXIgaXMgZW1wdHkgb3IgY29udGFpbnMgYWxsIHNwYWNlcycsXG4gIFNUQVJUX0xPV0VSX0VORDogJ2BzdGFydC10aW1lYCBzaG91bGQgYmUgbG93ZXIgdGhhbiBgZW5kLXRpbWVgJyxcbiAgVElNRVNUQU1QX1JFUVVJUkVEOiAoaW5kZXg6IG51bWJlcikgPT4gYHJlcXVpcmVkIGluIGlucHV0WyR7aW5kZXh9XWAsXG4gIElOVkFMSURfREFURVRJTUU6IChpbmRleDogbnVtYmVyKSA9PiBgaW52YWxpZCBkYXRldGltZSBpbiBpbnB1dFske2luZGV4fV1gLFxuICBYX1lfRVFVQUw6ICdUaGUgbGVuZ3RoIG9mIGB4YCBhbmQgYHlgIHNob3VsZCBiZSBlcXVhbCcsXG4gIEFSUkFZX0xFTkdUSF9OT05fRU1QVFk6XG4gICAgJ3RoZSBsZW5ndGggb2YgdGhlIGlucHV0IGFycmF5cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxJyxcbiAgV0lUSElOX1RIRV9SQU5HRTpcbiAgICAnVGhlIHRhcmdldCB4IHZhbHVlIG11c3QgYmUgd2l0aGluIHRoZSByYW5nZSBvZiB0aGUgZ2l2ZW4geCB2YWx1ZXMnLFxuICBNSVNTSU5HX0NTVl9DT0xVTU46IChjb2x1bW5OYW1lOiBzdHJpbmcpID0+XG4gICAgYFRoZXJlIGlzIG5vIGNvbHVtbiB3aXRoIHRoZSBuYW1lOiAke2NvbHVtbk5hbWV9LmAsXG4gIE5PX1FVRVJZX0RBVEE6XG4gICAgJ09uZSBvciBtb3JlIG9mIHRoZSBnaXZlbiBxdWVyeSBwYXJhbWV0ZXJzIGFyZSBub3QgZm91bmQgaW4gdGhlIHRhcmdldCBDU1YgZmlsZSBjb2x1bW4gaGVhZGVycy4nLFxuICBJTlZBTElEX0RBVEVfVFlQRTogKGRhdGU6IGFueSkgPT5cbiAgICBgVW5leHBlY3RlZCBkYXRlIGRhdGF0eXBlOiAke3R5cGVvZiBkYXRlfTogJHtkYXRlfWAsXG4gIElOVkFMSURfT0JTRVJWQVRJT05fT1ZFUkxBUDpcbiAgICAnT2JzZXJ2YXRpb24gdGltZXN0YW1wcyBvdmVybGFwLCBwbGVhc2UgY2hlY2sgaW5wdXRzLicsXG4gIFNDSV9NSVNTSU5HX0ZOX1VOSVQ6IChmdW5jdGlvbmFsVW5pdDogc3RyaW5nKSA9PlxuICAgIGAnY2FyYm9uJyBhbmQgJHtmdW5jdGlvbmFsVW5pdH0gc2hvdWxkIGJlIHByZXNlbnQgaW4geW91ciBpbnB1dCBkYXRhLmAsXG4gIE1JU1NJTkdfRlVOQ1RJT05BTF9VTklUX0NPTkZJRzpcbiAgICAnYGZ1bmN0aW9uYWwtdW5pdGAgc2hvdWxkIGJlIHByb3ZpZGVkIGluIHlvdXIgZ2xvYmFsIGNvbmZpZycsXG4gIE1JU1NJTkdfRlVOQ1RJT05BTF9VTklUX0lOUFVUOlxuICAgICdgZnVuY3Rpb25hbC11bml0YCB2YWx1ZSBpcyBtaXNzaW5nIGZyb20gaW5wdXQgZGF0YSBvciBpdCBpcyBub3QgYSBwb3NpdGl2ZSBpbnRlZ2VyJyxcbiAgUkVHRVhfTUlTTUFUQ0g6IChpbnB1dDogYW55LCBtYXRjaDogc3RyaW5nKSA9PlxuICAgIGBcXGAke2lucHV0fVxcYCBkb2VzIG5vdCBtYXRjaCB0aGUgJHttYXRjaH0gcmVnZXggZXhwcmVzc2lvbmAsXG4gIFNDSV9FTUJPRElFRF9FUlJPUjogKHVuaXQ6IHN0cmluZykgPT5cbiAgICBgaW52YWxpZCBudW1iZXIuIHBsZWFzZSBwcm92aWRlIGl0IGFzIFxcYCR7dW5pdH1cXGAgdG8gaW5wdXRgLFxuICBNSVNTSU5HX01JTl9NQVg6ICdDb25maWcgaXMgbWlzc2luZyBtaW4gb3IgbWF4IHZhbHVlJyxcbiAgSU5WQUxJRF9NSU5fTUFYOiAobmFtZTogc3RyaW5nKSA9PlxuICAgIGBNaW4gdmFsdWUgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWF4IHZhbHVlIG9mICR7bmFtZX1gLFxuICBGSUxFX0ZFVENIX0ZBSUxFRDogKFxuICAgIGZpbGVwYXRoOiBzdHJpbmcsXG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICkgPT4gYEZhaWxlZCBmZXRjaGluZyB0aGUgZmlsZTogJHtmaWxlcGF0aH0uXG4ke21lc3NhZ2V9YCxcbiAgRklMRV9SRUFEX0ZBSUxFRDogKFxuICAgIGZpbGVwYXRoOiBzdHJpbmcsXG4gICAgZXJyb3I6IHN0cmluZ1xuICApID0+IGBGYWlsZWQgcmVhZGluZyB0aGUgZmlsZTogJHtmaWxlcGF0aH0uIFxuJHtlcnJvcn1gLFxuICBaRVJPX0RJVklTSU9OOiAobW9kdWxlTmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PlxuICAgIGAtLSBTS0lQUElORyAtLSBEaXZpc2lvbkJ5WmVybzogeW91IGFyZSBhdHRlbXB0aW5nIHRvIGRpdmlkZSBieSB6ZXJvIGluICR7bW9kdWxlTmFtZX0gcGx1Z2luIDogaW5wdXRzWyR7aW5kZXh9XVxcbmAsXG4gIE1JU1NJTkdfR0xPQkFMX0NPTkZJRzogJ0dsb2JhbCBjb25maWcgaXMgbm90IHByb3ZpZGVkLicsXG4gIE1JU1NJTkdfSU5QVVRfREFUQTogKHBhcmFtOiBzdHJpbmcpID0+XG4gICAgYCR7cGFyYW19IGlzIG1pc3NpbmcgZnJvbSB0aGUgaW5wdXQgYXJyYXksIG9yIGhhcyBudWxsaXNoIHZhbHVlLmAsXG59O1xuIl19
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const config_1 = require("../common/config");
|
|
5
|
+
const validations_1 = require("../common/util/validations");
|
|
6
|
+
const debug_logger_1 = require("../common/util/debug-logger");
|
|
7
|
+
const logger_1 = require("../common/util/logger");
|
|
8
|
+
const load_1 = require("../common/lib/load");
|
|
9
|
+
const aggregate_1 = require("./lib/aggregate");
|
|
10
|
+
const environment_1 = require("./lib/environment");
|
|
11
|
+
const initialize_1 = require("./lib/initialize");
|
|
12
|
+
const compute_1 = require("./lib/compute");
|
|
13
|
+
const exhaust_1 = require("./lib/exhaust");
|
|
14
|
+
const explain_1 = require("./lib/explain");
|
|
15
|
+
const aggregation_1 = require("./types/aggregation");
|
|
16
|
+
const args_1 = require("./util/args");
|
|
17
|
+
const helpers_1 = require("./util/helpers");
|
|
18
|
+
const config_2 = require("./config");
|
|
19
|
+
const { EXITING_IF, STARTING_IF } = config_2.STRINGS;
|
|
20
|
+
const { DISCLAIMER_MESSAGE } = config_1.STRINGS;
|
|
21
|
+
const impactEngine = async () => {
|
|
22
|
+
const options = (0, args_1.parseIfRunProcessArgs)();
|
|
23
|
+
const { inputPath, outputOptions, debug, observe, regroup, compute: computeFlag, } = options;
|
|
24
|
+
debug_logger_1.debugLogger.overrideConsoleMethods(!!debug);
|
|
25
|
+
logger_1.logger.info(DISCLAIMER_MESSAGE);
|
|
26
|
+
console.info(STARTING_IF);
|
|
27
|
+
const { rawManifest } = await (0, load_1.load)(inputPath);
|
|
28
|
+
const envManifest = await (0, environment_1.injectEnvironment)(rawManifest);
|
|
29
|
+
try {
|
|
30
|
+
const { tree, ...context } = (0, validations_1.validateManifest)(envManifest);
|
|
31
|
+
if (context.aggregation) {
|
|
32
|
+
const convertMetrics = context.aggregation?.metrics.map((metric) => ({
|
|
33
|
+
[metric]: aggregation_1.AGGREGATION_METHODS[2],
|
|
34
|
+
}));
|
|
35
|
+
(0, aggregate_1.storeAggregationMetrics)(...convertMetrics);
|
|
36
|
+
}
|
|
37
|
+
const pluginStorage = await (0, initialize_1.initialize)(context);
|
|
38
|
+
const computedTree = await (0, compute_1.compute)(tree, {
|
|
39
|
+
context,
|
|
40
|
+
pluginStorage,
|
|
41
|
+
observe,
|
|
42
|
+
regroup,
|
|
43
|
+
compute: computeFlag,
|
|
44
|
+
});
|
|
45
|
+
const aggregatedTree = (0, aggregate_1.aggregate)(computedTree, context.aggregation);
|
|
46
|
+
envManifest.explainer && (context.explain = (0, explain_1.explain)());
|
|
47
|
+
await (0, exhaust_1.exhaust)(aggregatedTree, context, outputOptions);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (error instanceof Error) {
|
|
51
|
+
envManifest.execution.status = 'fail';
|
|
52
|
+
envManifest.execution.error = error.toString();
|
|
53
|
+
logger_1.logger.error(error);
|
|
54
|
+
const { tree, ...context } = envManifest;
|
|
55
|
+
if (error.name !== 'ExhaustError') {
|
|
56
|
+
(0, exhaust_1.exhaust)(tree, context, outputOptions);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
console.info(EXITING_IF);
|
|
61
|
+
};
|
|
62
|
+
impactEngine().catch(helpers_1.andHandle);
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaWYtcnVuL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDZDQUEyRDtBQUMzRCw0REFBNEQ7QUFDNUQsOERBQXdEO0FBQ3hELGtEQUE2QztBQUM3Qyw2Q0FBd0M7QUFFeEMsK0NBQW1FO0FBQ25FLG1EQUFvRDtBQUNwRCxpREFBNEM7QUFDNUMsMkNBQXNDO0FBQ3RDLDJDQUFzQztBQUN0QywyQ0FBc0M7QUFFdEMscURBQXdEO0FBRXhELHNDQUFrRDtBQUNsRCw0Q0FBeUM7QUFFekMscUNBQWlDO0FBRWpDLE1BQU0sRUFBQyxVQUFVLEVBQUUsV0FBVyxFQUFDLEdBQUcsZ0JBQU8sQ0FBQztBQUMxQyxNQUFNLEVBQUMsa0JBQWtCLEVBQUMsR0FBRyxnQkFBYyxDQUFDO0FBRTVDLE1BQU0sWUFBWSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUEsNEJBQXFCLEdBQUUsQ0FBQztJQUN4QyxNQUFNLEVBQ0osU0FBUyxFQUNULGFBQWEsRUFDYixLQUFLLEVBQ0wsT0FBTyxFQUNQLE9BQU8sRUFDUCxPQUFPLEVBQUUsV0FBVyxHQUNyQixHQUFHLE9BQU8sQ0FBQztJQUVaLDBCQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTVDLGVBQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTFCLE1BQU0sRUFBQyxXQUFXLEVBQUMsR0FBRyxNQUFNLElBQUEsV0FBSSxFQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBQSwrQkFBaUIsRUFBQyxXQUFXLENBQUMsQ0FBQztJQUV6RCxJQUFJO1FBQ0YsTUFBTSxFQUFDLElBQUksRUFBRSxHQUFHLE9BQU8sRUFBQyxHQUFHLElBQUEsOEJBQWdCLEVBQUMsV0FBVyxDQUFDLENBQUM7UUFFekQsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQ3ZCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FDckQsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ25CLENBQUMsTUFBTSxDQUFDLEVBQUUsaUNBQW1CLENBQUMsQ0FBQyxDQUFDO2FBQ2pDLENBQUMsQ0FDSCxDQUFDO1lBRUYsSUFBQSxtQ0FBdUIsRUFBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFBLHVCQUFVLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFBLGlCQUFPLEVBQUMsSUFBSSxFQUFFO1lBQ3ZDLE9BQU87WUFDUCxhQUFhO1lBQ2IsT0FBTztZQUNQLE9BQU87WUFDUCxPQUFPLEVBQUUsV0FBVztTQUNyQixDQUFDLENBQUM7UUFFSCxNQUFNLGNBQWMsR0FBRyxJQUFBLHFCQUFTLEVBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRSxXQUFXLENBQUMsU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFBLGlCQUFPLEdBQUUsQ0FBQyxDQUFDO1FBRXZELE1BQU0sSUFBQSxpQkFBTyxFQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7S0FDdkQ7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRTtZQUMxQixXQUFXLENBQUMsU0FBVSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDdkMsV0FBVyxDQUFDLFNBQVUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hELGVBQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsTUFBTSxFQUFDLElBQUksRUFBRSxHQUFHLE9BQU8sRUFBQyxHQUFHLFdBQVcsQ0FBQztZQUV2QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFO2dCQUNqQyxJQUFBLGlCQUFPLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQzthQUN2QztTQUNGO0tBQ0Y7SUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzNCLENBQUMsQ0FBQztBQUVGLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQyxtQkFBUyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5pbXBvcnQge1NUUklOR1MgYXMgQ09NTU9OX1NUUklOR1N9IGZyb20gJy4uL2NvbW1vbi9jb25maWcnO1xuaW1wb3J0IHt2YWxpZGF0ZU1hbmlmZXN0fSBmcm9tICcuLi9jb21tb24vdXRpbC92YWxpZGF0aW9ucyc7XG5pbXBvcnQge2RlYnVnTG9nZ2VyfSBmcm9tICcuLi9jb21tb24vdXRpbC9kZWJ1Zy1sb2dnZXInO1xuaW1wb3J0IHtsb2dnZXJ9IGZyb20gJy4uL2NvbW1vbi91dGlsL2xvZ2dlcic7XG5pbXBvcnQge2xvYWR9IGZyb20gJy4uL2NvbW1vbi9saWIvbG9hZCc7XG5cbmltcG9ydCB7YWdncmVnYXRlLCBzdG9yZUFnZ3JlZ2F0aW9uTWV0cmljc30gZnJvbSAnLi9saWIvYWdncmVnYXRlJztcbmltcG9ydCB7aW5qZWN0RW52aXJvbm1lbnR9IGZyb20gJy4vbGliL2Vudmlyb25tZW50JztcbmltcG9ydCB7aW5pdGlhbGl6ZX0gZnJvbSAnLi9saWIvaW5pdGlhbGl6ZSc7XG5pbXBvcnQge2NvbXB1dGV9IGZyb20gJy4vbGliL2NvbXB1dGUnO1xuaW1wb3J0IHtleGhhdXN0fSBmcm9tICcuL2xpYi9leGhhdXN0JztcbmltcG9ydCB7ZXhwbGFpbn0gZnJvbSAnLi9saWIvZXhwbGFpbic7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fTUVUSE9EU30gZnJvbSAnLi90eXBlcy9hZ2dyZWdhdGlvbic7XG5cbmltcG9ydCB7cGFyc2VJZlJ1blByb2Nlc3NBcmdzfSBmcm9tICcuL3V0aWwvYXJncyc7XG5pbXBvcnQge2FuZEhhbmRsZX0gZnJvbSAnLi91dGlsL2hlbHBlcnMnO1xuXG5pbXBvcnQge1NUUklOR1N9IGZyb20gJy4vY29uZmlnJztcblxuY29uc3Qge0VYSVRJTkdfSUYsIFNUQVJUSU5HX0lGfSA9IFNUUklOR1M7XG5jb25zdCB7RElTQ0xBSU1FUl9NRVNTQUdFfSA9IENPTU1PTl9TVFJJTkdTO1xuXG5jb25zdCBpbXBhY3RFbmdpbmUgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUlmUnVuUHJvY2Vzc0FyZ3MoKTtcbiAgY29uc3Qge1xuICAgIGlucHV0UGF0aCxcbiAgICBvdXRwdXRPcHRpb25zLFxuICAgIGRlYnVnLFxuICAgIG9ic2VydmUsXG4gICAgcmVncm91cCxcbiAgICBjb21wdXRlOiBjb21wdXRlRmxhZyxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgZGVidWdMb2dnZXIub3ZlcnJpZGVDb25zb2xlTWV0aG9kcyghIWRlYnVnKTtcblxuICBsb2dnZXIuaW5mbyhESVNDTEFJTUVSX01FU1NBR0UpO1xuICBjb25zb2xlLmluZm8oU1RBUlRJTkdfSUYpO1xuXG4gIGNvbnN0IHtyYXdNYW5pZmVzdH0gPSBhd2FpdCBsb2FkKGlucHV0UGF0aCk7XG4gIGNvbnN0IGVudk1hbmlmZXN0ID0gYXdhaXQgaW5qZWN0RW52aXJvbm1lbnQocmF3TWFuaWZlc3QpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qge3RyZWUsIC4uLmNvbnRleHR9ID0gdmFsaWRhdGVNYW5pZmVzdChlbnZNYW5pZmVzdCk7XG5cbiAgICBpZiAoY29udGV4dC5hZ2dyZWdhdGlvbikge1xuICAgICAgY29uc3QgY29udmVydE1ldHJpY3MgPSBjb250ZXh0LmFnZ3JlZ2F0aW9uPy5tZXRyaWNzLm1hcChcbiAgICAgICAgKG1ldHJpYzogc3RyaW5nKSA9PiAoe1xuICAgICAgICAgIFttZXRyaWNdOiBBR0dSRUdBVElPTl9NRVRIT0RTWzJdLFxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgc3RvcmVBZ2dyZWdhdGlvbk1ldHJpY3MoLi4uY29udmVydE1ldHJpY3MpO1xuICAgIH1cblxuICAgIGNvbnN0IHBsdWdpblN0b3JhZ2UgPSBhd2FpdCBpbml0aWFsaXplKGNvbnRleHQpO1xuICAgIGNvbnN0IGNvbXB1dGVkVHJlZSA9IGF3YWl0IGNvbXB1dGUodHJlZSwge1xuICAgICAgY29udGV4dCxcbiAgICAgIHBsdWdpblN0b3JhZ2UsXG4gICAgICBvYnNlcnZlLFxuICAgICAgcmVncm91cCxcbiAgICAgIGNvbXB1dGU6IGNvbXB1dGVGbGFnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYWdncmVnYXRlZFRyZWUgPSBhZ2dyZWdhdGUoY29tcHV0ZWRUcmVlLCBjb250ZXh0LmFnZ3JlZ2F0aW9uKTtcbiAgICBlbnZNYW5pZmVzdC5leHBsYWluZXIgJiYgKGNvbnRleHQuZXhwbGFpbiA9IGV4cGxhaW4oKSk7XG5cbiAgICBhd2FpdCBleGhhdXN0KGFnZ3JlZ2F0ZWRUcmVlLCBjb250ZXh0LCBvdXRwdXRPcHRpb25zKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgZW52TWFuaWZlc3QuZXhlY3V0aW9uIS5zdGF0dXMgPSAnZmFpbCc7XG4gICAgICBlbnZNYW5pZmVzdC5leGVjdXRpb24hLmVycm9yID0gZXJyb3IudG9TdHJpbmcoKTtcbiAgICAgIGxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgICBjb25zdCB7dHJlZSwgLi4uY29udGV4dH0gPSBlbnZNYW5pZmVzdDtcblxuICAgICAgaWYgKGVycm9yLm5hbWUgIT09ICdFeGhhdXN0RXJyb3InKSB7XG4gICAgICAgIGV4aGF1c3QodHJlZSwgY29udGV4dCwgb3V0cHV0T3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnNvbGUuaW5mbyhFWElUSU5HX0lGKTtcbn07XG5cbmltcGFjdEVuZ2luZSgpLmNhdGNoKGFuZEhhbmRsZSk7XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AggregationParams, AggregationMetricsWithMethod } from '../../common/types/manifest';
|
|
2
|
+
import { AggregationMetric } from '../types/aggregation';
|
|
3
|
+
/**
|
|
4
|
+
* If aggregation is disabled, then returns given `tree`.
|
|
5
|
+
* Otherwise creates copy of the tree, then applies aggregation to it.
|
|
6
|
+
*/
|
|
7
|
+
export declare const aggregate: (tree: any, aggregationParams: AggregationParams) => any;
|
|
8
|
+
/**
|
|
9
|
+
* Gets or stores aggregation metrics.
|
|
10
|
+
*/
|
|
11
|
+
export declare const storeAggregationMetrics: (aggregationMetrics?: AggregationMetricsWithMethod) => AggregationMetric;
|
|
12
|
+
/**
|
|
13
|
+
* Returns aggregation method for given `unitName`. If doesn't exist then returns value `sum`.
|
|
14
|
+
*/
|
|
15
|
+
export declare const getAggregationMethod: (unitName: string) => import("../types/aggregation").AggregationMethodTypes | undefined;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAggregationMethod = exports.storeAggregationMetrics = exports.aggregate = void 0;
|
|
4
|
+
const debug_logger_1 = require("../../common/util/debug-logger");
|
|
5
|
+
const logger_1 = require("../../common/util/logger");
|
|
6
|
+
const aggregation_helper_1 = require("../util/aggregation-helper");
|
|
7
|
+
const log_memoize_1 = require("../util/log-memoize");
|
|
8
|
+
const strings_1 = require("../config/strings");
|
|
9
|
+
const { AGGREGATING_NODE, AGGREGATING_OUTPUTS, UNKNOWN_PARAM, CHECKING_AGGREGATION_METHOD, } = strings_1.STRINGS;
|
|
10
|
+
/**
|
|
11
|
+
* Gets `i`th element from all children outputs and collects them in single array.
|
|
12
|
+
*/
|
|
13
|
+
const getIthElementsFromChildren = (children, i) => {
|
|
14
|
+
const values = Object.values(children);
|
|
15
|
+
return values.map((value) => {
|
|
16
|
+
const output = value.outputs;
|
|
17
|
+
return output[i];
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* 1. Gets the i'th element from each childrens outputs (treating children as rows and we are after a column of data).
|
|
22
|
+
* 2. Now we just aggregate over the `ithSliceOfOutputs` the same as we did for the normal outputs.
|
|
23
|
+
*/
|
|
24
|
+
const temporalAggregation = (node, metrics) => {
|
|
25
|
+
const outputs = [];
|
|
26
|
+
const values = Object.values(node.children);
|
|
27
|
+
for (let i = 0; i < values[0].outputs.length; i++) {
|
|
28
|
+
const ithSliceOfOutputs = getIthElementsFromChildren(node.children, i);
|
|
29
|
+
outputs.push((0, aggregation_helper_1.aggregateInputsIntoOne)(ithSliceOfOutputs, metrics, true));
|
|
30
|
+
}
|
|
31
|
+
return outputs;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Navigates the tree depth first, bottom up,
|
|
35
|
+
* left to right aggregating the component nodes and then the grouping nodes will be aggregated
|
|
36
|
+
* only when all their child nodes have been aggregated.
|
|
37
|
+
* 1. Aggregates all the children.
|
|
38
|
+
* 2. At this point you can be positive all your children have been aggregated and so you can now work on aggregating yourself.
|
|
39
|
+
* 3. It's component node, аggregates just the outputs of THIS component node (horizontal/component aggregation).
|
|
40
|
+
* 4. Else it's grouping node, first does temporal aggregation. This assumes everything is on the same time-grid.
|
|
41
|
+
* The outputs of the grouping node are the aggregated time bucketed outputs of it's children.
|
|
42
|
+
* 5. Now a grouping node has it's own outputs, it can horizotnally aggregate them.
|
|
43
|
+
*/
|
|
44
|
+
const aggregateNode = (node, aggregationParams) => {
|
|
45
|
+
const metrics = aggregationParams.metrics.map(metric => ({ [metric]: 'none' }));
|
|
46
|
+
const type = aggregationParams.type;
|
|
47
|
+
if (node.children) {
|
|
48
|
+
for (const child in node.children) {
|
|
49
|
+
console.debug(AGGREGATING_NODE(child));
|
|
50
|
+
aggregateNode(node.children[child], aggregationParams);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (!node.children) {
|
|
54
|
+
if (type === 'horizontal' || type === 'both') {
|
|
55
|
+
node.aggregated = (0, aggregation_helper_1.aggregateInputsIntoOne)(node.outputs, metrics);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
if (type === 'vertical' || type === 'both') {
|
|
60
|
+
const outputs = temporalAggregation(node, metrics);
|
|
61
|
+
node.outputs = outputs;
|
|
62
|
+
node.aggregated = (0, aggregation_helper_1.aggregateInputsIntoOne)(outputs, metrics);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* If aggregation is disabled, then returns given `tree`.
|
|
68
|
+
* Otherwise creates copy of the tree, then applies aggregation to it.
|
|
69
|
+
*/
|
|
70
|
+
const aggregate = (tree, aggregationParams) => {
|
|
71
|
+
console.debug(AGGREGATING_OUTPUTS);
|
|
72
|
+
if (!aggregationParams || !aggregationParams.type) {
|
|
73
|
+
return tree;
|
|
74
|
+
}
|
|
75
|
+
const copyOfTree = structuredClone(tree);
|
|
76
|
+
aggregateNode(copyOfTree, aggregationParams);
|
|
77
|
+
return copyOfTree;
|
|
78
|
+
};
|
|
79
|
+
exports.aggregate = aggregate;
|
|
80
|
+
/**
|
|
81
|
+
* Gets or stores aggregation metrics.
|
|
82
|
+
*/
|
|
83
|
+
const storeAggregationMetrics = (aggregationMetrics) => {
|
|
84
|
+
if (aggregationMetrics) {
|
|
85
|
+
metricManager.metrics = {
|
|
86
|
+
...metricManager.metrics,
|
|
87
|
+
...aggregationMetrics,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
return metricManager.metrics;
|
|
91
|
+
};
|
|
92
|
+
exports.storeAggregationMetrics = storeAggregationMetrics;
|
|
93
|
+
/**
|
|
94
|
+
* Creates an encapsulated object to retrieve the metrics.
|
|
95
|
+
*/
|
|
96
|
+
const metricManager = (() => {
|
|
97
|
+
let metric;
|
|
98
|
+
const manager = {
|
|
99
|
+
get metrics() {
|
|
100
|
+
return metric;
|
|
101
|
+
},
|
|
102
|
+
set metrics(value) {
|
|
103
|
+
metric = value;
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
return manager;
|
|
107
|
+
})();
|
|
108
|
+
/**
|
|
109
|
+
* Returns aggregation method for given `unitName`. If doesn't exist then returns value `sum`.
|
|
110
|
+
*/
|
|
111
|
+
const getAggregationMethod = (unitName) => {
|
|
112
|
+
debug_logger_1.debugLogger.setExecutingPluginName();
|
|
113
|
+
(0, log_memoize_1.memoizedLog)(console.debug, CHECKING_AGGREGATION_METHOD(unitName));
|
|
114
|
+
const aggregationMetricsStorage = (0, exports.storeAggregationMetrics)();
|
|
115
|
+
if (aggregationMetricsStorage &&
|
|
116
|
+
Object.keys(aggregationMetricsStorage).includes(unitName)) {
|
|
117
|
+
return aggregationMetricsStorage[unitName];
|
|
118
|
+
}
|
|
119
|
+
(0, log_memoize_1.memoizedLog)(logger_1.logger.warn, UNKNOWN_PARAM(unitName));
|
|
120
|
+
return undefined;
|
|
121
|
+
};
|
|
122
|
+
exports.getAggregationMethod = getAggregationMethod;
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lmLXJ1bi9saWIvYWdncmVnYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLGlFQUEyRDtBQUMzRCxxREFBZ0Q7QUFPaEQsbUVBQWtFO0FBQ2xFLHFEQUFnRDtBQUloRCwrQ0FBMEM7QUFFMUMsTUFBTSxFQUNKLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLDJCQUEyQixHQUM1QixHQUFHLGlCQUFPLENBQUM7QUFFWjs7R0FFRztBQUNILE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxRQUFhLEVBQUUsQ0FBUyxFQUFFLEVBQUU7SUFDOUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV2QyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtRQUMvQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBRTdCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQVMsRUFBRSxPQUE0QixFQUFFLEVBQUU7SUFDdEUsTUFBTSxPQUFPLEdBQW1CLEVBQUUsQ0FBQztJQUNuQyxNQUFNLE1BQU0sR0FBUSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDakQsTUFBTSxpQkFBaUIsR0FBRywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZF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LENBQUMsQ0FBQyxFQUFFLENBQUM7QUFFTDs7R0FFRztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEVBQUU7SUFDdkQsMEJBQVcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3JDLElBQUEseUJBQVcsRUFBQyxPQUFPLENBQUMsS0FBSyxFQUFFLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbEUsTUFBTSx5QkFBeUIsR0FBRyxJQUFBLCtCQUF1QixHQUFFLENBQUM7SUFFNUQsSUFDRSx5QkFBeUI7UUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFDekQ7UUFDQSxPQUFPLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQzVDO0lBRUQsSUFBQSx5QkFBVyxFQUFDLGVBQU0sQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFbEQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBZlcsUUFBQSxvQkFBb0Isd0JBZS9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQbHVnaW5QYXJhbXN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5cbmltcG9ydCB7ZGVidWdMb2dnZXJ9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlsL2RlYnVnLWxvZ2dlcic7XG5pbXBvcnQge2xvZ2dlcn0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWwvbG9nZ2VyJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9uUGFyYW1zLFxuICBBZ2dyZWdhdGlvblBhcmFtc1N1cmUsXG4gIEFnZ3JlZ2F0aW9uTWV0cmljc1dpdGhNZXRob2QsXG59IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcy9tYW5pZmVzdCc7XG5cbmltcG9ydCB7YWdncmVnYXRlSW5wdXRzSW50b09uZX0gZnJvbSAnLi4vdXRpbC9hZ2dyZWdhdGlvbi1oZWxwZXInO1xuaW1wb3J0IHttZW1vaXplZExvZ30gZnJvbSAnLi4vdXRpbC9sb2ctbWVtb2l6ZSc7XG5cbmltcG9ydCB7QWdncmVnYXRpb25NZXRyaWN9IGZyb20gJy4uL3R5cGVzL2FnZ3JlZ2F0aW9uJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi9jb25maWcvc3RyaW5ncyc7XG5cbmNvbnN0IHtcbiAgQUdHUkVHQVRJTkdfTk9ERSxcbiAgQUdHUkVHQVRJTkdfT1VUUFVUUyxcbiAgVU5LTk9XTl9QQVJBTSxcbiAgQ0hFQ0tJTkdfQUdHUkVHQVRJT05fTUVUSE9ELFxufSA9IFNUUklOR1M7XG5cbi8qKlxuICogR2V0cyBgaWB0aCBlbGVtZW50IGZyb20gYWxsIGNoaWxkcmVuIG91dHB1dHMgYW5kIGNvbGxlY3RzIHRoZW0gaW4gc2luZ2xlIGFycmF5LlxuICovXG5jb25zdCBnZXRJdGhFbGVtZW50c0Zyb21DaGlsZHJlbiA9IChjaGlsZHJlbjogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgY29uc3QgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyhjaGlsZHJlbik7XG5cbiAgcmV0dXJuIHZhbHVlcy5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSB2YWx1ZS5vdXRwdXRzO1xuXG4gICAgcmV0dXJuIG91dHB1dFtpXTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIDEuIEdldHMgdGhlIGkndGggZWxlbWVudCBmcm9tIGVhY2ggY2hpbGRyZW5zIG91dHB1dHMgKHRyZWF0aW5nIGNoaWxkcmVuIGFzIHJvd3MgYW5kIHdlIGFyZSBhZnRlciBhIGNvbHVtbiBvZiBkYXRhKS5cbiAqIDIuIE5vdyB3ZSBqdXN0IGFnZ3JlZ2F0ZSBvdmVyIHRoZSBgaXRoU2xpY2VPZk91dHB1dHNgIHRoZSBzYW1lIGFzIHdlIGRpZCBmb3IgdGhlIG5vcm1hbCBvdXRwdXRzLlxuICovXG5jb25zdCB0ZW1wb3JhbEFnZ3JlZ2F0aW9uID0gKG5vZGU6IGFueSwgbWV0cmljczogQWdncmVnYXRpb25NZXRyaWNbXSkgPT4ge1xuICBjb25zdCBvdXRwdXRzOiBQbHVnaW5QYXJhbXNbXSA9IFtdO1xuICBjb25zdCB2YWx1ZXM6IGFueSA9IE9iamVjdC52YWx1ZXMobm9kZS5jaGlsZHJlbik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXNbMF0ub3V0cHV0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGl0aFNsaWNlT2ZPdXRwdXRzID0gZ2V0SXRoRWxlbWVudHNGcm9tQ2hpbGRyZW4obm9kZS5jaGlsZHJlbiwgaSk7XG4gICAgb3V0cHV0cy5wdXNoKGFnZ3JlZ2F0ZUlucHV0c0ludG9PbmUoaXRoU2xpY2VPZk91dHB1dHMsIG1ldHJpY3MsIHRydWUpKTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXRzO1xufTtcblxuLyoqXG4gKiBOYXZpZ2F0ZXMgdGhlIHRyZWUgZGVwdGggZmlyc3QsIGJvdHRvbSB1cCxcbiAqICBsZWZ0IHRvIHJpZ2h0IGFnZ3JlZ2F0aW5nIHRoZSBjb21wb25lbnQgbm9kZXMgYW5kIHRoZW4gdGhlIGdyb3VwaW5nIG5vZGVzIHdpbGwgYmUgYWdncmVnYXRlZFxuICogIG9ubHkgd2hlbiBhbGwgdGhlaXIgY2hpbGQgbm9kZXMgaGF2ZSBiZWVuIGFnZ3JlZ2F0ZWQuXG4gKiAxLiBBZ2dyZWdhdGVzIGFsbCB0aGUgY2hpbGRyZW4uXG4gKiAyLiBBdCB0aGlzIHBvaW50IHlvdSBjYW4gYmUgcG9zaXRpdmUgYWxsIHlvdXIgY2hpbGRyZW4gaGF2ZSBiZWVuIGFnZ3JlZ2F0ZWQgYW5kIHNvIHlvdSBjYW4gbm93IHdvcmsgb24gYWdncmVnYXRpbmcgeW91cnNlbGYuXG4gKiAzLiBJdCdzIGNvbXBvbmVudCBub2RlLCDQsGdncmVnYXRlcyBqdXN0IHRoZSBvdXRwdXRzIG9mIFRISVMgY29tcG9uZW50IG5vZGUgKGhvcml6b250YWwvY29tcG9uZW50IGFnZ3JlZ2F0aW9uKS5cbiAqIDQuIEVsc2UgaXQncyBncm91cGluZyBub2RlLCBmaXJzdCBkb2VzIHRlbXBvcmFsIGFnZ3JlZ2F0aW9uLiBUaGlzIGFzc3VtZXMgZXZlcnl0aGluZyBpcyBvbiB0aGUgc2FtZSB0aW1lLWdyaWQuXG4gKiAgICBUaGUgb3V0cHV0cyBvZiB0aGUgZ3JvdXBpbmcgbm9kZSBhcmUgdGhlIGFnZ3JlZ2F0ZWQgdGltZSBidWNrZXRlZCBvdXRwdXRzIG9mIGl0J3MgY2hpbGRyZW4uXG4gKiA1LiBOb3cgYSBncm91cGluZyBub2RlIGhhcyBpdCdzIG93biBvdXRwdXRzLCBpdCBjYW4gaG9yaXpvdG5hbGx5IGFnZ3JlZ2F0ZSB0aGVtLlxuICovXG5jb25zdCBhZ2dyZWdhdGVOb2RlID0gKG5vZGU6IGFueSwgYWdncmVnYXRpb25QYXJhbXM6IEFnZ3JlZ2F0aW9uUGFyYW1zU3VyZSkgPT4ge1xuICBjb25zdCBtZXRyaWNzOiBBZ2dyZWdhdGlvbk1ldHJpY1tdID0gYWdncmVnYXRpb25QYXJhbXMhLm1ldHJpY3MubWFwKFxuICAgIG1ldHJpYyA9PiAoe1ttZXRyaWNdOiAnbm9uZSd9KVxuICApO1xuICBjb25zdCB0eXBlID0gYWdncmVnYXRpb25QYXJhbXMhLnR5cGU7XG5cbiAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIGluIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoQUdHUkVHQVRJTkdfTk9ERShjaGlsZCkpO1xuXG4gICAgICBhZ2dyZWdhdGVOb2RlKG5vZGUuY2hpbGRyZW5bY2hpbGRdLCBhZ2dyZWdhdGlvblBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFub2RlLmNoaWxkcmVuKSB7XG4gICAgaWYgKHR5cGUgPT09ICdob3Jpem9udGFsJyB8fCB0eXBlID09PSAnYm90aCcpIHtcbiAgICAgIG5vZGUuYWdncmVnYXRlZCA9IGFnZ3JlZ2F0ZUlucHV0c0ludG9PbmUobm9kZS5vdXRwdXRzLCBtZXRyaWNzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGUgPT09ICd2ZXJ0aWNhbCcgfHwgdHlwZSA9PT0gJ2JvdGgnKSB7XG4gICAgICBjb25zdCBvdXRwdXRzID0gdGVtcG9yYWxBZ2dyZWdhdGlvbihub2RlLCBtZXRyaWNzKTtcbiAgICAgIG5vZGUub3V0cHV0cyA9IG91dHB1dHM7XG4gICAgICBub2RlLmFnZ3JlZ2F0ZWQgPSBhZ2dyZWdhdGVJbnB1dHNJbnRvT25lKG91dHB1dHMsIG1ldHJpY3MpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBJZiBhZ2dyZWdhdGlvbiBpcyBkaXNhYmxlZCwgdGhlbiByZXR1cm5zIGdpdmVuIGB0cmVlYC5cbiAqIE90aGVyd2lzZSBjcmVhdGVzIGNvcHkgb2YgdGhlIHRyZWUsIHRoZW4gYXBwbGllcyBhZ2dyZWdhdGlvbiB0byBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFnZ3JlZ2F0ZSA9ICh0cmVlOiBhbnksIGFnZ3JlZ2F0aW9uUGFyYW1zOiBBZ2dyZWdhdGlvblBhcmFtcykgPT4ge1xuICBjb25zb2xlLmRlYnVnKEFHR1JFR0FUSU5HX09VVFBVVFMpO1xuXG4gIGlmICghYWdncmVnYXRpb25QYXJhbXMgfHwgIWFnZ3JlZ2F0aW9uUGFyYW1zLnR5cGUpIHtcbiAgICByZXR1cm4gdHJlZTtcbiAgfVxuXG4gIGNvbnN0IGNvcHlPZlRyZWUgPSBzdHJ1Y3R1cmVkQ2xvbmUodHJlZSk7XG4gIGFnZ3JlZ2F0ZU5vZGUoY29weU9mVHJlZSwgYWdncmVnYXRpb25QYXJhbXMpO1xuXG4gIHJldHVybiBjb3B5T2ZUcmVlO1xufTtcblxuLyoqXG4gKiBHZXRzIG9yIHN0b3JlcyBhZ2dyZWdhdGlvbiBtZXRyaWNzLlxuICovXG5leHBvcnQgY29uc3Qgc3RvcmVBZ2dyZWdhdGlvbk1ldHJpY3MgPSAoXG4gIGFnZ3JlZ2F0aW9uTWV0cmljcz86IEFnZ3JlZ2F0aW9uTWV0cmljc1dpdGhNZXRob2RcbikgPT4ge1xuICBpZiAoYWdncmVnYXRpb25NZXRyaWNzKSB7XG4gICAgbWV0cmljTWFuYWdlci5tZXRyaWNzID0ge1xuICAgICAgLi4ubWV0cmljTWFuYWdlci5tZXRyaWNzLFxuICAgICAgLi4uYWdncmVnYXRpb25NZXRyaWNzLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbWV0cmljTWFuYWdlci5tZXRyaWNzO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVuY2Fwc3VsYXRlZCBvYmplY3QgdG8gcmV0cmlldmUgdGhlIG1ldHJpY3MuXG4gKi9cbmNvbnN0IG1ldHJpY01hbmFnZXIgPSAoKCkgPT4ge1xuICBsZXQgbWV0cmljOiBBZ2dyZWdhdGlvbk1ldHJpYztcblxuICBjb25zdCBtYW5hZ2VyID0ge1xuICAgIGdldCBtZXRyaWNzKCkge1xuICAgICAgcmV0dXJuIG1ldHJpYztcbiAgICB9LFxuICAgIHNldCBtZXRyaWNzKHZhbHVlOiBBZ2dyZWdhdGlvbk1ldHJpYykge1xuICAgICAgbWV0cmljID0gdmFsdWU7XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gbWFuYWdlcjtcbn0pKCk7XG5cbi8qKlxuICogUmV0dXJucyBhZ2dyZWdhdGlvbiBtZXRob2QgZm9yIGdpdmVuIGB1bml0TmFtZWAuIElmIGRvZXNuJ3QgZXhpc3QgdGhlbiByZXR1cm5zIHZhbHVlIGBzdW1gLlxuICovXG5leHBvcnQgY29uc3QgZ2V0QWdncmVnYXRpb25NZXRob2QgPSAodW5pdE5hbWU6IHN0cmluZykgPT4ge1xuICBkZWJ1Z0xvZ2dlci5zZXRFeGVjdXRpbmdQbHVnaW5OYW1lKCk7XG4gIG1lbW9pemVkTG9nKGNvbnNvbGUuZGVidWcsIENIRUNLSU5HX0FHR1JFR0FUSU9OX01FVEhPRCh1bml0TmFtZSkpO1xuICBjb25zdCBhZ2dyZWdhdGlvbk1ldHJpY3NTdG9yYWdlID0gc3RvcmVBZ2dyZWdhdGlvbk1ldHJpY3MoKTtcblxuICBpZiAoXG4gICAgYWdncmVnYXRpb25NZXRyaWNzU3RvcmFnZSAmJlxuICAgIE9iamVjdC5rZXlzKGFnZ3JlZ2F0aW9uTWV0cmljc1N0b3JhZ2UpLmluY2x1ZGVzKHVuaXROYW1lKVxuICApIHtcbiAgICByZXR1cm4gYWdncmVnYXRpb25NZXRyaWNzU3RvcmFnZVt1bml0TmFtZV07XG4gIH1cblxuICBtZW1vaXplZExvZyhsb2dnZXIud2FybiwgVU5LTk9XTl9QQVJBTSh1bml0TmFtZSkpO1xuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIl19
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.compute = void 0;
|
|
4
|
+
const regroup_1 = require("./regroup");
|
|
5
|
+
const explain_1 = require("./explain");
|
|
6
|
+
const helpers_1 = require("../util/helpers");
|
|
7
|
+
const debug_logger_1 = require("../../common/util/debug-logger");
|
|
8
|
+
const logger_1 = require("../../common/util/logger");
|
|
9
|
+
const strings_1 = require("../config/strings");
|
|
10
|
+
const interface_1 = require("../types/interface");
|
|
11
|
+
const { MERGING_DEFAULTS_WITH_INPUT_DATA, EMPTY_PIPELINE } = strings_1.STRINGS;
|
|
12
|
+
/**
|
|
13
|
+
* Traverses all child nodes based on children grouping.
|
|
14
|
+
*/
|
|
15
|
+
const traverse = async (children, params) => {
|
|
16
|
+
for (const child in children) {
|
|
17
|
+
await computeNode(children[child], params);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Appends `default` values to `inputs`.
|
|
22
|
+
*/
|
|
23
|
+
const mergeDefaults = (inputs, defaults) => {
|
|
24
|
+
if (inputs) {
|
|
25
|
+
const response = defaults
|
|
26
|
+
? inputs.map(input => (0, helpers_1.mergeObjects)(defaults, input))
|
|
27
|
+
: inputs;
|
|
28
|
+
return response;
|
|
29
|
+
}
|
|
30
|
+
console.debug(MERGING_DEFAULTS_WITH_INPUT_DATA);
|
|
31
|
+
return defaults ? [defaults] : [];
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* 1. If the node has it's own pipeline, defaults or config then use that,
|
|
35
|
+
* otherwise use whatever has been passed down from further up the tree.
|
|
36
|
+
* 2. If it's a grouping node, then first of all computes all it's children.
|
|
37
|
+
* This is doing a depth first traversal.
|
|
38
|
+
* 3. Otherwise merges the defaults into the inputs.
|
|
39
|
+
* 4. Iterates over pipeline phases (observe, regroup, compute).
|
|
40
|
+
* 5. Observe plugins are used to insert input values
|
|
41
|
+
* (isolated execution can be achived by passing `--observe` flag to CLI command).
|
|
42
|
+
* 6. Regroup plugin is used to group existing inputs by criteria
|
|
43
|
+
* (isolated execution can be achived by passing `--regroup` flag to CLI command).
|
|
44
|
+
* Since it creates new children for node, existing inputs and outputs are dropped and recursive traversal is called
|
|
45
|
+
* for newbord child component.
|
|
46
|
+
* 7. Compute plugins are used to do desired computations and appending the result to outputs
|
|
47
|
+
* (isolated execution can be achived by passing `--compute` flag to CLI command).
|
|
48
|
+
*/
|
|
49
|
+
const computeNode = async (node, params) => {
|
|
50
|
+
const pipeline = node.pipeline || params.pipeline;
|
|
51
|
+
const config = node.config || params.config;
|
|
52
|
+
const defaults = node.defaults || params.defaults;
|
|
53
|
+
const noFlags = !params.observe && !params.regroup && !params.compute;
|
|
54
|
+
if (node.children) {
|
|
55
|
+
return traverse(node.children, {
|
|
56
|
+
...params,
|
|
57
|
+
pipeline,
|
|
58
|
+
defaults,
|
|
59
|
+
config,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
let inputStorage = structuredClone(node.inputs);
|
|
63
|
+
inputStorage = mergeDefaults(inputStorage, defaults);
|
|
64
|
+
const pipelineCopy = structuredClone(pipeline) || {};
|
|
65
|
+
/** Checks if pipeline is not an array or empty object. */
|
|
66
|
+
if (Array.isArray(pipelineCopy) ||
|
|
67
|
+
(typeof pipelineCopy === 'object' &&
|
|
68
|
+
pipelineCopy !== null &&
|
|
69
|
+
Object.keys(pipelineCopy).length === 0)) {
|
|
70
|
+
logger_1.logger.warn(EMPTY_PIPELINE);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* If iteration is on observe pipeline, then executes observe plugins and sets the inputs value.
|
|
74
|
+
*/
|
|
75
|
+
if ((noFlags || params.observe) && pipelineCopy.observe) {
|
|
76
|
+
while (pipelineCopy.observe.length !== 0) {
|
|
77
|
+
const pluginName = pipelineCopy.observe.shift();
|
|
78
|
+
const plugin = params.pluginStorage.get(pluginName);
|
|
79
|
+
const nodeConfig = config && config[pluginName];
|
|
80
|
+
if ((0, interface_1.isExecute)(plugin)) {
|
|
81
|
+
inputStorage = await plugin.execute(inputStorage, nodeConfig);
|
|
82
|
+
node.inputs = inputStorage;
|
|
83
|
+
if (params.context.explainer) {
|
|
84
|
+
(0, explain_1.addExplainData)({
|
|
85
|
+
pluginName,
|
|
86
|
+
metadata: plugin.metadata,
|
|
87
|
+
pluginData: params.context.initialize.plugins[pluginName],
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* If regroup is requested, execute regroup strategy, delete child's inputs, outputs and empty regroup array.
|
|
95
|
+
*/
|
|
96
|
+
if ((noFlags || params.regroup) && pipelineCopy.regroup) {
|
|
97
|
+
node.children = (0, regroup_1.Regroup)(inputStorage, pipelineCopy.regroup);
|
|
98
|
+
delete node.inputs;
|
|
99
|
+
delete node.outputs;
|
|
100
|
+
return traverse(node.children, {
|
|
101
|
+
...params,
|
|
102
|
+
pipeline: {
|
|
103
|
+
...pipelineCopy,
|
|
104
|
+
regroup: undefined,
|
|
105
|
+
},
|
|
106
|
+
defaults,
|
|
107
|
+
config,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* If iteration is on compute plugin, then executes compute plugins and sets the outputs value.
|
|
112
|
+
*/
|
|
113
|
+
if ((noFlags || params.compute) && pipelineCopy.compute) {
|
|
114
|
+
while (pipelineCopy.compute.length !== 0) {
|
|
115
|
+
const pluginName = pipelineCopy.compute.shift();
|
|
116
|
+
const plugin = params.pluginStorage.get(pluginName);
|
|
117
|
+
const nodeConfig = config && config[pluginName];
|
|
118
|
+
if ((0, interface_1.isExecute)(plugin)) {
|
|
119
|
+
inputStorage = await plugin.execute(inputStorage, nodeConfig);
|
|
120
|
+
node.outputs = inputStorage;
|
|
121
|
+
if (params.context.explainer) {
|
|
122
|
+
(0, explain_1.addExplainData)({
|
|
123
|
+
pluginName,
|
|
124
|
+
metadata: plugin.metadata,
|
|
125
|
+
pluginData: params.context.initialize.plugins[pluginName],
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
debug_logger_1.debugLogger.setExecutingPluginName();
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Creates copy of existing tree, then applies computing strategy.
|
|
135
|
+
*/
|
|
136
|
+
const compute = async (tree, params) => {
|
|
137
|
+
const copyOfTree = structuredClone(tree);
|
|
138
|
+
await computeNode(copyOfTree, params);
|
|
139
|
+
return copyOfTree;
|
|
140
|
+
};
|
|
141
|
+
exports.compute = compute;
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pZi1ydW4vbGliL2NvbXB1dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsdUNBQWtDO0FBQ2xDLHVDQUF5QztBQUV6Qyw2Q0FBNkM7QUFDN0MsaUVBQTJEO0FBQzNELHFEQUFnRDtBQUVoRCwrQ0FBMEM7QUFHMUMsa0RBQTZDO0FBRTdDLE1BQU0sRUFBQyxnQ0FBZ0MsRUFBRSxjQUFjLEVBQUMsR0FBRyxpQkFBTyxDQUFDO0FBRW5FOztHQUVHO0FBQ0gsTUFBTSxRQUFRLEdBQUcsS0FBSyxFQUFFLFFBQWEsRUFBRSxNQUFxQixFQUFFLEVBQUU7SUFDOUQsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLEVBQUU7UUFDNUIsTUFBTSxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQzVDO0FBQ0gsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxDQUNwQixNQUFzQixFQUN0QixRQUFrQyxFQUNsQyxFQUFFO0lBQ0YsSUFBSSxNQUFNLEVBQUU7UUFDVixNQUFNLFFBQVEsR0FBRyxRQUFRO1lBQ3ZCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBQSxzQkFBWSxFQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRCxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRVgsT0FBTyxRQUFRLENBQUM7S0FDakI7SUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFFaEQsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFB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RXpDLE1BQU0sV0FBVyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUV0QyxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFOVyxRQUFBLE9BQU8sV0FNbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BsdWdpblBhcmFtc30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3R5cGVzJztcblxuaW1wb3J0IHtSZWdyb3VwfSBmcm9tICcuL3JlZ3JvdXAnO1xuaW1wb3J0IHthZGRFeHBsYWluRGF0YX0gZnJvbSAnLi9leHBsYWluJztcblxuaW1wb3J0IHttZXJnZU9iamVjdHN9IGZyb20gJy4uL3V0aWwvaGVscGVycyc7XG5pbXBvcnQge2RlYnVnTG9nZ2VyfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbC9kZWJ1Zy1sb2dnZXInO1xuaW1wb3J0IHtsb2dnZXJ9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlsL2xvZ2dlcic7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi4vY29uZmlnL3N0cmluZ3MnO1xuXG5pbXBvcnQge0NvbXB1dGVQYXJhbXMsIE5vZGUsIFBoYXNlZFBpcGVsaW5lfSBmcm9tICcuLi90eXBlcy9jb21wdXRlJztcbmltcG9ydCB7aXNFeGVjdXRlfSBmcm9tICcuLi90eXBlcy9pbnRlcmZhY2UnO1xuXG5jb25zdCB7TUVSR0lOR19ERUZBVUxUU19XSVRIX0lOUFVUX0RBVEEsIEVNUFRZX1BJUEVMSU5FfSA9IFNUUklOR1M7XG5cbi8qKlxuICogVHJhdmVyc2VzIGFsbCBjaGlsZCBub2RlcyBiYXNlZCBvbiBjaGlsZHJlbiBncm91cGluZy5cbiAqL1xuY29uc3QgdHJhdmVyc2UgPSBhc3luYyAoY2hpbGRyZW46IGFueSwgcGFyYW1zOiBDb21wdXRlUGFyYW1zKSA9PiB7XG4gIGZvciAoY29uc3QgY2hpbGQgaW4gY2hpbGRyZW4pIHtcbiAgICBhd2FpdCBjb21wdXRlTm9kZShjaGlsZHJlbltjaGlsZF0sIHBhcmFtcyk7XG4gIH1cbn07XG5cbi8qKlxuICogQXBwZW5kcyBgZGVmYXVsdGAgdmFsdWVzIHRvIGBpbnB1dHNgLlxuICovXG5jb25zdCBtZXJnZURlZmF1bHRzID0gKFxuICBpbnB1dHM6IFBsdWdpblBhcmFtc1tdLFxuICBkZWZhdWx0czogUGx1Z2luUGFyYW1zIHwgdW5kZWZpbmVkXG4pID0+IHtcbiAgaWYgKGlucHV0cykge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gZGVmYXVsdHNcbiAgICAgID8gaW5wdXRzLm1hcChpbnB1dCA9PiBtZXJnZU9iamVjdHMoZGVmYXVsdHMsIGlucHV0KSlcbiAgICAgIDogaW5wdXRzO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgY29uc29sZS5kZWJ1ZyhNRVJHSU5HX0RFRkFVTFRTX1dJVEhfSU5QVVRfREFUQSk7XG5cbiAgcmV0dXJuIGRlZmF1bHRzID8gW2RlZmF1bHRzXSA6IFtdO1xufTtcblxuLyoqXG4gKiAxLiBJZiB0aGUgbm9kZSBoYXMgaXQncyBvd24gcGlwZWxpbmUsIGRlZmF1bHRzIG9yIGNvbmZpZyB0aGVuIHVzZSB0aGF0LFxuICogICAgb3RoZXJ3aXNlIHVzZSB3aGF0ZXZlciBoYXMgYmVlbiBwYXNzZWQgZG93biBmcm9tIGZ1cnRoZXIgdXAgdGhlIHRyZWUuXG4gKiAyLiBJZiBpdCdzIGEgZ3JvdXBpbmcgbm9kZSwgdGhlbiBmaXJzdCBvZiBhbGwgY29tcHV0ZXMgYWxsIGl0J3MgY2hpbGRyZW4uXG4gKiAgICBUaGlzIGlzIGRvaW5nIGEgZGVwdGggZmlyc3QgdHJhdmVyc2FsLlxuICogMy4gT3RoZXJ3aXNlIG1lcmdlcyB0aGUgZGVmYXVsdHMgaW50byB0aGUgaW5wdXRzLlxuICogNC4gSXRlcmF0ZXMgb3ZlciBwaXBlbGluZSBwaGFzZXMgKG9ic2VydmUsIHJlZ3JvdXAsIGNvbXB1dGUpLlxuICogNS4gT2JzZXJ2ZSBwbHVnaW5zIGFyZSB1c2VkIHRvIGluc2VydCBpbnB1dCB2YWx1ZXNcbiAqICAgIChpc29sYXRlZCBleGVjdXRpb24gY2FuIGJlIGFjaGl2ZWQgYnkgcGFzc2luZyBgLS1vYnNlcnZlYCBmbGFnIHRvIENMSSBjb21tYW5kKS5cbiAqIDYuIFJlZ3JvdXAgcGx1Z2luIGlzIHVzZWQgdG8gZ3JvdXAgZXhpc3RpbmcgaW5wdXRzIGJ5IGNyaXRlcmlhXG4gKiAgICAoaXNvbGF0ZWQgZXhlY3V0aW9uIGNhbiBiZSBhY2hpdmVkIGJ5IHBhc3NpbmcgYC0tcmVncm91cGAgZmxhZyB0byBDTEkgY29tbWFuZCkuXG4gKiAgICBTaW5jZSBpdCBjcmVhdGVzIG5ldyBjaGlsZHJlbiBmb3Igbm9kZSwgZXhpc3RpbmcgaW5wdXRzIGFuZCBvdXRwdXRzIGFyZSBkcm9wcGVkIGFuZCByZWN1cnNpdmUgdHJhdmVyc2FsIGlzIGNhbGxlZFxuICogICAgZm9yIG5ld2JvcmQgY2hpbGQgY29tcG9uZW50LlxuICogNy4gQ29tcHV0ZSBwbHVnaW5zIGFyZSB1c2VkIHRvIGRvIGRlc2lyZWQgY29tcHV0YXRpb25zIGFuZCBhcHBlbmRpbmcgdGhlIHJlc3VsdCB0byBvdXRwdXRzXG4gKiAgICAoaXNvbGF0ZWQgZXhlY3V0aW9uIGNhbiBiZSBhY2hpdmVkIGJ5IHBhc3NpbmcgYC0tY29tcHV0ZWAgZmxhZyB0byBDTEkgY29tbWFuZCkuXG4gKi9cbmNvbnN0IGNvbXB1dGVOb2RlID0gYXN5bmMgKG5vZGU6IE5vZGUsIHBhcmFtczogQ29tcHV0ZVBhcmFtcyk6IFByb21pc2U8YW55PiA9PiB7XG4gIGNvbnN0IHBpcGVsaW5lID0gbm9kZS5waXBlbGluZSB8fCAocGFyYW1zLnBpcGVsaW5lIGFzIFBoYXNlZFBpcGVsaW5lKTtcbiAgY29uc3QgY29uZmlnID0gbm9kZS5jb25maWcgfHwgcGFyYW1zLmNvbmZpZztcbiAgY29uc3QgZGVmYXVsdHMgPSBub2RlLmRlZmF1bHRzIHx8IHBhcmFtcy5kZWZhdWx0cztcbiAgY29uc3Qgbm9GbGFncyA9ICFwYXJhbXMub2JzZXJ2ZSAmJiAhcGFyYW1zLnJlZ3JvdXAgJiYgIXBhcmFtcy5jb21wdXRlO1xuXG4gIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIHRyYXZlcnNlKG5vZGUuY2hpbGRyZW4sIHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIHBpcGVsaW5lLFxuICAgICAgZGVmYXVsdHMsXG4gICAgICBjb25maWcsXG4gICAgfSk7XG4gIH1cblxuICBsZXQgaW5wdXRTdG9yYWdlID0gc3RydWN0dXJlZENsb25lKG5vZGUuaW5wdXRzKSBhcyBQbHVnaW5QYXJhbXNbXTtcbiAgaW5wdXRTdG9yYWdlID0gbWVyZ2VEZWZhdWx0cyhpbnB1dFN0b3JhZ2UsIGRlZmF1bHRzKTtcbiAgY29uc3QgcGlwZWxpbmVDb3B5ID0gc3RydWN0dXJlZENsb25lKHBpcGVsaW5lKSB8fCB7fTtcblxuICAvKiogQ2hlY2tzIGlmIHBpcGVsaW5lIGlzIG5vdCBhbiBhcnJheSBvciBlbXB0eSBvYmplY3QuICovXG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KHBpcGVsaW5lQ29weSkgfHxcbiAgICAodHlwZW9mIHBpcGVsaW5lQ29weSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHBpcGVsaW5lQ29weSAhPT0gbnVsbCAmJlxuICAgICAgT2JqZWN0LmtleXMocGlwZWxpbmVDb3B5KS5sZW5ndGggPT09IDApXG4gICkge1xuICAgIGxvZ2dlci53YXJuKEVNUFRZX1BJUEVMSU5FKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBpdGVyYXRpb24gaXMgb24gb2JzZXJ2ZSBwaXBlbGluZSwgdGhlbiBleGVjdXRlcyBvYnNlcnZlIHBsdWdpbnMgYW5kIHNldHMgdGhlIGlucHV0cyB2YWx1ZS5cbiAgICovXG4gIGlmICgobm9GbGFncyB8fCBwYXJhbXMub2JzZXJ2ZSkgJiYgcGlwZWxpbmVDb3B5Lm9ic2VydmUpIHtcbiAgICB3aGlsZSAocGlwZWxpbmVDb3B5Lm9ic2VydmUubGVuZ3RoICE9PSAwKSB7XG4gICAgICBjb25zdCBwbHVnaW5OYW1lID0gcGlwZWxpbmVDb3B5Lm9ic2VydmUuc2hpZnQoKSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwYXJhbXMucGx1Z2luU3RvcmFnZS5nZXQocGx1Z2luTmFtZSk7XG4gICAgICBjb25zdCBub2RlQ29uZmlnID0gY29uZmlnICYmIGNvbmZpZ1twbHVnaW5OYW1lXTtcblxuICAgICAgaWYgKGlzRXhlY3V0ZShwbHVnaW4pKSB7XG4gICAgICAgIGlucHV0U3RvcmFnZSA9IGF3YWl0IHBsdWdpbi5leGVjdXRlKGlucHV0U3RvcmFnZSwgbm9kZUNvbmZpZyk7XG4gICAgICAgIG5vZGUuaW5wdXRzID0gaW5wdXRTdG9yYWdlO1xuXG4gICAgICAgIGlmIChwYXJhbXMuY29udGV4dC5leHBsYWluZXIpIHtcbiAgICAgICAgICBhZGRFeHBsYWluRGF0YSh7XG4gICAgICAgICAgICBwbHVnaW5OYW1lLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHBsdWdpbi5tZXRhZGF0YSxcbiAgICAgICAgICAgIHBsdWdpbkRhdGE6IHBhcmFtcy5jb250ZXh0LmluaXRpYWxpemUhLnBsdWdpbnNbcGx1Z2luTmFtZV0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgcmVncm91cCBpcyByZXF1ZXN0ZWQsIGV4ZWN1dGUgcmVncm91cCBzdHJhdGVneSwgZGVsZXRlIGNoaWxkJ3MgaW5wdXRzLCBvdXRwdXRzIGFuZCBlbXB0eSByZWdyb3VwIGFycmF5LlxuICAgKi9cbiAgaWYgKChub0ZsYWdzIHx8IHBhcmFtcy5yZWdyb3VwKSAmJiBwaXBlbGluZUNvcHkucmVncm91cCkge1xuICAgIG5vZGUuY2hpbGRyZW4gPSBSZWdyb3VwKGlucHV0U3RvcmFnZSwgcGlwZWxpbmVDb3B5LnJlZ3JvdXApO1xuICAgIGRlbGV0ZSBub2RlLmlucHV0cztcbiAgICBkZWxldGUgbm9kZS5vdXRwdXRzO1xuXG4gICAgcmV0dXJuIHRyYXZlcnNlKG5vZGUuY2hpbGRyZW4sIHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIHBpcGVsaW5lOiB7XG4gICAgICAgIC4uLnBpcGVsaW5lQ29weSxcbiAgICAgICAgcmVncm91cDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRzLFxuICAgICAgY29uZmlnLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGl0ZXJhdGlvbiBpcyBvbiBjb21wdXRlIHBsdWdpbiwgdGhlbiBleGVjdXRlcyBjb21wdXRlIHBsdWdpbnMgYW5kIHNldHMgdGhlIG91dHB1dHMgdmFsdWUuXG4gICAqL1xuICBpZiAoKG5vRmxhZ3MgfHwgcGFyYW1zLmNvbXB1dGUpICYmIHBpcGVsaW5lQ29weS5jb21wdXRlKSB7XG4gICAgd2hpbGUgKHBpcGVsaW5lQ29weS5jb21wdXRlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgY29uc3QgcGx1Z2luTmFtZSA9IHBpcGVsaW5lQ29weS5jb21wdXRlLnNoaWZ0KCkgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgcGx1Z2luID0gcGFyYW1zLnBsdWdpblN0b3JhZ2UuZ2V0KHBsdWdpbk5hbWUpO1xuICAgICAgY29uc3Qgbm9kZUNvbmZpZyA9IGNvbmZpZyAmJiBjb25maWdbcGx1Z2luTmFtZV07XG5cbiAgICAgIGlmIChpc0V4ZWN1dGUocGx1Z2luKSkge1xuICAgICAgICBpbnB1dFN0b3JhZ2UgPSBhd2FpdCBwbHVnaW4uZXhlY3V0ZShpbnB1dFN0b3JhZ2UsIG5vZGVDb25maWcpO1xuICAgICAgICBub2RlLm91dHB1dHMgPSBpbnB1dFN0b3JhZ2U7XG5cbiAgICAgICAgaWYgKHBhcmFtcy5jb250ZXh0LmV4cGxhaW5lcikge1xuICAgICAgICAgIGFkZEV4cGxhaW5EYXRhKHtcbiAgICAgICAgICAgIHBsdWdpbk5hbWUsXG4gICAgICAgICAgICBtZXRhZGF0YTogcGx1Z2luLm1ldGFkYXRhLFxuICAgICAgICAgICAgcGx1Z2luRGF0YTogcGFyYW1zLmNvbnRleHQuaW5pdGlhbGl6ZSEucGx1Z2luc1twbHVnaW5OYW1lXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkZWJ1Z0xvZ2dlci5zZXRFeGVjdXRpbmdQbHVnaW5OYW1lKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgY29weSBvZiBleGlzdGluZyB0cmVlLCB0aGVuIGFwcGxpZXMgY29tcHV0aW5nIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgY29uc3QgY29tcHV0ZSA9IGFzeW5jICh0cmVlOiBhbnksIHBhcmFtczogQ29tcHV0ZVBhcmFtcykgPT4ge1xuICBjb25zdCBjb3B5T2ZUcmVlID0gc3RydWN0dXJlZENsb25lKHRyZWUpO1xuXG4gIGF3YWl0IGNvbXB1dGVOb2RlKGNvcHlPZlRyZWUsIHBhcmFtcyk7XG5cbiAgcmV0dXJuIGNvcHlPZlRyZWU7XG59O1xuIl19
|