From e901e8d18922d725b999a0a38af12a87301445e4 Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Fri, 18 Jul 2025 18:32:45 +0100 Subject: [PATCH] perf: Prevent parse when object is empty, resulting in a truthy value (#22625) --- packages/lib/getUserAvailability.ts | 15 +++++++++++++-- .../trpc/server/routers/viewer/slots/util.ts | 19 ++++++++++++++----- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/packages/lib/getUserAvailability.ts b/packages/lib/getUserAvailability.ts index 64258deb5a..620090edd8 100644 --- a/packages/lib/getUserAvailability.ts +++ b/packages/lib/getUserAvailability.ts @@ -345,8 +345,19 @@ const _getUserAvailability = async function getUsersWorkingHoursLifeTheUniverseA fallbackSchedule; const timeZone = schedule?.timeZone || fallbackTimezoneIfScheduleIsMissing; - const bookingLimits = parseBookingLimit(eventType?.bookingLimits); - const durationLimits = parseDurationLimit(eventType?.durationLimits); + const bookingLimits = + eventType?.bookingLimits && + typeof eventType.bookingLimits === "object" && + Object.keys(eventType.bookingLimits).length > 0 + ? parseBookingLimit(eventType.bookingLimits) + : null; + + const durationLimits = + eventType?.durationLimits && + typeof eventType.durationLimits === "object" && + Object.keys(eventType.durationLimits).length > 0 + ? parseDurationLimit(eventType.durationLimits) + : null; let busyTimesFromLimits: EventBusyDetails[] = []; diff --git a/packages/trpc/server/routers/viewer/slots/util.ts b/packages/trpc/server/routers/viewer/slots/util.ts index b5b393827c..c1a1c13a0f 100644 --- a/packages/trpc/server/routers/viewer/slots/util.ts +++ b/packages/trpc/server/routers/viewer/slots/util.ts @@ -732,8 +732,20 @@ export class AvailableSlotsService { this.getOOODates(startTimeDate, endTimeDate, allUserIds), ]); - const bookingLimits = parseBookingLimit(eventType?.bookingLimits); - const durationLimits = parseDurationLimit(eventType?.durationLimits); + const bookingLimits = + eventType?.bookingLimits && + typeof eventType?.bookingLimits === "object" && + Object.keys(eventType?.bookingLimits).length > 0 + ? parseBookingLimit(eventType?.bookingLimits) + : null; + + const durationLimits = + eventType?.durationLimits && + typeof eventType?.durationLimits === "object" && + Object.keys(eventType?.durationLimits).length > 0 + ? parseDurationLimit(eventType?.durationLimits) + : null; + let busyTimesFromLimitsBookingsAllUsers: Awaited> = []; if (eventType && (bookingLimits || durationLimits)) { @@ -1270,11 +1282,8 @@ export class AvailableSlotsService { const mapSlotsToDate = withReporting(_mapSlotsToDate.bind(this), "mapSlotsToDate"); const slotsMappedToDate = mapSlotsToDate(); - loggerWithEventDetails.debug({ slotsMappedToDate }); - const availableDates = Object.keys(slotsMappedToDate); const allDatesWithBookabilityStatus = this.getAllDatesWithBookabilityStatus(availableDates); - loggerWithEventDetails.debug({ availableDates }); // timeZone isn't directly set on eventType now(So, it is legacy) // schedule is always expected to be set for an eventType now so it must never fallback to allUsersAvailability[0].timeZone(fallback is again legacy behavior)