UNPKG

@wmfs/tymly

Version:

A framework for building and sharing workflows in Node.js

59 lines (51 loc) 1.42 kB
const _ = require('lodash') module.exports = class RunFunction { init (resourceConfig, env) { this.env = env this.functions = env.bootedServices.functions this.functionName = resourceConfig.functionName } async run (event, context) { const namespace = context.stateMachineMeta.namespace const funcName = `${namespace}_${this.functionName}` const func = this.functions.functions[funcName] if (!func) { return context.sendTaskFailure({ error: 'UNKNOWN_FUNCTION', cause: `Cannot find function: ${funcName}` }) } const isCallback = func.args.includes('callback') const args = func.args.map(arg => { if (arg !== 'callback') { if (arg === 'event') { return event } else if (arg === 'context') { return context } else if (arg === 'env') { return this.env } else { return event[arg] } } else { return null } }).filter(arg => arg) let result if (isCallback) { result = await new Promise((resolve, reject) => { func.func(...args, (err, data) => { if (err) reject(err) else resolve(data) }) }) } else { result = await func.func(...args) } if (_.isString(result)) { context.sendTaskSuccess({ result }) } else { context.sendTaskSuccess(result) } } }