From 6cc91aa8e88fa1cbc528f1daad42479ce0873d18 Mon Sep 17 00:00:00 2001 From: Alex Grozav Date: Fri, 4 Apr 2025 07:40:08 +0300 Subject: [PATCH] feat: Add n8n extension manifest schema (no-changelog) (#14382) --- packages/@n8n/extension-sdk/package.json | 13 +- packages/@n8n/extension-sdk/schema.json | 107 ++++++++++++ .../scripts/create-json-schema.ts | 16 ++ packages/@n8n/extension-sdk/src/index.ts | 1 + packages/@n8n/extension-sdk/src/schema.ts | 96 ++++++++++ .../@n8n/extension-sdk/tsconfig.common.json | 7 + packages/@n8n/extension-sdk/tsconfig.json | 12 +- packages/@n8n/extension-sdk/tsup.config.ts | 8 +- pnpm-lock.yaml | 164 +++++++++++------- pnpm-workspace.yaml | 2 + 10 files changed, 357 insertions(+), 69 deletions(-) create mode 100644 packages/@n8n/extension-sdk/schema.json create mode 100644 packages/@n8n/extension-sdk/scripts/create-json-schema.ts create mode 100644 packages/@n8n/extension-sdk/src/schema.ts create mode 100644 packages/@n8n/extension-sdk/tsconfig.common.json diff --git a/packages/@n8n/extension-sdk/package.json b/packages/@n8n/extension-sdk/package.json index 529b9b0f61..3288ebcd83 100644 --- a/packages/@n8n/extension-sdk/package.json +++ b/packages/@n8n/extension-sdk/package.json @@ -4,6 +4,7 @@ "type": "module", "files": [ "dist", + "schema.json", "LICENSE", "README.md" ], @@ -33,7 +34,8 @@ "dev": "tsup --watch", "typecheck:frontend": "vue-tsc --noEmit --project tsconfig.frontend.json", "typecheck:backend": "tsc --noEmit --project tsconfig.backend.json", - "build": "pnpm \"/^typecheck:.+/\" && pnpm clean && tsup", + "build": "pnpm \"/^typecheck:.+/\" && pnpm clean && tsup && pnpm create-json-schema", + "create-json-schema": "tsx scripts/create-json-schema.ts", "preview": "vite preview" }, "peerDependencies": { @@ -48,7 +50,12 @@ "vite": "catalog:frontend", "vue": "catalog:frontend", "vue-router": "catalog:frontend", - "vue-tsc": "catalog:frontend" + "vue-tsc": "catalog:frontend", + "zod-to-json-schema": "catalog:", + "tsx": "catalog:" }, - "license": "https://docs.n8n.io/sustainable-use-license/" + "license": "https://docs.n8n.io/sustainable-use-license/", + "dependencies": { + "zod": "catalog:" + } } diff --git a/packages/@n8n/extension-sdk/schema.json b/packages/@n8n/extension-sdk/schema.json new file mode 100644 index 0000000000..a1969ae6f8 --- /dev/null +++ b/packages/@n8n/extension-sdk/schema.json @@ -0,0 +1,107 @@ +{ + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "displayName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "publisher": { + "type": "string" + }, + "version": { + "type": "string" + }, + "categories": { + "type": "array", + "items": { + "type": "string" + } + }, + "entry": { + "type": "object", + "properties": { + "backend": { + "type": "string" + }, + "frontend": { + "type": "string" + } + }, + "required": ["backend", "frontend"], + "additionalProperties": false + }, + "minSDKVersion": { + "type": "string" + }, + "permissions": { + "type": "object", + "properties": { + "frontend": { + "type": "array", + "items": { + "type": "string" + } + }, + "backend": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["frontend", "backend"], + "additionalProperties": false + }, + "events": { + "type": "array", + "items": { + "type": "string" + } + }, + "extends": { + "type": "object", + "properties": { + "views": { + "type": "object", + "properties": { + "workflows": { + "type": "object", + "properties": { + "header": { + "type": "string" + } + }, + "required": ["header"], + "additionalProperties": false + } + }, + "required": ["workflows"], + "additionalProperties": false + } + }, + "required": ["views"], + "additionalProperties": false + } + }, + "required": [ + "name", + "displayName", + "description", + "publisher", + "version", + "categories", + "entry", + "minSDKVersion", + "permissions", + "events", + "extends" + ], + "additionalProperties": false, + "title": "N8nExtensionSchema", + "$schema": "http://json-schema.org/draft-07/schema#" +} diff --git a/packages/@n8n/extension-sdk/scripts/create-json-schema.ts b/packages/@n8n/extension-sdk/scripts/create-json-schema.ts new file mode 100644 index 0000000000..f7fba8b9e4 --- /dev/null +++ b/packages/@n8n/extension-sdk/scripts/create-json-schema.ts @@ -0,0 +1,16 @@ +import { extensionManifestSchema } from '../src/schema'; +import { zodToJsonSchema } from 'zod-to-json-schema'; +import { writeFile } from 'fs/promises'; +import { resolve } from 'path'; + +const __dirname = new URL('.', import.meta.url).pathname; +const rootDir = resolve(__dirname, '..'); + +const jsonSchema = zodToJsonSchema(extensionManifestSchema, { + name: 'N8nExtensionSchema', + nameStrategy: 'title', +}); + +(async () => { + await writeFile(resolve(rootDir, 'schema.json'), JSON.stringify(jsonSchema, null, 2)); +})(); diff --git a/packages/@n8n/extension-sdk/src/index.ts b/packages/@n8n/extension-sdk/src/index.ts index e69de29bb2..e27a6e2f57 100644 --- a/packages/@n8n/extension-sdk/src/index.ts +++ b/packages/@n8n/extension-sdk/src/index.ts @@ -0,0 +1 @@ +export * from './schema'; diff --git a/packages/@n8n/extension-sdk/src/schema.ts b/packages/@n8n/extension-sdk/src/schema.ts new file mode 100644 index 0000000000..0b6d47b36f --- /dev/null +++ b/packages/@n8n/extension-sdk/src/schema.ts @@ -0,0 +1,96 @@ +import { z } from 'zod'; + +/** + * Schema for the extension configuration. + */ +export const extensionManifestSchema = z.object({ + /** + * Name of the extension package. + */ + name: z.string(), + + /** + * The display name of the extension. + */ + displayName: z.string(), + + /** + * Description of the extension package. + */ + description: z.string(), + + /** + * Publisher of the extension. + */ + publisher: z.string(), + + /** + * Version of the extension package. + */ + version: z.string(), + + /** + * Category the extension belongs to. + */ + categories: z.array(z.string()), + + /** + * Setup paths for backend and frontend code entry points. + */ + entry: z.object({ + /** + * Path to the backend entry file. + */ + backend: z.string(), + /** + * Path to the frontend entry file. + */ + frontend: z.string(), + }), + + /** + * Minimum SDK version required to run the extension. + */ + minSDKVersion: z.string(), + + /** + * Permissions object specifying allowed access for frontend and backend. + */ + permissions: z.object({ + /** + * List of frontend permissions (array of strings). + */ + frontend: z.array(z.string()), + /** + * List of backend permissions (array of strings). + */ + backend: z.array(z.string()), + }), + + /** + * List of events that the extension listens to. + */ + events: z.array(z.string()), + + /** + * Define extension points for existing functionalities. + */ + extends: z.object({ + /** + * Extends the views configuration. + */ + views: z.object({ + /** + * Extends the workflows view configuration. + */ + workflows: z.object({ + /** + * Header component for the workflows view. + */ + header: z.string(), + }), + }), + }), +}); + +export type ExtensionManifest = z.infer; diff --git a/packages/@n8n/extension-sdk/tsconfig.common.json b/packages/@n8n/extension-sdk/tsconfig.common.json new file mode 100644 index 0000000000..1cad3f9425 --- /dev/null +++ b/packages/@n8n/extension-sdk/tsconfig.common.json @@ -0,0 +1,7 @@ +{ + "extends": "@n8n/typescript-config/tsconfig.common.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.backend.tsbuildinfo" + }, + "include": ["src/*.ts"] +} diff --git a/packages/@n8n/extension-sdk/tsconfig.json b/packages/@n8n/extension-sdk/tsconfig.json index 6e87353673..4a6ca0badf 100644 --- a/packages/@n8n/extension-sdk/tsconfig.json +++ b/packages/@n8n/extension-sdk/tsconfig.json @@ -1,3 +1,13 @@ { - "references": [{ "path": "./tsconfig.backend.json" }, { "path": "./tsconfig.frontend.json" }] + "references": [ + { + "path": "./tsconfig.common.json" + }, + { + "path": "./tsconfig.backend.json" + }, + { + "path": "./tsconfig.frontend.json" + } + ] } diff --git a/packages/@n8n/extension-sdk/tsup.config.ts b/packages/@n8n/extension-sdk/tsup.config.ts index d8b81c3311..e8c74c9408 100644 --- a/packages/@n8n/extension-sdk/tsup.config.ts +++ b/packages/@n8n/extension-sdk/tsup.config.ts @@ -3,12 +3,12 @@ import { defineConfig } from 'tsup'; export default defineConfig([ { clean: false, - entry: ['src/index.ts'], + entry: ['src/*.ts', '!src/*.test.ts', '!src/*.d.ts', '!src/__tests__/**/*'], outDir: 'dist', format: ['cjs', 'esm'], dts: true, sourcemap: true, - tsconfig: 'tsconfig.json', + tsconfig: 'tsconfig.common.json', }, { clean: false, @@ -16,7 +16,7 @@ export default defineConfig([ 'src/backend/**/*.ts', '!src/backend/**/*.test.ts', '!src/backend/**/*.d.ts', - '!src/backend/__tests__**/*', + '!src/backend/__tests__/**/*', ], outDir: 'dist/backend', format: ['cjs', 'esm'], @@ -30,7 +30,7 @@ export default defineConfig([ 'src/frontend/**/*.ts', '!src/frontend/**/*.test.ts', '!src/frontend/**/*.d.ts', - '!src/frontend/__tests__**/*', + '!src/frontend/__tests__/**/*', ], outDir: 'dist/frontend', format: ['cjs', 'esm'], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 99b06478fe..4e18ae6aee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,6 +69,9 @@ catalogs: tsup: specifier: ^8.4.0 version: 8.4.0 + tsx: + specifier: ^4.19.3 + version: 4.19.3 uuid: specifier: 10.0.0 version: 10.0.0 @@ -81,6 +84,9 @@ catalogs: zod: specifier: 3.24.1 version: 3.24.1 + zod-to-json-schema: + specifier: 3.23.3 + version: 3.23.3 frontend: '@sentry/vue': specifier: ^8.33.1 @@ -451,22 +457,29 @@ importers: version: 9.4.2(eslint@8.57.0) packages/@n8n/extension-sdk: + dependencies: + zod: + specifier: 'catalog:' + version: 3.24.1 devDependencies: '@n8n/typescript-config': specifier: workspace:* version: link:../typescript-config '@vitejs/plugin-vue': specifier: catalog:frontend - version: 5.2.1(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1))(vue@3.5.13(typescript@5.8.2)) + version: 5.2.1(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.8.2)) '@vue/tsconfig': specifier: catalog:frontend version: 0.7.0(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)) rimraf: specifier: 'catalog:' version: 6.0.1 + tsx: + specifier: 'catalog:' + version: 4.19.3 vite: specifier: catalog:frontend - version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) vue: specifier: catalog:frontend version: 3.5.13(typescript@5.8.2) @@ -476,6 +489,9 @@ importers: vue-tsc: specifier: ^2.2.8 version: 2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@5.8.2) + zod-to-json-schema: + specifier: 'catalog:' + version: 3.23.3(zod@3.24.1) packages/@n8n/imap: dependencies: @@ -729,7 +745,7 @@ importers: version: link:../../core tsup: specifier: 'catalog:' - version: 8.4.0(@microsoft/api-extractor@7.52.1(@types/node@18.16.16))(jiti@1.21.0)(postcss@8.5.3)(typescript@5.8.2) + version: 8.4.0(@microsoft/api-extractor@7.52.1(@types/node@18.16.16))(jiti@1.21.0)(postcss@8.5.3)(tsx@4.19.3)(typescript@5.8.2) packages/@n8n/permissions: devDependencies: @@ -774,7 +790,7 @@ importers: version: 8.6.4(storybook@8.6.4(prettier@3.3.3))(vue@3.5.13(typescript@5.8.2)) '@storybook/vue3-vite': specifier: ^8.6.4 - version: 8.6.4(storybook@8.6.4(prettier@3.3.3))(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1))(vue@3.5.13(typescript@5.8.2)) + version: 8.6.4(storybook@8.6.4(prettier@3.3.3))(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.8.2)) chromatic: specifier: ^11.27.0 version: 11.27.0 @@ -846,25 +862,25 @@ importers: version: 14.6.1(@testing-library/dom@10.4.0) tsup: specifier: 'catalog:' - version: 8.4.0(@microsoft/api-extractor@7.52.1(@types/node@18.16.16))(jiti@1.21.0)(postcss@8.5.3)(typescript@5.8.2) + version: 8.4.0(@microsoft/api-extractor@7.52.1(@types/node@18.16.16))(jiti@1.21.0)(postcss@8.5.3)(tsx@4.19.3)(typescript@5.8.2) typescript: specifier: ^5.8.2 version: 5.8.2 vite: specifier: catalog:frontend - version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) vitest: specifier: catalog:frontend - version: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1) + version: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) packages/@n8n/vitest-config: devDependencies: vite: specifier: catalog:frontend - version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) vitest: specifier: catalog:frontend - version: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1) + version: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) packages/cli: dependencies: @@ -1356,7 +1372,7 @@ importers: version: link:../../@n8n/typescript-config '@vitejs/plugin-vue': specifier: catalog:frontend - version: 5.2.1(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1))(vue@3.5.13(typescript@5.8.2)) + version: 5.2.1(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.8.2)) '@vue/tsconfig': specifier: catalog:frontend version: 0.7.0(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)) @@ -1365,7 +1381,7 @@ importers: version: 6.0.1 vite: specifier: catalog:frontend - version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) vue: specifier: catalog:frontend version: 3.5.13(typescript@5.8.2) @@ -1414,22 +1430,22 @@ importers: version: link:../../../@n8n/vitest-config '@vitejs/plugin-vue': specifier: catalog:frontend - version: 5.2.1(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1))(vue@3.5.13(typescript@5.8.2)) + version: 5.2.1(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.8.2)) '@vitest/coverage-v8': specifier: catalog:frontend - version: 3.0.8(vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)) + version: 3.0.8(vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3)) unplugin-icons: specifier: ^0.19.0 version: 0.19.0(@vue/compiler-sfc@3.5.13) vite: specifier: catalog:frontend - version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) vite-plugin-dts: specifier: ^4.5.3 - version: 4.5.3(@types/node@18.16.16)(rollup@4.35.0)(typescript@5.8.2)(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)) + version: 4.5.3(@types/node@18.16.16)(rollup@4.35.0)(typescript@5.8.2)(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3)) vitest: specifier: catalog:frontend - version: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1) + version: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) vue-tsc: specifier: ^2.2.8 version: 2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@5.8.2) @@ -1456,7 +1472,7 @@ importers: version: 8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.8.2)) '@vitejs/plugin-vue': specifier: catalog:frontend - version: 5.2.1(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1))(vue@3.5.13(typescript@5.8.2)) + version: 5.2.1(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.8.2)) '@vue/tsconfig': specifier: catalog:frontend version: 0.7.0(typescript@5.8.2)(vue@3.5.13(typescript@5.8.2)) @@ -1465,16 +1481,16 @@ importers: version: 10.11.0(vue@3.5.13(typescript@5.8.2)) tsup: specifier: 'catalog:' - version: 8.4.0(@microsoft/api-extractor@7.52.1(@types/node@18.16.16))(jiti@1.21.0)(postcss@8.5.3)(typescript@5.8.2) + version: 8.4.0(@microsoft/api-extractor@7.52.1(@types/node@18.16.16))(jiti@1.21.0)(postcss@8.5.3)(tsx@4.19.3)(typescript@5.8.2) typescript: specifier: ^5.8.2 version: 5.8.2 vite: specifier: catalog:frontend - version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) vitest: specifier: catalog:frontend - version: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1) + version: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) vue: specifier: catalog:frontend version: 3.5.13(typescript@5.8.2) @@ -1577,10 +1593,10 @@ importers: version: 2.11.0 '@vitejs/plugin-vue': specifier: catalog:frontend - version: 5.2.1(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1))(vue@3.5.13(typescript@5.8.2)) + version: 5.2.1(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.8.2)) '@vitest/coverage-v8': specifier: catalog:frontend - version: 3.0.8(vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)) + version: 3.0.8(vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3)) autoprefixer: specifier: ^10.4.19 version: 10.4.19(postcss@8.4.49) @@ -1601,13 +1617,13 @@ importers: version: 0.27.3(@babel/parser@7.26.10)(rollup@4.35.0)(vue@3.5.13(typescript@5.8.2)) vite: specifier: catalog:frontend - version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) vitest: specifier: catalog:frontend - version: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1) + version: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) vitest-mock-extended: specifier: catalog:frontend - version: 3.0.1(typescript@5.8.2)(vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)) + version: 3.0.1(typescript@5.8.2)(vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3)) vue-tsc: specifier: ^2.2.8 version: 2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@5.8.2) @@ -1890,13 +1906,13 @@ importers: version: 10.0.0 '@vitejs/plugin-legacy': specifier: ^6.0.2 - version: 6.0.2(terser@5.16.1)(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)) + version: 6.0.2(terser@5.16.1)(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3)) '@vitejs/plugin-vue': specifier: catalog:frontend - version: 5.2.1(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1))(vue@3.5.13(typescript@5.8.2)) + version: 5.2.1(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.8.2)) '@vitest/coverage-v8': specifier: catalog:frontend - version: 3.0.8(vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)) + version: 3.0.8(vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3)) browserslist-to-esbuild: specifier: ^2.1.1 version: 2.1.1(browserslist@4.24.4) @@ -1914,19 +1930,19 @@ importers: version: 0.27.3(@babel/parser@7.26.10)(rollup@4.35.0)(vue@3.5.13(typescript@5.8.2)) vite: specifier: catalog:frontend - version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + version: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) vite-plugin-static-copy: specifier: 2.2.0 - version: 2.2.0(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)) + version: 2.2.0(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3)) vite-svg-loader: specifier: 5.1.0 version: 5.1.0(vue@3.5.13(typescript@5.8.2)) vitest: specifier: catalog:frontend - version: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1) + version: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) vitest-mock-extended: specifier: catalog:frontend - version: 3.0.1(typescript@5.8.2)(vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)) + version: 3.0.1(typescript@5.8.2)(vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3)) vue-tsc: specifier: ^2.2.8 version: 2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@5.8.2) @@ -8911,6 +8927,9 @@ packages: resolution: {integrity: sha512-zzlgaYnHMIEgHRrfC7x0Qp0Ylhw/sHpM6MHXeVBTYIsvGf5GpbnClB+Q6rAPdn+0gd2oZZIo6Tj3EaWrt4VhDQ==} engines: {node: '>8.0.0'} + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + get-tsconfig@4.5.0: resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==} @@ -11992,6 +12011,9 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve.exports@2.0.0: resolution: {integrity: sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==} engines: {node: '>=10'} @@ -12989,6 +13011,11 @@ packages: typescript: optional: true + tsx@4.19.3: + resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} + engines: {node: '>=18.0.0'} + hasBin: true + tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -18401,13 +18428,13 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/builder-vite@8.6.4(storybook@8.6.4(prettier@3.3.3))(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1))': + '@storybook/builder-vite@8.6.4(storybook@8.6.4(prettier@3.3.3))(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3))': dependencies: '@storybook/csf-plugin': 8.6.4(storybook@8.6.4(prettier@3.3.3)) browser-assert: 1.2.1 storybook: 8.6.4(prettier@3.3.3) ts-dedent: 2.2.0 - vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) '@storybook/components@8.6.4(storybook@8.6.4(prettier@3.3.3))': dependencies: @@ -18481,15 +18508,15 @@ snapshots: dependencies: storybook: 8.6.4(prettier@3.3.3) - '@storybook/vue3-vite@8.6.4(storybook@8.6.4(prettier@3.3.3))(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1))(vue@3.5.13(typescript@5.8.2))': + '@storybook/vue3-vite@8.6.4(storybook@8.6.4(prettier@3.3.3))(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.8.2))': dependencies: - '@storybook/builder-vite': 8.6.4(storybook@8.6.4(prettier@3.3.3))(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)) + '@storybook/builder-vite': 8.6.4(storybook@8.6.4(prettier@3.3.3))(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3)) '@storybook/vue3': 8.6.4(storybook@8.6.4(prettier@3.3.3))(vue@3.5.13(typescript@5.8.2)) find-package-json: 1.2.0 magic-string: 0.30.17 storybook: 8.6.4(prettier@3.3.3) typescript: 5.8.2 - vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) vue-component-meta: 2.1.10(typescript@5.8.2) vue-docgen-api: 4.76.0(vue@3.5.13(typescript@5.8.2)) transitivePeerDependencies: @@ -19284,7 +19311,7 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-legacy@6.0.2(terser@5.16.1)(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1))': + '@vitejs/plugin-legacy@6.0.2(terser@5.16.1)(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3))': dependencies: '@babel/core': 7.26.10 '@babel/preset-env': 7.26.9(@babel/core@7.26.10) @@ -19295,16 +19322,16 @@ snapshots: regenerator-runtime: 0.14.1 systemjs: 6.15.1 terser: 5.16.1 - vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.1(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1))(vue@3.5.13(typescript@5.8.2))': + '@vitejs/plugin-vue@5.2.1(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.8.2))': dependencies: - vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) vue: 3.5.13(typescript@5.8.2) - '@vitest/coverage-v8@3.0.8(vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1))': + '@vitest/coverage-v8@3.0.8(vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -19318,7 +19345,7 @@ snapshots: std-env: 3.8.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1) + vitest: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) transitivePeerDependencies: - supports-color @@ -19336,13 +19363,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.8(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1))': + '@vitest/mocker@3.0.8(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3))': dependencies: '@vitest/spy': 3.0.8 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) '@vitest/pretty-format@2.0.5': dependencies: @@ -22381,6 +22408,10 @@ snapshots: get-system-fonts@2.0.2: {} + get-tsconfig@4.10.0: + dependencies: + resolve-pkg-maps: 1.0.0 + get-tsconfig@4.5.0: {} getos@3.2.1: @@ -25510,12 +25541,13 @@ snapshots: postcss: 8.4.49 ts-node: 10.9.2(@types/node@18.16.16)(typescript@5.8.2) - postcss-load-config@6.0.1(jiti@1.21.0)(postcss@8.5.3): + postcss-load-config@6.0.1(jiti@1.21.0)(postcss@8.5.3)(tsx@4.19.3): dependencies: lilconfig: 3.1.2 optionalDependencies: jiti: 1.21.0 postcss: 8.5.3 + tsx: 4.19.3 postcss-nested@6.0.1(postcss@8.4.49): dependencies: @@ -26147,6 +26179,8 @@ snapshots: resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} + resolve.exports@2.0.0: {} resolve@1.22.8: @@ -27369,7 +27403,7 @@ snapshots: tsscmp@1.0.6: {} - tsup@8.4.0(@microsoft/api-extractor@7.52.1(@types/node@18.16.16))(jiti@1.21.0)(postcss@8.5.3)(typescript@5.8.2): + tsup@8.4.0(@microsoft/api-extractor@7.52.1(@types/node@18.16.16))(jiti@1.21.0)(postcss@8.5.3)(tsx@4.19.3)(typescript@5.8.2): dependencies: bundle-require: 5.1.0(esbuild@0.24.0) cac: 6.7.14 @@ -27379,7 +27413,7 @@ snapshots: esbuild: 0.24.0 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@1.21.0)(postcss@8.5.3) + postcss-load-config: 6.0.1(jiti@1.21.0)(postcss@8.5.3)(tsx@4.19.3) resolve-from: 5.0.0 rollup: 4.35.0 source-map: 0.8.0-beta.0 @@ -27397,6 +27431,13 @@ snapshots: - tsx - yaml + tsx@4.19.3: + dependencies: + esbuild: 0.24.0 + get-tsconfig: 4.10.0 + optionalDependencies: + fsevents: 2.3.3 + tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 @@ -27711,13 +27752,13 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vite-node@3.0.8(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1): + vite-node@3.0.8(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3): dependencies: cac: 6.7.14 debug: 4.4.0(supports-color@8.1.1) es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) transitivePeerDependencies: - '@types/node' - jiti @@ -27732,7 +27773,7 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.5.3(@types/node@18.16.16)(rollup@4.35.0)(typescript@5.8.2)(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)): + vite-plugin-dts@4.5.3(@types/node@18.16.16)(rollup@4.35.0)(typescript@5.8.2)(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3)): dependencies: '@microsoft/api-extractor': 7.52.1(@types/node@18.16.16) '@rollup/pluginutils': 5.1.4(rollup@4.35.0) @@ -27745,26 +27786,26 @@ snapshots: magic-string: 0.30.17 typescript: 5.8.2 optionalDependencies: - vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-static-copy@2.2.0(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)): + vite-plugin-static-copy@2.2.0(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3)): dependencies: chokidar: 4.0.1 fast-glob: 3.3.2 fs-extra: 11.3.0 picocolors: 1.1.1 - vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) vite-svg-loader@5.1.0(vue@3.5.13(typescript@5.8.2)): dependencies: svgo: 3.3.2 vue: 3.5.13(typescript@5.8.2) - vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1): + vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3): dependencies: esbuild: 0.24.0 postcss: 8.5.3 @@ -27775,17 +27816,18 @@ snapshots: jiti: 1.21.0 sass: 1.64.1 terser: 5.16.1 + tsx: 4.19.3 - vitest-mock-extended@3.0.1(typescript@5.8.2)(vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)): + vitest-mock-extended@3.0.1(typescript@5.8.2)(vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3)): dependencies: ts-essentials: 10.0.2(typescript@5.8.2) typescript: 5.8.2 - vitest: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1) + vitest: 3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) - vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1): + vitest@3.0.8(@types/debug@4.1.12)(@types/node@18.16.16)(jiti@1.21.0)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3): dependencies: '@vitest/expect': 3.0.8 - '@vitest/mocker': 3.0.8(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)) + '@vitest/mocker': 3.0.8(vite@6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3)) '@vitest/pretty-format': 3.0.8 '@vitest/runner': 3.0.8 '@vitest/snapshot': 3.0.8 @@ -27801,8 +27843,8 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) - vite-node: 3.0.8(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1) + vite: 6.2.1(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) + vite-node: 3.0.8(@types/node@18.16.16)(jiti@1.21.0)(sass@1.64.1)(terser@5.16.1)(tsx@4.19.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e415a13358..4bc8280116 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -27,10 +27,12 @@ catalog: reflect-metadata: 0.2.2 rimraf: ^6.0.1 tsup: ^8.4.0 + tsx: ^4.19.3 uuid: 10.0.0 xml2js: 0.6.2 xss: 1.0.15 zod: 3.24.1 + 'zod-to-json-schema': 3.23.3 '@langchain/core': 0.3.30 catalogs: