n8n/packages/frontend/editor-ui/src/main.ts
Tuukka Kantola e075f859f9
feat(editor): Add dev-panel for DOM-annotated feedback prompts (no-changelog) (#28761)
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-29 14:42:12 +00:00

81 lines
2.3 KiB
TypeScript

import { createApp } from 'vue';
import '@vue-flow/core/dist/style.css';
import '@vue-flow/core/dist/theme-default.css';
import '@vue-flow/controls/dist/style.css';
import '@vue-flow/minimap/dist/style.css';
import '@vue-flow/node-resizer/dist/style.css';
import 'vue-json-pretty/lib/styles.css';
import '@n8n/design-system/css/index.scss';
// import '@n8n/design-system/css/tailwind/index.css';
import '@/main.scss';
import '@/features/ai/assistant/aiBuilderDiff.scss';
// Ensure i18n HMR owner is evaluated as early as possible in dev
import '@/app/dev/i18nHmr';
import App from '@/app/App.vue';
import router from '@/app/router';
import { i18nInstance } from '@n8n/i18n';
import { TelemetryPlugin } from '@/app/plugins/telemetry';
import { GlobalComponentsPlugin } from '@/app/plugins/components';
import { GlobalDirectivesPlugin } from '@/app/plugins/directives';
import { createPinia, PiniaVuePlugin } from 'pinia';
import { ChartJSPlugin } from '@/app/plugins/chartjs';
import { SentryPlugin } from '@/app/plugins/sentry';
import { registerModuleRoutes } from '@/app/moduleInitializer/moduleInitializer';
import type { VueScanOptions } from 'z-vue-scan';
const pinia = createPinia();
const app = createApp(App);
app.use(SentryPlugin);
// Register module routes
// We do this here so landing straight on a module page works
registerModuleRoutes(router);
app.use(TelemetryPlugin);
app.use(PiniaVuePlugin);
app.use(GlobalComponentsPlugin);
app.use(GlobalDirectivesPlugin);
app.use(pinia);
app.use(router);
app.use(i18nInstance);
app.use(ChartJSPlugin);
if (import.meta.env.VUE_SCAN) {
const { default: VueScan } = await import('z-vue-scan');
app.use<VueScanOptions>(VueScan, {
enable: true,
});
}
app.mount('#app');
if (import.meta.env.DEV) {
void import('@/app/dev/dev-panel').then((m) => m.mountDevPanel());
}
if (!import.meta.env.PROD) {
// Make sure that we get all error messages properly displayed
// as long as we are not in production mode
window.onerror = (message, _source, _lineno, _colno, error) => {
// eslint-disable-next-line @typescript-eslint/no-base-to-string
if (message.toString().includes('ResizeObserver')) {
// That error can apparently be ignored and can probably
// not do anything about it anyway
return;
}
console.error('error caught in main.ts');
console.error(message);
console.error(error);
};
}