From cbf2d2027ba1a44840b5eab7c4d2c4081a73ef44 Mon Sep 17 00:00:00 2001 From: Matsu Date: Thu, 9 Jul 2026 13:21:16 +0300 Subject: [PATCH] chore: Set up repository for TypeScript 7 migration (#33890) --- .../setup-nodejs/safe-chain.config.json | 4 +- .gitignore | 3 + package.json | 3 +- packages/@n8n/agents/package.json | 1 + packages/@n8n/ai-node-sdk/package.json | 1 + packages/@n8n/ai-utilities/package.json | 1 + .../@n8n/ai-workflow-builder.ee/package.json | 1 + packages/@n8n/api-types/package.json | 1 + packages/@n8n/backend-common/package.json | 1 + packages/@n8n/backend-network/package.json | 1 + packages/@n8n/backend-test-utils/package.json | 3 +- packages/@n8n/benchmark/package.json | 3 +- packages/@n8n/chat-hub/package.json | 1 + packages/@n8n/cli/package.json | 1 + packages/@n8n/client-oauth2/package.json | 1 + .../@n8n/codemirror-lang-html/package.json | 1 + .../@n8n/codemirror-lang-sql/package.json | 1 + .../codemirror-lang-sql/tsconfig.build.json | 2 +- .../@n8n/codemirror-lang-sql/tsconfig.json | 2 +- packages/@n8n/codemirror-lang/package.json | 5 +- .../@n8n/codemirror-lang/tsconfig.build.json | 2 +- packages/@n8n/codemirror-lang/tsconfig.json | 2 +- packages/@n8n/computer-use/package.json | 1 + packages/@n8n/config/package.json | 1 + packages/@n8n/constants/package.json | 3 +- packages/@n8n/crdt/package.json | 1 + packages/@n8n/decorators/package.json | 1 + packages/@n8n/di/package.json | 1 + packages/@n8n/engine/package.json | 1 + packages/@n8n/errors/package.json | 3 +- packages/@n8n/extension-sdk/package.json | 1 + packages/@n8n/imap/package.json | 1 + packages/@n8n/instance-ai/package.json | 1 + packages/@n8n/json-schema-to-zod/package.json | 1 + packages/@n8n/local-gateway/package.json | 1 + .../@n8n/mcp-browser-extension/package.json | 1 + packages/@n8n/mcp-browser/package.json | 1 + packages/@n8n/nodes-langchain/package.json | 1 + packages/@n8n/permissions/package.json | 1 + packages/@n8n/scheduler/package.json | 1 + packages/@n8n/syslog-client/package.json | 1 + packages/@n8n/task-runner/package.json | 1 + packages/@n8n/tournament/package.json | 2 +- packages/@n8n/typeorm/package.json | 2 +- .../typescript-config/tsconfig.build.go.json | 16 + .../typescript-config/tsconfig.common.go.json | 26 + packages/@n8n/vitest-config/package.json | 1 + packages/@n8n/workflow-sdk/package.json | 1 + packages/cli/package.json | 1 + packages/core/package.json | 1 + packages/extensions/insights/package.json | 1 + packages/frontend/@n8n/chat/package.json | 1 + .../frontend/@n8n/design-system/package.json | 1 + packages/node-dev/package.json | 1 + packages/nodes-base/package.json | 1 + packages/testing/performance/package.json | 3 +- packages/testing/playwright/package.json | 1 + packages/workflow/package.json | 1 + pnpm-lock.yaml | 567 +++++++++++++++--- pnpm-workspace.yaml | 4 + scripts/typescript-migration/README.md | 79 +++ scripts/typescript-migration/SUMMARY.md | 42 ++ .../add-import-extensions.mjs | 176 ++++++ scripts/typescript-migration/benchmark.mjs | 227 +++++++ scripts/typescript-migration/summarize.mjs | 125 ++++ 65 files changed, 1250 insertions(+), 95 deletions(-) create mode 100644 packages/@n8n/typescript-config/tsconfig.build.go.json create mode 100644 packages/@n8n/typescript-config/tsconfig.common.go.json create mode 100644 scripts/typescript-migration/README.md create mode 100644 scripts/typescript-migration/SUMMARY.md create mode 100644 scripts/typescript-migration/add-import-extensions.mjs create mode 100644 scripts/typescript-migration/benchmark.mjs create mode 100644 scripts/typescript-migration/summarize.mjs diff --git a/.github/actions/setup-nodejs/safe-chain.config.json b/.github/actions/setup-nodejs/safe-chain.config.json index 42bda807904..77a6e600cf0 100644 --- a/.github/actions/setup-nodejs/safe-chain.config.json +++ b/.github/actions/setup-nodejs/safe-chain.config.json @@ -10,7 +10,9 @@ "n8n-node-dev", "n8n-nodes-base", "n8n-playwright", - "n8n-workflow" + "n8n-workflow", + "typescript", + "@typescript/*" ] } } diff --git a/.gitignore b/.gitignore index 837ecee3303..b21c50390d4 100644 --- a/.gitignore +++ b/.gitignore @@ -72,6 +72,9 @@ coverage-gaps.json # Local regeneration cache for scripts/generate-lucide-icon-data.mjs (committed output: lucideIconData.ts) scripts/.lucide-tags-cache.json +# TS 6 -> 7 migration benchmark output +scripts/typescript-migration/results/ + packages/cli/src/commands/export/outputs *.bak .data diff --git a/package.json b/package.json index fa45fff1672..e72e3fe28b3 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "tsc-alias": "^1.8.10", "tsc-watch": "^6.2.0", "turbo": "2.9.15", - "typescript": "*", + "typescript": "6.0.2", "yaml": "catalog:", "zx": "^8.8.5" }, @@ -121,7 +121,6 @@ "tar-fs": "2.1.4", "tslib": "^2.6.2", "tsconfig-paths": "^4.2.0", - "typescript": "catalog:", "vue-tsc": "catalog:frontend", "gaxios": ">=7.1.1", "google-gax": "^4.3.7", diff --git a/packages/@n8n/agents/package.json b/packages/@n8n/agents/package.json index b5176d96c92..9ef379b53cc 100644 --- a/packages/@n8n/agents/package.json +++ b/packages/@n8n/agents/package.json @@ -164,6 +164,7 @@ "nock": "catalog:", "pg": "catalog:", "tsx": "catalog:", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:", diff --git a/packages/@n8n/ai-node-sdk/package.json b/packages/@n8n/ai-node-sdk/package.json index b9648767460..48603ab8d22 100644 --- a/packages/@n8n/ai-node-sdk/package.json +++ b/packages/@n8n/ai-node-sdk/package.json @@ -37,6 +37,7 @@ "devDependencies": { "@n8n/typescript-config": "workspace:*", "@n8n/vitest-config": "workspace:*", + "typescript": "catalog:", "vitest": "catalog:" }, "license": "LicenseRef-n8n-sustainable-use" diff --git a/packages/@n8n/ai-utilities/package.json b/packages/@n8n/ai-utilities/package.json index ea3974d654e..e4559cefb71 100644 --- a/packages/@n8n/ai-utilities/package.json +++ b/packages/@n8n/ai-utilities/package.json @@ -112,6 +112,7 @@ "@types/proxy-from-env": "catalog:", "fast-glob": "catalog:", "tsx": "catalog:", + "typescript": "catalog:", "axios": "catalog:", "nock": "catalog:" }, diff --git a/packages/@n8n/ai-workflow-builder.ee/package.json b/packages/@n8n/ai-workflow-builder.ee/package.json index bd96deb8e38..d123c6fc0c9 100644 --- a/packages/@n8n/ai-workflow-builder.ee/package.json +++ b/packages/@n8n/ai-workflow-builder.ee/package.json @@ -98,6 +98,7 @@ "cli-table3": "^0.6.3", "madge": "^8.0.0", "tsx": "catalog:", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:" diff --git a/packages/@n8n/api-types/package.json b/packages/@n8n/api-types/package.json index 940009b2c2a..306685ff3f7 100644 --- a/packages/@n8n/api-types/package.json +++ b/packages/@n8n/api-types/package.json @@ -27,6 +27,7 @@ "@n8n/config": "workspace:*", "@n8n/vitest-config": "workspace:*", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:", diff --git a/packages/@n8n/backend-common/package.json b/packages/@n8n/backend-common/package.json index 34de4b2a115..3610c56a5ac 100644 --- a/packages/@n8n/backend-common/package.json +++ b/packages/@n8n/backend-common/package.json @@ -44,6 +44,7 @@ "@types/yargs-parser": "21.0.0", "@n8n/vitest-config": "workspace:*", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:", "zod": "catalog:" diff --git a/packages/@n8n/backend-network/package.json b/packages/@n8n/backend-network/package.json index e195f4e4f78..93a0647b91b 100644 --- a/packages/@n8n/backend-network/package.json +++ b/packages/@n8n/backend-network/package.json @@ -83,6 +83,7 @@ "@types/qs": "catalog:", "@vitest/coverage-v8": "catalog:", "nock": "catalog:", + "typescript": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:" }, diff --git a/packages/@n8n/backend-test-utils/package.json b/packages/@n8n/backend-test-utils/package.json index e407a51e466..5c8a07ba2b6 100644 --- a/packages/@n8n/backend-test-utils/package.json +++ b/packages/@n8n/backend-test-utils/package.json @@ -36,7 +36,8 @@ "vitest-mock-extended": "catalog:" }, "devDependencies": { - "@n8n/typescript-config": "workspace:*" + "@n8n/typescript-config": "workspace:*", + "typescript": "catalog:" }, "license": "LicenseRef-n8n-sustainable-use" } diff --git a/packages/@n8n/benchmark/package.json b/packages/@n8n/benchmark/package.json index 607a8d60e0a..94fff0f2f1a 100644 --- a/packages/@n8n/benchmark/package.json +++ b/packages/@n8n/benchmark/package.json @@ -44,7 +44,8 @@ "devDependencies": { "@n8n/typescript-config": "workspace:*", "@types/convict": "^6.1.1", - "@types/k6": "^0.52.0" + "@types/k6": "^0.52.0", + "typescript": "catalog:" }, "bin": { "n8n-benchmark": "./bin/n8n-benchmark" diff --git a/packages/@n8n/chat-hub/package.json b/packages/@n8n/chat-hub/package.json index d1f44df7c41..69c27f81dec 100644 --- a/packages/@n8n/chat-hub/package.json +++ b/packages/@n8n/chat-hub/package.json @@ -26,6 +26,7 @@ "@n8n/typescript-config": "workspace:*", "@n8n/vitest-config": "workspace:*", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:", "vitest": "catalog:" }, "dependencies": { diff --git a/packages/@n8n/cli/package.json b/packages/@n8n/cli/package.json index 9ed7c7ad79c..91393e48f8e 100644 --- a/packages/@n8n/cli/package.json +++ b/packages/@n8n/cli/package.json @@ -81,6 +81,7 @@ "@n8n/typescript-config": "workspace:*", "@n8n/vitest-config": "workspace:*", "@types/node": "catalog:", + "typescript": "catalog:", "vitest": "catalog:" } } diff --git a/packages/@n8n/client-oauth2/package.json b/packages/@n8n/client-oauth2/package.json index 882d23937a6..6aa2159a2f0 100644 --- a/packages/@n8n/client-oauth2/package.json +++ b/packages/@n8n/client-oauth2/package.json @@ -30,6 +30,7 @@ "@n8n/typescript-config": "workspace:*", "@n8n/vitest-config": "workspace:*", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:", diff --git a/packages/@n8n/codemirror-lang-html/package.json b/packages/@n8n/codemirror-lang-html/package.json index 958edd03f44..315738eb90a 100644 --- a/packages/@n8n/codemirror-lang-html/package.json +++ b/packages/@n8n/codemirror-lang-html/package.json @@ -46,6 +46,7 @@ "@codemirror/buildhelper": "^0.1.5", "@lezer/generator": "catalog:", "@n8n/typescript-config": "workspace:*", + "typescript": "catalog:typescript", "@rollup/plugin-node-resolve": "^9.0.0", "@n8n/vitest-config": "workspace:*", "ist": "1.1.7", diff --git a/packages/@n8n/codemirror-lang-sql/package.json b/packages/@n8n/codemirror-lang-sql/package.json index fe98f6f7181..885001339c7 100644 --- a/packages/@n8n/codemirror-lang-sql/package.json +++ b/packages/@n8n/codemirror-lang-sql/package.json @@ -50,6 +50,7 @@ "devDependencies": { "@lezer/generator": "catalog:", "@n8n/typescript-config": "workspace:*", + "typescript": "catalog:typescript", "@n8n/vitest-config": "workspace:*", "vitest": "catalog:" }, diff --git a/packages/@n8n/codemirror-lang-sql/tsconfig.build.json b/packages/@n8n/codemirror-lang-sql/tsconfig.build.json index 8add09c23c3..b7353b430c8 100644 --- a/packages/@n8n/codemirror-lang-sql/tsconfig.build.json +++ b/packages/@n8n/codemirror-lang-sql/tsconfig.build.json @@ -1,5 +1,5 @@ { - "extends": ["./tsconfig.json", "@n8n/typescript-config/tsconfig.build.json"], + "extends": ["./tsconfig.json", "@n8n/typescript-config/tsconfig.build.go.json"], "compilerOptions": { "rootDir": "src", "outDir": "dist" diff --git a/packages/@n8n/codemirror-lang-sql/tsconfig.json b/packages/@n8n/codemirror-lang-sql/tsconfig.json index c1415fb494e..64750d8684e 100644 --- a/packages/@n8n/codemirror-lang-sql/tsconfig.json +++ b/packages/@n8n/codemirror-lang-sql/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@n8n/typescript-config/tsconfig.common.json", + "extends": "@n8n/typescript-config/tsconfig.common.go.json", "compilerOptions": { "rootDir": ".", "types": ["node", "vitest/globals"] diff --git a/packages/@n8n/codemirror-lang/package.json b/packages/@n8n/codemirror-lang/package.json index e6241461e39..7c295d4abed 100644 --- a/packages/@n8n/codemirror-lang/package.json +++ b/packages/@n8n/codemirror-lang/package.json @@ -41,13 +41,14 @@ }, "dependencies": { "@codemirror/language": "catalog:", + "@lezer/generator": "catalog:", "@lezer/highlight": "catalog:", - "@lezer/lr": "catalog:", - "@lezer/generator": "catalog:" + "@lezer/lr": "catalog:" }, "devDependencies": { "@n8n/typescript-config": "workspace:*", "@n8n/vitest-config": "workspace:*", + "typescript": "catalog:typescript", "vite": "catalog:", "vitest": "catalog:" } diff --git a/packages/@n8n/codemirror-lang/tsconfig.build.json b/packages/@n8n/codemirror-lang/tsconfig.build.json index 8add09c23c3..b7353b430c8 100644 --- a/packages/@n8n/codemirror-lang/tsconfig.build.json +++ b/packages/@n8n/codemirror-lang/tsconfig.build.json @@ -1,5 +1,5 @@ { - "extends": ["./tsconfig.json", "@n8n/typescript-config/tsconfig.build.json"], + "extends": ["./tsconfig.json", "@n8n/typescript-config/tsconfig.build.go.json"], "compilerOptions": { "rootDir": "src", "outDir": "dist" diff --git a/packages/@n8n/codemirror-lang/tsconfig.json b/packages/@n8n/codemirror-lang/tsconfig.json index 1996b943477..1673d072537 100644 --- a/packages/@n8n/codemirror-lang/tsconfig.json +++ b/packages/@n8n/codemirror-lang/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@n8n/typescript-config/tsconfig.common.json", + "extends": "@n8n/typescript-config/tsconfig.common.go.json", "compilerOptions": { "rootDir": ".", "types": ["node", "vitest/globals", "vite/client"] diff --git a/packages/@n8n/computer-use/package.json b/packages/@n8n/computer-use/package.json index f53c602eb57..440b9daf507 100644 --- a/packages/@n8n/computer-use/package.json +++ b/packages/@n8n/computer-use/package.json @@ -61,6 +61,7 @@ "@types/node": "catalog:", "@types/yargs-parser": "21.0.0", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" }, diff --git a/packages/@n8n/config/package.json b/packages/@n8n/config/package.json index aa1c752413f..9aa18982c3d 100644 --- a/packages/@n8n/config/package.json +++ b/packages/@n8n/config/package.json @@ -32,6 +32,7 @@ "@n8n/typescript-config": "workspace:*", "@n8n/vitest-config": "workspace:*", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:" diff --git a/packages/@n8n/constants/package.json b/packages/@n8n/constants/package.json index 8c04c3e9917..f9bf06d0ca8 100644 --- a/packages/@n8n/constants/package.json +++ b/packages/@n8n/constants/package.json @@ -21,7 +21,8 @@ "dist/**/*" ], "devDependencies": { - "@n8n/typescript-config": "workspace:*" + "@n8n/typescript-config": "workspace:*", + "typescript": "catalog:" }, "license": "LicenseRef-n8n-sustainable-use" } diff --git a/packages/@n8n/crdt/package.json b/packages/@n8n/crdt/package.json index 25a3f878d73..c37b2fc4b46 100644 --- a/packages/@n8n/crdt/package.json +++ b/packages/@n8n/crdt/package.json @@ -37,6 +37,7 @@ "devDependencies": { "@n8n/typescript-config": "workspace:*", "@n8n/vitest-config": "workspace:*", + "typescript": "catalog:", "vitest": "catalog:", "vitest-websocket-mock": "^0.5.0" }, diff --git a/packages/@n8n/decorators/package.json b/packages/@n8n/decorators/package.json index f8cfe1998b5..ff887b22a80 100644 --- a/packages/@n8n/decorators/package.json +++ b/packages/@n8n/decorators/package.json @@ -27,6 +27,7 @@ "@n8n/vitest-config": "workspace:*", "@types/express": "catalog:", "@types/lodash": "catalog:", + "typescript": "catalog:", "vitest": "catalog:", "zod": "catalog:" }, diff --git a/packages/@n8n/di/package.json b/packages/@n8n/di/package.json index d9046df62b8..bbc7785b399 100644 --- a/packages/@n8n/di/package.json +++ b/packages/@n8n/di/package.json @@ -28,6 +28,7 @@ "devDependencies": { "@n8n/vitest-config": "workspace:*", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:", "@n8n/typescript-config": "workspace:*" diff --git a/packages/@n8n/engine/package.json b/packages/@n8n/engine/package.json index cfd03e98a68..c9dfb4b9a54 100644 --- a/packages/@n8n/engine/package.json +++ b/packages/@n8n/engine/package.json @@ -35,6 +35,7 @@ "@types/express": "catalog:", "@types/supertest": "^6.0.3", "supertest": "^7.1.1", + "typescript": "catalog:", "vitest": "catalog:" }, "license": "LicenseRef-n8n-sustainable-use" diff --git a/packages/@n8n/errors/package.json b/packages/@n8n/errors/package.json index cb647b900e5..86d4b66c9c3 100644 --- a/packages/@n8n/errors/package.json +++ b/packages/@n8n/errors/package.json @@ -23,7 +23,8 @@ ], "devDependencies": { "@n8n/typescript-config": "workspace:*", - "@sentry/node": "catalog:sentry" + "@sentry/node": "catalog:sentry", + "typescript": "catalog:" }, "dependencies": { "callsites": "catalog:" diff --git a/packages/@n8n/extension-sdk/package.json b/packages/@n8n/extension-sdk/package.json index 6936f1bbdf1..2262e1c1f41 100644 --- a/packages/@n8n/extension-sdk/package.json +++ b/packages/@n8n/extension-sdk/package.json @@ -51,6 +51,7 @@ "@vue/tsconfig": "catalog:frontend", "prettier": "catalog:", "tsdown": "catalog:", + "typescript": "catalog:", "rimraf": "catalog:", "vite": "catalog:", "vue": "catalog:frontend", diff --git a/packages/@n8n/imap/package.json b/packages/@n8n/imap/package.json index 38498bfa45e..234ce20a1af 100644 --- a/packages/@n8n/imap/package.json +++ b/packages/@n8n/imap/package.json @@ -34,6 +34,7 @@ "@types/imap": "^0.8.40", "@types/quoted-printable": "^1.0.2", "@types/utf8": "^3.0.3", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:" diff --git a/packages/@n8n/instance-ai/package.json b/packages/@n8n/instance-ai/package.json index 8c6bb504670..57173ae007c 100644 --- a/packages/@n8n/instance-ai/package.json +++ b/packages/@n8n/instance-ai/package.json @@ -96,6 +96,7 @@ "@types/turndown": "catalog:", "@vitest/coverage-v8": "catalog:", "tsx": "catalog:", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:" diff --git a/packages/@n8n/json-schema-to-zod/package.json b/packages/@n8n/json-schema-to-zod/package.json index c03b337e5b6..3c846596d92 100644 --- a/packages/@n8n/json-schema-to-zod/package.json +++ b/packages/@n8n/json-schema-to-zod/package.json @@ -69,6 +69,7 @@ "zod": "catalog:", "@n8n/vitest-config": "workspace:*", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:" } diff --git a/packages/@n8n/local-gateway/package.json b/packages/@n8n/local-gateway/package.json index c581026595e..dee789ad907 100644 --- a/packages/@n8n/local-gateway/package.json +++ b/packages/@n8n/local-gateway/package.json @@ -37,6 +37,7 @@ "concurrently": "^8.2.0", "electron-builder": "^26.9.0", "rimraf": "catalog:", + "typescript": "catalog:", "vitest": "catalog:" }, "license": "LicenseRef-n8n-sustainable-use" diff --git a/packages/@n8n/mcp-browser-extension/package.json b/packages/@n8n/mcp-browser-extension/package.json index 4317a9ae638..fb47785e736 100644 --- a/packages/@n8n/mcp-browser-extension/package.json +++ b/packages/@n8n/mcp-browser-extension/package.json @@ -29,6 +29,7 @@ "@vitejs/plugin-vue": "catalog:frontend", "@vue/test-utils": "catalog:frontend", "unplugin-icons": "catalog:frontend", + "typescript": "catalog:", "vite": "catalog:", "vite-svg-loader": "catalog:frontend", "vitest": "catalog:" diff --git a/packages/@n8n/mcp-browser/package.json b/packages/@n8n/mcp-browser/package.json index aa6e669f25d..e6ddc862dfb 100644 --- a/packages/@n8n/mcp-browser/package.json +++ b/packages/@n8n/mcp-browser/package.json @@ -46,6 +46,7 @@ "@types/ws": "catalog:", "@types/yargs-parser": "21.0.0", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:", "tsx": "catalog:", "vitest": "catalog:" }, diff --git a/packages/@n8n/nodes-langchain/package.json b/packages/@n8n/nodes-langchain/package.json index bbc09b830ce..61f5af501e3 100644 --- a/packages/@n8n/nodes-langchain/package.json +++ b/packages/@n8n/nodes-langchain/package.json @@ -228,6 +228,7 @@ "@vitest/coverage-v8": "catalog:", "eslint-plugin-n8n-nodes-base": "catalog:", "fast-glob": "catalog:", + "typescript": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:" }, diff --git a/packages/@n8n/permissions/package.json b/packages/@n8n/permissions/package.json index e36e02f1e8a..4d458ce52ac 100644 --- a/packages/@n8n/permissions/package.json +++ b/packages/@n8n/permissions/package.json @@ -29,6 +29,7 @@ "@n8n/typescript-config": "workspace:*", "@n8n/vitest-config": "workspace:*", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:" diff --git a/packages/@n8n/scheduler/package.json b/packages/@n8n/scheduler/package.json index 7972726f8bf..c6088eab243 100644 --- a/packages/@n8n/scheduler/package.json +++ b/packages/@n8n/scheduler/package.json @@ -40,6 +40,7 @@ "@n8n/vitest-config": "workspace:*", "@types/luxon": "catalog:", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:" }, diff --git a/packages/@n8n/syslog-client/package.json b/packages/@n8n/syslog-client/package.json index 1038570ef6d..73043d55283 100644 --- a/packages/@n8n/syslog-client/package.json +++ b/packages/@n8n/syslog-client/package.json @@ -29,6 +29,7 @@ "@n8n/typescript-config": "workspace:*", "@n8n/vitest-config": "workspace:*", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:", diff --git a/packages/@n8n/task-runner/package.json b/packages/@n8n/task-runner/package.json index abc6271b727..a6b4ca19d9b 100644 --- a/packages/@n8n/task-runner/package.json +++ b/packages/@n8n/task-runner/package.json @@ -59,6 +59,7 @@ "@types/luxon": "catalog:", "@types/ws": "catalog:", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:" diff --git a/packages/@n8n/tournament/package.json b/packages/@n8n/tournament/package.json index 4a684c40f35..c0d9a5f4756 100644 --- a/packages/@n8n/tournament/package.json +++ b/packages/@n8n/tournament/package.json @@ -44,7 +44,7 @@ "vite": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:", - "typescript": "^5.0.0" + "typescript": "catalog:" }, "dependencies": { "ast-types": "^0.16.1", diff --git a/packages/@n8n/typeorm/package.json b/packages/@n8n/typeorm/package.json index 93cc484b5c5..c1b88c182cb 100644 --- a/packages/@n8n/typeorm/package.json +++ b/packages/@n8n/typeorm/package.json @@ -84,7 +84,7 @@ "source-map-support": "^0.5.21", "sqlite3": "5.1.7", "ts-node": "^10.9.1", - "typescript": "^5.3.3" + "typescript": "catalog:" }, "peerDependencies": { "pg": "^8.17.0", diff --git a/packages/@n8n/typescript-config/tsconfig.build.go.json b/packages/@n8n/typescript-config/tsconfig.build.go.json new file mode 100644 index 00000000000..9c112c69b0b --- /dev/null +++ b/packages/@n8n/typescript-config/tsconfig.build.go.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "types": ["node"], + "noUnusedLocals": false, + "noUnusedParameters": false, + "declaration": true, + "tsBuildInfoFile": "${configDir}/dist/build.tsbuildinfo" + }, + "tsc-alias": { + "replacers": { + "base-url": { + "enabled": false + } + } + } +} diff --git a/packages/@n8n/typescript-config/tsconfig.common.go.json b/packages/@n8n/typescript-config/tsconfig.common.go.json new file mode 100644 index 00000000000..72c1c92d193 --- /dev/null +++ b/packages/@n8n/typescript-config/tsconfig.common.go.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "noUncheckedSideEffectImports": false, + "strict": true, + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "es2021", + "lib": ["es2021", "es2022.error", "es2022.object", "dom"], + "removeComments": true, + "useUnknownInCatchVariables": true, + "forceConsistentCasingInFileNames": true, + "noImplicitAny": true, + "noImplicitReturns": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "strictNullChecks": true, + "preserveConstEnums": true, + "esModuleInterop": true, + "resolveJsonModule": true, + "incremental": true, + "declaration": false, + "sourceMap": true, + "skipLibCheck": true, + "tsBuildInfoFile": "${configDir}/dist/typecheck.tsbuildinfo" + } +} diff --git a/packages/@n8n/vitest-config/package.json b/packages/@n8n/vitest-config/package.json index da7191e2902..08214e5dba1 100644 --- a/packages/@n8n/vitest-config/package.json +++ b/packages/@n8n/vitest-config/package.json @@ -9,6 +9,7 @@ "dependencies": {}, "devDependencies": { "@n8n/typescript-config": "workspace:*", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" }, diff --git a/packages/@n8n/workflow-sdk/package.json b/packages/@n8n/workflow-sdk/package.json index 467a4212c75..f7134750a25 100644 --- a/packages/@n8n/workflow-sdk/package.json +++ b/packages/@n8n/workflow-sdk/package.json @@ -94,6 +94,7 @@ "@types/lodash": "catalog:", "@vitest/coverage-v8": "catalog:", "adm-zip": "^0.5.16", + "typescript": "catalog:", "vitest": "catalog:" }, "dependencies": { diff --git a/packages/cli/package.json b/packages/cli/package.json index 6f340f0f276..a611447fc8f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -117,6 +117,7 @@ "ts-essentials": "^7.0.3", "tsconfig-paths": "^4.2.0", "@vitest/coverage-v8": "catalog:", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:" diff --git a/packages/core/package.json b/packages/core/package.json index 3cfd9fd98c8..ec79ee5f64b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -48,6 +48,7 @@ "axios": "catalog:", "nock": "catalog:", "reflect-metadata": "catalog:", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:", diff --git a/packages/extensions/insights/package.json b/packages/extensions/insights/package.json index f403d1ae714..25342f9a4b1 100644 --- a/packages/extensions/insights/package.json +++ b/packages/extensions/insights/package.json @@ -54,6 +54,7 @@ "@vue/tsconfig": "catalog:frontend", "stylelint": "catalog:", "tsdown": "catalog:", + "typescript": "catalog:", "rimraf": "catalog:", "vite": "catalog:", "vitest": "catalog:", diff --git a/packages/frontend/@n8n/chat/package.json b/packages/frontend/@n8n/chat/package.json index d6b39f636ae..9bde7ede8c3 100644 --- a/packages/frontend/@n8n/chat/package.json +++ b/packages/frontend/@n8n/chat/package.json @@ -66,6 +66,7 @@ "@vitest/coverage-v8": "catalog:", "@vue/test-utils": "catalog:frontend", "unplugin-icons": "^0.19.0", + "typescript": "catalog:", "vite": "catalog:", "vite-plugin-dts": "catalog:", "vitest": "catalog:", diff --git a/packages/frontend/@n8n/design-system/package.json b/packages/frontend/@n8n/design-system/package.json index b635ae07e95..514a23c079f 100644 --- a/packages/frontend/@n8n/design-system/package.json +++ b/packages/frontend/@n8n/design-system/package.json @@ -52,6 +52,7 @@ "storybook-addon-vue-mdx": "3.0.0", "stylelint": "catalog:", "tailwindcss": "^3.4.3", + "typescript": "catalog:", "unplugin-icons": "catalog:frontend", "vite": "catalog:", "vite-svg-loader": "catalog:frontend", diff --git a/packages/node-dev/package.json b/packages/node-dev/package.json index 74cac2ba056..57eea1f6f09 100644 --- a/packages/node-dev/package.json +++ b/packages/node-dev/package.json @@ -42,6 +42,7 @@ "devDependencies": { "@n8n/typescript-config": "workspace:*", "@types/inquirer": "^7.0.1", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" }, diff --git a/packages/nodes-base/package.json b/packages/nodes-base/package.json index eadc4f3cc47..e3b21eb817f 100644 --- a/packages/nodes-base/package.json +++ b/packages/nodes-base/package.json @@ -919,6 +919,7 @@ "n8n-containers": "workspace:*", "n8n-core": "workspace:*", "reflect-metadata": "catalog:", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:" diff --git a/packages/testing/performance/package.json b/packages/testing/performance/package.json index 65bed394445..246dfc6d095 100644 --- a/packages/testing/performance/package.json +++ b/packages/testing/performance/package.json @@ -15,7 +15,8 @@ "@codspeed/vitest-plugin": "^5.2.0", "@n8n/expression-runtime": "workspace:*", "vitest": "catalog:", - "n8n-workflow": "workspace:*" + "n8n-workflow": "workspace:*", + "typescript": "catalog:" }, "license": "LicenseRef-n8n-sustainable-use" } diff --git a/packages/testing/playwright/package.json b/packages/testing/playwright/package.json index 926cf678071..908efef11d6 100644 --- a/packages/testing/playwright/package.json +++ b/packages/testing/playwright/package.json @@ -83,6 +83,7 @@ "otplib": "^12.0.1", "ts-morph": "catalog:", "tsx": "catalog:", + "typescript": "catalog:", "zod": "catalog:", "vitest": "catalog:" }, diff --git a/packages/workflow/package.json b/packages/workflow/package.json index 76243a3e2e3..5eed2c7936d 100644 --- a/packages/workflow/package.json +++ b/packages/workflow/package.json @@ -61,6 +61,7 @@ "@types/ssh2": "catalog:", "@types/xml2js": "catalog:", "fast-check": "catalog:", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:", "vitest-mock-extended": "catalog:", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1261154dea5..41891f9c49a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -516,6 +516,9 @@ catalogs: turndown: specifier: ^7.2.2 version: 7.2.2 + typescript: + specifier: 6.0.2 + version: 6.0.2 uuid: specifier: 11.1.1 version: 11.1.1 @@ -664,6 +667,10 @@ catalogs: storybook: specifier: ^10.1.11 version: 10.1.11 + typescript: + typescript: + specifier: 7.0.2 + version: 7.0.2 undici-v6: undici: specifier: ^6.24.0 @@ -695,7 +702,6 @@ overrides: tar-fs: 2.1.4 tslib: ^2.6.2 tsconfig-paths: ^4.2.0 - typescript: 6.0.2 vue-tsc: ^2.2.8 gaxios: '>=7.1.1' google-gax: ^4.3.7 @@ -1017,6 +1023,9 @@ importers: tsx: specifier: 'catalog:' version: 4.19.3 + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -1042,6 +1051,9 @@ importers: '@n8n/vitest-config': specifier: workspace:* version: link:../vitest-config + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -1139,6 +1151,9 @@ importers: tsx: specifier: 'catalog:' version: 4.19.3 + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -1272,6 +1287,9 @@ importers: tsx: specifier: 'catalog:' version: 4.19.3 + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -1312,6 +1330,9 @@ importers: minifaker: specifier: 1.34.1 version: 1.34.1(patch_hash=bc707e2c34a2464da2c9c93ead33e80fd9883a00434ef64907ddc45208a08b33) + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -1385,6 +1406,9 @@ importers: '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9) + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -1467,6 +1491,9 @@ importers: nock: specifier: 'catalog:' version: 14.0.14 + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -1516,6 +1543,9 @@ importers: '@n8n/typescript-config': specifier: workspace:* version: link:../typescript-config + typescript: + specifier: 'catalog:' + version: 6.0.2 packages/@n8n/benchmark: dependencies: @@ -1544,6 +1574,9 @@ importers: '@types/k6': specifier: ^0.52.0 version: 0.52.0 + typescript: + specifier: 'catalog:' + version: 6.0.2 packages/@n8n/chat-hub: dependencies: @@ -1560,6 +1593,9 @@ importers: '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9) + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -1579,6 +1615,9 @@ importers: '@types/node': specifier: ^20.17.50 version: 20.19.41 + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -1604,6 +1643,9 @@ importers: nock: specifier: 'catalog:' version: 14.0.14 + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -1635,6 +1677,9 @@ importers: '@n8n/vitest-config': specifier: workspace:* version: link:../vitest-config + typescript: + specifier: catalog:typescript + version: 7.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -1693,6 +1738,9 @@ importers: rollup: specifier: ^2.52.2 version: 2.79.2 + typescript: + specifier: catalog:typescript + version: 7.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -1730,6 +1778,9 @@ importers: '@n8n/vitest-config': specifier: workspace:* version: link:../vitest-config + typescript: + specifier: catalog:typescript + version: 7.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -1800,6 +1851,9 @@ importers: '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9) + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -1831,6 +1885,9 @@ importers: '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9) + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -1846,6 +1903,9 @@ importers: '@n8n/typescript-config': specifier: workspace:* version: link:../typescript-config + typescript: + specifier: 'catalog:' + version: 6.0.2 packages/@n8n/crdt: dependencies: @@ -1862,6 +1922,9 @@ importers: '@n8n/vitest-config': specifier: workspace:* version: link:../vitest-config + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -1967,7 +2030,7 @@ importers: specifier: 'catalog:' version: 11.13.0 typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 vite: specifier: 'catalog:' @@ -2012,6 +2075,9 @@ importers: '@types/lodash': specifier: 'catalog:' version: 4.17.17 + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -2034,6 +2100,9 @@ importers: '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9) + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -2071,6 +2140,9 @@ importers: supertest: specifier: ^7.1.1 version: 7.1.1 + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -2087,6 +2159,9 @@ importers: '@sentry/node': specifier: catalog:sentry version: 10.55.0(@opentelemetry/exporter-trace-otlp-http@0.217.0(@opentelemetry/api@1.9.0)) + typescript: + specifier: 'catalog:' + version: 6.0.2 packages/@n8n/eslint-config: dependencies: @@ -2149,7 +2224,7 @@ importers: specifier: ^16.2.0 version: 16.2.0 typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 typescript-eslint: specifier: ^8.35.0 @@ -2201,7 +2276,7 @@ importers: specifier: 'catalog:' version: 6.0.1 typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 vite: specifier: 'catalog:' @@ -2271,7 +2346,7 @@ importers: specifier: ^0.28.1 version: 0.28.1 typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 vitest: specifier: 'catalog:' @@ -2304,6 +2379,9 @@ importers: tsx: specifier: 'catalog:' version: 4.19.3 + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -2350,6 +2428,9 @@ importers: '@types/utf8': specifier: ^3.0.3 version: 3.0.3 + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -2483,6 +2564,9 @@ importers: tsx: specifier: 'catalog:' version: 4.19.3 + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -2507,6 +2591,9 @@ importers: '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9) + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -2556,6 +2643,9 @@ importers: rimraf: specifier: 'catalog:' version: 6.0.1 + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -2612,7 +2702,7 @@ importers: specifier: 7.7.3 version: 7.7.3 typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 unplugin-icons: specifier: catalog:frontend @@ -2699,6 +2789,9 @@ importers: tsx: specifier: 'catalog:' version: 4.19.3 + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -2730,6 +2823,9 @@ importers: '@vue/test-utils': specifier: catalog:frontend version: 2.4.6 + typescript: + specifier: 'catalog:' + version: 6.0.2 unplugin-icons: specifier: catalog:frontend version: 23.0.1(@vue/compiler-sfc@3.5.26) @@ -2810,7 +2906,7 @@ importers: specifier: ^4.1.13 version: 4.1.13(@oclif/core@4.5.2) typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 vite: specifier: 'catalog:' @@ -3164,6 +3260,9 @@ importers: fast-glob: specifier: 'catalog:' version: 3.2.12 + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -3186,6 +3285,9 @@ importers: '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9) + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -3223,7 +3325,7 @@ importers: specifier: 0.2.7 version: 0.2.7 typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 devDependencies: '@n8n/vitest-config': @@ -3263,6 +3365,9 @@ importers: '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9) + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -3301,7 +3406,7 @@ importers: specifier: 'catalog:' version: 6.0.1 typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 vite: specifier: 'catalog:' @@ -3331,6 +3436,9 @@ importers: get-port: specifier: ^7.1.0 version: 7.1.0 + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -3404,6 +3512,9 @@ importers: '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9) + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -3436,7 +3547,7 @@ importers: specifier: 'catalog:' version: 4.1.9(@vitest/browser@4.1.9)(vitest@4.1.9) typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 vite: specifier: 'catalog:' @@ -3575,7 +3686,7 @@ importers: specifier: ^10.9.1 version: 10.9.2(@swc/core@1.15.8(@swc/helpers@0.5.17))(@types/node@20.19.41)(typescript@6.0.2) typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 packages/@n8n/typescript-config: {} @@ -3608,7 +3719,7 @@ importers: specifier: 'catalog:' version: 0.16.5(typescript@6.0.2)(vue-tsc@2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@6.0.2)) typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 vite: specifier: 'catalog:' @@ -3622,6 +3733,9 @@ importers: '@n8n/typescript-config': specifier: workspace:* version: link:../typescript-config + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -3677,6 +3791,9 @@ importers: adm-zip: specifier: ^0.5.16 version: 0.5.16 + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -4290,6 +4407,9 @@ importers: tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -4477,6 +4597,9 @@ importers: reflect-metadata: specifier: 'catalog:' version: 0.2.2 + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -4523,6 +4646,9 @@ importers: tsdown: specifier: 'catalog:' version: 0.16.5(typescript@6.0.2)(vue-tsc@2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@6.0.2)) + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -4611,6 +4737,9 @@ importers: '@vue/test-utils': specifier: catalog:frontend version: 2.4.6 + typescript: + specifier: 'catalog:' + version: 6.0.2 unplugin-icons: specifier: ^0.19.0 version: 0.19.0(@vue/compiler-sfc@3.5.26) @@ -4667,7 +4796,7 @@ importers: specifier: 'catalog:' version: 0.16.5(typescript@6.0.2)(vue-tsc@2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@6.0.2)) typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 vite: specifier: 'catalog:' @@ -4874,6 +5003,9 @@ importers: tailwindcss: specifier: ^3.4.3 version: 3.4.3(ts-node@10.9.2(@swc/core@1.15.8(@swc/helpers@0.5.17))(@types/node@20.19.41)(typescript@6.0.2)) + typescript: + specifier: 'catalog:' + version: 6.0.2 unplugin-icons: specifier: catalog:frontend version: 23.0.1(@vue/compiler-sfc@3.5.26) @@ -4939,7 +5071,7 @@ importers: specifier: 'catalog:' version: 0.16.5(typescript@6.0.2)(vue-tsc@2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@6.0.2)) typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 vite: specifier: 'catalog:' @@ -5003,7 +5135,7 @@ importers: specifier: 'catalog:' version: 0.16.5(typescript@6.0.2)(vue-tsc@2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@6.0.2)) typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 vite: specifier: 'catalog:' @@ -5061,7 +5193,7 @@ importers: specifier: 'catalog:' version: 0.16.5(typescript@6.0.2)(vue-tsc@2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@6.0.2)) typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 vite: specifier: 'catalog:' @@ -5176,7 +5308,7 @@ importers: specifier: 3.0.0 version: 3.0.0(@storybook/addon-docs@10.1.11(@types/react@18.0.27)(esbuild@0.28.1)(rollup@4.52.4)(storybook@10.1.11(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)))(@storybook/builder-vite@10.1.11(esbuild@0.28.1)(rollup@4.52.4)(storybook@10.1.11(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@10.1.11(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(utf-8-validate@5.0.10))(vue@3.5.26(typescript@6.0.2)) typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 unplugin-icons: specifier: catalog:frontend @@ -5434,7 +5566,7 @@ importers: specifier: ^4.0.2 version: 4.0.2 typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 uuid: specifier: 'catalog:' @@ -5684,6 +5816,9 @@ importers: '@types/inquirer': specifier: ^7.0.1 version: 7.3.3 + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -6081,6 +6216,9 @@ importers: reflect-metadata: specifier: 'catalog:' version: 0.2.2 + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -6109,7 +6247,7 @@ importers: specifier: 'catalog:' version: 4.19.3 typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 yaml: specifier: 'catalog:' @@ -6193,7 +6331,7 @@ importers: specifier: 'catalog:' version: 4.19.3 typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 vitest: specifier: 'catalog:' @@ -6210,6 +6348,9 @@ importers: n8n-workflow: specifier: workspace:* version: link:../../workflow + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -6318,6 +6459,9 @@ importers: tsx: specifier: 'catalog:' version: 4.19.3 + typescript: + specifier: 'catalog:' + version: 6.0.2 vitest: specifier: 'catalog:' version: 4.1.9(@opentelemetry/api@1.9.0)(@types/node@20.19.41)(@vitest/browser-playwright@4.1.9)(@vitest/coverage-v8@4.1.9)(jsdom@23.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(vite@8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3)) @@ -6341,7 +6485,7 @@ importers: specifier: 'catalog:' version: 4.19.3 typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 vitest: specifier: 'catalog:' @@ -6363,7 +6507,7 @@ importers: specifier: 'catalog:' version: 3.23.2 typescript: - specifier: 6.0.2 + specifier: 'catalog:' version: 6.0.2 vitest: specifier: 'catalog:' @@ -6498,6 +6642,9 @@ importers: fast-check: specifier: 'catalog:' version: 3.23.2 + typescript: + specifier: 'catalog:' + version: 6.0.2 vite: specifier: 'catalog:' version: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) @@ -10328,7 +10475,7 @@ packages: resolution: {integrity: sha512-Zm4wEZURrZ24a+Hmm4l1QQYjiz975Ep3vF0yzWR7ICGcxittNz47YK2iBOk8kb8qseCu8pg7WmO1HOIsO8alvw==} engines: {node: '>=18.17.0', pnpm: '>=8'} peerDependencies: - typescript: 6.0.2 + typescript: '>=4.7' '@qdrant/openapi-typescript-fetch@1.2.6': resolution: {integrity: sha512-oQG/FejNpItrxRHoyctYvT3rwGZOnK4jr3JdppO/c78ktDvkWiPXPHNsrDf33K9sZdRb6PR7gi4noIapu5q4HA==} @@ -12298,20 +12445,20 @@ packages: peerDependencies: '@typescript-eslint/parser': ^8.35.0 eslint: ^8.57.0 || ^9.0.0 - typescript: 6.0.2 + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/parser@8.35.0': resolution: {integrity: sha512-6sMvZePQrnZH2/cJkwRpkT7DxoAWh+g6+GFRK6bV3YQo7ogi3SX5rgF6099r5Q53Ma5qeT7LGmOmuIutF4t3lA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 6.0.2 + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/project-service@8.35.0': resolution: {integrity: sha512-41xatqRwWZuhUMF/aZm2fcUsOFKNcG28xqRSS6ZVr9BVJtGExosLAm5A1OxTjRMagx8nJqva+P5zNIGt8RIgbQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: 6.0.2 + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/rule-tester@8.35.0': resolution: {integrity: sha512-1c8zz1uRy5Icd46+ziopy5k4Q/PxDAUeQxjw4vvSzPMCrbAbEA80ufsUJpBkIkc2iXEzlf4/J0Ha+4UTESSrNQ==} @@ -12327,14 +12474,14 @@ packages: resolution: {integrity: sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: 6.0.2 + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/type-utils@8.35.0': resolution: {integrity: sha512-ceNNttjfmSEoM9PW87bWLDEIaLAyR+E6BoYJQ5PfaDau37UGca9Nyq3lBk8Bw2ad0AKvYabz6wxc7DMTO2jnNA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 6.0.2 + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/types@8.35.0': resolution: {integrity: sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==} @@ -12344,23 +12491,143 @@ packages: resolution: {integrity: sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: 6.0.2 + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/utils@8.35.0': resolution: {integrity: sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 6.0.2 + typescript: '>=4.8.4 <5.9.0' '@typescript-eslint/visitor-keys@8.35.0': resolution: {integrity: sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript/typescript-aix-ppc64@7.0.2': + resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [aix] + + '@typescript/typescript-darwin-arm64@7.0.2': + resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] + + '@typescript/typescript-darwin-x64@7.0.2': + resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] + + '@typescript/typescript-freebsd-arm64@7.0.2': + resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [freebsd] + + '@typescript/typescript-freebsd-x64@7.0.2': + resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [freebsd] + + '@typescript/typescript-linux-arm64@7.0.2': + resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] + + '@typescript/typescript-linux-arm@7.0.2': + resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] + + '@typescript/typescript-linux-loong64@7.0.2': + resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} + engines: {node: '>=16.20.0'} + cpu: [loong64] + os: [linux] + + '@typescript/typescript-linux-mips64el@7.0.2': + resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} + engines: {node: '>=16.20.0'} + cpu: [mips64el] + os: [linux] + + '@typescript/typescript-linux-ppc64@7.0.2': + resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [linux] + + '@typescript/typescript-linux-riscv64@7.0.2': + resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} + engines: {node: '>=16.20.0'} + cpu: [riscv64] + os: [linux] + + '@typescript/typescript-linux-s390x@7.0.2': + resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} + engines: {node: '>=16.20.0'} + cpu: [s390x] + os: [linux] + + '@typescript/typescript-linux-x64@7.0.2': + resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + + '@typescript/typescript-netbsd-arm64@7.0.2': + resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [netbsd] + + '@typescript/typescript-netbsd-x64@7.0.2': + resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [netbsd] + + '@typescript/typescript-openbsd-arm64@7.0.2': + resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [openbsd] + + '@typescript/typescript-openbsd-x64@7.0.2': + resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [openbsd] + + '@typescript/typescript-sunos-x64@7.0.2': + resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [sunos] + + '@typescript/typescript-win32-arm64@7.0.2': + resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/typescript-win32-x64@7.0.2': + resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + '@typescript/vfs@1.6.0': resolution: {integrity: sha512-hvJUjNVeBMp77qPINuUvYXj4FyWeeMMKZkxEATEU3hqBAQ7qdTBCUFT7Sp0Zu0faeEtFf+ldXxMEDr/bk73ISg==} peerDependencies: - typescript: 6.0.2 + typescript: '*' '@typespec/ts-http-runtime@0.3.6': resolution: {integrity: sha512-jIXhD0eWQ1JA6ln/5Dltyx22UxWNrw0hZmhy2rlv6m6KgF7kplHx3g0fzi09lNmTJQRR91OlemYp3xFnvDK9og==} @@ -12627,7 +12894,7 @@ packages: '@vue/language-core@2.1.10': resolution: {integrity: sha512-DAI289d0K3AB5TUG3xDp9OuQ71CnrujQwJrQnfuZDwo6eGNf0UoRlPuaVNO+Zrn65PC3j0oB2i7mNmVPggeGeQ==} peerDependencies: - typescript: 6.0.2 + typescript: '*' peerDependenciesMeta: typescript: optional: true @@ -12635,7 +12902,7 @@ packages: '@vue/language-core@2.2.0': resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} peerDependencies: - typescript: 6.0.2 + typescript: '*' peerDependenciesMeta: typescript: optional: true @@ -12643,7 +12910,7 @@ packages: '@vue/language-core@2.2.8': resolution: {integrity: sha512-rrzB0wPGBvcwaSNRriVWdNAbHQWSf0NlGqgKHK5mEkXpefjUlVRP62u03KvwZpvKVjRnBIQ/Lwre+Mx9N6juUQ==} peerDependencies: - typescript: 6.0.2 + typescript: '*' peerDependenciesMeta: typescript: optional: true @@ -12671,7 +12938,7 @@ packages: '@vue/tsconfig@0.7.0': resolution: {integrity: sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==} peerDependencies: - typescript: 6.0.2 + typescript: 5.x vue: ^3.4.0 peerDependenciesMeta: typescript: @@ -12718,7 +12985,7 @@ packages: '@xata.io/client@0.28.4': resolution: {integrity: sha512-B02WHIA/ViHya84XvH6JCo13rd5h4S5vVyY2aYi6fIcjDIbCpsSLJ4oGWpdodovRYeAZy9Go4OhdyZwMIRC4BQ==} peerDependencies: - typescript: 6.0.2 + typescript: '>=4.5' '@xmldom/is-dom-node@1.0.1': resolution: {integrity: sha512-CJDxIgE5I0FH+ttq/Fxy6nRpxP70+e2O048EPe85J2use3XKdatVM7dDVvFNjQudd9B49NPoZ+8PG49zj4Er8Q==} @@ -13974,7 +14241,7 @@ packages: resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} peerDependencies: - typescript: 6.0.2 + typescript: '>=4.9.5' peerDependenciesMeta: typescript: optional: true @@ -14430,13 +14697,13 @@ packages: resolution: {integrity: sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==} engines: {node: '>=18'} peerDependencies: - typescript: 6.0.2 + typescript: ^5.4.4 detective-vue2@2.2.0: resolution: {integrity: sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==} engines: {node: '>=18'} peerDependencies: - typescript: 6.0.2 + typescript: ^5.4.4 devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -17127,7 +17394,7 @@ packages: engines: {node: '>=18'} hasBin: true peerDependencies: - typescript: 6.0.2 + typescript: ^5.4.4 peerDependenciesMeta: typescript: optional: true @@ -18714,7 +18981,7 @@ packages: resolution: {integrity: sha512-K7ZhpMY9iJ9ShTC0cR2+PnxdQRuwVIsXDO/WIEV/RnMC/vmSoKDTKW/exNQYPI+4ij10UjXqdNiEHwn47McANQ==} peerDependencies: '@vue/composition-api': ^1.4.0 - typescript: 6.0.2 + typescript: '>=4.4.4' vue: ^2.6.14 || ^3.3.0 peerDependenciesMeta: '@vue/composition-api': @@ -19552,7 +19819,7 @@ packages: '@ts-macro/tsc': ^0.3.6 '@typescript/native-preview': '>=7.0.0-dev.20250601.1' rolldown: ^1.0.0-beta.44 - typescript: 6.0.2 + typescript: ^5.0.0 vue-tsc: ^2.2.8 peerDependenciesMeta: '@ts-macro/tsc': @@ -19579,7 +19846,7 @@ packages: engines: {node: '>=v12.22.1'} peerDependencies: rollup: ^2.48.0 - typescript: 6.0.2 + typescript: ^4.2.4 rollup@2.79.2: resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} @@ -20669,7 +20936,7 @@ packages: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} peerDependencies: - typescript: 6.0.2 + typescript: '>=4.8.4' ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} @@ -20681,7 +20948,7 @@ packages: ts-essentials@10.0.2: resolution: {integrity: sha512-Xwag0TULqriaugXqVdDiGZ5wuZpqABZlpwQ2Ho4GDyiu/R2Xjkp/9+zcFxL7uzeLl/QCPrflnvpVYyS3ouT7Zw==} peerDependencies: - typescript: 6.0.2 + typescript: '>=4.5.0' peerDependenciesMeta: typescript: optional: true @@ -20689,7 +20956,7 @@ packages: ts-essentials@7.0.3: resolution: {integrity: sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==} peerDependencies: - typescript: 6.0.2 + typescript: '>=3.7.0' ts-graphviz@2.1.6: resolution: {integrity: sha512-XyLVuhBVvdJTJr2FJJV2L1pc4MwSjMhcunRVgDE9k4wbb2ee7ORYnPewxMWUav12vxyfUM686MSGsqnVRIInuw==} @@ -20718,7 +20985,7 @@ packages: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' '@types/node': ^20.17.50 - typescript: 6.0.2 + typescript: '>=2.7' peerDependenciesMeta: '@swc/core': optional: true @@ -20745,7 +21012,7 @@ packages: engines: {node: '>=12.12.0'} hasBin: true peerDependencies: - typescript: 6.0.2 + typescript: '*' tsconfig-paths@4.2.0: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} @@ -20759,7 +21026,7 @@ packages: '@arethetypeswrong/core': ^0.18.1 '@vitejs/devtools': ^0.0.0-alpha.17 publint: ^0.3.0 - typescript: 6.0.2 + typescript: ^5.0.0 unplugin-lightningcss: ^0.4.0 unplugin-unused: ^0.5.0 peerDependenciesMeta: @@ -20896,13 +21163,33 @@ packages: engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: 6.0.2 + typescript: '>=4.8.4 <5.9.0' + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true typescript@6.0.2: resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} engines: {node: '>=14.17'} hasBin: true + typescript@7.0.2: + resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} + engines: {node: '>=16.20.0'} + hasBin: true + uc.micro@1.0.6: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} @@ -21199,7 +21486,7 @@ packages: vite-plugin-dts@4.5.4: resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==} peerDependencies: - typescript: 6.0.2 + typescript: '*' vite: '*' peerDependenciesMeta: vite: @@ -21277,7 +21564,7 @@ packages: vitest-mock-extended@3.1.0: resolution: {integrity: sha512-vCM0VkuocOUBwwqwV7JB7YStw07pqeKvEIrZnR8l3PtwYi6rAAJAyJACeC1UYNfbQWi85nz7EdiXWBFI5hll2g==} peerDependencies: - typescript: 6.0.2 + typescript: 3.x || 4.x || 5.x vitest: '>=3.0.0' vitest-websocket-mock@0.5.0: @@ -21358,7 +21645,7 @@ packages: vue-component-meta@2.1.10: resolution: {integrity: sha512-YEFSau36lLCJNvoM6eynAcq891Y6HKIEdEk3PCzCyNVySeYJAXgE/9iCYqQzLtBJlKg/bBpImz8VbUZsh4N/7Q==} peerDependencies: - typescript: 6.0.2 + typescript: '*' peerDependenciesMeta: typescript: optional: true @@ -21438,7 +21725,7 @@ packages: resolution: {integrity: sha512-jBYKBNFADTN+L+MdesNX/TB3XuDSyaWynKMDgR+yCSln0GQ9Tfb7JS2lr46s2LiFUT1WsmfWsSvIElyxzOPqcQ==} hasBin: true peerDependencies: - typescript: 6.0.2 + typescript: '>=5.0.0' vue-virtual-scroller@2.0.0-beta.8: resolution: {integrity: sha512-b8/f5NQ5nIEBRTNi6GcPItE4s7kxNHw2AIHLtDp+2QvqdTjVN0FgONwX9cr53jWRgnu+HRLPaWDOR2JPI5MTfQ==} @@ -21451,7 +21738,7 @@ packages: vue@3.5.26: resolution: {integrity: sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==} peerDependencies: - typescript: 6.0.2 + typescript: '*' peerDependenciesMeta: typescript: optional: true @@ -24351,10 +24638,10 @@ snapshots: ist: 1.1.7 mocha: 10.8.2 rollup: 2.79.2 - rollup-plugin-dts: 3.0.2(rollup@2.79.2)(typescript@6.0.2) + rollup-plugin-dts: 3.0.2(rollup@2.79.2)(typescript@4.9.5) selenium-webdriver: 4.39.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) serve-static: 1.16.3 - typescript: 6.0.2 + typescript: 4.9.5 transitivePeerDependencies: - bufferutil - supports-color @@ -24944,7 +25231,7 @@ snapshots: dependencies: '@supercharge/promise-pool': 3.1.0 semver: 7.7.3 - typescript: 6.0.2 + typescript: 5.9.3 '@google-cloud/paginator@5.0.2': dependencies: @@ -26091,7 +26378,7 @@ snapshots: resolve: 1.22.11 semver: 7.7.3 source-map: 0.6.1 - typescript: 6.0.2 + typescript: 5.8.2 transitivePeerDependencies: - '@types/node' @@ -28164,9 +28451,9 @@ snapshots: '@storybook/vue3': 10.1.11(storybook@10.1.11(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(utf-8-validate@5.0.10))(vue@3.5.26(typescript@6.0.2)) magic-string: 0.30.21 storybook: 10.1.11(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.6.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(utf-8-validate@5.0.10) - typescript: 6.0.2 + typescript: 5.9.3 vite: 8.0.2(@types/node@20.19.41)(esbuild@0.28.1)(jiti@2.6.1)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.16.1)(tsx@4.19.3)(yaml@2.8.3) - vue-component-meta: 2.1.10(typescript@6.0.2) + vue-component-meta: 2.1.10(typescript@5.9.3) vue-docgen-api: 4.76.0(vue@3.5.26(typescript@6.0.2)) transitivePeerDependencies: - esbuild @@ -29346,6 +29633,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.35.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.9.3) + '@typescript-eslint/types': 8.35.0 + debug: 4.4.3(supports-color@8.1.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/project-service@8.35.0(typescript@6.0.2)': dependencies: '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@6.0.2) @@ -29374,6 +29670,10 @@ snapshots: '@typescript-eslint/types': 8.35.0 '@typescript-eslint/visitor-keys': 8.35.0 + '@typescript-eslint/tsconfig-utils@8.35.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + '@typescript-eslint/tsconfig-utils@8.35.0(typescript@6.0.2)': dependencies: typescript: 6.0.2 @@ -29402,6 +29702,22 @@ snapshots: '@typescript-eslint/types@8.35.0': {} + '@typescript-eslint/typescript-estree@8.35.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.35.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.9.3) + '@typescript-eslint/types': 8.35.0 + '@typescript-eslint/visitor-keys': 8.35.0 + debug: 4.4.3(supports-color@8.1.1) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.9 + semver: 7.7.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/typescript-estree@8.35.0(typescript@6.0.2)': dependencies: '@typescript-eslint/project-service': 8.35.0(typescript@6.0.2) @@ -29445,6 +29761,66 @@ snapshots: '@typescript-eslint/types': 8.35.0 eslint-visitor-keys: 4.2.1 + '@typescript/typescript-aix-ppc64@7.0.2': + optional: true + + '@typescript/typescript-darwin-arm64@7.0.2': + optional: true + + '@typescript/typescript-darwin-x64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-x64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm@7.0.2': + optional: true + + '@typescript/typescript-linux-loong64@7.0.2': + optional: true + + '@typescript/typescript-linux-mips64el@7.0.2': + optional: true + + '@typescript/typescript-linux-ppc64@7.0.2': + optional: true + + '@typescript/typescript-linux-riscv64@7.0.2': + optional: true + + '@typescript/typescript-linux-s390x@7.0.2': + optional: true + + '@typescript/typescript-linux-x64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-sunos-x64@7.0.2': + optional: true + + '@typescript/typescript-win32-arm64@7.0.2': + optional: true + + '@typescript/typescript-win32-x64@7.0.2': + optional: true + '@typescript/vfs@1.6.0(typescript@6.0.2)': dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -29760,7 +30136,7 @@ snapshots: '@vue/devtools-api@6.6.4': {} - '@vue/language-core@2.1.10(typescript@6.0.2)': + '@vue/language-core@2.1.10(typescript@5.9.3)': dependencies: '@volar/language-core': 2.4.12 '@vue/compiler-dom': 3.5.26 @@ -29771,7 +30147,7 @@ snapshots: muggle-string: 0.4.1 path-browserify: 1.0.1 optionalDependencies: - typescript: 6.0.2 + typescript: 5.9.3 '@vue/language-core@2.2.0(typescript@6.0.2)': dependencies: @@ -31746,7 +32122,7 @@ snapshots: commander: 12.1.0 filing-cabinet: 5.0.3 precinct: 12.2.0 - typescript: 6.0.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -31804,16 +32180,16 @@ snapshots: detective-stylus@5.0.1: {} - detective-typescript@14.0.0(typescript@6.0.2): + detective-typescript@14.0.0(typescript@5.9.3): dependencies: - '@typescript-eslint/typescript-estree': 8.35.0(typescript@6.0.2) + '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.9.3) ast-module-types: 6.0.1 node-source-walk: 7.0.1 - typescript: 6.0.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - detective-vue2@2.2.0(typescript@6.0.2): + detective-vue2@2.2.0(typescript@5.9.3): dependencies: '@dependents/detective-less': 5.0.1 '@vue/compiler-sfc': 3.5.26 @@ -31821,8 +32197,8 @@ snapshots: detective-sass: 6.0.1 detective-scss: 5.0.1 detective-stylus: 5.0.1 - detective-typescript: 14.0.0(typescript@6.0.2) - typescript: 6.0.2 + detective-typescript: 14.0.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -33125,7 +33501,7 @@ snapshots: sass-lookup: 6.1.0 stylus-lookup: 6.1.0 tsconfig-paths: 4.2.0 - typescript: 6.0.2 + typescript: 5.9.3 fill-range@7.1.1: dependencies: @@ -37233,12 +37609,12 @@ snapshots: detective-sass: 6.0.1 detective-scss: 5.0.1 detective-stylus: 5.0.1 - detective-typescript: 14.0.0(typescript@6.0.2) - detective-vue2: 2.2.0(typescript@6.0.2) + detective-typescript: 14.0.0(typescript@5.9.3) + detective-vue2: 2.2.0(typescript@5.9.3) module-definition: 6.0.1 node-source-walk: 7.0.1 postcss: 8.5.10 - typescript: 6.0.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -38118,11 +38494,11 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.11 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.11 - rollup-plugin-dts@3.0.2(rollup@2.79.2)(typescript@6.0.2): + rollup-plugin-dts@3.0.2(rollup@2.79.2)(typescript@4.9.5): dependencies: magic-string: 0.25.9 rollup: 2.79.2 - typescript: 6.0.2 + typescript: 4.9.5 optionalDependencies: '@babel/code-frame': 7.29.7 @@ -39507,6 +39883,10 @@ snapshots: ts-algebra@2.0.0: {} + ts-api-utils@2.1.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + ts-api-utils@2.1.0(typescript@6.0.2): dependencies: typescript: 6.0.2 @@ -39757,8 +40137,37 @@ snapshots: transitivePeerDependencies: - supports-color + typescript@4.9.5: {} + + typescript@5.8.2: {} + + typescript@5.9.3: {} + typescript@6.0.2: {} + typescript@7.0.2: + optionalDependencies: + '@typescript/typescript-aix-ppc64': 7.0.2 + '@typescript/typescript-darwin-arm64': 7.0.2 + '@typescript/typescript-darwin-x64': 7.0.2 + '@typescript/typescript-freebsd-arm64': 7.0.2 + '@typescript/typescript-freebsd-x64': 7.0.2 + '@typescript/typescript-linux-arm': 7.0.2 + '@typescript/typescript-linux-arm64': 7.0.2 + '@typescript/typescript-linux-loong64': 7.0.2 + '@typescript/typescript-linux-mips64el': 7.0.2 + '@typescript/typescript-linux-ppc64': 7.0.2 + '@typescript/typescript-linux-riscv64': 7.0.2 + '@typescript/typescript-linux-s390x': 7.0.2 + '@typescript/typescript-linux-x64': 7.0.2 + '@typescript/typescript-netbsd-arm64': 7.0.2 + '@typescript/typescript-netbsd-x64': 7.0.2 + '@typescript/typescript-openbsd-arm64': 7.0.2 + '@typescript/typescript-openbsd-x64': 7.0.2 + '@typescript/typescript-sunos-x64': 7.0.2 + '@typescript/typescript-win32-arm64': 7.0.2 + '@typescript/typescript-win32-x64': 7.0.2 + uc.micro@1.0.6: {} uc.micro@2.1.0: {} @@ -40189,14 +40598,14 @@ snapshots: chart.js: 4.4.0 vue: 3.5.26(typescript@6.0.2) - vue-component-meta@2.1.10(typescript@6.0.2): + vue-component-meta@2.1.10(typescript@5.9.3): dependencies: '@volar/typescript': 2.4.12 - '@vue/language-core': 2.1.10(typescript@6.0.2) + '@vue/language-core': 2.1.10(typescript@5.9.3) path-browserify: 1.0.1 vue-component-type-helpers: 2.1.10 optionalDependencies: - typescript: 6.0.2 + typescript: 5.9.3 vue-component-type-helpers@2.1.10: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a3273ca54c2..60859dece03 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -214,6 +214,8 @@ catalog: catalogMode: strict catalogs: + typescript: + typescript: 7.0.2 e2e: '@currents/playwright': ^2.0.0 '@playwright/cli': 0.1.0 @@ -267,3 +269,5 @@ minimumReleaseAge: 4320 minimumReleaseAgeExclude: - '@n8n/*' - '@n8n_io/*' + - 'typescript' + - '@typescript/*' diff --git a/scripts/typescript-migration/README.md b/scripts/typescript-migration/README.md new file mode 100644 index 00000000000..88b0f571502 --- /dev/null +++ b/scripts/typescript-migration/README.md @@ -0,0 +1,79 @@ +# TypeScript 6 → 7 migration tooling + +Support scripts for migrating the monorepo from TypeScript `6.0.2` to the +TypeScript 7 line, and for moving legacy packages off `moduleResolution: node` +onto **NodeNext**. Migration is done **per package**. + +## Scripts + +### `benchmark.mjs` — build/typecheck timing + +Times a single package's `build` and `typecheck` scripts and records the result +to a per-package JSON file. Run it *before* switching compilers, switch, then +run it again — the second run appends to the same file and prints a delta table. + +```bash +# before the switch +node scripts/typescript-migration/benchmark.mjs @n8n/config --label=before + +# … swap in the TS 7 compiler … + +# after — appends to the same file and prints the before/after delta +node scripts/typescript-migration/benchmark.mjs @n8n/config --label=after +``` + +**Options** + +| Flag | Default | Meaning | +| ---------------- | -------------------- | ------------------------------------------------------------- | +| `` | — | Workspace name (`@n8n/config`) or a package dir. | +| `--label=` | `ts-` | Storage key. Different compilers auto-separate by version. | +| `--runs=` | `3` | Repetitions per task; reports min/median/mean. | +| `--tasks=a,b` | `typecheck,build` | Subset to run. Missing scripts are skipped with a warning. | +| `--no-prepare` | prepare on | Skip the untimed dependency prebuild. | + +**How it isolates the package** — dependencies are prebuilt once (untimed) via +`turbo run build --filter=^...`, then each timed run deletes the package's +`dist/` + `*.tsbuildinfo` (cold compile) and runs the package script directly +with `pnpm --filter run `, bypassing turbo's cache. So the numbers +reflect only that package's own `tsc` (+ `tsc-alias`) time. + +Results land in `results/.json` (gitignored). The label is compiler- +agnostic: this script never installs or selects TypeScript — wire that up +separately and just re-run with a new `--label`. + +### `add-import-extensions.mjs` — NodeNext import codemod + +Adds explicit `.js` / `.json` / `/index.js` extensions to **relative** import, +re-export, and dynamic-`import()` specifiers, which NodeNext (and ESM) require. + +```bash +# dry-run: prints every rewrite it would make +node scripts/typescript-migration/add-import-extensions.mjs packages/workflow + +# apply +node scripts/typescript-migration/add-import-extensions.mjs packages/workflow --write +``` + +- Uses `ts-morph` (already a catalog dep) and the package's `tsconfig.json` to + find source files. +- **Skips** bare/alias specifiers (`@/…`, `@utils/…`, package names) — alias + tails get their extension from `tsc-alias`'s `resolveFullPaths` at build time. +- **Skips** specifiers that already carry a known extension. +- Reports any relative specifier it can't resolve on disk for manual review; + it does not guess. + +## Per-package migration loop + +1. **Baseline:** `benchmark.mjs --label=before`. +2. **Config:** point the package's tsconfig at NodeNext — extend + `@n8n/typescript-config/modern`, or set `module: NodeNext` + + `moduleResolution: NodeNext` locally. +3. **Codemod:** run `add-import-extensions.mjs ` (review), then `--write`. +4. **Aliases:** if the package keeps path aliases, enable `tsc-alias` + `resolveFullPaths` so alias tails also get extensions in emit. +5. **Verify:** `pnpm --filter run build && pnpm --filter run typecheck && pnpm --filter test`. +6. **After:** `benchmark.mjs --label=after` → confirm the delta table. + +Migrate leaf/low-dependency packages first (`workflow`, `@n8n/config`, +`@n8n/di`) so downstream typechecks stay green, then work up toward `cli`. diff --git a/scripts/typescript-migration/SUMMARY.md b/scripts/typescript-migration/SUMMARY.md new file mode 100644 index 00000000000..4bdb952a66a --- /dev/null +++ b/scripts/typescript-migration/SUMMARY.md @@ -0,0 +1,42 @@ +# TypeScript 6 → 7 migration benchmarks + +Generated 2026-07-09T08:18:07.078Z from `scripts/typescript-migration/results/`. + +| Package | typecheck Δ | build Δ | +| --- | --- | --- | +| `@n8n/codemirror-lang` | -36.3% | -31.4% | +| `@n8n/codemirror-lang-html` | — | -17.0% | +| `@n8n/codemirror-lang-sql` | -42.7% | -39.2% | + +``` +=== @n8n/codemirror-lang — median times (Δ vs "before") === + +typecheck: + before 699ms + after 445ms -254ms (-36.3%) + +build: + before 650ms + after 446ms -204ms (-31.4%) +``` + +``` +=== @n8n/codemirror-lang-html — median times (Δ vs "before") === + +build: + before 1.09s + after 905ms -186ms (-17.0%) +``` + +``` +=== @n8n/codemirror-lang-sql — median times (Δ vs "before") === + +typecheck: + before 785ms + after 450ms -335ms (-42.7%) + +build: + before 720ms + after 438ms -282ms (-39.2%) +``` + diff --git a/scripts/typescript-migration/add-import-extensions.mjs b/scripts/typescript-migration/add-import-extensions.mjs new file mode 100644 index 00000000000..92f07bad819 --- /dev/null +++ b/scripts/typescript-migration/add-import-extensions.mjs @@ -0,0 +1,176 @@ +#!/usr/bin/env node +// Codemod: add explicit .js/.json extensions to relative import specifiers so a +// package can move from `moduleResolution: node` to NodeNext. +// +// NodeNext (and ESM) require relative specifiers to carry their runtime +// extension. TypeScript's convention is to import a `.ts` source as `.js`, and +// a directory as `/index.js`. This rewrites: +// import x from './foo' -> './foo.js' +// export * from './bar' -> './bar.js' +// import('./baz') -> './baz.js' +// import cfg from './data' -> './data.json' (when data.json exists) +// import x from './widgets' -> './widgets/index.js' +// +// It SKIPS bare/alias specifiers (`@/…`, `@utils/…`, package names) — those are +// handled by tsc-alias's `resolveFullPaths` at build time — and anything that +// already has a known extension. +// +// Dry-run by default; pass --write to apply. +// +// Usage: +// node scripts/typescript-migration/add-import-extensions.mjs [--write] + +import { createRequire } from 'node:module'; +import { existsSync, readFileSync } from 'node:fs'; +import { dirname, join, resolve } from 'node:path'; +import { fileURLToPath, pathToFileURL } from 'node:url'; + +const SCRIPT_DIR = dirname(fileURLToPath(import.meta.url)); +const REPO_ROOT = resolve(SCRIPT_DIR, '..', '..'); +const KNOWN_EXTENSIONS = ['.js', '.mjs', '.cjs', '.json', '.node']; + +function fail(message) { + console.error(`\n✖ ${message}\n`); + process.exit(1); +} + +// ts-morph is a catalog dep of several packages, not hoisted to the root, so +// resolve it from a package that depends on it. +async function loadTsMorph() { + const candidates = [ + 'packages/testing/janitor', + 'packages/testing/code-health', + 'packages/@n8n/node-cli', + ]; + for (const rel of candidates) { + const anchor = join(REPO_ROOT, rel, 'package.json'); + if (!existsSync(anchor)) continue; + try { + const require = createRequire(anchor); + const entry = require.resolve('ts-morph'); + return await import(pathToFileURL(entry).href); + } catch { + // try next anchor + } + } + fail('Could not resolve "ts-morph". Run `pnpm install` first.'); +} + +function parseArgs(argv) { + let write = false; + const positionals = []; + for (const arg of argv) { + if (arg === '--write') write = true; + else if (arg.startsWith('--')) fail(`Unknown option: ${arg}`); + else positionals.push(arg); + } + if (positionals.length !== 1) fail('Expected exactly one argument.'); + return { package: positionals[0], write }; +} + +function findTsConfig(pkgArg) { + const dir = resolve(REPO_ROOT, pkgArg); + if (existsSync(join(dir, 'tsconfig.json'))) return join(dir, 'tsconfig.json'); + fail(`No tsconfig.json found at "${dir}". Pass a package directory (e.g. packages/workflow).`); +} + +function isRelative(spec) { + return spec.startsWith('./') || spec.startsWith('../'); +} + +function hasKnownExtension(spec) { + return KNOWN_EXTENSIONS.some((ext) => spec.endsWith(ext)); +} + +// Resolve a relative specifier to the extension it should carry, or null if it +// can't be resolved on disk (caller reports it for manual review). +function resolveExtension(fromFile, spec) { + const base = resolve(dirname(fromFile), spec); + for (const ext of ['.ts', '.tsx', '.mts', '.cts']) { + if (existsSync(base + ext)) return '.js'; + } + if (existsSync(base + '.json')) return '.json'; + if (existsSync(base + '.js')) return '.js'; + for (const idx of ['index.ts', 'index.tsx', 'index.mts', 'index.cts', 'index.js']) { + if (existsSync(join(base, idx))) return '/index.js'; + } + return null; +} + +async function main() { + const opts = parseArgs(process.argv.slice(2)); + const tsConfigFilePath = findTsConfig(opts.package); + const { Project, SyntaxKind } = await loadTsMorph(); + + console.log(`\nCodemod: add import extensions`); + console.log(` tsconfig: ${tsConfigFilePath}`); + console.log(` mode: ${opts.write ? 'WRITE' : 'dry-run (pass --write to apply)'}\n`); + + // Only rewrite the target package's own hand-written sources. The project + // (via references) also loads dist output and other packages' declaration + // files — those aren't ours to touch. + const pkgDir = dirname(tsConfigFilePath); + const project = new Project({ tsConfigFilePath }); + const sourceFiles = project.getSourceFiles().filter((sf) => { + const p = sf.getFilePath(); + return ( + p.startsWith(`${pkgDir}/`) && + !p.includes('/node_modules/') && + !p.includes('/dist/') && + !sf.isDeclarationFile() + ); + }); + + let scanned = 0; + let rewritten = 0; + const unresolved = []; + + for (const sf of sourceFiles) { + scanned++; + const filePath = sf.getFilePath(); + const relFile = filePath.replace(`${REPO_ROOT}/`, ''); + let changedInFile = false; + + // Collect (node, currentSpec, setter) for static import/export + dynamic import. + const targets = []; + for (const decl of [...sf.getImportDeclarations(), ...sf.getExportDeclarations()]) { + const spec = decl.getModuleSpecifierValue(); + if (spec) targets.push({ spec, set: (v) => decl.setModuleSpecifier(v) }); + } + for (const call of sf.getDescendantsOfKind(SyntaxKind.CallExpression)) { + if (call.getExpression().getKind() !== SyntaxKind.ImportKeyword) continue; + const [arg] = call.getArguments(); + if (arg && arg.getKind() === SyntaxKind.StringLiteral) { + targets.push({ spec: arg.getLiteralText(), set: (v) => arg.setLiteralValue(v) }); + } + } + + for (const { spec, set } of targets) { + if (!isRelative(spec) || hasKnownExtension(spec)) continue; + const ext = resolveExtension(filePath, spec); + if (!ext) { + unresolved.push(`${relFile}: '${spec}'`); + continue; + } + set(ext.startsWith('/') ? spec + ext : spec + ext); + rewritten++; + changedInFile = true; + if (!opts.write) console.log(` ${relFile}: '${spec}' -> '${spec + ext}'`); + } + + if (changedInFile && opts.write) sf.saveSync(); + } + + console.log(`\n${'='.repeat(48)}`); + console.log(` files scanned: ${scanned}`); + console.log(` specifiers ${opts.write ? 'rewritten' : 'to rewrite'}: ${rewritten}`); + console.log(` unresolved: ${unresolved.length}`); + if (unresolved.length) { + console.log(`\n⚠ Unresolved relative specifiers (review manually):`); + for (const u of unresolved) console.log(` ${u}`); + } + if (!opts.write && rewritten > 0) console.log(`\nRe-run with --write to apply.`); + console.log(''); +} + +main(); diff --git a/scripts/typescript-migration/benchmark.mjs b/scripts/typescript-migration/benchmark.mjs new file mode 100644 index 00000000000..b7c776b5e82 --- /dev/null +++ b/scripts/typescript-migration/benchmark.mjs @@ -0,0 +1,227 @@ +#!/usr/bin/env node +// Per-package build/typecheck timing for the TS 6 -> 7 migration. +// +// Run it before switching compilers (writes a results file), switch the +// compiler, then run it again — the second run appends to the same file and +// prints a before/after delta table. Migration is per-package, so this always +// targets a single workspace package. +// +// Usage: +// node scripts/typescript-migration/benchmark.mjs [options] +// +// Options: +// --label= Key the run is stored under. Defaults to the detected +// TypeScript version (e.g. "ts-6.0.2"), so before/after +// with different compilers auto-separate. Re-running a +// label overwrites it. +// --runs= Repetitions per task (default 3). Reports min/median/mean. +// --tasks=a,b Subset of "typecheck,build" (default both). Missing +// scripts are skipped with a warning. +// --no-prepare Skip the untimed dependency prebuild. +// +// Example: +// node scripts/typescript-migration/benchmark.mjs @n8n/config --label=before + +import { execFileSync, spawnSync } from 'node:child_process'; +import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; +import { dirname, join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const SCRIPT_DIR = dirname(fileURLToPath(import.meta.url)); +const REPO_ROOT = resolve(SCRIPT_DIR, '..', '..'); +const RESULTS_DIR = join(SCRIPT_DIR, 'results'); +const DEFAULT_TASKS = ['typecheck', 'build']; + +function parseArgs(argv) { + const opts = { runs: 3, tasks: DEFAULT_TASKS, prepare: true, label: undefined }; + const positionals = []; + for (const arg of argv) { + if (arg === '--no-prepare') opts.prepare = false; + else if (arg.startsWith('--label=')) opts.label = arg.slice('--label='.length); + else if (arg.startsWith('--runs=')) opts.runs = Number(arg.slice('--runs='.length)); + else if (arg.startsWith('--tasks=')) opts.tasks = arg.slice('--tasks='.length).split(',').map((t) => t.trim()).filter(Boolean); + else if (arg.startsWith('--')) fail(`Unknown option: ${arg}`); + else positionals.push(arg); + } + if (positionals.length !== 1) fail('Expected exactly one argument.'); + if (!Number.isInteger(opts.runs) || opts.runs < 1) fail('--runs must be a positive integer.'); + opts.package = positionals[0]; + return opts; +} + +function fail(message) { + console.error(`\n✖ ${message}\n`); + process.exit(1); +} + +// Resolve a workspace package name or directory to { name, dir, scripts }. +function resolvePackage(nameOrDir) { + // A directory path was given directly. + const asDir = resolve(REPO_ROOT, nameOrDir); + if (existsSync(join(asDir, 'package.json'))) { + const pkg = JSON.parse(readFileSync(join(asDir, 'package.json'), 'utf8')); + return { name: pkg.name, dir: asDir, scripts: pkg.scripts ?? {} }; + } + // Otherwise treat it as a workspace package name and ask pnpm where it lives. + let out; + try { + out = execFileSync('pnpm', ['--filter', nameOrDir, 'exec', 'node', '-p', 'process.cwd()'], { + cwd: REPO_ROOT, + encoding: 'utf8', + stdio: ['ignore', 'pipe', 'pipe'], + }); + } catch { + fail(`Could not resolve package "${nameOrDir}" — not a directory and pnpm --filter found no match.`); + } + const dir = out.trim().split('\n').filter(Boolean).pop(); + if (!dir || !existsSync(join(dir, 'package.json'))) fail(`Resolved an invalid directory for "${nameOrDir}".`); + const pkg = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8')); + return { name: pkg.name, dir, scripts: pkg.scripts ?? {} }; +} + +function detectTsVersion(pkgName) { + const res = spawnSync('pnpm', ['--filter', pkgName, 'exec', 'tsc', '--version'], { + cwd: REPO_ROOT, + encoding: 'utf8', + }); + const match = /Version\s+([\d.]+)/.exec(res.stdout ?? ''); + return match ? match[1] : 'unknown'; +} + +// Wipe compiled output + incremental caches so every timed run is cold. +function cleanBuildArtifacts(pkgDir) { + rmSync(join(pkgDir, 'dist'), { recursive: true, force: true }); + rmSync(join(pkgDir, 'tsconfig.tsbuildinfo'), { force: true }); +} + +function timeTask(pkgName, pkgDir, task) { + cleanBuildArtifacts(pkgDir); + const start = process.hrtime.bigint(); + const res = spawnSync('pnpm', ['--filter', pkgName, 'run', task], { + cwd: REPO_ROOT, + stdio: 'inherit', + }); + const ms = Number(process.hrtime.bigint() - start) / 1e6; + if (res.status !== 0) fail(`Task "${task}" failed (exit ${res.status}); aborting so timings aren't polluted.`); + return ms; +} + +function summarize(runsMs) { + const sorted = [...runsMs].sort((a, b) => a - b); + const mid = Math.floor(sorted.length / 2); + const median = sorted.length % 2 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2; + const mean = runsMs.reduce((a, b) => a + b, 0) / runsMs.length; + return { + runsMs: runsMs.map((n) => Math.round(n)), + min: Math.round(sorted[0]), + median: Math.round(median), + mean: Math.round(mean), + }; +} + +function fmtMs(ms) { + return ms >= 1000 ? `${(ms / 1000).toFixed(2)}s` : `${ms}ms`; +} + +// Baseline-first ordering: "before" is always the baseline and "after" always +// last regardless of recording order; anything else falls between by timestamp. +function orderLabels(runs) { + const rank = (l) => (/^before$/i.test(l) ? -1 : /^after$/i.test(l) ? 1 : 0); + return Object.keys(runs).sort((a, b) => { + if (rank(a) !== rank(b)) return rank(a) - rank(b); + return (runs[a].timestamp ?? '').localeCompare(runs[b].timestamp ?? ''); + }); +} + +// Print a comparison table across every stored label, deltas vs the baseline. +function printComparison(data) { + const labels = orderLabels(data.runs); + if (labels.length < 2) { + console.log(`\nStored 1 run ("${labels[0]}"). Run again with a second --label to see a delta.\n`); + return; + } + const base = labels[0]; + console.log(`\n=== ${data.package} — median times (Δ vs "${base}") ===`); + const tasks = new Set(); + for (const l of labels) for (const t of Object.keys(data.runs[l].tasks)) tasks.add(t); + for (const task of tasks) { + console.log(`\n${task}:`); + const baseMedian = data.runs[base].tasks[task]?.median; + for (const label of labels) { + const stat = data.runs[label].tasks[task]; + if (!stat) { + console.log(` ${label.padEnd(16)} (not measured)`); + continue; + } + let delta = ''; + if (label !== base && baseMedian != null) { + const diff = stat.median - baseMedian; + const pct = ((diff / baseMedian) * 100).toFixed(1); + const sign = diff <= 0 ? '' : '+'; + delta = ` ${sign}${fmtMs(diff)} (${sign}${pct}%)`; + } + console.log(` ${label.padEnd(16)} ${fmtMs(stat.median).padStart(9)}${delta}`); + } + } + console.log(''); +} + +function main() { + const opts = parseArgs(process.argv.slice(2)); + const pkg = resolvePackage(opts.package); + const tsVersion = detectTsVersion(pkg.name); + const label = opts.label ?? `ts-${tsVersion}`; + + const tasks = opts.tasks.filter((task) => { + if (pkg.scripts[task]) return true; + console.warn(`⚠ Package "${pkg.name}" has no "${task}" script — skipping.`); + return false; + }); + if (tasks.length === 0) fail('No runnable tasks for this package.'); + + console.log(`\nBenchmarking ${pkg.name}`); + console.log(` label: ${label}`); + console.log(` tsc: ${tsVersion}`); + console.log(` node: ${process.version}`); + console.log(` runs/task: ${opts.runs}`); + console.log(` tasks: ${tasks.join(', ')}\n`); + + if (opts.prepare) { + console.log('Prebuilding dependencies (untimed)…'); + const prep = spawnSync('pnpm', ['build', `--filter=${pkg.name}^...`], { + cwd: REPO_ROOT, + stdio: 'inherit', + }); + if (prep.status !== 0) fail('Dependency prebuild failed. Fix the build or pass --no-prepare.'); + } + + const taskStats = {}; + for (const task of tasks) { + const runsMs = []; + for (let i = 0; i < opts.runs; i++) { + console.log(`\n▶ ${task} — run ${i + 1}/${opts.runs}`); + runsMs.push(timeTask(pkg.name, pkg.dir, task)); + } + taskStats[task] = summarize(runsMs); + console.log(` ↳ ${task}: min ${fmtMs(taskStats[task].min)}, median ${fmtMs(taskStats[task].median)}, mean ${fmtMs(taskStats[task].mean)}`); + } + + mkdirSync(RESULTS_DIR, { recursive: true }); + const resultsFile = join(RESULTS_DIR, `${pkg.name.replace(/[@/]/g, '_')}.json`); + const data = existsSync(resultsFile) + ? JSON.parse(readFileSync(resultsFile, 'utf8')) + : { package: pkg.name, runs: {} }; + data.runs[label] = { + label, + tsVersion, + node: process.version, + timestamp: new Date().toISOString(), + tasks: taskStats, + }; + writeFileSync(resultsFile, `${JSON.stringify(data, null, 2)}\n`); + console.log(`\n✔ Wrote ${resultsFile}`); + + printComparison(data); +} + +main(); diff --git a/scripts/typescript-migration/summarize.mjs b/scripts/typescript-migration/summarize.mjs new file mode 100644 index 00000000000..ed226eb50e5 --- /dev/null +++ b/scripts/typescript-migration/summarize.mjs @@ -0,0 +1,125 @@ +#!/usr/bin/env node +// Roll every results/.json into a single tracked Markdown report, so +// per-package before/after numbers are reviewable as PRs land. +// +// Usage: +// node scripts/typescript-migration/summarize.mjs [--out=] +// +// Default output: scripts/typescript-migration/SUMMARY.md (committed — the +// results/ JSON is gitignored, this rollup is not). + +import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs'; +import { dirname, join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const SCRIPT_DIR = dirname(fileURLToPath(import.meta.url)); +const RESULTS_DIR = join(SCRIPT_DIR, 'results'); + +function parseArgs(argv) { + let out = join(SCRIPT_DIR, 'SUMMARY.md'); + for (const arg of argv) { + if (arg.startsWith('--out=')) out = resolve(process.cwd(), arg.slice('--out='.length)); + else { + console.error(`\n✖ Unknown option: ${arg}\n`); + process.exit(1); + } + } + return { out }; +} + +function fmtMs(ms) { + return ms >= 1000 ? `${(ms / 1000).toFixed(2)}s` : `${ms}ms`; +} + +// Baseline-first ordering: a label named "before" is always the baseline and +// "after" always last, regardless of the order they were recorded in; anything +// else falls between them by timestamp. Keeps deltas pointing the right way. +function orderLabels(runs) { + const rank = (l) => (/^before$/i.test(l) ? -1 : /^after$/i.test(l) ? 1 : 0); + return Object.keys(runs).sort((a, b) => { + if (rank(a) !== rank(b)) return rank(a) - rank(b); + return (runs[a].timestamp ?? '').localeCompare(runs[b].timestamp ?? ''); + }); +} + +// Render one package's stored runs as the Δ-vs-baseline block. +function renderBlock(data) { + const labels = orderLabels(data.runs); + const base = labels[0]; + const lines = [`=== ${data.package} — median times (Δ vs "${base}") ===`]; + + const tasks = new Set(); + for (const l of labels) for (const t of Object.keys(data.runs[l].tasks)) tasks.add(t); + + for (const task of tasks) { + lines.push('', `${task}:`); + const baseMedian = data.runs[base].tasks[task]?.median; + for (const label of labels) { + const stat = data.runs[label].tasks[task]; + if (!stat) { + lines.push(` ${label.padEnd(16)} (not measured)`); + continue; + } + let delta = ''; + if (label !== base && baseMedian != null) { + const diff = stat.median - baseMedian; + const pct = ((diff / baseMedian) * 100).toFixed(1); + const sign = diff <= 0 ? '' : '+'; + delta = ` ${sign}${fmtMs(diff)} (${sign}${pct}%)`; + } + lines.push(` ${label.padEnd(16)} ${fmtMs(stat.median).padStart(9)}${delta}`); + } + } + return lines.join('\n'); +} + +// One "before → after" delta per task for the overview table (first vs last label). +function overviewDelta(data, task) { + const labels = orderLabels(data.runs); + const first = data.runs[labels[0]].tasks[task]?.median; + const last = data.runs[labels[labels.length - 1]].tasks[task]?.median; + if (labels.length < 2 || first == null || last == null) return '—'; + const pct = (((last - first) / first) * 100).toFixed(1); + return `${last - first <= 0 ? '' : '+'}${pct}%`; +} + +function main() { + const { out } = parseArgs(process.argv.slice(2)); + + if (!existsSync(RESULTS_DIR)) { + console.error(`\n✖ No results directory at ${RESULTS_DIR}. Run benchmark.mjs first.\n`); + process.exit(1); + } + + const files = readdirSync(RESULTS_DIR) + .filter((f) => f.endsWith('.json')) + .map((f) => JSON.parse(readFileSync(join(RESULTS_DIR, f), 'utf8'))) + .sort((a, b) => a.package.localeCompare(b.package)); + + if (files.length === 0) { + console.error('\n✖ No result files found. Run benchmark.mjs first.\n'); + process.exit(1); + } + + const md = []; + md.push('# TypeScript 6 → 7 migration benchmarks', ''); + md.push(`Generated ${new Date().toISOString()} from \`scripts/typescript-migration/results/\`.`, ''); + + // Overview table: median Δ (first → last label) per package. + md.push('| Package | typecheck Δ | build Δ |', '| --- | --- | --- |'); + for (const data of files) { + md.push(`| \`${data.package}\` | ${overviewDelta(data, 'typecheck')} | ${overviewDelta(data, 'build')} |`); + } + md.push(''); + + // Per-package detail blocks in the benchmark's own format. + for (const data of files) { + md.push('```', renderBlock(data), '```', ''); + } + + mkdirSync(dirname(out), { recursive: true }); + writeFileSync(out, `${md.join('\n')}\n`); + console.log(`✔ Wrote ${out} (${files.length} package${files.length === 1 ? '' : 's'})`); +} + +main();