From 14151b827f9b5186461a16344cd47d42cb6395d9 Mon Sep 17 00:00:00 2001 From: Benny Joo Date: Tue, 14 Jan 2025 03:58:38 -0500 Subject: [PATCH] fix: make ESLint work and fix lint errors that were undetected before (#18639) * fix eslint config * fix * add it to dev dep * fix * sync eslint version * force ts-node to compile our ESLint plugin's TS files into CommonJS (which ESLint requires) * fix some lint errors * fix lint errors * remove duplicate classname * make @typescript-eslint/ban-types a warn for packages/trpc files * fix lint errors in trpc * fix lint errors in trpc - 2 * fix * fix * fix lint warnings --- apps/web/modules/bookings/views/bookings-listing-view.tsx | 7 ++++--- apps/web/server/lib/[user]/getServerSideProps.ts | 2 +- example-apps/credential-sync/package.json | 2 +- .../app-store/alby/components/AlbyPaymentComponent.tsx | 3 +-- packages/config/eslint-preset.js | 7 +++++++ packages/eslint-plugin/src/index.js | 6 +++++- packages/lib/payment/processPaymentRefund.test.ts | 7 ++++--- packages/platform/examples/base/package.json | 2 +- .../examples/base/src/pages/payment/[paymentUid].tsx | 4 ++-- .../trpc/server/routers/viewer/bookings/find.schema.ts | 4 +--- .../viewer/bookings/getInstantBookingLocation.schema.ts | 4 +--- packages/trpc/server/routers/viewer/eventTypes/types.ts | 6 ++---- .../server/routers/viewer/eventTypes/update.handler.ts | 2 +- turbo.json | 8 +++++++- yarn.lock | 2 +- 15 files changed, 39 insertions(+), 27 deletions(-) diff --git a/apps/web/modules/bookings/views/bookings-listing-view.tsx b/apps/web/modules/bookings/views/bookings-listing-view.tsx index 625aef1cb132dc..7333bda725c967 100644 --- a/apps/web/modules/bookings/views/bookings-listing-view.tsx +++ b/apps/web/modules/bookings/views/bookings-listing-view.tsx @@ -1,8 +1,9 @@ "use client"; import { useAutoAnimate } from "@formkit/auto-animate/react"; -import { Fragment, ReactElement, useState } from "react"; -import { z } from "zod"; +import type { ReactElement } from "react"; +import { Fragment, useState } from "react"; +import type { z } from "zod"; import { WipeMyCalActionButton } from "@calcom/app-store/wipemycalother/components"; import dayjs from "@calcom/dayjs"; @@ -23,7 +24,7 @@ import useMeQuery from "@lib/hooks/useMeQuery"; import BookingListItem from "@components/booking/BookingListItem"; import SkeletonLoader from "@components/booking/SkeletonLoader"; -import { validStatuses } from "~/bookings/lib/validStatuses"; +import type { validStatuses } from "~/bookings/lib/validStatuses"; type BookingListingStatus = z.infer>["status"]; type BookingOutput = RouterOutputs["viewer"]["bookings"]["get"]["bookings"][0]; diff --git a/apps/web/server/lib/[user]/getServerSideProps.ts b/apps/web/server/lib/[user]/getServerSideProps.ts index 895b9b9ad6b3ea..0bacd5fec034c5 100644 --- a/apps/web/server/lib/[user]/getServerSideProps.ts +++ b/apps/web/server/lib/[user]/getServerSideProps.ts @@ -1,4 +1,5 @@ import type { DehydratedState } from "@tanstack/react-query"; +import type { EmbedProps } from "app/WithEmbedSSR"; import type { GetServerSideProps } from "next"; import { encode } from "querystring"; import type { z } from "zod"; @@ -18,7 +19,6 @@ import type { EventTypeMetaDataSchema } from "@calcom/prisma/zod-utils"; import type { UserProfile } from "@calcom/types/UserProfile"; import { getTemporaryOrgRedirect } from "@lib/getTemporaryOrgRedirect"; -import type { EmbedProps } from "app/WithEmbedSSR"; import { ssrInit } from "@server/lib/ssr"; diff --git a/example-apps/credential-sync/package.json b/example-apps/credential-sync/package.json index 80fe44d47e80b4..8dddcadf48d5ad 100644 --- a/example-apps/credential-sync/package.json +++ b/example-apps/credential-sync/package.json @@ -22,7 +22,7 @@ "@types/react-dom": "^18", "autoprefixer": "^10.0.1", "dotenv": "^16.3.1", - "eslint": "^8", + "eslint": "^8.34.0", "eslint-config-next": "14.0.4", "postcss": "^8", "tailwindcss": "^3.3.0", diff --git a/packages/app-store/alby/components/AlbyPaymentComponent.tsx b/packages/app-store/alby/components/AlbyPaymentComponent.tsx index 535e7d2b45e654..b7da73ad317bda 100644 --- a/packages/app-store/alby/components/AlbyPaymentComponent.tsx +++ b/packages/app-store/alby/components/AlbyPaymentComponent.tsx @@ -87,8 +87,7 @@ export const AlbyPaymentComponent = (props: IAlbyPaymentComponentProps) => {

Click or scan the invoice below to pay

+ className="inline-flex items-center justify-center rounded-2xl rounded-md border border-transparent bg-white p-2 font-medium text-black shadow-sm hover:brightness-95 focus:outline-none focus:ring-offset-2"> diff --git a/packages/config/eslint-preset.js b/packages/config/eslint-preset.js index 4b43dccebe0cbe..4f0716baa1f099 100644 --- a/packages/config/eslint-preset.js +++ b/packages/config/eslint-preset.js @@ -87,6 +87,13 @@ module.exports = { "@calcom/eslint/deprecated-imports-next-router": "off", }, }, + { + files: ["packages/trpc/**/*.{tsx,ts}"], + rules: { + "@typescript-eslint/ban-types": "warn", + "@typescript-eslint/no-explicit-any": "warn", + }, + }, ], }, { diff --git a/packages/eslint-plugin/src/index.js b/packages/eslint-plugin/src/index.js index 312b019ed03a9e..b88415a9bd23f1 100644 --- a/packages/eslint-plugin/src/index.js +++ b/packages/eslint-plugin/src/index.js @@ -1,6 +1,10 @@ // This registers Typescript compiler instance onto node.js. // Now it is possible to just require typescript files without any compilation steps in the environment run by node -require("ts-node").register(); +require("ts-node").register({ + compilerOptions: { + module: "commonjs", + }, +}); // re-export our rules so that eslint run by node can understand them module.exports = { diff --git a/packages/lib/payment/processPaymentRefund.test.ts b/packages/lib/payment/processPaymentRefund.test.ts index 1af040cc82c3b3..e0800bcac367dd 100644 --- a/packages/lib/payment/processPaymentRefund.test.ts +++ b/packages/lib/payment/processPaymentRefund.test.ts @@ -1,14 +1,15 @@ +import prismaMock from "../../../tests/libs/__mocks__/prismaMock"; + import { describe, it, expect, vi, beforeEach } from "vitest"; import dayjs from "@calcom/dayjs"; -import prismaMock from "../../../tests/libs/__mocks__/prismaMock"; import { getPaymentAppData } from "../getPaymentAppData"; import { handlePaymentRefund } from "./handlePaymentRefund"; import { processPaymentRefund } from "./processPaymentRefund"; import { RefundPolicy } from "./types"; -vi.mock('@calcom/lib/getPaymentAppData', () => ({ +vi.mock("@calcom/lib/getPaymentAppData", () => ({ getPaymentAppData: vi.fn(), })); @@ -23,7 +24,7 @@ describe("processPaymentRefund", () => { { id: 1, uid: "unique-id-1", - appId: "123", + appId: "123", bookingId: 456, amount: 1000, fee: 50, diff --git a/packages/platform/examples/base/package.json b/packages/platform/examples/base/package.json index 415480d036c594..15a11929cec410 100644 --- a/packages/platform/examples/base/package.json +++ b/packages/platform/examples/base/package.json @@ -22,7 +22,7 @@ "@types/react": "^18", "@types/react-dom": "^18", "autoprefixer": "^10.0.1", - "eslint": "^8", + "eslint": "^8.34.0", "eslint-config-next": "14.0.4", "postcss": "^8", "tailwindcss": "^3.3.0", diff --git a/packages/platform/examples/base/src/pages/payment/[paymentUid].tsx b/packages/platform/examples/base/src/pages/payment/[paymentUid].tsx index 3a3fb22d193f10..db45359f931f9f 100644 --- a/packages/platform/examples/base/src/pages/payment/[paymentUid].tsx +++ b/packages/platform/examples/base/src/pages/payment/[paymentUid].tsx @@ -18,10 +18,10 @@ export default function Payment(props: { calUsername: string; calEmail: string } { + onPaymentSuccess={() => { router.push("/bookings"); }} - onPaymentCancellation={(data) => { + onPaymentCancellation={() => { router.back(); }} /> diff --git a/packages/trpc/server/routers/viewer/bookings/find.schema.ts b/packages/trpc/server/routers/viewer/bookings/find.schema.ts index eb4afb1eed54b7..2cb830d4f036c9 100644 --- a/packages/trpc/server/routers/viewer/bookings/find.schema.ts +++ b/packages/trpc/server/routers/viewer/bookings/find.schema.ts @@ -1,9 +1,7 @@ import { z } from "zod"; -const ZFindInputSchema = z.object({ +export const ZFindInputSchema = z.object({ bookingUid: z.string().optional(), }); export type TFindInputSchema = z.infer; - -export { ZFindInputSchema }; diff --git a/packages/trpc/server/routers/viewer/bookings/getInstantBookingLocation.schema.ts b/packages/trpc/server/routers/viewer/bookings/getInstantBookingLocation.schema.ts index fd338c7663581e..1b2de2b336e83a 100644 --- a/packages/trpc/server/routers/viewer/bookings/getInstantBookingLocation.schema.ts +++ b/packages/trpc/server/routers/viewer/bookings/getInstantBookingLocation.schema.ts @@ -1,9 +1,7 @@ import { z } from "zod"; -const ZInstantBookingInputSchema = z.object({ +export const ZInstantBookingInputSchema = z.object({ bookingId: z.number(), }); export type TInstantBookingInputSchema = z.infer; - -export { ZInstantBookingInputSchema }; diff --git a/packages/trpc/server/routers/viewer/eventTypes/types.ts b/packages/trpc/server/routers/viewer/eventTypes/types.ts index 7f778825a26504..47448de8101ae4 100644 --- a/packages/trpc/server/routers/viewer/eventTypes/types.ts +++ b/packages/trpc/server/routers/viewer/eventTypes/types.ts @@ -75,7 +75,7 @@ const BaseEventTypeUpdateInput = _EventTypeModel .partial() .extend(_EventTypeModel.pick({ id: true }).shape); -const ZUpdateInputSchema = BaseEventTypeUpdateInput.extend({ +export const ZUpdateInputSchema = BaseEventTypeUpdateInput.extend({ aiPhoneCallConfig: aiPhoneCallConfig.refine( (data) => { if (!data) return true; @@ -92,6 +92,4 @@ const ZUpdateInputSchema = BaseEventTypeUpdateInput.extend({ ), }).strict(); // only run infer over the simple type, excluding refines/transforms. -type TUpdateInputSchema = z.infer; - -export { ZUpdateInputSchema, type TUpdateInputSchema }; +export type TUpdateInputSchema = z.infer; diff --git a/packages/trpc/server/routers/viewer/eventTypes/update.handler.ts b/packages/trpc/server/routers/viewer/eventTypes/update.handler.ts index ab978caac14faf..9c8896ee4b10fb 100644 --- a/packages/trpc/server/routers/viewer/eventTypes/update.handler.ts +++ b/packages/trpc/server/routers/viewer/eventTypes/update.handler.ts @@ -15,6 +15,7 @@ import { validateBookerLayouts } from "@calcom/lib/validateBookerLayouts"; import type { PrismaClient } from "@calcom/prisma"; import { WorkflowTriggerEvents } from "@calcom/prisma/client"; import { SchedulingType, EventTypeAutoTranslatedField } from "@calcom/prisma/enums"; +import { eventTypeAppMetadataOptionalSchema } from "@calcom/prisma/zod-utils"; import { TRPCError } from "@trpc/server"; @@ -27,7 +28,6 @@ import { handleCustomInputs, handlePeriodType, } from "./util"; -import { eventTypeAppMetadataOptionalSchema } from "@calcom/prisma/zod-utils"; type SessionUser = NonNullable; type User = { diff --git a/turbo.json b/turbo.json index dffae485947020..a53184b89c28a3 100644 --- a/turbo.json +++ b/turbo.json @@ -454,6 +454,12 @@ "HUDDLE01_API_TOKEN", "REPLEXICA_API_KEY", "DIRECTORY_IDS_TO_LOG", - "NEXT_PUBLIC_SINGLE_ORG_SLUG" + "NEXT_PUBLIC_SINGLE_ORG_SLUG", + "GOOGLE_REFRESH_TOKEN", + "GOOGLE_CLIENT_ID", + "GOOGLE_CLIENT_SECRET", + "ZOOM_REFRESH_TOKEN", + "CALCOM_ADMIN_API_KEY", + "NEXT_PUBLIC_SINGLE_ORG_MODE_ENABLED" ] } diff --git a/yarn.lock b/yarn.lock index 57783428484623..39c0966264bbbe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4059,7 +4059,7 @@ __metadata: "@types/react-dom": ^18 autoprefixer: ^10.0.1 dotenv: ^16.3.1 - eslint: ^8 + eslint: ^8.34.0 eslint-config-next: 14.0.4 next: 14.0.4 postcss: ^8