From 9f43f0ddf0f06520cc0053d0baacc98b4121c4bb Mon Sep 17 00:00:00 2001 From: kac-axelor <215158475+kac-axelor@users.noreply.github.com> Date: Wed, 10 Jun 2026 18:42:58 +0530 Subject: [PATCH 1/2] Fix Options<> excess-property guard under TypeScript 6.0 TS 6.0 preserves the argument's exact shape when inferring generics (microsoft/TypeScript#63515), so the prior T[K]-per-slot guard silently accepted unknown keys at nested depths. Switch to U[K] (the declared shape); a phantom branch keeps T[K] as an inference anchor so Payload still narrows to selected fields. --- src/client/types/base.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/client/types/base.ts b/src/client/types/base.ts index 109351f..cda5482 100644 --- a/src/client/types/base.ts +++ b/src/client/types/base.ts @@ -56,8 +56,17 @@ export type OmitByType = Pick< { [K in keyof T]-?: T[K] extends Type ? never : K }[keyof T] >; +// TS 6.0 infers the exact argument shape (unknown keys included), so T[K] +// checks a value against itself — excess keys pass. U[K] checks against the +// declared shape instead. The phantom-key branch keeps T[K] referenced so +// TypeScript still infers T and Payload still narrows to selected fields. +// https://github.com/microsoft/TypeScript/issues/63515 export type Options = { - [K in keyof T]: K extends keyof U ? T[K] : never; + [K in keyof T]: K extends keyof U + ? K extends "__use_T_so_it_is_inferred__" + ? T[K] + : U[K] + : never; }; export type OrderBy = "ASC" | "DESC"; From 591f0687eeed97f482cf49887864325d3ee6fb86 Mon Sep 17 00:00:00 2001 From: kac-axelor <215158475+kac-axelor@users.noreply.github.com> Date: Wed, 10 Jun 2026 20:43:47 +0530 Subject: [PATCH 2/2] Upgrade TypeScript to 6.0 TS 6.0 no longer auto-includes node_modules/@types, so declare types: ["node"] explicitly for the Buffer/process/node:* usage. --- package.json | 2 +- pnpm-lock.yaml | 59 +++++++++++++++++++++++++++++++++++--------------- tsconfig.json | 1 + 3 files changed, 44 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 2fa569d..5bd28e1 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "prettier": "^3.6.2", "reflect-metadata": "^0.2.2", "rimraf": "^6.0.1", - "typescript": "^5.9.3", + "typescript": "^6.0.3", "vitest": "^4.0.2" }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 88d0c60..edf0358 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,14 +22,14 @@ importers: version: 8.16.3 typeorm: specifier: ^0.3.27 - version: 0.3.27(pg@8.16.3)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@24.9.1)(typescript@5.9.3)) + version: 0.3.27(pg@8.16.3)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@24.9.1)(typescript@6.0.3)) devDependencies: '@rslib/core': specifier: ^0.16.1 - version: 0.16.1(typescript@5.9.3) + version: 0.16.1(typescript@6.0.3) '@swc-node/register': specifier: ^1.11.1 - version: 1.11.1(@swc/core@1.13.5(@swc/helpers@0.5.17))(@swc/types@0.1.25)(typescript@5.9.3) + version: 1.11.1(@swc/core@1.13.5(@swc/helpers@0.5.17))(@swc/types@0.1.25)(typescript@6.0.3) '@swc/core': specifier: ^1.13.5 version: 1.13.5(@swc/helpers@0.5.17) @@ -58,8 +58,8 @@ importers: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 vitest: specifier: ^4.0.2 version: 4.0.2(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.3) @@ -2133,11 +2133,13 @@ packages: glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@11.0.3: resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} engines: {node: 20 || >=22} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true globals@14.0.0: @@ -2553,6 +2555,7 @@ packages: next@16.0.0: resolution: {integrity: sha512-nYohiNdxGu4OmBzggxy9rczmjIGI+TpR5vbKTsE1HqYwNm1B+YSiugSrFguX6omMOKnDHAmBPY4+8TNJk0Idyg==} engines: {node: '>=20.9.0'} + deprecated: This version has a security vulnerability. Please upgrade to a patched version. See https://nextjs.org/blog/CVE-2025-66478 for more details. hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 @@ -3153,6 +3156,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} @@ -4053,12 +4061,12 @@ snapshots: core-js: 3.46.0 jiti: 2.6.1 - '@rslib/core@0.16.1(typescript@5.9.3)': + '@rslib/core@0.16.1(typescript@6.0.3)': dependencies: '@rsbuild/core': 1.6.0-beta.1 - rsbuild-plugin-dts: 0.16.1(@rsbuild/core@1.6.0-beta.1)(typescript@5.9.3) + rsbuild-plugin-dts: 0.16.1(@rsbuild/core@1.6.0-beta.1)(typescript@6.0.3) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - '@typescript/native-preview' @@ -4143,6 +4151,21 @@ snapshots: - '@swc/types' - supports-color + '@swc-node/register@1.11.1(@swc/core@1.13.5(@swc/helpers@0.5.17))(@swc/types@0.1.25)(typescript@6.0.3)': + dependencies: + '@swc-node/core': 1.14.1(@swc/core@1.13.5(@swc/helpers@0.5.17))(@swc/types@0.1.25) + '@swc-node/sourcemap-support': 0.6.1 + '@swc/core': 1.13.5(@swc/helpers@0.5.17) + colorette: 2.0.20 + debug: 4.4.3 + oxc-resolver: 11.11.1 + pirates: 4.0.7 + tslib: 2.8.1 + typescript: 6.0.3 + transitivePeerDependencies: + - '@swc/types' + - supports-color + '@swc-node/sourcemap-support@0.6.1': dependencies: source-map-support: 0.5.21 @@ -5003,7 +5026,7 @@ snapshots: eslint: 9.38.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.38.0(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.38.0(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.38.0(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.38.0(jiti@2.6.1)) @@ -5036,7 +5059,7 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.38.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -5051,7 +5074,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.38.0(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -6013,12 +6036,12 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.52.5 fsevents: 2.3.3 - rsbuild-plugin-dts@0.16.1(@rsbuild/core@1.6.0-beta.1)(typescript@5.9.3): + rsbuild-plugin-dts@0.16.1(@rsbuild/core@1.6.0-beta.1)(typescript@6.0.3): dependencies: '@ast-grep/napi': 0.37.0 '@rsbuild/core': 1.6.0-beta.1 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 run-parallel@1.2.0: dependencies: @@ -6287,7 +6310,7 @@ snapshots: dependencies: typescript: 5.9.3 - ts-node@10.9.2(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@24.9.1)(typescript@5.9.3): + ts-node@10.9.2(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@24.9.1)(typescript@6.0.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -6301,7 +6324,7 @@ snapshots: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.9.3 + typescript: 6.0.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: @@ -6362,7 +6385,7 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typeorm@0.3.27(pg@8.16.3)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@24.9.1)(typescript@5.9.3)): + typeorm@0.3.27(pg@8.16.3)(reflect-metadata@0.2.2)(ts-node@10.9.2(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@24.9.1)(typescript@6.0.3)): dependencies: '@sqltools/formatter': 1.2.5 ansis: 3.17.0 @@ -6381,7 +6404,7 @@ snapshots: yargs: 17.7.2 optionalDependencies: pg: 8.16.3 - ts-node: 10.9.2(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@24.9.1)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@24.9.1)(typescript@6.0.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -6399,6 +6422,8 @@ snapshots: typescript@5.9.3: {} + typescript@6.0.3: {} + unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 diff --git a/tsconfig.json b/tsconfig.json index 3e01d1a..de7cfa6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,6 +5,7 @@ "module": "ESNext", "moduleDetection": "force", "skipLibCheck": true, + "types": ["node"], "allowJs": true, "esModuleInterop": true,