UNPKG

2.05 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.createServer = void 0;
4const server_1 = require("@ream/server");
5const vite_1 = require("vite");
6const get_vite_config_1 = require("./vite/get-vite-config");
7const SERVER_ENTRY_PATH = require.resolve(`@ream/app/server-entry.js`);
8const 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};
20const 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};
51exports.createServer = createServer;