/
index.ts
47 lines (45 loc) · 1.59 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import type polka from 'polka';
import type { Plugin } from 'rollup';
import { indexHTMLMiddleware } from './middleware/index-html';
import { jsMiddleware } from './middleware/js';
import { npmPlugin } from './plugins/npm-plugin';
import { processGlobalPlugin } from './plugins/process-global-plugin';
import { resolveExtensionsPlugin } from './plugins/resolve-extensions-plugin';
import { createServer } from './server';
import type { RollupAliasOptions } from '@rollup/plugin-alias';
import aliasPlugin from '@rollup/plugin-alias';
import { esbuildPlugin } from './plugins/esbuild-plugin';
import { cssPlugin } from './plugins/css';
import { cssMiddleware } from './middleware/css';
import { staticMiddleware } from './middleware/static';
interface ModuleServerOpts {
root?: string;
aliases?: RollupAliasOptions['entries'];
plugins?: (Plugin | false | undefined)[];
}
export const createModuleServer = async ({
root = process.cwd(),
aliases,
plugins: userPlugins = [],
}: ModuleServerOpts = {}) => {
const plugins = [
...userPlugins,
aliases && aliasPlugin({ entries: aliases }),
resolveExtensionsPlugin({
extensions: ['.ts', '.tsx', '.js', '.cjs'],
index: true,
}),
processGlobalPlugin({ NODE_ENV: 'development' }),
npmPlugin({ root }),
esbuildPlugin(),
cssPlugin(),
];
const filteredPlugins = plugins.filter(Boolean) as Plugin[];
const middleware: polka.Middleware[] = [
indexHTMLMiddleware,
jsMiddleware({ root, plugins: filteredPlugins }),
cssMiddleware({ root }),
staticMiddleware({ root }),
];
return createServer({ middleware });
};