1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.createServer = void 0;
|
4 | const server_1 = require("@ream/server");
|
5 | const vite_1 = require("vite");
|
6 | const get_vite_config_1 = require("./vite/get-vite-config");
|
7 | const SERVER_ENTRY_PATH = require.resolve(`@ream/app/server-entry.js`);
|
8 | const collectCssUrls = (mods, styles) => {
|
9 | for (const mod of mods) {
|
10 | if (mod.ssrModule && mod.file && mod.id) {
|
11 | if (mod.file.endsWith('.css') || /\?vue&type=style/.test(mod.id)) {
|
12 | styles.set(mod.url, mod.ssrModule.default);
|
13 | }
|
14 | }
|
15 | if (mod.importedModules.size > 0) {
|
16 | collectCssUrls(mod.importedModules, styles);
|
17 | }
|
18 | }
|
19 | };
|
20 | const createServer = async (api) => {
|
21 | const viteConfig = get_vite_config_1.getViteConfig(api);
|
22 | const viteDevServer = await vite_1.createServer(viteConfig);
|
23 | api.viteDevServer = viteDevServer;
|
24 | const server = await server_1.createServer({
|
25 | cwd: api.rootDir,
|
26 | loadServerEntry: async () => {
|
27 | const serverEntry = await api.viteDevServer.ssrLoadModule(`/@fs/${SERVER_ENTRY_PATH}`);
|
28 | return serverEntry.default;
|
29 | },
|
30 | getHtmlAssets: () => {
|
31 | const matchedMods = viteDevServer.moduleGraph.getModulesByFile(SERVER_ENTRY_PATH);
|
32 | const styles = new Map();
|
33 | if (matchedMods) {
|
34 | collectCssUrls(matchedMods, styles);
|
35 | }
|
36 | return {
|
37 | cssLinkTags: [...styles.values()]
|
38 | .map((style) => `<style>${style}</style>`)
|
39 | .join('\n'),
|
40 | scriptTags: `<script type="module" src="/@vite/client"></script>
|
41 | <script type="module" src="/@fs/${require.resolve(`@ream/app/client-entry.js`)}"></script>
|
42 | `,
|
43 | };
|
44 | },
|
45 | dev: true,
|
46 | devMiddleware: api.viteDevServer.middlewares,
|
47 | ssrFixStacktrace: (err) => api.viteDevServer.ssrFixStacktrace(err),
|
48 | });
|
49 | return server;
|
50 | };
|
51 | exports.createServer = createServer;
|