Skip to content

Commit e901e8d

Browse files
authored
perf: Prevent parse when object is empty, resulting in a truthy value (calcom#22625)
1 parent 0aa595d commit e901e8d

2 files changed

Lines changed: 27 additions & 7 deletions

File tree

packages/lib/getUserAvailability.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -345,8 +345,19 @@ const _getUserAvailability = async function getUsersWorkingHoursLifeTheUniverseA
345345
fallbackSchedule;
346346
const timeZone = schedule?.timeZone || fallbackTimezoneIfScheduleIsMissing;
347347

348-
const bookingLimits = parseBookingLimit(eventType?.bookingLimits);
349-
const durationLimits = parseDurationLimit(eventType?.durationLimits);
348+
const bookingLimits =
349+
eventType?.bookingLimits &&
350+
typeof eventType.bookingLimits === "object" &&
351+
Object.keys(eventType.bookingLimits).length > 0
352+
? parseBookingLimit(eventType.bookingLimits)
353+
: null;
354+
355+
const durationLimits =
356+
eventType?.durationLimits &&
357+
typeof eventType.durationLimits === "object" &&
358+
Object.keys(eventType.durationLimits).length > 0
359+
? parseDurationLimit(eventType.durationLimits)
360+
: null;
350361

351362
let busyTimesFromLimits: EventBusyDetails[] = [];
352363

packages/trpc/server/routers/viewer/slots/util.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -732,8 +732,20 @@ export class AvailableSlotsService {
732732
this.getOOODates(startTimeDate, endTimeDate, allUserIds),
733733
]);
734734

735-
const bookingLimits = parseBookingLimit(eventType?.bookingLimits);
736-
const durationLimits = parseDurationLimit(eventType?.durationLimits);
735+
const bookingLimits =
736+
eventType?.bookingLimits &&
737+
typeof eventType?.bookingLimits === "object" &&
738+
Object.keys(eventType?.bookingLimits).length > 0
739+
? parseBookingLimit(eventType?.bookingLimits)
740+
: null;
741+
742+
const durationLimits =
743+
eventType?.durationLimits &&
744+
typeof eventType?.durationLimits === "object" &&
745+
Object.keys(eventType?.durationLimits).length > 0
746+
? parseDurationLimit(eventType?.durationLimits)
747+
: null;
748+
737749
let busyTimesFromLimitsBookingsAllUsers: Awaited<ReturnType<typeof getBusyTimesForLimitChecks>> = [];
738750

739751
if (eventType && (bookingLimits || durationLimits)) {
@@ -1270,11 +1282,8 @@ export class AvailableSlotsService {
12701282
const mapSlotsToDate = withReporting(_mapSlotsToDate.bind(this), "mapSlotsToDate");
12711283
const slotsMappedToDate = mapSlotsToDate();
12721284

1273-
loggerWithEventDetails.debug({ slotsMappedToDate });
1274-
12751285
const availableDates = Object.keys(slotsMappedToDate);
12761286
const allDatesWithBookabilityStatus = this.getAllDatesWithBookabilityStatus(availableDates);
1277-
loggerWithEventDetails.debug({ availableDates });
12781287

12791288
// timeZone isn't directly set on eventType now(So, it is legacy)
12801289
// 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)

0 commit comments

Comments
 (0)