From a02430d2748f43fd0c692a5f680d7e9e9690b07b Mon Sep 17 00:00:00 2001 From: Alex / KATT Date: Fri, 23 Dec 2022 09:30:19 +0100 Subject: [PATCH] chore(lint): re-enable `@typescript-eslint/ban-types` (#3464) --- .eslintrc | 1 - packages/react-query/src/createTRPCReact.tsx | 6 +++--- packages/server/src/adapters/node-http/types.ts | 2 +- packages/server/src/core/initTRPC.ts | 8 +++++--- packages/server/src/core/router.ts | 3 +++ packages/server/src/deprecated/interop.ts | 1 + packages/server/src/deprecated/router.ts | 2 ++ packages/server/src/shared/internal/serialize.ts | 6 +++++- packages/server/src/types.ts | 2 +- packages/tests/server/___testHelpers.ts | 2 +- packages/tests/server/children.test.ts | 2 +- packages/tests/server/index.test.ts | 8 ++++---- packages/tests/server/inferenceUtils.ts | 2 +- packages/tests/server/initTRPC.test.ts | 7 ++++++- packages/tests/server/interop/index.test.tsx | 2 ++ packages/tests/server/interop/react/__testHelpers.tsx | 2 ++ .../regression/issue-949-inferProcedureInput.test.ts | 3 ++- packages/tests/server/jsonify.test.ts | 4 ++-- packages/tests/server/router.test.ts | 2 +- 19 files changed, 43 insertions(+), 22 deletions(-) diff --git a/.eslintrc b/.eslintrc index 10b7b28b1cd..e679e34b6d1 100644 --- a/.eslintrc +++ b/.eslintrc @@ -21,7 +21,6 @@ "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-floating-promises": "error", "no-only-tests/no-only-tests": "error", - "@typescript-eslint/ban-types": "off", "@typescript-eslint/no-empty-interface": "off", "unicorn/filename-case": [ "error", diff --git a/packages/react-query/src/createTRPCReact.tsx b/packages/react-query/src/createTRPCReact.tsx index 7f89e0577c1..b3416d8f051 100644 --- a/packages/react-query/src/createTRPCReact.tsx +++ b/packages/react-query/src/createTRPCReact.tsx @@ -102,8 +102,8 @@ export type DecorateProcedure< >, ]; } - : {}) - : {}) & + : object) + : object) & (TFlags extends 'ExperimentalSuspense' ? { useSuspenseQuery: < @@ -126,7 +126,7 @@ export type DecorateProcedure< UseTRPCQuerySuccessResult>, ]; } - : {}) + : object) : TProcedure extends AnyMutationProcedure ? { useMutation: ( diff --git a/packages/server/src/adapters/node-http/types.ts b/packages/server/src/adapters/node-http/types.ts index a2e867f9de6..db9712f581f 100644 --- a/packages/server/src/adapters/node-http/types.ts +++ b/packages/server/src/adapters/node-http/types.ts @@ -17,7 +17,7 @@ export type NodeHTTPCreateContextOption< TRouter extends AnyRouter, TRequest, TResponse, -> = {} extends inferRouterContext +> = object extends inferRouterContext ? { /** * @link https://trpc.io/docs/context diff --git a/packages/server/src/core/initTRPC.ts b/packages/server/src/core/initTRPC.ts index fc1d2ef0349..759c802e0bd 100644 --- a/packages/server/src/core/initTRPC.ts +++ b/packages/server/src/core/initTRPC.ts @@ -29,8 +29,10 @@ type PartialRootConfigTypes = Partial; type CreateRootConfigTypesFromPartial = CreateRootConfigTypes<{ - ctx: TTypes['ctx'] extends RootConfigTypes['ctx'] ? TTypes['ctx'] : {}; - meta: TTypes['meta'] extends RootConfigTypes['meta'] ? TTypes['meta'] : {}; + ctx: TTypes['ctx'] extends RootConfigTypes['ctx'] ? TTypes['ctx'] : object; + meta: TTypes['meta'] extends RootConfigTypes['meta'] + ? TTypes['meta'] + : object; errorShape: TTypes['errorShape']; transformer: DataTransformerOptions; }>; @@ -42,7 +44,7 @@ type CreateRootConfigTypesFromPartial = * - Doesn't need to be a class but it doesn't really hurt either */ -class TRPCBuilder { +class TRPCBuilder { context() { return new TRPCBuilder>(); } diff --git a/packages/server/src/core/router.ts b/packages/server/src/core/router.ts index 246b3cc92e0..7687b8b1329 100644 --- a/packages/server/src/core/router.ts +++ b/packages/server/src/core/router.ts @@ -44,8 +44,11 @@ export interface RouterDef< * @deprecated */ TOld extends DeprecatedProcedureRouterRecord = { + // eslint-disable-next-line @typescript-eslint/ban-types queries: {}; + // eslint-disable-next-line @typescript-eslint/ban-types mutations: {}; + // eslint-disable-next-line @typescript-eslint/ban-types subscriptions: {}; }, > { diff --git a/packages/server/src/deprecated/interop.ts b/packages/server/src/deprecated/interop.ts index e43d5ada1a0..44cae5e8223 100644 --- a/packages/server/src/deprecated/interop.ts +++ b/packages/server/src/deprecated/interop.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/ban-types */ import { ProcedureParams, ProcedureType } from '..'; import { AnyRootConfig, RootConfig } from '../core/internals/config'; import { getParseFnOrPassThrough } from '../core/internals/getParseFn'; diff --git a/packages/server/src/deprecated/router.ts b/packages/server/src/deprecated/router.ts index 9154d207513..90b3b99dbf4 100644 --- a/packages/server/src/deprecated/router.ts +++ b/packages/server/src/deprecated/router.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/ban-types */ + /* eslint-disable @typescript-eslint/no-explicit-any */ import { TRPCError } from '../error/TRPCError'; import { defaultFormatter } from '../error/formatter'; diff --git a/packages/server/src/shared/internal/serialize.ts b/packages/server/src/shared/internal/serialize.ts index 4064eb521e9..52c79d687f7 100644 --- a/packages/server/src/shared/internal/serialize.ts +++ b/packages/server/src/shared/internal/serialize.ts @@ -8,10 +8,14 @@ type JsonPrimitive = | string | number | boolean + // eslint-disable-next-line @typescript-eslint/ban-types | String + // eslint-disable-next-line @typescript-eslint/ban-types | Number + // eslint-disable-next-line @typescript-eslint/ban-types | Boolean | null; +// eslint-disable-next-line @typescript-eslint/ban-types type NonJsonPrimitive = undefined | Function | symbol; /* @@ -24,7 +28,7 @@ type IsAny = 0 extends 1 & T ? true : false; export type Serialize = IsAny extends true ? any : T extends JsonPrimitive ? T : - T extends Map | Set ? {} : + T extends Map | Set ? object : T extends NonJsonPrimitive ? never : T extends { toJSON(): infer U } ? U : T extends [] ? [] : diff --git a/packages/server/src/types.ts b/packages/server/src/types.ts index 10870bcd1f1..4238a9cd5d8 100644 --- a/packages/server/src/types.ts +++ b/packages/server/src/types.ts @@ -46,7 +46,7 @@ export type ThenArg = TType extends PromiseLike */ export type Simplify = TType extends any[] | Date ? TType - : { [K in keyof TType]: TType[K] } & {}; + : { [K in keyof TType]: TType[K] }; /** * @public */ diff --git a/packages/tests/server/___testHelpers.ts b/packages/tests/server/___testHelpers.ts index 1c9407b827a..fc6dd18d030 100644 --- a/packages/tests/server/___testHelpers.ts +++ b/packages/tests/server/___testHelpers.ts @@ -110,7 +110,7 @@ export async function waitMs(ms: number) { await new Promise((resolve) => setTimeout(resolve, ms)); } -type Constructor = new (...args: any[]) => T; +type Constructor = new (...args: any[]) => T; export async function waitError( /** diff --git a/packages/tests/server/children.test.ts b/packages/tests/server/children.test.ts index c9eacb36fbf..329aed5c83d 100644 --- a/packages/tests/server/children.test.ts +++ b/packages/tests/server/children.test.ts @@ -60,5 +60,5 @@ test('w/o children', async () => { foo, }); - expectTypeOf(router._def.procedures.foo).toMatchTypeOf(foo); + expectTypeOf(router._def.procedures.foo).toEqualTypeOf(foo); }); diff --git a/packages/tests/server/index.test.ts b/packages/tests/server/index.test.ts index d3fa5594bb2..578e8d3f964 100644 --- a/packages/tests/server/index.test.ts +++ b/packages/tests/server/index.test.ts @@ -29,7 +29,7 @@ test('smoke test', async () => { }); test('mix query and mutation', async () => { - type Context = {}; + type Context = object; const t = initTRPC.context().create(); const router = t.router({ @@ -47,7 +47,7 @@ test('mix query and mutation', async () => { }); test('merge', async () => { - type Context = {}; + type Context = object; const t = initTRPC.context().create(); const mergeRouters = t.mergeRouters; @@ -365,7 +365,7 @@ describe('integration tests', () => { }); describe('createCaller()', () => { - type Context = {}; + type Context = object; const t = initTRPC.context().create(); const router = t.router({ @@ -410,7 +410,7 @@ describe('createCaller()', () => { }); describe('createCaller()', () => { - type Context = {}; + type Context = object; const t = initTRPC.context().create(); const router = t.router({ diff --git a/packages/tests/server/inferenceUtils.ts b/packages/tests/server/inferenceUtils.ts index c7f15448549..1790e144f72 100644 --- a/packages/tests/server/inferenceUtils.ts +++ b/packages/tests/server/inferenceUtils.ts @@ -86,7 +86,7 @@ export type DeepBrand = IsNever extends true export type RequiredKeys = Extract< { - [K in keyof T]-?: {} extends Pick ? never : K; + [K in keyof T]-?: object extends Pick ? never : K; }[keyof T], keyof T >; diff --git a/packages/tests/server/initTRPC.test.ts b/packages/tests/server/initTRPC.test.ts index 7e321a75fde..a614e6e6731 100644 --- a/packages/tests/server/initTRPC.test.ts +++ b/packages/tests/server/initTRPC.test.ts @@ -57,7 +57,12 @@ test('config types', () => { t._config; // ^? - expectTypeOf().toEqualTypeOf<{}>(); + expectTypeOf().toEqualTypeOf(); + expectTypeOf().toEqualTypeOf(); + + // eslint-disable-next-line @typescript-eslint/ban-types + expectTypeOf().toEqualTypeOf<{}>(); + // eslint-disable-next-line @typescript-eslint/ban-types expectTypeOf().toEqualTypeOf<{}>(); } diff --git a/packages/tests/server/interop/index.test.tsx b/packages/tests/server/interop/index.test.tsx index 9c3744c4ee5..052ef9c706f 100644 --- a/packages/tests/server/interop/index.test.tsx +++ b/packages/tests/server/interop/index.test.tsx @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/ban-types */ + /* eslint-disable @typescript-eslint/no-empty-function */ /* eslint-disable @typescript-eslint/no-explicit-any */ diff --git a/packages/tests/server/interop/react/__testHelpers.tsx b/packages/tests/server/interop/react/__testHelpers.tsx index ba00ac6efaf..9101db4ed0f 100644 --- a/packages/tests/server/interop/react/__testHelpers.tsx +++ b/packages/tests/server/interop/react/__testHelpers.tsx @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/ban-types */ + /* eslint-disable @typescript-eslint/no-empty-function */ import { routerToServerAndClientNew } from '../../___testHelpers'; import { diff --git a/packages/tests/server/interop/regression/issue-949-inferProcedureInput.test.ts b/packages/tests/server/interop/regression/issue-949-inferProcedureInput.test.ts index 9de107c134c..741d23a0f41 100644 --- a/packages/tests/server/interop/regression/issue-949-inferProcedureInput.test.ts +++ b/packages/tests/server/interop/regression/issue-949-inferProcedureInput.test.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/ban-types */ + /* eslint-disable @typescript-eslint/no-unused-vars */ // IMPORTANT: // needs to be imported from compiled output otherwise we get a false-positive @@ -8,7 +10,6 @@ import { z } from 'zod'; // https://github.com/trpc/trpc/issues/949 // https://github.com/trpc/trpc/pull/955 test('inferProcedureFromInput regression', async () => { - // eslint-disable-next-line @typescript-eslint/ban-types type Context = {}; const appRouter = trpc .router() diff --git a/packages/tests/server/jsonify.test.ts b/packages/tests/server/jsonify.test.ts index 4ee7c8174e2..af5c4c006c7 100644 --- a/packages/tests/server/jsonify.test.ts +++ b/packages/tests/server/jsonify.test.ts @@ -46,8 +46,8 @@ describe('no transformer specified', () => { // ^? expectTypeOf(result).toMatchTypeOf<{ date: string; - map: {}; - set: {}; + map: object; + set: object; }>(); expectTypeOf(result.arrayWithUndefined); // ^? diff --git a/packages/tests/server/router.test.ts b/packages/tests/server/router.test.ts index 79042f1e9c6..b236ee8fca2 100644 --- a/packages/tests/server/router.test.ts +++ b/packages/tests/server/router.test.ts @@ -1,7 +1,7 @@ import './___packages'; import { initTRPC } from '@trpc/server/src/core'; -const t = initTRPC.create<{}>(); +const t = initTRPC.create(); describe('router', () => { test('is a reserved word', async () => {