Openstatus www.openstatus.dev

🧹 biome fix (#1282)

* 🧹 biome fix

* ci: apply automated fixes

* fix build

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

authored by

Thibault Le Ouay
autofix-ci[bot]
and committed by
GitHub
dd914660 51c97cc4

+74 -225
-1
apps/docs/src/components/Footer.astro
··· 1 1 --- 2 - 3 2 import EditLink from "@astrojs/starlight/components/EditLink.astro"; 4 3 import LastUpdated from "@astrojs/starlight/components/LastUpdated.astro"; 5 4 import Pagination from "@astrojs/starlight/components/Pagination.astro";
+2 -1
apps/docs/src/components/Head.astro
··· 2 2 import { NEXT_PUBLIC_OPENPANEL_CLIENT_ID } from "astro:env/client"; 3 3 import Default from "@astrojs/starlight/components/Head.astro"; 4 4 import { OpenPanelComponent } from "@openpanel/astro"; 5 + 5 6 const title = Astro.locals.starlightRoute.title; 6 7 const { siteTitle } = Astro.locals.starlightRoute; 7 8 ··· 19 20 <link rel="preload" href="/fonts/CalSans-SemiBold.ttf" as="font" type="font/ttf" crossorigin> 20 21 <script defer async src="https://buttons.github.io/buttons.js" /> 21 22 22 - <OpenPanelComponent clientId={NEXT_PUBLIC_OPENPANEL_CLIENT_ID!} trackScreenViews trackOutgoingLinks trackAttributes /> 23 + <OpenPanelComponent clientId={NEXT_PUBLIC_OPENPANEL_CLIENT_ID!} trackScreenViews trackOutgoingLinks trackAttributes />
+1 -1
apps/docs/src/components/Hero.astro
··· 1 1 --- 2 2 import type { Props } from "@astrojs/starlight/props"; 3 - 4 3 const { data } = Astro.locals.starlightRoute.entry; 5 4 const { title = data.title, tagline, image, actions = [] } = data.hero || {}; 5 + 6 6 import { LinkButton } from "@astrojs/starlight/components"; 7 7 --- 8 8
+1 -1
apps/docs/src/components/SiteTitle.astro
··· 13 13 class="rounded-full border border-border bg-transparent" 14 14 /> 15 15 OpenStatus 16 - </a> 16 + </a>
+2 -4
apps/docs/src/components/Status.astro
··· 1 1 --- 2 - import { type Status, getStatus, statusDictionary } from "./utils"; 3 - 2 + import { getStatus, statusDictionary } from "./utils"; 4 3 const { status } = await getStatus("openstatus"); 5 - 6 4 const { label, color } = statusDictionary[status]; 7 5 --- 8 6 ··· 23 21 class={`relative inline-flex h-2 w-2 rounded-full ${color}`} 24 22 /> 25 23 </span> 26 - </a> 24 + </a>
+1 -1
apps/server/src/routes/v1/incidents/put.ts
··· 1 - import { createRoute, z } from "@hono/zod-openapi"; 1 + import { createRoute } from "@hono/zod-openapi"; 2 2 3 3 import { and, db, eq } from "@openstatus/db"; 4 4 import { incidentTable } from "@openstatus/db/src/schema/incidents";
+1 -1
apps/server/src/routes/v1/monitors/post.ts
··· 1 - import { createRoute, z } from "@hono/zod-openapi"; 1 + import { createRoute } from "@hono/zod-openapi"; 2 2 3 3 import { Events } from "@openstatus/analytics"; 4 4 import { and, db, eq, isNull, sql } from "@openstatus/db";
+2 -2
apps/server/src/routes/v1/monitors/post_http.ts
··· 1 - import { createRoute, z } from "@hono/zod-openapi"; 1 + import { createRoute } from "@hono/zod-openapi"; 2 2 3 3 import { Events } from "@openstatus/analytics"; 4 4 import { and, db, eq, isNull, sql } from "@openstatus/db"; ··· 10 10 import { trackMiddleware } from "@/libs/middlewares"; 11 11 import type { monitorsApi } from "./index"; 12 12 import { HTTPMonitorSchema, MonitorSchema } from "./schema"; 13 - import { getAssertionNew, getAssertions } from "./utils"; 13 + import { getAssertionNew } from "./utils"; 14 14 15 15 const postRoute = createRoute({ 16 16 method: "post",
+1 -1
apps/server/src/routes/v1/monitors/post_tcp.ts
··· 1 - import { createRoute, z } from "@hono/zod-openapi"; 1 + import { createRoute } from "@hono/zod-openapi"; 2 2 3 3 import { Events } from "@openstatus/analytics"; 4 4 import { and, db, eq, isNull, sql } from "@openstatus/db";
+1 -1
apps/server/src/routes/v1/monitors/put.ts
··· 1 - import { createRoute, z } from "@hono/zod-openapi"; 1 + import { createRoute } from "@hono/zod-openapi"; 2 2 3 3 import { and, db, eq, isNull } from "@openstatus/db"; 4 4 import { monitor } from "@openstatus/db/src/schema";
+1 -1
apps/server/src/routes/v1/monitors/run/post.ts
··· 1 1 import { env } from "@/env"; 2 2 import { getCheckerPayload, getCheckerUrl } from "@/libs/checker"; 3 3 import { openApiErrorResponses } from "@/libs/errors"; 4 - import { createRoute, z } from "@hono/zod-openapi"; 4 + import { createRoute } from "@hono/zod-openapi"; 5 5 import { and, eq, gte, isNull, sql } from "@openstatus/db"; 6 6 import { db } from "@openstatus/db/src/db"; 7 7 import { monitorRun } from "@openstatus/db/src/schema";
+1 -1
apps/server/src/routes/v1/pages/get.ts
··· 1 - import { createRoute, z } from "@hono/zod-openapi"; 1 + import { createRoute } from "@hono/zod-openapi"; 2 2 3 3 import { OpenStatusApiError, openApiErrorResponses } from "@/libs/errors"; 4 4 import { and, eq } from "@openstatus/db";
+1 -1
apps/server/src/routes/v1/pages/post.ts
··· 1 - import { createRoute, z } from "@hono/zod-openapi"; 1 + import { createRoute } from "@hono/zod-openapi"; 2 2 3 3 import { and, eq, inArray, isNull, sql } from "@openstatus/db"; 4 4 import { db } from "@openstatus/db/src/db";
-3
apps/server/src/routes/v1/statusReports/update/post.ts
··· 3 3 import { createRoute } from "@hono/zod-openapi"; 4 4 import { and, db, eq, isNotNull } from "@openstatus/db"; 5 5 import { 6 - monitor, 7 - page, 8 6 pageSubscriber, 9 7 statusReport, 10 8 statusReportUpdate, 11 9 } from "@openstatus/db/src/schema"; 12 10 import { EmailClient } from "@openstatus/emails/src/client"; 13 - import { sendBatchEmailHtml } from "@openstatus/emails/src/send"; 14 11 import { StatusReportUpdateSchema } from "../../statusReportUpdates/schema"; 15 12 import type { statusReportsApi } from "../index"; 16 13 import { ParamsSchema, StatusReportSchema } from "../schema";
+3 -3
apps/web/src/app/(content)/(landing)/[slug]/page.tsx
··· 70 70 71 71 function Hero({ title, description }: { title: string; description: string }) { 72 72 return ( 73 - <div className="mx-auto my-12 sm:my-16 flex max-w-xl flex-col items-center gap-4 md:gap-6"> 74 - <div className="flex flex-col text-center gap-4 md:gap-6"> 73 + <div className="mx-auto my-12 flex max-w-xl flex-col items-center gap-4 sm:my-16 md:gap-6"> 74 + <div className="flex flex-col gap-4 text-center md:gap-6"> 75 75 <h1 className="font-cal text-5xl leading-tight md:text-6xl">{title}</h1> 76 - <h2 className="mx-auto max-w-md text-xl text-muted-foreground md:max-w-xl md:text-2xl"> 76 + <h2 className="mx-auto max-w-md text-muted-foreground text-xl md:max-w-xl md:text-2xl"> 77 77 {description} 78 78 </h2> 79 79 </div>
+1 -1
apps/web/src/app/api/og/post/route.tsx
··· 1 1 /* eslint-disable @next/next/no-img-element */ 2 2 import { ImageResponse } from "next/og"; 3 3 4 - import { DESCRIPTION, TITLE } from "@/app/shared-metadata"; 4 + import { TITLE } from "@/app/shared-metadata"; 5 5 import { BasicLayout } from "../_components/basic-layout"; 6 6 import { 7 7 DEFAULT_URL,
-2
apps/web/src/app/app/[workspaceSlug]/(dashboard)/incidents/(overview)/page.tsx
··· 1 - import * as React from "react"; 2 - 3 1 import { EmptyState } from "@/components/dashboard/empty-state"; 4 2 import { columns } from "@/components/data-table/incident/columns"; 5 3 import { DataTable } from "@/components/data-table/incident/data-table";
-1
apps/web/src/app/app/[workspaceSlug]/(dashboard)/monitors/[id]/data/page.tsx
··· 1 1 import { notFound } from "next/navigation"; 2 - import * as React from "react"; 3 2 4 3 import { DatePickerPreset } from "@/components/monitor-dashboard/date-picker-preset"; 5 4 import { prepareListByPeriod } from "@/lib/tb";
-1
apps/web/src/app/app/[workspaceSlug]/(dashboard)/monitors/[id]/overview/page.tsx
··· 1 1 import { notFound } from "next/navigation"; 2 - import * as React from "react"; 3 2 4 3 import { type Region, flyRegions } from "@openstatus/db/src/schema/constants"; 5 4 import { Separator } from "@openstatus/ui";
-5
apps/web/src/app/app/[workspaceSlug]/(dashboard)/notifications/(overview)/layout.tsx
··· 1 - import Link from "next/link"; 2 - 3 - import { ButtonWithDisableTooltip } from "@openstatus/ui"; 4 - 5 1 import { Header } from "@/components/dashboard/header"; 6 2 import AppPageLayout from "@/components/layout/app-page-layout"; 7 - import { api } from "@/trpc/server"; 8 3 9 4 export default async function Layout({ 10 5 children,
-5
apps/web/src/app/app/[workspaceSlug]/(dashboard)/notifications/(overview)/page.tsx
··· 1 - import Link from "next/link"; 2 - import * as React from "react"; 3 - 4 - import { Button } from "@openstatus/ui/src/components/button"; 5 - 6 1 import { EmptyState } from "@/components/dashboard/empty-state"; 7 2 import { Limit } from "@/components/dashboard/limit"; 8 3 import { columns } from "@/components/data-table/notification/columns";
-1
apps/web/src/app/app/[workspaceSlug]/(dashboard)/settings/appearance/page.tsx
··· 1 1 "use client"; 2 2 3 3 import { useTheme } from "next-themes"; 4 - import * as React from "react"; 5 4 6 5 import { cn } from "@/lib/utils"; 7 6
+1 -7
apps/web/src/app/app/[workspaceSlug]/(dashboard)/settings/user/page.tsx
··· 2 2 3 3 import { useSession } from "next-auth/react"; 4 4 5 - import { 6 - Avatar, 7 - AvatarFallback, 8 - AvatarImage, 9 - Input, 10 - Label, 11 - } from "@openstatus/ui"; 5 + import { Input, Label } from "@openstatus/ui"; 12 6 13 7 import Loading from "./loading"; 14 8
-1
apps/web/src/app/app/[workspaceSlug]/(dashboard)/status-pages/(overview)/page.tsx
··· 1 1 import Link from "next/link"; 2 - import * as React from "react"; 3 2 4 3 import { Button } from "@openstatus/ui/src/components/button"; 5 4
-2
apps/web/src/app/app/[workspaceSlug]/(dashboard)/status-pages/[id]/domain/page.tsx
··· 1 1 import { notFound } from "next/navigation"; 2 2 3 - import { allPlans } from "@openstatus/db/src/schema/plan/config"; 4 - 5 3 import { ProFeatureAlert } from "@/components/billing/pro-feature-alert"; 6 4 import { CustomDomainForm } from "@/components/forms/custom-domain-form"; 7 5 import { api } from "@/trpc/server";
-1
apps/web/src/app/app/[workspaceSlug]/(dashboard)/status-pages/[id]/reports/(overview)/page.tsx
··· 1 1 import Link from "next/link"; 2 - import * as React from "react"; 3 2 4 3 import { Button } from "@openstatus/ui/src/components/button"; 5 4
-4
apps/web/src/app/app/[workspaceSlug]/(dashboard)/status-pages/[id]/reports/[reportId]/overview/page.tsx
··· 1 - import Link from "next/link"; 2 1 import { notFound } from "next/navigation"; 3 - import * as React from "react"; 4 - 5 - import { Button } from "@openstatus/ui/src/components/button"; 6 2 7 3 import { EmptyState } from "@/components/dashboard/empty-state"; 8 4 import { Events } from "@/components/status-update/events";
-1
apps/web/src/app/app/page.tsx
··· 1 1 "use client"; 2 2 3 3 import { useRouter } from "next/navigation"; 4 - import * as React from "react"; 5 4 6 5 import { Shell } from "@/components/dashboard/shell"; 7 6 import { AppHeader } from "@/components/layout/header/app-header";
-1
apps/web/src/app/play/checker/[id]/search-params.ts
··· 2 2 import { 3 3 createSearchParamsCache, 4 4 parseAsArrayOf, 5 - parseAsString, 6 5 parseAsStringLiteral, 7 6 } from "nuqs/server"; 8 7
+1 -1
apps/web/src/app/play/checker/layout.tsx
··· 12 12 export default function Layout({ children }: { children: React.ReactNode }) { 13 13 return ( 14 14 <> 15 - <Breadcrumb className="px-3 md:px-6 mb-4"> 15 + <Breadcrumb className="mb-4 px-3 md:px-6"> 16 16 <BreadcrumbList> 17 17 <BreadcrumbItem> 18 18 <BreadcrumbLink asChild>
+1 -1
apps/web/src/app/play/curl/layout.tsx
··· 12 12 export default function Layout({ children }: { children: React.ReactNode }) { 13 13 return ( 14 14 <> 15 - <Breadcrumb className="px-3 md:px-6 mb-4"> 15 + <Breadcrumb className="mb-4 px-3 md:px-6"> 16 16 <BreadcrumbList> 17 17 <BreadcrumbItem> 18 18 <BreadcrumbLink asChild>
-1
apps/web/src/app/play/status/_components/status-play.tsx
··· 6 6 CardTitle, 7 7 } from "@/components/marketing/card"; 8 8 import { Tracker } from "@/components/tracker/tracker"; 9 - import { env } from "@/env"; 10 9 import { prepareStatusByPeriod } from "@/lib/tb"; 11 10 import { getServerTimezoneFormat } from "@/lib/timezone"; 12 11
+1 -1
apps/web/src/app/play/status/layout.tsx
··· 12 12 export default function Layout({ children }: { children: React.ReactNode }) { 13 13 return ( 14 14 <> 15 - <Breadcrumb className="px-3 md:px-6 mb-4"> 15 + <Breadcrumb className="mb-4 px-3 md:px-6"> 16 16 <BreadcrumbList> 17 17 <BreadcrumbItem> 18 18 <BreadcrumbLink asChild>
-2
apps/web/src/app/play/status/page.tsx
··· 1 1 import type { Metadata } from "next"; 2 - 3 - import { BackButton } from "@/components/layout/back-button"; 4 2 import StatusPlay from "./_components/status-play"; 5 3 6 4 export const metadata: Metadata = {
-1
apps/web/src/app/public/monitors/[id]/page.tsx
··· 1 1 import { notFound } from "next/navigation"; 2 - import * as React from "react"; 3 2 4 3 import { type Region, flyRegions } from "@openstatus/db/src/schema/constants"; 5 4 import { Separator } from "@openstatus/ui";
-1
apps/web/src/app/status-page/[domain]/monitors/[id]/page.tsx
··· 1 1 import { notFound } from "next/navigation"; 2 - import * as React from "react"; 3 2 4 3 import { type Region, flyRegions } from "@openstatus/db/src/schema/constants"; 5 4 import { Separator } from "@openstatus/ui/src/components/separator";
+1 -8
apps/web/src/app/status/page.tsx
··· 2 2 import type { Metadata } from "next"; 3 3 import Link from "next/link"; 4 4 5 - import { 6 - Card, 7 - CardDescription, 8 - CardFooter, 9 - CardHeader, 10 - CardTitle, 11 - } from "@openstatus/ui"; 5 + import { Card, CardDescription, CardHeader, CardTitle } from "@openstatus/ui"; 12 6 13 - import { Icons } from "@/components/icons"; 14 7 import { MarketingLayout } from "@/components/layout/marketing-layout"; 15 8 import { env } from "@/env"; 16 9 import {
+1 -6
apps/web/src/components/billing/pro-feature-hover-card.tsx
··· 3 3 import { useState } from "react"; 4 4 5 5 import type { WorkspacePlan } from "@openstatus/db/src/schema/workspaces/validation"; 6 - import { 7 - Badge, 8 - HoverCard, 9 - HoverCardContent, 10 - HoverCardTrigger, 11 - } from "@openstatus/ui"; 6 + import { HoverCard, HoverCardContent, HoverCardTrigger } from "@openstatus/ui"; 12 7 import { ArrowUpRight } from "lucide-react"; 13 8 import Link from "next/link"; 14 9 import { upgradePlan } from "./utils";
-2
apps/web/src/components/dashboard/info-alert-dialog.tsx
··· 1 1 "use client"; 2 - 3 - import { useParams } from "next/navigation"; 4 2 import { useEffect, useState } from "react"; 5 3 6 4 import {
+1 -1
apps/web/src/components/data-table/incident/data-table-row-actions.tsx
··· 26 26 } from "@openstatus/ui"; 27 27 28 28 import { LoadingAnimation } from "@/components/loading-animation"; 29 - import { toast, toastAction } from "@/lib/toast"; 29 + import { toastAction } from "@/lib/toast"; 30 30 import { api } from "@/trpc/client"; 31 31 32 32 interface DataTableRowActionsProps<TData> {
-1
apps/web/src/components/data-table/incident/data-table.tsx
··· 6 6 getCoreRowModel, 7 7 useReactTable, 8 8 } from "@tanstack/react-table"; 9 - import * as React from "react"; 10 9 11 10 import { 12 11 Table,
-1
apps/web/src/components/data-table/invitation/data-table.tsx
··· 6 6 getCoreRowModel, 7 7 useReactTable, 8 8 } from "@tanstack/react-table"; 9 - import * as React from "react"; 10 9 11 10 import { 12 11 Table,
-2
apps/web/src/components/data-table/maintenance/columns.tsx
··· 3 3 import type { ColumnDef } from "@tanstack/react-table"; 4 4 5 5 import type { Maintenance } from "@openstatus/db/src/schema"; 6 - 7 - import { formatDateTime } from "@/lib/utils"; 8 6 import { format } from "date-fns"; 9 7 import { DataTableRowActions } from "./data-table-row-actions"; 10 8
-1
apps/web/src/components/data-table/maintenance/data-table.tsx
··· 6 6 getCoreRowModel, 7 7 useReactTable, 8 8 } from "@tanstack/react-table"; 9 - import * as React from "react"; 10 9 11 10 import { 12 11 Table,
+1 -1
apps/web/src/components/data-table/monitor/data-table-floating-actions.tsx
··· 42 42 TooltipProvider, 43 43 TooltipTrigger, 44 44 } from "@openstatus/ui"; 45 - import { Check, Minus, X } from "lucide-react"; 45 + import { Check, X } from "lucide-react"; 46 46 import { useRouter } from "next/navigation"; 47 47 48 48 interface DataTableFloatingActions<TData> {
-1
apps/web/src/components/data-table/notification/data-table.tsx
··· 6 6 getCoreRowModel, 7 7 useReactTable, 8 8 } from "@tanstack/react-table"; 9 - import * as React from "react"; 10 9 11 10 import { 12 11 Table,
-1
apps/web/src/components/data-table/page-subscriber/data-table.tsx
··· 6 6 getCoreRowModel, 7 7 useReactTable, 8 8 } from "@tanstack/react-table"; 9 - import * as React from "react"; 10 9 11 10 import { 12 11 Table,
-1
apps/web/src/components/data-table/status-page/data-table.tsx
··· 6 6 getCoreRowModel, 7 7 useReactTable, 8 8 } from "@tanstack/react-table"; 9 - import * as React from "react"; 10 9 11 10 import { 12 11 Table,
-1
apps/web/src/components/data-table/status-report/data-table.tsx
··· 6 6 getCoreRowModel, 7 7 useReactTable, 8 8 } from "@tanstack/react-table"; 9 - import * as React from "react"; 10 9 11 10 import { 12 11 Table,
-1
apps/web/src/components/data-table/user/data-table.tsx
··· 6 6 getCoreRowModel, 7 7 useReactTable, 8 8 } from "@tanstack/react-table"; 9 - import * as React from "react"; 10 9 11 10 import { 12 11 Table,
-1
apps/web/src/components/forms/maintenance/form.tsx
··· 2 2 3 3 import { zodResolver } from "@hookform/resolvers/zod"; 4 4 import { usePathname, useRouter } from "next/navigation"; 5 - import * as React from "react"; 6 5 import { useTransition } from "react"; 7 6 import { useForm } from "react-hook-form"; 8 7
-2
apps/web/src/components/forms/maintenance/general.tsx
··· 1 1 "use client"; 2 - 3 - import * as React from "react"; 4 2 import type { UseFormReturn } from "react-hook-form"; 5 3 6 4 import type { InsertMaintenance } from "@openstatus/db/src/schema";
-5
apps/web/src/components/forms/maintenance/section-connect.tsx
··· 1 1 "use client"; 2 - 3 - import * as React from "react"; 4 2 import type { UseFormReturn } from "react-hook-form"; 5 3 6 4 import type { InsertMaintenance, Monitor } from "@openstatus/db/src/schema"; 7 5 import { 8 - Alert, 9 - AlertDescription, 10 - AlertTitle, 11 6 FormControl, 12 7 FormDescription, 13 8 FormField,
+1 -7
apps/web/src/components/forms/monitor/general.tsx
··· 1 1 "use client"; 2 - 3 - import * as React from "react"; 4 2 import type { UseFormReturn } from "react-hook-form"; 5 3 6 - import type { 7 - InsertMonitor, 8 - MonitorTag, 9 - WorkspacePlan, 10 - } from "@openstatus/db/src/schema"; 4 + import type { InsertMonitor, MonitorTag } from "@openstatus/db/src/schema"; 11 5 import { 12 6 FormControl, 13 7 FormDescription,
-3
apps/web/src/components/forms/monitor/section-assertions.tsx
··· 1 1 "use client"; 2 - 3 - import * as React from "react"; 4 2 import { useFieldArray } from "react-hook-form"; 5 3 import type { UseFormReturn } from "react-hook-form"; 6 4 7 5 import { 8 6 numberCompareDictionary, 9 7 stringCompareDictionary, 10 - textBodyAssertion, 11 8 } from "@openstatus/assertions"; 12 9 import type { InsertMonitor } from "@openstatus/db/src/schema"; 13 10 import {
+1 -7
apps/web/src/components/forms/monitor/section-notifications.tsx
··· 1 1 "use client"; 2 - 3 - import * as React from "react"; 4 2 import type { UseFormReturn } from "react-hook-form"; 5 3 6 - import type { 7 - InsertMonitor, 8 - Notification, 9 - WorkspacePlan, 10 - } from "@openstatus/db/src/schema"; 4 + import type { InsertMonitor, Notification } from "@openstatus/db/src/schema"; 11 5 import { 12 6 Badge, 13 7 FormControl,
-2
apps/web/src/components/forms/monitor/section-request-tcp.tsx
··· 1 1 "use client"; 2 - 3 - import * as React from "react"; 4 2 import type { UseFormReturn } from "react-hook-form"; 5 3 6 4 import type { InsertMonitor } from "@openstatus/db/src/schema";
+1 -1
apps/web/src/components/forms/monitor/section-requests.tsx
··· 13 13 TabsTrigger, 14 14 } from "@/components/dashboard/tabs"; 15 15 16 - import { Alert, AlertDescription, AlertTitle, Badge } from "@openstatus/ui"; 16 + import { Alert, AlertDescription, AlertTitle } from "@openstatus/ui"; 17 17 import { SectionHeader } from "../shared/section-header"; 18 18 import { SectionRequestHTTP } from "./section-request-http"; 19 19 import { SectionRequestTCP } from "./section-request-tcp";
+1 -5
apps/web/src/components/forms/monitor/section-status-page.tsx
··· 2 2 3 3 import type { UseFormReturn } from "react-hook-form"; 4 4 5 - import type { 6 - InsertMonitor, 7 - Page, 8 - WorkspacePlan, 9 - } from "@openstatus/db/src/schema"; 5 + import type { InsertMonitor, Page } from "@openstatus/db/src/schema"; 10 6 import { 11 7 FormControl, 12 8 FormDescription,
-1
apps/web/src/components/forms/monitor/select-region.tsx
··· 1 1 "use client"; 2 2 3 3 import { Check, ChevronsUpDown, Globe2 } from "lucide-react"; 4 - import * as React from "react"; 5 4 6 5 import { Button, type ButtonProps } from "@openstatus/ui/src/components/button"; 7 6 import {
+3 -6
apps/web/src/components/forms/notification/provider/section-pagerduty.tsx
··· 4 4 5 5 import { LoadingAnimation } from "@/components/loading-animation"; 6 6 import { toastAction } from "@/lib/toast"; 7 - import { 8 - type InsertNotificationWithData, 9 - InsertNotificationWithDataSchema, 10 - NotificationDataSchema, 11 - type WorkspacePlan, 12 - selectNotificationSchema, 7 + import type { 8 + InsertNotificationWithData, 9 + WorkspacePlan, 13 10 } from "@openstatus/db/src/schema"; 14 11 import { PagerDutySchema } from "@openstatus/notification-pagerduty"; 15 12 import { Button } from "@openstatus/ui";
-2
apps/web/src/components/forms/notification/section-connect.tsx
··· 1 1 "use client"; 2 - 3 - import * as React from "react"; 4 2 import type { UseFormReturn } from "react-hook-form"; 5 3 6 4 import type {
-1
apps/web/src/components/forms/status-page/form.tsx
··· 2 2 3 3 import { zodResolver } from "@hookform/resolvers/zod"; 4 4 import { usePathname, useRouter } from "next/navigation"; 5 - import * as React from "react"; 6 5 import { useCallback, useEffect, useTransition } from "react"; 7 6 import { useForm } from "react-hook-form"; 8 7
-2
apps/web/src/components/forms/status-page/general.tsx
··· 1 1 "use client"; 2 - 3 - import * as React from "react"; 4 2 import type { UseFormReturn } from "react-hook-form"; 5 3 6 4 import type { InsertPage } from "@openstatus/db/src/schema";
-1
apps/web/src/components/forms/status-page/section-monitor.tsx
··· 17 17 Popover, 18 18 PopoverContent, 19 19 PopoverTrigger, 20 - Skeleton, 21 20 Sortable, 22 21 SortableDragHandle, 23 22 SortableItem,
-1
apps/web/src/components/forms/status-page/section-visibility.tsx
··· 1 1 "use client"; 2 2 3 3 import { X } from "lucide-react"; 4 - import * as React from "react"; 5 4 import type { UseFormReturn } from "react-hook-form"; 6 5 7 6 import type { InsertPage, WorkspacePlan } from "@openstatus/db/src/schema";
+1 -5
apps/web/src/components/forms/status-report-form.tsx
··· 10 10 statusReportStatus, 11 11 statusReportStatusSchema, 12 12 } from "@openstatus/db/src/schema"; 13 - import type { 14 - InsertStatusReport, 15 - Monitor, 16 - Page, 17 - } from "@openstatus/db/src/schema"; 13 + import type { InsertStatusReport, Monitor } from "@openstatus/db/src/schema"; 18 14 import { 19 15 Accordion, 20 16 AccordionContent,
+1 -5
apps/web/src/components/forms/status-report/form.tsx
··· 6 6 import { useForm } from "react-hook-form"; 7 7 8 8 import { insertStatusReportSchema } from "@openstatus/db/src/schema"; 9 - import type { 10 - InsertStatusReport, 11 - Monitor, 12 - Page, 13 - } from "@openstatus/db/src/schema"; 9 + import type { InsertStatusReport, Monitor } from "@openstatus/db/src/schema"; 14 10 import { Form } from "@openstatus/ui"; 15 11 16 12 import {
-2
apps/web/src/components/forms/status-report/general.tsx
··· 1 1 "use client"; 2 - 3 - import * as React from "react"; 4 2 import type { UseFormReturn } from "react-hook-form"; 5 3 6 4 import {
+1 -7
apps/web/src/components/forms/status-report/section-connect.tsx
··· 1 1 "use client"; 2 - 3 - import * as React from "react"; 4 2 import type { UseFormReturn } from "react-hook-form"; 5 3 6 - import type { 7 - InsertStatusReport, 8 - Monitor, 9 - Page, 10 - } from "@openstatus/db/src/schema"; 4 + import type { InsertStatusReport, Monitor } from "@openstatus/db/src/schema"; 11 5 import { 12 6 FormControl, 13 7 FormDescription,
-2
apps/web/src/components/forms/status-report/section-update-message.tsx
··· 1 1 "use client"; 2 - 3 - import * as React from "react"; 4 2 import type { UseFormReturn } from "react-hook-form"; 5 3 6 4 import type { InsertStatusReport } from "@openstatus/db/src/schema";
-1
apps/web/src/components/layout/brand-name.tsx
··· 1 1 import Link from "next/link"; 2 - import * as React from "react"; 3 2 4 3 // Hottake: you don't need a features page if you have a changelog page 5 4 // Except for SEO
+1 -1
apps/web/src/components/layout/header/copy-button.tsx
··· 25 25 }); 26 26 }} 27 27 > 28 - <Copy className="h-4 w-4 mr-2 text-muted-foreground" /> 28 + <Copy className="mr-2 h-4 w-4 text-muted-foreground" /> 29 29 {id} 30 30 </Button> 31 31 </TooltipTrigger>
+2 -2
apps/web/src/components/layout/header/user-nav.tsx
··· 74 74 <DropdownMenuGroup> 75 75 <DropdownMenuSub> 76 76 {/* REMINDER: consider using that the data-state styles as default */} 77 - <DropdownMenuSubTrigger className="gap-1 [&_svg]:text-muted-foreground data-highlighted:[&_svg]:text-foreground data-[state=open]:[&_svg]:text-foreground"> 77 + <DropdownMenuSubTrigger className="gap-1 [&_svg]:text-muted-foreground data-[state=open]:[&_svg]:text-foreground data-highlighted:[&_svg]:text-foreground"> 78 78 <div className="flex w-full flex-row items-center justify-between"> 79 79 <span>Switch theme</span> 80 80 <ThemeIcon theme={theme} /> ··· 88 88 key={option} 89 89 checked={theme === option} 90 90 onClick={() => setTheme(option)} 91 - className="justify-between capitalize [&_svg]:text-muted-foreground data-highlighted:[&_svg]:text-foreground data-[state=open]:[&_svg]:text-foreground" 91 + className="justify-between capitalize [&_svg]:text-muted-foreground data-[state=open]:[&_svg]:text-foreground data-highlighted:[&_svg]:text-foreground" 92 92 > 93 93 {option} 94 94 <ThemeIcon theme={option} />
+3 -3
apps/web/src/components/marketing/cli/terminal.tsx
··· 16 16 } 17 17 18 18 return ( 19 - <div className="flex items-center w-full"> 19 + <div className="flex w-full items-center"> 20 20 <pre 21 21 className={cn( 22 - "bg-muted/50 w-full rounded-lg px-4 py-2 flex items-center gap-2 border", 22 + "flex w-full items-center gap-2 rounded-lg border bg-muted/50 px-4 py-2", 23 23 className, 24 24 )} 25 25 {...props} ··· 31 31 variant="ghost" 32 32 size="icon" 33 33 onClick={handleCopy} 34 - className="ml-auto -mr-2 hover:bg-transparent" 34 + className="-mr-2 ml-auto hover:bg-transparent" 35 35 > 36 36 {isCopied ? ( 37 37 <CheckIcon className="size-4" />
+11 -11
apps/web/src/components/marketing/feature/index.tsx
··· 67 67 title="Integrate your channels." 68 68 subTitle="Get notified when your services are down. Slack, Discord, Email, and more." 69 69 component={ 70 - <div className="scale-[0.80] my-auto"> 70 + <div className="my-auto scale-[0.80]"> 71 71 <NotificationsFormExample /> 72 72 </div> 73 73 } ··· 119 119 </div> 120 120 } 121 121 component={ 122 - <div className="origin-top my-auto scale-[0.80]"> 122 + <div className="my-auto origin-top scale-[0.80]"> 123 123 <Suspense fallback={<Skeleton />}> 124 124 <Chart {...mockChartData} /> 125 125 </Suspense> ··· 240 240 subTitle="Showcase your reliability to your users, and reduce the number of customer service tickets." 241 241 component={<StatusCheck />} 242 242 action={ 243 - <Button variant="outline" className="rounded-full w-max" asChild> 243 + <Button variant="outline" className="w-max rounded-full" asChild> 244 244 <Link href="https://status.openstatus.dev">Status Page</Link> 245 245 </Button> 246 246 } ··· 308 308 title="Optimize Web Performance." 309 309 subTitle="Analyze DNS, TCP, TLS, and TTFB for every request and inspect Response Headers as needed." 310 310 component={ 311 - <div className="scale-[0.80] origin-top"> 311 + <div className="origin-top scale-[0.80]"> 312 312 <Suspense fallback={<Skeleton />}> 313 313 <ResponseDetailTabs 314 314 {...mockResponseData} ··· 336 336 subTitle="Check status pages and incidents without leaving your flow." 337 337 component={<RaycastExample />} 338 338 action={ 339 - <Button variant="outline" className="rounded-full w-max" asChild> 339 + <Button variant="outline" className="w-max rounded-full" asChild> 340 340 <a 341 341 href="https://www.raycast.com/thibaultleouay/openstatus" 342 342 rel="noreferrer" ··· 376 376 /> 377 377 } 378 378 action={ 379 - <Button variant="outline" className="rounded-full w-max" asChild> 379 + <Button variant="outline" className="w-max rounded-full" asChild> 380 380 <a 381 381 href="https://docs.openstatus.dev/cli/getting-started" 382 382 rel="noreferrer" ··· 417 417 /> 418 418 } 419 419 action={ 420 - <Button variant="outline" className="rounded-full w-max" asChild> 420 + <Button variant="outline" className="w-max rounded-full" asChild> 421 421 <a 422 422 href="https://registry.terraform.io/providers/openstatusHQ/openstatus/latest" 423 423 rel="noreferrer" ··· 459 459 /> 460 460 } 461 461 action={ 462 - <Button variant="outline" className="rounded-full w-max" asChild> 462 + <Button variant="outline" className="w-max rounded-full" asChild> 463 463 <a 464 464 href="https://github.com/marketplace/actions/openstatus-synthetics-ci" 465 465 rel="noreferrer" ··· 494 494 component={ 495 495 <Mdx 496 496 code={blockCLI.mdx} 497 - className="max-w-none prose-pre:overflow-hidden my-auto" 497 + className="my-auto max-w-none prose-pre:overflow-hidden" 498 498 /> 499 499 } 500 500 action={ 501 - <Button variant="outline" className="rounded-full w-max" asChild> 501 + <Button variant="outline" className="w-max rounded-full" asChild> 502 502 <a 503 503 href="https://docs.openstatus.dev/cli/getting-started" 504 504 rel="noreferrer" ··· 538 538 /> 539 539 } 540 540 action={ 541 - <Button variant="outline" className="rounded-full w-max" asChild> 541 + <Button variant="outline" className="w-max rounded-full" asChild> 542 542 <a 543 543 href="https://docs.openstatus.dev/monitoring/opentelemetry" 544 544 rel="noreferrer"
+1 -1
apps/web/src/components/marketing/feature/interactive-feature.tsx
··· 146 146 147 147 function FeatureTitle({ strong, regular }: FeatureTitleProps) { 148 148 return ( 149 - <p className="text-muted-foreground text-lg md:text-xl"> 149 + <p className="text-lg text-muted-foreground md:text-xl"> 150 150 <strong className="font-medium text-foreground">{strong}</strong>{" "} 151 151 {regular} 152 152 </p>
-1
apps/web/src/components/marketing/hero.tsx
··· 7 7 8 8 import { getGitHubStars } from "@/lib/github"; 9 9 import { cn, numberFormatter } from "@/lib/utils"; 10 - import { SpeedCheckerButton } from "./speed-checker-button"; 11 10 12 11 export function Hero() { 13 12 return (
+4 -4
apps/web/src/components/marketing/pricing/enterprice-plan.tsx
··· 15 15 <div> 16 16 <p className="mb-2 font-cal text-2xl">Enterprise</p> 17 17 <p className="text-muted-foreground">If you are looking for:</p> 18 - <div className="my-4 grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-4"> 18 + <div className="my-4 grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3"> 19 19 {features.map((feature) => ( 20 20 <div key={feature} className="flex items-center"> 21 21 <CheckIcon className="mr-1.5 h-4 w-4 shrink-0" /> ··· 23 23 </div> 24 24 ))} 25 25 </div> 26 - <div className="grid grid-cols-1 sm:grid-cols-4 gap-6"> 26 + <div className="grid grid-cols-1 gap-6 sm:grid-cols-4"> 27 27 <div className="sm:col-span-3"> 28 28 <p className="text-muted-foreground"> 29 29 We can help you with that. Speak with us today to build your own 30 30 custom solution that fits your needs. 31 31 </p> 32 32 </div> 33 - <div className="sm:col-span-1 w-full"> 34 - <Button className="rounded-full w-full" asChild> 33 + <div className="w-full sm:col-span-1"> 34 + <Button className="w-full rounded-full" asChild> 35 35 <a 36 36 href="https://cal.com/team/openstatus/30min" 37 37 target="_blank"
-4
apps/web/src/components/marketing/pricing/pricing-wrapper.tsx
··· 1 1 "use client"; 2 2 3 - import { useSearchParams } from "next/navigation"; 4 - 5 - import type { WorkspacePlan } from "@openstatus/db/src/schema/workspaces/validation"; 6 - 7 3 import { workspacePlans } from "@openstatus/db/src/schema"; 8 4 import { parseAsStringLiteral, useQueryState } from "nuqs"; 9 5 import { Suspense } from "react";
-2
apps/web/src/components/monitor-charts/utils.tsx
··· 1 - import { format } from "date-fns"; 2 - 3 1 import { flyRegionsDict } from "@openstatus/utils"; 4 2 5 3 import type { Period, Quantile } from "@/lib/monitor/utils";
-2
apps/web/src/components/monitor-dashboard/date-picker-preset.tsx
··· 1 1 "use client"; 2 2 3 - import * as React from "react"; 4 - 5 3 import { periodFormatter } from "@/lib/monitor/utils"; 6 4 import type { Period } from "@/lib/monitor/utils"; 7 5 import { SearchParamsPreset } from "./search-params-preset";
-1
apps/web/src/components/monitor-dashboard/interval-preset.tsx
··· 1 1 "use client"; 2 2 3 3 import { HelpCircle } from "lucide-react"; 4 - import * as React from "react"; 5 4 6 5 import { Label } from "@openstatus/ui/src/components/label"; 7 6 import {
-1
apps/web/src/components/monitor-dashboard/quantile-preset.tsx
··· 1 1 "use client"; 2 2 3 3 import { HelpCircle } from "lucide-react"; 4 - import * as React from "react"; 5 4 6 5 import { Label } from "@openstatus/ui/src/components/label"; 7 6 import {
-1
apps/web/src/components/monitor-dashboard/region-preset.tsx
··· 1 1 "use client"; 2 2 3 3 import { Check, ChevronsUpDown, Globe2 } from "lucide-react"; 4 - import * as React from "react"; 5 4 6 5 import { Button, type ButtonProps } from "@openstatus/ui/src/components/button"; 7 6 import {
-1
apps/web/src/components/ping-response-analysis/columns.tsx
··· 4 4 import { type RegionChecker, latencyFormatter, regionFormatter } from "./utils"; 5 5 6 6 import { flyRegionsDict } from "@openstatus/utils"; 7 - 8 7 import { DataTableColumnHeader } from "../data-table/data-table-column-header"; 9 8 import { StatusCodeBadge } from "../monitor/status-code-badge"; 10 9
-2
apps/web/src/components/templates/email-template.tsx
··· 1 - import * as React from "react"; 2 - 3 1 interface EmailTemplateProps { 4 2 firstName: string; 5 3 }
-1
apps/web/src/components/theme-provider.tsx
··· 2 2 3 3 import { ThemeProvider as NextThemesProvider } from "next-themes"; 4 4 import type { ThemeProviderProps } from "next-themes/dist/types"; 5 - import * as React from "react"; 6 5 7 6 export function ThemeProvider({ children, ...props }: ThemeProviderProps) { 8 7 return <NextThemesProvider {...props}>{children}</NextThemesProvider>;
-1
apps/web/src/components/theme/theme-toggle.tsx
··· 1 1 "use client"; 2 2 3 3 import { useTheme } from "next-themes"; 4 - import * as React from "react"; 5 4 6 5 import { Button } from "@openstatus/ui/src/components/button"; 7 6 import {
-1
apps/web/src/config/features.tsx
··· 1 1 import type { ValidIcon } from "@/components/icons"; 2 - import { Terminal } from "@/components/marketing/cli/terminal"; 3 2 4 3 export type Feature = { 5 4 icon: ValidIcon;
+1 -8
apps/web/src/lib/monitor/utils.ts
··· 1 - import { 2 - endOfDay, 3 - endOfHour, 4 - startOfDay, 5 - startOfHour, 6 - subDays, 7 - subHours, 8 - } from "date-fns"; 1 + import { endOfDay, startOfDay, startOfHour, subDays } from "date-fns"; 9 2 10 3 import type { MonitorPeriodicity } from "@openstatus/db/src/schema"; 11 4
-2
apps/web/src/next-auth.d.ts
··· 1 - import type NextAuth from "next-auth"; 2 - 3 1 import type { User as DefaultUserSchema } from "@openstatus/db/src/schema"; 4 2 5 3 declare module "next-auth" {
+1 -1
apps/workflows/src/checker/alerting.ts
··· 56 56 notificationId: notif.notification.id, 57 57 cronTimestamp: cronTimestamp, 58 58 }); 59 - } catch (e) { 59 + } catch (_e) { 60 60 console.log("notification trigger already exists dont send again"); 61 61 continue; 62 62 }
-2
apps/workflows/src/checker/index.ts
··· 1 - import { Client } from "@upstash/qstash"; 2 - 3 1 import { Hono } from "hono"; 4 2 import { z } from "zod"; 5 3
+11 -4
biome.jsonc
··· 15 15 "noSvgWithoutTitle": "off" 16 16 }, 17 17 "correctness": { 18 - "noUnusedVariables": "warn" 18 + "noUnusedVariables": "warn", 19 + "noUnusedImports": "error" 19 20 }, 20 21 "nursery": { 21 22 "useSortedClasses": "warn" ··· 28 29 ".wrangler", 29 30 ".react-email", 30 31 ".content-collections", 31 - "meta" 32 + "meta", 33 + "*.astro", 34 + ".astro" 32 35 ] 33 36 }, 34 37 "formatter": { ··· 44 47 ".wrangler", 45 48 ".react-email", 46 49 ".content-collections", 47 - "meta" 50 + "meta", 51 + "*.astro", 52 + ".astro" 48 53 ] 49 54 }, 50 55 "organizeImports": { ··· 56 61 ".nuxt", 57 62 ".wrangler", 58 63 ".react-email", 59 - ".content-collections" 64 + ".content-collections", 65 + "*.astro", 66 + ".astro" 60 67 ] 61 68 } 62 69 }
-1
packages/api/src/router/maintenance.ts
··· 5 5 insertMaintenanceSchema, 6 6 maintenance, 7 7 maintenancesToMonitors, 8 - selectMaintenanceSchema, 9 8 } from "@openstatus/db/src/schema"; 10 9 11 10 import { Events } from "@openstatus/analytics";
-1
packages/api/src/router/monitorTag.ts
··· 1 - import { TRPCError } from "@trpc/server"; 2 1 import { z } from "zod"; 3 2 4 3 import { and, eq } from "@openstatus/db";
+1 -1
packages/api/src/router/stripe/index.ts
··· 10 10 11 11 import { createTRPCRouter, protectedProcedure } from "../../trpc"; 12 12 import { stripe } from "./shared"; 13 - import { PLANS, getPriceIdForPlan } from "./utils"; 13 + import { getPriceIdForPlan } from "./utils"; 14 14 import { webhookRouter } from "./webhook"; 15 15 16 16 const url =
-1
packages/db/src/schema/monitor_status/validation.ts
··· 1 1 import { createInsertSchema, createSelectSchema } from "drizzle-zod"; 2 - import type { z } from "zod"; 3 2 4 3 import { monitorRegionSchema } from "../constants"; 5 4 import { monitorStatusSchema } from "../monitors";
-1
packages/emails/emails/monitor-deactivation.tsx
··· 4 4 Body, 5 5 Button, 6 6 Head, 7 - Heading, 8 7 Html, 9 8 Preview, 10 9 Text,
-1
packages/emails/emails/monitor-paused.tsx
··· 4 4 Body, 5 5 Button, 6 6 Head, 7 - Heading, 8 7 Html, 9 8 Preview, 10 9 Text,
+1 -1
packages/emails/src/client.tsx
··· 1 1 /** @jsxImportSource react */ 2 2 3 3 import { render } from "@react-email/render"; 4 - import { ErrorResponse, Resend } from "resend"; 4 + import { Resend } from "resend"; 5 5 import FollowUpEmail from "../emails/followup"; 6 6 import MonitorAlertEmail from "../emails/monitor-alert"; 7 7 import type { MonitorAlertProps } from "../emails/monitor-alert";