@grnsft/if
Version:
Impact Framework
63 lines • 9.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TimeConverter = void 0;
const zod_1 = require("zod");
const interfaces_1 = require("@grnsft/if-core/interfaces");
const utils_1 = require("@grnsft/if-core/utils");
const validations_1 = require("../../../common/util/validations");
const config_1 = require("./config");
const config_2 = require("../../config");
const { ConfigError } = utils_1.ERRORS;
const { MISSING_CONFIG } = config_2.STRINGS;
exports.TimeConverter = (0, interfaces_1.PluginFactory)({
configValidation: (config) => {
if (!config || !Object.keys(config)?.length) {
throw new ConfigError(MISSING_CONFIG);
}
const timeUnitsValues = Object.keys(config_1.TIME_UNITS_IN_SECONDS);
const originalTimeUnitValuesWithDuration = [
'duration',
...timeUnitsValues,
];
const originalTimeUnitValues = timeUnitsValues;
const configSchema = zod_1.z.object({
'input-parameter': zod_1.z.string(),
'original-time-unit': zod_1.z.enum(originalTimeUnitValues),
'new-time-unit': zod_1.z.enum(originalTimeUnitValuesWithDuration),
'output-parameter': zod_1.z.string().min(1),
});
return (0, validations_1.validate)(configSchema, config);
},
inputValidation: (input, config) => {
const inputParameter = config['input-parameter'];
const schema = zod_1.z.object({
duration: zod_1.z.number().gte(1),
[inputParameter]: zod_1.z.number(),
});
return (0, validations_1.validate)(schema, input);
},
implementation: async (inputs, config) => {
const outputParameter = config['output-parameter'];
return inputs.map(input => ({
...input,
[outputParameter]: calculateEnergy(input, config),
}));
},
allowArithmeticExpressions: ['input-parameter'],
});
/**
* Calculates the energy for given period.
*/
const calculateEnergy = (input, config) => {
const { 'original-time-unit': originalTimeUnit, 'input-parameter': inputParameter, 'new-time-unit': newTimeUnit, } = config;
const originalTimeUnitInSeoncds = config_1.TIME_UNITS_IN_SECONDS[originalTimeUnit];
const energyPerPeriod = isNaN(Number(inputParameter))
? input[inputParameter]
: inputParameter;
const timeUnit = newTimeUnit === 'duration'
? input.duration
: config_1.TIME_UNITS_IN_SECONDS[newTimeUnit];
const result = (energyPerPeriod / originalTimeUnitInSeoncds) * timeUnit;
return Number(result.toFixed(6));
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaWYtcnVuL2J1aWx0aW5zL3RpbWUtY29udmVydGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUFzQjtBQUd0QiwyREFBeUQ7QUFDekQsaURBQTZDO0FBRTdDLGtFQUEwRDtBQUUxRCxxQ0FBK0M7QUFFL0MseUNBQXFDO0FBRXJDLE1BQU0sRUFBQyxXQUFXLEVBQUMsR0FBRyxjQUFNLENBQUM7QUFDN0IsTUFBTSxFQUFDLGNBQWMsRUFBQyxHQUFHLGdCQUFPLENBQUM7QUFFcEIsUUFBQSxhQUFhLEdBQUcsSUFBQSwwQkFBYSxFQUFDO0lBQ3pDLGdCQUFnQixFQUFFLENBQUMsTUFBb0IsRUFBRSxFQUFFO1FBQ3pDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRTtZQUMzQyxNQUFNLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBcUIsQ0FBQyxDQUFDO1FBQzNELE1BQU0sa0NBQWtDLEdBQUc7WUFDekMsVUFBVTtZQUNWLEdBQUcsZUFBZTtTQUNWLENBQUM7UUFDWCxNQUFNLHNCQUFzQixHQUFHLGVBQXdDLENBQUM7UUFFeEUsTUFBTSxZQUFZLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUM1QixpQkFBaUIsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1lBQzdCLG9CQUFvQixFQUFFLE9BQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7WUFDcEQsZUFBZSxFQUFFLE9BQUMsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUM7WUFDM0Qsa0JBQWtCLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDdEMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFBLHNCQUFRLEVBQStCLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsZUFBZSxFQUFFLENBQUMsS0FBbUIsRUFBRSxNQUFvQixFQUFFLEVBQUU7UUFDN0QsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFakQsTUFBTSxNQUFNLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN0QixRQUFRLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0IsQ0FBQyxjQUFjLENBQUMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1NBQzdCLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBQSxzQkFBUSxFQUF5QixNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNELGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBc0IsRUFBRSxNQUFvQixFQUFFLEVBQUU7UUFDckUsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFbkQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQixHQUFHLEtBQUs7WUFDUixDQUFDLGVBQWUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1NBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUNELDBCQUEwQixFQUFFLENBQUMsaUJBQWlCLENBQUM7Q0FDaEQsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDSCxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQW1CLEVBQUUsTUFBb0IsRUFBRSxFQUFFO0lBQ3BFLE1BQU0sRUFDSixvQkFBb0IsRUFBRSxnQkFBZ0IsRUFDdEMsaUJBQWlCLEVBQUUsY0FBYyxFQUNqQyxlQUFlLEVBQUUsV0FBVyxHQUM3QixHQUFHLE1BQU0sQ0FBQztJQUVYLE1BQU0seUJBQXlCLEdBQUcsOEJBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMxRSxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDbkIsTUFBTSxRQUFRLEdBQ1osV0FBVyxLQUFLLFVBQVU7UUFDeEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRO1FBQ2hCLENBQUMsQ0FBQyw4QkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUV6QyxNQUFNLE1BQU0sR0FBRyxDQUFDLGVBQWUsR0FBRyx5QkFBeUIsQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUV4RSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge1BsdWdpblBhcmFtcywgQ29uZmlnUGFyYW1zfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdHlwZXMnO1xuaW1wb3J0IHtQbHVnaW5GYWN0b3J5fSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvaW50ZXJmYWNlcyc7XG5pbXBvcnQge0VSUk9SU30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3V0aWxzJztcblxuaW1wb3J0IHt2YWxpZGF0ZX0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3V0aWwvdmFsaWRhdGlvbnMnO1xuXG5pbXBvcnQge1RJTUVfVU5JVFNfSU5fU0VDT05EU30gZnJvbSAnLi9jb25maWcnO1xuXG5pbXBvcnQge1NUUklOR1N9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5cbmNvbnN0IHtDb25maWdFcnJvcn0gPSBFUlJPUlM7XG5jb25zdCB7TUlTU0lOR19DT05GSUd9ID0gU1RSSU5HUztcblxuZXhwb3J0IGNvbnN0IFRpbWVDb252ZXJ0ZXIgPSBQbHVnaW5GYWN0b3J5KHtcbiAgY29uZmlnVmFsaWRhdGlvbjogKGNvbmZpZzogQ29uZmlnUGFyYW1zKSA9PiB7XG4gICAgaWYgKCFjb25maWcgfHwgIU9iamVjdC5rZXlzKGNvbmZpZyk/Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKE1JU1NJTkdfQ09ORklHKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lVW5pdHNWYWx1ZXMgPSBPYmplY3Qua2V5cyhUSU1FX1VOSVRTX0lOX1NFQ09ORFMpO1xuICAgIGNvbnN0IG9yaWdpbmFsVGltZVVuaXRWYWx1ZXNXaXRoRHVyYXRpb24gPSBbXG4gICAgICAnZHVyYXRpb24nLFxuICAgICAgLi4udGltZVVuaXRzVmFsdWVzLFxuICAgIF0gYXMgY29uc3Q7XG4gICAgY29uc3Qgb3JpZ2luYWxUaW1lVW5pdFZhbHVlcyA9IHRpbWVVbml0c1ZhbHVlcyBhcyBbc3RyaW5nLCAuLi5zdHJpbmdbXV07XG5cbiAgICBjb25zdCBjb25maWdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgICAnaW5wdXQtcGFyYW1ldGVyJzogei5zdHJpbmcoKSxcbiAgICAgICdvcmlnaW5hbC10aW1lLXVuaXQnOiB6LmVudW0ob3JpZ2luYWxUaW1lVW5pdFZhbHVlcyksXG4gICAgICAnbmV3LXRpbWUtdW5pdCc6IHouZW51bShvcmlnaW5hbFRpbWVVbml0VmFsdWVzV2l0aER1cmF0aW9uKSxcbiAgICAgICdvdXRwdXQtcGFyYW1ldGVyJzogei5zdHJpbmcoKS5taW4oMSksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGU8ei5pbmZlcjx0eXBlb2YgY29uZmlnU2NoZW1hPj4oY29uZmlnU2NoZW1hLCBjb25maWcpO1xuICB9LFxuICBpbnB1dFZhbGlkYXRpb246IChpbnB1dDogUGx1Z2luUGFyYW1zLCBjb25maWc6IENvbmZpZ1BhcmFtcykgPT4ge1xuICAgIGNvbnN0IGlucHV0UGFyYW1ldGVyID0gY29uZmlnWydpbnB1dC1wYXJhbWV0ZXInXTtcblxuICAgIGNvbnN0IHNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAgIGR1cmF0aW9uOiB6Lm51bWJlcigpLmd0ZSgxKSxcbiAgICAgIFtpbnB1dFBhcmFtZXRlcl06IHoubnVtYmVyKCksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGU8ei5pbmZlcjx0eXBlb2Ygc2NoZW1hPj4oc2NoZW1hLCBpbnB1dCk7XG4gIH0sXG4gIGltcGxlbWVudGF0aW9uOiBhc3luYyAoaW5wdXRzOiBQbHVnaW5QYXJhbXNbXSwgY29uZmlnOiBDb25maWdQYXJhbXMpID0+IHtcbiAgICBjb25zdCBvdXRwdXRQYXJhbWV0ZXIgPSBjb25maWdbJ291dHB1dC1wYXJhbWV0ZXInXTtcblxuICAgIHJldHVybiBpbnB1dHMubWFwKGlucHV0ID0+ICh7XG4gICAgICAuLi5pbnB1dCxcbiAgICAgIFtvdXRwdXRQYXJhbWV0ZXJdOiBjYWxjdWxhdGVFbmVyZ3koaW5wdXQsIGNvbmZpZyksXG4gICAgfSkpO1xuICB9LFxuICBhbGxvd0FyaXRobWV0aWNFeHByZXNzaW9uczogWydpbnB1dC1wYXJhbWV0ZXInXSxcbn0pO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGVuZXJneSBmb3IgZ2l2ZW4gcGVyaW9kLlxuICovXG5jb25zdCBjYWxjdWxhdGVFbmVyZ3kgPSAoaW5wdXQ6IFBsdWdpblBhcmFtcywgY29uZmlnOiBDb25maWdQYXJhbXMpID0+IHtcbiAgY29uc3Qge1xuICAgICdvcmlnaW5hbC10aW1lLXVuaXQnOiBvcmlnaW5hbFRpbWVVbml0LFxuICAgICdpbnB1dC1wYXJhbWV0ZXInOiBpbnB1dFBhcmFtZXRlcixcbiAgICAnbmV3LXRpbWUtdW5pdCc6IG5ld1RpbWVVbml0LFxuICB9ID0gY29uZmlnO1xuXG4gIGNvbnN0IG9yaWdpbmFsVGltZVVuaXRJblNlb25jZHMgPSBUSU1FX1VOSVRTX0lOX1NFQ09ORFNbb3JpZ2luYWxUaW1lVW5pdF07XG4gIGNvbnN0IGVuZXJneVBlclBlcmlvZCA9IGlzTmFOKE51bWJlcihpbnB1dFBhcmFtZXRlcikpXG4gICAgPyBpbnB1dFtpbnB1dFBhcmFtZXRlcl1cbiAgICA6IGlucHV0UGFyYW1ldGVyO1xuICBjb25zdCB0aW1lVW5pdCA9XG4gICAgbmV3VGltZVVuaXQgPT09ICdkdXJhdGlvbidcbiAgICAgID8gaW5wdXQuZHVyYXRpb25cbiAgICAgIDogVElNRV9VTklUU19JTl9TRUNPTkRTW25ld1RpbWVVbml0XTtcblxuICBjb25zdCByZXN1bHQgPSAoZW5lcmd5UGVyUGVyaW9kIC8gb3JpZ2luYWxUaW1lVW5pdEluU2VvbmNkcykgKiB0aW1lVW5pdDtcblxuICByZXR1cm4gTnVtYmVyKHJlc3VsdC50b0ZpeGVkKDYpKTtcbn07XG4iXX0=