From d94aea43729a3aa8a9a2d610b1a8483d76b43aec Mon Sep 17 00:00:00 2001 From: Alex Grozav Date: Tue, 28 Jan 2025 16:12:58 +0200 Subject: [PATCH] feat: add n8n front end module system --- packages/editor-ui/package.json | 2 + packages/editor-ui/src/main.ts | 15 ++ packages/editor-ui/src/modules.ts | 8 + packages/editor-ui/tsconfig.json | 4 +- packages/editor-ui/vite.config.mts | 8 + packages/modules/common/.gitignore | 24 +++ packages/modules/common/LICENSE | 1 + packages/modules/common/README.md | 3 + packages/modules/common/index.html | 13 ++ packages/modules/common/package.json | 39 +++++ packages/modules/common/src/backend/index.ts | 0 .../modules/common/src/frontend/define.ts | 5 + packages/modules/common/src/frontend/index.ts | 2 + packages/modules/common/src/frontend/types.ts | 14 ++ .../modules/common/src/frontend/vite-env.d.ts | 1 + packages/modules/common/src/index.ts | 2 + packages/modules/common/tsconfig.backend.json | 12 ++ .../modules/common/tsconfig.frontend.json | 12 ++ packages/modules/common/tsconfig.json | 8 + packages/modules/common/tsconfig.vite.json | 20 +++ packages/modules/common/vite.config.ts | 33 ++++ packages/modules/example/.gitignore | 24 +++ packages/modules/example/LICENSE | 1 + packages/modules/example/README.md | 3 + packages/modules/example/index.html | 13 ++ packages/modules/example/package.json | 40 +++++ .../modules/example/src/frontend/index.ts | 9 ++ .../example/src/frontend/vite-env.d.ts | 1 + packages/modules/example/src/index.ts | 1 + .../modules/example/tsconfig.frontend.json | 15 ++ packages/modules/example/tsconfig.json | 4 + packages/modules/example/tsconfig.vite.json | 20 +++ packages/modules/example/vite.config.ts | 33 ++++ pnpm-lock.yaml | 149 ++++++++++-------- pnpm-workspace.yaml | 2 + 35 files changed, 475 insertions(+), 66 deletions(-) create mode 100644 packages/editor-ui/src/modules.ts create mode 100644 packages/modules/common/.gitignore create mode 100644 packages/modules/common/LICENSE create mode 100644 packages/modules/common/README.md create mode 100644 packages/modules/common/index.html create mode 100644 packages/modules/common/package.json create mode 100644 packages/modules/common/src/backend/index.ts create mode 100644 packages/modules/common/src/frontend/define.ts create mode 100644 packages/modules/common/src/frontend/index.ts create mode 100644 packages/modules/common/src/frontend/types.ts create mode 100644 packages/modules/common/src/frontend/vite-env.d.ts create mode 100644 packages/modules/common/src/index.ts create mode 100644 packages/modules/common/tsconfig.backend.json create mode 100644 packages/modules/common/tsconfig.frontend.json create mode 100644 packages/modules/common/tsconfig.json create mode 100644 packages/modules/common/tsconfig.vite.json create mode 100644 packages/modules/common/vite.config.ts create mode 100644 packages/modules/example/.gitignore create mode 100644 packages/modules/example/LICENSE create mode 100644 packages/modules/example/README.md create mode 100644 packages/modules/example/index.html create mode 100644 packages/modules/example/package.json create mode 100644 packages/modules/example/src/frontend/index.ts create mode 100644 packages/modules/example/src/frontend/vite-env.d.ts create mode 100644 packages/modules/example/src/index.ts create mode 100644 packages/modules/example/tsconfig.frontend.json create mode 100644 packages/modules/example/tsconfig.json create mode 100644 packages/modules/example/tsconfig.vite.json create mode 100644 packages/modules/example/vite.config.ts diff --git a/packages/editor-ui/package.json b/packages/editor-ui/package.json index 83a84ded1e..864ef35c0f 100644 --- a/packages/editor-ui/package.json +++ b/packages/editor-ui/package.json @@ -18,6 +18,8 @@ "test:dev": "vitest --silent=false" }, "dependencies": { + "@n8n/module-common": "workspace:*", + "@n8n/module-example": "workspace:*", "@codemirror/autocomplete": "^6.16.0", "@codemirror/commands": "^6.5.0", "@codemirror/lang-javascript": "^6.2.2", diff --git a/packages/editor-ui/src/main.ts b/packages/editor-ui/src/main.ts index 6370591435..97bc42fa4d 100644 --- a/packages/editor-ui/src/main.ts +++ b/packages/editor-ui/src/main.ts @@ -30,6 +30,8 @@ import { createPinia, PiniaVuePlugin } from 'pinia'; import { JsPlumbPlugin } from '@/plugins/jsplumb'; import { ChartJSPlugin } from '@/plugins/chartjs'; import { SentryPlugin } from '@/plugins/sentry'; +import { registerModule } from '@/modules'; +import { FrontEndModuleContext } from '@n8n/module-common'; const pinia = createPinia(); @@ -47,6 +49,19 @@ app.use(router); app.use(i18nInstance); app.use(ChartJSPlugin); +const defaultModules = [import('@n8n/module-example')]; + +const moduleContext: FrontEndModuleContext = { + app, + registerRoute: () => {}, +}; + +for (const module of defaultModules) { + await module.then(({ frontEndModule }) => { + registerModule(frontEndModule, moduleContext); + }); +} + app.mount('#app'); if (!import.meta.env.PROD) { diff --git a/packages/editor-ui/src/modules.ts b/packages/editor-ui/src/modules.ts new file mode 100644 index 0000000000..7078a0c263 --- /dev/null +++ b/packages/editor-ui/src/modules.ts @@ -0,0 +1,8 @@ +import type { FrontEndModule, FrontEndModuleContext } from '@n8n/module-common/frontend/types'; + +export const modules: FrontEndModule[] = []; + +export function registerModule(module: FrontEndModule, context: FrontEndModuleContext) { + modules.push(module); + module.setup(context); +} diff --git a/packages/editor-ui/tsconfig.json b/packages/editor-ui/tsconfig.json index 7ba161b78d..61223c3186 100644 --- a/packages/editor-ui/tsconfig.json +++ b/packages/editor-ui/tsconfig.json @@ -21,7 +21,9 @@ "n8n-design-system": ["../design-system/src/main.ts"], "n8n-design-system/*": ["../design-system/src/*"], "@n8n/chat/*": ["../@n8n/chat/src/*"], - "@n8n/api-types*": ["../@n8n/api-types/src*"] + "@n8n/api-types*": ["../@n8n/api-types/src*"], + "@n8n/module-common*": ["../modules/common/src*"], + "@n8n/module-example*": ["../modules/example/src*"] }, "lib": ["esnext", "dom", "dom.iterable", "scripthost"], // TODO: remove all options below this line diff --git a/packages/editor-ui/vite.config.mts b/packages/editor-ui/vite.config.mts index 0a5c157c39..764b55d7ab 100644 --- a/packages/editor-ui/vite.config.mts +++ b/packages/editor-ui/vite.config.mts @@ -36,6 +36,14 @@ const alias = [ find: /^@n8n\/chat\//, replacement: resolve(__dirname, '..', '@n8n', 'chat', 'src') + '/', }, + { + find: /^@n8n\/module-common$/, + replacement: resolve(__dirname, '..', 'modules', 'common', 'src', 'index.ts'), + }, + { + find: /^@n8n\/module-example$/, + replacement: resolve(__dirname, '..', 'modules', 'example', 'src', 'index.ts'), + }, ...['orderBy', 'camelCase', 'cloneDeep', 'startCase'].map((name) => ({ find: new RegExp(`^lodash.${name}$`, 'i'), replacement: `lodash-es/${name}`, diff --git a/packages/modules/common/.gitignore b/packages/modules/common/.gitignore new file mode 100644 index 0000000000..a547bf36d8 --- /dev/null +++ b/packages/modules/common/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/modules/common/LICENSE b/packages/modules/common/LICENSE new file mode 100644 index 0000000000..54129160b9 --- /dev/null +++ b/packages/modules/common/LICENSE @@ -0,0 +1 @@ +See LICENSE.md in the root of this repository for more information. diff --git a/packages/modules/common/README.md b/packages/modules/common/README.md new file mode 100644 index 0000000000..9a40b1f02e --- /dev/null +++ b/packages/modules/common/README.md @@ -0,0 +1,3 @@ +# @n8n/module-front-end + +@TODO: Write a description here diff --git a/packages/modules/common/index.html b/packages/modules/common/index.html new file mode 100644 index 0000000000..dde16aaf36 --- /dev/null +++ b/packages/modules/common/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + Vue + TS + + +
+ + + diff --git a/packages/modules/common/package.json b/packages/modules/common/package.json new file mode 100644 index 0000000000..7fda767265 --- /dev/null +++ b/packages/modules/common/package.json @@ -0,0 +1,39 @@ +{ + "name": "@n8n/module-common", + "version": "0.0.0", + "type": "module", + "files": [ + "dist", + "LICENSE", + "README.md" + ], + "types": "./dist/n8n-module-common.d.ts", + "main": "./dist/n8n-module-common.umd.cjs", + "module": "./dist/n8n-module-common.js", + "exports": { + ".": { + "types": "./dist/n8n-module-common.d.ts", + "import": "./dist/n8n-module-common.js", + "require": "./dist/n8n-module-common.umd.cjs" + }, + "./*": "./*" + }, + "scripts": { + "dev": "vite", + "build": "vue-tsc -b && vite build", + "preview": "vite preview" + }, + "peerDependencies": { + "vue": "catalog:frontend", + "vue-router": "catalog:frontend" + }, + "devDependencies": { + "@vitejs/plugin-vue": "catalog:frontend", + "@vue/tsconfig": "catalog:frontend", + "typescript": "~5.6.2", + "vite": "catalog:frontend", + "vue": "catalog:frontend", + "vue-router": "catalog:frontend", + "vue-tsc": "catalog:frontend" + } +} diff --git a/packages/modules/common/src/backend/index.ts b/packages/modules/common/src/backend/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/common/src/frontend/define.ts b/packages/modules/common/src/frontend/define.ts new file mode 100644 index 0000000000..19f2c27725 --- /dev/null +++ b/packages/modules/common/src/frontend/define.ts @@ -0,0 +1,5 @@ +import type { FrontEndModule } from './types.ts'; + +export function defineFrontEndModule(module: FrontEndModule): FrontEndModule { + return module; +} diff --git a/packages/modules/common/src/frontend/index.ts b/packages/modules/common/src/frontend/index.ts new file mode 100644 index 0000000000..73af88fb2b --- /dev/null +++ b/packages/modules/common/src/frontend/index.ts @@ -0,0 +1,2 @@ +export * from './define'; +export * from './types'; diff --git a/packages/modules/common/src/frontend/types.ts b/packages/modules/common/src/frontend/types.ts new file mode 100644 index 0000000000..a33b5948e3 --- /dev/null +++ b/packages/modules/common/src/frontend/types.ts @@ -0,0 +1,14 @@ +import type { RouteRecordRaw } from 'vue-router'; +import type { App } from 'vue'; + +export type FrontEndModuleContext = { + app: App; + defineRoutes: (routes: RouteRecordRaw[]) => void; +}; + +export type FrontEndModuleSetupFn = (context: FrontEndModuleContext) => void; + +export type FrontEndModule = { + name: string; + setup: FrontEndModuleSetupFn; +}; diff --git a/packages/modules/common/src/frontend/vite-env.d.ts b/packages/modules/common/src/frontend/vite-env.d.ts new file mode 100644 index 0000000000..11f02fe2a0 --- /dev/null +++ b/packages/modules/common/src/frontend/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/modules/common/src/index.ts b/packages/modules/common/src/index.ts new file mode 100644 index 0000000000..a134bc204f --- /dev/null +++ b/packages/modules/common/src/index.ts @@ -0,0 +1,2 @@ +export * from './backend'; +export * from './frontend'; diff --git a/packages/modules/common/tsconfig.backend.json b/packages/modules/common/tsconfig.backend.json new file mode 100644 index 0000000000..d0ddf9c3c1 --- /dev/null +++ b/packages/modules/common/tsconfig.backend.json @@ -0,0 +1,12 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src/backend/**/*.ts", "src/backend/**/*.tsx", "src/backend/**/*.vue"] +} diff --git a/packages/modules/common/tsconfig.frontend.json b/packages/modules/common/tsconfig.frontend.json new file mode 100644 index 0000000000..afe26b47d3 --- /dev/null +++ b/packages/modules/common/tsconfig.frontend.json @@ -0,0 +1,12 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src/frontend/**/*.ts", "src/frontend/**/*.tsx", "src/frontend/**/*.vue"] +} diff --git a/packages/modules/common/tsconfig.json b/packages/modules/common/tsconfig.json new file mode 100644 index 0000000000..43104bf98d --- /dev/null +++ b/packages/modules/common/tsconfig.json @@ -0,0 +1,8 @@ +{ + "files": ["./src/index.ts"], + "references": [ + { "path": "./tsconfig.backend.json" }, + { "path": "./tsconfig.frontend.json" }, + { "path": "./tsconfig.vite.json" } + ] +} diff --git a/packages/modules/common/tsconfig.vite.json b/packages/modules/common/tsconfig.vite.json new file mode 100644 index 0000000000..5a2a3a0585 --- /dev/null +++ b/packages/modules/common/tsconfig.vite.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/packages/modules/common/vite.config.ts b/packages/modules/common/vite.config.ts new file mode 100644 index 0000000000..b3fa8efcd6 --- /dev/null +++ b/packages/modules/common/vite.config.ts @@ -0,0 +1,33 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vite'; +import vue from '@vitejs/plugin-vue'; +import dts from 'vite-plugin-dts'; +import { configDefaults as vitestConfig } from 'vitest/config'; + +const cwd = process.cwd(); + +export default defineConfig({ + plugins: [vue(), dts({ rollupTypes: true })], + build: { + lib: { + entry: resolve(cwd, 'src', 'index.ts'), + name: 'n8nModuleCommon', + fileName: 'n8n-module-common', + }, + rollupOptions: { + external: ['vue'], + output: { + globals: { + vue: 'Vue', + }, + }, + }, + }, + test: { + globals: true, + environment: 'jsdom', + setupFiles: ['src/__tests__/setup.ts'], + include: ['src/**/*.spec.{ts,tsx}'], + exclude: vitestConfig.exclude, + }, +}); diff --git a/packages/modules/example/.gitignore b/packages/modules/example/.gitignore new file mode 100644 index 0000000000..a547bf36d8 --- /dev/null +++ b/packages/modules/example/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/modules/example/LICENSE b/packages/modules/example/LICENSE new file mode 100644 index 0000000000..54129160b9 --- /dev/null +++ b/packages/modules/example/LICENSE @@ -0,0 +1 @@ +See LICENSE.md in the root of this repository for more information. diff --git a/packages/modules/example/README.md b/packages/modules/example/README.md new file mode 100644 index 0000000000..9a40b1f02e --- /dev/null +++ b/packages/modules/example/README.md @@ -0,0 +1,3 @@ +# @n8n/module-front-end + +@TODO: Write a description here diff --git a/packages/modules/example/index.html b/packages/modules/example/index.html new file mode 100644 index 0000000000..dde16aaf36 --- /dev/null +++ b/packages/modules/example/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + Vue + TS + + +
+ + + diff --git a/packages/modules/example/package.json b/packages/modules/example/package.json new file mode 100644 index 0000000000..e9be08485d --- /dev/null +++ b/packages/modules/example/package.json @@ -0,0 +1,40 @@ +{ + "name": "@n8n/module-example", + "version": "0.0.0", + "type": "module", + "files": [ + "dist", + "LICENSE", + "README.md" + ], + "types": "./dist/n8n-module-example.d.ts", + "main": "./dist/n8n-module-example.umd.cjs", + "module": "./dist/n8n-module-example.js", + "exports": { + ".": { + "types": "./dist/n8n-module-example.d.ts", + "import": "./dist/n8n-module-example.js", + "require": "./dist/n8n-module-example.umd.cjs" + }, + "./*": "./*" + }, + "scripts": { + "dev": "vite", + "build": "vue-tsc -b && vite build", + "preview": "vite preview" + }, + "peerDependencies": { + "vue": "catalog:frontend" + }, + "dependencies": { + "@n8n/module-common": "workspace:*" + }, + "devDependencies": { + "@vitejs/plugin-vue": "catalog:frontend", + "@vue/tsconfig": "catalog:frontend", + "typescript": "~5.6.2", + "vite": "catalog:frontend", + "vue": "catalog:frontend", + "vue-tsc": "catalog:frontend" + } +} diff --git a/packages/modules/example/src/frontend/index.ts b/packages/modules/example/src/frontend/index.ts new file mode 100644 index 0000000000..5697a55863 --- /dev/null +++ b/packages/modules/example/src/frontend/index.ts @@ -0,0 +1,9 @@ +import { defineFrontEndModule } from '@n8n/module-common'; + +export const frontEndModule = defineFrontEndModule({ + name: 'example', + setup: (context) => { + console.log('registered example', context); + // defineRoutes([]); + }, +}); diff --git a/packages/modules/example/src/frontend/vite-env.d.ts b/packages/modules/example/src/frontend/vite-env.d.ts new file mode 100644 index 0000000000..11f02fe2a0 --- /dev/null +++ b/packages/modules/example/src/frontend/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/modules/example/src/index.ts b/packages/modules/example/src/index.ts new file mode 100644 index 0000000000..76822b20f3 --- /dev/null +++ b/packages/modules/example/src/index.ts @@ -0,0 +1 @@ +export * from './frontend'; diff --git a/packages/modules/example/tsconfig.frontend.json b/packages/modules/example/tsconfig.frontend.json new file mode 100644 index 0000000000..ce651f1c60 --- /dev/null +++ b/packages/modules/example/tsconfig.frontend.json @@ -0,0 +1,15 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "paths": { + "@n8n/module-common*": ["../common/src*"] + }, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src/frontend/**/*.ts", "src/frontend/**/*.tsx", "src/frontend/**/*.vue"] +} diff --git a/packages/modules/example/tsconfig.json b/packages/modules/example/tsconfig.json new file mode 100644 index 0000000000..0328bc29aa --- /dev/null +++ b/packages/modules/example/tsconfig.json @@ -0,0 +1,4 @@ +{ + "files": ["./src/index.ts"], + "references": [{ "path": "./tsconfig.frontend.json" }, { "path": "./tsconfig.vite.json" }] +} diff --git a/packages/modules/example/tsconfig.vite.json b/packages/modules/example/tsconfig.vite.json new file mode 100644 index 0000000000..5a2a3a0585 --- /dev/null +++ b/packages/modules/example/tsconfig.vite.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/packages/modules/example/vite.config.ts b/packages/modules/example/vite.config.ts new file mode 100644 index 0000000000..c4b3d12fad --- /dev/null +++ b/packages/modules/example/vite.config.ts @@ -0,0 +1,33 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vite'; +import vue from '@vitejs/plugin-vue'; +import dts from 'vite-plugin-dts'; +import { configDefaults as vitestConfig } from 'vitest/config'; + +const cwd = process.cwd(); + +export default defineConfig({ + plugins: [vue(), dts({ rollupTypes: true })], + build: { + lib: { + entry: resolve(cwd, 'src', 'index.ts'), + name: 'n8nModuleExample', + fileName: 'n8n-module-example', + }, + rollupOptions: { + external: ['vue'], + output: { + globals: { + vue: 'Vue', + }, + }, + }, + }, + test: { + globals: true, + environment: 'jsdom', + setupFiles: ['src/__tests__/setup.ts'], + include: ['src/**/*.spec.{ts,tsx}'], + exclude: vitestConfig.exclude, + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fc76691344..ddee793664 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -85,6 +85,9 @@ catalogs: '@vitest/coverage-v8': specifier: ^3.0.2 version: 3.0.2 + '@vue/tsconfig': + specifier: ^0.7.0 + version: 0.7.0 highlight.js: specifier: ^11.8.0 version: 11.9.0 @@ -1429,6 +1432,12 @@ importers: '@n8n/codemirror-lang-sql': specifier: ^1.0.2 version: 1.0.2(@codemirror/view@6.26.3)(@lezer/common@1.1.0) + '@n8n/module-common': + specifier: workspace:* + version: link:../modules/common + '@n8n/module-example': + specifier: workspace:* + version: link:../modules/example '@n8n/permissions': specifier: workspace:* version: link:../@n8n/permissions @@ -1647,6 +1656,55 @@ importers: specifier: ^2.1.10 version: 2.1.10(patch_hash=z2iuqlt7ype4qnrwd5eymeecl4)(typescript@5.7.2) + packages/modules/common: + devDependencies: + '@vitejs/plugin-vue': + specifier: catalog:frontend + version: 5.2.1(vite@6.0.2(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1))(vue@3.5.13(typescript@5.7.2)) + '@vue/tsconfig': + specifier: catalog:frontend + version: 0.7.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)) + typescript: + specifier: ^5.7.2 + version: 5.7.2 + vite: + specifier: catalog:frontend + version: 6.0.2(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + vue: + specifier: catalog:frontend + version: 3.5.13(typescript@5.7.2) + vue-router: + specifier: catalog:frontend + version: 4.5.0(vue@3.5.13(typescript@5.7.2)) + vue-tsc: + specifier: ^2.1.10 + version: 2.1.10(patch_hash=z2iuqlt7ype4qnrwd5eymeecl4)(typescript@5.7.2) + + packages/modules/example: + dependencies: + '@n8n/module-common': + specifier: workspace:* + version: link:../common + devDependencies: + '@vitejs/plugin-vue': + specifier: catalog:frontend + version: 5.2.1(vite@6.0.2(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1))(vue@3.5.13(typescript@5.7.2)) + '@vue/tsconfig': + specifier: catalog:frontend + version: 0.7.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)) + typescript: + specifier: ^5.7.2 + version: 5.7.2 + vite: + specifier: catalog:frontend + version: 6.0.2(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + vue: + specifier: catalog:frontend + version: 3.5.13(typescript@5.7.2) + vue-tsc: + specifier: ^2.1.10 + version: 2.1.10(patch_hash=z2iuqlt7ype4qnrwd5eymeecl4)(typescript@5.7.2) + packages/node-dev: dependencies: '@n8n/di': @@ -2534,10 +2592,6 @@ packages: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} @@ -2546,10 +2600,6 @@ packages: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} @@ -2578,16 +2628,6 @@ packages: resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} engines: {node: '>=6.9.0'} - '@babel/parser@7.25.6': - resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@7.26.2': - resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.26.3': resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} engines: {node: '>=6.0.0'} @@ -3051,14 +3091,6 @@ packages: resolution: {integrity: sha512-yTmc8J+Sj8yLzwr4PD5Xb/WF3bOYu2C2OoSZPzbuqRm4n98XirsbzaX+GloeO376UnSYIYJ4NCanwV5/ugZkwA==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.6': - resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.26.0': - resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} - engines: {node: '>=6.9.0'} - '@babel/types@7.26.3': resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} engines: {node: '>=6.9.0'} @@ -6371,6 +6403,17 @@ packages: '@vue/test-utils@2.4.6': resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==} + '@vue/tsconfig@0.7.0': + resolution: {integrity: sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==} + peerDependencies: + typescript: ^5.7.2 + vue: ^3.4.0 + peerDependenciesMeta: + typescript: + optional: true + vue: + optional: true + '@vueuse/components@10.11.0': resolution: {integrity: sha512-ZvLZI23d5ZAtva5fGyYh/jQtZO8l+zJ5tAXyYNqHJZkq1o5yWyqZhENvSv5mfDmN5IuAOp4tq02mRmX/ipFGcg==} @@ -12603,10 +12646,6 @@ packages: tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -14793,10 +14832,10 @@ snapshots: '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.2 + '@babel/parser': 7.26.3 '@babel/template': 7.25.9 '@babel/traverse': 7.26.3 - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 convert-source-map: 2.0.0 debug: 4.3.7 gensync: 1.0.0-beta.2 @@ -14829,7 +14868,7 @@ snapshots: '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 '@babel/helper-compilation-targets@7.23.6': dependencies: @@ -14903,7 +14942,7 @@ snapshots: '@babel/helper-module-imports@7.25.9': dependencies: '@babel/traverse': 7.26.3 - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 transitivePeerDependencies: - supports-color @@ -14958,7 +14997,7 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: '@babel/traverse': 7.26.3 - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 transitivePeerDependencies: - supports-color @@ -14966,14 +15005,10 @@ snapshots: dependencies: '@babel/types': 7.26.3 - '@babel/helper-string-parser@7.24.8': {} - '@babel/helper-string-parser@7.25.9': {} '@babel/helper-validator-identifier@7.22.20': {} - '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-identifier@7.25.9': {} '@babel/helper-validator-option@7.23.5': {} @@ -15003,19 +15038,11 @@ snapshots: '@babel/highlight@7.24.6': dependencies: - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.25.9 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/parser@7.25.6': - dependencies: - '@babel/types': 7.25.6 - - '@babel/parser@7.26.2': - dependencies: - '@babel/types': 7.26.3 - '@babel/parser@7.26.3': dependencies: '@babel/types': 7.26.3 @@ -15543,7 +15570,7 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 esutils: 2.0.3 '@babel/runtime@7.24.7': @@ -15589,17 +15616,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.25.6': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - - '@babel/types@7.26.0': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/types@7.26.3': dependencies: '@babel/helper-string-parser': 7.25.9 @@ -19384,7 +19400,7 @@ snapshots: '@vue/compiler-core@3.5.13': dependencies: - '@babel/parser': 7.25.6 + '@babel/parser': 7.26.3 '@vue/shared': 3.5.13 entities: 4.5.0 estree-walker: 2.0.2 @@ -19403,7 +19419,7 @@ snapshots: '@vue/compiler-ssr': 3.5.13 '@vue/shared': 3.5.13 estree-walker: 2.0.2 - magic-string: 0.30.14 + magic-string: 0.30.17 postcss: 8.4.49 source-map-js: 1.2.1 @@ -19488,6 +19504,11 @@ snapshots: js-beautify: 1.14.9 vue-component-type-helpers: 2.2.0 + '@vue/tsconfig@0.7.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2))': + optionalDependencies: + typescript: 5.7.2 + vue: 3.5.13(typescript@5.7.2) + '@vueuse/components@10.11.0(vue@3.5.13(typescript@5.7.2))': dependencies: '@vueuse/core': 10.11.0(vue@3.5.13(typescript@5.7.2)) @@ -23486,7 +23507,7 @@ snapshots: '@babel/generator': 7.22.9 '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.24.0) '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.24.0) - '@babel/types': 7.25.6 + '@babel/types': 7.26.3 '@jest/expect-utils': 29.6.2 '@jest/transform': 29.6.2 '@jest/types': 29.6.1 @@ -27257,8 +27278,6 @@ snapshots: tmpl@1.0.5: {} - to-fast-properties@2.0.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 89031796f2..da45157f43 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,6 @@ packages: - packages/* + - packages/modules/**/* - packages/@n8n/* - packages/@n8n_io/* - cypress @@ -34,6 +35,7 @@ catalogs: frontend: '@vitest/coverage-v8': ^3.0.2 '@vitejs/plugin-vue': ^5.2.1 + '@vue/tsconfig': ^0.7.0 '@sentry/vue': ^8.33.1 vite: ^6.0.2 vitest: ^3.0.2