From c16b300144a67261487643e788fe982cb49da695 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 13 Feb 2026 13:40:51 +0100 Subject: [PATCH] fix: shove prebake eval out of react --- packages/transpiler/index.mjs | 2 +- website/src/repl/prebakeCodeMirror.mjs | 2 ++ website/src/repl/useReplContext.jsx | 26 ++++++++------------------ 3 files changed, 11 insertions(+), 19 deletions(-) diff --git a/packages/transpiler/index.mjs b/packages/transpiler/index.mjs index 484c3e70c..e8f714dd9 100644 --- a/packages/transpiler/index.mjs +++ b/packages/transpiler/index.mjs @@ -2,4 +2,4 @@ import { evaluate as _evaluate } from '@strudel/core'; import { transpiler } from './transpiler.mjs'; export * from './transpiler.mjs'; -export const evaluate = (code) => _evaluate(code, transpiler); +export const evaluate = (code, transpilerOptions) => _evaluate(code, transpiler, transpilerOptions); diff --git a/website/src/repl/prebakeCodeMirror.mjs b/website/src/repl/prebakeCodeMirror.mjs index 9c310c8b6..42b913ae6 100644 --- a/website/src/repl/prebakeCodeMirror.mjs +++ b/website/src/repl/prebakeCodeMirror.mjs @@ -5,6 +5,7 @@ import { Compartment, EditorState, Prec } from '@codemirror/state'; import { drawSelection, EditorView, keymap } from '@codemirror/view'; import { logger } from '@strudel/core'; import { basicSetup, flash, initTheme, extensions, parseBooleans, codemirrorSettings } from '@strudel/codemirror'; +import { evaluate } from '@strudel/transpiler'; export class PrebakeCodeMirror { constructor(initialCode, storePrebake, container) { @@ -89,6 +90,7 @@ export class PrebakeCodeMirror { async savePrebake() { flash(this.view); this.storePrebake(this.code); + evaluate(this.code, { addReturn: false }); // run prebake logger('[prebake] prebake saved'); } diff --git a/website/src/repl/useReplContext.jsx b/website/src/repl/useReplContext.jsx index 390faa093..570f2e27a 100644 --- a/website/src/repl/useReplContext.jsx +++ b/website/src/repl/useReplContext.jsx @@ -4,9 +4,9 @@ Copyright (C) 2022 Strudel contributors - see . */ -import { code2hash, getPerformanceTimeSeconds, logger, silence, evaluate } from '@strudel/core'; +import { code2hash, getPerformanceTimeSeconds, logger, silence } from '@strudel/core'; import { getDrawContext } from '@strudel/draw'; -import { transpiler } from '@strudel/transpiler'; +import { transpiler, evaluate } from '@strudel/transpiler'; import { getAudioContextCurrentTime, renderPatternAudio, @@ -43,8 +43,6 @@ import { debugAudiograph } from './audiograph'; const { latestCode, maxPolyphony, audioDeviceName, multiChannelOrbits } = settingsMap.get(); let modulesLoading, presets, drawContext, clearCanvas, audioReady; -const evaluateUserPrebake = (code) => evaluate(code, transpiler, { addReturn: false }); - if (typeof window !== 'undefined') { audioReady = initAudioOnFirstClick({ maxPolyphony, @@ -88,12 +86,12 @@ export function useReplContext() { pattern: silence, drawTime, drawContext, - prebake: async () => - Promise.all([modulesLoading, presets]).then(() => { - if (prebakeScript?.length) { - return evaluateUserPrebake(prebakeScript ?? ''); - } - }), + prebake: async () => { + await Promise.all([modulesLoading, presets]); + if (prebakeScript) { + return evaluate(prebakeScript, { addReturn: false }); + } + }, onUpdateState: (state) => { setReplState({ ...state }); }, @@ -183,14 +181,6 @@ export function useReplContext() { editorRef.current?.updateSettings(editorSettings); }, [_settings]); - useEffect(() => { - Promise.all([modulesLoading, presets]).then(() => { - if (prebakeScript?.length) { - return evaluateUserPrebake(prebakeScript ?? ''); - } - }); - }, [prebakeScript]); - // // UI Actions //