88 lines
2.2 KiB
Plaintext
88 lines
2.2 KiB
Plaintext
import nodeFs from "node:fs";
|
|
import * as vite from "vite";
|
|
import { injectImageEndpoint } from "../../assets/endpoint/config.js";
|
|
import {
|
|
runHookConfigDone,
|
|
runHookConfigSetup,
|
|
runHookServerDone,
|
|
runHookServerStart
|
|
} from "../../integrations/index.js";
|
|
import { createVite } from "../create-vite.js";
|
|
import { apply as applyPolyfill } from "../polyfill.js";
|
|
async function createContainer({
|
|
isRestart = false,
|
|
logger,
|
|
inlineConfig,
|
|
settings,
|
|
fs = nodeFs
|
|
}) {
|
|
applyPolyfill();
|
|
settings = await runHookConfigSetup({
|
|
settings,
|
|
command: "dev",
|
|
logger,
|
|
isRestart
|
|
});
|
|
settings = injectImageEndpoint(settings, "dev");
|
|
const {
|
|
base,
|
|
server: { host, headers, open: serverOpen }
|
|
} = settings.config;
|
|
const open = typeof serverOpen == "string" ? serverOpen : serverOpen ? base : false;
|
|
const rendererClientEntries = settings.renderers.map((r) => r.clientEntrypoint).filter(Boolean);
|
|
const viteConfig = await createVite(
|
|
{
|
|
mode: "development",
|
|
server: { host, headers, open },
|
|
optimizeDeps: {
|
|
include: rendererClientEntries
|
|
}
|
|
},
|
|
{ settings, logger, mode: "dev", command: "dev", fs }
|
|
);
|
|
await runHookConfigDone({ settings, logger });
|
|
const viteServer = await vite.createServer(viteConfig);
|
|
const container = {
|
|
inlineConfig: inlineConfig ?? {},
|
|
fs,
|
|
logger,
|
|
restartInFlight: false,
|
|
settings,
|
|
viteServer,
|
|
handle(req, res) {
|
|
viteServer.middlewares.handle(req, res, Function.prototype);
|
|
},
|
|
// TODO deprecate and remove
|
|
close() {
|
|
return closeContainer(container);
|
|
}
|
|
};
|
|
return container;
|
|
}
|
|
async function closeContainer({ viteServer, settings, logger }) {
|
|
await viteServer.close();
|
|
await runHookServerDone({
|
|
config: settings.config,
|
|
logger
|
|
});
|
|
}
|
|
async function startContainer({
|
|
settings,
|
|
viteServer,
|
|
logger
|
|
}) {
|
|
const { port } = settings.config.server;
|
|
await viteServer.listen(port);
|
|
const devServerAddressInfo = viteServer.httpServer.address();
|
|
await runHookServerStart({
|
|
config: settings.config,
|
|
address: devServerAddressInfo,
|
|
logger
|
|
});
|
|
return devServerAddressInfo;
|
|
}
|
|
export {
|
|
createContainer,
|
|
startContainer
|
|
};
|