From 92d2b5994607d0e9b800182c0350c1182c729216 Mon Sep 17 00:00:00 2001 From: Volnei Munhoz Date: Wed, 14 Jan 2026 19:05:57 -0300 Subject: [PATCH] fix: replace @ts-ignore with @ts-expect-error to fix biome lint errors (#26849) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .../src/FloatingButton/FloatingButton.ts | 3 +-- .../embeds/embed-core/src/ModalBox/ModalBox.ts | 2 -- packages/embeds/embed-core/src/embed.ts | 12 ++++-------- packages/embeds/embed-core/src/lib/utils.ts | 3 +-- packages/embeds/embed-core/src/preview.ts | 6 ++---- packages/embeds/embed-snippet/src/index.ts | 1 - packages/lib/__mocks__/constants.ts | 7 +------ .../__tests__/buildCalEventFromBooking.test.ts | 3 +-- packages/lib/errors.ts | 3 +-- packages/lib/fromEntriesWithDuplicateKeys.ts | 3 +-- packages/lib/hooks/useRouterQuery.ts | 3 +-- packages/lib/hooks/useTraceUpdate.ts | 6 ++---- packages/lib/http-error.ts | 2 -- .../lib/server/__mocks__/serviceAccountKey.ts | 2 -- .../lib/server/repository/selectedCalendar.ts | 10 ++-------- packages/lib/server/username.test.ts | 15 +++++---------- packages/lib/slugify.ts | 6 ++---- .../server/routers/viewer/apps/toggle.handler.ts | 6 ++---- .../viewer/eventTypes/heavy/duplicate.handler.ts | 3 +-- .../__tests__/createTeams.handler.test.ts | 3 +-- .../inviteMember/__mocks__/inviteMemberUtils.ts | 12 ++---------- 21 files changed, 30 insertions(+), 81 deletions(-) diff --git a/packages/embeds/embed-core/src/FloatingButton/FloatingButton.ts b/packages/embeds/embed-core/src/FloatingButton/FloatingButton.ts index b1fd6b7446..8029af5a89 100644 --- a/packages/embeds/embed-core/src/FloatingButton/FloatingButton.ts +++ b/packages/embeds/embed-core/src/FloatingButton/FloatingButton.ts @@ -44,8 +44,7 @@ export class FloatingButton extends HTMLElement { // Button added here triggers the modal on click. So, it has to have the same data attributes as the modal target as well dataset!: DOMStringMap & FloatingButtonDataset & ModalTargetDatasetProps; buttonWrapperStyleDisplay!: HTMLElement["style"]["display"]; - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore + static get observedAttributes() { return dataAttributes; } diff --git a/packages/embeds/embed-core/src/ModalBox/ModalBox.ts b/packages/embeds/embed-core/src/ModalBox/ModalBox.ts index 83f0377202..8d95694ebb 100644 --- a/packages/embeds/embed-core/src/ModalBox/ModalBox.ts +++ b/packages/embeds/embed-core/src/ModalBox/ModalBox.ts @@ -12,8 +12,6 @@ export class ModalBox extends EmbedElement { } }; - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore static get observedAttributes() { return ["state"]; } diff --git a/packages/embeds/embed-core/src/embed.ts b/packages/embeds/embed-core/src/embed.ts index 1c6effb92d..d3131bd92e 100644 --- a/packages/embeds/embed-core/src/embed.ts +++ b/packages/embeds/embed-core/src/embed.ts @@ -266,8 +266,7 @@ export class Cal { error(`Instruction ${method} not FOUND`); } try { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore There can be any method which can have any number of arguments. + // @ts-expect-error There can be any method which can have any number of arguments. this.api[method](...args); } catch (e) { // Instead of throwing error, log and move forward in the queue @@ -283,8 +282,7 @@ export class Cal { queue.splice(0); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - /** @ts-ignore */ // We changed the definition of push here. + // @ts-expect-error We changed the definition of push here. queue.push = (instruction) => { this.processInstruction(instruction); }; @@ -363,8 +361,7 @@ export class Cal { } // Merge searchParams from config onto the URL which might have query params already - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore + // @ts-ignore TS2802: URLSearchParams iteration requires downlevelIteration for (const [key, value] of searchParams) { urlInstance.searchParams.append(key, value); } @@ -1565,8 +1562,7 @@ window.addEventListener("message", (e) => { if (!actionManager) { throw new Error(`Unhandled Action ${parsedAction}`); } - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-expect-error actionManager.fire(parsedAction.type, detail.data); }); diff --git a/packages/embeds/embed-core/src/lib/utils.ts b/packages/embeds/embed-core/src/lib/utils.ts index 637e1015cc..c8875160d7 100644 --- a/packages/embeds/embed-core/src/lib/utils.ts +++ b/packages/embeds/embed-core/src/lib/utils.ts @@ -33,8 +33,7 @@ export function fromEntriesWithDuplicateKeys(entries: IterableIterator<[string, } // Consider setting atleast ES2015 as target - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-ignore TS2802: IterableIterator iteration requires downlevelIteration for (const [key, value] of entries) { if (result.hasOwnProperty(key)) { let currentValue = result[key]; diff --git a/packages/embeds/embed-core/src/preview.ts b/packages/embeds/embed-core/src/preview.ts index 7b3944cccd..2be8418785 100644 --- a/packages/embeds/embed-core/src/preview.ts +++ b/packages/embeds/embed-core/src/preview.ts @@ -70,8 +70,7 @@ if (!calLink) { // TODO: Reuse the embed code snippet from the embed-snippet package - Not able to use it because of circular dependency // Install Cal Embed Code Snippet (function (C, A, L) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore + // @ts-expect-error const p = function (a, ar) { a.q.push(ar); }; @@ -95,8 +94,7 @@ if (!calLink) { p(api, arguments); }; const namespace = ar[1]; - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore + // @ts-expect-error api.q = api.q || []; if (typeof namespace === "string") { // Make sure that even after re-execution of the snippet, the namespace is not overridden diff --git a/packages/embeds/embed-snippet/src/index.ts b/packages/embeds/embed-snippet/src/index.ts index 59ed7703a4..b942401e54 100644 --- a/packages/embeds/embed-snippet/src/index.ts +++ b/packages/embeds/embed-snippet/src/index.ts @@ -43,7 +43,6 @@ export default function EmbedSnippet(url = EMBED_LIB_URL) { cal.ns = {}; cal.q = cal.q || []; - //@ts-ignore d.head.appendChild(d.createElement("script")).src = A; cal.loaded = true; } diff --git a/packages/lib/__mocks__/constants.ts b/packages/lib/__mocks__/constants.ts index 47ac4b76eb..281a5abf5a 100644 --- a/packages/lib/__mocks__/constants.ts +++ b/packages/lib/__mocks__/constants.ts @@ -33,19 +33,14 @@ beforeEach(() => { export const constantsScenarios = { enableTeamBilling: () => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore mockedConstants.IS_TEAM_BILLING_ENABLED = true; }, setWebsiteUrl: (url: string) => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore mockedConstants.WEBSITE_URL = url; }, set: (envVariables: Record) => { Object.entries(envVariables).forEach(([key, value]) => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-expect-error - dynamic key access on Partial type mockedConstants[key] = value; }); }, diff --git a/packages/lib/__tests__/buildCalEventFromBooking.test.ts b/packages/lib/__tests__/buildCalEventFromBooking.test.ts index f04c5adeb3..a38bc67c55 100644 --- a/packages/lib/__tests__/buildCalEventFromBooking.test.ts +++ b/packages/lib/__tests__/buildCalEventFromBooking.test.ts @@ -60,8 +60,7 @@ const createBooking = (overrides = {}) => ({ describe("buildCalEventFromBooking", () => { beforeEach(() => { // vi.resetAllMocks(); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-expect-error getTranslation.mockImplementation((locale: string, namespace: string) => { // eslint-disable-next-line @typescript-eslint/no-empty-function const translate = () => {}; diff --git a/packages/lib/errors.ts b/packages/lib/errors.ts index e7575ffdea..689ea4d107 100644 --- a/packages/lib/errors.ts +++ b/packages/lib/errors.ts @@ -46,8 +46,7 @@ export function getErrorFromUnknown(cause: unknown): Error & { statusCode?: numb return cause; } if (typeof cause === "string") { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore https://github.com/tc39/proposal-error-cause + // @ts-ignore https://github.com/tc39/proposal-error-cause - must use @ts-ignore because different packages have different TS lib targets return new Error(cause, { cause }); } diff --git a/packages/lib/fromEntriesWithDuplicateKeys.ts b/packages/lib/fromEntriesWithDuplicateKeys.ts index 11bf425fd2..c6c892f1d1 100644 --- a/packages/lib/fromEntriesWithDuplicateKeys.ts +++ b/packages/lib/fromEntriesWithDuplicateKeys.ts @@ -6,8 +6,7 @@ export function fromEntriesWithDuplicateKeys(entries: IterableIterator<[string, } // Consider setting atleast ES2015 as target - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-expect-error for (const [key, value] of entries) { if (result.hasOwnProperty(key)) { let currentValue = result[key]; diff --git a/packages/lib/hooks/useRouterQuery.ts b/packages/lib/hooks/useRouterQuery.ts index 938c7d236f..a77438af8c 100644 --- a/packages/lib/hooks/useRouterQuery.ts +++ b/packages/lib/hooks/useRouterQuery.ts @@ -12,8 +12,7 @@ function fromEntriesWithDuplicateKeys(entries: IterableIterator<[string, string] } // Consider setting atleast ES2015 as target - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-expect-error for (const [key, value] of entries) { if (result.hasOwnProperty(key)) { let currentValue = result[key]; diff --git a/packages/lib/hooks/useTraceUpdate.ts b/packages/lib/hooks/useTraceUpdate.ts index a43ead677c..aa859f984b 100644 --- a/packages/lib/hooks/useTraceUpdate.ts +++ b/packages/lib/hooks/useTraceUpdate.ts @@ -4,11 +4,9 @@ export function useTraceUpdate(props: { [s: string]: unknown } | ArrayLike { const changedProps = Object.entries(props).reduce((ps, [k, v]) => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore TODO: fix this + // @ts-expect-error TODO: fix this if (prev.current[k] !== v) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore TODO: fix this + // @ts-expect-error TODO: fix this ps[k] = [prev.current[k], v]; } return ps; diff --git a/packages/lib/http-error.ts b/packages/lib/http-error.ts index bd03433a92..a6376e41fe 100644 --- a/packages/lib/http-error.ts +++ b/packages/lib/http-error.ts @@ -37,8 +37,6 @@ export class HttpError extends Error { url: response.url, method: request.method, statusCode: response.status, - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore the data property is a custom one from ErrorWithCode data: parsedError.data as Record, }); } diff --git a/packages/lib/server/__mocks__/serviceAccountKey.ts b/packages/lib/server/__mocks__/serviceAccountKey.ts index d746c0a854..41fec4c063 100644 --- a/packages/lib/server/__mocks__/serviceAccountKey.ts +++ b/packages/lib/server/__mocks__/serviceAccountKey.ts @@ -1,8 +1,6 @@ import { vi } from "vitest"; vi.mock("@calcom/lib/server/serviceAccountKey", async (importOriginal) => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore const actual = await importOriginal(); return { ...actual, diff --git a/packages/lib/server/repository/selectedCalendar.ts b/packages/lib/server/repository/selectedCalendar.ts index a715528d1e..1f438167c3 100644 --- a/packages/lib/server/repository/selectedCalendar.ts +++ b/packages/lib/server/repository/selectedCalendar.ts @@ -177,10 +177,7 @@ export class SelectedCalendarRepository { error: { not: null }, watchAttempts: { lt: { - // Using ts-ignore instead of ts-expect-error because I am seeing conflicting errors in CI. In one case ts-expect-error fails with `Unused '@ts-expect-error' directive.` - // Removing ts-expect-error fails in another case that _ref isn't defined - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-expect-error - _ref is a Prisma extension field _ref: "maxAttempts", _container: "SelectedCalendar", }, @@ -220,10 +217,7 @@ export class SelectedCalendarRepository { error: { not: null }, unwatchAttempts: { lt: { - // Using ts-ignore instead of ts-expect-error because I am seeing conflicting errors in CI. In one case ts-expect-error fails with `Unused '@ts-expect-error' directive.` - // Removing ts-expect-error fails in another case that _ref isn't defined - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-expect-error - _ref is a Prisma extension field _ref: "maxAttempts", _container: "SelectedCalendar", }, diff --git a/packages/lib/server/username.test.ts b/packages/lib/server/username.test.ts index c857a1a266..3d3b653a8c 100644 --- a/packages/lib/server/username.test.ts +++ b/packages/lib/server/username.test.ts @@ -6,13 +6,11 @@ import { usernameCheckForSignup } from "./username"; describe("usernameCheckForSignup ", async () => { beforeEach(() => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore + // @ts-expect-error prismaMock.user.findUnique.mockImplementation(() => { return null; }); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore + // @ts-expect-error prismaMock.user.findMany.mockImplementation(() => { return []; }); @@ -60,8 +58,7 @@ describe("usernameCheckForSignup ", async () => { }); function mockUserInDB({ id, email, username }: { id: number; email: string; username: string }) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore + // @ts-expect-error prismaMock.user.findUnique.mockImplementation((arg) => { if (arg.where.email === email) { return { @@ -75,12 +72,10 @@ function mockUserInDB({ id, email, username }: { id: number; email: string; user } function mockMembership({ userId }: { userId: number }) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore + // @ts-expect-error prismaMock.membership.findFirst.mockImplementation((arg) => { const isOrganizationWhereClause = - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore + // @ts-expect-error arg?.where?.team?.metadata?.path[0] === "isOrganization" && arg?.where?.team?.metadata?.equals === true; if (arg?.where?.userId === userId && isOrganizationWhereClause) { return { diff --git a/packages/lib/slugify.ts b/packages/lib/slugify.ts index 2409856a3a..c9b0ab4f61 100644 --- a/packages/lib/slugify.ts +++ b/packages/lib/slugify.ts @@ -10,11 +10,9 @@ export const slugify = (str: string, forDisplayingInput?: boolean) => { .toLowerCase() // Convert to lowercase .trim() // Remove whitespace from both sides .normalize("NFD") // Normalize to decomposed form for handling accents - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-ignore - Unicode property escapes require ES6+ target in some TS configs .replace(/\p{Diacritic}/gu, "") // Remove any diacritics (accents) from characters - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-ignore - Unicode property escapes require ES6+ target in some TS configs .replace(/[^.\p{L}\p{N}\p{Zs}\p{Emoji}]+/gu, "-") // Replace any non-alphanumeric characters (including Unicode and except "." period) with a dash .replace(/[\s_#]+/g, "-") // Replace whitespace, # and underscores with a single dash .replace(/^-+/, "") // Remove dashes from start diff --git a/packages/trpc/server/routers/viewer/apps/toggle.handler.ts b/packages/trpc/server/routers/viewer/apps/toggle.handler.ts index 310e7da6fd..448c654385 100644 --- a/packages/trpc/server/routers/viewer/apps/toggle.handler.ts +++ b/packages/trpc/server/routers/viewer/apps/toggle.handler.ts @@ -131,11 +131,9 @@ export const toggleHandler = async ({ input, ctx }: ToggleOptions) => { ...(eventType.metadata as object), apps: { // From this comment we can not type JSON fields in Prisma https://github.com/prisma/prisma/issues/3219#issuecomment-670202980 - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore + // @ts-expect-error ...eventType.metadata?.apps, - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore + // @ts-expect-error [app.slug]: { ...eventType.metadata?.apps[app.slug], enabled: false }, }, }, diff --git a/packages/trpc/server/routers/viewer/eventTypes/heavy/duplicate.handler.ts b/packages/trpc/server/routers/viewer/eventTypes/heavy/duplicate.handler.ts index 9ab7d1632e..05724e4a62 100644 --- a/packages/trpc/server/routers/viewer/eventTypes/heavy/duplicate.handler.ts +++ b/packages/trpc/server/routers/viewer/eventTypes/heavy/duplicate.handler.ts @@ -101,8 +101,7 @@ export const duplicateHandler = async ({ ctx, input }: DuplicateOptions) => { webhooks: _webhooks, schedule: _schedule, - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - descriptionAsSafeHTML is added on the fly using a prisma middleware it shouldn't be used to create event type. Such a property doesn't exist on schema + // @ts-expect-error - descriptionAsSafeHTML is added on the fly using a prisma middleware it shouldn't be used to create event type. Such a property doesn't exist on schema descriptionAsSafeHTML: _descriptionAsSafeHTML, secondaryEmailId, instantMeetingScheduleId: _instantMeetingScheduleId, diff --git a/packages/trpc/server/routers/viewer/organizations/__tests__/createTeams.handler.test.ts b/packages/trpc/server/routers/viewer/organizations/__tests__/createTeams.handler.test.ts index 5f39c85a64..d877f6810c 100644 --- a/packages/trpc/server/routers/viewer/organizations/__tests__/createTeams.handler.test.ts +++ b/packages/trpc/server/routers/viewer/organizations/__tests__/createTeams.handler.test.ts @@ -42,8 +42,7 @@ async function createTestTeam(data: { slug: data.slug || slugify(data.name), parentId: data.parentId, isOrganization: data.isOrganization ?? false, - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore + // @ts-expect-error metadata: data.metadata || {}, isPlatform: data.isPlatform ?? false, }, diff --git a/packages/trpc/server/routers/viewer/teams/inviteMember/__mocks__/inviteMemberUtils.ts b/packages/trpc/server/routers/viewer/teams/inviteMember/__mocks__/inviteMemberUtils.ts index e61fafd46e..402a5c1e79 100644 --- a/packages/trpc/server/routers/viewer/teams/inviteMember/__mocks__/inviteMemberUtils.ts +++ b/packages/trpc/server/routers/viewer/teams/inviteMember/__mocks__/inviteMemberUtils.ts @@ -17,8 +17,7 @@ const inviteMemberUtilsMock = mockDeep(); export const inviteMemberutilsScenarios = { checkPermissions: { fakePassed: () => - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore + // @ts-expect-error inviteMemberUtilsMock.checkPermissions.mockResolvedValue(undefined), }, getTeamOrThrow: { @@ -29,8 +28,7 @@ export const inviteMemberutilsScenarios = { parentId: null, ...team, }; - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore + // @ts-expect-error inviteMemberUtilsMock.getTeamOrThrow.mockImplementation((teamId) => { if (forInput.teamId === teamId) { return fakedVal; @@ -49,8 +47,6 @@ export const inviteMemberutilsScenarios = { useActual: async function () { const actualImport = await vi.importActual("../utils"); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore return inviteMemberUtilsMock.getOrgState.mockImplementation(actualImport.getOrgState); }, }, @@ -58,8 +54,6 @@ export const inviteMemberutilsScenarios = { useActual: async function () { const actualImport = await vi.importActual("../utils"); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore return inviteMemberUtilsMock.getUniqueInvitationsOrThrowIfEmpty.mockImplementation( actualImport.getUniqueInvitationsOrThrowIfEmpty ); @@ -90,8 +84,6 @@ export const inviteMemberutilsScenarios = { useActual: async function () { const actualImport = await vi.importActual("../utils"); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - //@ts-ignore return inviteMemberUtilsMock.getOrgConnectionInfo.mockImplementation(actualImport.getOrgConnectionInfo); }, },