core/factories/server.factory.ts

core/factories/server.factory.ts is a file in Bane's Lab Build Scripts. 46 lines of code and 5 definitions.

import { SITE_SERVER_LABEL, SOCIAL_SERVER_LABEL } from "#configuration/strings/server.strings";
import { type ViteDevServer, createServer } from "vite";
import type { DevServer } from "#types/server.types";
import { absolutePath } from "@ssot/paths";
import { portOf } from "@ssot/secrets";

const VITE_CONFIG = "vite.config.ts";

export const devServers = function devServers(): readonly DevServer[] {
    return [
        {
            args: ["--host"],
            config: absolutePath("app.member", VITE_CONFIG),
            label: SITE_SERVER_LABEL,
            port: portOf("SITE_DEV_PORT"),
        },
        {
            args: [],
            config: absolutePath("app.social", VITE_CONFIG),
            label: SOCIAL_SERVER_LABEL,
            port: portOf("SOCIAL_DEV_PORT"),
        },
    ];
};

export const releaseServer = async function releaseServer(server: ViteDevServer): Promise<void> {
    for (const environment of Object.values(server.environments)) {
        environment.moduleGraph.invalidateAll();
    }
    await server.close();
};

export const withModuleServer = async function withModuleServer<Result>(
    root: string,
    work: (server: ViteDevServer) => Promise<Result>,
): Promise<Result> {
    const server = await createServer({
        appType: "custom",
        cacheDir: absolutePath("viteCache.modules"),
        configFile: false,
        logLevel: "error",
        root,
        server: { hmr: false, middlewareMode: true, ws: false },
    });
    try {
        return await work(server);
    } finally {
        await releaseServer(server);
    }
};