n8n/packages/editor-ui/vite.config.ts
Milorad FIlipović bae3098e4e
refactor(editor): Finish pinia migration, remove all vuex dependancies (#4533)
*  Added pinia support. Migrated community nodes module.
*  Added ui pinia store, moved some data from root store to it, updated modals to work with pinia stores
*  Added ui pinia store and migrated a part of the root store
*  Migrated `settings` store to pinia
*  Removing vuex store refs from router
*  Migrated `users` module to pinia store
*  Fixing errors after sync with master
*  One more error after merge
*  Created `workflows` pinia store. Moved large part of root store to it. Started updating references.
*  Finished migrating workflows store to pinia
*  Renaming some getters and actions to make more sense
*  Finished migrating the root store to pinia
*  Migrated ndv store to pinia
*  Renaming main panel dimensions getter so it doesn't clash with data prop name
* ✔️ Fixing lint errors
*  Migrated `templates` store to pinia
*  Migrated the `nodeTypes`store
*  Removed unused pieces of code and oold vuex modules
*  Adding vuex calls to pinia store, fixing wrong references
* 💄 Removing leftover $store refs
*  Added legacy getters and mutations to store to support webhooks
*  Added missing front-end hooks, updated vuex state subscriptions to pinia
* ✔️ Fixing linting errors
*  Removing vue composition api plugin
*  Fixing main sidebar state when loading node view
* 🐛 Fixing an error when activating workflows
* 🐛 Fixing isses with workflow settings and executions auto-refresh
* 🐛 Removing duplicate listeners which cause import error
* 🐛 Fixing route authentication
*  Updating freshly pulled $store refs
*  Adding deleted const
*  Updating store references in ee features. Reseting NodeView credentials update flag when resetting workspace
*  Adding return type to email submission modal
*  Making NodeView only react to paste event when active
* 🐛 Fixing signup view errors
*  Started migrating the `credentials` module to pinia
* 👌 Addressing PR review comments
*  Migrated permissions module to pinia
*  Migrated `nodeCreator`, `tags` and `versions` modules to pinia
*  Implemented webhooks pinia store
*  Removing all leftover vuex files and references
*  Removing final vuex refs
*  Updating expected credentialId type
*  Removing node credentials subscription code, reducing node click debounce timeout
* 🐛 Fixing pushing nodes downstream when inserting new node
* ✔️ Fixing a lint error in new type guard
*  Updating helper reference
* ✔️ Removing unnecessary awaits
*  fix(editor): remove unnecessary imports from NDV
*  Merging mapStores blocks in NodeView
*  fix(editor): make sure JS Plumb not loaded earlier than needed
*  Updating type guard nad credentials subscriptions
*  Updating type guard so it doesn't use `any` type

Co-authored-by: Csaba Tuncsik <csaba@n8n.io>
2022-11-09 10:01:50 +01:00

111 lines
2.7 KiB
TypeScript

import vue from '@vitejs/plugin-vue2';
import { createHtmlPlugin } from 'vite-plugin-html';
import legacy from '@vitejs/plugin-legacy';
import monacoEditorPlugin from "vite-plugin-monaco-editor";
import path, { resolve } from 'path';
import {defineConfig, mergeConfig, PluginOption} from "vite";
import { defineConfig as defineVitestConfig } from 'vitest/config';
import packageJSON from './package.json';
const vendorChunks = ['vue', 'vue-router'];
const ignoreChunks = ['vue2-boring-avatars', 'vue-template-compiler', 'jquery', '@fontsource/open-sans'];
const isScopedPackageToIgnore = (str: string) => /@codemirror\//.test(str);
function renderChunks() {
const { dependencies } = packageJSON;
const chunks: Record<string, string[]> = {};
Object.keys(dependencies).forEach((key) => {
if ([...vendorChunks, ...ignoreChunks].includes(key)) {
return;
}
if (isScopedPackageToIgnore(key)) return;
chunks[key] = [key];
});
return chunks;
}
const publicPath = process.env.VUE_APP_PUBLIC_PATH || '/';
const lodashAliases = ['orderBy', 'camelCase', 'cloneDeep', 'isEqual'].map(name => ({
find: new RegExp(`^lodash.${name}$`, 'i'),
replacement: require.resolve(`lodash-es/${name}`),
}))
export default mergeConfig(
defineConfig({
plugins: [
legacy({
targets: ['defaults', 'not IE 11'],
}),
vue(),
...createHtmlPlugin({
inject: {
data: {
BASE_PATH: publicPath,
},
},
}) as PluginOption[],
monacoEditorPlugin({
publicPath: 'assets/monaco-editor',
customDistPath: (root: string, buildOutDir: string, base: string) => `${root}/${buildOutDir}/assets/monaco-editor`,
}) as PluginOption,
],
resolve: {
alias: [
{ find: '@', replacement: resolve(__dirname, 'src') },
{ find: 'stream', replacement: '' },
{
find: /^n8n-design-system\//,
replacement: resolve(__dirname, '..', 'design-system', 'src') + '/',
},
...lodashAliases,
{
find: /^lodash.(.+)$/,
replacement: 'lodash-es/$1',
},
{
find: 'vue2-boring-avatars',
replacement: require.resolve('vue2-boring-avatars'),
},
{
find: /element-ui\/(packages|lib)\/button$/,
replacement: path.resolve(__dirname, '..', 'design-system/src/components/N8nButton/overrides/ElButton.ts'),
},
],
},
base: publicPath,
envPrefix: 'VUE_APP',
css: {
preprocessorOptions: {
scss: {
additionalData: '\n@use "@/n8n-theme-variables.scss" as *;\n',
},
},
},
build: {
assetsInlineLimit: 0,
sourcemap: false,
rollupOptions: {
output: {
manualChunks: {
vendor: vendorChunks,
...renderChunks(),
},
},
},
},
}),
defineVitestConfig({
test: {
globals: true,
environment: 'jsdom',
setupFiles: ['./src/__tests__/setup.ts'],
},
}),
);