Skip to content

Commit 540b2a3

Browse files
authored
fix: apply middleware before internal middleware; add CORS support (#7)
1 parent 9e18caa commit 540b2a3

File tree

5 files changed

+64
-13
lines changed

5 files changed

+64
-13
lines changed

lib/index.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
import { Plugin } from "vite";
22

33
import { Config } from "./config.ts";
4-
import { createMiddleware } from "./middleware.ts";
4+
import applyMiddleware from "./middleware.ts";
55

66
export default function serveStatic(config: Config): Plugin {
77
return {
88
name: "serve-static",
99
configureServer(server) {
10-
const middleware = createMiddleware(config, server.config.logger);
11-
return () => server.middlewares.use(middleware);
10+
applyMiddleware(server, config);
1211
},
1312
configurePreviewServer(server) {
14-
const middleware = createMiddleware(config, server.config.logger);
15-
return () => server.middlewares.use(middleware);
13+
applyMiddleware(server, config);
1614
},
1715
};
1816
}

lib/middleware.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1+
import corsMiddleware from "cors";
12
import fs from "fs";
23
import { contentType } from "mime-types";
34
import path from "path";
4-
import { Connect, Logger } from "vite";
5+
import { Connect, Logger, PreviewServer, ViteDevServer } from "vite";
56

67
import { Config as PluginConfig } from "./config.ts";
7-
import { setupLogger } from "./utils.ts";
8+
import { isDevServer, setupLogger } from "./utils.ts";
89

910
export function createMiddleware(
1011
config: PluginConfig,
@@ -46,3 +47,20 @@ export function createMiddleware(
4647
return next();
4748
};
4849
}
50+
51+
export default function applyMiddleware(
52+
server: ViteDevServer | PreviewServer,
53+
pluginConfig: PluginConfig,
54+
) {
55+
const pluginMiddleware = createMiddleware(pluginConfig, server.config.logger);
56+
const corsConfig = isDevServer(server) ? server.config.server.cors : server.config.preview.cors;
57+
58+
// https://github.com/vitejs/vite/blob/fcf50c2e881356ea0d725cc563722712a2bf5695/packages/vite/src/node/server/index.ts#L852-L854
59+
if (corsConfig !== false) {
60+
const config = typeof corsConfig === "boolean" ? {} : corsConfig;
61+
// @ts-expect-error CorsOptions type is incompatible in Vite (waiting for fix in https://github.com/vitejs/vite/pull/17836)
62+
server.middlewares.use(corsMiddleware(config));
63+
}
64+
65+
server.middlewares.use(pluginMiddleware);
66+
}

lib/utils.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import { LogOptions, Logger } from "vite";
1+
import { LogOptions, Logger, PreviewServer, ViteDevServer } from "vite";
2+
3+
// https://github.com/vitejs/vite/blob/e961b31493f8493277b46773156cc6e546b9c86b/packages/vite/src/node/utils.ts#L1353-L1357
4+
export function isDevServer(server: ViteDevServer | PreviewServer) {
5+
return "pluginContainer" in server;
6+
}
27

38
type LogFunction = (msg: string, options?: LogOptions) => void;
49
export function setupLogger(logger: Logger) {

package-lock.json

Lines changed: 33 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,12 @@
3131
"vite": "^5.0.0"
3232
},
3333
"dependencies": {
34+
"cors": "^2.8.5",
3435
"mime-types": "^2.1.35"
3536
},
3637
"devDependencies": {
3738
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
39+
"@types/cors": "^2.8.17",
3840
"@types/mime-types": "^2.1.4",
3941
"@typescript-eslint/eslint-plugin": "^7.0.1",
4042
"@typescript-eslint/parser": "^7.0.1",

0 commit comments

Comments
 (0)