UNPKG

@swell/cli

Version:

Swell's command line interface/utility

84 lines (80 loc) 2.34 kB
export function getFunctionTemplate({ description, events, extension, functionName, language, route, schedule, trigger, }) { if (trigger === 'workflow') { return getWorkflowTemplate({ description, functionName, language, }); } let typeAppend = ''; if (trigger === 'model') { const eventsList = events .split(/\s*,\s*/g) .filter(Boolean) .map((eventName) => `'${eventName}'`) .join(', '); typeAppend = `, model: { events: [${eventsList}], conditions: {}, },`; } if (trigger === 'route') { typeAppend = `, route: { public: ${route === 'public' || !route ? 'true' : 'false'} },`; } if (trigger === 'cron') { typeAppend = `, cron: { schedule: '${schedule}', },`; } let extensionAppend = ''; if (extension) { extensionAppend = `extension: '${extension}',\n `; } return `export const config${language === 'ts' ? ': SwellConfig' : ''} = { ${extensionAppend}description: '${description}'${typeAppend} }; export default async function (req${language === 'ts' ? ': SwellRequest' : ''}) { const { swell, store, data } = req; } `; } function getWorkflowTemplate({ description, functionName, language, }) { const className = toWorkflowClassName(functionName); const reqParam = language === 'ts' ? 'req: SwellWorkflowRequest' : 'req'; const stepParam = language === 'ts' ? 'step: SwellWorkflowStep' : 'step'; return `export const config = { kind: 'workflow', description: '${description}' }; export default class ${className} { async run(${reqParam}, ${stepParam}) { await step.do('load settings', async () => { await req.swell.settings(); }); return { data: req.data, }; } } `; } function toWorkflowClassName(functionName) { const baseName = functionName .split(/[/\\]/) .pop() ?.replace(/\.[cm]?[jt]sx?$/i, ''); const className = (baseName || 'workflow') .split(/[^\dA-Za-z]+/g) .filter(Boolean) .map((part) => `${part[0]?.toUpperCase() || ''}${part.slice(1)}`) .join(''); if (!className) { return 'Workflow'; } return /^[$A-Z_a-z]/.test(className) ? className : `Workflow${className}`; }