import { WebContainer } from '@webcontainer/api'; import { WORK_DIR_NAME } from '~/utils/constants'; interface WebContainerContext { loaded: boolean; } export const webcontainerContext: WebContainerContext = import.meta.hot?.data.webcontainerContext ?? { loaded: false, }; if (import.meta.hot) { import.meta.hot.data.webcontainerContext = webcontainerContext; } export let webcontainer: Promise = new Promise(() => { // noop for ssr }); if (!import.meta.env.SSR) { webcontainer = import.meta.hot?.data.webcontainer ?? Promise.resolve() .then(() => { return WebContainer.boot({ workdirName: WORK_DIR_NAME }); }) .then((webcontainer) => { webcontainerContext.loaded = true; return webcontainer; }); if (import.meta.hot) { import.meta.hot.data.webcontainer = webcontainer; } }