diff --git a/biome.json b/biome.json index 3982f4ad..8c75f785 100644 --- a/biome.json +++ b/biome.json @@ -12,7 +12,8 @@ "recommended": false, "suspicious": { "noImplicitAnyLet": "warn", - "noDuplicateObjectKeys": "warn" + "noDuplicateObjectKeys": "warn", + "noTsIgnore": "error" }, "performance": { "noDelete": "error" diff --git a/demo/nextjs/app/dashboard/user-card.tsx b/demo/nextjs/app/dashboard/user-card.tsx index cdab42f1..01bcb08b 100644 --- a/demo/nextjs/app/dashboard/user-card.tsx +++ b/demo/nextjs/app/dashboard/user-card.tsx @@ -393,7 +393,6 @@ export default function UserCard(props: { setIsPendingTwoFa(true); if (session?.user.twoFactorEnabled) { const res = await client.twoFactor.disable({ - //@ts-ignore password: twoFaPassword, fetchOptions: { onError(context) { diff --git a/demo/nextjs/app/oauth/authorize/page.tsx b/demo/nextjs/app/oauth/authorize/page.tsx index 8fe90bc9..d9d7d89a 100644 --- a/demo/nextjs/app/oauth/authorize/page.tsx +++ b/demo/nextjs/app/oauth/authorize/page.tsx @@ -29,7 +29,7 @@ export default async function AuthorizePage({ const session = await auth.api.getSession({ headers: await headers(), }); - // @ts-ignore + // @ts-expect-error const clientDetails = await auth.api.getOAuthClient({ params: { id: client_id, diff --git a/demo/nextjs/hooks/use-toast.ts b/demo/nextjs/hooks/use-toast.ts index cd98be64..3089bc07 100644 --- a/demo/nextjs/hooks/use-toast.ts +++ b/demo/nextjs/hooks/use-toast.ts @@ -156,7 +156,7 @@ function toast({ ...props }: Toast) { ...props, id, open: true, - // @ts-ignore + // @ts-expect-error onOpenChange: (open) => { if (!open) dismiss(); }, diff --git a/docs/app/changelogs/[[...slug]]/page.tsx b/docs/app/changelogs/[[...slug]]/page.tsx index b1643eea..120c07d1 100644 --- a/docs/app/changelogs/[[...slug]]/page.tsx +++ b/docs/app/changelogs/[[...slug]]/page.tsx @@ -34,7 +34,6 @@ export default async function Page({ const { slug } = await params; const page = changelogs.getPage(slug); if (!slug) { - //@ts-ignore return ; } if (!page) { diff --git a/docs/components/nav-mobile.tsx b/docs/components/nav-mobile.tsx index 5df43f39..3135ad82 100644 --- a/docs/components/nav-mobile.tsx +++ b/docs/components/nav-mobile.tsx @@ -33,7 +33,6 @@ export const NavbarProvider = ({ children }: { children: React.ReactNode }) => { const toggleDocsNavbar = () => { setIsDocsOpen((prevIsOpen) => !prevIsOpen); }; - // @ts-ignore return ( { data: { name: "test-name" }, }); expect(res).toHaveProperty("id"); - //@ts-ignore expect(res.id).toBe("HARD-CODED-ID"); }); @@ -225,17 +224,11 @@ describe("Create Adapter Helper", async () => { expect(res).toHaveProperty("image"); expect(res).toHaveProperty("createdAt"); expect(res).toHaveProperty("updatedAt"); - //@ts-ignore expect(res?.emailVerified).toEqual(false); - //@ts-ignore expect(res?.name).toEqual("test-name"); - //@ts-ignore expect(res?.email).toEqual(undefined); - //@ts-ignore expect(res?.image).toEqual(undefined); - //@ts-ignore expect(res?.createdAt).toBeInstanceOf(Date); - //@ts-ignore expect(res?.updatedAt).toBeInstanceOf(Date); }); @@ -245,7 +238,6 @@ describe("Create Adapter Helper", async () => { data: { name: "test-name" }, }); expect(res).toHaveProperty("id"); - //@ts-ignore expect(typeof res?.id).toEqual("string"); const adapterWithoutIdGeneration = await createTestAdapter({ @@ -343,11 +335,9 @@ describe("Create Adapter Helper", async () => { data: { emailVerified: true }, }); expect(res).toHaveProperty("emailVerified"); - //@ts-ignore expect(res.emailVerified).toBe(true); }); expect(createTRUEParameters.data).toHaveProperty("emailVerified"); - //@ts-ignore expect(createTRUEParameters.data.emailVerified).toBe(1); // Testing false @@ -371,11 +361,9 @@ describe("Create Adapter Helper", async () => { data: { emailVerified: false }, }); expect(res).toHaveProperty("emailVerified"); - //@ts-ignore expect(res.emailVerified).toBe(false); }); expect(createFALSEParameters.data).toHaveProperty("emailVerified"); - //@ts-ignore expect(createFALSEParameters.data.emailVerified).toBe(0); }); @@ -904,11 +892,10 @@ describe("Create Adapter Helper", async () => { update: { emailVerified: true }, }); expect(res).toHaveProperty("emailVerified"); - //@ts-ignore + //@ts-expect-error expect(res.emailVerified).toBe(true); }); expect(updateTRUEParameters.update).toHaveProperty("emailVerified"); - //@ts-ignore expect(updateTRUEParameters.update.emailVerified).toBe(1); // Testing false @@ -938,11 +925,10 @@ describe("Create Adapter Helper", async () => { update: { emailVerified: false }, }); expect(res).toHaveProperty("emailVerified"); - //@ts-ignore + //@ts-expect-error expect(res.emailVerified).toBe(false); }); expect(createFALSEParameters.update).toHaveProperty("emailVerified"); - //@ts-ignore expect(createFALSEParameters.update.emailVerified).toBe(0); }); @@ -1471,7 +1457,6 @@ describe("Create Adapter Helper", async () => { }); expect(res).toHaveProperty("id"); - //@ts-ignore expect(res?.id).toEqual("1"); }); // The where clause should convert the string id value of `"1"` to an int since `useNumberId` is true @@ -1513,7 +1498,6 @@ describe("Create Adapter Helper", async () => { }); expect(res[0]).toHaveProperty("id"); - //@ts-ignore expect(res[0].id).toEqual("1"); }); // The where clause should convert the string id value of `"1"` to an int since `useNumberId` is true diff --git a/packages/better-auth/src/adapters/drizzle-adapter/test/adapter.drizzle.test.ts b/packages/better-auth/src/adapters/drizzle-adapter/test/adapter.drizzle.test.ts index ec2703d9..df6a41e1 100644 --- a/packages/better-auth/src/adapters/drizzle-adapter/test/adapter.drizzle.test.ts +++ b/packages/better-auth/src/adapters/drizzle-adapter/test/adapter.drizzle.test.ts @@ -69,7 +69,7 @@ describe("Drizzle Adapter Tests", async () => { await runAdapterTest({ getAdapter: async (customOptions = {}) => { const db = opts.database; - //@ts-ignore + //@ts-expect-error opts.database = undefined; const merged = merge(opts, customOptions); merged.database = db; @@ -144,7 +144,7 @@ describe("Drizzle Adapter Number Id Test", async () => { await runNumberIdAdapterTest({ getAdapter: async (customOptions = {}) => { const db = opts.database; - //@ts-ignore + //@ts-expect-error opts.database = undefined; const merged = merge(opts, customOptions); merged.database = db; diff --git a/packages/better-auth/src/adapters/kysely-adapter/bun-sqlite-dialect.ts b/packages/better-auth/src/adapters/kysely-adapter/bun-sqlite-dialect.ts index 492c1285..7164519e 100644 --- a/packages/better-auth/src/adapters/kysely-adapter/bun-sqlite-dialect.ts +++ b/packages/better-auth/src/adapters/kysely-adapter/bun-sqlite-dialect.ts @@ -21,7 +21,6 @@ import { } from "kysely"; import { DefaultQueryCompiler } from "kysely"; import { DialectAdapterBase } from "kysely"; -//@ts-ignore - we need to import this to get the type of the database import type { Database } from "bun:sqlite"; export class BunSqliteAdapter implements DialectAdapterBase { @@ -178,21 +177,20 @@ export class BunSqliteIntrospector implements DatabaseIntrospector { options: DatabaseMetadataOptions = { withInternalKyselyTables: false }, ): Promise { let query = this.#db - // @ts-ignore + // @ts-expect-error .selectFrom("sqlite_schema") - // @ts-ignore + // @ts-expect-error .where("type", "=", "table") - // @ts-ignore + // @ts-expect-error .where("name", "not like", "sqlite_%") - // @ts-ignore .select("name") .$castTo<{ name: string }>(); if (!options.withInternalKyselyTables) { query = query - // @ts-ignore + // @ts-expect-error .where("name", "!=", DEFAULT_MIGRATION_TABLE) - // @ts-ignore + // @ts-expect-error .where("name", "!=", DEFAULT_MIGRATION_LOCK_TABLE); } @@ -213,11 +211,10 @@ export class BunSqliteIntrospector implements DatabaseIntrospector { // Get the SQL that was used to create the table. const createSql = await db - // @ts-ignore + // @ts-expect-error .selectFrom("sqlite_master") - // @ts-ignore + // @ts-expect-error .where("name", "=", table) - // @ts-ignore .select("sql") .$castTo<{ sql: string | undefined }>() .execute(); diff --git a/packages/better-auth/src/adapters/kysely-adapter/dialect.ts b/packages/better-auth/src/adapters/kysely-adapter/dialect.ts index 165e95f0..51ca7101 100644 --- a/packages/better-auth/src/adapters/kysely-adapter/dialect.ts +++ b/packages/better-auth/src/adapters/kysely-adapter/dialect.ts @@ -89,7 +89,7 @@ export const createKyselyAdapter = async (config: BetterAuthOptions) => { } if ("getConnection" in db) { - // @ts-ignore - mysql2/promise + // @ts-expect-error - mysql2/promise dialect = new MysqlDialect(db); } diff --git a/packages/better-auth/src/adapters/kysely-adapter/node-sqlite-dialect.ts b/packages/better-auth/src/adapters/kysely-adapter/node-sqlite-dialect.ts index d34cb960..96f7d263 100644 --- a/packages/better-auth/src/adapters/kysely-adapter/node-sqlite-dialect.ts +++ b/packages/better-auth/src/adapters/kysely-adapter/node-sqlite-dialect.ts @@ -179,21 +179,20 @@ export class NodeSqliteIntrospector implements DatabaseIntrospector { options: DatabaseMetadataOptions = { withInternalKyselyTables: false }, ): Promise { let query = this.#db - // @ts-ignore + // @ts-expect-error .selectFrom("sqlite_schema") - // @ts-ignore + // @ts-expect-error .where("type", "=", "table") - // @ts-ignore + // @ts-expect-error .where("name", "not like", "sqlite_%") - // @ts-ignore .select("name") .$castTo<{ name: string }>(); if (!options.withInternalKyselyTables) { query = query - // @ts-ignore + // @ts-expect-error .where("name", "!=", DEFAULT_MIGRATION_TABLE) - // @ts-ignore + // @ts-expect-error .where("name", "!=", DEFAULT_MIGRATION_LOCK_TABLE); } @@ -214,11 +213,10 @@ export class NodeSqliteIntrospector implements DatabaseIntrospector { // Get the SQL that was used to create the table. const createSql = await db - // @ts-ignore + // @ts-expect-error .selectFrom("sqlite_master") - // @ts-ignore + // @ts-expect-error .where("name", "=", table) - // @ts-ignore .select("sql") .$castTo<{ sql: string | undefined }>() .execute(); diff --git a/packages/better-auth/src/adapters/memory-adapter/memory-adapter.ts b/packages/better-auth/src/adapters/memory-adapter/memory-adapter.ts index aff29e28..521587e8 100644 --- a/packages/better-auth/src/adapters/memory-adapter/memory-adapter.ts +++ b/packages/better-auth/src/adapters/memory-adapter/memory-adapter.ts @@ -49,7 +49,7 @@ export const memoryAdapter = (db: MemoryDB, config?: MemoryAdapterConfig) => if (!Array.isArray(value)) { throw new Error("Value must be an array"); } - // @ts-ignore + // @ts-expect-error return value.includes(record[field]); } else if (operator === "contains") { return record[field].includes(value); @@ -66,7 +66,7 @@ export const memoryAdapter = (db: MemoryDB, config?: MemoryAdapterConfig) => return { create: async ({ model, data }) => { if (options.advanced?.database?.useNumberId) { - // @ts-ignore + // @ts-expect-error data.id = db[model].length + 1; } if (!db[model]) { diff --git a/packages/better-auth/src/adapters/test.ts b/packages/better-auth/src/adapters/test.ts index d9bb5f67..bf98978f 100644 --- a/packages/better-auth/src/adapters/test.ts +++ b/packages/better-auth/src/adapters/test.ts @@ -54,7 +54,7 @@ const numberIdAdapterTests = { SHOULD_RETURN_A_NUMBER_ID_AS_A_RESULT: "Should return a number id as a result", SHOULD_INCREMENT_THE_ID_BY_1: "Should increment the id by 1", -} as const; +}; // @ts-expect-error // biome-ignore lint/performance/noDelete: testing propose @@ -134,7 +134,6 @@ async function adapterTest( }, }); expect(res).toHaveProperty("id"); - //@ts-ignore expect(typeof res?.id).toEqual("string"); }, ); diff --git a/packages/better-auth/src/api/rate-limiter/rate-limiter.test.ts b/packages/better-auth/src/api/rate-limiter/rate-limiter.test.ts index aad67a0b..128a938e 100644 --- a/packages/better-auth/src/api/rate-limiter/rate-limiter.test.ts +++ b/packages/better-auth/src/api/rate-limiter/rate-limiter.test.ts @@ -89,7 +89,6 @@ describe( for (let i = 0; i < 25; i++) { const response = await client.listSessions({ fetchOptions: { - // @ts-ignore query: { "test-query": Math.random().toString(), }, diff --git a/packages/better-auth/src/api/routes/update-user.test.ts b/packages/better-auth/src/api/routes/update-user.test.ts index a7147262..0cc6fd08 100644 --- a/packages/better-auth/src/api/routes/update-user.test.ts +++ b/packages/better-auth/src/api/routes/update-user.test.ts @@ -335,7 +335,7 @@ describe("updateUser", async () => { throw: true, }, }); - // @ts-ignore + // @ts-expect-error expect(session?.user.newField).toBe("new"); }); diff --git a/packages/better-auth/src/db/utils.ts b/packages/better-auth/src/db/utils.ts index dc994356..b51ebed0 100644 --- a/packages/better-auth/src/db/utils.ts +++ b/packages/better-auth/src/db/utils.ts @@ -10,7 +10,7 @@ export async function getAdapter(options: BetterAuthOptions): Promise { if (!options.database) { const tables = getAuthTables(options); const memoryDB = Object.keys(tables).reduce((acc, key) => { - // @ts-ignore + // @ts-expect-error acc[key] = []; return acc; }, {}); diff --git a/packages/better-auth/src/plugins/api-key/routes/create-api-key.ts b/packages/better-auth/src/plugins/api-key/routes/create-api-key.ts index c7606bd4..1500fe1e 100644 --- a/packages/better-auth/src/plugins/api-key/routes/create-api-key.ts +++ b/packages/better-auth/src/plugins/api-key/routes/create-api-key.ts @@ -429,7 +429,7 @@ export function createApiKey({ ? (opts.rateLimit.enabled ?? true) : rateLimitEnabled, requestCount: 0, - //@ts-ignore - we intentionally save the permissions as string on DB. + //@ts-expect-error - we intentionally save the permissions as string on DB. permissions: permissionsToApply, }; @@ -451,10 +451,7 @@ export function createApiKey({ key: key, metadata: metadata ?? null, permissions: apiKey.permissions - ? safeJSONParse( - //@ts-ignore - from DB, this value is always a string - apiKey.permissions, - ) + ? safeJSONParse(apiKey.permissions) : null, }); }, diff --git a/packages/better-auth/src/plugins/api-key/routes/get-api-key.ts b/packages/better-auth/src/plugins/api-key/routes/get-api-key.ts index 1960afe9..dbb91bfb 100644 --- a/packages/better-auth/src/plugins/api-key/routes/get-api-key.ts +++ b/packages/better-auth/src/plugins/api-key/routes/get-api-key.ts @@ -205,10 +205,7 @@ export function getApiKey({ permissions: returningApiKey.permissions ? safeJSONParse<{ [key: string]: string[]; - }>( - //@ts-ignore - From DB this is always a string - returningApiKey.permissions, - ) + }>(returningApiKey.permissions) : null, }); }, diff --git a/packages/better-auth/src/plugins/api-key/routes/list-api-keys.ts b/packages/better-auth/src/plugins/api-key/routes/list-api-keys.ts index 805cbacb..dacffc1f 100644 --- a/packages/better-auth/src/plugins/api-key/routes/list-api-keys.ts +++ b/packages/better-auth/src/plugins/api-key/routes/list-api-keys.ts @@ -191,10 +191,7 @@ export function listApiKeys({ permissions: returningApiKey.permissions ? safeJSONParse<{ [key: string]: string[]; - }>( - //@ts-ignore - From DB this is always a string - returningApiKey.permissions, - ) + }>(returningApiKey.permissions) : null, }; }); diff --git a/packages/better-auth/src/plugins/api-key/routes/update-api-key.ts b/packages/better-auth/src/plugins/api-key/routes/update-api-key.ts index 5c46e564..a71774d1 100644 --- a/packages/better-auth/src/plugins/api-key/routes/update-api-key.ts +++ b/packages/better-auth/src/plugins/api-key/routes/update-api-key.ts @@ -351,7 +351,7 @@ export function updateApiKey({ message: ERROR_CODES.INVALID_METADATA_TYPE, }); } - //@ts-ignore - we need this to be a string to save into DB. + //@ts-expect-error - we need this to be a string to save into DB. newValues.metadata = schema.apikey.fields.metadata.transform.input(metadata); } @@ -383,7 +383,7 @@ export function updateApiKey({ } if (permissions !== undefined) { - //@ts-ignore - we need this to be a string to save into DB. + //@ts-expect-error - we need this to be a string to save into DB. newValues.permissions = JSON.stringify(permissions); } @@ -430,10 +430,7 @@ export function updateApiKey({ permissions: returningApiKey.permissions ? safeJSONParse<{ [key: string]: string[]; - }>( - //@ts-ignore - from DB, this value is always a string - returningApiKey.permissions, - ) + }>(returningApiKey.permissions) : null, }); }, diff --git a/packages/better-auth/src/plugins/api-key/routes/verify-api-key.ts b/packages/better-auth/src/plugins/api-key/routes/verify-api-key.ts index 3200fd09..161b7528 100644 --- a/packages/better-auth/src/plugins/api-key/routes/verify-api-key.ts +++ b/packages/better-auth/src/plugins/api-key/routes/verify-api-key.ts @@ -75,10 +75,7 @@ export async function validateApiKey({ const apiKeyPermissions = apiKey.permissions ? safeJSONParse<{ [key: string]: string[]; - }>( - //@ts-ignore - from DB, this value is always a string - apiKey.permissions, - ) + }>(apiKey.permissions) : null; if (!apiKeyPermissions) { @@ -295,10 +292,7 @@ export function verifyApiKey({ returningApiKey.permissions = returningApiKey.permissions ? safeJSONParse<{ [key: string]: string[]; - }>( - //@ts-ignore - from DB, this value is always a string - returningApiKey.permissions, - ) + }>(returningApiKey.permissions) : null; return ctx.json({ diff --git a/packages/better-auth/src/plugins/open-api/generator.ts b/packages/better-auth/src/plugins/open-api/generator.ts index 9a050cdc..e702ae53 100644 --- a/packages/better-auth/src/plugins/open-api/generator.ts +++ b/packages/better-auth/src/plugins/open-api/generator.ts @@ -149,7 +149,7 @@ function getRequestBody(options: EndpointOptions): any { options.body instanceof ZodObject || options.body instanceof ZodOptional ) { - // @ts-ignore + // @ts-expect-error const shape = options.body.shape; if (!shape) return undefined; const properties: Record = {}; @@ -319,7 +319,7 @@ export async function generator(ctx: AuthContext, options: BetterAuthOptions) { } }); - // @ts-ignore + // @ts-expect-error acc[modelName] = { type: "object", properties, diff --git a/packages/better-auth/src/types/options.ts b/packages/better-auth/src/types/options.ts index 7f06caf5..905c6b35 100644 --- a/packages/better-auth/src/types/options.ts +++ b/packages/better-auth/src/types/options.ts @@ -19,7 +19,6 @@ import type { Logger } from "../utils"; import type { AuthMiddleware } from "../plugins"; import type { LiteralUnion, OmitId } from "./helper"; import type { AdapterDebugLogs } from "../adapters"; -//@ts-ignore - we need to import this to get the type of the database import type { Database as BunDatabase } from "bun:sqlite"; import type { DatabaseSync } from "node:sqlite"; diff --git a/packages/better-auth/src/utils/shim.ts b/packages/better-auth/src/utils/shim.ts index bdf97cbd..d8fb6bf3 100644 --- a/packages/better-auth/src/utils/shim.ts +++ b/packages/better-auth/src/utils/shim.ts @@ -49,7 +49,6 @@ export const shimEndpoint = (ctx: AuthContext, value: any) => { } } } - //@ts-ignore const endpointRes = value({ ...context, context: { diff --git a/packages/cli/src/commands/init.ts b/packages/cli/src/commands/init.ts index 9c4b441f..fec4563f 100644 --- a/packages/cli/src/commands/init.ts +++ b/packages/cli/src/commands/init.ts @@ -704,7 +704,7 @@ export async function initAction(opts: any) { const { dependencies, envs, generatedCode } = await generateAuthConfig({ current_user_config, format, - //@ts-ignore + //@ts-expect-error s, plugins: add_plugins, database, diff --git a/packages/cli/src/utils/get-config.ts b/packages/cli/src/utils/get-config.ts index 8067ed38..a827ec30 100644 --- a/packages/cli/src/utils/get-config.ts +++ b/packages/cli/src/utils/get-config.ts @@ -2,9 +2,9 @@ import { loadConfig } from "c12"; import type { BetterAuthOptions } from "better-auth"; import { logger } from "better-auth"; import path from "path"; -// @ts-ignore +// @ts-expect-error import babelPresetTypeScript from "@babel/preset-typescript"; -// @ts-ignore +// @ts-expect-error import babelPresetReact from "@babel/preset-react"; import fs, { existsSync } from "fs"; import { BetterAuthError } from "better-auth";