@grnsft/if 0.4.0-beta.0 → 0.4.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/CONTRIBUTING.md +3 -0
- package/README.md +6 -0
- package/build/builtins/coefficient/index.d.ts +3 -0
- package/build/builtins/coefficient/index.js +51 -0
- package/build/builtins/coefficient/types.d.ts +5 -0
- package/build/builtins/coefficient/types.js +3 -0
- package/build/builtins/csv-lookup/index.d.ts +2 -0
- package/build/builtins/csv-lookup/index.js +181 -0
- package/build/builtins/divide/index.d.ts +2 -0
- package/build/builtins/divide/index.js +67 -0
- package/build/builtins/exponent/index.d.ts +3 -0
- package/build/builtins/exponent/index.js +72 -0
- package/build/builtins/exponent/types.d.ts +5 -0
- package/build/builtins/exponent/types.js +3 -0
- package/build/builtins/export-csv-raw.js +4 -1
- package/build/builtins/export-csv.js +4 -1
- package/build/builtins/export-log.js +4 -2
- package/build/builtins/export-yaml.js +4 -1
- package/build/builtins/index.d.ts +13 -0
- package/build/builtins/index.js +28 -2
- package/build/builtins/interpolation/index.d.ts +2 -0
- package/build/builtins/interpolation/index.js +146 -0
- package/build/builtins/interpolation/types.d.ts +5 -0
- package/build/builtins/interpolation/types.js +10 -0
- package/build/builtins/mock-observations/helpers/common-generator.d.ts +3 -0
- package/build/builtins/mock-observations/helpers/common-generator.js +32 -0
- package/build/builtins/mock-observations/helpers/rand-int-generator.d.ts +3 -0
- package/build/builtins/mock-observations/helpers/rand-int-generator.js +58 -0
- package/build/builtins/mock-observations/index.d.ts +3 -0
- package/build/builtins/mock-observations/index.js +116 -0
- package/build/builtins/mock-observations/interfaces/index.d.ts +6 -0
- package/build/builtins/mock-observations/interfaces/index.js +3 -0
- package/build/builtins/mock-observations/types.d.ts +13 -0
- package/build/builtins/mock-observations/types.js +3 -0
- package/build/builtins/multiply/index.d.ts +3 -0
- package/build/builtins/multiply/index.js +63 -0
- package/build/builtins/multiply/types.d.ts +4 -0
- package/build/builtins/multiply/types.js +3 -0
- package/build/builtins/regex/index.d.ts +3 -0
- package/build/builtins/regex/index.js +78 -0
- package/build/builtins/sci/config.d.ts +1 -0
- package/build/builtins/sci/config.js +44 -0
- package/build/builtins/sci/index.d.ts +3 -0
- package/build/builtins/sci/index.js +69 -0
- package/build/builtins/sci-embodied/index.d.ts +2 -0
- package/build/builtins/sci-embodied/index.js +115 -0
- package/build/builtins/shell/index.d.ts +3 -0
- package/build/builtins/shell/index.js +58 -0
- package/build/builtins/subtract/index.d.ts +3 -0
- package/build/builtins/subtract/index.js +75 -0
- package/build/builtins/subtract/types.d.ts +4 -0
- package/build/builtins/subtract/types.js +3 -0
- package/build/builtins/sum/index.d.ts +3 -0
- package/build/builtins/sum/index.js +61 -0
- package/build/builtins/sum/types.d.ts +4 -0
- package/build/builtins/sum/types.js +3 -0
- package/build/config/config.d.ts +8 -2
- package/build/config/config.js +34 -1
- package/build/config/strings.d.ts +22 -0
- package/build/config/strings.js +23 -1
- package/build/diff.d.ts +2 -0
- package/build/diff.js +46 -0
- package/build/index.js +8 -4
- package/build/lib/aggregate.js +5 -1
- package/build/lib/compare.d.ts +10 -0
- package/build/lib/compare.js +56 -0
- package/build/lib/compute.js +9 -1
- package/build/lib/environment.js +9 -3
- package/build/lib/exhaust.js +3 -2
- package/build/lib/initialize.js +5 -2
- package/build/lib/load.d.ts +48 -0
- package/build/lib/load.js +49 -2
- package/build/lib/parameterize.js +8 -4
- package/build/types/common.d.ts +4 -0
- package/build/types/common.js +3 -0
- package/build/types/helpers.d.ts +4 -0
- package/build/types/helpers.js +3 -0
- package/build/types/interface.d.ts +2 -1
- package/build/types/interface.js +1 -1
- package/build/types/lib/compare.d.ts +7 -0
- package/build/types/lib/compare.js +3 -0
- package/build/types/process-args.d.ts +7 -1
- package/build/types/process-args.js +1 -1
- package/build/types/util/args.d.ts +5 -0
- package/build/types/util/args.js +3 -0
- package/build/util/args.d.ts +7 -2
- package/build/util/args.js +49 -11
- package/build/util/debug-logger.d.ts +4 -0
- package/build/util/debug-logger.js +117 -0
- package/build/util/errors.d.ts +1 -1
- package/build/util/errors.js +6 -1
- package/build/util/helpers.d.ts +23 -0
- package/build/util/helpers.js +116 -2
- package/build/util/log-memoize.d.ts +1 -1
- package/build/util/log-memoize.js +1 -1
- package/build/util/validations.d.ts +59 -51
- package/build/util/validations.js +49 -18
- package/github-processes.md +39 -0
- package/package.json +1 -1
- package/.env +0 -5
- package/coverage/clover.xml +0 -1590
- package/coverage/coverage-final.json +0 -50
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/builtins/coefficient/index.html +0 -116
- package/coverage/lcov-report/builtins/coefficient/index.ts.html +0 -295
- package/coverage/lcov-report/builtins/csv-lookup/index.html +0 -116
- package/coverage/lcov-report/builtins/csv-lookup/index.ts.html +0 -832
- package/coverage/lcov-report/builtins/divide/index.html +0 -116
- package/coverage/lcov-report/builtins/divide/index.ts.html +0 -361
- package/coverage/lcov-report/builtins/exponent/index.html +0 -116
- package/coverage/lcov-report/builtins/exponent/index.ts.html +0 -355
- package/coverage/lcov-report/builtins/export-csv-raw.ts.html +0 -553
- package/coverage/lcov-report/builtins/export-csv.ts.html +0 -433
- package/coverage/lcov-report/builtins/export-log.ts.html +0 -145
- package/coverage/lcov-report/builtins/export-yaml.ts.html +0 -184
- package/coverage/lcov-report/builtins/group-by.ts.html +0 -364
- package/coverage/lcov-report/builtins/index.html +0 -206
- package/coverage/lcov-report/builtins/index.ts.html +0 -130
- package/coverage/lcov-report/builtins/interpolation/index.html +0 -131
- package/coverage/lcov-report/builtins/interpolation/index.ts.html +0 -670
- package/coverage/lcov-report/builtins/interpolation/types.ts.html +0 -100
- package/coverage/lcov-report/builtins/mock-observations/helpers/common-generator.ts.html +0 -181
- package/coverage/lcov-report/builtins/mock-observations/helpers/index.html +0 -131
- package/coverage/lcov-report/builtins/mock-observations/helpers/rand-int-generator.ts.html +0 -295
- package/coverage/lcov-report/builtins/mock-observations/index.html +0 -116
- package/coverage/lcov-report/builtins/mock-observations/index.ts.html +0 -613
- package/coverage/lcov-report/builtins/multiply/index.html +0 -116
- package/coverage/lcov-report/builtins/multiply/index.ts.html +0 -337
- package/coverage/lcov-report/builtins/regex/index.html +0 -116
- package/coverage/lcov-report/builtins/regex/index.ts.html +0 -379
- package/coverage/lcov-report/builtins/sci/config.ts.html +0 -205
- package/coverage/lcov-report/builtins/sci/index.html +0 -116
- package/coverage/lcov-report/builtins/sci/index.ts.html +0 -331
- package/coverage/lcov-report/builtins/sci-embodied/index.html +0 -116
- package/coverage/lcov-report/builtins/sci-embodied/index.ts.html +0 -481
- package/coverage/lcov-report/builtins/shell/index.html +0 -116
- package/coverage/lcov-report/builtins/shell/index.ts.html +0 -283
- package/coverage/lcov-report/builtins/subtract/index.html +0 -116
- package/coverage/lcov-report/builtins/subtract/index.ts.html +0 -373
- package/coverage/lcov-report/builtins/sum/index.html +0 -116
- package/coverage/lcov-report/builtins/sum/index.ts.html +0 -340
- package/coverage/lcov-report/builtins/time-sync.ts.html +0 -1459
- package/coverage/lcov-report/config/config.ts.html +0 -334
- package/coverage/lcov-report/config/index.html +0 -161
- package/coverage/lcov-report/config/index.ts.html +0 -94
- package/coverage/lcov-report/config/params.ts.html +0 -697
- package/coverage/lcov-report/config/strings.ts.html +0 -415
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -386
- package/coverage/lcov-report/lib/aggregate.ts.html +0 -331
- package/coverage/lcov-report/lib/compare.ts.html +0 -283
- package/coverage/lcov-report/lib/compute.ts.html +0 -391
- package/coverage/lcov-report/lib/environment.ts.html +0 -343
- package/coverage/lcov-report/lib/exhaust.ts.html +0 -283
- package/coverage/lcov-report/lib/index.html +0 -221
- package/coverage/lcov-report/lib/initialize.ts.html +0 -388
- package/coverage/lcov-report/lib/load.ts.html +0 -268
- package/coverage/lcov-report/lib/parameterize.ts.html +0 -283
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -196
- package/coverage/lcov-report/types/aggregation.ts.html +0 -94
- package/coverage/lcov-report/types/index.html +0 -146
- package/coverage/lcov-report/types/interface.ts.html +0 -181
- package/coverage/lcov-report/types/parameters.ts.html +0 -106
- package/coverage/lcov-report/util/aggregation-helper.ts.html +0 -286
- package/coverage/lcov-report/util/args.ts.html +0 -508
- package/coverage/lcov-report/util/errors.ts.html +0 -232
- package/coverage/lcov-report/util/helpers.ts.html +0 -613
- package/coverage/lcov-report/util/index.html +0 -266
- package/coverage/lcov-report/util/json.ts.html +0 -115
- package/coverage/lcov-report/util/log-memoize.ts.html +0 -145
- package/coverage/lcov-report/util/logger.ts.html +0 -151
- package/coverage/lcov-report/util/os-checker.ts.html +0 -421
- package/coverage/lcov-report/util/plugin-storage.ts.html +0 -199
- package/coverage/lcov-report/util/validations.ts.html +0 -526
- package/coverage/lcov-report/util/yaml.ts.html +0 -193
- package/coverage/lcov.info +0 -2811
- package/src/__tests__/integration/manifest/sci-e.yaml +0 -23
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Multiply = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const helpers_1 = require("../../util/helpers");
|
|
6
|
+
const errors_1 = require("../../util/errors");
|
|
7
|
+
const validations_1 = require("../../util/validations");
|
|
8
|
+
const { InputValidationError } = errors_1.ERRORS;
|
|
9
|
+
const Multiply = (globalConfig) => {
|
|
10
|
+
const errorBuilder = (0, helpers_1.buildErrorMessage)(exports.Multiply.name);
|
|
11
|
+
const metadata = {
|
|
12
|
+
kind: 'execute',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Checks global config value are valid.
|
|
16
|
+
*/
|
|
17
|
+
const validateGlobalConfig = () => {
|
|
18
|
+
const globalConfigSchema = zod_1.z.object({
|
|
19
|
+
'input-parameters': zod_1.z.array(zod_1.z.string()),
|
|
20
|
+
'output-parameter': zod_1.z.string().min(1),
|
|
21
|
+
});
|
|
22
|
+
return (0, validations_1.validate)(globalConfigSchema, globalConfig);
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Checks for required fields in input.
|
|
26
|
+
*/
|
|
27
|
+
const validateSingleInput = (input, inputParameters) => {
|
|
28
|
+
inputParameters.forEach(metricToMultiply => {
|
|
29
|
+
if (input[metricToMultiply] === undefined ||
|
|
30
|
+
isNaN(input[metricToMultiply])) {
|
|
31
|
+
throw new InputValidationError(errorBuilder({
|
|
32
|
+
message: `${metricToMultiply} is missing from the input array`,
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
return input;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Calculate the product of each input parameter.
|
|
40
|
+
*/
|
|
41
|
+
const execute = (inputs) => {
|
|
42
|
+
const safeGlobalConfig = validateGlobalConfig();
|
|
43
|
+
const inputParameters = safeGlobalConfig['input-parameters'];
|
|
44
|
+
const outputParameter = safeGlobalConfig['output-parameter'];
|
|
45
|
+
return inputs.map(input => {
|
|
46
|
+
const safeInput = validateSingleInput(input, inputParameters);
|
|
47
|
+
return {
|
|
48
|
+
...input,
|
|
49
|
+
[outputParameter]: calculateProduct(safeInput, inputParameters),
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Calculates the product of the energy components.
|
|
55
|
+
*/
|
|
56
|
+
const calculateProduct = (input, inputParameters) => inputParameters.reduce((accumulator, metricToMultiply) => accumulator * input[metricToMultiply], 1);
|
|
57
|
+
return {
|
|
58
|
+
metadata,
|
|
59
|
+
execute,
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
exports.Multiply = Multiply;
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvbXVsdGlwbHkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXNCO0FBRXRCLGdEQUFxRDtBQUNyRCw4Q0FBeUM7QUFDekMsd0RBQWdEO0FBS2hELE1BQU0sRUFBQyxvQkFBb0IsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUUvQixNQUFNLFFBQVEsR0FBRyxDQUFDLFlBQTRCLEVBQWlCLEVBQUU7SUFDdEUsTUFBTSxZQUFZLEdBQUcsSUFBQSwyQkFBaUIsRUFBQyxnQkFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELE1BQU0sUUFBUSxHQUFHO1FBQ2YsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLEVBQUU7UUFDaEMsTUFBTSxrQkFBa0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO1lBQ2xDLGtCQUFrQixFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZDLGtCQUFrQixFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3RDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBQSxzQkFBUSxFQUNiLGtCQUFrQixFQUNsQixZQUFZLENBQ2IsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUMxQixLQUFtQixFQUNuQixlQUF5QixFQUN6QixFQUFFO1FBQ0YsZUFBZSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ3pDLElBQ0UsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQUssU0FBUztnQkFDckMsS0FBSyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQzlCO2dCQUNBLE1BQU0sSUFBSSxvQkFBb0IsQ0FDNUIsWUFBWSxDQUFDO29CQUNYLE9BQU8sRUFBRSxHQUFHLGdCQUFnQixrQ0FBa0M7aUJBQy9ELENBQUMsQ0FDSCxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQXNCLEVBQWtCLEVBQUU7UUFDekQsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2hELE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0QsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUU3RCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDeEIsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBRTlELE9BQU87Z0JBQ0wsR0FBRyxLQUFLO2dCQUNSLENBQUMsZUFBZSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQzthQUNoRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFtQixFQUFFLGVBQXlCLEVBQUUsRUFBRSxDQUMxRSxlQUFlLENBQUMsTUFBTSxDQUNwQixDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUN4RSxDQUFDLENBQ0YsQ0FBQztJQUVKLE9BQU87UUFDTCxRQUFRO1FBQ1IsT0FBTztLQUNSLENBQUM7QUFDSixDQUFDLENBQUM7QUEzRVcsUUFBQSxRQUFRLFlBMkVuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtidWlsZEVycm9yTWVzc2FnZX0gZnJvbSAnLi4vLi4vdXRpbC9oZWxwZXJzJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICcuLi8uLi91dGlsL2Vycm9ycyc7XG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRpb25zJztcblxuaW1wb3J0IHtFeGVjdXRlUGx1Z2luLCBQbHVnaW5QYXJhbXN9IGZyb20gJy4uLy4uL3R5cGVzL2ludGVyZmFjZSc7XG5pbXBvcnQge011bHRpcGx5Q29uZmlnfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3Qge0lucHV0VmFsaWRhdGlvbkVycm9yfSA9IEVSUk9SUztcblxuZXhwb3J0IGNvbnN0IE11bHRpcGx5ID0gKGdsb2JhbENvbmZpZzogTXVsdGlwbHlDb25maWcpOiBFeGVjdXRlUGx1Z2luID0+IHtcbiAgY29uc3QgZXJyb3JCdWlsZGVyID0gYnVpbGRFcnJvck1lc3NhZ2UoTXVsdGlwbHkubmFtZSk7XG4gIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgIGtpbmQ6ICdleGVjdXRlJyxcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGdsb2JhbCBjb25maWcgdmFsdWUgYXJlIHZhbGlkLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVHbG9iYWxDb25maWcgPSAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICAgICAgJ2lucHV0LXBhcmFtZXRlcnMnOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgICAgJ291dHB1dC1wYXJhbWV0ZXInOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBnbG9iYWxDb25maWdTY2hlbWE+PihcbiAgICAgIGdsb2JhbENvbmZpZ1NjaGVtYSxcbiAgICAgIGdsb2JhbENvbmZpZ1xuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBmb3IgcmVxdWlyZWQgZmllbGRzIGluIGlucHV0LlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVTaW5nbGVJbnB1dCA9IChcbiAgICBpbnB1dDogUGx1Z2luUGFyYW1zLFxuICAgIGlucHV0UGFyYW1ldGVyczogc3RyaW5nW11cbiAgKSA9PiB7XG4gICAgaW5wdXRQYXJhbWV0ZXJzLmZvckVhY2gobWV0cmljVG9NdWx0aXBseSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGlucHV0W21ldHJpY1RvTXVsdGlwbHldID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgaXNOYU4oaW5wdXRbbWV0cmljVG9NdWx0aXBseV0pXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IElucHV0VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGVycm9yQnVpbGRlcih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgJHttZXRyaWNUb011bHRpcGx5fSBpcyBtaXNzaW5nIGZyb20gdGhlIGlucHV0IGFycmF5YCxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlucHV0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHByb2R1Y3Qgb2YgZWFjaCBpbnB1dCBwYXJhbWV0ZXIuXG4gICAqL1xuICBjb25zdCBleGVjdXRlID0gKGlucHV0czogUGx1Z2luUGFyYW1zW10pOiBQbHVnaW5QYXJhbXNbXSA9PiB7XG4gICAgY29uc3Qgc2FmZUdsb2JhbENvbmZpZyA9IHZhbGlkYXRlR2xvYmFsQ29uZmlnKCk7XG4gICAgY29uc3QgaW5wdXRQYXJhbWV0ZXJzID0gc2FmZUdsb2JhbENvbmZpZ1snaW5wdXQtcGFyYW1ldGVycyddO1xuICAgIGNvbnN0IG91dHB1dFBhcmFtZXRlciA9IHNhZmVHbG9iYWxDb25maWdbJ291dHB1dC1wYXJhbWV0ZXInXTtcblxuICAgIHJldHVybiBpbnB1dHMubWFwKGlucHV0ID0+IHtcbiAgICAgIGNvbnN0IHNhZmVJbnB1dCA9IHZhbGlkYXRlU2luZ2xlSW5wdXQoaW5wdXQsIGlucHV0UGFyYW1ldGVycyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlucHV0LFxuICAgICAgICBbb3V0cHV0UGFyYW1ldGVyXTogY2FsY3VsYXRlUHJvZHVjdChzYWZlSW5wdXQsIGlucHV0UGFyYW1ldGVycyksXG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBwcm9kdWN0IG9mIHRoZSBlbmVyZ3kgY29tcG9uZW50cy5cbiAgICovXG4gIGNvbnN0IGNhbGN1bGF0ZVByb2R1Y3QgPSAoaW5wdXQ6IFBsdWdpblBhcmFtcywgaW5wdXRQYXJhbWV0ZXJzOiBzdHJpbmdbXSkgPT5cbiAgICBpbnB1dFBhcmFtZXRlcnMucmVkdWNlKFxuICAgICAgKGFjY3VtdWxhdG9yLCBtZXRyaWNUb011bHRpcGx5KSA9PiBhY2N1bXVsYXRvciAqIGlucHV0W21ldHJpY1RvTXVsdGlwbHldLFxuICAgICAgMVxuICAgICk7XG5cbiAgcmV0dXJuIHtcbiAgICBtZXRhZGF0YSxcbiAgICBleGVjdXRlLFxuICB9O1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvbXVsdGlwbHkvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIE11bHRpcGx5Q29uZmlnID0ge1xuICAnaW5wdXQtcGFyYW1ldGVycyc6IHN0cmluZ1tdO1xuICAnb3V0cHV0LXBhcmFtZXRlcic6IHN0cmluZztcbn07XG4iXX0=
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Regex = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const helpers_1 = require("../../util/helpers");
|
|
6
|
+
const errors_1 = require("../../util/errors");
|
|
7
|
+
const validations_1 = require("../../util/validations");
|
|
8
|
+
const { InputValidationError, ConfigValidationError } = errors_1.ERRORS;
|
|
9
|
+
const Regex = (globalConfig) => {
|
|
10
|
+
const errorBuilder = (0, helpers_1.buildErrorMessage)(exports.Regex.name);
|
|
11
|
+
const metadata = {
|
|
12
|
+
kind: 'execute',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Checks global config value are valid.
|
|
16
|
+
*/
|
|
17
|
+
const validateGlobalConfig = () => {
|
|
18
|
+
if (!globalConfig) {
|
|
19
|
+
throw new ConfigValidationError(errorBuilder({ message: 'Configuration data is missing' }));
|
|
20
|
+
}
|
|
21
|
+
const schema = zod_1.z.object({
|
|
22
|
+
parameter: zod_1.z.string().min(1),
|
|
23
|
+
match: zod_1.z.string().min(1),
|
|
24
|
+
output: zod_1.z.string(),
|
|
25
|
+
});
|
|
26
|
+
return (0, validations_1.validate)(schema, globalConfig);
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Checks for required fields in input.
|
|
30
|
+
*/
|
|
31
|
+
const validateSingleInput = (input, parameter) => {
|
|
32
|
+
if (!input[parameter]) {
|
|
33
|
+
throw new InputValidationError(errorBuilder({
|
|
34
|
+
message: `\`${parameter}\` is missing from the input`,
|
|
35
|
+
}));
|
|
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 matchedItem = input[parameter].match(regex);
|
|
65
|
+
if (!matchedItem || !matchedItem[0]) {
|
|
66
|
+
throw new InputValidationError(errorBuilder({
|
|
67
|
+
message: `\`${input[parameter]}\` does not match the ${match} regex expression`,
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
return matchedItem[0];
|
|
71
|
+
};
|
|
72
|
+
return {
|
|
73
|
+
metadata,
|
|
74
|
+
execute,
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
exports.Regex = Regex;
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvcmVnZXgvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXNCO0FBRXRCLGdEQUFxRDtBQUNyRCw4Q0FBeUM7QUFDekMsd0RBQWdEO0FBS2hELE1BQU0sRUFBQyxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUV0RCxNQUFNLEtBQUssR0FBRyxDQUFDLFlBQTBCLEVBQWlCLEVBQUU7SUFDakUsTUFBTSxZQUFZLEdBQUcsSUFBQSwyQkFBaUIsRUFBQyxhQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsTUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJLEVBQUUsU0FBUztLQUNoQixDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsRUFBRTtRQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxxQkFBcUIsQ0FDN0IsWUFBWSxDQUFDLEVBQUMsT0FBTyxFQUFFLCtCQUErQixFQUFDLENBQUMsQ0FDekQsQ0FBQztTQUNIO1FBQ0QsTUFBTSxNQUFNLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN0QixTQUFTLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUIsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1NBQ25CLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBQSxzQkFBUSxFQUF5QixNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDaEUsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBbUIsRUFBRSxTQUFpQixFQUFFLEVBQUU7UUFDckUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNyQixNQUFNLElBQUksb0JBQW9CLENBQzVCLFlBQVksQ0FBQztnQkFDWCxPQUFPLEVBQUUsS0FBSyxTQUFTLDhCQUE4QjthQUN0RCxDQUFDLENBQ0gsQ0FBQztTQUNIO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBc0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztRQUNoRCxNQUFNLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsZ0JBQWdCLENBQUM7UUFFL0QsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQzdCLEVBQUUsRUFDRixLQUFLLEVBQ0wsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUN0QyxDQUFDO1lBRUYsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsQ0FBQyxNQUFNLENBQUMsRUFBRSxlQUFlLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUM7YUFDdkQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLGVBQWUsR0FBRyxDQUN0QixLQUFtQixFQUNuQixTQUFpQixFQUNqQixLQUFhLEVBQ2IsRUFBRTtRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pELEtBQUssSUFBSSxHQUFHLENBQUM7U0FDZDtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxELElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbkMsTUFBTSxJQUFJLG9CQUFvQixDQUM1QixZQUFZLENBQUM7Z0JBQ1gsT0FBTyxFQUFFLEtBQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsS0FBSyxtQkFBbUI7YUFDaEYsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUVELE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxRQUFRO1FBQ1IsT0FBTztLQUNSLENBQUM7QUFDSixDQUFDLENBQUM7QUE5RlcsUUFBQSxLQUFLLFNBOEZoQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtidWlsZEVycm9yTWVzc2FnZX0gZnJvbSAnLi4vLi4vdXRpbC9oZWxwZXJzJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICcuLi8uLi91dGlsL2Vycm9ycyc7XG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRpb25zJztcblxuaW1wb3J0IHtFeGVjdXRlUGx1Z2luLCBQbHVnaW5QYXJhbXN9IGZyb20gJy4uLy4uL3R5cGVzL2ludGVyZmFjZSc7XG5pbXBvcnQge0NvbmZpZ1BhcmFtc30gZnJvbSAnLi4vLi4vdHlwZXMvY29tbW9uJztcblxuY29uc3Qge0lucHV0VmFsaWRhdGlvbkVycm9yLCBDb25maWdWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG5leHBvcnQgY29uc3QgUmVnZXggPSAoZ2xvYmFsQ29uZmlnOiBDb25maWdQYXJhbXMpOiBFeGVjdXRlUGx1Z2luID0+IHtcbiAgY29uc3QgZXJyb3JCdWlsZGVyID0gYnVpbGRFcnJvck1lc3NhZ2UoUmVnZXgubmFtZSk7XG4gIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgIGtpbmQ6ICdleGVjdXRlJyxcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGdsb2JhbCBjb25maWcgdmFsdWUgYXJlIHZhbGlkLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVHbG9iYWxDb25maWcgPSAoKSA9PiB7XG4gICAgaWYgKCFnbG9iYWxDb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBDb25maWdWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGVycm9yQnVpbGRlcih7bWVzc2FnZTogJ0NvbmZpZ3VyYXRpb24gZGF0YSBpcyBtaXNzaW5nJ30pXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgICBwYXJhbWV0ZXI6IHouc3RyaW5nKCkubWluKDEpLFxuICAgICAgbWF0Y2g6IHouc3RyaW5nKCkubWluKDEpLFxuICAgICAgb3V0cHV0OiB6LnN0cmluZygpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIHNjaGVtYT4+KHNjaGVtYSwgZ2xvYmFsQ29uZmlnKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGZvciByZXF1aXJlZCBmaWVsZHMgaW4gaW5wdXQuXG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZVNpbmdsZUlucHV0ID0gKGlucHV0OiBQbHVnaW5QYXJhbXMsIHBhcmFtZXRlcjogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFpbnB1dFtwYXJhbWV0ZXJdKSB7XG4gICAgICB0aHJvdyBuZXcgSW5wdXRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGVycm9yQnVpbGRlcih7XG4gICAgICAgICAgbWVzc2FnZTogYFxcYCR7cGFyYW1ldGVyfVxcYCBpcyBtaXNzaW5nIGZyb20gdGhlIGlucHV0YCxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlucHV0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgcmVnZXggb2YgdGhlIGdpdmVuIHBhcmFtZXRlci5cbiAgICovXG4gIGNvbnN0IGV4ZWN1dGUgPSAoaW5wdXRzOiBQbHVnaW5QYXJhbXNbXSkgPT4ge1xuICAgIGNvbnN0IHNhZmVHbG9iYWxDb25maWcgPSB2YWxpZGF0ZUdsb2JhbENvbmZpZygpO1xuICAgIGNvbnN0IHtwYXJhbWV0ZXI6IHBhcmFtZXRlciwgbWF0Y2gsIG91dHB1dH0gPSBzYWZlR2xvYmFsQ29uZmlnO1xuXG4gICAgcmV0dXJuIGlucHV0cy5tYXAoaW5wdXQgPT4ge1xuICAgICAgY29uc3Qgc2FmZUlucHV0ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIGlucHV0LFxuICAgICAgICB2YWxpZGF0ZVNpbmdsZUlucHV0KGlucHV0LCBwYXJhbWV0ZXIpXG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgW291dHB1dF06IGV4dHJhY3RNYXRjaGluZyhzYWZlSW5wdXQsIHBhcmFtZXRlciwgbWF0Y2gpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogRXh0cmFjdHMgYSBzdWJzdHJpbmcgZnJvbSB0aGUgZ2l2ZW4gaW5wdXQgcGFyYW1ldGVyIHRoYXQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uXG4gICAqL1xuICBjb25zdCBleHRyYWN0TWF0Y2hpbmcgPSAoXG4gICAgaW5wdXQ6IFBsdWdpblBhcmFtcyxcbiAgICBwYXJhbWV0ZXI6IHN0cmluZyxcbiAgICBtYXRjaDogc3RyaW5nXG4gICkgPT4ge1xuICAgIGlmICghbWF0Y2guc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBtYXRjaCA9ICcvJyArIG1hdGNoO1xuICAgIH1cblxuICAgIGlmICghbWF0Y2guZW5kc1dpdGgoJy9nJykgJiYgIW1hdGNoLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIG1hdGNoICs9ICcvJztcbiAgICB9XG5cbiAgICBjb25zdCByZWdleCA9IGV2YWwobWF0Y2gpO1xuICAgIGNvbnN0IG1hdGNoZWRJdGVtID0gaW5wdXRbcGFyYW1ldGVyXS5tYXRjaChyZWdleCk7XG5cbiAgICBpZiAoIW1hdGNoZWRJdGVtIHx8ICFtYXRjaGVkSXRlbVswXSkge1xuICAgICAgdGhyb3cgbmV3IElucHV0VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBlcnJvckJ1aWxkZXIoe1xuICAgICAgICAgIG1lc3NhZ2U6IGBcXGAke2lucHV0W3BhcmFtZXRlcl19XFxgIGRvZXMgbm90IG1hdGNoIHRoZSAke21hdGNofSByZWdleCBleHByZXNzaW9uYCxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZWRJdGVtWzBdO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbWV0YWRhdGEsXG4gICAgZXhlY3V0ZSxcbiAgfTtcbn07XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const TIME_UNITS_IN_SECONDS: Record<string, number>;
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2J1aWx0aW5zL3NjaS9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxxQkFBcUIsR0FBMkI7SUFDM0QsQ0FBQyxFQUFFLENBQUM7SUFDSixNQUFNLEVBQUUsQ0FBQztJQUNULEdBQUcsRUFBRSxDQUFDO0lBQ04sSUFBSSxFQUFFLENBQUM7SUFDUCxPQUFPLEVBQUUsQ0FBQztJQUNWLEdBQUcsRUFBRSxFQUFFO0lBQ1AsSUFBSSxFQUFFLEVBQUU7SUFDUixNQUFNLEVBQUUsRUFBRTtJQUNWLE9BQU8sRUFBRSxFQUFFO0lBQ1gsQ0FBQyxFQUFFLElBQUk7SUFDUCxFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsR0FBRyxFQUFFLElBQUk7SUFDVCxJQUFJLEVBQUUsSUFBSTtJQUNWLEtBQUssRUFBRSxJQUFJO0lBQ1gsQ0FBQyxFQUFFLEtBQUs7SUFDUixFQUFFLEVBQUUsS0FBSztJQUNULEdBQUcsRUFBRSxLQUFLO0lBQ1YsSUFBSSxFQUFFLEtBQUs7SUFDWCxDQUFDLEVBQUUsTUFBTTtJQUNULEVBQUUsRUFBRSxNQUFNO0lBQ1YsRUFBRSxFQUFFLE1BQU07SUFDVixHQUFHLEVBQUUsTUFBTTtJQUNYLElBQUksRUFBRSxNQUFNO0lBQ1osS0FBSyxFQUFFLE1BQU07SUFDYixDQUFDLEVBQUUsT0FBTztJQUNWLElBQUksRUFBRSxPQUFPO0lBQ2IsR0FBRyxFQUFFLE9BQU87SUFDWixLQUFLLEVBQUUsT0FBTztJQUNkLElBQUksRUFBRSxPQUFPO0lBQ2IsS0FBSyxFQUFFLE9BQU87SUFDZCxNQUFNLEVBQUUsT0FBTztJQUNmLENBQUMsRUFBRSxRQUFRO0lBQ1gsRUFBRSxFQUFFLFFBQVE7SUFDWixFQUFFLEVBQUUsUUFBUTtJQUNaLEdBQUcsRUFBRSxRQUFRO0lBQ2IsSUFBSSxFQUFFLFFBQVE7SUFDZCxLQUFLLEVBQUUsUUFBUTtDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfSU5fU0VDT05EUzogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHtcbiAgczogMSxcbiAgc2Vjb25kOiAxLFxuICBzZWM6IDEsXG4gIHNlY3M6IDEsXG4gIHNlY29uZHM6IDEsXG4gIG1pbjogNjAsXG4gIG1pbnM6IDYwLFxuICBtaW51dGU6IDYwLFxuICBtaW51dGVzOiA2MCxcbiAgaDogMzYwMCxcbiAgaHM6IDM2MDAsXG4gIGhyOiAzNjAwLFxuICBocnM6IDM2MDAsXG4gIGhvdXI6IDM2MDAsXG4gIGhvdXJzOiAzNjAwLFxuICBkOiA4NjQwMCxcbiAgZHM6IDg2NDAwLFxuICBkYXk6IDg2NDAwLFxuICBkYXlzOiA4NjQwMCxcbiAgdzogNjA0ODAwLFxuICB3czogNjA0ODAwLFxuICB3azogNjA0ODAwLFxuICB3a3M6IDYwNDgwMCxcbiAgd2VlazogNjA0ODAwLFxuICB3ZWVrczogNjA0ODAwLFxuICBtOiAyNDE5MjAwLFxuICBtbnRoOiAyNDE5MjAwLFxuICBtdGg6IDI0MTkyMDAsXG4gIG1udGhzOiAyNDE5MjAwLFxuICBtdGhzOiAyNDE5MjAwLFxuICBtb250aDogMjQxOTIwMCxcbiAgbW9udGhzOiAyNDE5MjAwLFxuICB5OiAzMTUzNjAwMCxcbiAgeXM6IDMxNTM2MDAwLFxuICB5cjogMzE1MzYwMDAsXG4gIHlyczogMzE1MzYwMDAsXG4gIHllYXI6IDMxNTM2MDAwLFxuICB5ZWFyczogMzE1MzYwMDAsXG59O1xuIl19
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Sci = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const validations_1 = require("../../util/validations");
|
|
6
|
+
const helpers_1 = require("../../util/helpers");
|
|
7
|
+
const errors_1 = require("../../util/errors");
|
|
8
|
+
const { InputValidationError } = errors_1.ERRORS;
|
|
9
|
+
const Sci = (globalConfig) => {
|
|
10
|
+
const errorBuilder = (0, helpers_1.buildErrorMessage)(exports.Sci.name);
|
|
11
|
+
const metadata = {
|
|
12
|
+
kind: 'execute',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Validates node and gloabl configs.
|
|
16
|
+
*/
|
|
17
|
+
const validateConfig = (config) => {
|
|
18
|
+
const errorMessage = '`functional-unit` should be provided in your global config';
|
|
19
|
+
const schema = zod_1.z
|
|
20
|
+
.object({
|
|
21
|
+
'functional-unit': zod_1.z.string(),
|
|
22
|
+
})
|
|
23
|
+
.refine(data => data['functional-unit'], {
|
|
24
|
+
message: errorMessage,
|
|
25
|
+
});
|
|
26
|
+
return (0, validations_1.validate)(schema, config);
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Calculate the total emissions for a list of inputs.
|
|
30
|
+
*/
|
|
31
|
+
const execute = (inputs) => {
|
|
32
|
+
return inputs.map(input => {
|
|
33
|
+
const safeInput = validateInput(input);
|
|
34
|
+
const sci = safeInput['carbon'] > 0
|
|
35
|
+
? safeInput['carbon'] / input[globalConfig['functional-unit']]
|
|
36
|
+
: 0;
|
|
37
|
+
return {
|
|
38
|
+
...input,
|
|
39
|
+
sci,
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Checks for fields in input.
|
|
45
|
+
*/
|
|
46
|
+
const validateInput = (input) => {
|
|
47
|
+
const message = `'carbon' and ${globalConfig['functional-unit']} should be present in your input data.`;
|
|
48
|
+
const validatedConfig = validateConfig(globalConfig);
|
|
49
|
+
if (!(validatedConfig['functional-unit'] in input &&
|
|
50
|
+
input[validatedConfig['functional-unit']] > 0)) {
|
|
51
|
+
throw new InputValidationError(errorBuilder({
|
|
52
|
+
message: 'functional-unit value is missing from input data or it is not a positive integer',
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
const schema = zod_1.z
|
|
56
|
+
.object({
|
|
57
|
+
carbon: zod_1.z.number().gte(0),
|
|
58
|
+
duration: zod_1.z.number().gte(1),
|
|
59
|
+
})
|
|
60
|
+
.refine(validations_1.allDefined, { message });
|
|
61
|
+
return (0, validations_1.validate)(schema, input);
|
|
62
|
+
};
|
|
63
|
+
return {
|
|
64
|
+
metadata,
|
|
65
|
+
execute,
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
exports.Sci = Sci;
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvc2NpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUFzQjtBQUt0Qix3REFBNEQ7QUFDNUQsZ0RBQXFEO0FBQ3JELDhDQUF5QztBQUV6QyxNQUFNLEVBQUMsb0JBQW9CLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFFL0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxZQUEwQixFQUFpQixFQUFFO0lBQy9ELE1BQU0sWUFBWSxHQUFHLElBQUEsMkJBQWlCLEVBQUMsV0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELE1BQU0sUUFBUSxHQUFHO1FBQ2YsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUFxQixFQUFFLEVBQUU7UUFDL0MsTUFBTSxZQUFZLEdBQ2hCLDREQUE0RCxDQUFDO1FBRS9ELE1BQU0sTUFBTSxHQUFHLE9BQUM7YUFDYixNQUFNLENBQUM7WUFDTixpQkFBaUIsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1NBQzlCLENBQUM7YUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUN2QyxPQUFPLEVBQUUsWUFBWTtTQUN0QixDQUFDLENBQUM7UUFFTCxPQUFPLElBQUEsc0JBQVEsRUFBeUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFzQixFQUFrQixFQUFFO1FBQ3pELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsTUFBTSxHQUFHLEdBQ1AsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7Z0JBQ3JCLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM5RCxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1IsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsR0FBRzthQUNKLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7UUFDNUMsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyx3Q0FBd0MsQ0FBQztRQUV4RyxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFckQsSUFDRSxDQUFDLENBQ0MsZUFBZSxDQUFDLGlCQUFpQixDQUFDLElBQUksS0FBSztZQUMzQyxLQUFLLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQzlDLEVBQ0Q7WUFDQSxNQUFNLElBQUksb0JBQW9CLENBQzVCLFlBQVksQ0FBQztnQkFDWCxPQUFPLEVBQ0wsa0ZBQWtGO2FBQ3JGLENBQUMsQ0FDSCxDQUFDO1NBQ0g7UUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFDO2FBQ2IsTUFBTSxDQUFDO1lBQ04sTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1QixDQUFDO2FBQ0QsTUFBTSxDQUFDLHdCQUFVLEVBQUUsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBRWpDLE9BQU8sSUFBQSxzQkFBUSxFQUF5QixNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekQsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLFFBQVE7UUFDUixPQUFPO0tBQ1IsQ0FBQztBQUNKLENBQUMsQ0FBQztBQTdFVyxRQUFBLEdBQUcsT0E2RWQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RXhlY3V0ZVBsdWdpbiwgUGx1Z2luUGFyYW1zfSBmcm9tICcuLi8uLi90eXBlcy9pbnRlcmZhY2UnO1xuaW1wb3J0IHtDb25maWdQYXJhbXN9IGZyb20gJy4uLy4uL3R5cGVzL2NvbW1vbic7XG5cbmltcG9ydCB7dmFsaWRhdGUsIGFsbERlZmluZWR9IGZyb20gJy4uLy4uL3V0aWwvdmFsaWRhdGlvbnMnO1xuaW1wb3J0IHtidWlsZEVycm9yTWVzc2FnZX0gZnJvbSAnLi4vLi4vdXRpbC9oZWxwZXJzJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICcuLi8uLi91dGlsL2Vycm9ycyc7XG5cbmNvbnN0IHtJbnB1dFZhbGlkYXRpb25FcnJvcn0gPSBFUlJPUlM7XG5cbmV4cG9ydCBjb25zdCBTY2kgPSAoZ2xvYmFsQ29uZmlnOiBDb25maWdQYXJhbXMpOiBFeGVjdXRlUGx1Z2luID0+IHtcbiAgY29uc3QgZXJyb3JCdWlsZGVyID0gYnVpbGRFcnJvck1lc3NhZ2UoU2NpLm5hbWUpO1xuICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICBraW5kOiAnZXhlY3V0ZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBub2RlIGFuZCBnbG9hYmwgY29uZmlncy5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlQ29uZmlnID0gKGNvbmZpZz86IENvbmZpZ1BhcmFtcykgPT4ge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAnYGZ1bmN0aW9uYWwtdW5pdGAgc2hvdWxkIGJlIHByb3ZpZGVkIGluIHlvdXIgZ2xvYmFsIGNvbmZpZyc7XG5cbiAgICBjb25zdCBzY2hlbWEgPSB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgJ2Z1bmN0aW9uYWwtdW5pdCc6IHouc3RyaW5nKCksXG4gICAgICB9KVxuICAgICAgLnJlZmluZShkYXRhID0+IGRhdGFbJ2Z1bmN0aW9uYWwtdW5pdCddLCB7XG4gICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIHNjaGVtYT4+KHNjaGVtYSwgY29uZmlnKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSB0b3RhbCBlbWlzc2lvbnMgZm9yIGEgbGlzdCBvZiBpbnB1dHMuXG4gICAqL1xuICBjb25zdCBleGVjdXRlID0gKGlucHV0czogUGx1Z2luUGFyYW1zW10pOiBQbHVnaW5QYXJhbXNbXSA9PiB7XG4gICAgcmV0dXJuIGlucHV0cy5tYXAoaW5wdXQgPT4ge1xuICAgICAgY29uc3Qgc2FmZUlucHV0ID0gdmFsaWRhdGVJbnB1dChpbnB1dCk7XG4gICAgICBjb25zdCBzY2kgPVxuICAgICAgICBzYWZlSW5wdXRbJ2NhcmJvbiddID4gMFxuICAgICAgICAgID8gc2FmZUlucHV0WydjYXJib24nXSAvIGlucHV0W2dsb2JhbENvbmZpZ1snZnVuY3Rpb25hbC11bml0J11dXG4gICAgICAgICAgOiAwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIHNjaSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBmb3IgZmllbGRzIGluIGlucHV0LlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVJbnB1dCA9IChpbnB1dDogUGx1Z2luUGFyYW1zKSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGAnY2FyYm9uJyBhbmQgJHtnbG9iYWxDb25maWdbJ2Z1bmN0aW9uYWwtdW5pdCddfSBzaG91bGQgYmUgcHJlc2VudCBpbiB5b3VyIGlucHV0IGRhdGEuYDtcblxuICAgIGNvbnN0IHZhbGlkYXRlZENvbmZpZyA9IHZhbGlkYXRlQ29uZmlnKGdsb2JhbENvbmZpZyk7XG5cbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICB2YWxpZGF0ZWRDb25maWdbJ2Z1bmN0aW9uYWwtdW5pdCddIGluIGlucHV0ICYmXG4gICAgICAgIGlucHV0W3ZhbGlkYXRlZENvbmZpZ1snZnVuY3Rpb25hbC11bml0J11dID4gMFxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IElucHV0VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBlcnJvckJ1aWxkZXIoe1xuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAnZnVuY3Rpb25hbC11bml0IHZhbHVlIGlzIG1pc3NpbmcgZnJvbSBpbnB1dCBkYXRhIG9yIGl0IGlzIG5vdCBhIHBvc2l0aXZlIGludGVnZXInLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlbWEgPSB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgY2FyYm9uOiB6Lm51bWJlcigpLmd0ZSgwKSxcbiAgICAgICAgZHVyYXRpb246IHoubnVtYmVyKCkuZ3RlKDEpLFxuICAgICAgfSlcbiAgICAgIC5yZWZpbmUoYWxsRGVmaW5lZCwge21lc3NhZ2V9KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBzY2hlbWE+PihzY2hlbWEsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG1ldGFkYXRhLFxuICAgIGV4ZWN1dGUsXG4gIH07XG59O1xuIl19
|
|
@@ -0,0 +1,115 @@
|
|
|
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("../../util/validations");
|
|
6
|
+
const SciEmbodied = () => {
|
|
7
|
+
const metadata = {
|
|
8
|
+
kind: 'execute',
|
|
9
|
+
};
|
|
10
|
+
const METRICS = [
|
|
11
|
+
'device/emissions-embodied',
|
|
12
|
+
'device/expected-lifespan',
|
|
13
|
+
'resources-reserved',
|
|
14
|
+
'vcpus-allocated',
|
|
15
|
+
'resources-total',
|
|
16
|
+
'vcpus-total',
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* Calculate the Embodied carbon for a list of inputs.
|
|
20
|
+
*/
|
|
21
|
+
const execute = (inputs) => {
|
|
22
|
+
return inputs.map(input => {
|
|
23
|
+
const safeInput = validateInput(input);
|
|
24
|
+
return {
|
|
25
|
+
...input,
|
|
26
|
+
'carbon-embodied': calculateEmbodiedCarbon(safeInput),
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Calculate the Embodied carbon for the input.
|
|
32
|
+
* M = totalEmissions * (duration/ExpectedLifespan) * (resourcesReserved/totalResources)
|
|
33
|
+
*/
|
|
34
|
+
const calculateEmbodiedCarbon = (input) => {
|
|
35
|
+
const totalEmissions = input['device/emissions-embodied'];
|
|
36
|
+
const duration = input['duration'];
|
|
37
|
+
const expectedLifespan = input['device/expected-lifespan'];
|
|
38
|
+
const resourcesReserved = input['vcpus-allocated'] || input['resources-reserved'];
|
|
39
|
+
const totalResources = input['vcpus-total'] || input['resources-total'];
|
|
40
|
+
return (totalEmissions *
|
|
41
|
+
(duration / expectedLifespan) *
|
|
42
|
+
(resourcesReserved / totalResources));
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Checks for required fields in input.
|
|
46
|
+
*/
|
|
47
|
+
const validateInput = (input) => {
|
|
48
|
+
const errorMessage = (unit) => `not a valid number in input. Please provide it as \`${unit}\``;
|
|
49
|
+
const commonSchemaPart = (errorMessage) => ({
|
|
50
|
+
'device/emissions-embodied': zod_1.z
|
|
51
|
+
.number({
|
|
52
|
+
invalid_type_error: errorMessage('gCO2e'),
|
|
53
|
+
})
|
|
54
|
+
.gte(0)
|
|
55
|
+
.min(0),
|
|
56
|
+
'device/expected-lifespan': zod_1.z
|
|
57
|
+
.number({
|
|
58
|
+
invalid_type_error: errorMessage('gCO2e'),
|
|
59
|
+
})
|
|
60
|
+
.gte(0)
|
|
61
|
+
.min(0),
|
|
62
|
+
duration: zod_1.z
|
|
63
|
+
.number({
|
|
64
|
+
invalid_type_error: errorMessage('seconds'),
|
|
65
|
+
})
|
|
66
|
+
.gte(1),
|
|
67
|
+
});
|
|
68
|
+
const vcpusSchemaPart = {
|
|
69
|
+
'vcpus-allocated': zod_1.z
|
|
70
|
+
.number({
|
|
71
|
+
invalid_type_error: errorMessage('count'),
|
|
72
|
+
})
|
|
73
|
+
.gte(0)
|
|
74
|
+
.min(0),
|
|
75
|
+
'vcpus-total': zod_1.z
|
|
76
|
+
.number({
|
|
77
|
+
invalid_type_error: errorMessage('count'),
|
|
78
|
+
})
|
|
79
|
+
.gte(0)
|
|
80
|
+
.min(0),
|
|
81
|
+
};
|
|
82
|
+
const resourcesSchemaPart = {
|
|
83
|
+
'resources-reserved': zod_1.z
|
|
84
|
+
.number({
|
|
85
|
+
invalid_type_error: errorMessage('count'),
|
|
86
|
+
})
|
|
87
|
+
.gte(0)
|
|
88
|
+
.min(0),
|
|
89
|
+
'resources-total': zod_1.z
|
|
90
|
+
.number({
|
|
91
|
+
invalid_type_error: errorMessage('count'),
|
|
92
|
+
})
|
|
93
|
+
.gte(0)
|
|
94
|
+
.min(0),
|
|
95
|
+
};
|
|
96
|
+
const schemaWithVcpus = zod_1.z.object({
|
|
97
|
+
...commonSchemaPart(errorMessage),
|
|
98
|
+
...vcpusSchemaPart,
|
|
99
|
+
});
|
|
100
|
+
const schemaWithResources = zod_1.z.object({
|
|
101
|
+
...commonSchemaPart(errorMessage),
|
|
102
|
+
...resourcesSchemaPart,
|
|
103
|
+
});
|
|
104
|
+
const schema = schemaWithVcpus.or(schemaWithResources).refine(validations_1.allDefined, {
|
|
105
|
+
message: `All ${METRICS} should be present.`,
|
|
106
|
+
});
|
|
107
|
+
return (0, validations_1.validate)(schema, input);
|
|
108
|
+
};
|
|
109
|
+
return {
|
|
110
|
+
metadata,
|
|
111
|
+
execute,
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
exports.SciEmbodied = SciEmbodied;
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvc2NpLWVtYm9kaWVkL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUFzQjtBQUl0Qix3REFBNEQ7QUFFckQsTUFBTSxXQUFXLEdBQUcsR0FBa0IsRUFBRTtJQUM3QyxNQUFNLFFBQVEsR0FBRztRQUNmLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUM7SUFFRixNQUFNLE9BQU8sR0FBRztRQUNkLDJCQUEyQjtRQUMzQiwwQkFBMEI7UUFDMUIsb0JBQW9CO1FBQ3BCLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsYUFBYTtLQUNkLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBc0IsRUFBRSxFQUFFO1FBQ3pDLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFdkMsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsaUJBQWlCLEVBQUUsdUJBQXVCLENBQUMsU0FBUyxDQUFDO2FBQ3RELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNILE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7UUFDdEQsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDMUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDM0QsTUFBTSxpQkFBaUIsR0FDckIsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDMUQsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRXhFLE9BQU8sQ0FDTCxjQUFjO1lBQ2QsQ0FBQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUM7WUFDN0IsQ0FBQyxpQkFBaUIsR0FBRyxjQUFjLENBQUMsQ0FDckMsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7UUFDNUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUNwQyx1REFBdUQsSUFBSSxJQUFJLENBQUM7UUFFbEUsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFlBQXNDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEUsMkJBQTJCLEVBQUUsT0FBQztpQkFDM0IsTUFBTSxDQUFDO2dCQUNOLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDMUMsQ0FBQztpQkFDRCxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUNOLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDVCwwQkFBMEIsRUFBRSxPQUFDO2lCQUMxQixNQUFNLENBQUM7Z0JBQ04sa0JBQWtCLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUMxQyxDQUFDO2lCQUNELEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ04sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNULFFBQVEsRUFBRSxPQUFDO2lCQUNSLE1BQU0sQ0FBQztnQkFDTixrQkFBa0IsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDO2FBQzVDLENBQUM7aUJBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNWLENBQUMsQ0FBQztRQUVILE1BQU0sZUFBZSxHQUFHO1lBQ3RCLGlCQUFpQixFQUFFLE9BQUM7aUJBQ2pCLE1BQU0sQ0FBQztnQkFDTixrQkFBa0IsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQzFDLENBQUM7aUJBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDTixHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1QsYUFBYSxFQUFFLE9BQUM7aUJBQ2IsTUFBTSxDQUFDO2dCQUNOLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDMUMsQ0FBQztpQkFDRCxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUNOLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDVixDQUFDO1FBRUYsTUFBTSxtQkFBbUIsR0FBRztZQUMxQixvQkFBb0IsRUFBRSxPQUFDO2lCQUNwQixNQUFNLENBQUM7Z0JBQ04sa0JBQWtCLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUMxQyxDQUFDO2lCQUNELEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ04sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNULGlCQUFpQixFQUFFLE9BQUM7aUJBQ2pCLE1BQU0sQ0FBQztnQkFDTixrQkFBa0IsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQzFDLENBQUM7aUJBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDTixHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ1YsQ0FBQztRQUVGLE1BQU0sZUFBZSxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7WUFDL0IsR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7WUFDakMsR0FBRyxlQUFlO1NBQ25CLENBQUMsQ0FBQztRQUNILE1BQU0sbUJBQW1CLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNuQyxHQUFHLGdCQUFnQixDQUFDLFlBQVksQ0FBQztZQUNqQyxHQUFHLG1CQUFtQjtTQUN2QixDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxDQUFDLHdCQUFVLEVBQUU7WUFDeEUsT0FBTyxFQUFFLE9BQU8sT0FBTyxxQkFBcUI7U0FDN0MsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFBLHNCQUFRLEVBQXlCLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsUUFBUTtRQUNSLE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBNUhXLFFBQUEsV0FBVyxlQTRIdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RXhlY3V0ZVBsdWdpbiwgUGx1Z2luUGFyYW1zfSBmcm9tICcuLi8uLi90eXBlcy9pbnRlcmZhY2UnO1xuXG5pbXBvcnQge3ZhbGlkYXRlLCBhbGxEZWZpbmVkfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRpb25zJztcblxuZXhwb3J0IGNvbnN0IFNjaUVtYm9kaWVkID0gKCk6IEV4ZWN1dGVQbHVnaW4gPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICBraW5kOiAnZXhlY3V0ZScsXG4gIH07XG5cbiAgY29uc3QgTUVUUklDUyA9IFtcbiAgICAnZGV2aWNlL2VtaXNzaW9ucy1lbWJvZGllZCcsXG4gICAgJ2RldmljZS9leHBlY3RlZC1saWZlc3BhbicsXG4gICAgJ3Jlc291cmNlcy1yZXNlcnZlZCcsXG4gICAgJ3ZjcHVzLWFsbG9jYXRlZCcsXG4gICAgJ3Jlc291cmNlcy10b3RhbCcsXG4gICAgJ3ZjcHVzLXRvdGFsJyxcbiAgXTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBFbWJvZGllZCBjYXJib24gZm9yIGEgbGlzdCBvZiBpbnB1dHMuXG4gICAqL1xuICBjb25zdCBleGVjdXRlID0gKGlucHV0czogUGx1Z2luUGFyYW1zW10pID0+IHtcbiAgICByZXR1cm4gaW5wdXRzLm1hcChpbnB1dCA9PiB7XG4gICAgICBjb25zdCBzYWZlSW5wdXQgPSB2YWxpZGF0ZUlucHV0KGlucHV0KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgICdjYXJib24tZW1ib2RpZWQnOiBjYWxjdWxhdGVFbWJvZGllZENhcmJvbihzYWZlSW5wdXQpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBFbWJvZGllZCBjYXJib24gZm9yIHRoZSBpbnB1dC5cbiAgICogTSA9IHRvdGFsRW1pc3Npb25zICogKGR1cmF0aW9uL0V4cGVjdGVkTGlmZXNwYW4pICogKHJlc291cmNlc1Jlc2VydmVkL3RvdGFsUmVzb3VyY2VzKVxuICAgKi9cbiAgY29uc3QgY2FsY3VsYXRlRW1ib2RpZWRDYXJib24gPSAoaW5wdXQ6IFBsdWdpblBhcmFtcykgPT4ge1xuICAgIGNvbnN0IHRvdGFsRW1pc3Npb25zID0gaW5wdXRbJ2RldmljZS9lbWlzc2lvbnMtZW1ib2RpZWQnXTtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGlucHV0WydkdXJhdGlvbiddO1xuICAgIGNvbnN0IGV4cGVjdGVkTGlmZXNwYW4gPSBpbnB1dFsnZGV2aWNlL2V4cGVjdGVkLWxpZmVzcGFuJ107XG4gICAgY29uc3QgcmVzb3VyY2VzUmVzZXJ2ZWQgPVxuICAgICAgaW5wdXRbJ3ZjcHVzLWFsbG9jYXRlZCddIHx8IGlucHV0WydyZXNvdXJjZXMtcmVzZXJ2ZWQnXTtcbiAgICBjb25zdCB0b3RhbFJlc291cmNlcyA9IGlucHV0Wyd2Y3B1cy10b3RhbCddIHx8IGlucHV0WydyZXNvdXJjZXMtdG90YWwnXTtcblxuICAgIHJldHVybiAoXG4gICAgICB0b3RhbEVtaXNzaW9ucyAqXG4gICAgICAoZHVyYXRpb24gLyBleHBlY3RlZExpZmVzcGFuKSAqXG4gICAgICAocmVzb3VyY2VzUmVzZXJ2ZWQgLyB0b3RhbFJlc291cmNlcylcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgZm9yIHJlcXVpcmVkIGZpZWxkcyBpbiBpbnB1dC5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlSW5wdXQgPSAoaW5wdXQ6IFBsdWdpblBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9ICh1bml0OiBzdHJpbmcpID0+XG4gICAgICBgbm90IGEgdmFsaWQgbnVtYmVyIGluIGlucHV0LiBQbGVhc2UgcHJvdmlkZSBpdCBhcyBcXGAke3VuaXR9XFxgYDtcblxuICAgIGNvbnN0IGNvbW1vblNjaGVtYVBhcnQgPSAoZXJyb3JNZXNzYWdlOiAodW5pdDogc3RyaW5nKSA9PiBzdHJpbmcpID0+ICh7XG4gICAgICAnZGV2aWNlL2VtaXNzaW9ucy1lbWJvZGllZCc6IHpcbiAgICAgICAgLm51bWJlcih7XG4gICAgICAgICAgaW52YWxpZF90eXBlX2Vycm9yOiBlcnJvck1lc3NhZ2UoJ2dDTzJlJyksXG4gICAgICAgIH0pXG4gICAgICAgIC5ndGUoMClcbiAgICAgICAgLm1pbigwKSxcbiAgICAgICdkZXZpY2UvZXhwZWN0ZWQtbGlmZXNwYW4nOiB6XG4gICAgICAgIC5udW1iZXIoe1xuICAgICAgICAgIGludmFsaWRfdHlwZV9lcnJvcjogZXJyb3JNZXNzYWdlKCdnQ08yZScpLFxuICAgICAgICB9KVxuICAgICAgICAuZ3RlKDApXG4gICAgICAgIC5taW4oMCksXG4gICAgICBkdXJhdGlvbjogelxuICAgICAgICAubnVtYmVyKHtcbiAgICAgICAgICBpbnZhbGlkX3R5cGVfZXJyb3I6IGVycm9yTWVzc2FnZSgnc2Vjb25kcycpLFxuICAgICAgICB9KVxuICAgICAgICAuZ3RlKDEpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdmNwdXNTY2hlbWFQYXJ0ID0ge1xuICAgICAgJ3ZjcHVzLWFsbG9jYXRlZCc6IHpcbiAgICAgICAgLm51bWJlcih7XG4gICAgICAgICAgaW52YWxpZF90eXBlX2Vycm9yOiBlcnJvck1lc3NhZ2UoJ2NvdW50JyksXG4gICAgICAgIH0pXG4gICAgICAgIC5ndGUoMClcbiAgICAgICAgLm1pbigwKSxcbiAgICAgICd2Y3B1cy10b3RhbCc6IHpcbiAgICAgICAgLm51bWJlcih7XG4gICAgICAgICAgaW52YWxpZF90eXBlX2Vycm9yOiBlcnJvck1lc3NhZ2UoJ2NvdW50JyksXG4gICAgICAgIH0pXG4gICAgICAgIC5ndGUoMClcbiAgICAgICAgLm1pbigwKSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzb3VyY2VzU2NoZW1hUGFydCA9IHtcbiAgICAgICdyZXNvdXJjZXMtcmVzZXJ2ZWQnOiB6XG4gICAgICAgIC5udW1iZXIoe1xuICAgICAgICAgIGludmFsaWRfdHlwZV9lcnJvcjogZXJyb3JNZXNzYWdlKCdjb3VudCcpLFxuICAgICAgICB9KVxuICAgICAgICAuZ3RlKDApXG4gICAgICAgIC5taW4oMCksXG4gICAgICAncmVzb3VyY2VzLXRvdGFsJzogelxuICAgICAgICAubnVtYmVyKHtcbiAgICAgICAgICBpbnZhbGlkX3R5cGVfZXJyb3I6IGVycm9yTWVzc2FnZSgnY291bnQnKSxcbiAgICAgICAgfSlcbiAgICAgICAgLmd0ZSgwKVxuICAgICAgICAubWluKDApLFxuICAgIH07XG5cbiAgICBjb25zdCBzY2hlbWFXaXRoVmNwdXMgPSB6Lm9iamVjdCh7XG4gICAgICAuLi5jb21tb25TY2hlbWFQYXJ0KGVycm9yTWVzc2FnZSksXG4gICAgICAuLi52Y3B1c1NjaGVtYVBhcnQsXG4gICAgfSk7XG4gICAgY29uc3Qgc2NoZW1hV2l0aFJlc291cmNlcyA9IHoub2JqZWN0KHtcbiAgICAgIC4uLmNvbW1vblNjaGVtYVBhcnQoZXJyb3JNZXNzYWdlKSxcbiAgICAgIC4uLnJlc291cmNlc1NjaGVtYVBhcnQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzY2hlbWEgPSBzY2hlbWFXaXRoVmNwdXMub3Ioc2NoZW1hV2l0aFJlc291cmNlcykucmVmaW5lKGFsbERlZmluZWQsIHtcbiAgICAgIG1lc3NhZ2U6IGBBbGwgJHtNRVRSSUNTfSBzaG91bGQgYmUgcHJlc2VudC5gLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIHNjaGVtYT4+KHNjaGVtYSwgaW5wdXQpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbWV0YWRhdGEsXG4gICAgZXhlY3V0ZSxcbiAgfTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,58 @@
|
|
|
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 validations_1 = require("../../util/validations");
|
|
8
|
+
const errors_1 = require("../../util/errors");
|
|
9
|
+
const { InputValidationError } = errors_1.ERRORS;
|
|
10
|
+
const Shell = (globalConfig) => {
|
|
11
|
+
const metadata = {
|
|
12
|
+
kind: 'execute',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Calculate the total emissions for a list of inputs.
|
|
16
|
+
*/
|
|
17
|
+
const execute = (inputs) => {
|
|
18
|
+
const inputWithConfig = Object.assign({}, inputs[0], validateConfig());
|
|
19
|
+
const command = inputWithConfig.command;
|
|
20
|
+
const inputAsString = (0, js_yaml_1.dump)(inputs, { indent: 2 });
|
|
21
|
+
const results = runModelInShell(inputAsString, command);
|
|
22
|
+
return results?.outputs?.flat();
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Checks for required fields in input.
|
|
26
|
+
*/
|
|
27
|
+
const validateConfig = () => {
|
|
28
|
+
const schema = zod_1.z.object({
|
|
29
|
+
command: zod_1.z.string(),
|
|
30
|
+
});
|
|
31
|
+
return (0, validations_1.validate)(schema, globalConfig);
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Runs the model in a shell. Spawns a child process to run an external IMP,
|
|
35
|
+
* an executable with a CLI exposing two methods: `--execute` and `--manifest`.
|
|
36
|
+
* The shell command then calls the `--command` method passing var manifest as the path to the desired manifest file.
|
|
37
|
+
*/
|
|
38
|
+
const runModelInShell = (input, command) => {
|
|
39
|
+
try {
|
|
40
|
+
const [executable, ...args] = command.split(' ');
|
|
41
|
+
const result = (0, child_process_1.spawnSync)(executable, args, {
|
|
42
|
+
input,
|
|
43
|
+
encoding: 'utf8',
|
|
44
|
+
});
|
|
45
|
+
const outputs = (0, js_yaml_1.loadAll)(result.stdout);
|
|
46
|
+
return { outputs };
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
throw new InputValidationError(error.message);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
metadata,
|
|
54
|
+
execute,
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
exports.Shell = Shell;
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvc2hlbGwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBQTBEO0FBQzFELHFDQUFzQztBQUN0Qyw2QkFBc0I7QUFLdEIsd0RBQWdEO0FBQ2hELDhDQUF5QztBQUV6QyxNQUFNLEVBQUMsb0JBQW9CLEVBQUMsR0FBRyxlQUFNLENBQUM7QUFFL0IsTUFBTSxLQUFLLEdBQUcsQ0FBQyxZQUEwQixFQUFpQixFQUFFO0lBQ2pFLE1BQU0sUUFBUSxHQUFHO1FBQ2YsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFzQixFQUFTLEVBQUU7UUFDaEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDdkUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQztRQUN4QyxNQUFNLGFBQWEsR0FBVyxJQUFBLGNBQUksRUFBQyxNQUFNLEVBQUUsRUFBQyxNQUFNLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXhELE9BQU8sT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNsQyxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sY0FBYyxHQUFHLEdBQUcsRUFBRTtRQUMxQixNQUFNLE1BQU0sR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1NBQ3BCLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBQSxzQkFBUSxFQUF5QixNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDaEUsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBYSxFQUFFLE9BQWUsRUFBRSxFQUFFO1FBQ3pELElBQUk7WUFDRixNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVqRCxNQUFNLE1BQU0sR0FBNkIsSUFBQSx5QkFBUyxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUU7Z0JBQ25FLEtBQUs7Z0JBQ0wsUUFBUSxFQUFFLE1BQU07YUFDakIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBQSxpQkFBTyxFQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV2QyxPQUFPLEVBQUMsT0FBTyxFQUFDLENBQUM7U0FDbEI7UUFBQyxPQUFPLEtBQVUsRUFBRTtZQUNuQixNQUFNLElBQUksb0JBQW9CLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQy9DO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsT0FBTztRQUNMLFFBQVE7UUFDUixPQUFPO0tBQ1IsQ0FBQztBQUNKLENBQUMsQ0FBQztBQXJEVyxRQUFBLEtBQUssU0FxRGhCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzcGF3blN5bmMsIFNwYXduU3luY1JldHVybnN9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtsb2FkQWxsLCBkdW1wfSBmcm9tICdqcy15YW1sJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtFeGVjdXRlUGx1Z2luLCBQbHVnaW5QYXJhbXN9IGZyb20gJy4uLy4uL3R5cGVzL2ludGVyZmFjZSc7XG5pbXBvcnQge0NvbmZpZ1BhcmFtc30gZnJvbSAnLi4vLi4vdHlwZXMvY29tbW9uJztcblxuaW1wb3J0IHt2YWxpZGF0ZX0gZnJvbSAnLi4vLi4vdXRpbC92YWxpZGF0aW9ucyc7XG5pbXBvcnQge0VSUk9SU30gZnJvbSAnLi4vLi4vdXRpbC9lcnJvcnMnO1xuXG5jb25zdCB7SW5wdXRWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG5leHBvcnQgY29uc3QgU2hlbGwgPSAoZ2xvYmFsQ29uZmlnOiBDb25maWdQYXJhbXMpOiBFeGVjdXRlUGx1Z2luID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAga2luZDogJ2V4ZWN1dGUnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHRvdGFsIGVtaXNzaW9ucyBmb3IgYSBsaXN0IG9mIGlucHV0cy5cbiAgICovXG4gIGNvbnN0IGV4ZWN1dGUgPSAoaW5wdXRzOiBQbHVnaW5QYXJhbXNbXSk6IGFueVtdID0+IHtcbiAgICBjb25zdCBpbnB1dFdpdGhDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBpbnB1dHNbMF0sIHZhbGlkYXRlQ29uZmlnKCkpO1xuICAgIGNvbnN0IGNvbW1hbmQgPSBpbnB1dFdpdGhDb25maWcuY29tbWFuZDtcbiAgICBjb25zdCBpbnB1dEFzU3RyaW5nOiBzdHJpbmcgPSBkdW1wKGlucHV0cywge2luZGVudDogMn0pO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBydW5Nb2RlbEluU2hlbGwoaW5wdXRBc1N0cmluZywgY29tbWFuZCk7XG5cbiAgICByZXR1cm4gcmVzdWx0cz8ub3V0cHV0cz8uZmxhdCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgZm9yIHJlcXVpcmVkIGZpZWxkcyBpbiBpbnB1dC5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlQ29uZmlnID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAgIGNvbW1hbmQ6IHouc3RyaW5nKCksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGU8ei5pbmZlcjx0eXBlb2Ygc2NoZW1hPj4oc2NoZW1hLCBnbG9iYWxDb25maWcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBtb2RlbCBpbiBhIHNoZWxsLiBTcGF3bnMgYSBjaGlsZCBwcm9jZXNzIHRvIHJ1biBhbiBleHRlcm5hbCBJTVAsXG4gICAqIGFuIGV4ZWN1dGFibGUgd2l0aCBhIENMSSBleHBvc2luZyB0d28gbWV0aG9kczogYC0tZXhlY3V0ZWAgYW5kIGAtLW1hbmlmZXN0YC5cbiAgICogVGhlIHNoZWxsIGNvbW1hbmQgdGhlbiBjYWxscyB0aGUgYC0tY29tbWFuZGAgbWV0aG9kIHBhc3NpbmcgdmFyIG1hbmlmZXN0IGFzIHRoZSBwYXRoIHRvIHRoZSBkZXNpcmVkIG1hbmlmZXN0IGZpbGUuXG4gICAqL1xuICBjb25zdCBydW5Nb2RlbEluU2hlbGwgPSAoaW5wdXQ6IHN0cmluZywgY29tbWFuZDogc3RyaW5nKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFtleGVjdXRhYmxlLCAuLi5hcmdzXSA9IGNvbW1hbmQuc3BsaXQoJyAnKTtcblxuICAgICAgY29uc3QgcmVzdWx0OiBTcGF3blN5bmNSZXR1cm5zPHN0cmluZz4gPSBzcGF3blN5bmMoZXhlY3V0YWJsZSwgYXJncywge1xuICAgICAgICBpbnB1dCxcbiAgICAgICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IGxvYWRBbGwocmVzdWx0LnN0ZG91dCk7XG5cbiAgICAgIHJldHVybiB7b3V0cHV0c307XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IElucHV0VmFsaWRhdGlvbkVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG1ldGFkYXRhLFxuICAgIGV4ZWN1dGUsXG4gIH07XG59O1xuIl19
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Subtract = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const errors_1 = require("../../util/errors");
|
|
6
|
+
const helpers_1 = require("../../util/helpers");
|
|
7
|
+
const validations_1 = require("../../util/validations");
|
|
8
|
+
const { InputValidationError } = errors_1.ERRORS;
|
|
9
|
+
const Subtract = (globalConfig) => {
|
|
10
|
+
const errorBuilder = (0, helpers_1.buildErrorMessage)(exports.Subtract.name);
|
|
11
|
+
const metadata = {
|
|
12
|
+
kind: 'execute',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Checks global config value are valid.
|
|
16
|
+
*/
|
|
17
|
+
const validateGlobalConfig = () => {
|
|
18
|
+
const globalConfigSchema = zod_1.z.object({
|
|
19
|
+
'input-parameters': zod_1.z.array(zod_1.z.string()),
|
|
20
|
+
'output-parameter': zod_1.z.string().min(1),
|
|
21
|
+
});
|
|
22
|
+
return (0, validations_1.validate)(globalConfigSchema, globalConfig);
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Checks for required fields in input.
|
|
26
|
+
*/
|
|
27
|
+
const validateSingleInput = (input, inputParameters) => {
|
|
28
|
+
inputParameters.forEach(metricToSubtract => {
|
|
29
|
+
validateParamExists(input, metricToSubtract);
|
|
30
|
+
validateNumericString(input[metricToSubtract]);
|
|
31
|
+
});
|
|
32
|
+
return input;
|
|
33
|
+
};
|
|
34
|
+
const validateParamExists = (input, param) => {
|
|
35
|
+
if (input[param] === undefined) {
|
|
36
|
+
throw new InputValidationError(errorBuilder({
|
|
37
|
+
message: `${param} is missing from the input array`,
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const validateNumericString = (str) => {
|
|
42
|
+
if (isNaN(+Number(str))) {
|
|
43
|
+
throw new InputValidationError(errorBuilder({
|
|
44
|
+
message: `${str} is not numberic`,
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Subtract items from inputParams[1..n] from inputParams[0] and write the result in a new param outputParam.
|
|
50
|
+
*/
|
|
51
|
+
const execute = (inputs) => {
|
|
52
|
+
const { 'input-parameters': inputParameters, 'output-parameter': outputParameter, } = validateGlobalConfig();
|
|
53
|
+
return inputs.map(input => {
|
|
54
|
+
validateSingleInput(input, inputParameters);
|
|
55
|
+
return {
|
|
56
|
+
...input,
|
|
57
|
+
[outputParameter]: calculateDiff(input, inputParameters),
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Calculates the diff between the 1st item in the inputs nad the rest of the items
|
|
63
|
+
*/
|
|
64
|
+
const calculateDiff = (input, inputParameters) => {
|
|
65
|
+
const [firstItem, ...restItems] = inputParameters;
|
|
66
|
+
return restItems.reduce((accumulator, metricToSubtract) => accumulator - input[metricToSubtract], input[firstItem] // Starting accumulator with the value of the first item
|
|
67
|
+
);
|
|
68
|
+
};
|
|
69
|
+
return {
|
|
70
|
+
metadata,
|
|
71
|
+
execute,
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
exports.Subtract = Subtract;
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvc3VidHJhY3QvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXNCO0FBRXRCLDhDQUF5QztBQUN6QyxnREFBcUQ7QUFDckQsd0RBQWdEO0FBS2hELE1BQU0sRUFBQyxvQkFBb0IsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUUvQixNQUFNLFFBQVEsR0FBRyxDQUFDLFlBQTRCLEVBQWlCLEVBQUU7SUFDdEUsTUFBTSxZQUFZLEdBQUcsSUFBQSwyQkFBaUIsRUFBQyxnQkFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELE1BQU0sUUFBUSxHQUFHO1FBQ2YsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLEVBQUU7UUFDaEMsTUFBTSxrQkFBa0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO1lBQ2xDLGtCQUFrQixFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZDLGtCQUFrQixFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3RDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBQSxzQkFBUSxFQUNiLGtCQUFrQixFQUNsQixZQUFZLENBQ2IsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUMxQixLQUFtQixFQUNuQixlQUF5QixFQUN6QixFQUFFO1FBQ0YsZUFBZSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ3pDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzdDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQztJQUVGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEtBQWEsRUFBRSxFQUFFO1FBQ2pFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUM5QixNQUFNLElBQUksb0JBQW9CLENBQzVCLFlBQVksQ0FBQztnQkFDWCxPQUFPLEVBQUUsR0FBRyxLQUFLLGtDQUFrQzthQUNwRCxDQUFDLENBQ0gsQ0FBQztTQUNIO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFO1FBQzVDLElBQUksS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxJQUFJLG9CQUFvQixDQUM1QixZQUFZLENBQUM7Z0JBQ1gsT0FBTyxFQUFFLEdBQUcsR0FBRyxrQkFBa0I7YUFDbEMsQ0FBQyxDQUNILENBQUM7U0FDSDtJQUNILENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFzQixFQUFrQixFQUFFO1FBQ3pELE1BQU0sRUFDSixrQkFBa0IsRUFBRSxlQUFlLEVBQ25DLGtCQUFrQixFQUFFLGVBQWUsR0FDcEMsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFFNUMsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsQ0FBQyxlQUFlLENBQUMsRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQzthQUN6RCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBbUIsRUFBRSxlQUF5QixFQUFFLEVBQUU7UUFDdkUsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxHQUFHLGVBQWUsQ0FBQztRQUNsRCxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQ3JCLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQ3hFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyx3REFBd0Q7U0FDMUUsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxRQUFRO1FBQ1IsT0FBTztLQUNSLENBQUM7QUFDSixDQUFDLENBQUM7QUF6RlcsUUFBQSxRQUFRLFlBeUZuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtFUlJPUlN9IGZyb20gJy4uLy4uL3V0aWwvZXJyb3JzJztcbmltcG9ydCB7YnVpbGRFcnJvck1lc3NhZ2V9IGZyb20gJy4uLy4uL3V0aWwvaGVscGVycyc7XG5pbXBvcnQge3ZhbGlkYXRlfSBmcm9tICcuLi8uLi91dGlsL3ZhbGlkYXRpb25zJztcblxuaW1wb3J0IHtFeGVjdXRlUGx1Z2luLCBQbHVnaW5QYXJhbXN9IGZyb20gJy4uLy4uL3R5cGVzL2ludGVyZmFjZSc7XG5pbXBvcnQge1N1YnRyYWN0Q29uZmlnfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3Qge0lucHV0VmFsaWRhdGlvbkVycm9yfSA9IEVSUk9SUztcblxuZXhwb3J0IGNvbnN0IFN1YnRyYWN0ID0gKGdsb2JhbENvbmZpZzogU3VidHJhY3RDb25maWcpOiBFeGVjdXRlUGx1Z2luID0+IHtcbiAgY29uc3QgZXJyb3JCdWlsZGVyID0gYnVpbGRFcnJvck1lc3NhZ2UoU3VidHJhY3QubmFtZSk7XG4gIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgIGtpbmQ6ICdleGVjdXRlJyxcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGdsb2JhbCBjb25maWcgdmFsdWUgYXJlIHZhbGlkLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVHbG9iYWxDb25maWcgPSAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsQ29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICAgICAgJ2lucHV0LXBhcmFtZXRlcnMnOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgICAgJ291dHB1dC1wYXJhbWV0ZXInOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZTx6LmluZmVyPHR5cGVvZiBnbG9iYWxDb25maWdTY2hlbWE+PihcbiAgICAgIGdsb2JhbENvbmZpZ1NjaGVtYSxcbiAgICAgIGdsb2JhbENvbmZpZ1xuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBmb3IgcmVxdWlyZWQgZmllbGRzIGluIGlucHV0LlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVTaW5nbGVJbnB1dCA9IChcbiAgICBpbnB1dDogUGx1Z2luUGFyYW1zLFxuICAgIGlucHV0UGFyYW1ldGVyczogc3RyaW5nW11cbiAgKSA9PiB7XG4gICAgaW5wdXRQYXJhbWV0ZXJzLmZvckVhY2gobWV0cmljVG9TdWJ0cmFjdCA9PiB7XG4gICAgICB2YWxpZGF0ZVBhcmFtRXhpc3RzKGlucHV0LCBtZXRyaWNUb1N1YnRyYWN0KTtcbiAgICAgIHZhbGlkYXRlTnVtZXJpY1N0cmluZyhpbnB1dFttZXRyaWNUb1N1YnRyYWN0XSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5wdXQ7XG4gIH07XG5cbiAgY29uc3QgdmFsaWRhdGVQYXJhbUV4aXN0cyA9IChpbnB1dDogUGx1Z2luUGFyYW1zLCBwYXJhbTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlucHV0W3BhcmFtXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW5wdXRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGVycm9yQnVpbGRlcih7XG4gICAgICAgICAgbWVzc2FnZTogYCR7cGFyYW19IGlzIG1pc3NpbmcgZnJvbSB0aGUgaW5wdXQgYXJyYXlgLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdmFsaWRhdGVOdW1lcmljU3RyaW5nID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzTmFOKCtOdW1iZXIoc3RyKSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnB1dFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgZXJyb3JCdWlsZGVyKHtcbiAgICAgICAgICBtZXNzYWdlOiBgJHtzdHJ9IGlzIG5vdCBudW1iZXJpY2AsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogU3VidHJhY3QgaXRlbXMgZnJvbSBpbnB1dFBhcmFtc1sxLi5uXSBmcm9tIGlucHV0UGFyYW1zWzBdIGFuZCB3cml0ZSB0aGUgcmVzdWx0IGluIGEgbmV3IHBhcmFtIG91dHB1dFBhcmFtLlxuICAgKi9cbiAgY29uc3QgZXhlY3V0ZSA9IChpbnB1dHM6IFBsdWdpblBhcmFtc1tdKTogUGx1Z2luUGFyYW1zW10gPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICdpbnB1dC1wYXJhbWV0ZXJzJzogaW5wdXRQYXJhbWV0ZXJzLFxuICAgICAgJ291dHB1dC1wYXJhbWV0ZXInOiBvdXRwdXRQYXJhbWV0ZXIsXG4gICAgfSA9IHZhbGlkYXRlR2xvYmFsQ29uZmlnKCk7XG4gICAgcmV0dXJuIGlucHV0cy5tYXAoaW5wdXQgPT4ge1xuICAgICAgdmFsaWRhdGVTaW5nbGVJbnB1dChpbnB1dCwgaW5wdXRQYXJhbWV0ZXJzKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIFtvdXRwdXRQYXJhbWV0ZXJdOiBjYWxjdWxhdGVEaWZmKGlucHV0LCBpbnB1dFBhcmFtZXRlcnMpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgZGlmZiBiZXR3ZWVuIHRoZSAxc3QgaXRlbSBpbiB0aGUgaW5wdXRzIG5hZCB0aGUgcmVzdCBvZiB0aGUgaXRlbXNcbiAgICovXG4gIGNvbnN0IGNhbGN1bGF0ZURpZmYgPSAoaW5wdXQ6IFBsdWdpblBhcmFtcywgaW5wdXRQYXJhbWV0ZXJzOiBzdHJpbmdbXSkgPT4ge1xuICAgIGNvbnN0IFtmaXJzdEl0ZW0sIC4uLnJlc3RJdGVtc10gPSBpbnB1dFBhcmFtZXRlcnM7XG4gICAgcmV0dXJuIHJlc3RJdGVtcy5yZWR1Y2UoXG4gICAgICAoYWNjdW11bGF0b3IsIG1ldHJpY1RvU3VidHJhY3QpID0+IGFjY3VtdWxhdG9yIC0gaW5wdXRbbWV0cmljVG9TdWJ0cmFjdF0sXG4gICAgICBpbnB1dFtmaXJzdEl0ZW1dIC8vIFN0YXJ0aW5nIGFjY3VtdWxhdG9yIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBpdGVtXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG1ldGFkYXRhLFxuICAgIGV4ZWN1dGUsXG4gIH07XG59O1xuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbHRpbnMvc3VidHJhY3QvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFN1YnRyYWN0Q29uZmlnID0ge1xuICAnaW5wdXQtcGFyYW1ldGVycyc6IHN0cmluZ1tdO1xuICAnb3V0cHV0LXBhcmFtZXRlcic6IHN0cmluZztcbn07XG4iXX0=
|