diff --git a/packages/frontend/@n8n/chat/vite.config.mts b/packages/frontend/@n8n/chat/vite.config.mts index d8d5e8016e..262321473d 100644 --- a/packages/frontend/@n8n/chat/vite.config.mts +++ b/packages/frontend/@n8n/chat/vite.config.mts @@ -1,10 +1,11 @@ -import { defineConfig, mergeConfig } from 'vite'; +import { defineConfig, mergeConfig, PluginOption } from 'vite'; import { resolve } from 'path'; -import { renameSync } from 'fs'; +import { renameSync, writeFileSync, readFileSync } from 'fs'; import vue from '@vitejs/plugin-vue'; import icons from 'unplugin-icons/vite'; import dts from 'vite-plugin-dts'; import { vitestConfig } from '@n8n/vitest-config/frontend'; +import pkg from './package.json'; import iconsResolver from 'unplugin-icons/resolver'; import components from 'unplugin-vue-components/vite'; @@ -12,6 +13,8 @@ const includeVue = process.env.INCLUDE_VUE === 'true'; const srcPath = resolve(__dirname, 'src'); const packagesDir = resolve(__dirname, '..', '..', '..'); +const banner = `/*! Package version @n8n/chat@${pkg.version} */`; + // https://vitejs.dev/config/ export default mergeConfig( defineConfig({ @@ -49,6 +52,19 @@ export default mergeConfig( } }, }, + { + name: 'inject-build-version', + closeBundle() { + const cssPath = resolve(__dirname, 'dist', 'style.css'); + try { + const cssContent = readFileSync(cssPath, 'utf-8'); + const updatedCssContent = banner + '\n' + cssContent; + writeFileSync(cssPath, updatedCssContent, 'utf-8'); + } catch (error) { + console.error('Failed to inject build version into CSS file:', error); + } + }, + }, ], resolve: { alias: [ @@ -86,6 +102,8 @@ export default mergeConfig( external: includeVue ? [] : ['vue'], output: { exports: 'named', + // inject banner on top of all JS files + banner, // Provide global variables to use in the UMD build // for externalized deps globals: includeVue