@grnsft/if 0.5.0 → 0.6.0-beta.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 +8 -0
- package/build/common/config/strings.js +16 -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 +12 -0
- package/build/if-check/config/strings.js +16 -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 +37 -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 +4 -0
- package/build/if-csv/config/strings.js +8 -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 +51 -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-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 +1 -2
- package/build/{builtins → if-run/builtins}/index.js +4 -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/config.js +44 -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-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 +136 -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-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 +15 -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-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 → if-run/builtins}/sci/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,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==
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TIME_UNITS_IN_SECONDS = void 0;
|
|
4
|
+
exports.TIME_UNITS_IN_SECONDS = {
|
|
5
|
+
s: 1,
|
|
6
|
+
second: 1,
|
|
7
|
+
sec: 1,
|
|
8
|
+
secs: 1,
|
|
9
|
+
seconds: 1,
|
|
10
|
+
min: 60,
|
|
11
|
+
mins: 60,
|
|
12
|
+
minute: 60,
|
|
13
|
+
minutes: 60,
|
|
14
|
+
h: 3600,
|
|
15
|
+
hs: 3600,
|
|
16
|
+
hr: 3600,
|
|
17
|
+
hrs: 3600,
|
|
18
|
+
hour: 3600,
|
|
19
|
+
hours: 3600,
|
|
20
|
+
d: 86400,
|
|
21
|
+
ds: 86400,
|
|
22
|
+
day: 86400,
|
|
23
|
+
days: 86400,
|
|
24
|
+
w: 604800,
|
|
25
|
+
ws: 604800,
|
|
26
|
+
wk: 604800,
|
|
27
|
+
wks: 604800,
|
|
28
|
+
week: 604800,
|
|
29
|
+
weeks: 604800,
|
|
30
|
+
m: 2419200,
|
|
31
|
+
mnth: 2419200,
|
|
32
|
+
mth: 2419200,
|
|
33
|
+
mnths: 2419200,
|
|
34
|
+
mths: 2419200,
|
|
35
|
+
month: 2419200,
|
|
36
|
+
months: 2419200,
|
|
37
|
+
y: 31536000,
|
|
38
|
+
ys: 31536000,
|
|
39
|
+
yr: 31536000,
|
|
40
|
+
yrs: 31536000,
|
|
41
|
+
year: 31536000,
|
|
42
|
+
years: 31536000,
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2lmLXJ1bi9idWlsdGlucy9zY2kvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEscUJBQXFCLEdBQTJCO0lBQzNELENBQUMsRUFBRSxDQUFDO0lBQ0osTUFBTSxFQUFFLENBQUM7SUFDVCxHQUFHLEVBQUUsQ0FBQztJQUNOLElBQUksRUFBRSxDQUFDO0lBQ1AsT0FBTyxFQUFFLENBQUM7SUFDVixHQUFHLEVBQUUsRUFBRTtJQUNQLElBQUksRUFBRSxFQUFFO0lBQ1IsTUFBTSxFQUFFLEVBQUU7SUFDVixPQUFPLEVBQUUsRUFBRTtJQUNYLENBQUMsRUFBRSxJQUFJO0lBQ1AsRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEdBQUcsRUFBRSxJQUFJO0lBQ1QsSUFBSSxFQUFFLElBQUk7SUFDVixLQUFLLEVBQUUsSUFBSTtJQUNYLENBQUMsRUFBRSxLQUFLO0lBQ1IsRUFBRSxFQUFFLEtBQUs7SUFDVCxHQUFHLEVBQUUsS0FBSztJQUNWLElBQUksRUFBRSxLQUFLO0lBQ1gsQ0FBQyxFQUFFLE1BQU07SUFDVCxFQUFFLEVBQUUsTUFBTTtJQUNWLEVBQUUsRUFBRSxNQUFNO0lBQ1YsR0FBRyxFQUFFLE1BQU07SUFDWCxJQUFJLEVBQUUsTUFBTTtJQUNaLEtBQUssRUFBRSxNQUFNO0lBQ2IsQ0FBQyxFQUFFLE9BQU87SUFDVixJQUFJLEVBQUUsT0FBTztJQUNiLEdBQUcsRUFBRSxPQUFPO0lBQ1osS0FBSyxFQUFFLE9BQU87SUFDZCxJQUFJLEVBQUUsT0FBTztJQUNiLEtBQUssRUFBRSxPQUFPO0lBQ2QsTUFBTSxFQUFFLE9BQU87SUFDZixDQUFDLEVBQUUsUUFBUTtJQUNYLEVBQUUsRUFBRSxRQUFRO0lBQ1osRUFBRSxFQUFFLFFBQVE7SUFDWixHQUFHLEVBQUUsUUFBUTtJQUNiLElBQUksRUFBRSxRQUFRO0lBQ2QsS0FBSyxFQUFFLFFBQVE7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX0lOX1NFQ09ORFM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gIHM6IDEsXG4gIHNlY29uZDogMSxcbiAgc2VjOiAxLFxuICBzZWNzOiAxLFxuICBzZWNvbmRzOiAxLFxuICBtaW46IDYwLFxuICBtaW5zOiA2MCxcbiAgbWludXRlOiA2MCxcbiAgbWludXRlczogNjAsXG4gIGg6IDM2MDAsXG4gIGhzOiAzNjAwLFxuICBocjogMzYwMCxcbiAgaHJzOiAzNjAwLFxuICBob3VyOiAzNjAwLFxuICBob3VyczogMzYwMCxcbiAgZDogODY0MDAsXG4gIGRzOiA4NjQwMCxcbiAgZGF5OiA4NjQwMCxcbiAgZGF5czogODY0MDAsXG4gIHc6IDYwNDgwMCxcbiAgd3M6IDYwNDgwMCxcbiAgd2s6IDYwNDgwMCxcbiAgd2tzOiA2MDQ4MDAsXG4gIHdlZWs6IDYwNDgwMCxcbiAgd2Vla3M6IDYwNDgwMCxcbiAgbTogMjQxOTIwMCxcbiAgbW50aDogMjQxOTIwMCxcbiAgbXRoOiAyNDE5MjAwLFxuICBtbnRoczogMjQxOTIwMCxcbiAgbXRoczogMjQxOTIwMCxcbiAgbW9udGg6IDI0MTkyMDAsXG4gIG1vbnRoczogMjQxOTIwMCxcbiAgeTogMzE1MzYwMDAsXG4gIHlzOiAzMTUzNjAwMCxcbiAgeXI6IDMxNTM2MDAwLFxuICB5cnM6IDMxNTM2MDAwLFxuICB5ZWFyOiAzMTUzNjAwMCxcbiAgeWVhcnM6IDMxNTM2MDAwLFxufTtcbiJdfQ==
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Sci = 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 } = utils_1.ERRORS;
|
|
9
|
+
const { MISSING_FUNCTIONAL_UNIT_CONFIG, MISSING_FUNCTIONAL_UNIT_INPUT, SCI_MISSING_FN_UNIT, ZERO_DIVISION, } = config_1.STRINGS;
|
|
10
|
+
const Sci = (globalConfig, parametersMetadata) => {
|
|
11
|
+
const metadata = {
|
|
12
|
+
kind: 'execute',
|
|
13
|
+
inputs: {
|
|
14
|
+
...{
|
|
15
|
+
carbon: {
|
|
16
|
+
description: 'an amount of carbon emitted into the atmosphere',
|
|
17
|
+
unit: 'gCO2e',
|
|
18
|
+
'aggregation-method': 'sum',
|
|
19
|
+
},
|
|
20
|
+
'functional-unit': {
|
|
21
|
+
description: 'the name of the functional unit in which the final SCI value should be expressed, e.g. requests, users',
|
|
22
|
+
unit: 'none',
|
|
23
|
+
'aggregation-method': 'sum',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
...parametersMetadata?.inputs,
|
|
27
|
+
},
|
|
28
|
+
outputs: parametersMetadata?.outputs || {
|
|
29
|
+
sci: {
|
|
30
|
+
description: 'carbon expressed in terms of the given functional unit',
|
|
31
|
+
unit: 'gCO2e',
|
|
32
|
+
'aggregation-method': 'sum',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Validates node and gloabl configs.
|
|
38
|
+
*/
|
|
39
|
+
const validateConfig = (config) => {
|
|
40
|
+
const schema = zod_1.z
|
|
41
|
+
.object({
|
|
42
|
+
'functional-unit': zod_1.z.string(),
|
|
43
|
+
})
|
|
44
|
+
.refine(data => data['functional-unit'], {
|
|
45
|
+
message: MISSING_FUNCTIONAL_UNIT_CONFIG,
|
|
46
|
+
});
|
|
47
|
+
return (0, validations_1.validate)(schema, config);
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Calculate the total emissions for a list of inputs.
|
|
51
|
+
*/
|
|
52
|
+
const execute = (inputs) => inputs.map((input, index) => {
|
|
53
|
+
const safeInput = validateInput(input);
|
|
54
|
+
const functionalUnit = input[globalConfig['functional-unit']];
|
|
55
|
+
if (functionalUnit === 0) {
|
|
56
|
+
console.warn(ZERO_DIVISION(exports.Sci.name, index));
|
|
57
|
+
return {
|
|
58
|
+
...input,
|
|
59
|
+
sci: safeInput['carbon'],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
...input,
|
|
64
|
+
sci: safeInput['carbon'] / functionalUnit,
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
/**
|
|
68
|
+
* Checks for fields in input.
|
|
69
|
+
*/
|
|
70
|
+
const validateInput = (input) => {
|
|
71
|
+
const validatedConfig = validateConfig(globalConfig);
|
|
72
|
+
if (!(validatedConfig['functional-unit'] in input &&
|
|
73
|
+
input[validatedConfig['functional-unit']] >= 0)) {
|
|
74
|
+
throw new MissingInputDataError(MISSING_FUNCTIONAL_UNIT_INPUT);
|
|
75
|
+
}
|
|
76
|
+
const schema = zod_1.z
|
|
77
|
+
.object({
|
|
78
|
+
carbon: zod_1.z.number().gte(0),
|
|
79
|
+
duration: zod_1.z.number().gte(1),
|
|
80
|
+
})
|
|
81
|
+
.refine(validations_1.allDefined, {
|
|
82
|
+
message: SCI_MISSING_FN_UNIT(globalConfig['functional-unit']),
|
|
83
|
+
});
|
|
84
|
+
return (0, validations_1.validate)(schema, input);
|
|
85
|
+
};
|
|
86
|
+
return {
|
|
87
|
+
metadata,
|
|
88
|
+
execute,
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
exports.Sci = Sci;
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL3NjaS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBc0I7QUFDdEIsaURBQTZDO0FBUzdDLGtFQUFzRTtBQUV0RSx5Q0FBcUM7QUFFckMsTUFBTSxFQUFDLHFCQUFxQixFQUFDLEdBQUcsY0FBTSxDQUFDO0FBQ3ZDLE1BQU0sRUFDSiw4QkFBOEIsRUFDOUIsNkJBQTZCLEVBQzdCLG1CQUFtQixFQUNuQixhQUFhLEdBQ2QsR0FBRyxnQkFBTyxDQUFDO0FBRUwsTUFBTSxHQUFHLEdBQUcsQ0FDakIsWUFBMEIsRUFDMUIsa0JBQTRDLEVBQzdCLEVBQUU7SUFDakIsTUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRTtZQUNOLEdBQUk7Z0JBQ0YsTUFBTSxFQUFFO29CQUNOLFdBQVcsRUFBRSxpREFBaUQ7b0JBQzlELElBQUksRUFBRSxPQUFPO29CQUNiLG9CQUFvQixFQUFFLEtBQUs7aUJBQzVCO2dCQUNELGlCQUFpQixFQUFFO29CQUNqQixXQUFXLEVBQ1Qsd0dBQXdHO29CQUMxRyxJQUFJLEVBQUUsTUFBTTtvQkFDWixvQkFBb0IsRUFBRSxLQUFLO2lCQUM1QjthQUNvQjtZQUN2QixHQUFHLGtCQUFrQixFQUFFLE1BQU07U0FDOUI7UUFDRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxJQUFJO1lBQ3RDLEdBQUcsRUFBRTtnQkFDSCxXQUFXLEVBQUUsd0RBQXdEO2dCQUNyRSxJQUFJLEVBQUUsT0FBTztnQkFDYixvQkFBb0IsRUFBRSxLQUFLO2FBQzVCO1NBQ0Y7S0FDRixDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQXFCLEVBQUUsRUFBRTtRQUMvQyxNQUFNLE1BQU0sR0FBRyxPQUFDO2FBQ2IsTUFBTSxDQUFDO1lBQ04saUJBQWlCLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtTQUM5QixDQUFDO2FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDdkMsT0FBTyxFQUFFLDhCQUE4QjtTQUN4QyxDQUFDLENBQUM7UUFFTCxPQUFPLElBQUEsc0JBQVEsRUFBeUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFzQixFQUFrQixFQUFFLENBQ3pELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDMUIsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBRTlELElBQUksY0FBYyxLQUFLLENBQUMsRUFBRTtZQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFN0MsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsR0FBRyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUM7YUFDekIsQ0FBQztTQUNIO1FBRUQsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLEdBQUcsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYztTQUMxQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFTDs7T0FFRztJQUNILE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBbUIsRUFBRSxFQUFFO1FBQzVDLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVyRCxJQUNFLENBQUMsQ0FDQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsSUFBSSxLQUFLO1lBQzNDLEtBQUssQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDL0MsRUFDRDtZQUNBLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsTUFBTSxNQUFNLEdBQUcsT0FBQzthQUNiLE1BQU0sQ0FBQztZQUNOLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6QixRQUFRLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDNUIsQ0FBQzthQUNELE1BQU0sQ0FBQyx3QkFBVSxFQUFFO1lBQ2xCLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUM5RCxDQUFDLENBQUM7UUFFTCxPQUFPLElBQUEsc0JBQVEsRUFBeUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxRQUFRO1FBQ1IsT0FBTztLQUNSLENBQUM7QUFDSixDQUFDLENBQUM7QUFwR1csUUFBQSxHQUFHLE9Bb0dkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuaW1wb3J0IHtFUlJPUlN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS91dGlscyc7XG5pbXBvcnQge1xuICBFeGVjdXRlUGx1Z2luLFxuICBQbHVnaW5QYXJhbXMsXG4gIENvbmZpZ1BhcmFtcyxcbiAgUGx1Z2luUGFyYW1ldGVyc01ldGFkYXRhLFxuICBQYXJhbWV0ZXJNZXRhZGF0YSxcbn0gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3R5cGVzJztcblxuaW1wb3J0IHt2YWxpZGF0ZSwgYWxsRGVmaW5lZH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3V0aWwvdmFsaWRhdGlvbnMnO1xuXG5pbXBvcnQge1NUUklOR1N9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5cbmNvbnN0IHtNaXNzaW5nSW5wdXREYXRhRXJyb3J9ID0gRVJST1JTO1xuY29uc3Qge1xuICBNSVNTSU5HX0ZVTkNUSU9OQUxfVU5JVF9DT05GSUcsXG4gIE1JU1NJTkdfRlVOQ1RJT05BTF9VTklUX0lOUFVULFxuICBTQ0lfTUlTU0lOR19GTl9VTklULFxuICBaRVJPX0RJVklTSU9OLFxufSA9IFNUUklOR1M7XG5cbmV4cG9ydCBjb25zdCBTY2kgPSAoXG4gIGdsb2JhbENvbmZpZzogQ29uZmlnUGFyYW1zLFxuICBwYXJhbWV0ZXJzTWV0YWRhdGE6IFBsdWdpblBhcmFtZXRlcnNNZXRhZGF0YVxuKTogRXhlY3V0ZVBsdWdpbiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgIGtpbmQ6ICdleGVjdXRlJyxcbiAgICBpbnB1dHM6IHtcbiAgICAgIC4uLih7XG4gICAgICAgIGNhcmJvbjoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnYW4gYW1vdW50IG9mIGNhcmJvbiBlbWl0dGVkIGludG8gdGhlIGF0bW9zcGhlcmUnLFxuICAgICAgICAgIHVuaXQ6ICdnQ08yZScsXG4gICAgICAgICAgJ2FnZ3JlZ2F0aW9uLW1ldGhvZCc6ICdzdW0nLFxuICAgICAgICB9LFxuICAgICAgICAnZnVuY3Rpb25hbC11bml0Jzoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ3RoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbmFsIHVuaXQgaW4gd2hpY2ggdGhlIGZpbmFsIFNDSSB2YWx1ZSBzaG91bGQgYmUgZXhwcmVzc2VkLCBlLmcuIHJlcXVlc3RzLCB1c2VycycsXG4gICAgICAgICAgdW5pdDogJ25vbmUnLFxuICAgICAgICAgICdhZ2dyZWdhdGlvbi1tZXRob2QnOiAnc3VtJyxcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgUGFyYW1ldGVyTWV0YWRhdGEpLFxuICAgICAgLi4ucGFyYW1ldGVyc01ldGFkYXRhPy5pbnB1dHMsXG4gICAgfSxcbiAgICBvdXRwdXRzOiBwYXJhbWV0ZXJzTWV0YWRhdGE/Lm91dHB1dHMgfHwge1xuICAgICAgc2NpOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnY2FyYm9uIGV4cHJlc3NlZCBpbiB0ZXJtcyBvZiB0aGUgZ2l2ZW4gZnVuY3Rpb25hbCB1bml0JyxcbiAgICAgICAgdW5pdDogJ2dDTzJlJyxcbiAgICAgICAgJ2FnZ3JlZ2F0aW9uLW1ldGhvZCc6ICdzdW0nLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgbm9kZSBhbmQgZ2xvYWJsIGNvbmZpZ3MuXG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZUNvbmZpZyA9IChjb25maWc/OiBDb25maWdQYXJhbXMpID0+IHtcbiAgICBjb25zdCBzY2hlbWEgPSB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgJ2Z1bmN0aW9uYWwtdW5pdCc6IHouc3RyaW5nKCksXG4gICAgICB9KVxuICAgICAgLnJlZmluZShkYXRhID0+IGRhdGFbJ2Z1bmN0aW9uYWwtdW5pdCddLCB7XG4gICAgICAgIG1lc3NhZ2U6IE1JU1NJTkdfRlVOQ1RJT05BTF9VTklUX0NPTkZJRyxcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIHNjaGVtYT4+KHNjaGVtYSwgY29uZmlnKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSB0b3RhbCBlbWlzc2lvbnMgZm9yIGEgbGlzdCBvZiBpbnB1dHMuXG4gICAqL1xuICBjb25zdCBleGVjdXRlID0gKGlucHV0czogUGx1Z2luUGFyYW1zW10pOiBQbHVnaW5QYXJhbXNbXSA9PlxuICAgIGlucHV0cy5tYXAoKGlucHV0LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc2FmZUlucHV0ID0gdmFsaWRhdGVJbnB1dChpbnB1dCk7XG4gICAgICBjb25zdCBmdW5jdGlvbmFsVW5pdCA9IGlucHV0W2dsb2JhbENvbmZpZ1snZnVuY3Rpb25hbC11bml0J11dO1xuXG4gICAgICBpZiAoZnVuY3Rpb25hbFVuaXQgPT09IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKFpFUk9fRElWSVNJT04oU2NpLm5hbWUsIGluZGV4KSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgICBzY2k6IHNhZmVJbnB1dFsnY2FyYm9uJ10sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlucHV0LFxuICAgICAgICBzY2k6IHNhZmVJbnB1dFsnY2FyYm9uJ10gLyBmdW5jdGlvbmFsVW5pdCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgLyoqXG4gICAqIENoZWNrcyBmb3IgZmllbGRzIGluIGlucHV0LlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVJbnB1dCA9IChpbnB1dDogUGx1Z2luUGFyYW1zKSA9PiB7XG4gICAgY29uc3QgdmFsaWRhdGVkQ29uZmlnID0gdmFsaWRhdGVDb25maWcoZ2xvYmFsQ29uZmlnKTtcblxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIHZhbGlkYXRlZENvbmZpZ1snZnVuY3Rpb25hbC11bml0J10gaW4gaW5wdXQgJiZcbiAgICAgICAgaW5wdXRbdmFsaWRhdGVkQ29uZmlnWydmdW5jdGlvbmFsLXVuaXQnXV0gPj0gMFxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IE1pc3NpbmdJbnB1dERhdGFFcnJvcihNSVNTSU5HX0ZVTkNUSU9OQUxfVU5JVF9JTlBVVCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZW1hID0gelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIGNhcmJvbjogei5udW1iZXIoKS5ndGUoMCksXG4gICAgICAgIGR1cmF0aW9uOiB6Lm51bWJlcigpLmd0ZSgxKSxcbiAgICAgIH0pXG4gICAgICAucmVmaW5lKGFsbERlZmluZWQsIHtcbiAgICAgICAgbWVzc2FnZTogU0NJX01JU1NJTkdfRk5fVU5JVChnbG9iYWxDb25maWdbJ2Z1bmN0aW9uYWwtdW5pdCddKSxcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIHNjaGVtYT4+KHNjaGVtYSwgaW5wdXQpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbWV0YWRhdGEsXG4gICAgZXhlY3V0ZSxcbiAgfTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SciEmbodied = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const validations_1 = require("../../../common/util/validations");
|
|
6
|
+
const config_1 = require("../../config");
|
|
7
|
+
const { SCI_EMBODIED_ERROR } = config_1.STRINGS;
|
|
8
|
+
const SciEmbodied = (parametersMetadata) => {
|
|
9
|
+
const metadata = {
|
|
10
|
+
kind: 'execute',
|
|
11
|
+
inputs: {
|
|
12
|
+
...{
|
|
13
|
+
'device/emissions-embodied': {
|
|
14
|
+
description: 'total embodied emissions of some component',
|
|
15
|
+
unit: 'gCO2e',
|
|
16
|
+
'aggregation-method': 'sum',
|
|
17
|
+
},
|
|
18
|
+
'device/expected-lifespan': {
|
|
19
|
+
description: 'Total Expected Lifespan of the Component in Seconds',
|
|
20
|
+
unit: 'seconds',
|
|
21
|
+
'aggregation-method': 'sum',
|
|
22
|
+
},
|
|
23
|
+
'resources-reserved': {
|
|
24
|
+
description: 'resources reserved for an application',
|
|
25
|
+
unit: 'count',
|
|
26
|
+
'aggregation-method': 'none',
|
|
27
|
+
},
|
|
28
|
+
'resources-total': {
|
|
29
|
+
description: 'total resources available',
|
|
30
|
+
unit: 'count',
|
|
31
|
+
'aggregation-method': 'none',
|
|
32
|
+
},
|
|
33
|
+
'vcpus-allocated': {
|
|
34
|
+
description: 'number of vcpus allocated to particular resource',
|
|
35
|
+
unit: 'count',
|
|
36
|
+
'aggregation-method': 'none',
|
|
37
|
+
},
|
|
38
|
+
'vcpus-total': {
|
|
39
|
+
description: 'total number of vcpus available on a particular resource',
|
|
40
|
+
unit: 'count',
|
|
41
|
+
'aggregation-method': 'none',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
...parametersMetadata?.inputs,
|
|
45
|
+
},
|
|
46
|
+
outputs: parametersMetadata?.outputs || {
|
|
47
|
+
'carbon-embodied': {
|
|
48
|
+
description: 'embodied emissions of the component',
|
|
49
|
+
unit: 'gCO2e',
|
|
50
|
+
'aggregation-method': 'sum',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
const METRICS = [
|
|
55
|
+
'device/emissions-embodied',
|
|
56
|
+
'device/expected-lifespan',
|
|
57
|
+
'resources-reserved',
|
|
58
|
+
'vcpus-allocated',
|
|
59
|
+
'resources-total',
|
|
60
|
+
'vcpus-total',
|
|
61
|
+
];
|
|
62
|
+
/**
|
|
63
|
+
* Calculate the Embodied carbon for a list of inputs.
|
|
64
|
+
*/
|
|
65
|
+
const execute = (inputs) => inputs.map(input => {
|
|
66
|
+
const safeInput = validateInput(input);
|
|
67
|
+
return {
|
|
68
|
+
...input,
|
|
69
|
+
'carbon-embodied': calculateEmbodiedCarbon(safeInput),
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
/**
|
|
73
|
+
* Calculate the Embodied carbon for the input.
|
|
74
|
+
* M = totalEmissions * (duration/ExpectedLifespan) * (resourcesReserved/totalResources)
|
|
75
|
+
*/
|
|
76
|
+
const calculateEmbodiedCarbon = (input) => {
|
|
77
|
+
const totalEmissions = input['device/emissions-embodied'];
|
|
78
|
+
const duration = input['duration'];
|
|
79
|
+
const expectedLifespan = input['device/expected-lifespan'];
|
|
80
|
+
const resourcesReserved = input['vcpus-allocated'] || input['resources-reserved'];
|
|
81
|
+
const totalResources = input['vcpus-total'] || input['resources-total'];
|
|
82
|
+
return (totalEmissions *
|
|
83
|
+
(duration / expectedLifespan) *
|
|
84
|
+
(resourcesReserved / totalResources));
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Checks for required fields in input.
|
|
88
|
+
*/
|
|
89
|
+
const validateInput = (input) => {
|
|
90
|
+
const commonSchemaPart = (errorMessage) => ({
|
|
91
|
+
'device/emissions-embodied': zod_1.z
|
|
92
|
+
.number({
|
|
93
|
+
invalid_type_error: errorMessage('gCO2e'),
|
|
94
|
+
})
|
|
95
|
+
.gte(0)
|
|
96
|
+
.min(0),
|
|
97
|
+
'device/expected-lifespan': zod_1.z
|
|
98
|
+
.number({
|
|
99
|
+
invalid_type_error: errorMessage('gCO2e'),
|
|
100
|
+
})
|
|
101
|
+
.gte(0)
|
|
102
|
+
.min(0),
|
|
103
|
+
duration: zod_1.z
|
|
104
|
+
.number({
|
|
105
|
+
invalid_type_error: errorMessage('seconds'),
|
|
106
|
+
})
|
|
107
|
+
.gte(1),
|
|
108
|
+
});
|
|
109
|
+
const vcpusSchemaPart = {
|
|
110
|
+
'vcpus-allocated': zod_1.z
|
|
111
|
+
.number({
|
|
112
|
+
invalid_type_error: SCI_EMBODIED_ERROR('count'),
|
|
113
|
+
})
|
|
114
|
+
.gte(0)
|
|
115
|
+
.min(0),
|
|
116
|
+
'vcpus-total': zod_1.z
|
|
117
|
+
.number({
|
|
118
|
+
invalid_type_error: SCI_EMBODIED_ERROR('count'),
|
|
119
|
+
})
|
|
120
|
+
.gte(0)
|
|
121
|
+
.min(0),
|
|
122
|
+
};
|
|
123
|
+
const resourcesSchemaPart = {
|
|
124
|
+
'resources-reserved': zod_1.z
|
|
125
|
+
.number({
|
|
126
|
+
invalid_type_error: SCI_EMBODIED_ERROR('count'),
|
|
127
|
+
})
|
|
128
|
+
.gte(0)
|
|
129
|
+
.min(0),
|
|
130
|
+
'resources-total': zod_1.z
|
|
131
|
+
.number({
|
|
132
|
+
invalid_type_error: SCI_EMBODIED_ERROR('count'),
|
|
133
|
+
})
|
|
134
|
+
.gte(0)
|
|
135
|
+
.min(0),
|
|
136
|
+
};
|
|
137
|
+
const schemaWithVcpus = zod_1.z.object({
|
|
138
|
+
...commonSchemaPart(SCI_EMBODIED_ERROR),
|
|
139
|
+
...vcpusSchemaPart,
|
|
140
|
+
});
|
|
141
|
+
const schemaWithResources = zod_1.z.object({
|
|
142
|
+
...commonSchemaPart(SCI_EMBODIED_ERROR),
|
|
143
|
+
...resourcesSchemaPart,
|
|
144
|
+
});
|
|
145
|
+
const schema = schemaWithVcpus.or(schemaWithResources).refine(validations_1.allDefined, {
|
|
146
|
+
message: `All ${METRICS} should be present.`,
|
|
147
|
+
});
|
|
148
|
+
return (0, validations_1.validate)(schema, input);
|
|
149
|
+
};
|
|
150
|
+
return {
|
|
151
|
+
metadata,
|
|
152
|
+
execute,
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
exports.SciEmbodied = SciEmbodied;
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL3NjaS1lbWJvZGllZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBc0I7QUFRdEIsa0VBQXNFO0FBRXRFLHlDQUFxQztBQUVyQyxNQUFNLEVBQUMsa0JBQWtCLEVBQUMsR0FBRyxnQkFBTyxDQUFDO0FBRTlCLE1BQU0sV0FBVyxHQUFHLENBQ3pCLGtCQUE0QyxFQUM3QixFQUFFO0lBQ2pCLE1BQU0sUUFBUSxHQUFHO1FBQ2YsSUFBSSxFQUFFLFNBQVM7UUFDZixNQUFNLEVBQUU7WUFDTixHQUFJO2dCQUNGLDJCQUEyQixFQUFFO29CQUMzQixXQUFXLEVBQUUsNENBQTRDO29CQUN6RCxJQUFJLEVBQUUsT0FBTztvQkFDYixvQkFBb0IsRUFBRSxLQUFLO2lCQUM1QjtnQkFDRCwwQkFBMEIsRUFBRTtvQkFDMUIsV0FBVyxFQUFFLHFEQUFxRDtvQkFDbEUsSUFBSSxFQUFFLFNBQVM7b0JBQ2Ysb0JBQW9CLEVBQUUsS0FBSztpQkFDNUI7Z0JBQ0Qsb0JBQW9CLEVBQUU7b0JBQ3BCLFdBQVcsRUFBRSx1Q0FBdUM7b0JBQ3BELElBQUksRUFBRSxPQUFPO29CQUNiLG9CQUFvQixFQUFFLE1BQU07aUJBQzdCO2dCQUNELGlCQUFpQixFQUFFO29CQUNqQixXQUFXLEVBQUUsMkJBQTJCO29CQUN4QyxJQUFJLEVBQUUsT0FBTztvQkFDYixvQkFBb0IsRUFBRSxNQUFNO2lCQUM3QjtnQkFDRCxpQkFBaUIsRUFBRTtvQkFDakIsV0FBVyxFQUFFLGtEQUFrRDtvQkFDL0QsSUFBSSxFQUFFLE9BQU87b0JBQ2Isb0JBQW9CLEVBQUUsTUFBTTtpQkFDN0I7Z0JBQ0QsYUFBYSxFQUFFO29CQUNiLFdBQVcsRUFDVCwwREFBMEQ7b0JBQzVELElBQUksRUFBRSxPQUFPO29CQUNiLG9CQUFvQixFQUFFLE1BQU07aUJBQzdCO2FBQ29CO1lBQ3ZCLEdBQUcsa0JBQWtCLEVBQUUsTUFBTTtTQUM5QjtRQUNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLElBQUk7WUFDdEMsaUJBQWlCLEVBQUU7Z0JBQ2pCLFdBQVcsRUFBRSxxQ0FBcUM7Z0JBQ2xELElBQUksRUFBRSxPQUFPO2dCQUNiLG9CQUFvQixFQUFFLEtBQUs7YUFDNUI7U0FDRjtLQUNGLENBQUM7SUFFRixNQUFNLE9BQU8sR0FBRztRQUNkLDJCQUEyQjtRQUMzQiwwQkFBMEI7UUFDMUIsb0JBQW9CO1FBQ3BCLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsYUFBYTtLQUNkLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBc0IsRUFBRSxFQUFFLENBQ3pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDakIsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXZDLE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixpQkFBaUIsRUFBRSx1QkFBdUIsQ0FBQyxTQUFTLENBQUM7U0FDdEQsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUw7OztPQUdHO0lBQ0gsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtRQUN0RCxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUMxRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUMzRCxNQUFNLGlCQUFpQixHQUNyQixLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUMxRCxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFeEUsT0FBTyxDQUNMLGNBQWM7WUFDZCxDQUFDLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQztZQUM3QixDQUFDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxDQUNyQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtRQUM1QyxNQUFNLGdCQUFnQixHQUFHLENBQUMsWUFBc0MsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwRSwyQkFBMkIsRUFBRSxPQUFDO2lCQUMzQixNQUFNLENBQUM7Z0JBQ04sa0JBQWtCLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUMxQyxDQUFDO2lCQUNELEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ04sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNULDBCQUEwQixFQUFFLE9BQUM7aUJBQzFCLE1BQU0sQ0FBQztnQkFDTixrQkFBa0IsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQzFDLENBQUM7aUJBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDTixHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1QsUUFBUSxFQUFFLE9BQUM7aUJBQ1IsTUFBTSxDQUFDO2dCQUNOLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUM7YUFDNUMsQ0FBQztpQkFDRCxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ1YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxlQUFlLEdBQUc7WUFDdEIsaUJBQWlCLEVBQUUsT0FBQztpQkFDakIsTUFBTSxDQUFDO2dCQUNOLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLE9BQU8sQ0FBQzthQUNoRCxDQUFDO2lCQUNELEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ04sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNULGFBQWEsRUFBRSxPQUFDO2lCQUNiLE1BQU0sQ0FBQztnQkFDTixrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7YUFDaEQsQ0FBQztpQkFDRCxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUNOLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDVixDQUFDO1FBRUYsTUFBTSxtQkFBbUIsR0FBRztZQUMxQixvQkFBb0IsRUFBRSxPQUFDO2lCQUNwQixNQUFNLENBQUM7Z0JBQ04sa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDO2FBQ2hELENBQUM7aUJBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDTixHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1QsaUJBQWlCLEVBQUUsT0FBQztpQkFDakIsTUFBTSxDQUFDO2dCQUNOLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLE9BQU8sQ0FBQzthQUNoRCxDQUFDO2lCQUNELEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ04sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNWLENBQUM7UUFFRixNQUFNLGVBQWUsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO1lBQy9CLEdBQUcsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUM7WUFDdkMsR0FBRyxlQUFlO1NBQ25CLENBQUMsQ0FBQztRQUNILE1BQU0sbUJBQW1CLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNuQyxHQUFHLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDO1lBQ3ZDLEdBQUcsbUJBQW1CO1NBQ3ZCLENBQUMsQ0FBQztRQUVILE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLENBQUMsd0JBQVUsRUFBRTtZQUN4RSxPQUFPLEVBQUUsT0FBTyxPQUFPLHFCQUFxQjtTQUM3QyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUEsc0JBQVEsRUFBeUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxRQUFRO1FBQ1IsT0FBTztLQUNSLENBQUM7QUFDSixDQUFDLENBQUM7QUFyS1csUUFBQSxXQUFXLGVBcUt0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7en0gZnJvbSAnem9kJztcbmltcG9ydCB7XG4gIEV4ZWN1dGVQbHVnaW4sXG4gIFBhcmFtZXRlck1ldGFkYXRhLFxuICBQbHVnaW5QYXJhbWV0ZXJzTWV0YWRhdGEsXG4gIFBsdWdpblBhcmFtcyxcbn0gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3R5cGVzJztcblxuaW1wb3J0IHt2YWxpZGF0ZSwgYWxsRGVmaW5lZH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3V0aWwvdmFsaWRhdGlvbnMnO1xuXG5pbXBvcnQge1NUUklOR1N9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5cbmNvbnN0IHtTQ0lfRU1CT0RJRURfRVJST1J9ID0gU1RSSU5HUztcblxuZXhwb3J0IGNvbnN0IFNjaUVtYm9kaWVkID0gKFxuICBwYXJhbWV0ZXJzTWV0YWRhdGE6IFBsdWdpblBhcmFtZXRlcnNNZXRhZGF0YVxuKTogRXhlY3V0ZVBsdWdpbiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgIGtpbmQ6ICdleGVjdXRlJyxcbiAgICBpbnB1dHM6IHtcbiAgICAgIC4uLih7XG4gICAgICAgICdkZXZpY2UvZW1pc3Npb25zLWVtYm9kaWVkJzoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAndG90YWwgZW1ib2RpZWQgZW1pc3Npb25zIG9mIHNvbWUgY29tcG9uZW50JyxcbiAgICAgICAgICB1bml0OiAnZ0NPMmUnLFxuICAgICAgICAgICdhZ2dyZWdhdGlvbi1tZXRob2QnOiAnc3VtJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ2RldmljZS9leHBlY3RlZC1saWZlc3Bhbic6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RvdGFsIEV4cGVjdGVkIExpZmVzcGFuIG9mIHRoZSBDb21wb25lbnQgaW4gU2Vjb25kcycsXG4gICAgICAgICAgdW5pdDogJ3NlY29uZHMnLFxuICAgICAgICAgICdhZ2dyZWdhdGlvbi1tZXRob2QnOiAnc3VtJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3Jlc291cmNlcy1yZXNlcnZlZCc6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ3Jlc291cmNlcyByZXNlcnZlZCBmb3IgYW4gYXBwbGljYXRpb24nLFxuICAgICAgICAgIHVuaXQ6ICdjb3VudCcsXG4gICAgICAgICAgJ2FnZ3JlZ2F0aW9uLW1ldGhvZCc6ICdub25lJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3Jlc291cmNlcy10b3RhbCc6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ3RvdGFsIHJlc291cmNlcyBhdmFpbGFibGUnLFxuICAgICAgICAgIHVuaXQ6ICdjb3VudCcsXG4gICAgICAgICAgJ2FnZ3JlZ2F0aW9uLW1ldGhvZCc6ICdub25lJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ZjcHVzLWFsbG9jYXRlZCc6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ251bWJlciBvZiB2Y3B1cyBhbGxvY2F0ZWQgdG8gcGFydGljdWxhciByZXNvdXJjZScsXG4gICAgICAgICAgdW5pdDogJ2NvdW50JyxcbiAgICAgICAgICAnYWdncmVnYXRpb24tbWV0aG9kJzogJ25vbmUnLFxuICAgICAgICB9LFxuICAgICAgICAndmNwdXMtdG90YWwnOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAndG90YWwgbnVtYmVyIG9mIHZjcHVzIGF2YWlsYWJsZSBvbiBhIHBhcnRpY3VsYXIgcmVzb3VyY2UnLFxuICAgICAgICAgIHVuaXQ6ICdjb3VudCcsXG4gICAgICAgICAgJ2FnZ3JlZ2F0aW9uLW1ldGhvZCc6ICdub25lJyxcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgUGFyYW1ldGVyTWV0YWRhdGEpLFxuICAgICAgLi4ucGFyYW1ldGVyc01ldGFkYXRhPy5pbnB1dHMsXG4gICAgfSxcbiAgICBvdXRwdXRzOiBwYXJhbWV0ZXJzTWV0YWRhdGE/Lm91dHB1dHMgfHwge1xuICAgICAgJ2NhcmJvbi1lbWJvZGllZCc6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdlbWJvZGllZCBlbWlzc2lvbnMgb2YgdGhlIGNvbXBvbmVudCcsXG4gICAgICAgIHVuaXQ6ICdnQ08yZScsXG4gICAgICAgICdhZ2dyZWdhdGlvbi1tZXRob2QnOiAnc3VtJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBNRVRSSUNTID0gW1xuICAgICdkZXZpY2UvZW1pc3Npb25zLWVtYm9kaWVkJyxcbiAgICAnZGV2aWNlL2V4cGVjdGVkLWxpZmVzcGFuJyxcbiAgICAncmVzb3VyY2VzLXJlc2VydmVkJyxcbiAgICAndmNwdXMtYWxsb2NhdGVkJyxcbiAgICAncmVzb3VyY2VzLXRvdGFsJyxcbiAgICAndmNwdXMtdG90YWwnLFxuICBdO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIEVtYm9kaWVkIGNhcmJvbiBmb3IgYSBsaXN0IG9mIGlucHV0cy5cbiAgICovXG4gIGNvbnN0IGV4ZWN1dGUgPSAoaW5wdXRzOiBQbHVnaW5QYXJhbXNbXSkgPT5cbiAgICBpbnB1dHMubWFwKGlucHV0ID0+IHtcbiAgICAgIGNvbnN0IHNhZmVJbnB1dCA9IHZhbGlkYXRlSW5wdXQoaW5wdXQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgJ2NhcmJvbi1lbWJvZGllZCc6IGNhbGN1bGF0ZUVtYm9kaWVkQ2FyYm9uKHNhZmVJbnB1dCksXG4gICAgICB9O1xuICAgIH0pO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIEVtYm9kaWVkIGNhcmJvbiBmb3IgdGhlIGlucHV0LlxuICAgKiBNID0gdG90YWxFbWlzc2lvbnMgKiAoZHVyYXRpb24vRXhwZWN0ZWRMaWZlc3BhbikgKiAocmVzb3VyY2VzUmVzZXJ2ZWQvdG90YWxSZXNvdXJjZXMpXG4gICAqL1xuICBjb25zdCBjYWxjdWxhdGVFbWJvZGllZENhcmJvbiA9IChpbnB1dDogUGx1Z2luUGFyYW1zKSA9PiB7XG4gICAgY29uc3QgdG90YWxFbWlzc2lvbnMgPSBpbnB1dFsnZGV2aWNlL2VtaXNzaW9ucy1lbWJvZGllZCddO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gaW5wdXRbJ2R1cmF0aW9uJ107XG4gICAgY29uc3QgZXhwZWN0ZWRMaWZlc3BhbiA9IGlucHV0WydkZXZpY2UvZXhwZWN0ZWQtbGlmZXNwYW4nXTtcbiAgICBjb25zdCByZXNvdXJjZXNSZXNlcnZlZCA9XG4gICAgICBpbnB1dFsndmNwdXMtYWxsb2NhdGVkJ10gfHwgaW5wdXRbJ3Jlc291cmNlcy1yZXNlcnZlZCddO1xuICAgIGNvbnN0IHRvdGFsUmVzb3VyY2VzID0gaW5wdXRbJ3ZjcHVzLXRvdGFsJ10gfHwgaW5wdXRbJ3Jlc291cmNlcy10b3RhbCddO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHRvdGFsRW1pc3Npb25zICpcbiAgICAgIChkdXJhdGlvbiAvIGV4cGVjdGVkTGlmZXNwYW4pICpcbiAgICAgIChyZXNvdXJjZXNSZXNlcnZlZCAvIHRvdGFsUmVzb3VyY2VzKVxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBmb3IgcmVxdWlyZWQgZmllbGRzIGluIGlucHV0LlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVJbnB1dCA9IChpbnB1dDogUGx1Z2luUGFyYW1zKSA9PiB7XG4gICAgY29uc3QgY29tbW9uU2NoZW1hUGFydCA9IChlcnJvck1lc3NhZ2U6ICh1bml0OiBzdHJpbmcpID0+IHN0cmluZykgPT4gKHtcbiAgICAgICdkZXZpY2UvZW1pc3Npb25zLWVtYm9kaWVkJzogelxuICAgICAgICAubnVtYmVyKHtcbiAgICAgICAgICBpbnZhbGlkX3R5cGVfZXJyb3I6IGVycm9yTWVzc2FnZSgnZ0NPMmUnKSxcbiAgICAgICAgfSlcbiAgICAgICAgLmd0ZSgwKVxuICAgICAgICAubWluKDApLFxuICAgICAgJ2RldmljZS9leHBlY3RlZC1saWZlc3Bhbic6IHpcbiAgICAgICAgLm51bWJlcih7XG4gICAgICAgICAgaW52YWxpZF90eXBlX2Vycm9yOiBlcnJvck1lc3NhZ2UoJ2dDTzJlJyksXG4gICAgICAgIH0pXG4gICAgICAgIC5ndGUoMClcbiAgICAgICAgLm1pbigwKSxcbiAgICAgIGR1cmF0aW9uOiB6XG4gICAgICAgIC5udW1iZXIoe1xuICAgICAgICAgIGludmFsaWRfdHlwZV9lcnJvcjogZXJyb3JNZXNzYWdlKCdzZWNvbmRzJyksXG4gICAgICAgIH0pXG4gICAgICAgIC5ndGUoMSksXG4gICAgfSk7XG5cbiAgICBjb25zdCB2Y3B1c1NjaGVtYVBhcnQgPSB7XG4gICAgICAndmNwdXMtYWxsb2NhdGVkJzogelxuICAgICAgICAubnVtYmVyKHtcbiAgICAgICAgICBpbnZhbGlkX3R5cGVfZXJyb3I6IFNDSV9FTUJPRElFRF9FUlJPUignY291bnQnKSxcbiAgICAgICAgfSlcbiAgICAgICAgLmd0ZSgwKVxuICAgICAgICAubWluKDApLFxuICAgICAgJ3ZjcHVzLXRvdGFsJzogelxuICAgICAgICAubnVtYmVyKHtcbiAgICAgICAgICBpbnZhbGlkX3R5cGVfZXJyb3I6IFNDSV9FTUJPRElFRF9FUlJPUignY291bnQnKSxcbiAgICAgICAgfSlcbiAgICAgICAgLmd0ZSgwKVxuICAgICAgICAubWluKDApLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNvdXJjZXNTY2hlbWFQYXJ0ID0ge1xuICAgICAgJ3Jlc291cmNlcy1yZXNlcnZlZCc6IHpcbiAgICAgICAgLm51bWJlcih7XG4gICAgICAgICAgaW52YWxpZF90eXBlX2Vycm9yOiBTQ0lfRU1CT0RJRURfRVJST1IoJ2NvdW50JyksXG4gICAgICAgIH0pXG4gICAgICAgIC5ndGUoMClcbiAgICAgICAgLm1pbigwKSxcbiAgICAgICdyZXNvdXJjZXMtdG90YWwnOiB6XG4gICAgICAgIC5udW1iZXIoe1xuICAgICAgICAgIGludmFsaWRfdHlwZV9lcnJvcjogU0NJX0VNQk9ESUVEX0VSUk9SKCdjb3VudCcpLFxuICAgICAgICB9KVxuICAgICAgICAuZ3RlKDApXG4gICAgICAgIC5taW4oMCksXG4gICAgfTtcblxuICAgIGNvbnN0IHNjaGVtYVdpdGhWY3B1cyA9IHoub2JqZWN0KHtcbiAgICAgIC4uLmNvbW1vblNjaGVtYVBhcnQoU0NJX0VNQk9ESUVEX0VSUk9SKSxcbiAgICAgIC4uLnZjcHVzU2NoZW1hUGFydCxcbiAgICB9KTtcbiAgICBjb25zdCBzY2hlbWFXaXRoUmVzb3VyY2VzID0gei5vYmplY3Qoe1xuICAgICAgLi4uY29tbW9uU2NoZW1hUGFydChTQ0lfRU1CT0RJRURfRVJST1IpLFxuICAgICAgLi4ucmVzb3VyY2VzU2NoZW1hUGFydCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYVdpdGhWY3B1cy5vcihzY2hlbWFXaXRoUmVzb3VyY2VzKS5yZWZpbmUoYWxsRGVmaW5lZCwge1xuICAgICAgbWVzc2FnZTogYEFsbCAke01FVFJJQ1N9IHNob3VsZCBiZSBwcmVzZW50LmAsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGU8ei5pbmZlcjx0eXBlb2Ygc2NoZW1hPj4oc2NoZW1hLCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBtZXRhZGF0YSxcbiAgICBleGVjdXRlLFxuICB9O1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Shell = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const js_yaml_1 = require("js-yaml");
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
const utils_1 = require("@grnsft/if-core/utils");
|
|
8
|
+
const validations_1 = require("../../../common/util/validations");
|
|
9
|
+
const { ProcessExecutionError } = utils_1.ERRORS;
|
|
10
|
+
const Shell = (globalConfig, parametersMetadata) => {
|
|
11
|
+
const metadata = {
|
|
12
|
+
kind: 'execute',
|
|
13
|
+
inputs: parametersMetadata?.inputs,
|
|
14
|
+
outputs: parametersMetadata?.outputs,
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Calculate the total emissions for a list of inputs.
|
|
18
|
+
*/
|
|
19
|
+
const execute = (inputs) => {
|
|
20
|
+
const inputWithConfig = Object.assign({}, inputs[0], validateConfig());
|
|
21
|
+
const command = inputWithConfig.command;
|
|
22
|
+
const inputAsString = (0, js_yaml_1.dump)(inputs, { indent: 2 });
|
|
23
|
+
const results = runModelInShell(inputAsString, command);
|
|
24
|
+
return results?.outputs?.flat();
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Checks for required fields in input.
|
|
28
|
+
*/
|
|
29
|
+
const validateConfig = () => {
|
|
30
|
+
const schema = zod_1.z.object({
|
|
31
|
+
command: zod_1.z.string(),
|
|
32
|
+
});
|
|
33
|
+
return (0, validations_1.validate)(schema, globalConfig);
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Runs the model in a shell. Spawns a child process to run an external IMP,
|
|
37
|
+
* an executable with a CLI exposing two methods: `--execute` and `--manifest`.
|
|
38
|
+
* The shell command then calls the `--command` method passing var manifest as the path to the desired manifest file.
|
|
39
|
+
*/
|
|
40
|
+
const runModelInShell = (input, command) => {
|
|
41
|
+
try {
|
|
42
|
+
const [executable, ...args] = command.split(' ');
|
|
43
|
+
const result = (0, child_process_1.spawnSync)(executable, args, {
|
|
44
|
+
input,
|
|
45
|
+
encoding: 'utf8',
|
|
46
|
+
});
|
|
47
|
+
const outputs = (0, js_yaml_1.loadAll)(result.stdout);
|
|
48
|
+
return { outputs };
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
throw new ProcessExecutionError(error.message);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
return {
|
|
55
|
+
metadata,
|
|
56
|
+
execute,
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
exports.Shell = Shell;
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL3NoZWxsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUEwRDtBQUUxRCxxQ0FBc0M7QUFDdEMsNkJBQXNCO0FBQ3RCLGlEQUE2QztBQVE3QyxrRUFBMEQ7QUFFMUQsTUFBTSxFQUFDLHFCQUFxQixFQUFDLEdBQUcsY0FBTSxDQUFDO0FBRWhDLE1BQU0sS0FBSyxHQUFHLENBQ25CLFlBQTBCLEVBQzFCLGtCQUE0QyxFQUM3QixFQUFFO0lBQ2pCLE1BQU0sUUFBUSxHQUFHO1FBQ2YsSUFBSSxFQUFFLFNBQVM7UUFDZixNQUFNLEVBQUUsa0JBQWtCLEVBQUUsTUFBTTtRQUNsQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsT0FBTztLQUNyQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQXNCLEVBQVMsRUFBRTtRQUNoRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUN2RSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDO1FBQ3hDLE1BQU0sYUFBYSxHQUFXLElBQUEsY0FBSSxFQUFDLE1BQU0sRUFBRSxFQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFeEQsT0FBTyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2xDLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxjQUFjLEdBQUcsR0FBRyxFQUFFO1FBQzFCLE1BQU0sTUFBTSxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7WUFDdEIsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7U0FDcEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFBLHNCQUFRLEVBQXlCLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFhLEVBQUUsT0FBZSxFQUFFLEVBQUU7UUFDekQsSUFBSTtZQUNGLE1BQU0sQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWpELE1BQU0sTUFBTSxHQUE2QixJQUFBLHlCQUFTLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRTtnQkFDbkUsS0FBSztnQkFDTCxRQUFRLEVBQUUsTUFBTTthQUNqQixDQUFDLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFBLGlCQUFPLEVBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXZDLE9BQU8sRUFBQyxPQUFPLEVBQUMsQ0FBQztTQUNsQjtRQUFDLE9BQU8sS0FBVSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsUUFBUTtRQUNSLE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBMURXLFFBQUEsS0FBSyxTQTBEaEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3NwYXduU3luYywgU3Bhd25TeW5jUmV0dXJuc30gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5cbmltcG9ydCB7bG9hZEFsbCwgZHVtcH0gZnJvbSAnanMteWFtbCc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQge0VSUk9SU30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3V0aWxzJztcbmltcG9ydCB7XG4gIEV4ZWN1dGVQbHVnaW4sXG4gIFBsdWdpblBhcmFtcyxcbiAgQ29uZmlnUGFyYW1zLFxuICBQbHVnaW5QYXJhbWV0ZXJzTWV0YWRhdGEsXG59IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5cbmltcG9ydCB7dmFsaWRhdGV9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi91dGlsL3ZhbGlkYXRpb25zJztcblxuY29uc3Qge1Byb2Nlc3NFeGVjdXRpb25FcnJvcn0gPSBFUlJPUlM7XG5cbmV4cG9ydCBjb25zdCBTaGVsbCA9IChcbiAgZ2xvYmFsQ29uZmlnOiBDb25maWdQYXJhbXMsXG4gIHBhcmFtZXRlcnNNZXRhZGF0YTogUGx1Z2luUGFyYW1ldGVyc01ldGFkYXRhXG4pOiBFeGVjdXRlUGx1Z2luID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAga2luZDogJ2V4ZWN1dGUnLFxuICAgIGlucHV0czogcGFyYW1ldGVyc01ldGFkYXRhPy5pbnB1dHMsXG4gICAgb3V0cHV0czogcGFyYW1ldGVyc01ldGFkYXRhPy5vdXRwdXRzLFxuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHRvdGFsIGVtaXNzaW9ucyBmb3IgYSBsaXN0IG9mIGlucHV0cy5cbiAgICovXG4gIGNvbnN0IGV4ZWN1dGUgPSAoaW5wdXRzOiBQbHVnaW5QYXJhbXNbXSk6IGFueVtdID0+IHtcbiAgICBjb25zdCBpbnB1dFdpdGhDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBpbnB1dHNbMF0sIHZhbGlkYXRlQ29uZmlnKCkpO1xuICAgIGNvbnN0IGNvbW1hbmQgPSBpbnB1dFdpdGhDb25maWcuY29tbWFuZDtcbiAgICBjb25zdCBpbnB1dEFzU3RyaW5nOiBzdHJpbmcgPSBkdW1wKGlucHV0cywge2luZGVudDogMn0pO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBydW5Nb2RlbEluU2hlbGwoaW5wdXRBc1N0cmluZywgY29tbWFuZCk7XG5cbiAgICByZXR1cm4gcmVzdWx0cz8ub3V0cHV0cz8uZmxhdCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgZm9yIHJlcXVpcmVkIGZpZWxkcyBpbiBpbnB1dC5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlQ29uZmlnID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAgIGNvbW1hbmQ6IHouc3RyaW5nKCksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGU8ei5pbmZlcjx0eXBlb2Ygc2NoZW1hPj4oc2NoZW1hLCBnbG9iYWxDb25maWcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBtb2RlbCBpbiBhIHNoZWxsLiBTcGF3bnMgYSBjaGlsZCBwcm9jZXNzIHRvIHJ1biBhbiBleHRlcm5hbCBJTVAsXG4gICAqIGFuIGV4ZWN1dGFibGUgd2l0aCBhIENMSSBleHBvc2luZyB0d28gbWV0aG9kczogYC0tZXhlY3V0ZWAgYW5kIGAtLW1hbmlmZXN0YC5cbiAgICogVGhlIHNoZWxsIGNvbW1hbmQgdGhlbiBjYWxscyB0aGUgYC0tY29tbWFuZGAgbWV0aG9kIHBhc3NpbmcgdmFyIG1hbmlmZXN0IGFzIHRoZSBwYXRoIHRvIHRoZSBkZXNpcmVkIG1hbmlmZXN0IGZpbGUuXG4gICAqL1xuICBjb25zdCBydW5Nb2RlbEluU2hlbGwgPSAoaW5wdXQ6IHN0cmluZywgY29tbWFuZDogc3RyaW5nKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFtleGVjdXRhYmxlLCAuLi5hcmdzXSA9IGNvbW1hbmQuc3BsaXQoJyAnKTtcblxuICAgICAgY29uc3QgcmVzdWx0OiBTcGF3blN5bmNSZXR1cm5zPHN0cmluZz4gPSBzcGF3blN5bmMoZXhlY3V0YWJsZSwgYXJncywge1xuICAgICAgICBpbnB1dCxcbiAgICAgICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IGxvYWRBbGwocmVzdWx0LnN0ZG91dCk7XG5cbiAgICAgIHJldHVybiB7b3V0cHV0c307XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IFByb2Nlc3NFeGVjdXRpb25FcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBtZXRhZGF0YSxcbiAgICBleGVjdXRlLFxuICB9O1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Subtract = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const validations_1 = require("../../../common/util/validations");
|
|
6
|
+
const Subtract = (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
|
+
* Subtract items from inputParams[1..n] from inputParams[0] and write the result in a new param outputParam.
|
|
36
|
+
*/
|
|
37
|
+
const execute = (inputs) => {
|
|
38
|
+
const { 'input-parameters': inputParameters, 'output-parameter': outputParameter, } = validateGlobalConfig();
|
|
39
|
+
return inputs.map(input => {
|
|
40
|
+
validateSingleInput(input, inputParameters);
|
|
41
|
+
return {
|
|
42
|
+
...input,
|
|
43
|
+
[outputParameter]: calculateDiff(input, inputParameters),
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Calculates the diff between the 1st item in the inputs nad the rest of the items
|
|
49
|
+
*/
|
|
50
|
+
const calculateDiff = (input, inputParameters) => {
|
|
51
|
+
const [firstItem, ...restItems] = inputParameters;
|
|
52
|
+
return restItems.reduce((accumulator, metricToSubtract) => accumulator - input[metricToSubtract], input[firstItem] // Starting accumulator with the value of the first item
|
|
53
|
+
);
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
metadata,
|
|
57
|
+
execute,
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
exports.Subtract = Subtract;
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL3N1YnRyYWN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUFzQjtBQVF0QixrRUFBMEQ7QUFFbkQsTUFBTSxRQUFRLEdBQUcsQ0FDdEIsWUFBNEIsRUFDNUIsa0JBQTRDLEVBQzdCLEVBQUU7SUFDakIsTUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxNQUFNO1FBQ2xDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPO0tBQ3JDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxFQUFFO1FBQ2hDLE1BQU0sa0JBQWtCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNsQyxrQkFBa0IsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2QyxrQkFBa0IsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN0QyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUEsc0JBQVEsRUFDYixrQkFBa0IsRUFDbEIsWUFBWSxDQUNiLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sbUJBQW1CLEdBQUcsQ0FDMUIsS0FBbUIsRUFDbkIsZUFBeUIsRUFDekIsRUFBRTtRQUNGLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQ3RDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2IsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUxQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFDRCxFQUE0QixDQUM3QixDQUFDO1FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUUxRCxJQUFBLHNCQUFRLEVBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFdEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBc0IsRUFBa0IsRUFBRTtRQUN6RCxNQUFNLEVBQ0osa0JBQWtCLEVBQUUsZUFBZSxFQUNuQyxrQkFBa0IsRUFBRSxlQUFlLEdBQ3BDLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUUzQixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDeEIsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBRTVDLE9BQU87Z0JBQ0wsR0FBRyxLQUFLO2dCQUNSLENBQUMsZUFBZSxDQUFDLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUM7YUFDekQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQW1CLEVBQUUsZUFBeUIsRUFBRSxFQUFFO1FBQ3ZFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxTQUFTLENBQUMsR0FBRyxlQUFlLENBQUM7UUFFbEQsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUNyQixDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUN4RSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsd0RBQXdEO1NBQzFFLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsUUFBUTtRQUNSLE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBbkZXLFFBQUEsUUFBUSxZQW1GbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQge1xuICBFeGVjdXRlUGx1Z2luLFxuICBQbHVnaW5QYXJhbWV0ZXJzTWV0YWRhdGEsXG4gIFBsdWdpblBhcmFtcyxcbiAgU3VidHJhY3RDb25maWcsXG59IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5cbmltcG9ydCB7dmFsaWRhdGV9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi91dGlsL3ZhbGlkYXRpb25zJztcblxuZXhwb3J0IGNvbnN0IFN1YnRyYWN0ID0gKFxuICBnbG9iYWxDb25maWc6IFN1YnRyYWN0Q29uZmlnLFxuICBwYXJhbWV0ZXJzTWV0YWRhdGE6IFBsdWdpblBhcmFtZXRlcnNNZXRhZGF0YVxuKTogRXhlY3V0ZVBsdWdpbiA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgIGtpbmQ6ICdleGVjdXRlJyxcbiAgICBpbnB1dHM6IHBhcmFtZXRlcnNNZXRhZGF0YT8uaW5wdXRzLFxuICAgIG91dHB1dHM6IHBhcmFtZXRlcnNNZXRhZGF0YT8ub3V0cHV0cyxcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGdsb2JhbCBjb25maWcgdmFsdWUgYXJlIHZhbGlkLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVHbG9iYWxDb25maWcgPSAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICAgICAgJ2lucHV0LXBhcmFtZXRlcnMnOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgICAgJ291dHB1dC1wYXJhbWV0ZXInOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBnbG9iYWxDb25maWdTY2hlbWE+PihcbiAgICAgIGdsb2JhbENvbmZpZ1NjaGVtYSxcbiAgICAgIGdsb2JhbENvbmZpZ1xuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBmb3IgcmVxdWlyZWQgZmllbGRzIGluIGlucHV0LlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVTaW5nbGVJbnB1dCA9IChcbiAgICBpbnB1dDogUGx1Z2luUGFyYW1zLFxuICAgIGlucHV0UGFyYW1ldGVyczogc3RyaW5nW11cbiAgKSA9PiB7XG4gICAgY29uc3QgaW5wdXREYXRhID0gaW5wdXRQYXJhbWV0ZXJzLnJlZHVjZShcbiAgICAgIChhY2MsIHBhcmFtKSA9PiB7XG4gICAgICAgIGFjY1twYXJhbV0gPSBpbnB1dFtwYXJhbV07XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+XG4gICAgKTtcblxuICAgIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6Lm51bWJlcigpKTtcblxuICAgIHZhbGlkYXRlKHZhbGlkYXRpb25TY2hlbWEsIGlucHV0RGF0YSk7XG5cbiAgICByZXR1cm4gaW5wdXQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIFN1YnRyYWN0IGl0ZW1zIGZyb20gaW5wdXRQYXJhbXNbMS4ubl0gZnJvbSBpbnB1dFBhcmFtc1swXSBhbmQgd3JpdGUgdGhlIHJlc3VsdCBpbiBhIG5ldyBwYXJhbSBvdXRwdXRQYXJhbS5cbiAgICovXG4gIGNvbnN0IGV4ZWN1dGUgPSAoaW5wdXRzOiBQbHVnaW5QYXJhbXNbXSk6IFBsdWdpblBhcmFtc1tdID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAnaW5wdXQtcGFyYW1ldGVycyc6IGlucHV0UGFyYW1ldGVycyxcbiAgICAgICdvdXRwdXQtcGFyYW1ldGVyJzogb3V0cHV0UGFyYW1ldGVyLFxuICAgIH0gPSB2YWxpZGF0ZUdsb2JhbENvbmZpZygpO1xuXG4gICAgcmV0dXJuIGlucHV0cy5tYXAoaW5wdXQgPT4ge1xuICAgICAgdmFsaWRhdGVTaW5nbGVJbnB1dChpbnB1dCwgaW5wdXRQYXJhbWV0ZXJzKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIFtvdXRwdXRQYXJhbWV0ZXJdOiBjYWxjdWxhdGVEaWZmKGlucHV0LCBpbnB1dFBhcmFtZXRlcnMpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgZGlmZiBiZXR3ZWVuIHRoZSAxc3QgaXRlbSBpbiB0aGUgaW5wdXRzIG5hZCB0aGUgcmVzdCBvZiB0aGUgaXRlbXNcbiAgICovXG4gIGNvbnN0IGNhbGN1bGF0ZURpZmYgPSAoaW5wdXQ6IFBsdWdpblBhcmFtcywgaW5wdXRQYXJhbWV0ZXJzOiBzdHJpbmdbXSkgPT4ge1xuICAgIGNvbnN0IFtmaXJzdEl0ZW0sIC4uLnJlc3RJdGVtc10gPSBpbnB1dFBhcmFtZXRlcnM7XG5cbiAgICByZXR1cm4gcmVzdEl0ZW1zLnJlZHVjZShcbiAgICAgIChhY2N1bXVsYXRvciwgbWV0cmljVG9TdWJ0cmFjdCkgPT4gYWNjdW11bGF0b3IgLSBpbnB1dFttZXRyaWNUb1N1YnRyYWN0XSxcbiAgICAgIGlucHV0W2ZpcnN0SXRlbV0gLy8gU3RhcnRpbmcgYWNjdW11bGF0b3Igd2l0aCB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGl0ZW1cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbWV0YWRhdGEsXG4gICAgZXhlY3V0ZSxcbiAgfTtcbn07XG4iXX0=
|