Compare commits
10
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
18059e50fa | ||
|
|
852eb346ed | ||
|
|
b7e11dc112 | ||
|
|
35a373e70a | ||
|
|
02c0b721b9 | ||
|
|
29349845f8 | ||
|
|
28cb2cff64 | ||
|
|
9cb2eb3b8c | ||
|
|
6ff20b98f4 | ||
|
|
aa618dbaa2 |
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
"@calcom/atoms": patch
|
||||
---
|
||||
|
||||
This change fixes date overrides breaking for availability settings atom
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -34,6 +34,6 @@
|
||||
"eslint-config-next": "15.1.6",
|
||||
"postcss": "^8",
|
||||
"tailwindcss": "^3.4.1",
|
||||
"typescript": "^5"
|
||||
"typescript": "^5.9.0-beta"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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
|
||||
@@ -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
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
],
|
||||
"types": "./dist/index.d.ts",
|
||||
"devDependencies": {
|
||||
"typescript": "^5.7.2",
|
||||
"typescript": "^5.9.0-beta",
|
||||
"vite": "^4.1.2"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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:",
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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("");
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
);
|
||||
})
|
||||
|
||||
Vendored
+6
@@ -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 };
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user