Compare commits

...
Author SHA1 Message Date
github-actions[bot]andLauris Skraucis 18059e50fa chore: version packages (#22813)
* chore: version packages

* Update CHANGELOG.md

* Update package.json

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Lauris Skraucis <lauris.skraucis@gmail.com>
2025-08-04 10:41:55 +02:00
Carina WollendorferandCarinaWolli 852eb346ed fix: minor UI improvements for end of month design (#22837)
* minor UI improvements

* revert classname changes

* remove not needed code

---------

Co-authored-by: CarinaWolli <wollencarina@gmail.com>
2025-08-04 03:02:42 +00:00
b7e11dc112 chore: Add logging to handleNewBooking (#22868)
* Add logging

* Apply suggestion from @coderabbitai[bot]

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update logger config, fix Create booking log

* Added oooExcludedDateRanges + type error fix

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
2025-08-02 17:15:30 +01:00
Syed Ali Shahbaz 35a373e70a docs: Create add-new-booking-charts.mdx (#22865)
* Create add-charts.mdx

* Update mint.json

* Rename add-charts.mdx to add-new-booking-charts.mdx

* Update mint.json
2025-08-01 17:20:27 +00:00
Alex van Andel 02c0b721b9 Revert "fix: refactor i18n loadTranslations and set timeout to 3s (#22633)"
This reverts commit 6ff20b98f4.
2025-08-01 16:42:31 +01:00
Ashish manhas 29349845f8 fix:safe HTML rendering for radio label (#22645) 2025-08-01 15:56:05 +01:00
Eunjae Lee 28cb2cff64 chore: upgrade TypeScript to v5.9 (#22861) 2025-08-01 15:16:11 +01:00
Anik Dhabal Babu 9cb2eb3b8c fix: store attendee phone number on instant booking (#22823)
* fix: flaky e2e

* fix: not storing attendee phone number
2025-08-01 13:34:57 +00:00
Benny Joo 6ff20b98f4 fix: refactor i18n loadTranslations and set timeout to 3s (#22633)
* refactor

* use abort controller

* address comment

* fix tests

* fix time

* fix tests
2025-08-01 22:30:28 +09:00
Hariom Balhara aa618dbaa2 fix: Missing bookingId in BOOKING_CANCELLED webhook payload (#22713)
* send bookingId in BOOKING_CANCELLED through requestReschedule

* fix: make customInputs nullable in BookingWebhookFactory

* fix: make customInputs nullable in BookingWebhookFactory
2025-08-01 06:04:53 +00:00
37 changed files with 852 additions and 496 deletions
-5
View File
@@ -1,5 +0,0 @@
---
"@calcom/atoms": patch
---
Added new startTime prop to the Booker component that allows users to decide the first available date when the booker loads
-6
View File
@@ -1,6 +0,0 @@
---
"@calcom/atoms": patch
---
This change fixes an issue in the CalendarSettings atom where the redirect urls were getting only one search param
-5
View File
@@ -1,5 +0,0 @@
---
"@calcom/atoms": patch
---
This change fixes date overrides breaking for availability settings atom
+1 -1
View File
@@ -38,7 +38,7 @@
"next-axiom": "^0.17.0",
"next-swagger-doc": "^0.3.6",
"next-validations": "^0.2.0",
"typescript": "^5.7.2",
"typescript": "^5.9.0-beta",
"tzdata": "^1.0.30",
"uuid": "^8.3.2",
"zod": "^3.22.4"
+1 -1
View File
@@ -108,7 +108,7 @@
"ts-loader": "^9.4.3",
"ts-node": "^10.9.1",
"tsconfig-paths": "^4.1.0",
"typescript": "^5.7.2"
"typescript": "^5.9.0-beta"
},
"prisma": {
"schema": "../../../packages/prisma/schema.prisma"
+1 -1
View File
@@ -34,6 +34,6 @@
"eslint-config-next": "15.1.6",
"postcss": "^8",
"tailwindcss": "^3.4.1",
"typescript": "^5"
"typescript": "^5.9.0-beta"
}
}
+1 -1
View File
@@ -208,7 +208,7 @@ async function getHandler(request: NextRequest) {
}
// Create a new response with the image buffer
const imageResponse = new NextResponse(buffer);
const imageResponse = new NextResponse(buffer as BodyInit);
// Set the appropriate headers
imageResponse.headers.set("Content-Type", response.headers.get("content-type") || "image/png");
+1 -1
View File
@@ -195,7 +195,7 @@
"tailwindcss": "^3.3.3",
"tailwindcss-animate": "^1.0.6",
"ts-node": "^10.9.1",
"typescript": "^5.7.2"
"typescript": "^5.9.0-beta"
},
"nextBundleAnalysis": {
"budget": 358400,
@@ -0,0 +1,180 @@
---
title: "How to Add a New Booking Chart to Cal.com Insights Page"
---
This guide walks you through creating a new booking chart component for the insights page, covering the entire stack from UI component to backend service.
## Overview
The insights booking system follows this architecture:
```
UI Component → tRPC Handler → Insights Service → Database Query → Response
```
<Steps>
<Step title="Create the UI Component">
Create your chart component in `packages/features/insights/components/booking/`:
```typescript
// packages/features/insights/components/booking/MyNewChart.tsx
import { LineChart, XAxis, YAxis, CartesianGrid, Tooltip, Line, ResponsiveContainer } from "recharts";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc";
import { useInsightsBookingParameters } from "../../hooks/useInsightsBookingParameters";
import { ChartCard } from "../ChartCard";
import { LoadingInsight } from "../LoadingInsights";
export const MyNewChart = () => {
const { t } = useLocale();
const insightsBookingParams = useInsightsBookingParameters();
const { data, isSuccess, isPending } = trpc.viewer.insights.myNewChartData.useQuery(insightsBookingParams, {
staleTime: 180000, // 3 minutes
refetchOnWindowFocus: false,
trpc: { context: { skipBatch: true } },
});
if (isPending) return <LoadingInsight />;
return (
<ChartCard title={t("my_new_chart_title")}>
{isSuccess && data?.length > 0 ? (
<ResponsiveContainer width="100%" height={300}>
<LineChart data={data}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="date" />
<YAxis />
<Tooltip />
<Line type="monotone" dataKey="value" stroke="#8884d8" strokeWidth={2} />
</LineChart>
</ResponsiveContainer>
) : (
<div className="flex h-64 items-center justify-center">
<p className="text-gray-500">{t("no_data_yet")}</p>
</div>
)}
</ChartCard>
);
};
```
</Step>
<Step title="Add Component to Barrel Export">
Update the booking components index file:
```typescript
// packages/features/insights/components/booking/index.ts
export { AverageEventDurationChart } from "./AverageEventDurationChart";
export { BookingKPICards } from "./BookingKPICards";
// ... existing exports
export { MyNewChart } from "./MyNewChart"; // Add this line
```
</Step>
<Step title="Add Component to Insights View">
Add your component to the main insights page:
```typescript
// apps/web/modules/insights/insights-view.tsx
import {
AverageEventDurationChart,
BookingKPICards, // ... existing imports
MyNewChart, // Add this import
} from "@calcom/features/insights/components/booking";
export default function InsightsPage() {
// ... existing code
return (
<div className="space-y-6">
{/* Existing components */}
<BookingKPICards />
<EventTrendsChart />
{/* Add your new chart */}
<MyNewChart />
{/* Other existing components */}
</div>
);
}
```
</Step>
<Step title="Create tRPC Handler">
Add the tRPC endpoint in the insights router using the `getInsightsBookingService()` DI container function:
```typescript
// packages/features/insights/server/trpc-router.ts
import { bookingRepositoryBaseInputSchema } from "@calcom/features/insights/server/raw-data.schema";
import { userBelongsToTeamProcedure } from "@calcom/trpc/server/procedures/authedProcedure";
import { TRPCError } from "@trpc/server";
export const insightsRouter = router({
// ... existing procedures
myNewChartData: userBelongsToTeamProcedure
.input(bookingRepositoryBaseInputSchema)
.query(async ({ ctx, input }) => {
// `createInsightsBookingService` is defined at the root level in this file
const insightsBookingService = createInsightsBookingService(ctx, input);
try {
return await insightsBookingService.getMyNewChartData();
} catch (e) {
throw new TRPCError({ code: "INTERNAL_SERVER_ERROR" });
}
}),
});
```
</Step>
<Step title="Add Service Method to InsightsBookingBaseService">
Add your new method to the `InsightsBookingBaseService` class:
```typescript
// packages/lib/server/service/InsightsBookingBaseService.ts
export class InsightsBookingBaseService {
// ... existing methods
async getMyNewChartData() {
const baseConditions = await this.getBaseConditions();
// Example: Get booking counts by day using raw SQL for performance
const data = await this.prisma.$queryRaw<
Array<{
date: Date;
bookingsCount: number;
}>
>`
SELECT
DATE("createdAt") as date,
COUNT(*)::int as "bookingsCount"
FROM "BookingTimeStatusDenormalized"
WHERE ${baseConditions}
GROUP BY DATE("createdAt")
ORDER BY date ASC
`;
// Transform the data for the chart
return data.map((item) => ({
date: item.date.toISOString().split("T")[0], // Format as YYYY-MM-DD
value: item.bookingsCount,
}));
}
}
```
</Step>
## Best Practices
1. **Use `getInsightsBookingService()`**: Always use the DI container function for consistent service creation
2. **Raw SQL for Performance**: Use `$queryRaw` for complex aggregations and better performance
3. **Base Conditions**: Always use `await this.getBaseConditions()` for proper filtering and permissions
4. **Error Handling**: Wrap service calls in try-catch blocks with `TRPCError`
5. **Loading States**: Always show loading indicators with `LoadingInsight`
6. **Consistent Styling**: Use `recharts` for new charts.
7. **Date Handling**: Use `getDateRanges()` and `getTimeView()` for time-based charts
+5
View File
@@ -110,6 +110,11 @@
"icon": "code-simple",
"pages": ["developing/guides/embeds/embed-events"]
}
{
"group": "Insights",
"icon": "chart-bar",
"pages": ["developing/guides/insights/add-new-booking-charts"]
}
]
},
{
+1 -1
View File
@@ -109,7 +109,7 @@
"prismock": "^1.33.4",
"resize-observer-polyfill": "^1.5.1",
"tsc-absolute": "^1.0.0",
"typescript": "^5.7.2",
"typescript": "5.9.0-beta",
"vitest": "^2.1.1",
"vitest-fetch-mock": "^0.3.0",
"vitest-mock-extended": "^2.0.2"
+1 -1
View File
@@ -31,6 +31,6 @@
"eslint-plugin-react": "^7.30.1",
"eslint-plugin-react-hooks": "^4.6.0",
"ts-node": "^10.9.1",
"typescript": "^5.7.2"
"typescript": "^5.9.0-beta"
}
}
+2 -2
View File
@@ -12,7 +12,7 @@
"dependencies": {
"@calcom/eslint-plugin-eslint": "*",
"@todesktop/tailwind-variants": "^1.0.0",
"eslint-config-next": "^13.2.1",
"eslint-config-next": "^15.4.5",
"eslint-config-prettier": "^8.6.0",
"eslint-config-turbo": "^0.0.7",
"eslint-plugin-playwright": "^0.12.0",
@@ -33,6 +33,6 @@
"prettier-plugin-tailwindcss": "^0.2.5",
"tailwind-scrollbar": "^2.0.1",
"tailwindcss": "^3.3.3",
"typescript": "^5.7.2"
"typescript": "^5.9.0-beta"
}
}
+1 -1
View File
@@ -54,7 +54,7 @@
"npm-run-all": "^4.1.5",
"postcss": "^8.4.18",
"tailwindcss": "^3.3.3",
"typescript": "^5.7.2",
"typescript": "^5.9.0-beta",
"vite": "^4.1.2",
"vite-plugin-environment": "^1.1.3"
}
+1 -1
View File
@@ -50,7 +50,7 @@
"@vitejs/plugin-react": "^2.2.0",
"eslint": "^8.34.0",
"npm-run-all": "^4.1.5",
"typescript": "^5.7.2",
"typescript": "^5.9.0-beta",
"vite": "^4.5.2"
},
"dependencies": {
+1 -1
View File
@@ -25,7 +25,7 @@
],
"types": "./dist/index.d.ts",
"devDependencies": {
"typescript": "^5.7.2",
"typescript": "^5.9.0-beta",
"vite": "^4.1.2"
},
"dependencies": {
+1 -1
View File
@@ -8,7 +8,7 @@
"@typescript-eslint/parser": "^5.52.0",
"@typescript-eslint/utils": "^5.52.0",
"ts-node-maintained": "^10.9.5",
"typescript": "^5.7.2"
"typescript": "^5.9.0-beta"
},
"devDependencies": {
"@types/eslint": "^8.4.5"
@@ -387,6 +387,23 @@ export type BookingHandlerInput = {
forcedSlug?: string;
} & PlatformParams;
function formatAvailabilitySnapshot(data: {
dateRanges: { start: dayjs.Dayjs; end: dayjs.Dayjs }[];
oooExcludedDateRanges: { start: dayjs.Dayjs; end: dayjs.Dayjs }[];
}) {
return {
...data,
dateRanges: data.dateRanges.map(({ start, end }) => ({
start: start.toISOString(),
end: end.toISOString(),
})),
oooExcludedDateRanges: data.oooExcludedDateRanges.map(({ start, end }) => ({
start: start.toISOString(),
end: end.toISOString(),
})),
};
}
async function handler(
input: BookingHandlerInput,
bookingDataSchemaGetter: BookingDataSchemaGetter = getBookingDataSchema
@@ -1397,7 +1414,10 @@ async function handler(
logger.info(`Booking created`, {
bookingUid: booking.uid,
availabilitySnapshot: organizerUserAvailability?.availabilityData,
selectedCalendarIds: organizerUser.allSelectedCalendars?.map((c) => c.id) ?? [],
availabilitySnapshot: organizerUserAvailability?.availabilityData
? formatAvailabilitySnapshot(organizerUserAvailability.availabilityData)
: null,
});
}
+4 -2
View File
@@ -194,8 +194,10 @@ const Days = ({
const getPadding = (day: number) => (browsingDate.set("date", day).day() - weekStart + 7) % 7;
const totalDays = daysInMonth(browsingDate);
const showNextMonthDays = isSecondWeekOver && !isCompact;
// Only apply end-of-month logic for main monthly view (not compact sidebar)
if (isSecondWeekOver && !isCompact) {
if (showNextMonthDays) {
const startDay = 8;
const pad = getPadding(startDay);
days = Array(pad).fill(null);
@@ -337,7 +339,7 @@ const Days = ({
active={isActive(day)}
away={away}
emoji={emoji}
showMonthTooltip={isSecondWeekOver && !isCompact}
showMonthTooltip={showNextMonthDays && !disabled && day.month() !== browsingDate.month()}
isFirstDayOfNextMonth={isFirstDayOfNextMonth}
/>
)}
@@ -4,6 +4,7 @@ import { Controller, useFormContext } from "react-hook-form";
import type { z } from "zod";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { markdownToSafeHTML } from "@calcom/lib/markdownToSafeHTML";
import classNames from "@calcom/ui/classNames";
import { InfoBadge } from "@calcom/ui/components/badge";
import { Label } from "@calcom/ui/components/form";
@@ -19,6 +20,19 @@ import {
} from "./useShouldBeDisabledDueToPrefill";
import { getTranslatedConfig as getTranslatedVariantsConfig } from "./utils/variantsConfig";
// helper to render markdown label safely
const renderLabel = (field: Partial<RhfFormField>) => {
if (field.labelAsSafeHtml) {
return (
<span
// eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML={{ __html: markdownToSafeHTML(field.labelAsSafeHtml) }}
/>
);
}
return <span>{field.label}</span>;
};
type RhfForm = {
fields: z.infer<typeof fieldsSchema>;
};
@@ -155,7 +169,7 @@ const WithLabel = ({
field.label && (
<div className="mb-2 flex items-center">
<Label className="!mb-0 flex items-center" htmlFor={htmlFor}>
<span>{field.label}</span>
{renderLabel(field)}
<span className="text-emphasis -mb-1 ml-1 text-sm font-medium leading-none">
{!readOnly && field.required ? "*" : ""}
</span>
@@ -4,4 +4,4 @@ import type { FieldType } from "./schema";
* Once a component supports `labelAsSafeHtml`, add it's field's type here
* A whitelist is needed because unless we explicitly use dangerouslySetInnerHTML, React will escape the HTML
*/
export const fieldsThatSupportLabelAsSafeHtml: FieldType[] = ["boolean"];
export const fieldsThatSupportLabelAsSafeHtml: FieldType[] = ["boolean", "radio"];
@@ -95,6 +95,7 @@ describe("handleInstantMeeting", () => {
responses: {
name: "Test User",
email: "test@example.com",
attendeePhoneNumber: "+918888888888",
},
metadata: {},
};
@@ -118,13 +119,14 @@ describe("handleInstantMeeting", () => {
const booking = await prismock.booking.findUnique({
where: { id: result.bookingId },
include: { attendees: true, references: true },
select: { status: true, attendees: true, references: true },
});
expect(booking).toBeDefined();
expect(booking?.status).toBe(BookingStatus.AWAITING_HOST);
expect(booking?.attendees).toHaveLength(1);
expect(booking?.attendees[0].email).toBe("test@example.com");
expect(booking?.attendees[0].phoneNumber).toBe("+918888888888");
expect(booking?.references).toHaveLength(1);
expect(booking?.references[0].type).toBe("daily_video");
});
@@ -172,6 +174,7 @@ describe("handleInstantMeeting", () => {
responses: {
name: "Test User",
email: "test@example.com",
attendeePhoneNumber: "+918888888888",
},
metadata: {},
};
@@ -200,6 +200,7 @@ async function handler(req: NextApiRequest) {
name: fullName,
timeZone: attendeeTimezone,
locale: attendeeLanguage ?? "en",
phoneNumber: reqBody.attendeePhoneNumber ?? null,
},
];
@@ -209,6 +210,7 @@ async function handler(req: NextApiRequest) {
name: "",
timeZone: attendeeTimezone,
locale: "en",
phoneNumber: null,
});
return guestArray;
}, [] as typeof invitee);
+4
View File
@@ -252,6 +252,10 @@ const _getBusyTimes = async (params: {
console.log("videoBusyTimes", videoBusyTimes);
busyTimes.push(...videoBusyTimes);
*/
} else {
logger.warn(`No credentials found for user ${userId}`, {
selectedCalendarIds: selectedCalendars.map((calendar) => calendar.id),
});
}
logger.debug(
"getBusyTimes:",
+2 -1
View File
@@ -9,11 +9,12 @@ const logger = new Logger({
prettyErrorStackTemplate: " • {{fileName}}\t{{method}}\n\t{{filePathWithLine}}", // default
prettyErrorTemplate: "\n{{errorName}} {{errorMessage}}\nerror stack:\n{{errorStack}}", // default
prettyLogTemplate: "{{hh}}:{{MM}}:{{ss}}:{{ms}} [{{logLevelName}}] ", // default with exclusion of `{{filePathWithLine}}`
stylePrettyLogs: true,
stylePrettyLogs: !IS_PRODUCTION,
prettyLogStyles: {
name: "yellow",
dateIsoStr: "blue",
},
type: IS_PRODUCTION ? "json" : "pretty",
});
export default logger;
+1 -1
View File
@@ -34,6 +34,6 @@
"@calcom/tsconfig": "*",
"@calcom/types": "*",
"@faker-js/faker": "^7.3.0",
"typescript": "^5.7.2"
"typescript": "^5.9.0-beta"
}
}
@@ -0,0 +1,127 @@
import type { Person } from "@calcom/types/Calendar";
import type { JsonValue } from "@calcom/types/JsonObject";
function isObjectButNotArray(obj: unknown): obj is Record<string, unknown> {
return typeof obj === "object" && !Array.isArray(obj);
}
type DestinationCalendar = {
id: number;
integration: string;
externalId: string;
primaryEmail: string | null;
userId: number | null;
eventTypeId: number | null;
credentialId: number | null;
createdAt: Date | null;
updatedAt: Date | null;
delegationCredentialId: string | null;
domainWideDelegationCredentialId: string | null;
};
type Response = {
label: string;
value: string | boolean | string[] | { value: string; optionValue: string } | Record<string, string>;
isHidden?: boolean | undefined;
};
interface BaseWebhookPayload {
bookingId: number;
title: string;
eventSlug: string | null;
description: string | null;
customInputs: JsonValue | null;
responses: Record<string, Response>;
userFieldsResponses: Record<string, Response>;
startTime: string;
endTime: string;
organizer: Person;
attendees: Person[];
uid: string;
location: string | null;
destinationCalendar: DestinationCalendar | null;
cancellationReason: string | null;
iCalUID: string | null;
smsReminderNumber?: string;
cancelledBy: string | null;
}
interface CancelledEventPayload extends BaseWebhookPayload {
cancelledBy: string;
cancellationReason: string;
}
export class BookingWebhookFactory {
private getType(params: BaseWebhookPayload) {
return params.eventSlug || params.title || "";
}
private getTitle(params: BaseWebhookPayload) {
return params.title || "";
}
private getDestinationCalendar(params: BaseWebhookPayload) {
return params.destinationCalendar ? [params.destinationCalendar] : [];
}
private getCustomInputs(params: BaseWebhookPayload) {
return isObjectButNotArray(params.customInputs) ? params.customInputs : undefined;
}
/**
* Creates base webhook payload with common fields
*/
private createBasePayload(params: BaseWebhookPayload) {
const {
bookingId,
title,
eventSlug,
description,
customInputs,
startTime,
endTime,
uid,
location,
organizer,
attendees,
responses,
userFieldsResponses,
destinationCalendar,
smsReminderNumber,
iCalUID,
} = params;
const basePayload = {
bookingId,
type: this.getType(params),
title: this.getTitle(params),
description,
customInputs: this.getCustomInputs(params),
responses,
userFieldsResponses,
startTime,
endTime,
organizer,
attendees,
uid,
location,
destinationCalendar: this.getDestinationCalendar(params),
iCalUID,
smsReminderNumber,
};
return basePayload;
}
public createCancelledEventPayload(params: CancelledEventPayload) {
const basePayload = this.createBasePayload({
...params,
});
return {
...basePayload,
cancelledBy: params.cancelledBy,
cancellationReason: params.cancellationReason,
};
}
}
@@ -0,0 +1,318 @@
import { describe, it, expect } from "vitest";
import type { Person } from "@calcom/types/Calendar";
import { BookingWebhookFactory } from "../BookingWebhookFactory";
const createTestOrganizer = (overrides?: Partial<Person>): Person => ({
email: "organizer@example.com",
name: "Test Organizer",
timeZone: "UTC",
language: { locale: "en", translate: (() => "") as any },
...overrides,
});
const createTestAttendee = (overrides?: Partial<Person>): Person => ({
email: "attendee@example.com",
name: "Test Attendee",
timeZone: "UTC",
language: { locale: "en", translate: (() => "") as any },
...overrides,
});
const createTestBooking = (overrides?: Record<string, any>) => ({
id: 12345,
uid: "test-uid-123",
title: "Test Event",
description: "Test Description",
startTime: new Date("2025-01-24T10:00:00Z"),
endTime: new Date("2025-01-24T11:00:00Z"),
location: "https://meet.example.com",
customInputs: { field1: "value1" },
responses: { name: { value: "Test User" } },
userFieldsResponses: { company: { value: "Test Corp" } },
smsReminderNumber: "+1234567890",
iCalUID: "ical-uid-123",
...overrides,
});
describe("BookingWebhookFactory", () => {
describe("createCancelledEventPayload", () => {
it("should create a basic cancelled event payload with required fields", () => {
const factory = new BookingWebhookFactory();
const booking = createTestBooking();
const organizer = createTestOrganizer();
const attendees = [createTestAttendee()];
const payload = factory.createCancelledEventPayload({
bookingId: booking.id,
uid: booking.uid,
title: booking.title,
eventSlug: "test-event",
description: booking.description,
startTime: booking.startTime.toISOString(),
endTime: booking.endTime.toISOString(),
location: booking.location,
customInputs: booking.customInputs,
responses: booking.responses,
userFieldsResponses: booking.userFieldsResponses,
smsReminderNumber: booking.smsReminderNumber,
iCalUID: booking.iCalUID,
organizer,
attendees,
destinationCalendar: null,
cancelledBy: "test@example.com",
cancellationReason: "User requested",
});
expect(payload.bookingId).toBe(12345);
expect(payload.uid).toBe("test-uid-123");
expect(payload.title).toBe("Test Event");
expect(payload.description).toBe("Test Description");
expect(payload.organizer).toEqual(organizer);
expect(payload.attendees).toEqual(attendees);
expect(payload.type).toBe("test-event");
expect(payload.startTime).toBe(booking.startTime.toISOString());
expect(payload.endTime).toBe(booking.endTime.toISOString());
expect(payload.location).toBe("https://meet.example.com");
expect(payload.customInputs).toEqual({ field1: "value1" });
expect(payload.responses).toEqual({ name: { value: "Test User" } });
expect(payload.userFieldsResponses).toEqual({ company: { value: "Test Corp" } });
expect(payload.smsReminderNumber).toBe("+1234567890");
expect(payload.iCalUID).toBe("ical-uid-123");
expect(payload.destinationCalendar).toEqual([]);
expect(payload.cancellationReason).toBe("User requested");
expect(payload.cancelledBy).toBe("test@example.com");
// Verify no extra properties exist
const expectedKeys = [
"bookingId",
"type",
"title",
"description",
"customInputs",
"responses",
"userFieldsResponses",
"startTime",
"endTime",
"organizer",
"attendees",
"uid",
"location",
"destinationCalendar",
"iCalUID",
"smsReminderNumber",
"cancellationReason",
"cancelledBy",
];
const actualKeys = Object.keys(payload).sort();
expect(actualKeys).toEqual(expectedKeys.sort());
});
it("should handle responses and userFieldsResponses", () => {
const factory = new BookingWebhookFactory();
const booking = createTestBooking();
const responses = { field1: "response1", field2: "response2" };
const userFieldsResponses = { company: "Test Corp", department: "Engineering" };
const payload = factory.createCancelledEventPayload({
bookingId: booking.id,
uid: booking.uid,
title: booking.title,
eventSlug: null,
description: null,
startTime: booking.startTime.toISOString(),
endTime: booking.endTime.toISOString(),
location: null,
customInputs: null,
responses,
userFieldsResponses,
smsReminderNumber: null,
iCalUID: null,
organizer: createTestOrganizer(),
attendees: [createTestAttendee()],
destinationCalendar: null,
cancelledBy: "user@example.com",
cancellationReason: "Test",
});
expect(payload.responses).toEqual(responses);
expect(payload.userFieldsResponses).toEqual(userFieldsResponses);
});
it("should handle destination calendar as single object", () => {
const factory = new BookingWebhookFactory();
const booking = createTestBooking();
const destinationCalendar = {
id: 1,
integration: "google",
externalId: "cal123",
primaryEmail: null,
userId: null,
eventTypeId: null,
credentialId: null,
createdAt: null,
updatedAt: null,
delegationCredentialId: null,
domainWideDelegationCredentialId: null,
};
const payload = factory.createCancelledEventPayload({
bookingId: booking.id,
uid: booking.uid,
title: booking.title,
eventSlug: null,
description: null,
startTime: booking.startTime.toISOString(),
endTime: booking.endTime.toISOString(),
location: null,
customInputs: null,
responses: {},
userFieldsResponses: {},
smsReminderNumber: null,
iCalUID: null,
organizer: createTestOrganizer(),
attendees: [],
destinationCalendar,
cancelledBy: "user@example.com",
cancellationReason: "Test",
});
expect(payload.destinationCalendar).toEqual([destinationCalendar]);
});
it("should handle null destination calendar", () => {
const factory = new BookingWebhookFactory();
const booking = createTestBooking();
const payload = factory.createCancelledEventPayload({
bookingId: booking.id,
uid: booking.uid,
title: booking.title,
eventSlug: null,
description: null,
startTime: booking.startTime.toISOString(),
endTime: booking.endTime.toISOString(),
location: null,
customInputs: null,
responses: {},
userFieldsResponses: {},
smsReminderNumber: null,
iCalUID: null,
organizer: createTestOrganizer(),
attendees: [],
destinationCalendar: null,
cancelledBy: "user@example.com",
cancellationReason: "Test",
});
expect(payload.destinationCalendar).toEqual([]);
});
it("should handle sms reminder number and iCal UID", () => {
const factory = new BookingWebhookFactory();
const booking = createTestBooking();
const payload = factory.createCancelledEventPayload({
bookingId: booking.id,
uid: booking.uid,
title: booking.title,
eventSlug: null,
description: null,
startTime: booking.startTime.toISOString(),
endTime: booking.endTime.toISOString(),
location: null,
customInputs: null,
responses: {},
userFieldsResponses: {},
smsReminderNumber: "+1234567890",
iCalUID: "ical-uid-123",
organizer: createTestOrganizer(),
attendees: [],
destinationCalendar: null,
cancelledBy: "user@example.com",
cancellationReason: "Test",
});
expect(payload.smsReminderNumber).toBe("+1234567890");
expect(payload.iCalUID).toBe("ical-uid-123");
});
it("should derive type from eventSlug when available, otherwise from title", () => {
const factory = new BookingWebhookFactory();
const booking = createTestBooking();
// Test with eventSlug provided
const payloadWithSlug = factory.createCancelledEventPayload({
bookingId: booking.id,
uid: booking.uid,
title: "Meeting Title",
eventSlug: "team-standup",
description: null,
startTime: booking.startTime.toISOString(),
endTime: booking.endTime.toISOString(),
location: null,
customInputs: null,
responses: {},
userFieldsResponses: {},
smsReminderNumber: null,
iCalUID: null,
organizer: createTestOrganizer(),
attendees: [],
destinationCalendar: null,
cancelledBy: "user@example.com",
cancellationReason: "Test",
});
expect(payloadWithSlug.type).toBe("team-standup");
// Test with eventSlug null, should use title
const payloadWithoutSlug = factory.createCancelledEventPayload({
bookingId: booking.id,
uid: booking.uid,
title: "Meeting Title",
eventSlug: null,
description: null,
startTime: booking.startTime.toISOString(),
endTime: booking.endTime.toISOString(),
location: null,
customInputs: null,
responses: {},
userFieldsResponses: {},
smsReminderNumber: null,
iCalUID: null,
organizer: createTestOrganizer(),
attendees: [],
destinationCalendar: null,
cancelledBy: "user@example.com",
cancellationReason: "Test",
});
expect(payloadWithoutSlug.type).toBe("Meeting Title");
// Test with both eventSlug and title empty
const payloadEmpty = factory.createCancelledEventPayload({
bookingId: booking.id,
uid: booking.uid,
title: "",
eventSlug: "",
description: null,
startTime: booking.startTime.toISOString(),
endTime: booking.endTime.toISOString(),
location: null,
customInputs: null,
responses: {},
userFieldsResponses: {},
smsReminderNumber: null,
iCalUID: null,
organizer: createTestOrganizer(),
attendees: [],
destinationCalendar: null,
cancelledBy: "user@example.com",
cancellationReason: "Test",
});
expect(payloadEmpty.type).toBe("");
});
});
});
+9 -1
View File
@@ -1,4 +1,12 @@
## 1.0.114
## 1.1.2
### Patch Changes
- [#22731](https://github.com/calcom/cal.com/pull/22731) [`ef66187`](https://github.com/calcom/cal.com/commit/ef6618743d5c1367fadf7b98cf15f7ba829535e3) Thanks [@devin-ai-integration](https://github.com/apps/devin-ai-integration)! - Added new startTime prop to the Booker component that allows users to decide the first available date when the booker loads
- [#22815](https://github.com/calcom/cal.com/pull/22815) [`dc967cf`](https://github.com/calcom/cal.com/commit/dc967cffbecdf573aa48777ca7a245a6e633356c) Thanks [@Ryukemeister](https://github.com/Ryukemeister)! - This change fixes an issue in the CalendarSettings atom where the redirect urls were getting only one search param
- [#22701](https://github.com/calcom/cal.com/pull/22701) [`babd514`](https://github.com/calcom/cal.com/commit/babd514c64d0a4b8e05a46619808f201d3e8b0a5) Thanks [@Ryukemeister](https://github.com/Ryukemeister)! - This change fixes date overrides breaking for availability settings atom
## 1.1.0
+2 -2
View File
@@ -4,7 +4,7 @@
"type": "module",
"description": "Customizable UI components to integrate scheduling into your product.",
"authors": "Cal.com, Inc.",
"version": "1.1.0",
"version": "1.1.2",
"scripts": {
"dev": "yarn vite build --watch & npx tailwindcss -i ./globals.css -o ./globals.min.css --postcss --minify --watch",
"build": "NODE_OPTIONS='--max_old_space_size=12288' rm -rf dist && yarn vite build && npx tailwindcss -i ./globals.css -o ./globals.min.css --postcss --minify && mkdir ./dist/packages/prisma-client && cp -rf ../../../node_modules/.prisma/client/*.d.ts ./dist/packages/prisma-client",
@@ -29,7 +29,7 @@
"postcss-prefixwrap": "1.46.0",
"rollup-plugin-node-builtins": "^2.1.2",
"ts-jest": "^29.1.2",
"typescript": "^5.7.2",
"typescript": "^5.9.0-beta",
"vite": "^5.0.10",
"vite-plugin-dts": "^3.7.3",
"vite-plugin-inspect": "^0.8.4",
+1 -1
View File
@@ -26,6 +26,6 @@
"eslint-config-next": "14.0.4",
"postcss": "^8",
"tailwindcss": "^3.3.0",
"typescript": "^5.7.2"
"typescript": "^5.9.0-beta"
}
}
+1 -1
View File
@@ -23,7 +23,7 @@
"devDependencies": {
"@types/node": "^20.3.1",
"@vitejs/plugin-react": "^4.2.1",
"typescript": "^5.7.2",
"typescript": "^5.9.0-beta",
"vite": "^5.0.12",
"vite-plugin-dts": "^3.7.2",
"vite-plugin-environment": "^1.1.3"
+1 -1
View File
@@ -22,6 +22,6 @@
"zod": "^3.22.4"
},
"devDependencies": {
"typescript": "^5.7.2"
"typescript": "^5.9.0-beta"
}
}
@@ -14,18 +14,18 @@ import { getDelegationCredentialOrRegularCredential } from "@calcom/lib/delegati
import { getBookerBaseUrl } from "@calcom/lib/getBookerUrl/server";
import getOrgIdFromMemberOrTeamId from "@calcom/lib/getOrgIdFromMemberOrTeamId";
import { getTeamIdFromEventType } from "@calcom/lib/getTeamIdFromEventType";
import { isPrismaObjOrUndefined } from "@calcom/lib/isPrismaObj";
import logger from "@calcom/lib/logger";
import { safeStringify } from "@calcom/lib/safeStringify";
import { getUsersCredentialsIncludeServiceAccountKey } from "@calcom/lib/server/getUsersCredentials";
import { getTranslation } from "@calcom/lib/server/i18n";
import { WorkflowRepository } from "@calcom/lib/server/repository/workflow";
import { BookingWebhookFactory } from "@calcom/lib/server/service/BookingWebhookFactory";
import { deleteMeeting } from "@calcom/lib/videoClient";
import { prisma } from "@calcom/prisma";
import type { WebhookTriggerEvents } from "@calcom/prisma/enums";
import { BookingStatus } from "@calcom/prisma/enums";
import type { EventTypeMetadata } from "@calcom/prisma/zod-utils";
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
import type { Person } from "@calcom/types/Calendar";
import { TRPCError } from "@trpc/server";
@@ -109,7 +109,7 @@ export const requestRescheduleHandler = async ({ ctx, input }: RequestReschedule
if (bookingBelongsToTeam && bookingToReschedule.eventType?.teamId) {
const userTeamIds = userTeams.teams.map((item) => item.teamId);
if (userTeamIds.indexOf(bookingToReschedule?.eventType?.teamId) === -1) {
if (userTeamIds.indexOf(bookingToReschedule.eventType?.teamId) === -1) {
throw new TRPCError({ code: "FORBIDDEN", message: "User isn't a member on the team" });
}
log.debug(
@@ -182,7 +182,7 @@ export const requestRescheduleHandler = async ({ ctx, input }: RequestReschedule
const [userAsPeopleType] = usersToPeopleType([user], userTranslation);
const organizer = {
...userAsPeopleType,
email: bookingToReschedule?.userPrimaryEmail ?? userAsPeopleType.email,
email: bookingToReschedule.userPrimaryEmail ?? userAsPeopleType.email,
};
const builder = new CalendarEventBuilder();
@@ -276,31 +276,38 @@ export const requestRescheduleHandler = async ({ ctx, input }: RequestReschedule
eventType?.metadata as EventTypeMetadata
);
const evt: CalendarEvent = {
title: bookingToReschedule?.title,
type: event && event.slug ? event.slug : bookingToReschedule.title,
description: bookingToReschedule?.description || "",
customInputs: isPrismaObjOrUndefined(bookingToReschedule.customInputs),
...getCalEventResponses({
booking: bookingToReschedule,
bookingFields: bookingToReschedule.eventType?.bookingFields ?? null,
}),
startTime: bookingToReschedule?.startTime ? dayjs(bookingToReschedule.startTime).format() : "",
endTime: bookingToReschedule?.endTime ? dayjs(bookingToReschedule.endTime).format() : "",
const calEventResponses = getCalEventResponses({
booking: bookingToReschedule,
bookingFields: bookingToReschedule.eventType?.bookingFields ?? null,
});
const webhookFactory = new BookingWebhookFactory();
const payload = webhookFactory.createCancelledEventPayload({
bookingId: bookingToReschedule.id,
title: bookingToReschedule.title,
eventSlug: event.slug ?? null,
description: bookingToReschedule.description,
customInputs: bookingToReschedule.customInputs,
responses: calEventResponses.responses,
userFieldsResponses: calEventResponses.userFieldsResponses,
startTime: bookingToReschedule.startTime ? dayjs(bookingToReschedule.startTime).format() : "",
endTime: bookingToReschedule.endTime ? dayjs(bookingToReschedule.endTime).format() : "",
organizer,
attendees: usersToPeopleType(
// username field doesn't exists on attendee but could be in the future
bookingToReschedule.attendees as unknown as PersonAttendeeCommonFields[],
tAttendees
),
uid: bookingToReschedule?.uid,
location: bookingToReschedule?.location,
destinationCalendar: bookingToReschedule?.destinationCalendar
? [bookingToReschedule?.destinationCalendar]
: [],
uid: bookingToReschedule.uid,
location: bookingToReschedule.location,
destinationCalendar: bookingToReschedule.destinationCalendar,
cancellationReason: `Please reschedule. ${cancellationReason}`, // TODO::Add i18-next for this
iCalUID: bookingToReschedule?.iCalUID,
};
iCalUID: bookingToReschedule.iCalUID,
...(bookingToReschedule.smsReminderNumber && {
smsReminderNumber: bookingToReschedule.smsReminderNumber,
}),
cancelledBy: user.email,
});
// Send webhook
const eventTrigger: WebhookTriggerEvents = "BOOKING_CANCELLED";
@@ -308,7 +315,7 @@ export const requestRescheduleHandler = async ({ ctx, input }: RequestReschedule
const teamId = await getTeamIdFromEventType({
eventType: {
team: { id: bookingToReschedule.eventType?.teamId ?? null },
parentId: bookingToReschedule?.eventType?.parentId ?? null,
parentId: bookingToReschedule.eventType?.parentId ?? null,
},
});
@@ -327,13 +334,9 @@ export const requestRescheduleHandler = async ({ ctx, input }: RequestReschedule
const webhooks = await getWebhooks(subscriberOptions);
const promises = webhooks.map((webhook) =>
sendPayload(webhook.secret, eventTrigger, new Date().toISOString(), webhook, {
...evt,
smsReminderNumber: bookingToReschedule.smsReminderNumber || undefined,
cancelledBy: user.email,
}).catch((e) => {
sendPayload(webhook.secret, eventTrigger, new Date().toISOString(), webhook, payload).catch((e) => {
log.error(
`Error executing webhook for event: ${eventTrigger}, URL: ${webhook.subscriberUrl}, bookingId: ${evt.bookingId}, bookingUid: ${evt.uid}`,
`Error executing webhook for event: ${eventTrigger}, URL: ${webhook.subscriberUrl}, bookingId: ${payload.bookingId}, bookingUid: ${payload.uid}`,
safeStringify(e)
);
})
+6
View File
@@ -0,0 +1,6 @@
/**
* Decouples the types from Prisma
*/
export type JsonValue = string | number | boolean | null | JsonObject | JsonArray;
export type JsonArray = JsonValue[];
export type JsonObject = { [Key in string]?: JsonValue };
+1 -1
View File
@@ -114,6 +114,6 @@
"fs-extra": "^11.2.0",
"lucide-static": "^0.424.0",
"node-html-parser": "^6.1.13",
"typescript": "^5.7.2"
"typescript": "^5.9.0-beta"
}
}
+102 -423
View File
@@ -2078,16 +2078,6 @@ __metadata:
languageName: node
linkType: hard
"@babel/runtime-corejs3@npm:^7.10.2":
version: 7.22.11
resolution: "@babel/runtime-corejs3@npm:7.22.11"
dependencies:
core-js-pure: ^3.30.2
regenerator-runtime: ^0.14.0
checksum: d7649e3dd789fce9f15a80521109e51faeda195ab0b65c330c61c9c0b2a13b11f5611e5d25db5b75df873e2ec06f642b60dc6ace6bacc699b975c4bc9d5cff88
languageName: node
linkType: hard
"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.26.10":
version: 7.27.0
resolution: "@babel/runtime@npm:7.27.0"
@@ -2097,7 +2087,7 @@ __metadata:
languageName: node
linkType: hard
"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.14.8, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2":
"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.14.8, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2":
version: 7.22.11
resolution: "@babel/runtime@npm:7.22.11"
dependencies:
@@ -2583,7 +2573,7 @@ __metadata:
ts-loader: ^9.4.3
ts-node: ^10.9.1
tsconfig-paths: ^4.1.0
typescript: ^5.7.2
typescript: ^5.9.0-beta
uuid: ^8.3.2
winston: ^3.13.0
winston-transport: ^4.7.0
@@ -2613,7 +2603,7 @@ __metadata:
next-swagger-doc: ^0.3.6
next-validations: ^0.2.0
node-mocks-http: ^1.11.0
typescript: ^5.7.2
typescript: ^5.9.0-beta
tzdata: ^1.0.30
uuid: ^8.3.2
zod: ^3.22.4
@@ -2635,7 +2625,7 @@ __metadata:
meow: ^9.0.0
react: ^18.2.0
ts-node: ^10.9.1
typescript: ^5.7.2
typescript: ^5.9.0-beta
bin:
app-store-cli: dist/cli.js
languageName: unknown
@@ -2704,7 +2694,7 @@ __metadata:
tailwindcss: ^3.3.3
tailwindcss-animate: ^1.0.6
ts-jest: ^29.1.2
typescript: ^5.7.2
typescript: ^5.9.0-beta
vite: ^5.0.10
vite-plugin-dts: ^3.7.3
vite-plugin-inspect: ^0.8.4
@@ -2761,7 +2751,7 @@ __metadata:
react-dom: ^18
react-select: ^5.8.0
tailwindcss: ^3.3.0
typescript: ^5.7.2
typescript: ^5.9.0-beta
languageName: unknown
linkType: soft
@@ -2855,7 +2845,7 @@ __metadata:
"@typescript-eslint/eslint-plugin": ^5.52.0
"@typescript-eslint/parser": ^5.52.0
eslint: ^8.34.0
eslint-config-next: ^13.2.1
eslint-config-next: ^15.4.5
eslint-config-prettier: ^8.6.0
eslint-config-turbo: ^0.0.7
eslint-plugin-playwright: ^0.12.0
@@ -2866,7 +2856,7 @@ __metadata:
prettier-plugin-tailwindcss: ^0.2.5
tailwind-scrollbar: ^2.0.1
tailwindcss: ^3.3.3
typescript: ^5.7.2
typescript: ^5.9.0-beta
languageName: unknown
linkType: soft
@@ -3018,7 +3008,7 @@ __metadata:
npm-run-all: ^4.1.5
postcss: ^8.4.18
tailwindcss: ^3.3.3
typescript: ^5.7.2
typescript: ^5.9.0-beta
vite: ^4.1.2
vite-plugin-environment: ^1.1.3
languageName: unknown
@@ -3036,7 +3026,7 @@ __metadata:
"@vitejs/plugin-react": ^2.2.0
eslint: ^8.34.0
npm-run-all: ^4.1.5
typescript: ^5.7.2
typescript: ^5.9.0-beta
vite: ^4.5.2
peerDependencies:
react: ^18.2.0 || ^19.0.0
@@ -3049,7 +3039,7 @@ __metadata:
resolution: "@calcom/embed-snippet@workspace:packages/embeds/embed-snippet"
dependencies:
"@calcom/embed-core": "workspace:*"
typescript: ^5.7.2
typescript: ^5.9.0-beta
vite: ^4.1.2
languageName: unknown
linkType: soft
@@ -3062,7 +3052,7 @@ __metadata:
"@typescript-eslint/parser": ^5.52.0
"@typescript-eslint/utils": ^5.52.0
ts-node-maintained: ^10.9.5
typescript: ^5.7.2
typescript: ^5.9.0-beta
languageName: unknown
linkType: soft
@@ -3399,7 +3389,7 @@ __metadata:
sonner: ^1.7.4
tsdav: 2.0.3
tslog: ^4.9.2
typescript: ^5.7.2
typescript: ^5.9.0-beta
uuid: ^8.3.2
languageName: unknown
linkType: soft
@@ -3593,7 +3583,7 @@ __metadata:
"@calcom/lib": "*"
"@types/node": ^20.3.1
"@vitejs/plugin-react": ^4.2.1
typescript: ^5.7.2
typescript: ^5.9.0-beta
vite: ^5.0.12
vite-plugin-dts: ^3.7.2
vite-plugin-environment: ^1.1.3
@@ -3884,7 +3874,7 @@ __metadata:
react-dom: ^18.0.0
react-hot-toast: ^2.5.2
tailwindcss: ^3.4.1
typescript: ^5
typescript: ^5.9.0-beta
languageName: unknown
linkType: soft
@@ -3898,7 +3888,7 @@ __metadata:
"@trpc/react-query": 11.0.0-next-beta.222
"@trpc/server": 11.0.0-next-beta.222
superjson: 1.9.1
typescript: ^5.7.2
typescript: ^5.9.0-beta
zod: ^3.22.4
languageName: unknown
linkType: soft
@@ -3971,7 +3961,7 @@ __metadata:
react-inlinesvg: ^4.1.3
react-select: ^5.7.0
tailwind-merge: ^1.13.2
typescript: ^5.7.2
typescript: ^5.9.0-beta
uuid: ^11.1.0
languageName: unknown
linkType: soft
@@ -4180,7 +4170,7 @@ __metadata:
tailwindcss-radix: ^2.6.0
ts-node: ^10.9.1
turndown: ^7.1.3
typescript: ^5.7.2
typescript: ^5.9.0-beta
uuid: ^8.3.2
zod: ^3.22.4
languageName: unknown
@@ -8989,15 +8979,6 @@ __metadata:
languageName: node
linkType: hard
"@next/eslint-plugin-next@npm:13.2.1":
version: 13.2.1
resolution: "@next/eslint-plugin-next@npm:13.2.1"
dependencies:
glob: 7.1.7
checksum: e4b49709d987ad5a6a67bdbcf43798e3a1d5d72e0cf503ae2dd8553add79221cb706ba824ab985d4cfccc5a6aafb2fa949f371f9b3a45832bc370a093cc9f096
languageName: node
linkType: hard
"@next/eslint-plugin-next@npm:14.0.4":
version: 14.0.4
resolution: "@next/eslint-plugin-next@npm:14.0.4"
@@ -9016,6 +8997,15 @@ __metadata:
languageName: node
linkType: hard
"@next/eslint-plugin-next@npm:15.4.5":
version: 15.4.5
resolution: "@next/eslint-plugin-next@npm:15.4.5"
dependencies:
fast-glob: 3.3.1
checksum: b377bbff604a3aa0a5c1c480077cc2430186abe18f9d0de3b192dca44106f06407509a2c8744f49788a09222f950c4cf67fd08beaad011af5053f410692616c3
languageName: node
linkType: hard
"@next/swc-darwin-arm64@npm:13.5.7":
version: 13.5.7
resolution: "@next/swc-darwin-arm64@npm:13.5.7"
@@ -14677,13 +14667,6 @@ __metadata:
languageName: node
linkType: hard
"@rushstack/eslint-patch@npm:^1.1.3":
version: 1.1.3
resolution: "@rushstack/eslint-patch@npm:1.1.3"
checksum: 53752d1e34e45a91b30a016b837c33054fcbd0a295c0312b0812dab78289ea680d7c0c3f19c1f885f49764d416727747133765ff5bfce31a9c4cc93c7a56ebe1
languageName: node
linkType: hard
"@rushstack/eslint-patch@npm:^1.10.3":
version: 1.11.0
resolution: "@rushstack/eslint-patch@npm:1.11.0"
@@ -18565,23 +18548,6 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/parser@npm:^5.42.0":
version: 5.48.0
resolution: "@typescript-eslint/parser@npm:5.48.0"
dependencies:
"@typescript-eslint/scope-manager": 5.48.0
"@typescript-eslint/types": 5.48.0
"@typescript-eslint/typescript-estree": 5.48.0
debug: ^4.3.4
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
typescript:
optional: true
checksum: 41d5ce5c8742d286fb083523295a4f186e57bbe4e3da63b6b2de1edbafbcbf6d5225ed3405da2c56e2b0fe1d52bb72babc37508d2ee9b86f6fadad3c4a7950d0
languageName: node
linkType: hard
"@typescript-eslint/parser@npm:^5.52.0":
version: 5.52.0
resolution: "@typescript-eslint/parser@npm:5.52.0"
@@ -18599,16 +18565,6 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/scope-manager@npm:5.48.0":
version: 5.48.0
resolution: "@typescript-eslint/scope-manager@npm:5.48.0"
dependencies:
"@typescript-eslint/types": 5.48.0
"@typescript-eslint/visitor-keys": 5.48.0
checksum: 96c0ce33d613490690ae6f34e4152f05dbddf3196a6dec89afba4a63cd2d828ae23a98262920b521fe461e7655d38f3a01e9e43588c12392a27bf8cb4f8ae201
languageName: node
linkType: hard
"@typescript-eslint/scope-manager@npm:5.52.0":
version: 5.52.0
resolution: "@typescript-eslint/scope-manager@npm:5.52.0"
@@ -18671,13 +18627,6 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/types@npm:5.48.0":
version: 5.48.0
resolution: "@typescript-eslint/types@npm:5.48.0"
checksum: fa27bd9ec7ec5f256b79a371bb05cfbc26902b6a395f38b0cff0e281633ebd76775ad18e41be1bb156868859287295f6833a2a671da57c6347ac7c6bc08a553b
languageName: node
linkType: hard
"@typescript-eslint/types@npm:5.52.0":
version: 5.52.0
resolution: "@typescript-eslint/types@npm:5.52.0"
@@ -18706,24 +18655,6 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:5.48.0":
version: 5.48.0
resolution: "@typescript-eslint/typescript-estree@npm:5.48.0"
dependencies:
"@typescript-eslint/types": 5.48.0
"@typescript-eslint/visitor-keys": 5.48.0
debug: ^4.3.4
globby: ^11.1.0
is-glob: ^4.0.3
semver: ^7.3.7
tsutils: ^3.21.0
peerDependenciesMeta:
typescript:
optional: true
checksum: 2444632243111e51bc83b56140514cb5978bef4d7151fede0dfcff8808afc1ad335b0c60ca86c2811bcc82273b87e59e2e0360bf1b8c014825ff818a1731d127
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:5.52.0":
version: 5.52.0
resolution: "@typescript-eslint/typescript-estree@npm:5.52.0"
@@ -18830,16 +18761,6 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/visitor-keys@npm:5.48.0":
version: 5.48.0
resolution: "@typescript-eslint/visitor-keys@npm:5.48.0"
dependencies:
"@typescript-eslint/types": 5.48.0
eslint-visitor-keys: ^3.3.0
checksum: 8d41fb7c93b79df415b43c31da7c9007074d78ab6f16c2d318c23e7974b578ce510f466a9584bd67c526367666974091cb5cfbf6670d29e36fb4ab2e57137515
languageName: node
linkType: hard
"@typescript-eslint/visitor-keys@npm:5.52.0":
version: 5.52.0
resolution: "@typescript-eslint/visitor-keys@npm:5.52.0"
@@ -20185,16 +20106,6 @@ __metadata:
languageName: node
linkType: hard
"aria-query@npm:^4.2.2":
version: 4.2.2
resolution: "aria-query@npm:4.2.2"
dependencies:
"@babel/runtime": ^7.10.2
"@babel/runtime-corejs3": ^7.10.2
checksum: 38401a9a400f26f3dcc24b84997461a16b32869a9893d323602bed8da40a8bcc0243b8d2880e942249a1496cea7a7de769e93d21c0baa439f01e1ee936fed665
languageName: node
linkType: hard
"aria-query@npm:^5.0.0":
version: 5.0.0
resolution: "aria-query@npm:5.0.0"
@@ -20410,17 +20321,6 @@ __metadata:
languageName: node
linkType: hard
"array.prototype.flat@npm:^1.2.5":
version: 1.2.5
resolution: "array.prototype.flat@npm:1.2.5"
dependencies:
call-bind: ^1.0.2
define-properties: ^1.1.3
es-abstract: ^1.19.0
checksum: 9cc6414b111abfc7717e39546e4887b1e5ec74df8f1618d83425deaa95752bf05d475d1d241253b4d88d4a01f8e1bc84845ad5b7cc2047f8db2f614512acd40e
languageName: node
linkType: hard
"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2":
version: 1.3.2
resolution: "array.prototype.flat@npm:1.3.2"
@@ -20445,18 +20345,6 @@ __metadata:
languageName: node
linkType: hard
"array.prototype.flatmap@npm:^1.3.1":
version: 1.3.1
resolution: "array.prototype.flatmap@npm:1.3.1"
dependencies:
call-bind: ^1.0.2
define-properties: ^1.1.4
es-abstract: ^1.20.4
es-shim-unscopables: ^1.0.0
checksum: 8c1c43a4995f12cf12523436da28515184c753807b3f0bc2ca6c075f71c470b099e2090cc67dba8e5280958fea401c1d0c59e1db0143272aef6cd1103921a987
languageName: node
linkType: hard
"array.prototype.flatmap@npm:^1.3.2":
version: 1.3.2
resolution: "array.prototype.flatmap@npm:1.3.2"
@@ -20493,19 +20381,6 @@ __metadata:
languageName: node
linkType: hard
"array.prototype.tosorted@npm:^1.1.1":
version: 1.1.1
resolution: "array.prototype.tosorted@npm:1.1.1"
dependencies:
call-bind: ^1.0.2
define-properties: ^1.1.4
es-abstract: ^1.20.4
es-shim-unscopables: ^1.0.0
get-intrinsic: ^1.1.3
checksum: 7923324a67e70a2fc0a6e40237405d92395e45ebd76f5cb89c2a5cf1e66b47aca6baacd0cd628ffd88830b90d47fff268071493d09c9ae123645613dac2c2ca3
languageName: node
linkType: hard
"array.prototype.tosorted@npm:^1.1.3":
version: 1.1.3
resolution: "array.prototype.tosorted@npm:1.1.3"
@@ -20647,13 +20522,6 @@ __metadata:
languageName: node
linkType: hard
"ast-types-flow@npm:^0.0.7":
version: 0.0.7
resolution: "ast-types-flow@npm:0.0.7"
checksum: a26dcc2182ffee111cad7c471759b0bda22d3b7ebacf27c348b22c55f16896b18ab0a4d03b85b4020dce7f3e634b8f00b593888f622915096ea1927fa51866c4
languageName: node
linkType: hard
"ast-types-flow@npm:^0.0.8":
version: 0.0.8
resolution: "ast-types-flow@npm:0.0.8"
@@ -20850,13 +20718,6 @@ __metadata:
languageName: node
linkType: hard
"axe-core@npm:^4.3.5":
version: 4.4.1
resolution: "axe-core@npm:4.4.1"
checksum: ad14c5b71059dc3d24ef2519b8cd96e98b4a572379396201ce449d1c4262181821d6ca9550df65b22371faf06d28bbe94d391fe5675f2a08e6550f7b5da8416d
languageName: node
linkType: hard
"axios-retry@npm:^3.2.4":
version: 3.2.4
resolution: "axios-retry@npm:3.2.4"
@@ -20927,13 +20788,6 @@ __metadata:
languageName: node
linkType: hard
"axobject-query@npm:^2.2.0":
version: 2.2.0
resolution: "axobject-query@npm:2.2.0"
checksum: 96b8c7d807ca525f41ad9b286186e2089b561ba63a6d36c3e7d73dc08150714660995c7ad19cda05784458446a0793b45246db45894631e13853f48c1aa3117f
languageName: node
linkType: hard
"axobject-query@npm:^3.2.1":
version: 3.2.1
resolution: "axobject-query@npm:3.2.1"
@@ -21780,7 +21634,7 @@ __metadata:
resize-observer-polyfill: ^1.5.1
tsc-absolute: ^1.0.0
turbo: ^1.10.1
typescript: ^5.7.2
typescript: 5.9.0-beta
vitest: ^2.1.1
vitest-fetch-mock: ^0.3.0
vitest-mock-extended: ^2.0.2
@@ -23245,13 +23099,6 @@ __metadata:
languageName: node
linkType: hard
"core-js-pure@npm:^3.30.2":
version: 3.32.1
resolution: "core-js-pure@npm:3.32.1"
checksum: 06d3b1585b1f161e84adaf6a0f1db2434309b8d6c748ee82f1806c5d9755272a30074dfa888d60a164c639c6820588ab8462f1073c6971e76659f13788c2f10d
languageName: node
linkType: hard
"core-js@npm:^3":
version: 3.21.1
resolution: "core-js@npm:3.21.1"
@@ -23816,7 +23663,7 @@ __metadata:
languageName: node
linkType: hard
"damerau-levenshtein@npm:^1.0.7, damerau-levenshtein@npm:^1.0.8":
"damerau-levenshtein@npm:^1.0.8":
version: 1.0.8
resolution: "damerau-levenshtein@npm:1.0.8"
checksum: d240b7757544460ae0586a341a53110ab0a61126570ef2d8c731e3eab3f0cb6e488e2609e6a69b46727635de49be20b071688698744417ff1b6c1d7ccd03e0de
@@ -24009,7 +23856,7 @@ __metadata:
languageName: node
linkType: hard
"debug@npm:2.6.9, debug@npm:^2.6.0, debug@npm:^2.6.9":
"debug@npm:2.6.9, debug@npm:^2.6.0":
version: 2.6.9
resolution: "debug@npm:2.6.9"
dependencies:
@@ -26119,26 +25966,27 @@ __metadata:
languageName: node
linkType: hard
"eslint-config-next@npm:^13.2.1":
version: 13.2.1
resolution: "eslint-config-next@npm:13.2.1"
"eslint-config-next@npm:^15.4.5":
version: 15.4.5
resolution: "eslint-config-next@npm:15.4.5"
dependencies:
"@next/eslint-plugin-next": 13.2.1
"@rushstack/eslint-patch": ^1.1.3
"@typescript-eslint/parser": ^5.42.0
"@next/eslint-plugin-next": 15.4.5
"@rushstack/eslint-patch": ^1.10.3
"@typescript-eslint/eslint-plugin": ^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0
"@typescript-eslint/parser": ^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0
eslint-import-resolver-node: ^0.3.6
eslint-import-resolver-typescript: ^3.5.2
eslint-plugin-import: ^2.26.0
eslint-plugin-jsx-a11y: ^6.5.1
eslint-plugin-react: ^7.31.7
eslint-plugin-react-hooks: ^4.5.0
eslint-plugin-import: ^2.31.0
eslint-plugin-jsx-a11y: ^6.10.0
eslint-plugin-react: ^7.37.0
eslint-plugin-react-hooks: ^5.0.0
peerDependencies:
eslint: ^7.23.0 || ^8.0.0
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
typescript: ">=3.3.1"
peerDependenciesMeta:
typescript:
optional: true
checksum: b735b24065c6321c0de891628c5c076a31a3d1d2be007def649788230311d96c5daae705976f56eb015f595855dddb82205901b5920b512914e5275d2809fa37
checksum: c4f61ee00fc29d669477037481557a282ab080e0276da3e02e187ad54ae543bd2ca22668ee73fbf7212f69ed9d1866cc6fb648a9e5726d7b2c33875b4dd82722
languageName: node
linkType: hard
@@ -26215,16 +26063,6 @@ __metadata:
languageName: node
linkType: hard
"eslint-module-utils@npm:^2.7.3":
version: 2.7.3
resolution: "eslint-module-utils@npm:2.7.3"
dependencies:
debug: ^3.2.7
find-up: ^2.1.0
checksum: 77048263f309167a1e6a1e1b896bfb5ddd1d3859b2e2abbd9c32c432aee13d610d46e6820b1ca81b37fba437cf423a404bc6649be64ace9148a3062d1886a678
languageName: node
linkType: hard
"eslint-module-utils@npm:^2.8.0":
version: 2.8.1
resolution: "eslint-module-utils@npm:2.8.1"
@@ -26237,29 +26075,6 @@ __metadata:
languageName: node
linkType: hard
"eslint-plugin-import@npm:^2.26.0":
version: 2.26.0
resolution: "eslint-plugin-import@npm:2.26.0"
dependencies:
array-includes: ^3.1.4
array.prototype.flat: ^1.2.5
debug: ^2.6.9
doctrine: ^2.1.0
eslint-import-resolver-node: ^0.3.6
eslint-module-utils: ^2.7.3
has: ^1.0.3
is-core-module: ^2.8.1
is-glob: ^4.0.3
minimatch: ^3.1.2
object.values: ^1.1.5
resolve: ^1.22.0
tsconfig-paths: ^3.14.1
peerDependencies:
eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
checksum: 0bf77ad80339554481eafa2b1967449e1f816b94c7a6f9614ce33fb4083c4e6c050f10d241dd50b4975d47922880a34de1e42ea9d8e6fd663ebb768baa67e655
languageName: node
linkType: hard
"eslint-plugin-import@npm:^2.28.1":
version: 2.29.1
resolution: "eslint-plugin-import@npm:2.29.1"
@@ -26341,28 +26156,6 @@ __metadata:
languageName: node
linkType: hard
"eslint-plugin-jsx-a11y@npm:^6.5.1":
version: 6.5.1
resolution: "eslint-plugin-jsx-a11y@npm:6.5.1"
dependencies:
"@babel/runtime": ^7.16.3
aria-query: ^4.2.2
array-includes: ^3.1.4
ast-types-flow: ^0.0.7
axe-core: ^4.3.5
axobject-query: ^2.2.0
damerau-levenshtein: ^1.0.7
emoji-regex: ^9.2.2
has: ^1.0.3
jsx-ast-utils: ^3.2.1
language-tags: ^1.0.5
minimatch: ^3.0.4
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
checksum: 311ab993ed982d0cc7cb0ba02fbc4b36c4a94e9434f31e97f13c4d67e8ecb8aec36baecfd759ff70498846e7e11d7a197eb04c39ad64934baf3354712fd0bc9d
languageName: node
linkType: hard
"eslint-plugin-jsx-a11y@npm:^6.7.1":
version: 6.8.0
resolution: "eslint-plugin-jsx-a11y@npm:6.8.0"
@@ -26417,15 +26210,6 @@ __metadata:
languageName: node
linkType: hard
"eslint-plugin-react-hooks@npm:^4.5.0":
version: 4.5.0
resolution: "eslint-plugin-react-hooks@npm:4.5.0"
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
checksum: 0389377de635dd9b769f6f52e2c9e6ab857a0cdfecc3734c95ce81676a752e781bb5c44fd180e01953a03a77278323d90729776438815557b069ceb988ab1f9f
languageName: node
linkType: hard
"eslint-plugin-react-hooks@npm:^4.5.0 || 5.0.0-canary-7118f5dd7-20230705":
version: 5.0.0-canary-7118f5dd7-20230705
resolution: "eslint-plugin-react-hooks@npm:5.0.0-canary-7118f5dd7-20230705"
@@ -26477,31 +26261,6 @@ __metadata:
languageName: node
linkType: hard
"eslint-plugin-react@npm:^7.31.7":
version: 7.31.11
resolution: "eslint-plugin-react@npm:7.31.11"
dependencies:
array-includes: ^3.1.6
array.prototype.flatmap: ^1.3.1
array.prototype.tosorted: ^1.1.1
doctrine: ^2.1.0
estraverse: ^5.3.0
jsx-ast-utils: ^2.4.1 || ^3.0.0
minimatch: ^3.1.2
object.entries: ^1.1.6
object.fromentries: ^2.0.6
object.hasown: ^1.1.2
object.values: ^1.1.6
prop-types: ^15.8.1
resolve: ^2.0.0-next.3
semver: ^6.3.0
string.prototype.matchall: ^4.0.8
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
checksum: a3d612f6647bef33cf2a67c81a6b37b42c075300ed079cffecf5fb475c0d6ab855c1de340d1cbf361a0126429fb906dda597527235d2d12c4404453dbc712fc6
languageName: node
linkType: hard
"eslint-plugin-react@npm:^7.33.2":
version: 7.34.0
resolution: "eslint-plugin-react@npm:7.34.0"
@@ -27610,15 +27369,6 @@ __metadata:
languageName: node
linkType: hard
"find-up@npm:^2.1.0":
version: 2.1.0
resolution: "find-up@npm:2.1.0"
dependencies:
locate-path: ^2.0.0
checksum: 43284fe4da09f89011f08e3c32cd38401e786b19226ea440b75386c1b12a4cb738c94969808d53a84f564ede22f732c8409e3cfc3f7fb5b5c32378ad0bbf28bd
languageName: node
linkType: hard
"find-up@npm:^3.0.0":
version: 3.0.0
resolution: "find-up@npm:3.0.0"
@@ -32540,7 +32290,7 @@ __metadata:
languageName: node
linkType: hard
"json5@npm:^1.0.1, json5@npm:^1.0.2":
"json5@npm:^1.0.2":
version: 1.0.2
resolution: "json5@npm:1.0.2"
dependencies:
@@ -32656,7 +32406,7 @@ __metadata:
languageName: node
linkType: hard
"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.2.1":
"jsx-ast-utils@npm:^2.4.1 || ^3.0.0":
version: 3.2.2
resolution: "jsx-ast-utils@npm:3.2.2"
dependencies:
@@ -32824,22 +32574,6 @@ __metadata:
languageName: node
linkType: hard
"language-subtag-registry@npm:~0.3.2":
version: 0.3.21
resolution: "language-subtag-registry@npm:0.3.21"
checksum: 5f794525a5bfcefeea155a681af1c03365b60e115b688952a53c6e0b9532b09163f57f1fcb69d6150e0e805ec0350644a4cb35da98f4902562915be9f89572a1
languageName: node
linkType: hard
"language-tags@npm:^1.0.5":
version: 1.0.5
resolution: "language-tags@npm:1.0.5"
dependencies:
language-subtag-registry: ~0.3.2
checksum: c81b5d8b9f5f9cfd06ee71ada6ddfe1cf83044dd5eeefcd1e420ad491944da8957688db4a0a9bc562df4afdc2783425cbbdfd152c01d93179cf86888903123cf
languageName: node
linkType: hard
"language-tags@npm:^1.0.9":
version: 1.0.9
resolution: "language-tags@npm:1.0.9"
@@ -33164,16 +32898,6 @@ __metadata:
languageName: node
linkType: hard
"locate-path@npm:^2.0.0":
version: 2.0.0
resolution: "locate-path@npm:2.0.0"
dependencies:
p-locate: ^2.0.0
path-exists: ^3.0.0
checksum: 02d581edbbbb0fa292e28d96b7de36b5b62c2fa8b5a7e82638ebb33afa74284acf022d3b1e9ae10e3ffb7658fbc49163fcd5e76e7d1baaa7801c3e05a81da755
languageName: node
linkType: hard
"locate-path@npm:^3.0.0":
version: 3.0.0
resolution: "locate-path@npm:3.0.0"
@@ -36913,17 +36637,6 @@ __metadata:
languageName: node
linkType: hard
"object.entries@npm:^1.1.6":
version: 1.1.6
resolution: "object.entries@npm:1.1.6"
dependencies:
call-bind: ^1.0.2
define-properties: ^1.1.4
es-abstract: ^1.20.4
checksum: 0f8c47517e6a9a980241eafe3b73de11e59511883173c2b93d67424a008e47e11b77c80e431ad1d8a806f6108b225a1cab9223e53e555776c612a24297117d28
languageName: node
linkType: hard
"object.entries@npm:^1.1.7":
version: 1.1.7
resolution: "object.entries@npm:1.1.7"
@@ -36958,17 +36671,6 @@ __metadata:
languageName: node
linkType: hard
"object.fromentries@npm:^2.0.6":
version: 2.0.6
resolution: "object.fromentries@npm:2.0.6"
dependencies:
call-bind: ^1.0.2
define-properties: ^1.1.4
es-abstract: ^1.20.4
checksum: 453c6d694180c0c30df451b60eaf27a5b9bca3fb43c37908fd2b78af895803dc631242bcf05582173afa40d8d0e9c96e16e8874b39471aa53f3ac1f98a085d85
languageName: node
linkType: hard
"object.fromentries@npm:^2.0.7":
version: 2.0.7
resolution: "object.fromentries@npm:2.0.7"
@@ -37026,16 +36728,6 @@ __metadata:
languageName: node
linkType: hard
"object.hasown@npm:^1.1.2":
version: 1.1.2
resolution: "object.hasown@npm:1.1.2"
dependencies:
define-properties: ^1.1.4
es-abstract: ^1.20.4
checksum: b936572536db0cdf38eb30afd2f1026a8b6f2cc5d2c4497c9d9bbb01eaf3e980dead4fd07580cfdd098e6383e5a9db8212d3ea0c6bdd2b5e68c60aa7e3b45566
languageName: node
linkType: hard
"object.hasown@npm:^1.1.3":
version: 1.1.3
resolution: "object.hasown@npm:1.1.3"
@@ -37416,15 +37108,6 @@ __metadata:
languageName: node
linkType: hard
"p-limit@npm:^1.1.0":
version: 1.3.0
resolution: "p-limit@npm:1.3.0"
dependencies:
p-try: ^1.0.0
checksum: 281c1c0b8c82e1ac9f81acd72a2e35d402bf572e09721ce5520164e9de07d8274451378a3470707179ad13240535558f4b277f02405ad752e08c7d5b0d54fbfd
languageName: node
linkType: hard
"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0":
version: 2.3.0
resolution: "p-limit@npm:2.3.0"
@@ -37443,15 +37126,6 @@ __metadata:
languageName: node
linkType: hard
"p-locate@npm:^2.0.0":
version: 2.0.0
resolution: "p-locate@npm:2.0.0"
dependencies:
p-limit: ^1.1.0
checksum: e2dceb9b49b96d5513d90f715780f6f4972f46987dc32a0e18bc6c3fc74a1a5d73ec5f81b1398af5e58b99ea1ad03fd41e9181c01fa81b4af2833958696e3081
languageName: node
linkType: hard
"p-locate@npm:^3.0.0":
version: 3.0.0
resolution: "p-locate@npm:3.0.0"
@@ -37524,13 +37198,6 @@ __metadata:
languageName: node
linkType: hard
"p-try@npm:^1.0.0":
version: 1.0.0
resolution: "p-try@npm:1.0.0"
checksum: 3b5303f77eb7722144154288bfd96f799f8ff3e2b2b39330efe38db5dd359e4fb27012464cd85cb0a76e9b7edd1b443568cb3192c22e7cffc34989df0bafd605
languageName: node
linkType: hard
"p-try@npm:^2.0.0":
version: 2.2.0
resolution: "p-try@npm:2.2.0"
@@ -41087,7 +40754,7 @@ __metadata:
languageName: node
linkType: hard
"resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.20.0, resolve@npm:^1.22.0":
"resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.20.0":
version: 1.22.0
resolution: "resolve@npm:1.22.0"
dependencies:
@@ -41185,7 +40852,7 @@ __metadata:
languageName: node
linkType: hard
"resolve@patch:resolve@^1.10.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.12.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.20.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.22.0#~builtin<compat/resolve>":
"resolve@patch:resolve@^1.10.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.12.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.20.0#~builtin<compat/resolve>":
version: 1.22.0
resolution: "resolve@patch:resolve@npm%3A1.22.0#~builtin<compat/resolve>::version=1.22.0&hash=c3c19d"
dependencies:
@@ -43419,22 +43086,6 @@ __metadata:
languageName: node
linkType: hard
"string.prototype.matchall@npm:^4.0.8":
version: 4.0.8
resolution: "string.prototype.matchall@npm:4.0.8"
dependencies:
call-bind: ^1.0.2
define-properties: ^1.1.4
es-abstract: ^1.20.4
get-intrinsic: ^1.1.3
has-symbols: ^1.0.3
internal-slot: ^1.0.3
regexp.prototype.flags: ^1.4.3
side-channel: ^1.0.4
checksum: 952da3a818de42ad1c10b576140a5e05b4de7b34b8d9dbf00c3ac8c1293e9c0f533613a39c5cda53e0a8221f2e710bc2150e730b1c2278d60004a8a35726efb6
languageName: node
linkType: hard
"string.prototype.padend@npm:^3.0.0":
version: 3.1.3
resolution: "string.prototype.padend@npm:3.1.3"
@@ -45132,18 +44783,6 @@ __metadata:
languageName: node
linkType: hard
"tsconfig-paths@npm:^3.14.1":
version: 3.14.1
resolution: "tsconfig-paths@npm:3.14.1"
dependencies:
"@types/json5": ^0.0.29
json5: ^1.0.1
minimist: ^1.2.6
strip-bom: ^3.0.0
checksum: 8afa01c673ebb4782ba53d3a12df97fa837ce524f8ad38ee4e2b2fd57f5ac79abc21c574e9e9eb014d93efe7fe8214001b96233b5c6ea75bd1ea82afe17a4c6d
languageName: node
linkType: hard
"tsconfig-paths@npm:^3.15.0":
version: 3.15.0
resolution: "tsconfig-paths@npm:3.15.0"
@@ -45761,6 +45400,16 @@ __metadata:
languageName: node
linkType: hard
"typescript@npm:5.9.0-beta":
version: 5.9.0-beta
resolution: "typescript@npm:5.9.0-beta"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 42564de845d58e611b774b6222eec4aa75eaf88c79dde2b6e4d2366e2e9da344af0cdb1cc5a8fc2300dc8f33a794fafd1f7aa3ffea63caefe61f2745cb471ab8
languageName: node
linkType: hard
"typescript@npm:^4.9.4":
version: 4.9.5
resolution: "typescript@npm:4.9.5"
@@ -45771,16 +45420,6 @@ __metadata:
languageName: node
linkType: hard
"typescript@npm:^5, typescript@npm:^5.7.2":
version: 5.8.2
resolution: "typescript@npm:5.8.2"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 7f9e3d7ac15da6df713e439e785e51facd65d6450d5f51fab3e8d2f2e3f4eb317080d895480b8e305450cdbcb37e17383e8bf521e7395f8b556e2f2a4730ed86
languageName: node
linkType: hard
"typescript@npm:^5.2.2":
version: 5.8.3
resolution: "typescript@npm:5.8.3"
@@ -45791,6 +45430,26 @@ __metadata:
languageName: node
linkType: hard
"typescript@npm:^5.7.2":
version: 5.8.2
resolution: "typescript@npm:5.8.2"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 7f9e3d7ac15da6df713e439e785e51facd65d6450d5f51fab3e8d2f2e3f4eb317080d895480b8e305450cdbcb37e17383e8bf521e7395f8b556e2f2a4730ed86
languageName: node
linkType: hard
"typescript@npm:^5.9.0-beta":
version: 5.9.2
resolution: "typescript@npm:5.9.2"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: f619cf6773cfe31409279711afd68cdf0859780006c50bc2a7a0c3227f85dea89a3b97248846326f3a17dad72ea90ec27cf61a8387772c680b2252fd02d8497b
languageName: node
linkType: hard
"typescript@patch:typescript@5.3.3#~builtin<compat/typescript>":
version: 5.3.3
resolution: "typescript@patch:typescript@npm%3A5.3.3#~builtin<compat/typescript>::version=5.3.3&hash=1f5320"
@@ -45801,6 +45460,16 @@ __metadata:
languageName: node
linkType: hard
"typescript@patch:typescript@5.9.0-beta#~builtin<compat/typescript>":
version: 5.9.0-beta
resolution: "typescript@patch:typescript@npm%3A5.9.0-beta#~builtin<compat/typescript>::version=5.9.0-beta&hash=1f5320"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 4a3a8b55e8b64f01ae92bab8b93771817e716e4956a07fe16d8ce33a0078da11e2ab5402f4ea8db6820dc4dbe13ca5affabfa57da9f7176e753f6e9f80ed79db
languageName: node
linkType: hard
"typescript@patch:typescript@^4.9.4#~builtin<compat/typescript>":
version: 4.9.5
resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin<compat/typescript>::version=4.9.5&hash=23ec76"
@@ -45811,7 +45480,17 @@ __metadata:
languageName: node
linkType: hard
"typescript@patch:typescript@^5#~builtin<compat/typescript>, typescript@patch:typescript@^5.7.2#~builtin<compat/typescript>":
"typescript@patch:typescript@^5.2.2#~builtin<compat/typescript>":
version: 5.8.3
resolution: "typescript@patch:typescript@npm%3A5.8.3#~builtin<compat/typescript>::version=5.8.3&hash=1f5320"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 1b503525a88ff0ff5952e95870971c4fb2118c17364d60302c21935dedcd6c37e6a0a692f350892bafcef6f4a16d09073fe461158547978d2f16fbe4cb18581c
languageName: node
linkType: hard
"typescript@patch:typescript@^5.7.2#~builtin<compat/typescript>":
version: 5.8.2
resolution: "typescript@patch:typescript@npm%3A5.8.2#~builtin<compat/typescript>::version=5.8.2&hash=1f5320"
bin:
@@ -45821,13 +45500,13 @@ __metadata:
languageName: node
linkType: hard
"typescript@patch:typescript@^5.2.2#~builtin<compat/typescript>":
version: 5.8.3
resolution: "typescript@patch:typescript@npm%3A5.8.3#~builtin<compat/typescript>::version=5.8.3&hash=1f5320"
"typescript@patch:typescript@^5.9.0-beta#~builtin<compat/typescript>":
version: 5.9.2
resolution: "typescript@patch:typescript@npm%3A5.9.2#~builtin<compat/typescript>::version=5.9.2&hash=1f5320"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 1b503525a88ff0ff5952e95870971c4fb2118c17364d60302c21935dedcd6c37e6a0a692f350892bafcef6f4a16d09073fe461158547978d2f16fbe4cb18581c
checksum: e42a701947325500008334622321a6ad073f842f5e7d5e7b588a6346b31fdf51d56082b9ce5cef24312ecd3e48d6c0d4d44da7555f65e2feec18cf62ec540385
languageName: node
linkType: hard