From 305715277c22873a95fa1e9ddcfe90c7447f236f Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 29 Feb 2024 04:54:03 +0100 Subject: [PATCH] repl reset default dict + add mechanism to get a module by name from dynamic imports --- packages/core/evaluate.mjs | 1 + packages/tonal/index.mjs | 2 ++ website/src/repl/Repl.jsx | 14 ++++++++++---- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/core/evaluate.mjs b/packages/core/evaluate.mjs index 340febe5..ea63d8df 100644 --- a/packages/core/evaluate.mjs +++ b/packages/core/evaluate.mjs @@ -22,6 +22,7 @@ export const evalScope = async (...args) => { globalThis[name] = value; }); }); + return modules; }; function safeEval(str, options = {}) { diff --git a/packages/tonal/index.mjs b/packages/tonal/index.mjs index fc1b7f97..a3c0cba3 100644 --- a/packages/tonal/index.mjs +++ b/packages/tonal/index.mjs @@ -5,3 +5,5 @@ export * from './tonal.mjs'; export * from './voicings.mjs'; import './ireal.mjs'; + +export const packageName = '@strudel/tonal'; diff --git a/website/src/repl/Repl.jsx b/website/src/repl/Repl.jsx index c5a8fa09..ebb350d6 100644 --- a/website/src/repl/Repl.jsx +++ b/website/src/repl/Repl.jsx @@ -48,6 +48,14 @@ if (typeof window !== 'undefined') { isIframe = window.location !== window.parent.location; } +async function getModule(name) { + if (!modulesLoading) { + return; + } + const modules = await modulesLoading; + return modules.find((m) => m.packageName === name); +} + export function Repl({ embedded = false }) { const isEmbedded = embedded || isIframe; const { panelPosition, isZen } = useSettings(); @@ -163,6 +171,7 @@ export function Repl({ embedded = false }) { }; const resetEditor = async () => { + (await getModule('@strudel/tonal'))?.resetVoicings(); resetGlobalEffects(); clearCanvas(); resetLoadedSounds(); @@ -188,10 +197,7 @@ export function Repl({ embedded = false }) { logger(`[repl] ✨ loading random tune "${patternData.id}"`); setActivePattern(patternData.id); setViewingPatternData(patternData); - clearCanvas(); - resetLoadedSounds(); - resetGlobalEffects(); - await prebake(); // declare default samples + await resetEditor(); editorRef.current.setCode(code); editorRef.current.repl.evaluate(code); };