vite.config.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import path from 'node:path';
  2. import react from '@vitejs/plugin-react';
  3. import glob from 'glob';
  4. import { nodeExternals } from 'rollup-plugin-node-externals';
  5. import type { Plugin } from 'vite';
  6. import { defineConfig } from 'vite';
  7. import dts from 'vite-plugin-dts';
  8. import { WebSocketServer } from 'ws';
  9. const excludeFiles = [
  10. '**/components/playground/*',
  11. '**/main.tsx',
  12. '**/vite-env.d.ts',
  13. ];
  14. const devWebSocketPlugin = (): Plugin => ({
  15. name: 'dev-y-websocket',
  16. apply: 'serve',
  17. configureServer(server) {
  18. if (!server.httpServer) return;
  19. // eslint-disable-next-line @typescript-eslint/no-require-imports
  20. const { setupWSConnection } = require('y-websocket/bin/utils');
  21. const wss = new WebSocketServer({ noServer: true });
  22. server.httpServer.on('upgrade', (request, socket, head) => {
  23. const url = request.url ?? '';
  24. if (!url.startsWith('/yjs/')) return;
  25. const pageId = url.slice('/yjs/'.length).split('?')[0];
  26. wss.handleUpgrade(request, socket, head, (ws) => {
  27. wss.emit('connection', ws, request);
  28. setupWSConnection(ws, request, { docName: pageId });
  29. });
  30. });
  31. },
  32. });
  33. // https://vitejs.dev/config/
  34. export default defineConfig({
  35. plugins: [
  36. react(),
  37. devWebSocketPlugin(),
  38. dts({
  39. entryRoot: 'src',
  40. exclude: [...excludeFiles],
  41. copyDtsFiles: true,
  42. }),
  43. {
  44. ...nodeExternals({
  45. devDeps: true,
  46. builtinsPrefix: 'ignore',
  47. }),
  48. enforce: 'pre',
  49. },
  50. ],
  51. build: {
  52. outDir: 'dist',
  53. sourcemap: true,
  54. lib: {
  55. entry: glob.sync(path.resolve(__dirname, 'src/**/*.{ts,tsx}'), {
  56. ignore: [...excludeFiles, '**/*.spec.ts'],
  57. }),
  58. name: 'editor-libs',
  59. formats: ['es'],
  60. },
  61. rollupOptions: {
  62. output: {
  63. preserveModules: true,
  64. preserveModulesRoot: 'src',
  65. },
  66. },
  67. },
  68. });