From 2f8bd3c07aacf58fa3102e31ea21d7e0fd37d347 Mon Sep 17 00:00:00 2001 From: Alex / KATT Date: Thu, 29 Sep 2022 18:58:29 +0200 Subject: [PATCH] add trpc v10 (#4683) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * revert me later * let's see if this builds * fix dupe proc * fix: v10 works * fix type error * fix type error * fix type errors * fix more * add example procedure * spreading not needed * Update yarn.lock * Revert "revert me later" This reverts commit 0c8c15d0577e0c287223039c7b6958b2b0c12c69. Co-authored-by: Chris Bautista Co-authored-by: Peer Richelsen Co-authored-by: Omar López Co-authored-by: Alex van Andel --- apps/web/components/I18nLanguageHandler.tsx | 4 +- .../booking/pages/AvailabilityPage.tsx | 6 +- .../components/booking/pages/BookingPage.tsx | 2 +- .../components/dialog/RescheduleDialog.tsx | 2 +- .../components/CalendarSwitch.tsx | 2 +- .../integrations/CalendarListContainer.tsx | 2 +- .../DisconnectStripeIntegration.tsx | 2 +- .../v2/apps/CalendarListContainer.tsx | 2 +- .../components/v2/settings/CalendarSwitch.tsx | 2 +- apps/web/lib/QueryCell.tsx | 14 +- apps/web/lib/app-providers.tsx | 7 +- apps/web/package.json | 2 +- apps/web/pages/bookings/[status].tsx | 2 +- apps/web/pages/event-types/[type].tsx | 2 +- apps/web/pages/event-types/index.tsx | 3 +- apps/web/pages/old-getting-started.tsx | 3 +- apps/web/pages/sandbox/test-async-error.tsx | 2 +- apps/web/pages/settings/profile.tsx | 2 +- apps/web/pages/v2/bookings/[status].tsx | 2 +- apps/web/pages/v2/event-types/index.tsx | 3 +- .../pages/v2/settings/my-account/general.tsx | 2 +- .../app-store/_utils/useAddAppMutation.ts | 2 +- .../routing-forms/components/FormActions.tsx | 4 +- .../routing-forms/components/SingleForm.tsx | 4 +- .../app-store/ee/routing-forms/trpc-router.ts | 4 +- .../components/confirmDialog.tsx | 2 +- packages/trpc/package.json | 9 +- packages/trpc/react/trpc.ts | 5 +- packages/trpc/server/createRouter.ts | 4 + packages/trpc/server/routers/_app.ts | 22 +- packages/trpc/server/routers/public.ts | 5 + packages/trpc/server/routers/viewer.tsx | 5 - .../trpc/server/routers/viewer/webhook.tsx | 4 +- packages/trpc/server/trpc.ts | 33 +++ packages/ui/package.json | 2 +- yarn.lock | 213 ++++++++---------- 36 files changed, 197 insertions(+), 189 deletions(-) create mode 100644 packages/trpc/server/routers/public.ts create mode 100644 packages/trpc/server/trpc.ts diff --git a/apps/web/components/I18nLanguageHandler.tsx b/apps/web/components/I18nLanguageHandler.tsx index c4c7d2070e..bb42b761c7 100644 --- a/apps/web/components/I18nLanguageHandler.tsx +++ b/apps/web/components/I18nLanguageHandler.tsx @@ -10,7 +10,9 @@ export function useViewerI18n() { * i18n should never be clubbed with other queries, so that it's caching can be managed independently. * We intend to not cache i18n query **/ - context: { skipBatch: true }, + trpc: { + context: { skipBatch: true }, + }, }); } diff --git a/apps/web/components/booking/pages/AvailabilityPage.tsx b/apps/web/components/booking/pages/AvailabilityPage.tsx index a415edc6b2..af43d3b955 100644 --- a/apps/web/components/booking/pages/AvailabilityPage.tsx +++ b/apps/web/components/booking/pages/AvailabilityPage.tsx @@ -79,7 +79,7 @@ const useSlots = ({ usernameList: string[]; timeZone?: string; }) => { - const { data, isLoading, isIdle } = trpc.useQuery( + const { data, isLoading, isPaused } = trpc.useQuery( [ "viewer.public.slots.getSchedule", { @@ -101,8 +101,8 @@ const useSlots = ({ } }, [data]); - // The very first time isIdle is set if auto-fetch is disabled, so isIdle should also be considered a loading state. - return { slots: cachedSlots, isLoading: isLoading || isIdle }; + // The very first time isPaused is set if auto-fetch is disabled, so isPaused should also be considered a loading state. + return { slots: cachedSlots, isLoading: isLoading || isPaused }; }; const SlotPicker = ({ diff --git a/apps/web/components/booking/pages/BookingPage.tsx b/apps/web/components/booking/pages/BookingPage.tsx index c0dbcbd56c..72dacfd566 100644 --- a/apps/web/components/booking/pages/BookingPage.tsx +++ b/apps/web/components/booking/pages/BookingPage.tsx @@ -1,6 +1,7 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { EventTypeCustomInputType, WorkflowActions } from "@prisma/client"; import { SchedulingType } from "@prisma/client"; +import { useMutation } from "@tanstack/react-query"; import { isValidPhoneNumber } from "libphonenumber-js"; import { useSession } from "next-auth/react"; import Head from "next/head"; @@ -9,7 +10,6 @@ import { useEffect, useMemo, useState, useReducer } from "react"; import { Controller, useForm, useWatch } from "react-hook-form"; import { FormattedNumber, IntlProvider } from "react-intl"; import { ReactMultiEmail } from "react-multi-email"; -import { useMutation } from "react-query"; import { v4 as uuidv4 } from "uuid"; import { z } from "zod"; diff --git a/apps/web/components/dialog/RescheduleDialog.tsx b/apps/web/components/dialog/RescheduleDialog.tsx index 23285bcaf0..57bbf47f50 100644 --- a/apps/web/components/dialog/RescheduleDialog.tsx +++ b/apps/web/components/dialog/RescheduleDialog.tsx @@ -1,6 +1,6 @@ +import { useMutation } from "@tanstack/react-query"; import { RescheduleResponse } from "pages/api/book/request-reschedule"; import React, { useState, Dispatch, SetStateAction } from "react"; -import { useMutation } from "react-query"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import showToast from "@calcom/lib/notification"; diff --git a/apps/web/components/getting-started/components/CalendarSwitch.tsx b/apps/web/components/getting-started/components/CalendarSwitch.tsx index f7424229ef..a2cff0e937 100644 --- a/apps/web/components/getting-started/components/CalendarSwitch.tsx +++ b/apps/web/components/getting-started/components/CalendarSwitch.tsx @@ -1,4 +1,4 @@ -import { useMutation } from "react-query"; +import { useMutation } from "@tanstack/react-query"; import showToast from "@calcom/lib/notification"; import { trpc } from "@calcom/trpc/react"; diff --git a/apps/web/components/integrations/CalendarListContainer.tsx b/apps/web/components/integrations/CalendarListContainer.tsx index 48b5a83524..6eb7c9f935 100644 --- a/apps/web/components/integrations/CalendarListContainer.tsx +++ b/apps/web/components/integrations/CalendarListContainer.tsx @@ -1,5 +1,5 @@ +import { useMutation } from "@tanstack/react-query"; import { Fragment } from "react"; -import { useMutation } from "react-query"; import { InstallAppButton } from "@calcom/app-store/components"; import { useLocale } from "@calcom/lib/hooks/useLocale"; diff --git a/apps/web/components/integrations/DisconnectStripeIntegration.tsx b/apps/web/components/integrations/DisconnectStripeIntegration.tsx index d72c946cf5..bf0c3e338a 100644 --- a/apps/web/components/integrations/DisconnectStripeIntegration.tsx +++ b/apps/web/components/integrations/DisconnectStripeIntegration.tsx @@ -1,5 +1,5 @@ +import { useMutation } from "@tanstack/react-query"; import { useState } from "react"; -import { useMutation } from "react-query"; import showToast from "@calcom/lib/notification"; import { ButtonBaseProps } from "@calcom/ui/Button"; diff --git a/apps/web/components/v2/apps/CalendarListContainer.tsx b/apps/web/components/v2/apps/CalendarListContainer.tsx index ba68df249a..009a22182d 100644 --- a/apps/web/components/v2/apps/CalendarListContainer.tsx +++ b/apps/web/components/v2/apps/CalendarListContainer.tsx @@ -1,6 +1,6 @@ +import { useMutation } from "@tanstack/react-query"; import Link from "next/link"; import { Fragment } from "react"; -import { useMutation } from "react-query"; import { InstallAppButton } from "@calcom/app-store/components"; import { useLocale } from "@calcom/lib/hooks/useLocale"; diff --git a/apps/web/components/v2/settings/CalendarSwitch.tsx b/apps/web/components/v2/settings/CalendarSwitch.tsx index 0051422700..0c3ed10117 100644 --- a/apps/web/components/v2/settings/CalendarSwitch.tsx +++ b/apps/web/components/v2/settings/CalendarSwitch.tsx @@ -1,4 +1,4 @@ -import { useMutation } from "react-query"; +import { useMutation } from "@tanstack/react-query"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc/react"; diff --git a/apps/web/lib/QueryCell.tsx b/apps/web/lib/QueryCell.tsx index 2dd142002a..5ab0e7a0e2 100644 --- a/apps/web/lib/QueryCell.tsx +++ b/apps/web/lib/QueryCell.tsx @@ -1,16 +1,14 @@ -import { ReactNode } from "react"; import { - QueryObserverIdleResult, QueryObserverLoadingErrorResult, QueryObserverLoadingResult, QueryObserverRefetchErrorResult, QueryObserverSuccessResult, UseQueryResult, -} from "react-query"; +} from "@tanstack/react-query"; +import { ReactNode } from "react"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import type { TRPCClientErrorLike } from "@calcom/trpc/client"; -import type { UseTRPCQueryOptions } from "@calcom/trpc/react"; import { trpc } from "@calcom/trpc/react"; import type { inferHandlerInput, @@ -22,6 +20,8 @@ import type { AppRouter } from "@calcom/trpc/server/routers/_app"; import { Alert } from "@calcom/ui/Alert"; import Loader from "@calcom/ui/Loader"; +import type { UseTRPCQueryOptions } from "@trpc/react/shared"; + type ErrorLike = { message: string; }; @@ -34,7 +34,6 @@ interface QueryCellOptionsBase { query: QueryObserverLoadingErrorResult | QueryObserverRefetchErrorResult ) => JSXElementOrNull; loading?: (query: QueryObserverLoadingResult | null) => JSXElementOrNull; - idle?: (query: QueryObserverIdleResult) => JSXElementOrNull; } interface QueryCellOptionsNoEmpty @@ -84,14 +83,11 @@ export function QueryCell( ); } - if (query.status === "idle") { - return opts.idle?.(query) ?? StatusLoader; - } // impossible state return null; } -type inferProcedures> = { +type inferProcedures = { [TPath in keyof TObj]: { input: inferProcedureInput; output: inferProcedureOutput; diff --git a/apps/web/lib/app-providers.tsx b/apps/web/lib/app-providers.tsx index 4b5d450ec0..3f3eda9d5b 100644 --- a/apps/web/lib/app-providers.tsx +++ b/apps/web/lib/app-providers.tsx @@ -9,7 +9,7 @@ import { ComponentProps, ReactNode } from "react"; import DynamicHelpscoutProvider from "@calcom/features/ee/support/lib/helpscout/providerDynamic"; import DynamicIntercomProvider from "@calcom/features/ee/support/lib/intercom/providerDynamic"; -import { trpc } from "@calcom/trpc/react"; +import { trpc, proxy } from "@calcom/trpc/react"; import { MetaProvider } from "@calcom/ui/v2/core/Meta"; import usePublicPage from "@lib/hooks/usePublicPage"; @@ -38,7 +38,8 @@ const CustomI18nextProvider = (props: AppPropsWithChildren) => { * i18n should never be clubbed with other queries, so that it's caching can be managed independently. * We intend to not cache i18n query **/ - const { i18n, locale } = trpc.useQuery(["viewer.public.i18n"], { context: { skipBatch: true } }).data ?? { + const { i18n, locale } = trpc.useQuery(["viewer.public.i18n"], { trpc: { context: { skipBatch: true } } }) + .data ?? { locale: "en", }; @@ -54,7 +55,7 @@ const CustomI18nextProvider = (props: AppPropsWithChildren) => { }; const AppProviders = (props: AppPropsWithChildren) => { - const session = trpc.useQuery(["viewer.public.session"]).data; + const session = proxy.public.session.useQuery().data; // No need to have intercom on public pages - Good for Page Performance const isPublicPage = usePublicPage(); const isThemeSupported = diff --git a/apps/web/package.json b/apps/web/package.json index 2834cb17b3..9848ff8350 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -57,6 +57,7 @@ "@radix-ui/react-tooltip": "^1.0.0", "@stripe/react-stripe-js": "^1.10.0", "@stripe/stripe-js": "^1.35.0", + "@tanstack/react-query": "^4.3.9", "@vercel/edge-functions-ui": "^0.2.1", "@wojtekmaj/react-daterange-picker": "^3.3.1", "accept-language-parser": "^1.5.0", @@ -105,7 +106,6 @@ "react-live-chat-loader": "^2.7.3", "react-multi-email": "^0.5.3", "react-phone-number-input": "^3.2.7", - "react-query": "^3.39.2", "react-select": "^5.4.0", "react-timezone-select": "^1.3.2", "react-use-intercom": "1.5.1", diff --git a/apps/web/pages/bookings/[status].tsx b/apps/web/pages/bookings/[status].tsx index 4b46b27143..85c0905cb0 100644 --- a/apps/web/pages/bookings/[status].tsx +++ b/apps/web/pages/bookings/[status].tsx @@ -92,7 +92,7 @@ export default function Bookings() { {query.status === "error" && ( )} - {(query.status === "loading" || query.status === "idle") && } + {(query.status === "loading" || query.isPaused) && } {query.status === "success" && !isEmpty && ( <>
diff --git a/apps/web/pages/event-types/[type].tsx b/apps/web/pages/event-types/[type].tsx index 73772fc2ac..487d62f163 100644 --- a/apps/web/pages/event-types/[type].tsx +++ b/apps/web/pages/event-types/[type].tsx @@ -31,6 +31,7 @@ import { CAL_URL, WEBAPP_URL } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import showToast from "@calcom/lib/notification"; import prisma from "@calcom/prisma"; +import { TRPCClientError } from "@calcom/trpc/client"; import { trpc } from "@calcom/trpc/react"; import type { RecurringEvent } from "@calcom/types/Calendar"; import { Alert } from "@calcom/ui/Alert"; @@ -70,7 +71,6 @@ import * as RadioArea from "@components/ui/form/radio-area"; import WebhookListContainer from "@components/webhook/WebhookListContainer"; import { getTranslation } from "@server/lib/i18n"; -import { TRPCClientError } from "@trpc/client"; const RainbowInstallForm = dynamic(() => import("@calcom/rainbow/components/RainbowInstallForm"), { suspense: true, diff --git a/apps/web/pages/event-types/index.tsx b/apps/web/pages/event-types/index.tsx index 3b01c2782d..12d1566c56 100644 --- a/apps/web/pages/event-types/index.tsx +++ b/apps/web/pages/event-types/index.tsx @@ -13,6 +13,7 @@ import { CAL_URL, WEBAPP_URL } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import showToast from "@calcom/lib/notification"; import { inferQueryOutput, trpc } from "@calcom/trpc/react"; +import { TRPCClientError } from "@calcom/trpc/react"; import { Button } from "@calcom/ui"; import { Alert } from "@calcom/ui/Alert"; import Badge from "@calcom/ui/Badge"; @@ -42,8 +43,6 @@ import { LinkText } from "@components/ui/LinkText"; import NoCalendarConnectedAlert from "@components/ui/NoCalendarConnectedAlert"; import SkeletonLoader from "@components/v2/eventtype/SkeletonLoader"; -import { TRPCClientError } from "@trpc/react"; - type EventTypeGroups = inferQueryOutput<"viewer.eventTypes">["eventTypeGroups"]; type EventTypeGroupProfile = EventTypeGroups[number]["profile"]; interface EventTypeListHeadingProps { diff --git a/apps/web/pages/old-getting-started.tsx b/apps/web/pages/old-getting-started.tsx index cd14bbfa79..47a37a6c58 100644 --- a/apps/web/pages/old-getting-started.tsx +++ b/apps/web/pages/old-getting-started.tsx @@ -21,6 +21,7 @@ import { useLocale } from "@calcom/lib/hooks/useLocale"; import showToast from "@calcom/lib/notification"; import { collectPageParameters, telemetryEventTypes, useTelemetry } from "@calcom/lib/telemetry"; import prisma from "@calcom/prisma"; +import { TRPCClientErrorLike } from "@calcom/trpc/client"; import { trpc } from "@calcom/trpc/react"; import type { AppRouter } from "@calcom/trpc/server/routers/_app"; import { Alert } from "@calcom/ui/Alert"; @@ -39,8 +40,6 @@ import Schedule from "@components/availability/Schedule"; import { CalendarListContainer } from "@components/integrations/CalendarListContainer"; import { UsernameAvailability } from "@components/ui/UsernameAvailability"; -import { TRPCClientErrorLike } from "@trpc/client"; - // Embed isn't applicable to onboarding, so ignore the rule /* eslint-disable @calcom/eslint/avoid-web-storage */ diff --git a/apps/web/pages/sandbox/test-async-error.tsx b/apps/web/pages/sandbox/test-async-error.tsx index 4b254c3ba2..3b5d01a6df 100644 --- a/apps/web/pages/sandbox/test-async-error.tsx +++ b/apps/web/pages/sandbox/test-async-error.tsx @@ -1,5 +1,5 @@ +import { useQuery } from "@tanstack/react-query"; import React from "react"; -import { useQuery } from "react-query"; import { HttpError } from "@lib/core/http/error"; diff --git a/apps/web/pages/settings/profile.tsx b/apps/web/pages/settings/profile.tsx index 42ee4238f1..dd181b581e 100644 --- a/apps/web/pages/settings/profile.tsx +++ b/apps/web/pages/settings/profile.tsx @@ -575,7 +575,7 @@ function SettingsView(props: ComponentProps & { localeProp: str * i18n should never be clubbed with other queries, so that it's caching can be managed independently. * We intend to not cache i18n query **/ -const WithQuery = withQuery(["viewer.public.i18n"], { context: { skipBatch: true } }); +const WithQuery = withQuery(["viewer.public.i18n"], { trpc: { context: { skipBatch: true } } }); export default function Settings(props: Props) { const { t } = useLocale(); diff --git a/apps/web/pages/v2/bookings/[status].tsx b/apps/web/pages/v2/bookings/[status].tsx index 3ba8488dec..80635623d2 100644 --- a/apps/web/pages/v2/bookings/[status].tsx +++ b/apps/web/pages/v2/bookings/[status].tsx @@ -94,7 +94,7 @@ export default function Bookings() { {query.status === "error" && ( )} - {(query.status === "loading" || query.status === "idle") && } + {(query.status === "loading" || query.isPaused) && } {query.status === "success" && !isEmpty && (
diff --git a/apps/web/pages/v2/event-types/index.tsx b/apps/web/pages/v2/event-types/index.tsx index d87ac042f9..a174ba1209 100644 --- a/apps/web/pages/v2/event-types/index.tsx +++ b/apps/web/pages/v2/event-types/index.tsx @@ -8,6 +8,7 @@ import React, { Fragment, useEffect, useState } from "react"; import { CAL_URL, WEBAPP_URL } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { inferQueryOutput, trpc } from "@calcom/trpc/react"; +import { TRPCClientError } from "@calcom/trpc/react"; import { Icon } from "@calcom/ui"; import { Badge, Button, ButtonGroup, Dialog, EmptyScreen, showToast, Switch, Tooltip } from "@calcom/ui/v2"; import ConfirmationDialogContent from "@calcom/ui/v2/core/ConfirmationDialogContent"; @@ -30,8 +31,6 @@ import Avatar from "@components/ui/Avatar"; import AvatarGroup from "@components/ui/AvatarGroup"; import SkeletonLoader from "@components/v2/eventtype/SkeletonLoader"; -import { TRPCClientError } from "@trpc/react"; - type EventTypeGroups = inferQueryOutput<"viewer.eventTypes">["eventTypeGroups"]; type EventTypeGroupProfile = EventTypeGroups[number]["profile"]; diff --git a/apps/web/pages/v2/settings/my-account/general.tsx b/apps/web/pages/v2/settings/my-account/general.tsx index 12b09a5320..de75677cc2 100644 --- a/apps/web/pages/v2/settings/my-account/general.tsx +++ b/apps/web/pages/v2/settings/my-account/general.tsx @@ -35,7 +35,7 @@ interface GeneralViewProps { localeProp: string; } -const WithQuery = withQuery(["viewer.public.i18n"], { context: { skipBatch: true } }); +const WithQuery = withQuery(["viewer.public.i18n"], { trpc: { context: { skipBatch: true } } }); const GeneralQueryView = () => { return ( diff --git a/packages/app-store/_utils/useAddAppMutation.ts b/packages/app-store/_utils/useAddAppMutation.ts index 5fbcb1c114..b5eaab0170 100644 --- a/packages/app-store/_utils/useAddAppMutation.ts +++ b/packages/app-store/_utils/useAddAppMutation.ts @@ -1,4 +1,4 @@ -import { useMutation } from "react-query"; +import { useMutation } from "@tanstack/react-query"; import type { IntegrationOAuthCallbackState } from "@calcom/app-store/types"; import { WEBAPP_URL } from "@calcom/lib/constants"; diff --git a/packages/app-store/ee/routing-forms/components/FormActions.tsx b/packages/app-store/ee/routing-forms/components/FormActions.tsx index 1927047c9e..9628090465 100644 --- a/packages/app-store/ee/routing-forms/components/FormActions.tsx +++ b/packages/app-store/ee/routing-forms/components/FormActions.tsx @@ -60,7 +60,7 @@ function NewFormDialog({ appUrl }: { appUrl: string }) { const router = useRouter(); const utils = trpc.useContext(); - const mutation = trpc.useMutation("viewer.app_routing_forms.form", { + const mutation = trpc.useMutation("viewer.app_routing_forms.formMutation", { onSuccess: (_data, variables) => { utils.invalidateQueries("viewer.app_routing_forms.forms"); router.push(`${appUrl}/form-edit/${variables.id}`); @@ -223,7 +223,7 @@ export function FormActionsProvider({ appUrl, children }: { appUrl: string; chil const [deleteDialogFormId, setDeleteDialogFormId] = useState(null); const router = useRouter(); - const toggleMutation = trpc.useMutation("viewer.app_routing_forms.form", { + const toggleMutation = trpc.useMutation("viewer.app_routing_forms.formMutation", { onError: () => { showToast(`Something went wrong`, "error"); }, diff --git a/packages/app-store/ee/routing-forms/components/SingleForm.tsx b/packages/app-store/ee/routing-forms/components/SingleForm.tsx index 602ee49b86..96da252ce2 100644 --- a/packages/app-store/ee/routing-forms/components/SingleForm.tsx +++ b/packages/app-store/ee/routing-forms/components/SingleForm.tsx @@ -194,7 +194,7 @@ export default function SingleForm({ const utils = trpc.useContext(); const router = useRouter(); - const mutation = trpc.useMutation("viewer.app_routing_forms.form", { + const mutation = trpc.useMutation("viewer.app_routing_forms.formMutation", { onSuccess() { router.replace(router.asPath); showToast("Form updated successfully.", "success"); @@ -203,7 +203,7 @@ export default function SingleForm({ showToast(`Something went wrong`, "error"); }, onSettled() { - utils.invalidateQueries(["viewer.app_routing_forms.form"]); + utils.invalidateQueries(["viewer.app_routing_forms.formQuery"]); }, }); return ( diff --git a/packages/app-store/ee/routing-forms/trpc-router.ts b/packages/app-store/ee/routing-forms/trpc-router.ts index 614c3dd67a..52c619e058 100644 --- a/packages/app-store/ee/routing-forms/trpc-router.ts +++ b/packages/app-store/ee/routing-forms/trpc-router.ts @@ -154,7 +154,7 @@ const app_RoutingForms = createRouter() }); }, }) - .query("form", { + .query("formQuery", { input: z.object({ id: z.string(), }), @@ -169,7 +169,7 @@ const app_RoutingForms = createRouter() return form; }, }) - .mutation("form", { + .mutation("formMutation", { input: z.object({ id: z.string(), name: z.string(), diff --git a/packages/app-store/wipemycalother/components/confirmDialog.tsx b/packages/app-store/wipemycalother/components/confirmDialog.tsx index 252e5c60e2..74b0302dc3 100644 --- a/packages/app-store/wipemycalother/components/confirmDialog.tsx +++ b/packages/app-store/wipemycalother/components/confirmDialog.tsx @@ -1,6 +1,6 @@ import { ClockIcon } from "@heroicons/react/outline"; +import { useMutation } from "@tanstack/react-query"; import { Dispatch, SetStateAction, useState } from "react"; -import { useMutation } from "react-query"; import dayjs from "@calcom/dayjs"; import { useLocale } from "@calcom/lib/hooks/useLocale"; diff --git a/packages/trpc/package.json b/packages/trpc/package.json index c76291bf7d..fc1fbae75a 100644 --- a/packages/trpc/package.json +++ b/packages/trpc/package.json @@ -6,10 +6,11 @@ "version": "1.0.0", "main": "index.ts", "dependencies": { - "@trpc/client": "^9.27.0", - "@trpc/next": "^9.27.0", - "@trpc/react": "^9.27.0", - "@trpc/server": "^9.27.0", + "@tanstack/react-query": "^4.3.9", + "@trpc/client": "^10.0.0-proxy-beta.5", + "@trpc/next": "^10.0.0-proxy-beta.5", + "@trpc/react": "^10.0.0-proxy-beta.5", + "@trpc/server": "^10.0.0-proxy-beta.5", "superjson": "1.9.1", "zod": "^3.18.0" } diff --git a/packages/trpc/react/trpc.ts b/packages/trpc/react/trpc.ts index c8ade47136..10558986ed 100644 --- a/packages/trpc/react/trpc.ts +++ b/packages/trpc/react/trpc.ts @@ -1,6 +1,7 @@ import superjson from "superjson"; -import { createReactQueryHooks } from "../react"; +import { createReactQueryHooks } from "@trpc/react"; + // ℹ️ Type-only import: // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html#type-only-imports-and-export import type { inferProcedureInput, inferProcedureOutput } from "../server"; @@ -12,6 +13,8 @@ import type { AppRouter } from "../server/routers/_app"; */ export const trpc = createReactQueryHooks(); +export const proxy = trpc.proxy; + export const transformer = superjson; /** * This is a helper method to infer the output of a query resolver diff --git a/packages/trpc/server/createRouter.ts b/packages/trpc/server/createRouter.ts index f4ac59d83b..0265436299 100644 --- a/packages/trpc/server/createRouter.ts +++ b/packages/trpc/server/createRouter.ts @@ -6,6 +6,7 @@ import { Context } from "./createContext"; /** * Helper function to create a router with context + * @deprecated */ export function createRouter() { return trpc.router().middleware(async ({ path, type, next }) => { @@ -17,6 +18,9 @@ export function createRouter() { }); } +/** + * @deprecated + */ export function createProtectedRouter() { return createRouter().middleware(({ ctx, next }) => { if (!ctx.user || !ctx.session) { diff --git a/packages/trpc/server/routers/_app.ts b/packages/trpc/server/routers/_app.ts index 126bea5718..51ec18fad1 100644 --- a/packages/trpc/server/routers/_app.ts +++ b/packages/trpc/server/routers/_app.ts @@ -1,9 +1,9 @@ /** * This file contains the root router of your tRPC-backend */ -import superjson from "superjson"; - import { createRouter } from "../createRouter"; +import { publicProcedure, t } from "../trpc"; +import { publicRouter } from "./public"; import { viewerRouter } from "./viewer"; /** @@ -11,18 +11,22 @@ import { viewerRouter } from "./viewer"; * If you want to use SSG, you need export this * @link https://trpc.io/docs/ssg * @link https://trpc.io/docs/router + * @deprecated */ -export const appRouter = createRouter() - /** - * Add data transformers - * @link https://trpc.io/docs/data-transformers - */ - .transformer(superjson) +export const legacyRouter = createRouter() /** * Optionally do custom error (type safe!) formatting * @link https://trpc.io/docs/error-formatting */ // .formatError(({ shape, error }) => { }) - .merge("viewer.", viewerRouter); + .merge("viewer.", viewerRouter) + .interop(); + +const v10Router = t.router({ + hello: publicProcedure.query(() => "hello"), + public: publicRouter, +}); + +export const appRouter = t.mergeRouters(legacyRouter, v10Router); export type AppRouter = typeof appRouter; diff --git a/packages/trpc/server/routers/public.ts b/packages/trpc/server/routers/public.ts new file mode 100644 index 0000000000..a055698810 --- /dev/null +++ b/packages/trpc/server/routers/public.ts @@ -0,0 +1,5 @@ +import { t, publicProcedure } from "../trpc"; + +export const publicRouter = t.router({ + session: publicProcedure.query(({ ctx }) => ctx.session), +}); diff --git a/packages/trpc/server/routers/viewer.tsx b/packages/trpc/server/routers/viewer.tsx index 3271a6d5cd..a279ac6e97 100644 --- a/packages/trpc/server/routers/viewer.tsx +++ b/packages/trpc/server/routers/viewer.tsx @@ -55,11 +55,6 @@ import { workflowsRouter } from "./viewer/workflows"; // things that unauthenticated users can query about themselves const publicViewerRouter = createRouter() - .query("session", { - resolve({ ctx }) { - return ctx.session; - }, - }) .query("i18n", { async resolve({ ctx }) { const { locale, i18n } = ctx; diff --git a/packages/trpc/server/routers/viewer/webhook.tsx b/packages/trpc/server/routers/viewer/webhook.tsx index 8266e7adb4..71fc6aa14f 100644 --- a/packages/trpc/server/routers/viewer/webhook.tsx +++ b/packages/trpc/server/routers/viewer/webhook.tsx @@ -96,8 +96,8 @@ export const webhookRouter = createProtectedRouter() input: z.object({ webhookId: z.string().optional(), }), - resolve({ ctx, input }) { - return ctx.prisma.webhook.findUniqueOrThrow({ + async resolve({ ctx, input }) { + return await ctx.prisma.webhook.findUniqueOrThrow({ where: { id: input.webhookId, }, diff --git a/packages/trpc/server/trpc.ts b/packages/trpc/server/trpc.ts new file mode 100644 index 0000000000..c39ce256ad --- /dev/null +++ b/packages/trpc/server/trpc.ts @@ -0,0 +1,33 @@ +import superjson from "superjson"; + +import { initTRPC, TRPCError } from "@trpc/server"; + +import { Context } from "./createContext"; + +export const t = initTRPC.context().create({ + transformer: superjson, +}); + +const perfMiddleware = t.middleware(async ({ path, type, next }) => { + performance.mark("Start"); + const result = await next(); + performance.mark("End"); + performance.measure(`[${result.ok ? "OK" : "ERROR"}][$1] ${type} '${path}'`, "Start", "End"); + return result; +}); + +const isAuthedMiddleware = t.middleware(({ ctx, next }) => { + if (!ctx.user || !ctx.session) { + throw new TRPCError({ code: "UNAUTHORIZED" }); + } + return next({ + ctx: { + // infers that `user` and `session` are non-nullable to downstream procedures + session: ctx.session, + user: ctx.user, + }, + }); +}); + +export const publicProcedure = t.procedure.use(perfMiddleware); +export const authedProcedure = t.procedure.use(perfMiddleware).use(isAuthedMiddleware); diff --git a/packages/ui/package.json b/packages/ui/package.json index 1307e4b1fe..c12efa61e7 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -12,6 +12,7 @@ "lint:report": "eslint . --format json --output-file ../../lint-results/ui.json" }, "dependencies": { + "@tanstack/react-query": "^4.3.9", "@calcom/lib": "*", "@calcom/trpc": "*", "@radix-ui/react-dialog": "^0.1.0", @@ -24,7 +25,6 @@ "react-feather": "^2.0.10", "react-hook-form": "^7.34.2", "react-icons": "^4.4.0", - "react-query": "^3.39.2", "react-select": "^5.4.0" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 9a55a41891..9994136241 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1609,7 +1609,7 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.5", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.0": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.5", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7": version "7.17.8" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.8.tgz#3e56e4aff81befa55ac3ac6a0967349fd1c5bca2" integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA== @@ -2803,9 +2803,9 @@ integrity sha512-7jGciNJ2bQ4eZLSNlSZ+VAyW63kALf420CvkEpK4lEsUfWJq9odqimci0YCiyNyMUFB+pWHwLYyNc57dijYsCg== "@headlessui/react@^1.5.0": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.1.tgz#39c1b14b2e92d2edb32dd07722a8783a12d0d0be" - integrity sha512-vnRlB71kvEr3y26Lm1WpCiMML8n5JcJ7jK5+vaF0hGTZFArW206j61meVemXkTOuGLhmyWe6yj3OETzsxHoryQ== + version "1.7.2" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.2.tgz#e6a6a8d38342064a53182f1eb2bf6d9c1e53ba6a" + integrity sha512-snLv2lxwsf2HNTOBNgHYdvoYZ3ChJE8QszPi1d/hl9js8KrFrUulTaQBfSyPbJP5BybVreWh9DxCgz9S0Z6hKQ== "@heroicons/react@^1.0.6": version "1.0.6" @@ -4047,10 +4047,10 @@ ms "2.1.3" strip-ansi "6.0.1" -"@prisma/debug@4.3.1": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-4.3.1.tgz#e10627661352773fe58d513bc3e631df3548e995" - integrity sha512-rvDiWvChaKHZO4F9UFX/qG3jqYIYUbkWySAGJG0B9AMhw7k0EtjwYef02p/aLoz7smM3+ZPKJU9E+sqS1nympg== +"@prisma/debug@4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-4.4.0.tgz#f4e3a25fc391894d5012ae882d13bd1d7552ab3a" + integrity sha512-tpJqrvmA8VlQuaVAmkFzIU7Of6xk3kQ2DYV6bPJukDZ6xmnufT27EpU8TSIra4jGdzz7y/R0rxmuXSBp24ew5w== dependencies: "@types/debug" "4.1.7" debug "4.3.4" @@ -4067,11 +4067,11 @@ integrity sha512-0KqBwREUOjBiHwITsQzw2DWfLHjntvbqzGRawj4sBMnIiL5CXwyDUKeHOwXzKMtNr1rEjxEsypM14g0CzLRK3g== "@prisma/generator-helper@^4.0.0": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@prisma/generator-helper/-/generator-helper-4.3.1.tgz#8b486cd56efb3837843c10da2657371e62327e8d" - integrity sha512-tWIfbpXG30nvxYhyp0MZj4RX/3B4dnYWj5i4hanK7yTTXt6oRBm4b1veYbC/nW1KcBbJvbp+zvLN0dDSmSldqQ== + version "4.4.0" + resolved "https://registry.yarnpkg.com/@prisma/generator-helper/-/generator-helper-4.4.0.tgz#4f273ff6a097e0b01689f1d5dc8d9cd8a35e9b5b" + integrity sha512-6z5Tl+Cjk/WDWUMvpCOzhsK4Nkcb64zGoU/NePl3Z0tFR2RkfnBfnmJbpWdHr9HQYz7jO7LsTAyS5aWPjqeHKg== dependencies: - "@prisma/debug" "4.3.1" + "@prisma/debug" "4.4.0" "@types/cross-spawn" "6.0.2" chalk "4.1.2" cross-spawn "7.0.3" @@ -6294,6 +6294,11 @@ resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.3.8.tgz#d5f07c1d9d4f83f16f0bed7f3b245fa0e557b037" integrity sha512-AEUWtCNBIImFZ9tMt/P8V86kIhMHpfoJqAI1auGOLR8Wzeq7Ymiue789PJG0rKYcyViUicBZeHjggMqyEQVMfQ== +"@tanstack/query-core@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.7.2.tgz#5e8f0bc632b9c5423e5c5ca6d147c386b64dfec7" + integrity sha512-1zQuFsKShMhLY6rQYBEmkYiK9Zcb3lQcCVOTIgQcvliKIxPyZFaE/8LMtaITEEfgGF5qwYqHdm61+BUtpyNsrg== + "@tanstack/query-sync-storage-persister@^4.0.10": version "4.2.3" resolved "https://registry.yarnpkg.com/@tanstack/query-sync-storage-persister/-/query-sync-storage-persister-4.2.3.tgz#603bfcb312c15469a3bd2471b7645f66d82f54a8" @@ -6314,9 +6319,17 @@ use-sync-external-store "^1.2.0" "@tanstack/react-query@^4.2.3": - version "4.3.8" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.3.8.tgz#65b75305ad1ec31a23b48b4adf73a8b358b9e2d2" - integrity sha512-iR1mzhjD5nNhywW8o7FfT4Q4PjFSnfUQk2CRyOToojNiNygM82e22RcmPfLu1z+O+Pl6cMOD0D8NwdNpPZghnw== + version "4.7.2" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.7.2.tgz#ce020c4e0261e16b99d24322d1598ffc28974472" + integrity sha512-4nJ0HxU2kxkaHZ/swJw39io3Bb3liiggJBsCCdFOydZOl8AJDRCor1E3GsOBrtn53HT01R9EIP4PY/6fyYdKsw== + dependencies: + "@tanstack/query-core" "4.7.2" + use-sync-external-store "^1.2.0" + +"@tanstack/react-query@^4.3.9": + version "4.3.9" + resolved "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.3.9.tgz#13332a1d4dd404baec24c2853883bcb3cc61ea92" + integrity sha512-odfDW6WiSntCsCh+HFeJtUys3UnVOjfJMhykAtGtYvcklMyyDmCv9BVBt5KlSpbk/qW3kURPFCDapO+BFUlCwg== dependencies: "@tanstack/query-core" "4.3.8" use-sync-external-store "^1.2.0" @@ -6367,32 +6380,27 @@ javascript-natural-sort "0.7.1" lodash "4.17.21" -"@trpc/client@^9.27.0": - version "9.27.0" - resolved "https://registry.yarnpkg.com/@trpc/client/-/client-9.27.0.tgz#6fb2af2df051dea834173e5b9f12e74c65662af2" - integrity sha512-Yh+oDBiANArjDx69bSnXqIK36wjlRm8iGLQkMmrvTTFwVRt3hgfreCzjyj4PgNEd4SNX4iGrhLLPIDHeH+qlJA== - dependencies: - "@babel/runtime" "^7.9.0" +"@trpc/client@^10.0.0-proxy-beta.5": + version "10.0.0-proxy-beta.5" + resolved "https://registry.npmjs.org/@trpc/client/-/client-10.0.0-proxy-beta.5.tgz#26240fac4bfd07d75172c39e5abc033ed3ee5f4e" + integrity sha512-7JOP9qjPA+9QwLQF6SS/MgJzOnQb17WxoemeQqSjJxCcBYt4GU00LD4qAPChGw7fvCM2PfgrY1VKDn05tbsTxg== -"@trpc/next@^9.27.0": - version "9.27.0" - resolved "https://registry.yarnpkg.com/@trpc/next/-/next-9.27.0.tgz#8574b6f7107d0482c624ff79ffeb9b9779cb0dad" - integrity sha512-hndgdL9yMIX+SedEeA97tlxjVzOOFKh+uIRgrysoTv9zrTDt+1njQF0p438/yg16AJZN9bv5e0NtuJYUvB4GKg== +"@trpc/next@^10.0.0-proxy-beta.5": + version "10.0.0-proxy-beta.5" + resolved "https://registry.npmjs.org/@trpc/next/-/next-10.0.0-proxy-beta.5.tgz#68e2408736f74ae115a609ff2892eea8c3e3d0e5" + integrity sha512-e9AO4fEDovGt2X3lRidQpW2ejCjAI8LO9eryigp+8Z7c0RuxxGfWoF0nouziIv+O+gbVl0lrEitIvxGmktlC0w== dependencies: - "@babel/runtime" "^7.9.0" react-ssr-prepass "^1.5.0" -"@trpc/react@^9.27.0": - version "9.27.0" - resolved "https://registry.yarnpkg.com/@trpc/react/-/react-9.27.0.tgz#db2334b42416027a292a856cb164def23b37a067" - integrity sha512-vAMBvI5AQP/US9MluO12V0OU/zwnGOUUTkRh22QQ20rcmR6NXPE28lMCdcJaHoTcbv1Mlr6vGXH7Er+/2+9tRg== - dependencies: - "@babel/runtime" "^7.9.0" +"@trpc/react@^10.0.0-proxy-beta.5": + version "10.0.0-proxy-beta.5" + resolved "https://registry.npmjs.org/@trpc/react/-/react-10.0.0-proxy-beta.5.tgz#aac29cf467e2ac1842c68f9f1ce423c5de074d33" + integrity sha512-apCC1aLtmZoB0EBG9Txyuo6XwwUSb3gbMc2F0Pfb4EqmCHKYrvpcxeiCSXvTXEiOH2fnn1QToeCuV1QVxhposA== -"@trpc/server@^9.27.0": - version "9.27.0" - resolved "https://registry.yarnpkg.com/@trpc/server/-/server-9.27.0.tgz#08aef2d0b025442e93f0c6b1421ddd7e81ae0eb5" - integrity sha512-5A/d5U9Y8L6+4q46a9gLackTyMRUFyNubo6JlIpSxtea/wW8teR6Azux4gg/uKIM3+6+lgg/HxQHWvwkG0VOSg== +"@trpc/server@^10.0.0-proxy-beta.5": + version "10.0.0-proxy-beta.5" + resolved "https://registry.npmjs.org/@trpc/server/-/server-10.0.0-proxy-beta.5.tgz#7efd0cafd7bae0031c88150cc74f70e870f58318" + integrity sha512-0bF+qpnzK1/qXI021C5CPTnpkJY4Q2tRj0Tvb9M8iHxkVQaRn84AaNNO45uz5BrCq7GkaWQ4DOUtB29GsRMzBw== "@tryvital/vital-node@^1.4.6": version "1.4.6" @@ -6436,17 +6444,17 @@ integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== "@typeform/embed-react@^1.2.4": - version "1.20.0" - resolved "https://registry.yarnpkg.com/@typeform/embed-react/-/embed-react-1.20.0.tgz#4523f45e344eb2b7d0fc3d0c70484d1d9cdce43b" - integrity sha512-IJUo+LrINMoWrPriGmSARnNq5HVh4v0bju+wOzgavnBAWtbPBOyo8J9ekz42uPFDsGEnb2w8tS1wJUe3labsdg== + version "1.21.0" + resolved "https://registry.yarnpkg.com/@typeform/embed-react/-/embed-react-1.21.0.tgz#2e7148ebe614f68a15d8a78b581b0bc82e1c5e0d" + integrity sha512-nZi7OD5mxZUKQjkzxAll05JU6QNWuHuCE+L/S1Vagy7fgb/rdx4iEIfvqFogTcrVw61bCS6TaAJ+ateD7vR7sw== dependencies: - "@typeform/embed" "1.37.1" + "@typeform/embed" "1.38.0" fast-deep-equal "^3.1.3" -"@typeform/embed@1.37.1": - version "1.37.1" - resolved "https://registry.yarnpkg.com/@typeform/embed/-/embed-1.37.1.tgz#f1d2dfe7199ca6d22d862a59107c953583fc069f" - integrity sha512-CE/4HxyCGqaoi+P8XvZA6Uzy+Ob6SBsSTseFkpZDLkOp+sy5Nbr17yqAJbn4fPi1BXeYK7jkg8+PGBEbxdeUCw== +"@typeform/embed@1.38.0": + version "1.38.0" + resolved "https://registry.yarnpkg.com/@typeform/embed/-/embed-1.38.0.tgz#c9f95faddc8eb7a6602bafcf9a22c21b8c79349e" + integrity sha512-qYxtwckEcRt++F1sUeILb/qmUFQ3PwcUxKedCBSseC8lFo1ukD1wmsBf+Il8YSRPKPqhTrGUG5WPaJg83n1xuw== "@types/accept-language-parser@1.5.2": version "1.5.2" @@ -8971,7 +8979,7 @@ better-opn@^2.1.1: dependencies: open "^7.0.3" -big-integer@^1.6.16, big-integer@^1.6.7: +big-integer@^1.6.7: version "1.6.51" resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== @@ -9205,20 +9213,6 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -broadcast-channel@^3.4.1: - version "3.7.0" - resolved "https://registry.yarnpkg.com/broadcast-channel/-/broadcast-channel-3.7.0.tgz#2dfa5c7b4289547ac3f6705f9c00af8723889937" - integrity sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg== - dependencies: - "@babel/runtime" "^7.7.2" - detect-node "^2.1.0" - js-sha3 "0.8.0" - microseconds "0.2.0" - nano-time "1.0.0" - oblivious-set "1.0.0" - rimraf "3.0.2" - unload "2.2.0" - brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -10840,13 +10834,21 @@ datocms-listen@^0.1.9: resolved "https://registry.yarnpkg.com/datocms-listen/-/datocms-listen-0.1.10.tgz#6d8c2b239478896caea7731493159e3ca98b23ee" integrity sha512-gaQ69vMC+shRsj6fFo3xEMcUpxtLElJIT0HBTaQHzy0nk1bCeWbwgzYzI8r1FLukD6KV4oFm/YGrGBNbnwOovg== -datocms-structured-text-generic-html-renderer@^2.0.1: +datocms-structured-text-generic-html-renderer@^2.0.1, datocms-structured-text-generic-html-renderer@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/datocms-structured-text-generic-html-renderer/-/datocms-structured-text-generic-html-renderer-2.0.4.tgz#df50488b486a20f45583c2e685998873c843c1dc" integrity sha512-Rv5Y1eC9NZXNSz3FHvHGFvGnKEEbvG1kQWlylpCSoeDBZPBwSWAFD/ixIAOfa8Yk1EVpmoQd3KQd725WKYJwRQ== dependencies: datocms-structured-text-utils "^2.0.4" +datocms-structured-text-to-plain-text@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/datocms-structured-text-to-plain-text/-/datocms-structured-text-to-plain-text-2.0.4.tgz#9798c5ea06417e7da4b4b14d1ed3dd9c0d550944" + integrity sha512-/0VQNo6xZXiGdnHCTIoEmdnwD1JZVMMsyEfSy2SNF7QW4YAOz8bKtWSwCT4cYRKrhA/jZWCq7G4u0kPmiy1FWg== + dependencies: + datocms-structured-text-generic-html-renderer "^2.0.4" + datocms-structured-text-utils "^2.0.4" + datocms-structured-text-utils@^2.0.1, datocms-structured-text-utils@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/datocms-structured-text-utils/-/datocms-structured-text-utils-2.0.4.tgz#c429e6b74b90fbac228e1d28b8919f9af2c4bfff" @@ -11177,11 +11179,6 @@ detect-node-es@^1.1.0: resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== -detect-node@^2.0.4, detect-node@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - detect-package-manager@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/detect-package-manager/-/detect-package-manager-2.0.1.tgz#6b182e3ae5e1826752bfef1de9a7b828cffa50d8" @@ -13758,6 +13755,11 @@ gifwrap@^0.9.2: image-q "^4.0.0" omggif "^1.0.10" +github-buttons@^2.22.0: + version "2.22.0" + resolved "https://registry.yarnpkg.com/github-buttons/-/github-buttons-2.22.0.tgz#b2669f8504ce5496ab37b7ce53e8ed01db9818bc" + integrity sha512-N5bk01s1WgK1FVtoeSUVkRkJpkaSu8yHMPcjye+PTa0jsRjMRNrYqVLgpUf2RA5Kvec05DfHYAT6/68fwkdqPw== + github-slugger@^1.0.0, github-slugger@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.4.0.tgz#206eb96cdb22ee56fdc53a28d5a302338463444e" @@ -14076,9 +14078,9 @@ gray-matter@^4.0.3: strip-bom-string "^1.0.0" gsap@^3.11.0: - version "3.11.1" - resolved "https://registry.yarnpkg.com/gsap/-/gsap-3.11.1.tgz#2d99acf9c9ad02f3b6668bfab7567d31f217a91e" - integrity sha512-UKuJ0UPhntFHMwT6URFQ4cTQv88xc7Kd9Dhxt7qX9IPhC+d+/a5wKW5E5Vn33hZ53nBI1JfApcEbzKgXkcuPZw== + version "3.11.2" + resolved "https://registry.yarnpkg.com/gsap/-/gsap-3.11.2.tgz#e2d6e7b0f2bcdf16a0690ad1ca44d764775b4bec" + integrity sha512-y1NSjM2i2yCjLtoNuoyIhhh9kmYOpFEU9su1EbHuZGN3OWr8M6NIjNHBurSWu/blbHAPQqGm7mUIokSxqTTp2Q== gtoken@^5.0.4: version "5.3.2" @@ -16525,9 +16527,9 @@ keccak@^3.0.0, keccak@^3.0.1: readable-stream "^3.6.0" keen-slider@^6.8.0: - version "6.8.1" - resolved "https://registry.yarnpkg.com/keen-slider/-/keen-slider-6.8.1.tgz#14d03e9216f98c65293cd7a95040c300c3e85e76" - integrity sha512-viUGYjhCgRMZOOiTUcOneY9Jm8c7E1NgoQF337N7fEXLqE96dLomKBfRB3sHGpJ9OZuHFoI+KNF0S4gSjV/y1g== + version "6.8.2" + resolved "https://registry.yarnpkg.com/keen-slider/-/keen-slider-6.8.2.tgz#be03e2225cde2a829df53e71c15caed66fbbe82a" + integrity sha512-vMVLPVfgTkLTNseKM42hnOJz/k/C4x4atCJqKRmPh2Mb4L/+Pzh4qvq9k6qT7/pKBxnsNxOlcxq80NoZq/N3Iw== keyv@3.0.0: version "3.0.0" @@ -17210,14 +17212,6 @@ match-sorter@^4.2.0: "@babel/runtime" "^7.10.5" remove-accents "0.4.2" -match-sorter@^6.0.2: - version "6.3.1" - resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.1.tgz#98cc37fda756093424ddf3cbc62bfe9c75b92bda" - integrity sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw== - dependencies: - "@babel/runtime" "^7.12.5" - remove-accents "0.4.2" - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -17981,11 +17975,6 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" -microseconds@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39" - integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== - miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -18390,13 +18379,6 @@ nano-json-stream-parser@^0.1.2: resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= -nano-time@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/nano-time/-/nano-time-1.0.0.tgz#b0554f69ad89e22d0907f7a12b0993a5d96137ef" - integrity sha1-sFVPaa2J4i0JB/ehKwmTpdlhN+8= - dependencies: - big-integer "^1.6.16" - nanoclone@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/nanoclone/-/nanoclone-0.2.1.tgz#dd4090f8f1a110d26bb32c49ed2f5b9235209ed4" @@ -19025,11 +19007,6 @@ objectorarray@^1.0.5: resolved "https://registry.yarnpkg.com/objectorarray/-/objectorarray-1.0.5.tgz#2c05248bbefabd8f43ad13b41085951aac5e68a5" integrity sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg== -oblivious-set@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566" - integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw== - oboe@2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" @@ -20814,6 +20791,13 @@ react-fit@^1.4.0: prop-types "^15.6.0" tiny-warning "^1.0.0" +react-github-btn@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/react-github-btn/-/react-github-btn-1.4.0.tgz#92654107e92658e60dd977c7a92b212f806da78d" + integrity sha512-lV4FYClAfjWnBfv0iNlJUGhamDgIq6TayD0kPZED6VzHWdpcHmPfsYOZ/CFwLfPv4Zp+F4m8QKTj0oy2HjiGXg== + dependencies: + github-buttons "^2.22.0" + react-gtm-module@^2.0.11: version "2.0.11" resolved "https://registry.yarnpkg.com/react-gtm-module/-/react-gtm-module-2.0.11.tgz#14484dac8257acd93614e347c32da9c5ac524206" @@ -20939,15 +20923,6 @@ react-phone-number-input@^3.2.7: libphonenumber-js "^1.10.12" prop-types "^15.8.1" -react-query@^3.39.2: - version "3.39.2" - resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.39.2.tgz#9224140f0296f01e9664b78ed6e4f69a0cc9216f" - integrity sha512-F6hYDKyNgDQfQOuR1Rsp3VRzJnWHx6aRnnIZHMNGGgbL3SBgpZTDg8MQwmxOgpCAoqZJA+JSNCydF1xGJqKOCA== - dependencies: - "@babel/runtime" "^7.5.5" - broadcast-channel "^3.4.1" - match-sorter "^6.0.2" - react-reconciler@^0.26.2: version "0.26.2" resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.26.2.tgz#bbad0e2d1309423f76cf3c3309ac6c96e05e9d91" @@ -21803,13 +21778,6 @@ rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -21817,6 +21785,13 @@ rimraf@^2.5.4, rimraf@^2.6.3: dependencies: glob "^7.1.3" +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + ripemd160@2.0.2, ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -24227,9 +24202,9 @@ typescript@^4.7.4: integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== tzdata@^1.0.30: - version "1.0.32" - resolved "https://registry.yarnpkg.com/tzdata/-/tzdata-1.0.32.tgz#acc34fdd8d773008132d01850c2ef89722736530" - integrity sha512-sZ+Z5mQZz+wtU8Cz9fJhH8DjWkEcAn4UMUa1zzWiEkhUjZ4gNlcL5KgVxDN1sbnx9MFOa4wPSrn4Ax/9zQ3IQw== + version "1.0.33" + resolved "https://registry.yarnpkg.com/tzdata/-/tzdata-1.0.33.tgz#a54f6b57b57fb835ba9bc21bbad8a4cbb6a0316e" + integrity sha512-uTF/a+mn8vYMLboIcySAG1vYaI28LgvRPUlrPtcs2kwNTAG4LLowRWhC5yTbxOhsC6Ie9L36dI9pmGW2I0G3sQ== ua-parser-js@^1.0.2: version "1.0.2" @@ -24529,14 +24504,6 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unload@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/unload/-/unload-2.2.0.tgz#ccc88fdcad345faa06a92039ec0f80b488880ef7" - integrity sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA== - dependencies: - "@babel/runtime" "^7.6.2" - detect-node "^2.0.4" - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"