UNPKG

@grnsft/if

Version:

Impact Framework

63 lines 9.03 kB
"use strict"; 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=