|
import { WebContainer } from '@webcontainer/api'; |
|
import { WORK_DIR_NAME } from '~/utils/constants'; |
|
import { forgetAuth } from '~/lib/auth'; |
|
|
|
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(() => { |
|
|
|
}); |
|
|
|
if (!import.meta.env.SSR) { |
|
webcontainer = |
|
import.meta.hot?.data.webcontainer ?? |
|
Promise.resolve() |
|
.then(() => { |
|
forgetAuth(); |
|
return WebContainer.boot({ workdirName: WORK_DIR_NAME }); |
|
}) |
|
.then((webcontainer) => { |
|
webcontainerContext.loaded = true; |
|
return webcontainer; |
|
}); |
|
|
|
if (import.meta.hot) { |
|
import.meta.hot.data.webcontainer = webcontainer; |
|
} |
|
} |
|
|