@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
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Interpolation = void 0;
|
|
7
|
+
const typescript_cubic_spline_1 = __importDefault(require("typescript-cubic-spline"));
|
|
8
|
+
const zod_1 = require("zod");
|
|
9
|
+
const utils_1 = require("@grnsft/if-core/utils");
|
|
10
|
+
const types_1 = require("@grnsft/if-core/types");
|
|
11
|
+
const validations_1 = require("../../../common/util/validations");
|
|
12
|
+
const config_1 = require("../../config");
|
|
13
|
+
const { GlobalConfigError } = utils_1.ERRORS;
|
|
14
|
+
const { MISSING_GLOBAL_CONFIG, X_Y_EQUAL, ARRAY_LENGTH_NON_EMPTY, WITHIN_THE_RANGE, } = config_1.STRINGS;
|
|
15
|
+
const Interpolation = (globalConfig, parametersMetadata) => {
|
|
16
|
+
const metadata = {
|
|
17
|
+
kind: 'execute',
|
|
18
|
+
inputs: parametersMetadata?.inputs,
|
|
19
|
+
outputs: parametersMetadata?.outputs,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Executes the energy consumption calculation for an array of input parameters.
|
|
23
|
+
*/
|
|
24
|
+
const execute = (inputs) => {
|
|
25
|
+
const validatedConfig = validateConfig();
|
|
26
|
+
return inputs.map((input, index) => {
|
|
27
|
+
const safeInput = validateInput(input, index);
|
|
28
|
+
const result = calculateResult(validatedConfig, safeInput);
|
|
29
|
+
return {
|
|
30
|
+
...input,
|
|
31
|
+
[validatedConfig['output-parameter']]: result,
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Calculates the appropriate interpolation value based on the specified method type in the config and input parameters.
|
|
37
|
+
*/
|
|
38
|
+
const calculateResult = (config, input) => {
|
|
39
|
+
const methodType = {
|
|
40
|
+
linear: getLinearInterpolation(config, input),
|
|
41
|
+
spline: getSplineInterpolation(config, input),
|
|
42
|
+
polynomial: getPolynomialInterpolation(config, input),
|
|
43
|
+
};
|
|
44
|
+
return methodType[config.method];
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Calculates the interpolation when the method is linear.
|
|
48
|
+
*/
|
|
49
|
+
const getLinearInterpolation = (config, input) => {
|
|
50
|
+
const parameter = input[globalConfig['input-parameter']];
|
|
51
|
+
const xPoints = config.x;
|
|
52
|
+
const yPoints = config.y;
|
|
53
|
+
const result = xPoints.reduce((acc, xPoint, i) => {
|
|
54
|
+
if (parameter === xPoint) {
|
|
55
|
+
acc.baseCpu = xPoint;
|
|
56
|
+
acc.baseRate = yPoints[i];
|
|
57
|
+
}
|
|
58
|
+
else if (parameter > xPoint && parameter < xPoints[i + 1]) {
|
|
59
|
+
acc.baseCpu = xPoint;
|
|
60
|
+
acc.baseRate = yPoints[i];
|
|
61
|
+
acc.ratio = (yPoints[i + 1] - yPoints[i]) / (xPoints[i + 1] - xPoint);
|
|
62
|
+
}
|
|
63
|
+
return acc;
|
|
64
|
+
}, { baseRate: 0, baseCpu: 0, ratio: 0 });
|
|
65
|
+
return result.baseRate + (parameter - result.baseCpu) * result.ratio;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Calculates the interpolation when the method is spline.
|
|
69
|
+
*/
|
|
70
|
+
const getSplineInterpolation = (config, input) => {
|
|
71
|
+
const parameter = input[globalConfig['input-parameter']];
|
|
72
|
+
const xPoints = config.x;
|
|
73
|
+
const yPoints = config.y;
|
|
74
|
+
const spline = new typescript_cubic_spline_1.default(xPoints, yPoints);
|
|
75
|
+
return spline.at(parameter);
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Calculates the interpolation when the method is polynomial.
|
|
79
|
+
*/
|
|
80
|
+
const getPolynomialInterpolation = (config, input) => {
|
|
81
|
+
const parameter = input[globalConfig['input-parameter']];
|
|
82
|
+
const xPoints = config.x;
|
|
83
|
+
const yPoints = config.y;
|
|
84
|
+
const result = xPoints.reduce((acc, x, i) => {
|
|
85
|
+
const term = yPoints[i] *
|
|
86
|
+
xPoints.reduce((prod, xPoint, j) => {
|
|
87
|
+
if (j !== i) {
|
|
88
|
+
return (prod * (parameter - xPoint)) / (x - xPoint);
|
|
89
|
+
}
|
|
90
|
+
return prod;
|
|
91
|
+
}, 1);
|
|
92
|
+
return acc + term;
|
|
93
|
+
}, 0);
|
|
94
|
+
return result;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Validates global config parameters.
|
|
98
|
+
* Sorts elements of `x` and `y`.
|
|
99
|
+
*/
|
|
100
|
+
const validateConfig = () => {
|
|
101
|
+
if (!globalConfig) {
|
|
102
|
+
throw new GlobalConfigError(MISSING_GLOBAL_CONFIG);
|
|
103
|
+
}
|
|
104
|
+
const schema = zod_1.z
|
|
105
|
+
.object({
|
|
106
|
+
method: zod_1.z.nativeEnum(types_1.Method),
|
|
107
|
+
x: zod_1.z.array(zod_1.z.number()),
|
|
108
|
+
y: zod_1.z.array(zod_1.z.number()),
|
|
109
|
+
'input-parameter': zod_1.z.string(),
|
|
110
|
+
'output-parameter': zod_1.z.string(),
|
|
111
|
+
})
|
|
112
|
+
.refine(data => data.x && data.y && data.x.length === data.y.length, {
|
|
113
|
+
message: X_Y_EQUAL,
|
|
114
|
+
})
|
|
115
|
+
.refine(data => data.x.length > 1 && data.y.length > 1, {
|
|
116
|
+
message: ARRAY_LENGTH_NON_EMPTY,
|
|
117
|
+
});
|
|
118
|
+
const defaultMethod = globalConfig.method ?? types_1.Method.LINEAR;
|
|
119
|
+
const updatedConfig = Object.assign({}, { method: defaultMethod }, globalConfig, {
|
|
120
|
+
x: sortPoints(globalConfig.x),
|
|
121
|
+
y: sortPoints(globalConfig.y),
|
|
122
|
+
});
|
|
123
|
+
return (0, validations_1.validate)(schema, updatedConfig);
|
|
124
|
+
};
|
|
125
|
+
const sortPoints = (items) => items.sort((a, b) => {
|
|
126
|
+
return a - b;
|
|
127
|
+
});
|
|
128
|
+
/**
|
|
129
|
+
* Validates inputes parameters.
|
|
130
|
+
*/
|
|
131
|
+
const validateInput = (input, index) => {
|
|
132
|
+
const inputParameter = globalConfig['input-parameter'];
|
|
133
|
+
const schema = zod_1.z
|
|
134
|
+
.object({
|
|
135
|
+
timestamp: zod_1.z.string().or(zod_1.z.date()),
|
|
136
|
+
duration: zod_1.z.number(),
|
|
137
|
+
[inputParameter]: zod_1.z.number().gt(0),
|
|
138
|
+
})
|
|
139
|
+
.refine(data => data[inputParameter] >= globalConfig.x[0] &&
|
|
140
|
+
data[inputParameter] <= globalConfig.x[globalConfig.x.length - 1], {
|
|
141
|
+
message: WITHIN_THE_RANGE,
|
|
142
|
+
});
|
|
143
|
+
return (0, validations_1.validate)(schema, input, index);
|
|
144
|
+
};
|
|
145
|
+
return {
|
|
146
|
+
metadata,
|
|
147
|
+
execute,
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
exports.Interpolation = Interpolation;
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL2ludGVycG9sYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsc0ZBQTZDO0FBQzdDLDZCQUFzQjtBQUN0QixpREFBNkM7QUFDN0MsaURBTStCO0FBRS9CLGtFQUEwRDtBQUUxRCx5Q0FBcUM7QUFFckMsTUFBTSxFQUFDLGlCQUFpQixFQUFDLEdBQUcsY0FBTSxDQUFDO0FBQ25DLE1BQU0sRUFDSixxQkFBcUIsRUFDckIsU0FBUyxFQUNULHNCQUFzQixFQUN0QixnQkFBZ0IsR0FDakIsR0FBRyxnQkFBTyxDQUFDO0FBRUwsTUFBTSxhQUFhLEdBQUcsQ0FDM0IsWUFBMEIsRUFDMUIsa0JBQTRDLEVBQzdCLEVBQUU7SUFDakIsTUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxNQUFNO1FBQ2xDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPO0tBQ3JDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBc0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sZUFBZSxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBRXpDLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNqQyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzlDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFM0QsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLE1BQU07YUFDOUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFD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RCxNQUFNLE1BQU0sR0FBRyxPQUFDO2FBQ2IsTUFBTSxDQUFDO1lBQ04sU0FBUyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1lBQ3BCLENBQUMsY0FBYyxDQUFDLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbkMsQ0FBQzthQUNELE1BQU0sQ0FDTCxJQUFJLENBQUMsRUFBRSxDQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDbkU7WUFDRSxPQUFPLEVBQUUsZ0JBQWdCO1NBQzFCLENBQ0YsQ0FBQztRQUVKLE9BQU8sSUFBQSxzQkFBUSxFQUF5QixNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxRQUFRO1FBQ1IsT0FBTztLQUNSLENBQUM7QUFDSixDQUFDLENBQUM7QUFyTFcsUUFBQSxhQUFhLGlCQXFMeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3BsaW5lIGZyb20gJ3R5cGVzY3JpcHQtY3ViaWMtc3BsaW5lJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdXRpbHMnO1xuaW1wb3J0IHtcbiAgRXhlY3V0ZVBsdWdpbixcbiAgUGx1Z2luUGFyYW1zLFxuICBDb25maWdQYXJhbXMsXG4gIE1ldGhvZCxcbiAgUGx1Z2luUGFyYW1ldGVyc01ldGFkYXRhLFxufSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdHlwZXMnO1xuXG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbC92YWxpZGF0aW9ucyc7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi4vLi4vY29uZmlnJztcblxuY29uc3Qge0dsb2JhbENvbmZpZ0Vycm9yfSA9IEVSUk9SUztcbmNvbnN0IHtcbiAgTUlTU0lOR19HTE9CQUxfQ09ORklHLFxuICBYX1lfRVFVQUwsXG4gIEFSUkFZX0xFTkdUSF9OT05fRU1QVFksXG4gIFdJVEhJTl9USEVfUkFOR0UsXG59ID0gU1RSSU5HUztcblxuZXhwb3J0IGNvbnN0IEludGVycG9sYXRpb24gPSAoXG4gIGdsb2JhbENvbmZpZzogQ29uZmlnUGFyYW1zLFxuICBwYXJhbWV0ZXJzTWV0YWRhdGE6IFBsdWdpblBhcmFtZXRlcnNNZXRhZGF0YVxuKTogRXhlY3V0ZVBsdWdpbiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgIGtpbmQ6ICdleGVjdXRlJyxcbiAgICBpbnB1dHM6IHBhcmFtZXRlcnNNZXRhZGF0YT8uaW5wdXRzLFxuICAgIG91dHB1dHM6IHBhcmFtZXRlcnNNZXRhZGF0YT8ub3V0cHV0cyxcbiAgfTtcblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGVuZXJneSBjb25zdW1wdGlvbiBjYWxjdWxhdGlvbiBmb3IgYW4gYXJyYXkgb2YgaW5wdXQgcGFyYW1ldGVycy5cbiAgICovXG4gIGNvbnN0IGV4ZWN1dGUgPSAoaW5wdXRzOiBQbHVnaW5QYXJhbXNbXSkgPT4ge1xuICAgIGNvbnN0IHZhbGlkYXRlZENvbmZpZyA9IHZhbGlkYXRlQ29uZmlnKCk7XG5cbiAgICByZXR1cm4gaW5wdXRzLm1hcCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzYWZlSW5wdXQgPSB2YWxpZGF0ZUlucHV0KGlucHV0LCBpbmRleCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVSZXN1bHQodmFsaWRhdGVkQ29uZmlnLCBzYWZlSW5wdXQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgW3ZhbGlkYXRlZENvbmZpZ1snb3V0cHV0LXBhcmFtZXRlciddXTogcmVzdWx0LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgYXBwcm9wcmlhdGUgaW50ZXJwb2xhdGlvbiB2YWx1ZSBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIG1ldGhvZCB0eXBlIGluIHRoZSBjb25maWcgYW5kIGlucHV0IHBhcmFtZXRlcnMuXG4gICAqL1xuICBjb25zdCBjYWxjdWxhdGVSZXN1bHQgPSAoY29uZmlnOiBDb25maWdQYXJhbXMsIGlucHV0OiBQbHVnaW5QYXJhbXMpID0+IHtcbiAgICBjb25zdCBtZXRob2RUeXBlOiB7W2tleTogc3RyaW5nXTogbnVtYmVyfSA9IHtcbiAgICAgIGxpbmVhcjogZ2V0TGluZWFySW50ZXJwb2xhdGlvbihjb25maWcsIGlucHV0KSxcbiAgICAgIHNwbGluZTogZ2V0U3BsaW5lSW50ZXJwb2xhdGlvbihjb25maWcsIGlucHV0KSxcbiAgICAgIHBvbHlub21pYWw6IGdldFBvbHlub21pYWxJbnRlcnBvbGF0aW9uKGNvbmZpZywgaW5wdXQpLFxuICAgIH07XG5cbiAgICByZXR1cm4gbWV0aG9kVHlwZVtjb25maWcubWV0aG9kXTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgaW50ZXJwb2xhdGlvbiB3aGVuIHRoZSBtZXRob2QgaXMgbGluZWFyLlxuICAgKi9cbiAgY29uc3QgZ2V0TGluZWFySW50ZXJwb2xhdGlvbiA9IChcbiAgICBjb25maWc6IENvbmZpZ1BhcmFtcyxcbiAgICBpbnB1dDogUGx1Z2luUGFyYW1zXG4gICkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IGlucHV0W2dsb2JhbENvbmZpZ1snaW5wdXQtcGFyYW1ldGVyJ11dO1xuICAgIGNvbnN0IHhQb2ludHM6IG51bWJlcltdID0gY29uZmlnLng7XG4gICAgY29uc3QgeVBvaW50czogbnVtYmVyW10gPSBjb25maWcueTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHhQb2ludHMucmVkdWNlKFxuICAgICAgKGFjYywgeFBvaW50LCBpKSA9PiB7XG4gICAgICAgIGlmIChwYXJhbWV0ZXIgPT09IHhQb2ludCkge1xuICAgICAgICAgIGFjYy5iYXNlQ3B1ID0geFBvaW50O1xuICAgICAgICAgIGFjYy5iYXNlUmF0ZSA9IHlQb2ludHNbaV07XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyID4geFBvaW50ICYmIHBhcmFtZXRlciA8IHhQb2ludHNbaSArIDFdKSB7XG4gICAgICAgICAgYWNjLmJhc2VDcHUgPSB4UG9pbnQ7XG4gICAgICAgICAgYWNjLmJhc2VSYXRlID0geVBvaW50c1tpXTtcbiAgICAgICAgICBhY2MucmF0aW8gPSAoeVBvaW50c1tpICsgMV0gLSB5UG9pbnRzW2ldKSAvICh4UG9pbnRzW2kgKyAxXSAtIHhQb2ludCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHtiYXNlUmF0ZTogMCwgYmFzZUNwdTogMCwgcmF0aW86IDB9XG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQuYmFzZVJhdGUgKyAocGFyYW1ldGVyIC0gcmVzdWx0LmJhc2VDcHUpICogcmVzdWx0LnJhdGlvO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBpbnRlcnBvbGF0aW9uIHdoZW4gdGhlIG1ldGhvZCBpcyBzcGxpbmUuXG4gICAqL1xuICBjb25zdCBnZXRTcGxpbmVJbnRlcnBvbGF0aW9uID0gKFxuICAgIGNvbmZpZzogQ29uZmlnUGFyYW1zLFxuICAgIGlucHV0OiBQbHVnaW5QYXJhbXNcbiAgKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gaW5wdXRbZ2xvYmFsQ29uZmlnWydpbnB1dC1wYXJhbWV0ZXInXV07XG4gICAgY29uc3QgeFBvaW50czogbnVtYmVyW10gPSBjb25maWcueDtcbiAgICBjb25zdCB5UG9pbnRzOiBudW1iZXJbXSA9IGNvbmZpZy55O1xuICAgIGNvbnN0IHNwbGluZTogYW55ID0gbmV3IFNwbGluZSh4UG9pbnRzLCB5UG9pbnRzKTtcblxuICAgIHJldHVybiBzcGxpbmUuYXQocGFyYW1ldGVyKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgaW50ZXJwb2xhdGlvbiB3aGVuIHRoZSBtZXRob2QgaXMgcG9seW5vbWlhbC5cbiAgICovXG4gIGNvbnN0IGdldFBvbHlub21pYWxJbnRlcnBvbGF0aW9uID0gKFxuICAgIGNvbmZpZzogQ29uZmlnUGFyYW1zLFxuICAgIGlucHV0OiBQbHVnaW5QYXJhbXNcbiAgKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gaW5wdXRbZ2xvYmFsQ29uZmlnWydpbnB1dC1wYXJhbWV0ZXInXV07XG4gICAgY29uc3QgeFBvaW50czogbnVtYmVyW10gPSBjb25maWcueDtcbiAgICBjb25zdCB5UG9pbnRzOiBudW1iZXJbXSA9IGNvbmZpZy55O1xuXG4gICAgY29uc3QgcmVzdWx0ID0geFBvaW50cy5yZWR1Y2UoKGFjYywgeCwgaSkgPT4ge1xuICAgICAgY29uc3QgdGVybSA9XG4gICAgICAgIHlQb2ludHNbaV0gKlxuICAgICAgICB4UG9pbnRzLnJlZHVjZSgocHJvZCwgeFBvaW50LCBqKSA9PiB7XG4gICAgICAgICAgaWYgKGogIT09IGkpIHtcbiAgICAgICAgICAgIHJldHVybiAocHJvZCAqIChwYXJhbWV0ZXIgLSB4UG9pbnQpKSAvICh4IC0geFBvaW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHByb2Q7XG4gICAgICAgIH0sIDEpO1xuICAgICAgcmV0dXJuIGFjYyArIHRlcm07XG4gICAgfSwgMCk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgZ2xvYmFsIGNvbmZpZyBwYXJhbWV0ZXJzLlxuICAgKiBTb3J0cyBlbGVtZW50cyBvZiBgeGAgYW5kIGB5YC5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlQ29uZmlnID0gKCkgPT4ge1xuICAgIGlmICghZ2xvYmFsQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgR2xvYmFsQ29uZmlnRXJyb3IoTUlTU0lOR19HTE9CQUxfQ09ORklHKTtcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlbWEgPSB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgbWV0aG9kOiB6Lm5hdGl2ZUVudW0oTWV0aG9kKSxcbiAgICAgICAgeDogei5hcnJheSh6Lm51bWJlcigpKSxcbiAgICAgICAgeTogei5hcnJheSh6Lm51bWJlcigpKSxcbiAgICAgICAgJ2lucHV0LXBhcmFtZXRlcic6IHouc3RyaW5nKCksXG4gICAgICAgICdvdXRwdXQtcGFyYW1ldGVyJzogei5zdHJpbmcoKSxcbiAgICAgIH0pXG4gICAgICAucmVmaW5lKGRhdGEgPT4gZGF0YS54ICYmIGRhdGEueSAmJiBkYXRhLngubGVuZ3RoID09PSBkYXRhLnkubGVuZ3RoLCB7XG4gICAgICAgIG1lc3NhZ2U6IFhfWV9FUVVBTCxcbiAgICAgIH0pXG4gICAgICAucmVmaW5lKGRhdGEgPT4gZGF0YS54Lmxlbmd0aCA+IDEgJiYgZGF0YS55Lmxlbmd0aCA+IDEsIHtcbiAgICAgICAgbWVzc2FnZTogQVJSQVlfTEVOR1RIX05PTl9FTVBUWSxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgZGVmYXVsdE1ldGhvZCA9IGdsb2JhbENvbmZpZy5tZXRob2QgPz8gTWV0aG9kLkxJTkVBUjtcbiAgICBjb25zdCB1cGRhdGVkQ29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAge21ldGhvZDogZGVmYXVsdE1ldGhvZH0sXG4gICAgICBnbG9iYWxDb25maWcsXG4gICAgICB7XG4gICAgICAgIHg6IHNvcnRQb2ludHMoZ2xvYmFsQ29uZmlnLngpLFxuICAgICAgICB5OiBzb3J0UG9pbnRzKGdsb2JhbENvbmZpZy55KSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIHNjaGVtYT4+KHNjaGVtYSwgdXBkYXRlZENvbmZpZyk7XG4gIH07XG5cbiAgY29uc3Qgc29ydFBvaW50cyA9IChpdGVtczogbnVtYmVyW10pID0+XG4gICAgaXRlbXMuc29ydCgoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IHtcbiAgICAgIHJldHVybiBhIC0gYjtcbiAgICB9KTtcblxuICAvKipcbiAgICogVmFsaWRhdGVzIGlucHV0ZXMgcGFyYW1ldGVycy5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlSW5wdXQgPSAoaW5wdXQ6IFBsdWdpblBhcmFtcywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGlucHV0UGFyYW1ldGVyID0gZ2xvYmFsQ29uZmlnWydpbnB1dC1wYXJhbWV0ZXInXTtcbiAgICBjb25zdCBzY2hlbWEgPSB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgdGltZXN0YW1wOiB6LnN0cmluZygpLm9yKHouZGF0ZSgpKSxcbiAgICAgICAgZHVyYXRpb246IHoubnVtYmVyKCksXG4gICAgICAgIFtpbnB1dFBhcmFtZXRlcl06IHoubnVtYmVyKCkuZ3QoMCksXG4gICAgICB9KVxuICAgICAgLnJlZmluZShcbiAgICAgICAgZGF0YSA9PlxuICAgICAgICAgIGRhdGFbaW5wdXRQYXJhbWV0ZXJdID49IGdsb2JhbENvbmZpZy54WzBdICYmXG4gICAgICAgICAgZGF0YVtpbnB1dFBhcmFtZXRlcl0gPD0gZ2xvYmFsQ29uZmlnLnhbZ2xvYmFsQ29uZmlnLngubGVuZ3RoIC0gMV0sXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBXSVRISU5fVEhFX1JBTkdFLFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIHNjaGVtYT4+KHNjaGVtYSwgaW5wdXQsIGluZGV4KTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG1ldGFkYXRhLFxuICAgIGV4ZWN1dGUsXG4gIH07XG59O1xuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommonGenerator = void 0;
|
|
4
|
+
const utils_1 = require("@grnsft/if-core/utils");
|
|
5
|
+
const config_1 = require("../../../config");
|
|
6
|
+
const { GlobalConfigError } = utils_1.ERRORS;
|
|
7
|
+
const { MISSING_GLOBAL_CONFIG } = config_1.STRINGS;
|
|
8
|
+
const CommonGenerator = (config) => {
|
|
9
|
+
/**
|
|
10
|
+
* Generates next value by copying the validated config.
|
|
11
|
+
* Validates the provided config is not null or empty.
|
|
12
|
+
* Returns a copy of the validated config, otherwise throws an GlobalConfigError.
|
|
13
|
+
*/
|
|
14
|
+
const validateConfig = (config) => {
|
|
15
|
+
if (!config || Object.keys(config).length === 0) {
|
|
16
|
+
throw new GlobalConfigError(MISSING_GLOBAL_CONFIG);
|
|
17
|
+
}
|
|
18
|
+
return structuredClone(config);
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Generates next value by copying the validated config.
|
|
22
|
+
*/
|
|
23
|
+
const next = () => validateConfig(config);
|
|
24
|
+
return {
|
|
25
|
+
next,
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
exports.CommonGenerator = CommonGenerator;
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9pZi1ydW4vYnVpbHRpbnMvbW9jay1vYnNlcnZhdGlvbnMvaGVscGVycy9jb21tb24tZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUE2QztBQUc3Qyw0Q0FBd0M7QUFJeEMsTUFBTSxFQUFDLGlCQUFpQixFQUFDLEdBQUcsY0FBTSxDQUFDO0FBQ25DLE1BQU0sRUFBQyxxQkFBcUIsRUFBQyxHQUFHLGdCQUFPLENBQUM7QUFFakMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFvQixFQUFhLEVBQUU7SUFDakU7Ozs7T0FJRztJQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUU7UUFDeEMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDL0MsTUFBTSxJQUFJLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDcEQ7UUFFRCxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sSUFBSSxHQUFHLEdBQVcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVsRCxPQUFPO1FBQ0wsSUFBSTtLQUNMLENBQUM7QUFDSixDQUFDLENBQUM7QUF0QlcsUUFBQSxlQUFlLG1CQXNCMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VSUk9SU30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3V0aWxzJztcbmltcG9ydCB7Q29uZmlnUGFyYW1zfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdHlwZXMnO1xuXG5pbXBvcnQge1NUUklOR1N9IGZyb20gJy4uLy4uLy4uL2NvbmZpZyc7XG5cbmltcG9ydCB7R2VuZXJhdG9yfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuY29uc3Qge0dsb2JhbENvbmZpZ0Vycm9yfSA9IEVSUk9SUztcbmNvbnN0IHtNSVNTSU5HX0dMT0JBTF9DT05GSUd9ID0gU1RSSU5HUztcblxuZXhwb3J0IGNvbnN0IENvbW1vbkdlbmVyYXRvciA9IChjb25maWc6IENvbmZpZ1BhcmFtcyk6IEdlbmVyYXRvciA9PiB7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgbmV4dCB2YWx1ZSBieSBjb3B5aW5nIHRoZSB2YWxpZGF0ZWQgY29uZmlnLlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIGNvbmZpZyBpcyBub3QgbnVsbCBvciBlbXB0eS5cbiAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhlIHZhbGlkYXRlZCBjb25maWcsIG90aGVyd2lzZSB0aHJvd3MgYW4gR2xvYmFsQ29uZmlnRXJyb3IuXG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZUNvbmZpZyA9IChjb25maWc6IG9iamVjdCkgPT4ge1xuICAgIGlmICghY29uZmlnIHx8IE9iamVjdC5rZXlzKGNvbmZpZykubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgR2xvYmFsQ29uZmlnRXJyb3IoTUlTU0lOR19HTE9CQUxfQ09ORklHKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKGNvbmZpZyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBuZXh0IHZhbHVlIGJ5IGNvcHlpbmcgdGhlIHZhbGlkYXRlZCBjb25maWcuXG4gICAqL1xuICBjb25zdCBuZXh0ID0gKCk6IE9iamVjdCA9PiB2YWxpZGF0ZUNvbmZpZyhjb25maWcpO1xuXG4gIHJldHVybiB7XG4gICAgbmV4dCxcbiAgfTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RandIntGenerator = void 0;
|
|
4
|
+
const utils_1 = require("@grnsft/if-core/utils");
|
|
5
|
+
const config_1 = require("../../../config");
|
|
6
|
+
const { GlobalConfigError } = utils_1.ERRORS;
|
|
7
|
+
const { MISSING_GLOBAL_CONFIG, MISSING_MIN_MAX, INVALID_MIN_MAX, INVALID_NAME } = config_1.STRINGS;
|
|
8
|
+
const RandIntGenerator = (name, config) => {
|
|
9
|
+
const next = () => ({
|
|
10
|
+
[validatedName]: generateRandInt(getFieldToPopulate()),
|
|
11
|
+
});
|
|
12
|
+
const validateName = (name) => {
|
|
13
|
+
if (!name || name.trim() === '') {
|
|
14
|
+
throw new GlobalConfigError(INVALID_NAME);
|
|
15
|
+
}
|
|
16
|
+
return name;
|
|
17
|
+
};
|
|
18
|
+
const validateConfig = (config) => {
|
|
19
|
+
if (!config || Object.keys(config).length === 0) {
|
|
20
|
+
throw new GlobalConfigError(MISSING_GLOBAL_CONFIG);
|
|
21
|
+
}
|
|
22
|
+
if (!config.min || !config.max) {
|
|
23
|
+
throw new GlobalConfigError(MISSING_MIN_MAX);
|
|
24
|
+
}
|
|
25
|
+
if (config.min >= config.max) {
|
|
26
|
+
throw new GlobalConfigError(INVALID_MIN_MAX(validatedName));
|
|
27
|
+
}
|
|
28
|
+
return { min: config.min, max: config.max };
|
|
29
|
+
};
|
|
30
|
+
const validatedName = validateName(name);
|
|
31
|
+
const validatedConfig = validateConfig(config);
|
|
32
|
+
const getFieldToPopulate = () => ({
|
|
33
|
+
name: validatedName,
|
|
34
|
+
min: validatedConfig.min,
|
|
35
|
+
max: validatedConfig.max,
|
|
36
|
+
});
|
|
37
|
+
const generateRandInt = (randIntGenerator) => {
|
|
38
|
+
const randomNumber = Math.random();
|
|
39
|
+
const scaledNumber = randomNumber * (randIntGenerator.max - randIntGenerator.min) +
|
|
40
|
+
randIntGenerator.min;
|
|
41
|
+
return Math.trunc(scaledNumber);
|
|
42
|
+
};
|
|
43
|
+
return {
|
|
44
|
+
next,
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
exports.RandIntGenerator = RandIntGenerator;
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZC1pbnQtZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2lmLXJ1bi9idWlsdGlucy9tb2NrLW9ic2VydmF0aW9ucy9oZWxwZXJzL3JhbmQtaW50LWdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBNkM7QUFHN0MsNENBQXdDO0FBSXhDLE1BQU0sRUFBQyxpQkFBaUIsRUFBQyxHQUFHLGNBQU0sQ0FBQztBQUVuQyxNQUFNLEVBQUMscUJBQXFCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUMsR0FDM0UsZ0JBQU8sQ0FBQztBQUVILE1BQU0sZ0JBQWdCLEdBQUcsQ0FDOUIsSUFBWSxFQUNaLE1BQW9CLEVBQ1QsRUFBRTtJQUNiLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxhQUFhLENBQUMsRUFBRSxlQUFlLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztLQUN2RCxDQUFDLENBQUM7SUFFSCxNQUFNLFlBQVksR0FBRyxDQUFDLElBQW1CLEVBQVUsRUFBRTtRQUNuRCxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxJQUFJLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzNDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQW9CLEVBQThCLEVBQUU7UUFDMUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDL0MsTUFBTSxJQUFJLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDcEQ7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDOUIsTUFBTSxJQUFJLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzlDO1FBRUQsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDNUIsTUFBTSxJQUFJLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1NBQzdEO1FBRUQsT0FBTyxFQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDO0lBRUYsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUvQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDaEMsSUFBSSxFQUFFLGFBQWE7UUFDbkIsR0FBRyxFQUFFLGVBQWUsQ0FBQyxHQUFHO1FBQ3hCLEdBQUcsRUFBRSxlQUFlLENBQUMsR0FBRztLQUN6QixDQUFDLENBQUM7SUFFSCxNQUFNLGVBQWUsR0FBRyxDQUN0QixnQkFBd0MsRUFDaEMsRUFBRTtRQUNWLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFlBQVksR0FDaEIsWUFBWSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztZQUM1RCxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7UUFFdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxJQUFJO0tBQ0wsQ0FBQztBQUNKLENBQUMsQ0FBQztBQXZEVyxRQUFBLGdCQUFnQixvQkF1RDNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFUlJPUlN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS91dGlscyc7XG5pbXBvcnQge1JhbmRJbnRHZW5lcmF0b3JQYXJhbXMsIENvbmZpZ1BhcmFtc30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3R5cGVzJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi8uLi8uLi9jb25maWcnO1xuXG5pbXBvcnQge0dlbmVyYXRvcn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmNvbnN0IHtHbG9iYWxDb25maWdFcnJvcn0gPSBFUlJPUlM7XG5cbmNvbnN0IHtNSVNTSU5HX0dMT0JBTF9DT05GSUcsIE1JU1NJTkdfTUlOX01BWCwgSU5WQUxJRF9NSU5fTUFYLCBJTlZBTElEX05BTUV9ID1cbiAgU1RSSU5HUztcblxuZXhwb3J0IGNvbnN0IFJhbmRJbnRHZW5lcmF0b3IgPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgY29uZmlnOiBDb25maWdQYXJhbXNcbik6IEdlbmVyYXRvciA9PiB7XG4gIGNvbnN0IG5leHQgPSAoKSA9PiAoe1xuICAgIFt2YWxpZGF0ZWROYW1lXTogZ2VuZXJhdGVSYW5kSW50KGdldEZpZWxkVG9Qb3B1bGF0ZSgpKSxcbiAgfSk7XG5cbiAgY29uc3QgdmFsaWRhdGVOYW1lID0gKG5hbWU6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcgPT4ge1xuICAgIGlmICghbmFtZSB8fCBuYW1lLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBHbG9iYWxDb25maWdFcnJvcihJTlZBTElEX05BTUUpO1xuICAgIH1cblxuICAgIHJldHVybiBuYW1lO1xuICB9O1xuXG4gIGNvbnN0IHZhbGlkYXRlQ29uZmlnID0gKGNvbmZpZzogQ29uZmlnUGFyYW1zKToge21pbjogbnVtYmVyOyBtYXg6IG51bWJlcn0gPT4ge1xuICAgIGlmICghY29uZmlnIHx8IE9iamVjdC5rZXlzKGNvbmZpZykubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgR2xvYmFsQ29uZmlnRXJyb3IoTUlTU0lOR19HTE9CQUxfQ09ORklHKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy5taW4gfHwgIWNvbmZpZy5tYXgpIHtcbiAgICAgIHRocm93IG5ldyBHbG9iYWxDb25maWdFcnJvcihNSVNTSU5HX01JTl9NQVgpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcubWluID49IGNvbmZpZy5tYXgpIHtcbiAgICAgIHRocm93IG5ldyBHbG9iYWxDb25maWdFcnJvcihJTlZBTElEX01JTl9NQVgodmFsaWRhdGVkTmFtZSkpO1xuICAgIH1cblxuICAgIHJldHVybiB7bWluOiBjb25maWcubWluLCBtYXg6IGNvbmZpZy5tYXh9O1xuICB9O1xuXG4gIGNvbnN0IHZhbGlkYXRlZE5hbWUgPSB2YWxpZGF0ZU5hbWUobmFtZSk7XG4gIGNvbnN0IHZhbGlkYXRlZENvbmZpZyA9IHZhbGlkYXRlQ29uZmlnKGNvbmZpZyk7XG5cbiAgY29uc3QgZ2V0RmllbGRUb1BvcHVsYXRlID0gKCkgPT4gKHtcbiAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgIG1pbjogdmFsaWRhdGVkQ29uZmlnLm1pbixcbiAgICBtYXg6IHZhbGlkYXRlZENvbmZpZy5tYXgsXG4gIH0pO1xuXG4gIGNvbnN0IGdlbmVyYXRlUmFuZEludCA9IChcbiAgICByYW5kSW50R2VuZXJhdG9yOiBSYW5kSW50R2VuZXJhdG9yUGFyYW1zXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgcmFuZG9tTnVtYmVyID0gTWF0aC5yYW5kb20oKTtcbiAgICBjb25zdCBzY2FsZWROdW1iZXIgPVxuICAgICAgcmFuZG9tTnVtYmVyICogKHJhbmRJbnRHZW5lcmF0b3IubWF4IC0gcmFuZEludEdlbmVyYXRvci5taW4pICtcbiAgICAgIHJhbmRJbnRHZW5lcmF0b3IubWluO1xuXG4gICAgcmV0dXJuIE1hdGgudHJ1bmMoc2NhbGVkTnVtYmVyKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5leHQsXG4gIH07XG59O1xuIl19
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MockObservations = void 0;
|
|
4
|
+
const luxon_1 = require("luxon");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const validations_1 = require("../../../common/util/validations");
|
|
7
|
+
const common_generator_1 = require("./helpers/common-generator");
|
|
8
|
+
const rand_int_generator_1 = require("./helpers/rand-int-generator");
|
|
9
|
+
const MockObservations = (globalConfig, parametersMetadata) => {
|
|
10
|
+
const metadata = {
|
|
11
|
+
kind: 'execute',
|
|
12
|
+
inputs: parametersMetadata?.inputs,
|
|
13
|
+
outputs: parametersMetadata?.outputs,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Generate sets of mocked observations based on config.
|
|
17
|
+
*/
|
|
18
|
+
const execute = (inputs) => {
|
|
19
|
+
const { duration, timeBuckets, components, generators } = generateParamsFromConfig();
|
|
20
|
+
const generatorToHistory = new Map();
|
|
21
|
+
generators.forEach(generator => {
|
|
22
|
+
generatorToHistory.set(generator, []);
|
|
23
|
+
});
|
|
24
|
+
const defaults = inputs && inputs[0];
|
|
25
|
+
return Object.entries(components).reduce((acc, item) => {
|
|
26
|
+
const component = item[1];
|
|
27
|
+
timeBuckets.forEach(timeBucket => {
|
|
28
|
+
const observation = createObservation({ duration, component, timeBucket, generators }, generatorToHistory);
|
|
29
|
+
acc.push(Object.assign({}, defaults, observation));
|
|
30
|
+
});
|
|
31
|
+
return acc;
|
|
32
|
+
}, []);
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Validates global config parameters.
|
|
36
|
+
*/
|
|
37
|
+
const validateGlobalConfig = () => {
|
|
38
|
+
const schema = zod_1.z.object({
|
|
39
|
+
'timestamp-from': zod_1.z.string(),
|
|
40
|
+
'timestamp-to': zod_1.z.string(),
|
|
41
|
+
duration: zod_1.z.number().gt(0),
|
|
42
|
+
components: zod_1.z.array(zod_1.z.record(zod_1.z.string())),
|
|
43
|
+
generators: zod_1.z.object({
|
|
44
|
+
common: zod_1.z.record(zod_1.z.string().or(zod_1.z.number())),
|
|
45
|
+
randint: zod_1.z.record(zod_1.z.object({ min: zod_1.z.number(), max: zod_1.z.number() })),
|
|
46
|
+
}),
|
|
47
|
+
});
|
|
48
|
+
return (0, validations_1.validate)(schema, globalConfig);
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Configures the MockObservations Plugin for IF
|
|
52
|
+
*/
|
|
53
|
+
const generateParamsFromConfig = () => {
|
|
54
|
+
const { 'timestamp-from': timestampFrom, 'timestamp-to': timestampTo, duration, generators, components, } = validateGlobalConfig();
|
|
55
|
+
const convertedTimestampFrom = luxon_1.DateTime.fromISO(timestampFrom, {
|
|
56
|
+
zone: 'UTC',
|
|
57
|
+
});
|
|
58
|
+
const convertedTimestampTo = luxon_1.DateTime.fromISO(timestampTo, { zone: 'UTC' });
|
|
59
|
+
return {
|
|
60
|
+
duration,
|
|
61
|
+
timeBuckets: createTimeBuckets(convertedTimestampFrom, convertedTimestampTo, duration),
|
|
62
|
+
generators: createGenerators(generators),
|
|
63
|
+
components,
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
/*
|
|
67
|
+
* create time buckets based on start time, end time and duration of each bucket.
|
|
68
|
+
*/
|
|
69
|
+
const createTimeBuckets = (timestampFrom, timestampTo, duration, timeBuckets = []) => {
|
|
70
|
+
if (timestampFrom < timestampTo ||
|
|
71
|
+
timestampFrom.plus(luxon_1.Duration.fromObject({ seconds: duration })) < timestampTo) {
|
|
72
|
+
return createTimeBuckets(timestampFrom.plus(luxon_1.Duration.fromObject({ seconds: duration })), timestampTo, duration, [...timeBuckets, timestampFrom]);
|
|
73
|
+
}
|
|
74
|
+
return timeBuckets;
|
|
75
|
+
};
|
|
76
|
+
/*
|
|
77
|
+
* create generators based on a given config
|
|
78
|
+
*/
|
|
79
|
+
const createGenerators = (generatorsConfig) => {
|
|
80
|
+
const createCommonGenerator = (config) => [
|
|
81
|
+
(0, common_generator_1.CommonGenerator)(config),
|
|
82
|
+
];
|
|
83
|
+
const createRandIntGenerators = (config) => Object.entries(config).map(([fieldToPopulate, value]) => (0, rand_int_generator_1.RandIntGenerator)(fieldToPopulate, value));
|
|
84
|
+
return Object.entries(generatorsConfig).flatMap(([key, value]) => key === 'randint'
|
|
85
|
+
? createRandIntGenerators(value).flat()
|
|
86
|
+
: createCommonGenerator(value));
|
|
87
|
+
};
|
|
88
|
+
/*
|
|
89
|
+
* Creates time buckets based on start time, end time and duration of each bucket.
|
|
90
|
+
*/
|
|
91
|
+
const createObservation = (observationParams, generatorToHistory) => {
|
|
92
|
+
const { duration, component, timeBucket, generators } = observationParams;
|
|
93
|
+
const timestamp = timeBucket.toISO();
|
|
94
|
+
const generateObservation = (generator) => {
|
|
95
|
+
const history = generatorToHistory.get(generator) || [];
|
|
96
|
+
const generated = generator.next(history);
|
|
97
|
+
generatorToHistory.set(generator, [...history, generated.value]);
|
|
98
|
+
return generated;
|
|
99
|
+
};
|
|
100
|
+
const generateObservations = (gen) => generateObservation(gen);
|
|
101
|
+
const generatedValues = generators.map(generateObservations);
|
|
102
|
+
const initialObservation = {
|
|
103
|
+
timestamp,
|
|
104
|
+
duration,
|
|
105
|
+
...component,
|
|
106
|
+
};
|
|
107
|
+
const generatedObservation = generatedValues.reduce((observation, generated) => Object.assign(observation, generated), initialObservation);
|
|
108
|
+
return generatedObservation;
|
|
109
|
+
};
|
|
110
|
+
return {
|
|
111
|
+
metadata,
|
|
112
|
+
execute,
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
exports.MockObservations = MockObservations;
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL21vY2stb2JzZXJ2YXRpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUF5QztBQUN6Qyw2QkFBc0I7QUFTdEIsa0VBQTBEO0FBRTFELGlFQUEyRDtBQUMzRCxxRUFBOEQ7QUFJdkQsTUFBTSxnQkFBZ0IsR0FBRyxDQUM5QixZQUEwQixFQUMxQixrQkFBNEMsRUFDN0IsRUFBRTtJQUNqQixNQUFNLFFBQVEsR0FBRztRQUNmLElBQUksRUFBRSxTQUFTO1FBQ2YsTUFBTSxFQUFFLGtCQUFrQixFQUFFLE1BQU07UUFDbEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE9BQU87S0FDckMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFzQixFQUFFLEVBQUU7UUFDekMsTUFBTSxFQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBQyxHQUNuRCx3QkFBd0IsRUFBRSxDQUFDO1FBQzdCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFFMUQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM3QixrQkFBa0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBbUIsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNyRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMs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a0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN4RCxNQUFNLFNBQVMsR0FBd0IsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUUvRCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFakUsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQyxDQUFDO1FBRUYsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEdBQWMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUUsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzdELE1BQU0sa0JBQWtCLEdBQWlCO1lBQ3ZDLFNBQVM7WUFDVCxRQUFRO1lBQ1IsR0FBRyxTQUFTO1NBQ2IsQ0FBQztRQUNGLE1BQU0sb0JBQW9CLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FDakQsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFDakUsa0JBQWtCLENBQ25CLENBQUM7UUFFRixPQUFPLG9CQUFvQyxDQUFDO0lBQzlDLENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxRQUFRO1FBQ1IsT0FBTztLQUNSLENBQUM7QUFDSixDQUFDLENBQUM7QUF0S1csUUFBQSxnQkFBZ0Isb0JBc0szQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGF0ZVRpbWUsIER1cmF0aW9ufSBmcm9tICdsdXhvbic7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQge1xuICBFeGVjdXRlUGx1Z2luLFxuICBQbHVnaW5QYXJhbXMsXG4gIENvbmZpZ1BhcmFtcyxcbiAgT2JzZXJ2YXRpb25QYXJhbXMsXG4gIFBsdWdpblBhcmFtZXRlcnNNZXRhZGF0YSxcbn0gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3R5cGVzJztcblxuaW1wb3J0IHt2YWxpZGF0ZX0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3V0aWwvdmFsaWRhdGlvbnMnO1xuXG5pbXBvcnQge0NvbW1vbkdlbmVyYXRvcn0gZnJvbSAnLi9oZWxwZXJzL2NvbW1vbi1nZW5lcmF0b3InO1xuaW1wb3J0IHtSYW5kSW50R2VuZXJhdG9yfSBmcm9tICcuL2hlbHBlcnMvcmFuZC1pbnQtZ2VuZXJhdG9yJztcblxuaW1wb3J0IHtHZW5lcmF0b3J9IGZyb20gJy4vaW50ZXJmYWNlcy9pbmRleCc7XG5cbmV4cG9ydCBjb25zdCBNb2NrT2JzZXJ2YXRpb25zID0gKFxuICBnbG9iYWxDb25maWc6IENvbmZpZ1BhcmFtcyxcbiAgcGFyYW1ldGVyc01ldGFkYXRhOiBQbHVnaW5QYXJhbWV0ZXJzTWV0YWRhdGFcbik6IEV4ZWN1dGVQbHVnaW4gPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICBraW5kOiAnZXhlY3V0ZScsXG4gICAgaW5wdXRzOiBwYXJhbWV0ZXJzTWV0YWRhdGE/LmlucHV0cyxcbiAgICBvdXRwdXRzOiBwYXJhbWV0ZXJzTWV0YWRhdGE/Lm91dHB1dHMsXG4gIH07XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHNldHMgb2YgbW9ja2VkIG9ic2VydmF0aW9ucyBiYXNlZCBvbiBjb25maWcuXG4gICAqL1xuICBjb25zdCBleGVjdXRlID0gKGlucHV0czogUGx1Z2luUGFyYW1zW10pID0+IHtcbiAgICBjb25zdCB7ZHVyYXRpb24sIHRpbWVCdWNrZXRzLCBjb21wb25lbnRzLCBnZW5lcmF0b3JzfSA9XG4gICAgICBnZW5lcmF0ZVBhcmFtc0Zyb21Db25maWcoKTtcbiAgICBjb25zdCBnZW5lcmF0b3JUb0hpc3RvcnkgPSBuZXcgTWFwPEdlbmVyYXRvciwgbnVtYmVyW10+KCk7XG5cbiAgICBnZW5lcmF0b3JzLmZvckVhY2goZ2VuZXJhdG9yID0+IHtcbiAgICAgIGdlbmVyYXRvclRvSGlzdG9yeS5zZXQoZ2VuZXJhdG9yLCBbXSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWZhdWx0cyA9IGlucHV0cyAmJiBpbnB1dHNbMF07XG5cbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykucmVkdWNlKChhY2M6IFBsdWdpblBhcmFtc1tdLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBpdGVtWzFdO1xuICAgICAgdGltZUJ1Y2tldHMuZm9yRWFjaCh0aW1lQnVja2V0ID0+IHtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YXRpb24gPSBjcmVhdGVPYnNlcnZhdGlvbihcbiAgICAgICAgICB7ZHVyYXRpb24sIGNvbXBvbmVudCwgdGltZUJ1Y2tldCwgZ2VuZXJhdG9yc30sXG4gICAgICAgICAgZ2VuZXJhdG9yVG9IaXN0b3J5XG4gICAgICAgICk7XG5cbiAgICAgICAgYWNjLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIG9ic2VydmF0aW9uKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBnbG9iYWwgY29uZmlnIHBhcmFtZXRlcnMuXG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZUdsb2JhbENvbmZpZyA9ICgpID0+IHtcbiAgICBjb25zdCBzY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgICAndGltZXN0YW1wLWZyb20nOiB6LnN0cmluZygpLFxuICAgICAgJ3RpbWVzdGFtcC10byc6IHouc3RyaW5nKCksXG4gICAgICBkdXJhdGlvbjogei5udW1iZXIoKS5ndCgwKSxcbiAgICAgIGNvbXBvbmVudHM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSkpLFxuICAgICAgZ2VuZXJhdG9yczogei5vYmplY3Qoe1xuICAgICAgICBjb21tb246IHoucmVjb3JkKHouc3RyaW5nKCkub3Ioei5udW1iZXIoKSkpLFxuICAgICAgICByYW5kaW50OiB6LnJlY29yZCh6Lm9iamVjdCh7bWluOiB6Lm51bWJlcigpLCBtYXg6IHoubnVtYmVyKCl9KSksXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBzY2hlbWE+PihzY2hlbWEsIGdsb2JhbENvbmZpZyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZXMgdGhlIE1vY2tPYnNlcnZhdGlvbnMgUGx1Z2luIGZvciBJRlxuICAgKi9cbiAgY29uc3QgZ2VuZXJhdGVQYXJhbXNGcm9tQ29uZmlnID0gKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICd0aW1lc3RhbXAtZnJvbSc6IHRpbWVzdGFtcEZyb20sXG4gICAgICAndGltZXN0YW1wLXRvJzogdGltZXN0YW1wVG8sXG4gICAgICBkdXJhdGlvbixcbiAgICAgIGdlbmVyYXRvcnMsXG4gICAgICBjb21wb25lbnRzLFxuICAgIH0gPSB2YWxpZGF0ZUdsb2JhbENvbmZpZygpO1xuICAgIGNvbnN0IGNvbnZlcnRlZFRpbWVzdGFtcEZyb20gPSBEYXRlVGltZS5mcm9tSVNPKHRpbWVzdGFtcEZyb20sIHtcbiAgICAgIHpvbmU6ICdVVEMnLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbnZlcnRlZFRpbWVzdGFtcFRvID0gRGF0ZVRpbWUuZnJvbUlTTyh0aW1lc3RhbXBUbywge3pvbmU6ICdVVEMnfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lQnVja2V0czogY3JlYXRlVGltZUJ1Y2tldHMoXG4gICAgICAgIGNvbnZlcnRlZFRpbWVzdGFtcEZyb20sXG4gICAgICAgIGNvbnZlcnRlZFRpbWVzdGFtcFRvLFxuICAgICAgICBkdXJhdGlvblxuICAgICAgKSxcbiAgICAgIGdlbmVyYXRvcnM6IGNyZWF0ZUdlbmVyYXRvcnMoZ2VuZXJhdG9ycyksXG4gICAgICBjb21wb25lbnRzLFxuICAgIH07XG4gIH07XG5cbiAgLypcbiAgICogY3JlYXRlIHRpbWUgYnVja2V0cyBiYXNlZCBvbiBzdGFydCB0aW1lLCBlbmQgdGltZSBhbmQgZHVyYXRpb24gb2YgZWFjaCBidWNrZXQuXG4gICAqL1xuICBjb25zdCBjcmVhdGVUaW1lQnVja2V0cyA9IChcbiAgICB0aW1lc3RhbXBGcm9tOiBEYXRlVGltZSxcbiAgICB0aW1lc3RhbXBUbzogRGF0ZVRpbWUsXG4gICAgZHVyYXRpb246IG51bWJlcixcbiAgICB0aW1lQnVja2V0czogRGF0ZVRpbWVbXSA9IFtdXG4gICk6IERhdGVUaW1lW10gPT4ge1xuICAgIGlmIChcbiAgICAgIHRpbWVzdGFtcEZyb20gPCB0aW1lc3RhbXBUbyB8fFxuICAgICAgdGltZXN0YW1wRnJvbS5wbHVzKER1cmF0aW9uLmZyb21PYmplY3Qoe3NlY29uZHM6IGR1cmF0aW9ufSkpIDwgdGltZXN0YW1wVG9cbiAgICApIHtcbiAgICAgIHJldHVybiBjcmVhdGVUaW1lQnVja2V0cyhcbiAgICAgICAgdGltZXN0YW1wRnJvbS5wbHVzKER1cmF0aW9uLmZyb21PYmplY3Qoe3NlY29uZHM6IGR1cmF0aW9ufSkpLFxuICAgICAgICB0aW1lc3RhbXBUbyxcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIFsuLi50aW1lQnVja2V0cywgdGltZXN0YW1wRnJvbV1cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aW1lQnVja2V0cztcbiAgfTtcblxuICAvKlxuICAgKiBjcmVhdGUgZ2VuZXJhdG9ycyBiYXNlZCBvbiBhIGdpdmVuIGNvbmZpZ1xuICAgKi9cbiAgY29uc3QgY3JlYXRlR2VuZXJhdG9ycyA9IChnZW5lcmF0b3JzQ29uZmlnOiBvYmplY3QpOiBHZW5lcmF0b3JbXSA9PiB7XG4gICAgY29uc3QgY3JlYXRlQ29tbW9uR2VuZXJhdG9yID0gKGNvbmZpZzogYW55KTogR2VuZXJhdG9yW10gPT4gW1xuICAgICAgQ29tbW9uR2VuZXJhdG9yKGNvbmZpZyksXG4gICAgXTtcblxuICAgIGNvbnN0IGNyZWF0ZVJhbmRJbnRHZW5lcmF0b3JzID0gKGNvbmZpZzogYW55KTogR2VuZXJhdG9yW10gPT5cbiAgICAgIE9iamVjdC5lbnRyaWVzKGNvbmZpZykubWFwKChbZmllbGRUb1BvcHVsYXRlLCB2YWx1ZV0pID0+XG4gICAgICAgIFJhbmRJbnRHZW5lcmF0b3IoZmllbGRUb1BvcHVsYXRlLCB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVxuICAgICAgKTtcblxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhnZW5lcmF0b3JzQ29uZmlnKS5mbGF0TWFwKChba2V5LCB2YWx1ZV0pID0+XG4gICAgICBrZXkgPT09ICdyYW5kaW50J1xuICAgICAgICA/IGNyZWF0ZVJhbmRJbnRHZW5lcmF0b3JzKHZhbHVlKS5mbGF0KClcbiAgICAgICAgOiBjcmVhdGVDb21tb25HZW5lcmF0b3IodmFsdWUpXG4gICAgKTtcbiAgfTtcblxuICAvKlxuICAgKiBDcmVhdGVzIHRpbWUgYnVja2V0cyBiYXNlZCBvbiBzdGFydCB0aW1lLCBlbmQgdGltZSBhbmQgZHVyYXRpb24gb2YgZWFjaCBidWNrZXQuXG4gICAqL1xuICBjb25zdCBjcmVhdGVPYnNlcnZhdGlvbiA9IChcbiAgICBvYnNlcnZhdGlvblBhcmFtczogT2JzZXJ2YXRpb25QYXJhbXMsXG4gICAgZ2VuZXJhdG9yVG9IaXN0b3J5OiBNYXA8R2VuZXJhdG9yLCBudW1iZXJbXT5cbiAgKTogUGx1Z2luUGFyYW1zID0+IHtcbiAgICBjb25zdCB7ZHVyYXRpb24sIGNvbXBvbmVudCwgdGltZUJ1Y2tldCwgZ2VuZXJhdG9yc30gPSBvYnNlcnZhdGlvblBhcmFtcztcbiAgICBjb25zdCB0aW1lc3RhbXAgPSB0aW1lQnVja2V0LnRvSVNPKCk7XG5cbiAgICBjb25zdCBnZW5lcmF0ZU9ic2VydmF0aW9uID0gKGdlbmVyYXRvcjogR2VuZXJhdG9yKSA9PiB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2VuZXJhdG9yVG9IaXN0b3J5LmdldChnZW5lcmF0b3IpIHx8IFtdO1xuICAgICAgY29uc3QgZ2VuZXJhdGVkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gZ2VuZXJhdG9yLm5leHQoaGlzdG9yeSk7XG5cbiAgICAgIGdlbmVyYXRvclRvSGlzdG9yeS5zZXQoZ2VuZXJhdG9yLCBbLi4uaGlzdG9yeSwgZ2VuZXJhdGVkLnZhbHVlXSk7XG5cbiAgICAgIHJldHVybiBnZW5lcmF0ZWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGdlbmVyYXRlT2JzZXJ2YXRpb25zID0gKGdlbjogR2VuZXJhdG9yKSA9PiBnZW5lcmF0ZU9ic2VydmF0aW9uKGdlbik7XG4gICAgY29uc3QgZ2VuZXJhdGVkVmFsdWVzID0gZ2VuZXJhdG9ycy5tYXAoZ2VuZXJhdGVPYnNlcnZhdGlvbnMpO1xuICAgIGNvbnN0IGluaXRpYWxPYnNlcnZhdGlvbjogUGx1Z2luUGFyYW1zID0ge1xuICAgICAgdGltZXN0YW1wLFxuICAgICAgZHVyYXRpb24sXG4gICAgICAuLi5jb21wb25lbnQsXG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZWRPYnNlcnZhdGlvbiA9IGdlbmVyYXRlZFZhbHVlcy5yZWR1Y2UoXG4gICAgICAob2JzZXJ2YXRpb24sIGdlbmVyYXRlZCkgPT4gT2JqZWN0LmFzc2lnbihvYnNlcnZhdGlvbiwgZ2VuZXJhdGVkKSxcbiAgICAgIGluaXRpYWxPYnNlcnZhdGlvblxuICAgICk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdGVkT2JzZXJ2YXRpb24gYXMgUGx1Z2luUGFyYW1zO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbWV0YWRhdGEsXG4gICAgZXhlY3V0ZSxcbiAgfTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL21vY2stb2JzZXJ2YXRpb25zL2ludGVyZmFjZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEdlbmVyYXRvciA9IHtcbiAgLyoqXG4gICAqIGdlbmVyYXRlIHRoZSBuZXh0IHZhbHVlLCBvcHRpb25hbGx5IGJhc2VkIG9uIGhpc3RvcmljYWwgdmFsdWVzXG4gICAqL1xuICBuZXh0OiAoaGlzdG9yaWNhbDogT2JqZWN0W10gfCB1bmRlZmluZWQpID0+IE9iamVjdDtcbn07XG4iXX0=
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Multiply = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const validations_1 = require("../../../common/util/validations");
|
|
6
|
+
const Multiply = (globalConfig, parametersMetadata) => {
|
|
7
|
+
const metadata = {
|
|
8
|
+
kind: 'execute',
|
|
9
|
+
inputs: parametersMetadata?.inputs,
|
|
10
|
+
outputs: parametersMetadata?.outputs,
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Checks global config value are valid.
|
|
14
|
+
*/
|
|
15
|
+
const validateGlobalConfig = () => {
|
|
16
|
+
const globalConfigSchema = zod_1.z.object({
|
|
17
|
+
'input-parameters': zod_1.z.array(zod_1.z.string()),
|
|
18
|
+
'output-parameter': zod_1.z.string().min(1),
|
|
19
|
+
});
|
|
20
|
+
return (0, validations_1.validate)(globalConfigSchema, globalConfig);
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Checks for required fields in input.
|
|
24
|
+
*/
|
|
25
|
+
const validateSingleInput = (input, inputParameters) => {
|
|
26
|
+
const inputData = inputParameters.reduce((acc, param) => {
|
|
27
|
+
acc[param] = input[param];
|
|
28
|
+
return acc;
|
|
29
|
+
}, {});
|
|
30
|
+
const validationSchema = zod_1.z.record(zod_1.z.string(), zod_1.z.number());
|
|
31
|
+
(0, validations_1.validate)(validationSchema, inputData);
|
|
32
|
+
return input;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Calculate the product of each input parameter.
|
|
36
|
+
*/
|
|
37
|
+
const execute = (inputs) => {
|
|
38
|
+
const safeGlobalConfig = validateGlobalConfig();
|
|
39
|
+
const inputParameters = safeGlobalConfig['input-parameters'];
|
|
40
|
+
const outputParameter = safeGlobalConfig['output-parameter'];
|
|
41
|
+
return inputs.map(input => {
|
|
42
|
+
validateSingleInput(input, inputParameters);
|
|
43
|
+
return {
|
|
44
|
+
...input,
|
|
45
|
+
[outputParameter]: calculateProduct(input, inputParameters),
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Calculates the product of the components.
|
|
51
|
+
*/
|
|
52
|
+
const calculateProduct = (input, inputParameters) => inputParameters.reduce((accumulator, metricToMultiply) => accumulator * input[metricToMultiply], 1);
|
|
53
|
+
return {
|
|
54
|
+
metadata,
|
|
55
|
+
execute,
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
exports.Multiply = Multiply;
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL211bHRpcGx5L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUFzQjtBQVF0QixrRUFBMEQ7QUFFbkQsTUFBTSxRQUFRLEdBQUcsQ0FDdEIsWUFBNEIsRUFDNUIsa0JBQTRDLEVBQzdCLEVBQUU7SUFDakIsTUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxNQUFNO1FBQ2xDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPO0tBQ3JDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxFQUFFO1FBQ2hDLE1BQU0sa0JBQWtCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNsQyxrQkFBa0IsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2QyxrQkFBa0IsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN0QyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUEsc0JBQVEsRUFDYixrQkFBa0IsRUFDbEIsWUFBWSxDQUNiLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sbUJBQW1CLEdBQUcsQ0FDMUIsS0FBbUIsRUFDbkIsZUFBeUIsRUFDekIsRUFBRTtRQUNGLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQ3RDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2IsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUxQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFDRCxFQUE0QixDQUM3QixDQUFDO1FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUUxRCxJQUFBLHNCQUFRLEVBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFdEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBc0IsRUFBa0IsRUFBRTtRQUN6RCxNQUFNLGdCQUFnQixHQUFHLG9CQUFvQixFQUFFLENBQUM7UUFDaEQsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM3RCxNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRTdELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFFNUMsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsQ0FBQyxlQUFlLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDO2FBQzVELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQW1CLEVBQUUsZUFBeUIsRUFBRSxFQUFFLENBQzFFLGVBQWUsQ0FBQyxNQUFNLENBQ3BCLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQ3hFLENBQUMsQ0FDRixDQUFDO0lBRUosT0FBTztRQUNMLFFBQVE7UUFDUixPQUFPO0tBQ1IsQ0FBQztBQUNKLENBQUMsQ0FBQztBQS9FVyxRQUFBLFFBQVEsWUErRW5CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuaW1wb3J0IHtcbiAgRXhlY3V0ZVBsdWdpbixcbiAgUGx1Z2luUGFyYW1zLFxuICBNdWx0aXBseUNvbmZpZyxcbiAgUGx1Z2luUGFyYW1ldGVyc01ldGFkYXRhLFxufSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdHlwZXMnO1xuXG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbC92YWxpZGF0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBNdWx0aXBseSA9IChcbiAgZ2xvYmFsQ29uZmlnOiBNdWx0aXBseUNvbmZpZyxcbiAgcGFyYW1ldGVyc01ldGFkYXRhOiBQbHVnaW5QYXJhbWV0ZXJzTWV0YWRhdGFcbik6IEV4ZWN1dGVQbHVnaW4gPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICBraW5kOiAnZXhlY3V0ZScsXG4gICAgaW5wdXRzOiBwYXJhbWV0ZXJzTWV0YWRhdGE/LmlucHV0cyxcbiAgICBvdXRwdXRzOiBwYXJhbWV0ZXJzTWV0YWRhdGE/Lm91dHB1dHMsXG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBnbG9iYWwgY29uZmlnIHZhbHVlIGFyZSB2YWxpZC5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlR2xvYmFsQ29uZmlnID0gKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbENvbmZpZ1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAgICdpbnB1dC1wYXJhbWV0ZXJzJzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICAgICdvdXRwdXQtcGFyYW1ldGVyJzogei5zdHJpbmcoKS5taW4oMSksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGU8ei5pbmZlcjx0eXBlb2YgZ2xvYmFsQ29uZmlnU2NoZW1hPj4oXG4gICAgICBnbG9iYWxDb25maWdTY2hlbWEsXG4gICAgICBnbG9iYWxDb25maWdcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgZm9yIHJlcXVpcmVkIGZpZWxkcyBpbiBpbnB1dC5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlU2luZ2xlSW5wdXQgPSAoXG4gICAgaW5wdXQ6IFBsdWdpblBhcmFtcyxcbiAgICBpbnB1dFBhcmFtZXRlcnM6IHN0cmluZ1tdXG4gICkgPT4ge1xuICAgIGNvbnN0IGlucHV0RGF0YSA9IGlucHV0UGFyYW1ldGVycy5yZWR1Y2UoXG4gICAgICAoYWNjLCBwYXJhbSkgPT4ge1xuICAgICAgICBhY2NbcGFyYW1dID0gaW5wdXRbcGFyYW1dO1xuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPlxuICAgICk7XG5cbiAgICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5udW1iZXIoKSk7XG5cbiAgICB2YWxpZGF0ZSh2YWxpZGF0aW9uU2NoZW1hLCBpbnB1dERhdGEpO1xuXG4gICAgcmV0dXJuIGlucHV0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHByb2R1Y3Qgb2YgZWFjaCBpbnB1dCBwYXJhbWV0ZXIuXG4gICAqL1xuICBjb25zdCBleGVjdXRlID0gKGlucHV0czogUGx1Z2luUGFyYW1zW10pOiBQbHVnaW5QYXJhbXNbXSA9PiB7XG4gICAgY29uc3Qgc2FmZUdsb2JhbENvbmZpZyA9IHZhbGlkYXRlR2xvYmFsQ29uZmlnKCk7XG4gICAgY29uc3QgaW5wdXRQYXJhbWV0ZXJzID0gc2FmZUdsb2JhbENvbmZpZ1snaW5wdXQtcGFyYW1ldGVycyddO1xuICAgIGNvbnN0IG91dHB1dFBhcmFtZXRlciA9IHNhZmVHbG9iYWxDb25maWdbJ291dHB1dC1wYXJhbWV0ZXInXTtcblxuICAgIHJldHVybiBpbnB1dHMubWFwKGlucHV0ID0+IHtcbiAgICAgIHZhbGlkYXRlU2luZ2xlSW5wdXQoaW5wdXQsIGlucHV0UGFyYW1ldGVycyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlucHV0LFxuICAgICAgICBbb3V0cHV0UGFyYW1ldGVyXTogY2FsY3VsYXRlUHJvZHVjdChpbnB1dCwgaW5wdXRQYXJhbWV0ZXJzKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHByb2R1Y3Qgb2YgdGhlIGNvbXBvbmVudHMuXG4gICAqL1xuICBjb25zdCBjYWxjdWxhdGVQcm9kdWN0ID0gKGlucHV0OiBQbHVnaW5QYXJhbXMsIGlucHV0UGFyYW1ldGVyczogc3RyaW5nW10pID0+XG4gICAgaW5wdXRQYXJhbWV0ZXJzLnJlZHVjZShcbiAgICAgIChhY2N1bXVsYXRvciwgbWV0cmljVG9NdWx0aXBseSkgPT4gYWNjdW11bGF0b3IgKiBpbnB1dFttZXRyaWNUb011bHRpcGx5XSxcbiAgICAgIDFcbiAgICApO1xuXG4gIHJldHVybiB7XG4gICAgbWV0YWRhdGEsXG4gICAgZXhlY3V0ZSxcbiAgfTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Regex = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const utils_1 = require("@grnsft/if-core/utils");
|
|
6
|
+
const validations_1 = require("../../../common/util/validations");
|
|
7
|
+
const config_1 = require("../../config");
|
|
8
|
+
const { MissingInputDataError, GlobalConfigError, RegexMismatchError } = utils_1.ERRORS;
|
|
9
|
+
const { MISSING_GLOBAL_CONFIG, MISSING_INPUT_DATA, REGEX_MISMATCH } = config_1.STRINGS;
|
|
10
|
+
const Regex = (globalConfig, parametersMetadata) => {
|
|
11
|
+
const metadata = {
|
|
12
|
+
kind: 'execute',
|
|
13
|
+
inputs: parametersMetadata?.inputs,
|
|
14
|
+
outputs: parametersMetadata?.outputs,
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Checks global config value are valid.
|
|
18
|
+
*/
|
|
19
|
+
const validateGlobalConfig = () => {
|
|
20
|
+
if (!globalConfig) {
|
|
21
|
+
throw new GlobalConfigError(MISSING_GLOBAL_CONFIG);
|
|
22
|
+
}
|
|
23
|
+
const schema = zod_1.z.object({
|
|
24
|
+
parameter: zod_1.z.string().min(1),
|
|
25
|
+
match: zod_1.z.string().min(1),
|
|
26
|
+
output: zod_1.z.string(),
|
|
27
|
+
});
|
|
28
|
+
return (0, validations_1.validate)(schema, globalConfig);
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Checks for required fields in input.
|
|
32
|
+
*/
|
|
33
|
+
const validateSingleInput = (input, parameter) => {
|
|
34
|
+
if (!input[parameter]) {
|
|
35
|
+
throw new MissingInputDataError(MISSING_INPUT_DATA(parameter));
|
|
36
|
+
}
|
|
37
|
+
return input;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Executes the regex of the given parameter.
|
|
41
|
+
*/
|
|
42
|
+
const execute = (inputs) => {
|
|
43
|
+
const safeGlobalConfig = validateGlobalConfig();
|
|
44
|
+
const { parameter: parameter, match, output } = safeGlobalConfig;
|
|
45
|
+
return inputs.map(input => {
|
|
46
|
+
const safeInput = Object.assign({}, input, validateSingleInput(input, parameter));
|
|
47
|
+
return {
|
|
48
|
+
...input,
|
|
49
|
+
[output]: extractMatching(safeInput, parameter, match),
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Extracts a substring from the given input parameter that matches the provided regular expression pattern.
|
|
55
|
+
*/
|
|
56
|
+
const extractMatching = (input, parameter, match) => {
|
|
57
|
+
if (!match.startsWith('/')) {
|
|
58
|
+
match = '/' + match;
|
|
59
|
+
}
|
|
60
|
+
if (!match.endsWith('/g') && !match.endsWith('/')) {
|
|
61
|
+
match += '/';
|
|
62
|
+
}
|
|
63
|
+
const regex = eval(match);
|
|
64
|
+
const matchedItems = input[parameter].match(regex);
|
|
65
|
+
if (!matchedItems || matchedItems.length === 0) {
|
|
66
|
+
throw new RegexMismatchError(REGEX_MISMATCH(input[parameter], match));
|
|
67
|
+
}
|
|
68
|
+
return matchedItems.join(' ');
|
|
69
|
+
};
|
|
70
|
+
return {
|
|
71
|
+
metadata,
|
|
72
|
+
execute,
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
exports.Regex = Regex;
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL3JlZ2V4L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUFzQjtBQUN0QixpREFBNkM7QUFRN0Msa0VBQTBEO0FBRTFELHlDQUFxQztBQUVyQyxNQUFNLEVBQUMscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUMsR0FBRyxjQUFNLENBQUM7QUFDOUUsTUFBTSxFQUFDLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBQyxHQUFHLGdCQUFPLENBQUM7QUFFckUsTUFBTSxLQUFLLEdBQUcsQ0FDbkIsWUFBMEIsRUFDMUIsa0JBQTRDLEVBQzdCLEVBQUU7SUFDakIsTUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxNQUFNO1FBQ2xDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPO0tBQ3JDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxFQUFFO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsTUFBTSxJQUFJLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDcEQ7UUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3RCLFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDeEIsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFBLHNCQUFRLEVBQXlCLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFtQixFQUFFLFNBQWlCLEVBQUUsRUFBRTtRQUNyRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBc0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUNoRCxNQUFNLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsZ0JBQWdCLENBQUM7UUFFL0QsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQzdCLEVBQUUsRUFDRixLQUFLLEVBQ0wsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUN0QyxDQUFDO1lBRUYsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsQ0FBQyxNQUFNLENBQUMsRUFBRSxlQUFlLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUM7YUFDdkQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLGVBQWUsR0FBRyxDQUN0QixLQUFtQixFQUNuQixTQUFpQixFQUNqQixLQUFhLEVBQ2IsRUFBRTtRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pELEtBQUssSUFBSSxHQUFHLENBQUM7U0FDZDtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDOUMsTUFBTSxJQUFJLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUN2RTtRQUVELE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsUUFBUTtRQUNSLE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBekZXLFFBQUEsS0FBSyxTQXlGaEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQge0VSUk9SU30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3V0aWxzJztcbmltcG9ydCB7XG4gIEV4ZWN1dGVQbHVnaW4sXG4gIFBsdWdpblBhcmFtcyxcbiAgQ29uZmlnUGFyYW1zLFxuICBQbHVnaW5QYXJhbWV0ZXJzTWV0YWRhdGEsXG59IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5cbmltcG9ydCB7dmFsaWRhdGV9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi91dGlsL3ZhbGlkYXRpb25zJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi8uLi9jb25maWcnO1xuXG5jb25zdCB7TWlzc2luZ0lucHV0RGF0YUVycm9yLCBHbG9iYWxDb25maWdFcnJvciwgUmVnZXhNaXNtYXRjaEVycm9yfSA9IEVSUk9SUztcbmNvbnN0IHtNSVNTSU5HX0dMT0JBTF9DT05GSUcsIE1JU1NJTkdfSU5QVVRfREFUQSwgUkVHRVhfTUlTTUFUQ0h9ID0gU1RSSU5HUztcblxuZXhwb3J0IGNvbnN0IFJlZ2V4ID0gKFxuICBnbG9iYWxDb25maWc6IENvbmZpZ1BhcmFtcyxcbiAgcGFyYW1ldGVyc01ldGFkYXRhOiBQbHVnaW5QYXJhbWV0ZXJzTWV0YWRhdGFcbik6IEV4ZWN1dGVQbHVnaW4gPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICBraW5kOiAnZXhlY3V0ZScsXG4gICAgaW5wdXRzOiBwYXJhbWV0ZXJzTWV0YWRhdGE/LmlucHV0cyxcbiAgICBvdXRwdXRzOiBwYXJhbWV0ZXJzTWV0YWRhdGE/Lm91dHB1dHMsXG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBnbG9iYWwgY29uZmlnIHZhbHVlIGFyZSB2YWxpZC5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlR2xvYmFsQ29uZmlnID0gKCkgPT4ge1xuICAgIGlmICghZ2xvYmFsQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgR2xvYmFsQ29uZmlnRXJyb3IoTUlTU0lOR19HTE9CQUxfQ09ORklHKTtcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgICBwYXJhbWV0ZXI6IHouc3RyaW5nKCkubWluKDEpLFxuICAgICAgbWF0Y2g6IHouc3RyaW5nKCkubWluKDEpLFxuICAgICAgb3V0cHV0OiB6LnN0cmluZygpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIHNjaGVtYT4+KHNjaGVtYSwgZ2xvYmFsQ29uZmlnKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGZvciByZXF1aXJlZCBmaWVsZHMgaW4gaW5wdXQuXG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZVNpbmdsZUlucHV0ID0gKGlucHV0OiBQbHVnaW5QYXJhbXMsIHBhcmFtZXRlcjogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFpbnB1dFtwYXJhbWV0ZXJdKSB7XG4gICAgICB0aHJvdyBuZXcgTWlzc2luZ0lucHV0RGF0YUVycm9yKE1JU1NJTkdfSU5QVVRfREFUQShwYXJhbWV0ZXIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5wdXQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSByZWdleCBvZiB0aGUgZ2l2ZW4gcGFyYW1ldGVyLlxuICAgKi9cbiAgY29uc3QgZXhlY3V0ZSA9IChpbnB1dHM6IFBsdWdpblBhcmFtc1tdKSA9PiB7XG4gICAgY29uc3Qgc2FmZUdsb2JhbENvbmZpZyA9IHZhbGlkYXRlR2xvYmFsQ29uZmlnKCk7XG4gICAgY29uc3Qge3BhcmFtZXRlcjogcGFyYW1ldGVyLCBtYXRjaCwgb3V0cHV0fSA9IHNhZmVHbG9iYWxDb25maWc7XG5cbiAgICByZXR1cm4gaW5wdXRzLm1hcChpbnB1dCA9PiB7XG4gICAgICBjb25zdCBzYWZlSW5wdXQgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHZhbGlkYXRlU2luZ2xlSW5wdXQoaW5wdXQsIHBhcmFtZXRlcilcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlucHV0LFxuICAgICAgICBbb3V0cHV0XTogZXh0cmFjdE1hdGNoaW5nKHNhZmVJbnB1dCwgcGFyYW1ldGVyLCBtYXRjaCksXG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhIHN1YnN0cmluZyBmcm9tIHRoZSBnaXZlbiBpbnB1dCBwYXJhbWV0ZXIgdGhhdCBtYXRjaGVzIHRoZSBwcm92aWRlZCByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi5cbiAgICovXG4gIGNvbnN0IGV4dHJhY3RNYXRjaGluZyA9IChcbiAgICBpbnB1dDogUGx1Z2luUGFyYW1zLFxuICAgIHBhcmFtZXRlcjogc3RyaW5nLFxuICAgIG1hdGNoOiBzdHJpbmdcbiAgKSA9PiB7XG4gICAgaWYgKCFtYXRjaC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIG1hdGNoID0gJy8nICsgbWF0Y2g7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRjaC5lbmRzV2l0aCgnL2cnKSAmJiAhbWF0Y2guZW5kc1dpdGgoJy8nKSkge1xuICAgICAgbWF0Y2ggKz0gJy8nO1xuICAgIH1cblxuICAgIGNvbnN0IHJlZ2V4ID0gZXZhbChtYXRjaCk7XG4gICAgY29uc3QgbWF0Y2hlZEl0ZW1zID0gaW5wdXRbcGFyYW1ldGVyXS5tYXRjaChyZWdleCk7XG5cbiAgICBpZiAoIW1hdGNoZWRJdGVtcyB8fCBtYXRjaGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgUmVnZXhNaXNtYXRjaEVycm9yKFJFR0VYX01JU01BVENIKGlucHV0W3BhcmFtZXRlcl0sIG1hdGNoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWRJdGVtcy5qb2luKCcgJyk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBtZXRhZGF0YSxcbiAgICBleGVjdXRlLFxuICB9O1xufTtcbiJdfQ==
|