Upgrade zod package to 4 (#2677)

This commit is contained in:
Kalle 2025-12-29 20:04:40 +02:00 committed by GitHub
parent 81483de0db
commit 658421d899
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
84 changed files with 88 additions and 98 deletions

View File

@ -3,7 +3,7 @@ import * as React from "react";
import { type DefaultValues, FormProvider, useForm } from "react-hook-form"; import { type DefaultValues, FormProvider, useForm } from "react-hook-form";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useFetcher } from "react-router"; import { useFetcher } from "react-router";
import type { z } from "zod/v4"; import type { z } from "zod";
import { logger } from "~/utils/logger"; import { logger } from "~/utils/logger";
import type { ActionError } from "~/utils/remix.server"; import type { ActionError } from "~/utils/remix.server";
import { LinkButton } from "../elements/Button"; import { LinkButton } from "../elements/Button";

View File

@ -1,5 +1,5 @@
import type { ActionFunctionArgs } from "react-router"; import type { ActionFunctionArgs } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import * as AdminRepository from "~/features/admin/AdminRepository.server"; import * as AdminRepository from "~/features/admin/AdminRepository.server";
import { requireUser } from "~/features/auth/core/user.server"; import { requireUser } from "~/features/auth/core/user.server";
import { refreshBannedCache } from "~/features/ban/core/banned.server"; import { refreshBannedCache } from "~/features/ban/core/banned.server";

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { friendCode } from "~/utils/zod"; import { friendCode } from "~/utils/zod";
export const adminActionSearchParamsSchema = z.object({ export const adminActionSearchParamsSchema = z.object({

View File

@ -1,5 +1,5 @@
import type { ActionFunction } from "react-router"; import type { ActionFunction } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { seed } from "~/db/seed"; import { seed } from "~/db/seed";
import { DANGEROUS_CAN_ACCESS_DEV_CONTROLS } from "~/features/admin/core/dev-controls"; import { DANGEROUS_CAN_ACCESS_DEV_CONTROLS } from "~/features/admin/core/dev-controls";
import { SEED_VARIATIONS } from "~/features/api-private/constants"; import { SEED_VARIATIONS } from "~/features/api-private/constants";

View File

@ -1,6 +1,6 @@
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { cors } from "remix-utils/cors"; import { cors } from "remix-utils/cors";
import { z } from "zod/v4"; import { z } from "zod";
import { db } from "~/db/sql"; import { db } from "~/db/sql";
import { import {
databaseTimestampToDate, databaseTimestampToDate,

View File

@ -1,7 +1,7 @@
import { jsonArrayFrom } from "kysely/helpers/sqlite"; import { jsonArrayFrom } from "kysely/helpers/sqlite";
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { cors } from "remix-utils/cors"; import { cors } from "remix-utils/cors";
import { z } from "zod/v4"; import { z } from "zod";
import { db } from "~/db/sql"; import { db } from "~/db/sql";
import { concatUserSubmittedImagePrefix } from "~/utils/kysely.server"; import { concatUserSubmittedImagePrefix } from "~/utils/kysely.server";
import { notFoundIfFalsy, parseParams } from "~/utils/remix.server"; import { notFoundIfFalsy, parseParams } from "~/utils/remix.server";

View File

@ -1,6 +1,6 @@
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { cors } from "remix-utils/cors"; import { cors } from "remix-utils/cors";
import { z } from "zod/v4"; import { z } from "zod";
import { SendouQ } from "~/features/sendouq/core/SendouQ.server"; import { SendouQ } from "~/features/sendouq/core/SendouQ.server";
import { parseParams } from "~/utils/remix.server"; import { parseParams } from "~/utils/remix.server";
import { id } from "~/utils/zod"; import { id } from "~/utils/zod";

View File

@ -1,6 +1,6 @@
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { cors } from "remix-utils/cors"; import { cors } from "remix-utils/cors";
import { z } from "zod/v4"; import { z } from "zod";
import * as SQMatchRepository from "~/features/sendouq-match/SQMatchRepository.server"; import * as SQMatchRepository from "~/features/sendouq-match/SQMatchRepository.server";
import { i18next } from "~/modules/i18n/i18next.server"; import { i18next } from "~/modules/i18n/i18next.server";
import { notFoundIfFalsy, parseParams } from "~/utils/remix.server"; import { notFoundIfFalsy, parseParams } from "~/utils/remix.server";

View File

@ -1,6 +1,6 @@
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { cors } from "remix-utils/cors"; import { cors } from "remix-utils/cors";
import { z } from "zod/v4"; import { z } from "zod";
import { db } from "~/db/sql"; import { db } from "~/db/sql";
import { concatUserSubmittedImagePrefix } from "~/utils/kysely.server"; import { concatUserSubmittedImagePrefix } from "~/utils/kysely.server";
import { notFoundIfFalsy, parseParams } from "~/utils/remix.server"; import { notFoundIfFalsy, parseParams } from "~/utils/remix.server";

View File

@ -1,7 +1,7 @@
import { jsonArrayFrom } from "kysely/helpers/sqlite"; import { jsonArrayFrom } from "kysely/helpers/sqlite";
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { cors } from "remix-utils/cors"; import { cors } from "remix-utils/cors";
import { z } from "zod/v4"; import { z } from "zod";
import { db } from "~/db/sql"; import { db } from "~/db/sql";
import * as TournamentRepository from "~/features/tournament/TournamentRepository.server"; import * as TournamentRepository from "~/features/tournament/TournamentRepository.server";
import * as TournamentTeamRepository from "~/features/tournament/TournamentTeamRepository.server"; import * as TournamentTeamRepository from "~/features/tournament/TournamentTeamRepository.server";

View File

@ -1,6 +1,6 @@
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { cors } from "remix-utils/cors"; import { cors } from "remix-utils/cors";
import { z } from "zod/v4"; import { z } from "zod";
import { tournamentFromDB } from "~/features/tournament-bracket/core/Tournament.server"; import { tournamentFromDB } from "~/features/tournament-bracket/core/Tournament.server";
import { notFoundIfFalsy, parseParams } from "~/utils/remix.server"; import { notFoundIfFalsy, parseParams } from "~/utils/remix.server";
import { id } from "~/utils/zod"; import { id } from "~/utils/zod";

View File

@ -1,6 +1,6 @@
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { cors } from "remix-utils/cors"; import { cors } from "remix-utils/cors";
import { z } from "zod/v4"; import { z } from "zod";
import type { Bracket } from "~/features/tournament-bracket/core/Bracket"; import type { Bracket } from "~/features/tournament-bracket/core/Bracket";
import { tournamentFromDB } from "~/features/tournament-bracket/core/Tournament.server"; import { tournamentFromDB } from "~/features/tournament-bracket/core/Tournament.server";
import { notFoundIfFalsy, parseParams } from "~/utils/remix.server"; import { notFoundIfFalsy, parseParams } from "~/utils/remix.server";

View File

@ -1,6 +1,6 @@
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { cors } from "remix-utils/cors"; import { cors } from "remix-utils/cors";
import { z } from "zod/v4"; import { z } from "zod";
import { db } from "~/db/sql"; import { db } from "~/db/sql";
import { notFoundIfFalsy, parseParams } from "~/utils/remix.server"; import { notFoundIfFalsy, parseParams } from "~/utils/remix.server";
import { id } from "~/utils/zod"; import { id } from "~/utils/zod";

View File

@ -1,6 +1,6 @@
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { cors } from "remix-utils/cors"; import { cors } from "remix-utils/cors";
import { z } from "zod/v4"; import { z } from "zod";
import * as TournamentMatchRepository from "~/features/tournament-bracket/TournamentMatchRepository.server"; import * as TournamentMatchRepository from "~/features/tournament-bracket/TournamentMatchRepository.server";
import { parseParams } from "~/utils/remix.server"; import { parseParams } from "~/utils/remix.server";
import { id } from "~/utils/zod"; import { id } from "~/utils/zod";

View File

@ -1,7 +1,7 @@
import { jsonArrayFrom, jsonObjectFrom } from "kysely/helpers/sqlite"; import { jsonArrayFrom, jsonObjectFrom } from "kysely/helpers/sqlite";
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { cors } from "remix-utils/cors"; import { cors } from "remix-utils/cors";
import { z } from "zod/v4"; import { z } from "zod";
import { db } from "~/db/sql"; import { db } from "~/db/sql";
import { ordinalToSp } from "~/features/mmr/mmr-utils"; import { ordinalToSp } from "~/features/mmr/mmr-utils";
import * as TournamentRepository from "~/features/tournament/TournamentRepository.server"; import * as TournamentRepository from "~/features/tournament/TournamentRepository.server";

View File

@ -1,7 +1,7 @@
import { jsonArrayFrom } from "kysely/helpers/sqlite"; import { jsonArrayFrom } from "kysely/helpers/sqlite";
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { cors } from "remix-utils/cors"; import { cors } from "remix-utils/cors";
import { z } from "zod/v4"; import { z } from "zod";
import { db } from "~/db/sql"; import { db } from "~/db/sql";
import { databaseTimestampToDate } from "~/utils/dates"; import { databaseTimestampToDate } from "~/utils/dates";
import { notFoundIfFalsy, parseParams } from "~/utils/remix.server"; import { notFoundIfFalsy, parseParams } from "~/utils/remix.server";

View File

@ -1,7 +1,7 @@
import { jsonArrayFrom } from "kysely/helpers/sqlite"; import { jsonArrayFrom } from "kysely/helpers/sqlite";
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { cors } from "remix-utils/cors"; import { cors } from "remix-utils/cors";
import { z } from "zod/v4"; import { z } from "zod";
import { db } from "~/db/sql"; import { db } from "~/db/sql";
import * as Seasons from "~/features/mmr/core/Seasons"; import * as Seasons from "~/features/mmr/core/Seasons";
import { userSkills as _userSkills } from "~/features/mmr/tiered.server"; import { userSkills as _userSkills } from "~/features/mmr/tiered.server";

View File

@ -1,5 +1,5 @@
import type { ActionFunctionArgs } from "react-router"; import type { ActionFunctionArgs } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { refreshApiTokensCache } from "~/features/api-public/api-public-utils.server"; import { refreshApiTokensCache } from "~/features/api-public/api-public-utils.server";
import { requireUser } from "~/features/auth/core/user.server"; import { requireUser } from "~/features/auth/core/user.server";
import { parseRequestPayload, successToast } from "~/utils/remix.server"; import { parseRequestPayload, successToast } from "~/utils/remix.server";

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { import {
_action, _action,
checkboxValueToDbBoolean, checkboxValueToDbBoolean,

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
const authorName = z.string().min(1); const authorName = z.string().min(1);

View File

@ -1,7 +1,7 @@
import fs from "node:fs"; import fs from "node:fs";
import path from "node:path"; import path from "node:path";
import matter from "gray-matter"; import matter from "gray-matter";
import { ZodError, type z } from "zod/v4"; import { ZodError, type z } from "zod";
import { ARTICLES_FOLDER_PATH } from "../articles-constants"; import { ARTICLES_FOLDER_PATH } from "../articles-constants";
import { articleDataSchema } from "../articles-schemas.server"; import { articleDataSchema } from "../articles-schemas.server";

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { _action, id, inviteCode, safeStringSchema } from "~/utils/zod"; import { _action, id, inviteCode, safeStringSchema } from "~/utils/zod";
import { ASSOCIATION } from "./associations-constants"; import { ASSOCIATION } from "./associations-constants";

View File

@ -1,5 +1,5 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import type { z } from "zod/v4"; import type { z } from "zod";
import { SendouDialog } from "~/components/elements/Dialog"; import { SendouDialog } from "~/components/elements/Dialog";
import { InputFormField } from "~/components/form/InputFormField"; import { InputFormField } from "~/components/form/InputFormField";
import { SendouForm } from "~/components/form/SendouForm"; import { SendouForm } from "~/components/form/SendouForm";

View File

@ -1,5 +1,5 @@
import { OAuth2Strategy } from "remix-auth-oauth2"; import { OAuth2Strategy } from "remix-auth-oauth2";
import { z } from "zod/v4"; import { z } from "zod";
import * as UserRepository from "~/features/user-page/UserRepository.server"; import * as UserRepository from "~/features/user-page/UserRepository.server";
import invariant from "~/utils/invariant"; import invariant from "~/utils/invariant";
import { logger } from "~/utils/logger"; import { logger } from "~/utils/logger";

View File

@ -1,7 +1,7 @@
import { isbot } from "isbot"; import { isbot } from "isbot";
import type { ActionFunction, LoaderFunction } from "react-router"; import type { ActionFunction, LoaderFunction } from "react-router";
import { redirect } from "react-router"; import { redirect } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { DANGEROUS_CAN_ACCESS_DEV_CONTROLS } from "~/features/admin/core/dev-controls"; import { DANGEROUS_CAN_ACCESS_DEV_CONTROLS } from "~/features/admin/core/dev-controls";
import * as UserRepository from "~/features/user-page/UserRepository.server"; import * as UserRepository from "~/features/user-page/UserRepository.server";
import { requireRole } from "~/modules/permissions/guards.server"; import { requireRole } from "~/modules/permissions/guards.server";

View File

@ -1,6 +1,6 @@
import type { ActionFunction } from "react-router"; import type { ActionFunction } from "react-router";
import { redirect } from "react-router"; import { redirect } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { requireUser } from "~/features/auth/core/user.server"; import { requireUser } from "~/features/auth/core/user.server";
import { notify } from "~/features/notifications/core/notify.server"; import { notify } from "~/features/notifications/core/notify.server";
import { import {

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { _action, id, noDuplicates, safeJSONParse } from "~/utils/zod"; import { _action, id, noDuplicates, safeJSONParse } from "~/utils/zod";
export const editBadgeActionSchema = z.union([ export const editBadgeActionSchema = z.union([

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { ability, modeShort, safeJSONParse } from "~/utils/zod"; import { ability, modeShort, safeJSONParse } from "~/utils/zod";
import { MAX_BUILD_FILTERS } from "./builds-constants"; import { MAX_BUILD_FILTERS } from "./builds-constants";

View File

@ -1,6 +1,6 @@
import type { ActionFunction } from "react-router"; import type { ActionFunction } from "react-router";
import { redirect } from "react-router"; import { redirect } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { requireUserId } from "~/features/auth/core/user.server"; import { requireUserId } from "~/features/auth/core/user.server";
import * as CalendarRepository from "~/features/calendar/CalendarRepository.server"; import * as CalendarRepository from "~/features/calendar/CalendarRepository.server";
import * as ShowcaseTournaments from "~/features/front-page/core/ShowcaseTournaments.server"; import * as ShowcaseTournaments from "~/features/front-page/core/ShowcaseTournaments.server";

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import * as CalendarRepository from "~/features/calendar/CalendarRepository.server"; import * as CalendarRepository from "~/features/calendar/CalendarRepository.server";
import { MapPool } from "~/features/map-list-generator/core/map-pool"; import { MapPool } from "~/features/map-list-generator/core/map-pool";
import { rankedModesShort } from "~/modules/in-game-lists/modes"; import { rankedModesShort } from "~/modules/in-game-lists/modes";

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { type CalendarEventTag, TOURNAMENT_STAGE_TYPES } from "~/db/tables"; import { type CalendarEventTag, TOURNAMENT_STAGE_TYPES } from "~/db/tables";
import { TOURNAMENT } from "~/features/tournament/tournament-constants"; import { TOURNAMENT } from "~/features/tournament/tournament-constants";
import * as Progression from "~/features/tournament-bracket/core/Progression"; import * as Progression from "~/features/tournament-bracket/core/Progression";

View File

@ -1,4 +1,4 @@
import type { z } from "zod/v4"; import type { z } from "zod";
import type { CalendarEventTag, Tables } from "~/db/tables"; import type { CalendarEventTag, Tables } from "~/db/tables";
import type { calendarFiltersSearchParamsSchema } from "~/features/calendar/calendar-schemas"; import type { calendarFiltersSearchParamsSchema } from "~/features/calendar/calendar-schemas";
import type { ModeShortWithSpecial } from "~/modules/in-game-lists/types"; import type { ModeShortWithSpecial } from "~/modules/in-game-lists/types";

View File

@ -1,5 +1,5 @@
import { formatDistance } from "date-fns"; import { formatDistance } from "date-fns";
import { z } from "zod/v4"; import { z } from "zod";
import { logger } from "~/utils/logger"; import { logger } from "~/utils/logger";
const BSKY_URL = const BSKY_URL =

View File

@ -2,7 +2,7 @@ import type { FileUpload } from "@remix-run/form-data-parser";
import { parseFormData } from "@remix-run/form-data-parser"; import { parseFormData } from "@remix-run/form-data-parser";
import type { ActionFunctionArgs } from "react-router"; import type { ActionFunctionArgs } from "react-router";
import { redirect } from "react-router"; import { redirect } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { requireUser } from "~/features/auth/core/user.server"; import { requireUser } from "~/features/auth/core/user.server";
import * as TeamRepository from "~/features/team/TeamRepository.server"; import * as TeamRepository from "~/features/team/TeamRepository.server";
import { isTeamManager } from "~/features/team/team-utils"; import { isTeamManager } from "~/features/team/team-utils";

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { _action, id, safeJSONParse } from "~/utils/zod"; import { _action, id, safeJSONParse } from "~/utils/zod";
const validateManySchema = z.object({ const validateManySchema = z.object({

View File

@ -1,6 +1,6 @@
import type { ActionFunctionArgs } from "react-router"; import type { ActionFunctionArgs } from "react-router";
import { redirect } from "react-router"; import { redirect } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { requireUser } from "~/features/auth/core/user.server"; import { requireUser } from "~/features/auth/core/user.server";
import * as UserRepository from "~/features/user-page/UserRepository.server"; import * as UserRepository from "~/features/user-page/UserRepository.server";
import { errorToastIfFalsy, parseRequestPayload } from "~/utils/remix.server"; import { errorToastIfFalsy, parseRequestPayload } from "~/utils/remix.server";

View File

@ -1,5 +1,5 @@
import type { ActionFunctionArgs } from "react-router"; import type { ActionFunctionArgs } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { requireUser } from "~/features/auth/core/user.server"; import { requireUser } from "~/features/auth/core/user.server";
import { errorToastIfFalsy, parseRequestPayload } from "~/utils/remix.server"; import { errorToastIfFalsy, parseRequestPayload } from "~/utils/remix.server";
import { _action, id } from "~/utils/zod"; import { _action, id } from "~/utils/zod";

View File

@ -1,5 +1,5 @@
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { requireUser } from "~/features/auth/core/user.server"; import { requireUser } from "~/features/auth/core/user.server";
import * as QSettingsRepository from "~/features/sendouq-settings/QSettingsRepository.server"; import * as QSettingsRepository from "~/features/sendouq-settings/QSettingsRepository.server";
import * as UserRepository from "~/features/user-page/UserRepository.server"; import * as UserRepository from "~/features/user-page/UserRepository.server";

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { id } from "~/utils/zod"; import { id } from "~/utils/zod";
import { NOTIFICATIONS } from "./notifications-contants"; import { NOTIFICATIONS } from "./notifications-contants";

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { _action, actualNumber, trimmedString } from "~/utils/zod"; import { _action, actualNumber, trimmedString } from "~/utils/zod";
import { PLUS_SUGGESTION, PLUS_TIERS } from "./plus-suggestions-constants"; import { PLUS_SUGGESTION, PLUS_TIERS } from "./plus-suggestions-constants";

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import type { PlusVoteFromFE } from "~/features/plus-voting/core"; import type { PlusVoteFromFE } from "~/features/plus-voting/core";
import { assertType } from "~/utils/types"; import { assertType } from "~/utils/types";
import { safeJSONParse } from "~/utils/zod"; import { safeJSONParse } from "~/utils/zod";

View File

@ -1,6 +1,6 @@
import { add } from "date-fns"; import { add } from "date-fns";
import { type ActionFunctionArgs, redirect } from "react-router"; import { type ActionFunctionArgs, redirect } from "react-router";
import type { z } from "zod/v4"; import type { z } from "zod";
import type { Tables } from "~/db/tables"; import type { Tables } from "~/db/tables";
import { requireUser } from "~/features/auth/core/user.server"; import { requireUser } from "~/features/auth/core/user.server";
import { userIsBanned } from "~/features/ban/core/banned.server"; import { userIsBanned } from "~/features/ban/core/banned.server";

View File

@ -2,7 +2,7 @@ import clsx from "clsx";
import * as React from "react"; import * as React from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Link, useLoaderData } from "react-router"; import { Link, useLoaderData } from "react-router";
import type { z } from "zod/v4"; import type { z } from "zod";
import { Alert } from "~/components/Alert"; import { Alert } from "~/components/Alert";
import { SendouButton } from "~/components/elements/Button"; import { SendouButton } from "~/components/elements/Button";
import { SendouDialog } from "~/components/elements/Dialog"; import { SendouDialog } from "~/components/elements/Dialog";

View File

@ -2,7 +2,7 @@ import * as React from "react";
import { Controller, useFormContext, useWatch } from "react-hook-form"; import { Controller, useFormContext, useWatch } from "react-hook-form";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useLoaderData } from "react-router"; import { useLoaderData } from "react-router";
import type { z } from "zod/v4"; import type { z } from "zod";
import { TournamentSearch } from "~/components/elements/TournamentSearch"; import { TournamentSearch } from "~/components/elements/TournamentSearch";
import { DateFormField } from "~/components/form/DateFormField"; import { DateFormField } from "~/components/form/DateFormField";
import { SelectFormField } from "~/components/form/SelectFormField"; import { SelectFormField } from "~/components/form/SelectFormField";

View File

@ -4,7 +4,7 @@ import { useTranslation } from "react-i18next";
import type { MetaFunction } from "react-router"; import type { MetaFunction } from "react-router";
import { useLoaderData } from "react-router"; import { useLoaderData } from "react-router";
import * as R from "remeda"; import * as R from "remeda";
import type { z } from "zod/v4"; import type { z } from "zod";
import { AddNewButton } from "~/components/AddNewButton"; import { AddNewButton } from "~/components/AddNewButton";
import { LinkButton, SendouButton } from "~/components/elements/Button"; import { LinkButton, SendouButton } from "~/components/elements/Button";
import { useUser } from "~/features/auth/core/user"; import { useUser } from "~/features/auth/core/user";

View File

@ -1,5 +1,5 @@
import { add, sub } from "date-fns"; import { add, sub } from "date-fns";
import { z } from "zod/v4"; import { z } from "zod";
import { import {
_action, _action,
date, date,

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { SENDOUQ, SENDOUQ_BEST_OF } from "~/features/sendouq/q-constants"; import { SENDOUQ, SENDOUQ_BEST_OF } from "~/features/sendouq/q-constants";
import { import {
_action, _action,

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { languagesUnified } from "~/modules/i18n/config"; import { languagesUnified } from "~/modules/i18n/config";
import { import {
_action, _action,

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { import {
_action, _action,
deduplicate, deduplicate,

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { _action } from "~/utils/zod"; import { _action } from "~/utils/zod";
export const settingsEditSchema = z.union([ export const settingsEditSchema = z.union([

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { import {
_action, _action,
customCssVarObject, customCssVarObject,

View File

@ -7,7 +7,7 @@ import { arrayMove } from "@dnd-kit/sortable";
import JSONCrush from "jsoncrush"; import JSONCrush from "jsoncrush";
import * as React from "react"; import * as React from "react";
import { useSearchParams } from "react-router"; import { useSearchParams } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { import {
useSearchParamState, useSearchParamState,
useSearchParamStateEncoder, useSearchParamStateEncoder,

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { assertType } from "~/utils/types"; import { assertType } from "~/utils/types";
import { import {
hexCode, hexCode,

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { import {
_action, _action,
checkboxValueToBoolean, checkboxValueToBoolean,

View File

@ -1,5 +1,5 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import type { z } from "zod/v4"; import type { z } from "zod";
import { SendouButton } from "~/components/elements/Button"; import { SendouButton } from "~/components/elements/Button";
import { SendouDialog } from "~/components/elements/Dialog"; import { SendouDialog } from "~/components/elements/Dialog";
import { DateFormField } from "~/components/form/DateFormField"; import { DateFormField } from "~/components/form/DateFormField";

View File

@ -1,5 +1,5 @@
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { getUser } from "~/features/auth/core/user.server"; import { getUser } from "~/features/auth/core/user.server";
import type { SerializeFrom } from "~/utils/remix"; import type { SerializeFrom } from "~/utils/remix";
import { parseSafeSearchParams } from "~/utils/remix.server"; import { parseSafeSearchParams } from "~/utils/remix.server";

View File

@ -1,7 +1,7 @@
import { Controller, useFieldArray, useFormContext } from "react-hook-form"; import { Controller, useFieldArray, useFormContext } from "react-hook-form";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Link, useLoaderData } from "react-router"; import { Link, useLoaderData } from "react-router";
import type { z } from "zod/v4"; import type { z } from "zod";
import { FormMessage } from "~/components/FormMessage"; import { FormMessage } from "~/components/FormMessage";
import { AddFieldButton } from "~/components/form/AddFieldButton"; import { AddFieldButton } from "~/components/form/AddFieldButton";
import { FormFieldset } from "~/components/form/FormFieldset"; import { FormFieldset } from "~/components/form/FormFieldset";

View File

@ -1,5 +1,5 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import type { z } from "zod/v4"; import type { z } from "zod";
import { Alert } from "~/components/Alert"; import { Alert } from "~/components/Alert";
import { InputFormField } from "~/components/form/InputFormField"; import { InputFormField } from "~/components/form/InputFormField";
import { SendouForm } from "~/components/form/SendouForm"; import { SendouForm } from "~/components/form/SendouForm";

View File

@ -1,5 +1,5 @@
import { isFuture } from "date-fns"; import { isFuture } from "date-fns";
import { z } from "zod/v4"; import { z } from "zod";
import { TOURNAMENT_ORGANIZATION_ROLES } from "~/db/tables"; import { TOURNAMENT_ORGANIZATION_ROLES } from "~/db/tables";
import { TOURNAMENT_ORGANIZATION } from "~/features/tournament-organization/tournament-organization-constants"; import { TOURNAMENT_ORGANIZATION } from "~/features/tournament-organization/tournament-organization-constants";
import { dayMonthYearToDate } from "~/utils/dates"; import { dayMonthYearToDate } from "~/utils/dates";

View File

@ -1,5 +1,5 @@
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { notFoundIfFalsy, parseParams } from "~/utils/remix.server"; import { notFoundIfFalsy, parseParams } from "~/utils/remix.server";
import * as TournamentOrganizationRepository from "./TournamentOrganizationRepository.server"; import * as TournamentOrganizationRepository from "./TournamentOrganizationRepository.server";

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { import {
id, id,
processMany, processMany,

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { import {
_action, _action,
checkboxValueToBoolean, checkboxValueToBoolean,

View File

@ -1,5 +1,5 @@
import { type ActionFunction, redirect } from "react-router"; import { type ActionFunction, redirect } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { requireUser } from "~/features/auth/core/user.server"; import { requireUser } from "~/features/auth/core/user.server";
import * as BuildRepository from "~/features/builds/BuildRepository.server"; import * as BuildRepository from "~/features/builds/BuildRepository.server";
import { BUILD } from "~/features/builds/builds-constants"; import { BUILD } from "~/features/builds/builds-constants";

View File

@ -1,5 +1,5 @@
import { type ActionFunction, redirect } from "react-router"; import { type ActionFunction, redirect } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { BUILD_SORT_IDENTIFIERS } from "~/db/tables"; import { BUILD_SORT_IDENTIFIERS } from "~/db/tables";
import { requireUser } from "~/features/auth/core/user.server"; import { requireUser } from "~/features/auth/core/user.server";
import * as BuildRepository from "~/features/builds/BuildRepository.server"; import * as BuildRepository from "~/features/builds/BuildRepository.server";

View File

@ -1,5 +1,5 @@
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { requireUserId } from "~/features/auth/core/user.server"; import { requireUserId } from "~/features/auth/core/user.server";
import * as BuildRepository from "~/features/builds/BuildRepository.server"; import * as BuildRepository from "~/features/builds/BuildRepository.server";
import type { Ability } from "~/modules/in-game-lists/types"; import type { Ability } from "~/modules/in-game-lists/types";

View File

@ -1,5 +1,5 @@
import { useLoaderData } from "react-router"; import { useLoaderData } from "react-router";
import type { z } from "zod/v4"; import type { z } from "zod";
import { Divider } from "~/components/Divider"; import { Divider } from "~/components/Divider";
import { SendouButton } from "~/components/elements/Button"; import { SendouButton } from "~/components/elements/Button";
import { SendouDialog } from "~/components/elements/Dialog"; import { SendouDialog } from "~/components/elements/Dialog";

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { BADGE } from "~/features/badges/badges-constants"; import { BADGE } from "~/features/badges/badges-constants";
import { isCustomUrl } from "~/utils/urls"; import { isCustomUrl } from "~/utils/urls";
import { import {

View File

@ -1,5 +1,5 @@
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { DANGEROUS_CAN_ACCESS_DEV_CONTROLS } from "~/features/admin/core/dev-controls"; import { DANGEROUS_CAN_ACCESS_DEV_CONTROLS } from "~/features/admin/core/dev-controls";
import { getUserId } from "~/features/auth/core/user.server"; import { getUserId } from "~/features/auth/core/user.server";
import * as UserRepository from "~/features/user-page/UserRepository.server"; import * as UserRepository from "~/features/user-page/UserRepository.server";

View File

@ -1,5 +1,5 @@
import type { LoaderFunctionArgs } from "react-router"; import type { LoaderFunctionArgs } from "react-router";
import { z } from "zod/v4"; import { z } from "zod";
import { requireUser } from "~/features/auth/core/user.server"; import { requireUser } from "~/features/auth/core/user.server";
import { notFoundIfFalsy } from "~/utils/remix.server"; import { notFoundIfFalsy } from "~/utils/remix.server";
import { actualNumber, id } from "~/utils/zod"; import { actualNumber, id } from "~/utils/zod";

View File

@ -8,7 +8,7 @@ import {
} from "react-hook-form"; } from "react-hook-form";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useLoaderData } from "react-router"; import { useLoaderData } from "react-router";
import type { z } from "zod/v4"; import type { z } from "zod";
import { SendouButton } from "~/components/elements/Button"; import { SendouButton } from "~/components/elements/Button";
import { UserSearch } from "~/components/elements/UserSearch"; import { UserSearch } from "~/components/elements/UserSearch";
import { FormMessage } from "~/components/FormMessage"; import { FormMessage } from "~/components/FormMessage";

View File

@ -1,5 +1,5 @@
import { add } from "date-fns"; import { add } from "date-fns";
import { z } from "zod/v4"; import { z } from "zod";
import { import {
dayMonthYear, dayMonthYear,
id, id,

View File

@ -1,4 +1,4 @@
import type { z } from "zod/v4"; import type { z } from "zod";
import type { Tables } from "~/db/tables"; import type { Tables } from "~/db/tables";
import type { MainWeaponId } from "~/modules/in-game-lists/types"; import type { MainWeaponId } from "~/modules/in-game-lists/types";
import type { videoSchema } from "./vods-schemas"; import type { videoSchema } from "./vods-schemas";

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import { import {
TIER_1_ID, TIER_1_ID,
TIER_2_ID, TIER_2_ID,

View File

@ -1,4 +1,4 @@
import type { z } from "zod/v4"; import type { z } from "zod";
import { STAFF_DISCORD_IDS } from "~/features/admin/admin-constants"; import { STAFF_DISCORD_IDS } from "~/features/admin/admin-constants";
import * as UserRepository from "~/features/user-page/UserRepository.server"; import * as UserRepository from "~/features/user-page/UserRepository.server";
import { dateToDatabaseTimestamp } from "~/utils/dates"; import { dateToDatabaseTimestamp } from "~/utils/dates";

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
import type { Unpacked } from "~/utils/types"; import type { Unpacked } from "~/utils/types";
export const streamsSchema = z.object({ export const streamsSchema = z.object({

View File

@ -4,7 +4,7 @@ import type {
Params, Params,
} from "react-router"; } from "react-router";
import { expect } from "vitest"; import { expect } from "vitest";
import type { z } from "zod/v4"; import type { z } from "zod";
import { REGULAR_USER_TEST_ID } from "~/db/seed/constants"; import { REGULAR_USER_TEST_ID } from "~/db/seed/constants";
import { db, sql } from "~/db/sql"; import { db, sql } from "~/db/sql";
import { ADMIN_ID } from "~/features/admin/admin-constants"; import { ADMIN_ID } from "~/features/admin/admin-constants";

View File

@ -5,7 +5,7 @@ import { nanoid } from "nanoid";
import type { Ok, Result } from "neverthrow"; import type { Ok, Result } from "neverthrow";
import type { Params, UIMatch } from "react-router"; import type { Params, UIMatch } from "react-router";
import { data, redirect } from "react-router"; import { data, redirect } from "react-router";
import type { z } from "zod/v4"; import type { z } from "zod";
import type { navItems } from "~/components/layout/nav-items"; import type { navItems } from "~/components/layout/nav-items";
import { uploadStreamToS3 } from "~/features/img-upload/s3.server"; import { uploadStreamToS3 } from "~/features/img-upload/s3.server";
import invariant from "./invariant"; import invariant from "./invariant";

View File

@ -1,5 +1,5 @@
import type { ZodType } from "zod/v4"; import type { ZodType } from "zod";
import { z } from "zod/v4"; import { z } from "zod";
import { CUSTOM_CSS_VAR_COLORS } from "~/features/user-page/user-page-constants"; import { CUSTOM_CSS_VAR_COLORS } from "~/features/user-page/user-page-constants";
import { import {
abilities, abilities,

18
package-lock.json generated
View File

@ -67,7 +67,7 @@
"slugify": "^1.6.6", "slugify": "^1.6.6",
"swr": "^2.3.8", "swr": "^2.3.8",
"web-push": "^3.6.7", "web-push": "^3.6.7",
"zod": "^3.25.61" "zod": "^4.2.1"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "2.3.10", "@biomejs/biome": "2.3.10",
@ -10808,16 +10808,6 @@
"js-yaml": "bin/js-yaml.js" "js-yaml": "bin/js-yaml.js"
} }
}, },
"node_modules/knip/node_modules/zod": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/zod/-/zod-4.2.1.tgz",
"integrity": "sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
},
"node_modules/kysely": { "node_modules/kysely": {
"version": "0.28.9", "version": "0.28.9",
"resolved": "https://registry.npmjs.org/kysely/-/kysely-0.28.9.tgz", "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.28.9.tgz",
@ -15026,9 +15016,9 @@
} }
}, },
"node_modules/zod": { "node_modules/zod": {
"version": "3.25.76", "version": "4.2.1",
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "resolved": "https://registry.npmjs.org/zod/-/zod-4.2.1.tgz",
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "integrity": "sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==",
"license": "MIT", "license": "MIT",
"funding": { "funding": {
"url": "https://github.com/sponsors/colinhacks" "url": "https://github.com/sponsors/colinhacks"

View File

@ -89,7 +89,7 @@
"slugify": "^1.6.6", "slugify": "^1.6.6",
"swr": "^2.3.8", "swr": "^2.3.8",
"web-push": "^3.6.7", "web-push": "^3.6.7",
"zod": "^3.25.61" "zod": "^4.2.1"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "2.3.10", "@biomejs/biome": "2.3.10",

View File

@ -1,7 +1,7 @@
/** biome-ignore-all lint/suspicious/noConsole: Biome v2 migration */ /** biome-ignore-all lint/suspicious/noConsole: Biome v2 migration */
import fs from "node:fs"; import fs from "node:fs";
import path from "node:path"; import path from "node:path";
import { z } from "zod/v4"; import { z } from "zod";
import badgesJson from "../app/features/badges/homemade.json" with { import badgesJson from "../app/features/badges/homemade.json" with {
type: "json", type: "json",
}; };

View File

@ -10,7 +10,7 @@
import fs from "node:fs"; import fs from "node:fs";
import path from "node:path"; import path from "node:path";
import { fileURLToPath } from "node:url"; import { fileURLToPath } from "node:url";
import { z } from "zod/v4"; import { z } from "zod";
import type { import type {
MainWeaponParams, MainWeaponParams,
ParamsJson, ParamsJson,

View File

@ -1,7 +1,7 @@
// for testing use the command `npx tsx ./scripts/create-league-divisions.ts 6 'https://gist.githubusercontent.com/sendou-ink/38aa4d5d8426035ce178c09598ae627f/raw/17be9bb53a9f017c2097d0624f365d1c5a029f01/league.csv'` // for testing use the command `npx tsx ./scripts/create-league-divisions.ts 6 'https://gist.githubusercontent.com/sendou-ink/38aa4d5d8426035ce178c09598ae627f/raw/17be9bb53a9f017c2097d0624f365d1c5a029f01/league.csv'`
import "dotenv/config"; import "dotenv/config";
import { z } from "zod/v4"; import { z } from "zod";
import { db } from "~/db/sql"; import { db } from "~/db/sql";
import { ADMIN_ID } from "~/features/admin/admin-constants"; import { ADMIN_ID } from "~/features/admin/admin-constants";
import * as CalendarRepository from "~/features/calendar/CalendarRepository.server"; import * as CalendarRepository from "~/features/calendar/CalendarRepository.server";

View File

@ -1,4 +1,4 @@
import { z } from "zod/v4"; import { z } from "zod";
const placements = z.object({ const placements = z.object({
edges: z.array( edges: z.array(