mirror of
https://github.com/eliasstepanik/strudel.git
synced 2026-01-11 21:58:37 +00:00
33 lines
777 B
JavaScript
33 lines
777 B
JavaScript
import { Cyclist } from './cyclist.mjs';
|
|
import { evaluate as _evaluate } from './evaluate.mjs';
|
|
|
|
export function repl({
|
|
interval,
|
|
defaultOutput,
|
|
onSchedulerError,
|
|
onEvalError,
|
|
onEval,
|
|
getTime,
|
|
transpiler,
|
|
onToggle,
|
|
}) {
|
|
const scheduler = new Cyclist({ interval, onTrigger: defaultOutput, onError: onSchedulerError, getTime, onToggle });
|
|
const evaluate = async (code) => {
|
|
if (!code) {
|
|
throw new Error('no code to evaluate');
|
|
}
|
|
try {
|
|
const { pattern } = await _evaluate(code, transpiler);
|
|
scheduler.setPattern(pattern, true);
|
|
onEval?.({
|
|
pattern,
|
|
code,
|
|
});
|
|
} catch (err) {
|
|
console.warn(`eval error: ${err.message}`);
|
|
onEvalError?.(err);
|
|
}
|
|
};
|
|
return { scheduler, evaluate };
|
|
}
|