index.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { Plugin } from "vite";
  2. import { parseJson } from "./utils";
  3. import { createEps, createMenu, createSvg, createTag, getEps } from "./lib";
  4. import { getModules } from "./lib/module";
  5. export function cool(): Plugin {
  6. return {
  7. name: "vite-cool",
  8. enforce: "pre",
  9. configureServer(server) {
  10. server.middlewares.use(async (req, res, next) => {
  11. function done(data: any) {
  12. res.writeHead(200, { "Content-Type": "text/html;charset=UTF-8" });
  13. res.end(JSON.stringify(data));
  14. }
  15. if (req.url?.includes("__cool")) {
  16. const body = await parseJson(req);
  17. let next: any;
  18. switch (req.url) {
  19. // 快速创建菜单
  20. case "/__cool_createMenu":
  21. next = createMenu(body);
  22. break;
  23. // 创建描述文件
  24. case "/__cool_eps":
  25. next = createEps(body);
  26. break;
  27. }
  28. if (next) {
  29. next.then((data: any) => {
  30. done({
  31. code: 1000,
  32. data
  33. });
  34. }).catch((err: Error) => {
  35. done({
  36. code: 1001,
  37. message: err.message
  38. });
  39. });
  40. } else {
  41. done({
  42. code: 1000
  43. });
  44. }
  45. } else {
  46. next();
  47. }
  48. });
  49. },
  50. transform(code, id) {
  51. return createTag(code, id);
  52. },
  53. transformIndexHtml(html) {
  54. return createSvg(html);
  55. },
  56. config() {
  57. return {
  58. define: {
  59. __EPS__: getEps(),
  60. __MODULE_DIRS__: getModules()
  61. }
  62. };
  63. }
  64. };
  65. }