import { Cyclist } from './cyclist.mjs'; import { evaluate as _evaluate } from './evaluate.mjs'; export function repl({ interval, defaultOutput, onSchedulerError, onEvalError, beforeEval, afterEval, getTime, transpiler, onToggle, }) { const scheduler = new Cyclist({ interval, onTrigger: defaultOutput, onError: onSchedulerError, getTime, onToggle }); const evaluate = async (code, autostart = true) => { if (!code) { throw new Error('no code to evaluate'); } try { beforeEval({ code }); const { pattern } = await _evaluate(code, transpiler); scheduler.setPattern(pattern, autostart); afterEval({ code, pattern }); return pattern; } catch (err) { console.warn(`eval error: ${err.message}`); onEvalError?.(err); } }; const stop = () => scheduler.stop(); const start = () => scheduler.start(); const pause = () => scheduler.pause(); return { scheduler, evaluate, start, stop, pause }; }