Upgrade frontend toolchain to latest majors

Bump React 19.2, Relay 21, React Router 8, Vite 8 with
@vitejs/plugin-react 6, ESLint 10, GraphQL 17, TypeScript 6,
@types/node 24, and Tailwind 4.3 across the workspaces.

vite-plugin-react 6 (Vite 8) no longer runs Babel, so the Relay
tagged-template transform now runs through @rolldown/plugin-babel
in the console and trust Vite configs.

Relay 21 ships first-party types and enables the ambiguous-alias
check by default; disable that flag to preserve existing queries
and add explicit usePreloadedQuery type arguments where the new
types no longer infer the operation. TypeScript 6 deprecations and
stricter inference are addressed in tsconfigs and call sites.

Keep n8n-node on ESLint 9 and eslint-plugin-react on 7.37.5, the
newest releases compatible with their toolchains.

Signed-off-by: Émile Ré <emile@probo.com>
This commit is contained in:
Émile Ré
2026-06-18 19:10:00 +02:00
parent f1fc2dc0e0
commit f98b73f073
130 changed files with 2228 additions and 1763 deletions

View File

@@ -12,7 +12,7 @@
// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
import { formatDate, formatError, type GraphQLError, sprintf } from "@probo/helpers";
import { formatDate, formatError, sprintf } from "@probo/helpers";
import { useList } from "@probo/hooks";
import { useTranslate } from "@probo/i18n";
import {
@@ -199,7 +199,7 @@ export default function CampaignDetailPage({ queryRef }: Props) {
const organizationId = useOrganizationId();
const navigate = useNavigate();
const environment = useRelayEnvironment();
const data = usePreloadedQuery(campaignDetailPageQuery, queryRef);
const data = usePreloadedQuery<CampaignDetailPageQuery>(campaignDetailPageQuery, queryRef);
if (data.node.__typename !== "AccessReviewCampaign") {
throw new Error("Campaign not found");
@@ -269,7 +269,7 @@ export default function CampaignDetailPage({ queryRef }: Props) {
title: __("Error"),
description: formatError(
__("Failed to start campaign"),
errors as GraphQLError[],
errors,
),
variant: "error",
});
@@ -286,7 +286,7 @@ export default function CampaignDetailPage({ queryRef }: Props) {
title: __("Error"),
description: formatError(
__("Failed to start campaign"),
error as GraphQLError,
error,
),
variant: "error",
});
@@ -315,7 +315,7 @@ export default function CampaignDetailPage({ queryRef }: Props) {
title: __("Error"),
description: formatError(
__("Failed to delete campaign"),
errors as GraphQLError[],
errors,
),
variant: "error",
});
@@ -335,7 +335,7 @@ export default function CampaignDetailPage({ queryRef }: Props) {
title: __("Error"),
description: formatError(
__("Failed to delete campaign"),
error as GraphQLError,
error,
),
variant: "error",
});
@@ -368,7 +368,7 @@ export default function CampaignDetailPage({ queryRef }: Props) {
title: __("Error"),
description: formatError(
__("Failed to complete campaign"),
errors as GraphQLError[],
errors,
),
variant: "error",
});
@@ -387,7 +387,7 @@ export default function CampaignDetailPage({ queryRef }: Props) {
title: __("Error"),
description: formatError(
__("Failed to complete campaign"),
error as GraphQLError,
error,
),
variant: "error",
});
@@ -524,7 +524,7 @@ function CampaignSourceCard({ source, isPendingActions }: { source: CampaignSour
input: {
decisions: selection.map(id => ({
accessReviewEntryId: id,
decision: "APPROVED" as AccessReviewEntryDecision,
decision: "APPROVED",
})),
},
},
@@ -534,7 +534,7 @@ function CampaignSourceCard({ source, isPendingActions }: { source: CampaignSour
title: __("Error"),
description: formatError(
__("Failed to record decisions"),
errors as GraphQLError[],
errors,
),
variant: "error",
});
@@ -552,7 +552,7 @@ function CampaignSourceCard({ source, isPendingActions }: { source: CampaignSour
title: __("Error"),
description: formatError(
__("Failed to record decisions"),
error as GraphQLError,
error,
),
variant: "error",
});
@@ -877,7 +877,7 @@ function CampaignSourceCard({ source, isPendingActions }: { source: CampaignSour
title: __("Error"),
description: formatError(
__("Failed to record decisions"),
errors as GraphQLError[],
errors,
),
variant: "error",
});
@@ -898,7 +898,7 @@ function CampaignSourceCard({ source, isPendingActions }: { source: CampaignSour
title: __("Error"),
description: formatError(
__("Failed to record decisions"),
error as GraphQLError,
error,
),
variant: "error",
});