| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import path from 'node:path';
- import { YJS_WEBSOCKET_BASE_PATH } from '@growi/core/dist/consts';
- import react from '@vitejs/plugin-react';
- import glob from 'glob';
- import { nodeExternals } from 'rollup-plugin-node-externals';
- import type { Plugin } from 'vite';
- import { defineConfig } from 'vite';
- import dts from 'vite-plugin-dts';
- const YJS_PATH_PREFIX = `${YJS_WEBSOCKET_BASE_PATH}/`;
- const excludeFiles = [
- '**/components/playground/*',
- '**/main.tsx',
- '**/vite-env.d.ts',
- ];
- const devWebSocketPlugin = (): Plugin => ({
- name: 'dev-y-websocket',
- apply: 'serve',
- configureServer(server) {
- if (!server.httpServer) return;
- // eslint-disable-next-line @typescript-eslint/no-require-imports
- const { setupWSConnection } = require('y-websocket/bin/utils');
- // eslint-disable-next-line @typescript-eslint/no-require-imports
- const { WebSocketServer } = require('ws');
- const wss = new WebSocketServer({ noServer: true });
- server.httpServer.on('upgrade', (request, socket, head) => {
- const url = request.url ?? '';
- if (!url.startsWith(YJS_PATH_PREFIX)) return;
- const pageId = url.slice(YJS_PATH_PREFIX.length).split('?')[0];
- wss.handleUpgrade(request, socket, head, (ws) => {
- wss.emit('connection', ws, request);
- setupWSConnection(ws, request, { docName: pageId });
- });
- });
- },
- });
- // https://vitejs.dev/config/
- export default defineConfig({
- plugins: [
- react(),
- devWebSocketPlugin(),
- dts({
- entryRoot: 'src',
- exclude: [...excludeFiles],
- copyDtsFiles: true,
- }),
- {
- ...nodeExternals({
- devDeps: true,
- builtinsPrefix: 'ignore',
- }),
- enforce: 'pre',
- },
- ],
- build: {
- outDir: 'dist',
- sourcemap: true,
- lib: {
- entry: glob.sync(path.resolve(__dirname, 'src/**/*.{ts,tsx}'), {
- ignore: [...excludeFiles, '**/*.spec.ts'],
- }),
- name: 'editor-libs',
- formats: ['es'],
- },
- rollupOptions: {
- output: {
- preserveModules: true,
- preserveModulesRoot: 'src',
- },
- },
- },
- });
|