Spaces:
Running
Running
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<WebContainer> = 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; | |
} | |
} | |