UNPKG

@convo-lang/convo-lang

Version:
61 lines 1.74 kB
import { defaultConvoVars } from "./convo-default-vars.js"; export const evalConvoMessageAsCodeAsync = async (msg, flat) => { if (!msg.content) { return undefined; } const codeBlockMatch = /^\s*```([^\n]*)(.*)```\s*$/s.exec(msg.content); if (!codeBlockMatch) { return undefined; } const lang = codeBlockMatch[1]?.trim().split(' ')[0]; if (!lang) { return undefined; } const code = codeBlockMatch[2]; if (!code) { return undefined; } switch (lang.toLowerCase()) { case 'js': case 'javascript': return await evalJsAsync(code, flat); default: return undefined; } }; const evalJsAsync = async (js, flat) => { const argNames = []; const args = []; const addVar = (name, value) => { if (argNames.includes(name)) { return; } argNames.push(name); args.push(value); }; addVar('flat', flat); addVar('convo', flat.conversation); addVar('ctx', flat.exe); addVar('setVar', (name, value) => { if (typeof name !== 'string') { throw new Error('name must be a string'); } return flat.exe.setVar(true, value, name); }); addVar('print', (...args) => flat.exe.print(...args)); for (const e in flat.exe.sharedVars) { if (e in defaultConvoVars) { continue; } addVar(e, flat.exe.sharedVars[e]); } // disable esbuild eval warning const ev = globalThis['eval']; const fn = ev(`async (${argNames.join(',')})=>{ let result=undefined; ${js} return result; }`); return await fn(...args); }; //# sourceMappingURL=convo-eval.js.map