chore(deps): upgrade npm dependencies

This commit is contained in:
Fu Diwei 2025-06-23 17:08:06 +08:00 committed by RHQYZ
parent d7d18d932a
commit cfee0e2b4a
204 changed files with 1023 additions and 1060 deletions

939
ui/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -11,34 +11,34 @@
}, },
"dependencies": { "dependencies": {
"@ant-design/icons": "^6.0.0", "@ant-design/icons": "^6.0.0",
"@ant-design/pro-components": "^2.8.7", "@ant-design/pro-components": "^2.8.9",
"@codemirror/lang-json": "^6.0.1", "@codemirror/lang-json": "^6.0.2",
"@codemirror/lang-yaml": "^6.1.2", "@codemirror/lang-yaml": "^6.1.2",
"@codemirror/language": "^6.11.0", "@codemirror/language": "^6.11.1",
"@codemirror/legacy-modes": "^6.5.1", "@codemirror/legacy-modes": "^6.5.1",
"@uiw/codemirror-extensions-basic-setup": "^4.23.12", "@uiw/codemirror-extensions-basic-setup": "^4.23.13",
"@uiw/codemirror-theme-vscode": "^4.23.12", "@uiw/codemirror-theme-vscode": "^4.23.13",
"@uiw/react-codemirror": "^4.23.12", "@uiw/react-codemirror": "^4.23.13",
"ahooks": "^3.8.5", "ahooks": "^3.8.5",
"antd": "^5.25.3", "antd": "^5.26.1",
"antd-zod": "^6.1.0", "antd-zod": "^7.0.0",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"cron-parser": "^5.2.0", "cron-parser": "^5.3.0",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"i18next": "^25.2.1", "i18next": "^25.2.1",
"i18next-browser-languagedetector": "^8.1.0", "i18next-browser-languagedetector": "^8.2.0",
"immer": "^10.1.1", "immer": "^10.1.1",
"lucide-react": "^0.511.0", "lucide-react": "^0.522.0",
"nanoid": "^5.1.5", "nanoid": "^5.1.5",
"pocketbase": "^0.26.0", "pocketbase": "^0.26.1",
"radash": "^12.1.0", "radash": "^12.1.1",
"react": "^18.3.1", "react": "^18.3.1",
"react-copy-to-clipboard": "^5.1.0", "react-copy-to-clipboard": "^5.1.0",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-i18next": "^15.5.2", "react-i18next": "^15.5.3",
"react-router-dom": "^7.6.1", "react-router-dom": "^7.6.2",
"tailwind-merge": "^2.6.0", "tailwind-merge": "^2.6.0",
"zod": "^3.25.28", "zod": "^3.25.67",
"zustand": "^5.0.5" "zustand": "^5.0.5"
}, },
"devDependencies": { "devDependencies": {
@ -48,22 +48,22 @@
"@types/react": "^18.3.12", "@types/react": "^18.3.12",
"@types/react-copy-to-clipboard": "^5.0.7", "@types/react-copy-to-clipboard": "^5.0.7",
"@types/react-dom": "^18.3.1", "@types/react-dom": "^18.3.1",
"@typescript-eslint/eslint-plugin": "^8.32.1", "@typescript-eslint/eslint-plugin": "^8.34.1",
"@typescript-eslint/parser": "^8.32.1", "@typescript-eslint/parser": "^8.34.1",
"@vitejs/plugin-legacy": "^6.1.1", "@vitejs/plugin-legacy": "^6.1.1",
"@vitejs/plugin-react": "^4.5.0", "@vitejs/plugin-react": "^4.6.0",
"autoprefixer": "^10.4.21", "autoprefixer": "^10.4.21",
"eslint": "^8.57.0", "eslint": "^8.57.0",
"eslint-config-prettier": "^10.1.5", "eslint-config-prettier": "^10.1.5",
"eslint-import-resolver-typescript": "^3.8.3", "eslint-import-resolver-typescript": "^3.8.3",
"eslint-plugin-import": "^2.31.0", "eslint-plugin-import": "^2.32.0",
"eslint-plugin-prettier": "^5.4.0", "eslint-plugin-prettier": "^5.5.0",
"eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.20", "eslint-plugin-react-refresh": "^0.4.20",
"eslint-plugin-tailwindcss": "^3.18.0", "eslint-plugin-tailwindcss": "^3.18.0",
"fs-extra": "^11.3.0", "fs-extra": "^11.3.0",
"postcss": "^8.5.3", "postcss": "^8.5.6",
"prettier": "^3.5.3", "prettier": "^3.6.0",
"tailwindcss": "^3.4.17", "tailwindcss": "^3.4.17",
"tailwindcss-animate": "^1.0.7", "tailwindcss-animate": "^1.0.7",
"typescript": "^5.8.3", "typescript": "^5.8.3",

View File

@ -2,7 +2,7 @@ import { forwardRef, useImperativeHandle, useMemo, useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import AccessProviderPicker from "@/components/provider/AccessProviderPicker"; import AccessProviderPicker from "@/components/provider/AccessProviderPicker";
import AccessProviderSelect from "@/components/provider/AccessProviderSelect"; import AccessProviderSelect from "@/components/provider/AccessProviderSelect";
@ -108,7 +108,7 @@ const AccessForm = forwardRef<AccessFormInstance, AccessFormProps>(({ className,
const formSchema = z.object({ const formSchema = z.object({
name: z name: z
.string({ message: t("access.form.name.placeholder") }) .string(t("access.form.name.placeholder"))
.min(1, t("access.form.name.placeholder")) .min(1, t("access.form.name.placeholder"))
.max(64, t("common.errmsg.string_max", { max: 64 })), .max(64, t("common.errmsg.string_max", { max: 64 })),
provider: z.nativeEnum(ACCESS_PROVIDERS, { provider: z.nativeEnum(ACCESS_PROVIDERS, {

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Select, Switch } from "antd"; import { Form, type FormInstance, Input, Select, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigFor1Panel } from "@/domain/access"; import { type AccessConfigFor1Panel } from "@/domain/access";
@ -27,7 +27,7 @@ const AccessForm1PanelConfig = ({ form: formInst, formName, disabled, initialVal
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
serverUrl: z.string().url(t("common.errmsg.url_invalid")), serverUrl: z.url(t("common.errmsg.url_invalid")),
apiVersion: z.string().nonempty(t("access.form.1panel_api_version.placeholder")), apiVersion: z.string().nonempty(t("access.form.1panel_api_version.placeholder")),
apiKey: z apiKey: z
.string() .string()

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForACMECA } from "@/domain/access"; import { type AccessConfigForACMECA } from "@/domain/access";
@ -25,7 +25,7 @@ const AccessFormACMECAConfig = ({ form: formInst, formName, disabled, initialVal
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
endpoint: z.string().url(t("common.errmsg.url_invalid")), endpoint: z.url(t("common.errmsg.url_invalid")),
eabKid: z.string().nullish(), eabKid: z.string().nullish(),
eabHmacKey: z.string().nullish(), eabHmacKey: z.string().nullish(),
}); });

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Select } from "antd"; import { Form, type FormInstance, Input, Select } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForACMEHttpReq } from "@/domain/access"; import { type AccessConfigForACMEHttpReq } from "@/domain/access";
@ -26,7 +26,7 @@ const AccessFormACMEHttpReqConfig = ({ form: formInst, formName, disabled, initi
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
endpoint: z.string().url(t("common.errmsg.url_invalid")), endpoint: z.url(t("common.errmsg.url_invalid")),
mode: z.string().nullish(), mode: z.string().nullish(),
username: z username: z
.string() .string()

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Switch } from "antd"; import { Form, type FormInstance, Input, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForAPISIX } from "@/domain/access"; import { type AccessConfigForAPISIX } from "@/domain/access";
@ -26,7 +26,7 @@ const AccessFormAPISIXConfig = ({ form: formInst, formName, disabled, initialVal
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
serverUrl: z.string().url(t("common.errmsg.url_invalid")), serverUrl: z.url(t("common.errmsg.url_invalid")),
apiKey: z.string().nonempty(t("access.form.apisix_api_key.placeholder")), apiKey: z.string().nonempty(t("access.form.apisix_api_key.placeholder")),
allowInsecureConnections: z.boolean().nullish(), allowInsecureConnections: z.boolean().nullish(),
}); });

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForAWS } from "@/domain/access"; import { type AccessConfigForAWS } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForAliyun } from "@/domain/access"; import { type AccessConfigForAliyun } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { AutoComplete, Form, type FormInstance, Input } from "antd"; import { AutoComplete, Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForAzure } from "@/domain/access"; import { type AccessConfigForAzure } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForBaiduCloud } from "@/domain/access"; import { type AccessConfigForBaiduCloud } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForBaishan } from "@/domain/access"; import { type AccessConfigForBaishan } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Switch } from "antd"; import { Form, type FormInstance, Input, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForBaotaPanel } from "@/domain/access"; import { type AccessConfigForBaotaPanel } from "@/domain/access";
@ -26,7 +26,7 @@ const AccessFormBaotaPanelConfig = ({ form: formInst, formName, disabled, initia
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
serverUrl: z.string().url(t("common.errmsg.url_invalid")), serverUrl: z.url(t("common.errmsg.url_invalid")),
apiKey: z.string().nonempty(t("access.form.baotapanel_api_key.placeholder")), apiKey: z.string().nonempty(t("access.form.baotapanel_api_key.placeholder")),
allowInsecureConnections: z.boolean().nullish(), allowInsecureConnections: z.boolean().nullish(),
}); });

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Switch } from "antd"; import { Form, type FormInstance, Input, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForBaotaWAF } from "@/domain/access"; import { type AccessConfigForBaotaWAF } from "@/domain/access";
@ -26,7 +26,7 @@ const AccessFormBaotaWAFConfig = ({ form: formInst, formName, disabled, initialV
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
serverUrl: z.string().url(t("common.errmsg.url_invalid")), serverUrl: z.url(t("common.errmsg.url_invalid")),
apiKey: z.string().nonempty(t("access.form.baotawaf_api_key.placeholder")), apiKey: z.string().nonempty(t("access.form.baotawaf_api_key.placeholder")),
allowInsecureConnections: z.boolean().nullish(), allowInsecureConnections: z.boolean().nullish(),
}); });

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForBunny } from "@/domain/access"; import { type AccessConfigForBunny } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForBytePlus } from "@/domain/access"; import { type AccessConfigForBytePlus } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForCMCCCloud } from "@/domain/access"; import { type AccessConfigForCMCCCloud } from "@/domain/access";
type AccessFormCMCCCloudConfigFieldValues = Nullish<AccessConfigForCMCCCloud>; type AccessFormCMCCCloudConfigFieldValues = Nullish<AccessConfigForCMCCCloud>;

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForCTCCCloud } from "@/domain/access"; import { type AccessConfigForCTCCCloud } from "@/domain/access";
type AccessFormCTCCCloudConfigFieldValues = Nullish<AccessConfigForCTCCCloud>; type AccessFormCTCCCloudConfigFieldValues = Nullish<AccessConfigForCTCCCloud>;

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForCacheFly } from "@/domain/access"; import { type AccessConfigForCacheFly } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Switch } from "antd"; import { Form, type FormInstance, Input, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForCdnfly } from "@/domain/access"; import { type AccessConfigForCdnfly } from "@/domain/access";
@ -27,7 +27,7 @@ const AccessFormCdnflyConfig = ({ form: formInst, formName, disabled, initialVal
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
serverUrl: z.string().url(t("common.errmsg.url_invalid")), serverUrl: z.url(t("common.errmsg.url_invalid")),
apiKey: z apiKey: z
.string() .string()
.min(1, t("access.form.cdnfly_api_key.placeholder")) .min(1, t("access.form.cdnfly_api_key.placeholder"))

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForClouDNS } from "@/domain/access"; import { type AccessConfigForClouDNS } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForCloudflare } from "@/domain/access"; import { type AccessConfigForCloudflare } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForConstellix } from "@/domain/access"; import { type AccessConfigForConstellix } from "@/domain/access";
type AccessFormConstellixConfigFieldValues = Nullish<AccessConfigForConstellix>; type AccessFormConstellixConfigFieldValues = Nullish<AccessConfigForConstellix>;

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForDNSLA } from "@/domain/access"; import { type AccessConfigForDNSLA } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForDeSEC } from "@/domain/access"; import { type AccessConfigForDeSEC } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForDigitalOcean } from "@/domain/access"; import { type AccessConfigForDigitalOcean } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForDingTalkBot } from "@/domain/access"; import { type AccessConfigForDingTalkBot } from "@/domain/access";
@ -26,7 +26,7 @@ const AccessFormDingTalkBotConfig = ({ form: formInst, formName, disabled, initi
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
webhookUrl: z.string().url(t("common.errmsg.url_invalid")), webhookUrl: z.url(t("common.errmsg.url_invalid")),
secret: z.string().nonempty(t("access.form.dingtalkbot_secret.placeholder")), secret: z.string().nonempty(t("access.form.dingtalkbot_secret.placeholder")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForDiscordBot } from "@/domain/access"; import { type AccessConfigForDiscordBot } from "@/domain/access";
@ -26,7 +26,7 @@ const AccessFormDiscordBotConfig = ({ form: formInst, formName, disabled, initia
const formSchema = z.object({ const formSchema = z.object({
botToken: z botToken: z
.string({ message: t("access.form.discordbot_token.placeholder") }) .string(t("access.form.discordbot_token.placeholder"))
.min(1, t("access.form.discordbot_token.placeholder")) .min(1, t("access.form.discordbot_token.placeholder"))
.max(256, t("common.errmsg.string_max", { max: 256 })), .max(256, t("common.errmsg.string_max", { max: 256 })),
defaultChannelId: z.string().nullish(), defaultChannelId: z.string().nullish(),

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForDogeCloud } from "@/domain/access"; import { type AccessConfigForDogeCloud } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForDuckDNS } from "@/domain/access"; import { type AccessConfigForDuckDNS } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForDynv6 } from "@/domain/access"; import { type AccessConfigForDynv6 } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForEdgio } from "@/domain/access"; import { type AccessConfigForEdgio } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, InputNumber, Switch } from "antd"; import { Form, type FormInstance, Input, InputNumber, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForEmail } from "@/domain/access"; import { type AccessConfigForEmail } from "@/domain/access";
import { validEmailAddress, validPortNumber } from "@/utils/validators"; import { validEmailAddress, validPortNumber } from "@/utils/validators";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Radio, Switch } from "antd"; import { Form, type FormInstance, Input, Radio, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForFlexCDN } from "@/domain/access"; import { type AccessConfigForFlexCDN } from "@/domain/access";
@ -28,10 +28,8 @@ const AccessFormFlexCDNConfig = ({ form: formInst, formName, disabled, initialVa
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
serverUrl: z.string().url(t("common.errmsg.url_invalid")), serverUrl: z.url(t("common.errmsg.url_invalid")),
role: z.union([z.literal("user"), z.literal("admin")], { role: z.literal(["user", "admin"], t("access.form.flexcdn_api_role.placeholder")),
message: t("access.form.flexcdn_api_role.placeholder"),
}),
accessKeyId: z.string().nonempty(t("access.form.flexcdn_access_key_id.placeholder")), accessKeyId: z.string().nonempty(t("access.form.flexcdn_access_key_id.placeholder")),
accessKey: z.string().nonempty(t("access.form.flexcdn_access_key.placeholder")), accessKey: z.string().nonempty(t("access.form.flexcdn_access_key.placeholder")),
allowInsecureConnections: z.boolean().nullish(), allowInsecureConnections: z.boolean().nullish(),

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForGcore } from "@/domain/access"; import { type AccessConfigForGcore } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForGname } from "@/domain/access"; import { type AccessConfigForGname } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForGoDaddy } from "@/domain/access"; import { type AccessConfigForGoDaddy } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Radio, Switch } from "antd"; import { Form, type FormInstance, Input, Radio, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForGoEdge } from "@/domain/access"; import { type AccessConfigForGoEdge } from "@/domain/access";
@ -28,10 +28,8 @@ const AccessFormGoEdgeConfig = ({ form: formInst, formName, disabled, initialVal
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
serverUrl: z.string().url(t("common.errmsg.url_invalid")), serverUrl: z.url(t("common.errmsg.url_invalid")),
role: z.union([z.literal("user"), z.literal("admin")], { role: z.literal(["user", "admin"], t("access.form.goedge_api_role.placeholder")),
message: t("access.form.goedge_api_role.placeholder"),
}),
accessKeyId: z.string().nonempty(t("access.form.goedge_access_key_id.placeholder")), accessKeyId: z.string().nonempty(t("access.form.goedge_access_key_id.placeholder")),
accessKey: z.string().nonempty(t("access.form.goedge_access_key.placeholder")), accessKey: z.string().nonempty(t("access.form.goedge_access_key.placeholder")),
allowInsecureConnections: z.boolean().nullish(), allowInsecureConnections: z.boolean().nullish(),

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForGoogleTrustServices } from "@/domain/access"; import { type AccessConfigForGoogleTrustServices } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForHetzner } from "@/domain/access"; import { type AccessConfigForHetzner } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForHuaweiCloud } from "@/domain/access"; import { type AccessConfigForHuaweiCloud } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForJDCloud } from "@/domain/access"; import { type AccessConfigForJDCloud } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance } from "antd"; import { Form, type FormInstance } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import TextFileInput from "@/components/TextFileInput"; import TextFileInput from "@/components/TextFileInput";
import { type AccessConfigForKubernetes } from "@/domain/access"; import { type AccessConfigForKubernetes } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForLarkBot } from "@/domain/access"; import { type AccessConfigForLarkBot } from "@/domain/access";
@ -25,7 +25,7 @@ const AccessFormLarkBotConfig = ({ form: formInst, formName, disabled, initialVa
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
webhookUrl: z.string().url(t("common.errmsg.url_invalid")), webhookUrl: z.url(t("common.errmsg.url_invalid")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Radio, Select, Switch } from "antd"; import { Form, type FormInstance, Input, Radio, Select, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForLeCDN } from "@/domain/access"; import { type AccessConfigForLeCDN } from "@/domain/access";
@ -29,10 +29,8 @@ const AccessFormLeCDNConfig = ({ form: formInst, formName, disabled, initialValu
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
serverUrl: z.string().url(t("common.errmsg.url_invalid")), serverUrl: z.url(t("common.errmsg.url_invalid")),
role: z.union([z.literal("client"), z.literal("master")], { role: z.literal(["client", "master"], t("access.form.lecdn_api_role.placeholder")),
message: t("access.form.lecdn_api_role.placeholder"),
}),
username: z.string().nonempty(t("access.form.lecdn_username.placeholder")), username: z.string().nonempty(t("access.form.lecdn_username.placeholder")),
password: z.string().nonempty(t("access.form.lecdn_password.placeholder")), password: z.string().nonempty(t("access.form.lecdn_password.placeholder")),
allowInsecureConnections: z.boolean().nullish(), allowInsecureConnections: z.boolean().nullish(),

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForMattermost } from "@/domain/access"; import { type AccessConfigForMattermost } from "@/domain/access";
@ -27,7 +27,7 @@ const AccessFormMattermostConfig = ({ form: formInst, formName, disabled, initia
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
serverUrl: z.string().url(t("common.errmsg.url_invalid")), serverUrl: z.url(t("common.errmsg.url_invalid")),
username: z.string().nonempty(t("access.form.mattermost_username.placeholder")), username: z.string().nonempty(t("access.form.mattermost_username.placeholder")),
password: z.string().nonempty(t("access.form.mattermost_password.placeholder")), password: z.string().nonempty(t("access.form.mattermost_password.placeholder")),
defaultChannelId: z.string().nullish(), defaultChannelId: z.string().nullish(),

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForNS1 } from "@/domain/access"; import { type AccessConfigForNS1 } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForNameDotCom } from "@/domain/access"; import { type AccessConfigForNameDotCom } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForNameSilo } from "@/domain/access"; import { type AccessConfigForNameSilo } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForNamecheap } from "@/domain/access"; import { type AccessConfigForNamecheap } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForNetcup } from "@/domain/access"; import { type AccessConfigForNetcup } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForNetlify } from "@/domain/access"; import { type AccessConfigForNetlify } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForPorkbun } from "@/domain/access"; import { type AccessConfigForPorkbun } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Switch } from "antd"; import { Form, type FormInstance, Input, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForPowerDNS } from "@/domain/access"; import { type AccessConfigForPowerDNS } from "@/domain/access";
@ -26,7 +26,7 @@ const AccessFormPowerDNSConfig = ({ form: formInst, formName, disabled, initialV
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
serverUrl: z.string().url(t("common.errmsg.url_invalid")), serverUrl: z.url(t("common.errmsg.url_invalid")),
apiKey: z apiKey: z
.string() .string()
.min(1, t("access.form.powerdns_api_key.placeholder")) .min(1, t("access.form.powerdns_api_key.placeholder"))

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Switch } from "antd"; import { Form, type FormInstance, Input, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForProxmoxVE } from "@/domain/access"; import { type AccessConfigForProxmoxVE } from "@/domain/access";
@ -26,7 +26,7 @@ const AccessFormProxmoxVEConfig = ({ form: formInst, formName, disabled, initial
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
serverUrl: z.string().url(t("common.errmsg.url_invalid")), serverUrl: z.url(t("common.errmsg.url_invalid")),
apiToken: z.string().nonempty(t("access.form.proxmoxve_api_token.placeholder")), apiToken: z.string().nonempty(t("access.form.proxmoxve_api_token.placeholder")),
apiTokenSecret: z.string().nullish(), apiTokenSecret: z.string().nullish(),
allowInsecureConnections: z.boolean().nullish(), allowInsecureConnections: z.boolean().nullish(),

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForQiniu } from "@/domain/access"; import { type AccessConfigForQiniu } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForRainYun } from "@/domain/access"; import { type AccessConfigForRainYun } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Switch } from "antd"; import { Form, type FormInstance, Input, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForRatPanel } from "@/domain/access"; import { type AccessConfigForRatPanel } from "@/domain/access";
@ -27,7 +27,7 @@ const AccessFormRatPanelConfig = ({ form: formInst, formName, disabled, initialV
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
serverUrl: z.string().url(t("common.errmsg.url_invalid")), serverUrl: z.url(t("common.errmsg.url_invalid")),
accessTokenId: z.preprocess((v) => Number(v), z.number().positive(t("access.form.ratpanel_access_token_id.placeholder"))), accessTokenId: z.preprocess((v) => Number(v), z.number().positive(t("access.form.ratpanel_access_token_id.placeholder"))),
accessToken: z.string().nonempty(t("access.form.ratpanel_access_token.placeholder")), accessToken: z.string().nonempty(t("access.form.ratpanel_access_token.placeholder")),
allowInsecureConnections: z.boolean().nullish(), allowInsecureConnections: z.boolean().nullish(),

View File

@ -2,7 +2,7 @@ import { useTranslation } from "react-i18next";
import { ArrowDownOutlined, ArrowUpOutlined, CloseOutlined, PlusOutlined } from "@ant-design/icons"; import { ArrowDownOutlined, ArrowUpOutlined, CloseOutlined, PlusOutlined } from "@ant-design/icons";
import { Button, Collapse, Form, type FormInstance, Input, InputNumber, Select, Space } from "antd"; import { Button, Collapse, Form, type FormInstance, Input, InputNumber, Select, Space } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import Show from "@/components/Show"; import Show from "@/components/Show";
import TextFileInput from "@/components/TextFileInput"; import TextFileInput from "@/components/TextFileInput";
@ -44,9 +44,7 @@ const AccessFormSSHConfig = ({ form: formInst, formName, disabled, initialValues
.int(t("access.form.ssh_port.placeholder")) .int(t("access.form.ssh_port.placeholder"))
.refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")) .refine((v) => validPortNumber(v), t("common.errmsg.port_invalid"))
), ),
authMethod: z.union([z.literal(AUTH_METHOD_NONE), z.literal(AUTH_METHOD_PASSWORD), z.literal(AUTH_METHOD_KEY)], { authMethod: z.literal([AUTH_METHOD_NONE, AUTH_METHOD_PASSWORD, AUTH_METHOD_KEY], t("access.form.ssh_auth_method.placeholder")),
message: t("access.form.ssh_auth_method.placeholder"),
}),
username: z username: z
.string() .string()
.min(1, t("access.form.ssh_username.placeholder")) .min(1, t("access.form.ssh_username.placeholder"))
@ -55,12 +53,18 @@ const AccessFormSSHConfig = ({ form: formInst, formName, disabled, initialValues
.string() .string()
.max(64, t("common.errmsg.string_max", { max: 64 })) .max(64, t("common.errmsg.string_max", { max: 64 }))
.nullish() .nullish()
.refine((v) => fieldAuthMethod !== AUTH_METHOD_PASSWORD || !!v?.trim(), t("access.form.ssh_password.placeholder")), .refine((v) => {
if (fieldAuthMethod !== AUTH_METHOD_PASSWORD) return true;
return !!v?.trim();
}, t("access.form.ssh_password.placeholder")),
key: z key: z
.string() .string()
.max(20480, t("common.errmsg.string_max", { max: 20480 })) .max(20480, t("common.errmsg.string_max", { max: 20480 }))
.nullish() .nullish()
.refine((v) => fieldAuthMethod !== AUTH_METHOD_KEY || !!v?.trim(), t("access.form.ssh_key.placeholder")), .refine((v) => {
if (fieldAuthMethod !== AUTH_METHOD_KEY) return true;
return !!v?.trim();
}, t("access.form.ssh_key.placeholder")),
keyPassphrase: z keyPassphrase: z
.string() .string()
.max(20480, t("common.errmsg.string_max", { max: 20480 })) .max(20480, t("common.errmsg.string_max", { max: 20480 }))
@ -77,9 +81,7 @@ const AccessFormSSHConfig = ({ form: formInst, formName, disabled, initialValues
.int(t("access.form.ssh_port.placeholder")) .int(t("access.form.ssh_port.placeholder"))
.refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")) .refine((v) => validPortNumber(v), t("common.errmsg.port_invalid"))
), ),
authMethod: z.union([z.literal(AUTH_METHOD_NONE), z.literal(AUTH_METHOD_PASSWORD), z.literal(AUTH_METHOD_KEY)], { authMethod: z.literal([AUTH_METHOD_NONE, AUTH_METHOD_PASSWORD, AUTH_METHOD_KEY], t("access.form.ssh_auth_method.placeholder")),
message: t("access.form.ssh_auth_method.placeholder"),
}),
username: z username: z
.string() .string()
.min(1, t("access.form.ssh_username.placeholder")) .min(1, t("access.form.ssh_username.placeholder"))
@ -97,7 +99,7 @@ const AccessFormSSHConfig = ({ form: formInst, formName, disabled, initialValues
.max(20480, t("common.errmsg.string_max", { max: 20480 })) .max(20480, t("common.errmsg.string_max", { max: 20480 }))
.nullish(), .nullish(),
}), }),
{ message: t("access.form.ssh_jump_servers.errmsg.invalid") } { error: t("access.form.ssh_jump_servers.errmsg.invalid") }
) )
.nullish(), .nullish(),
}); });

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForSSLCom } from "@/domain/access"; import { type AccessConfigForSSLCom } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Switch } from "antd"; import { Form, type FormInstance, Input, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForSafeLine } from "@/domain/access"; import { type AccessConfigForSafeLine } from "@/domain/access";
@ -26,7 +26,7 @@ const AccessFormSafeLineConfig = ({ form: formInst, formName, disabled, initialV
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
serverUrl: z.string().url(t("common.errmsg.url_invalid")), serverUrl: z.url(t("common.errmsg.url_invalid")),
apiToken: z apiToken: z
.string() .string()
.min(1, t("access.form.safeline_api_token.placeholder")) .min(1, t("access.form.safeline_api_token.placeholder"))

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForSlackBot } from "@/domain/access"; import { type AccessConfigForSlackBot } from "@/domain/access";
@ -26,7 +26,7 @@ const AccessFormSlackBotConfig = ({ form: formInst, formName, disabled, initialV
const formSchema = z.object({ const formSchema = z.object({
botToken: z botToken: z
.string({ message: t("access.form.slackbot_token.placeholder") }) .string(t("access.form.slackbot_token.placeholder"))
.min(1, t("access.form.slackbot_token.placeholder")) .min(1, t("access.form.slackbot_token.placeholder"))
.max(256, t("common.errmsg.string_max", { max: 256 })), .max(256, t("common.errmsg.string_max", { max: 256 })),
defaultChannelId: z.string().nullish(), defaultChannelId: z.string().nullish(),

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForTelegramBot } from "@/domain/access"; import { type AccessConfigForTelegramBot } from "@/domain/access";
@ -26,7 +26,7 @@ const AccessFormTelegramBotConfig = ({ form: formInst, formName, disabled, initi
const formSchema = z.object({ const formSchema = z.object({
botToken: z botToken: z
.string({ message: t("access.form.telegrambot_token.placeholder") }) .string(t("access.form.telegrambot_token.placeholder"))
.min(1, t("access.form.telegrambot_token.placeholder")) .min(1, t("access.form.telegrambot_token.placeholder"))
.max(256, t("common.errmsg.string_max", { max: 256 })), .max(256, t("common.errmsg.string_max", { max: 256 })),
defaultChatId: z defaultChatId: z

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForTencentCloud } from "@/domain/access"; import { type AccessConfigForTencentCloud } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForUCloud } from "@/domain/access"; import { type AccessConfigForUCloud } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForUniCloud } from "@/domain/access"; import { type AccessConfigForUniCloud } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForUpyun } from "@/domain/access"; import { type AccessConfigForUpyun } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForVercel } from "@/domain/access"; import { type AccessConfigForVercel } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForVolcEngine } from "@/domain/access"; import { type AccessConfigForVolcEngine } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForWangsu } from "@/domain/access"; import { type AccessConfigForWangsu } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForWeComBot } from "@/domain/access"; import { type AccessConfigForWeComBot } from "@/domain/access";
@ -25,7 +25,7 @@ const AccessFormWeComBotConfig = ({ form: formInst, formName, disabled, initialV
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
webhookUrl: z.string().url(t("common.errmsg.url_invalid")), webhookUrl: z.url(t("common.errmsg.url_invalid")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -2,7 +2,7 @@ import { useTranslation } from "react-i18next";
import { DownOutlined as DownOutlinedIcon } from "@ant-design/icons"; import { DownOutlined as DownOutlinedIcon } from "@ant-design/icons";
import { Alert, Button, Dropdown, Form, type FormInstance, Input, Select, Switch } from "antd"; import { Alert, Button, Dropdown, Form, type FormInstance, Input, Select, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import CodeInput from "@/components/CodeInput"; import CodeInput from "@/components/CodeInput";
import Show from "@/components/Show"; import Show from "@/components/Show";
@ -49,10 +49,8 @@ const AccessFormWebhookConfig = ({ form: formInst, formName, disabled, initialVa
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
url: z.string().url(t("common.errmsg.url_invalid")), url: z.url(t("common.errmsg.url_invalid")),
method: z.union([z.literal("GET"), z.literal("POST"), z.literal("PUT"), z.literal("PATCH"), z.literal("DELETE")], { method: z.literal(["GET", "POST", "PUT", "PATCH", "DELETE"], t("access.form.webhook_method.placeholder")),
message: t("access.form.webhook_method.placeholder"),
}),
headers: z headers: z
.string() .string()
.nullish() .nullish()

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForWestcn } from "@/domain/access"; import { type AccessConfigForWestcn } from "@/domain/access";

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type AccessConfigForZeroSSL } from "@/domain/access"; import { type AccessConfigForZeroSSL } from "@/domain/access";

View File

@ -1,18 +1,15 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, Input } from "antd"; import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
const NotifyChannelEditFormBarkFields = () => { const NotifyChannelEditFormBarkFields = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
serverUrl: z serverUrl: z.url(t("common.errmsg.url_invalid")).nullish(),
.string({ message: t("settings.notification.channel.form.bark_server_url.placeholder") })
.url(t("common.errmsg.url_invalid"))
.nullish(),
deviceKey: z deviceKey: z
.string({ message: t("settings.notification.channel.form.bark_device_key.placeholder") }) .string(t("settings.notification.channel.form.bark_device_key.placeholder"))
.nonempty(t("settings.notification.channel.form.bark_device_key.placeholder")), .nonempty(t("settings.notification.channel.form.bark_device_key.placeholder")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,17 +1,17 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, Input } from "antd"; import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
const NotifyChannelEditFormDingTalkFields = () => { const NotifyChannelEditFormDingTalkFields = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
accessToken: z accessToken: z
.string({ message: t("settings.notification.channel.form.dingtalk_access_token.placeholder") }) .string(t("settings.notification.channel.form.dingtalk_access_token.placeholder"))
.nonempty(t("settings.notification.channel.form.dingtalk_access_token.placeholder")), .nonempty(t("settings.notification.channel.form.dingtalk_access_token.placeholder")),
secret: z secret: z
.string({ message: t("settings.notification.channel.form.dingtalk_secret.placeholder") }) .string(t("settings.notification.channel.form.dingtalk_secret.placeholder"))
.nonempty(t("settings.notification.channel.form.dingtalk_secret.placeholder")), .nonempty(t("settings.notification.channel.form.dingtalk_secret.placeholder")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, Input, InputNumber, Switch } from "antd"; import { Form, Input, InputNumber, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { validPortNumber } from "@/utils/validators"; import { validPortNumber } from "@/utils/validators";
@ -10,27 +10,24 @@ const NotifyChannelEditFormEmailFields = () => {
const formSchema = z.object({ const formSchema = z.object({
smtpHost: z smtpHost: z
.string({ message: t("settings.notification.channel.form.email_smtp_host.placeholder") }) .string(t("settings.notification.channel.form.email_smtp_host.placeholder"))
.min(1, t("settings.notification.channel.form.email_smtp_host.placeholder")) .min(1, t("settings.notification.channel.form.email_smtp_host.placeholder"))
.max(256, t("common.errmsg.string_max", { max: 256 })), .max(256, t("common.errmsg.string_max", { max: 256 })),
smtpPort: z.preprocess( smtpPort: z.preprocess(
(v) => Number(v), (v) => Number(v),
z z.number().refine((v) => validPortNumber(v), t("common.errmsg.port_invalid"))
.number({ message: t("settings.notification.channel.form.email_smtp_port.placeholder") })
.int(t("settings.notification.channel.form.email_smtp_port.placeholder"))
.refine((v) => validPortNumber(v), t("common.errmsg.port_invalid"))
), ),
smtpTLS: z.boolean().nullish(), smtpTLS: z.boolean().nullish(),
username: z username: z
.string({ message: t("settings.notification.channel.form.email_username.placeholder") }) .string(t("settings.notification.channel.form.email_username.placeholder"))
.min(1, t("settings.notification.channel.form.email_username.placeholder")) .min(1, t("settings.notification.channel.form.email_username.placeholder"))
.max(256, t("common.errmsg.string_max", { max: 256 })), .max(256, t("common.errmsg.string_max", { max: 256 })),
password: z password: z
.string({ message: t("settings.notification.channel.form.email_password.placeholder") }) .string(t("settings.notification.channel.form.email_password.placeholder"))
.min(1, t("settings.notification.channel.form.email_password.placeholder")) .min(1, t("settings.notification.channel.form.email_password.placeholder"))
.max(256, t("common.errmsg.string_max", { max: 256 })), .max(256, t("common.errmsg.string_max", { max: 256 })),
senderAddress: z.string({ message: t("settings.notification.channel.form.email_sender_address.placeholder") }).email(t("common.errmsg.email_invalid")), senderAddress: z.email(t("common.errmsg.email_invalid")),
receiverAddress: z.string({ message: t("settings.notification.channel.form.email_receiver_address.placeholder") }).email(t("common.errmsg.email_invalid")), receiverAddress: z.email(t("common.errmsg.email_invalid")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);
const formInst = Form.useFormInstance<z.infer<typeof formSchema>>(); const formInst = Form.useFormInstance<z.infer<typeof formSchema>>();

View File

@ -1,20 +1,15 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, Input } from "antd"; import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
const NotifyChannelEditFormGotifyFields = () => { const NotifyChannelEditFormGotifyFields = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
url: z.string({ message: t("settings.notification.channel.form.gotify_url.placeholder") }).url({ message: t("common.errmsg.url_invalid") }), url: z.url(t("common.errmsg.url_invalid")),
token: z.string({ message: t("settings.notification.channel.form.gotify_token.placeholder") }), token: z.string(t("settings.notification.channel.form.gotify_token.placeholder")),
priority: z.preprocess( priority: z.preprocess((val) => Number(val), z.number().gte(0, t("settings.notification.channel.form.gotify_priority.error.gte0"))),
(val) => Number(val),
z
.number({ message: t("settings.notification.channel.form.gotify_priority.placeholder") })
.gte(0, { message: t("settings.notification.channel.form.gotify_priority.error.gte0") })
),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,13 +1,13 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, Input } from "antd"; import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
const NotifyChannelEditFormLarkFields = () => { const NotifyChannelEditFormLarkFields = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
webhookUrl: z.string({ message: t("settings.notification.channel.form.lark_webhook_url.placeholder") }).url(t("common.errmsg.url_invalid")), webhookUrl: z.url(t("common.errmsg.url_invalid")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,21 +1,21 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, Input } from "antd"; import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
const NotifyChannelEditFormMattermostFields = () => { const NotifyChannelEditFormMattermostFields = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
serverUrl: z.string({ message: t("settings.notification.channel.form.mattermost_server_url.placeholder") }).url(t("common.errmsg.url_invalid")), serverUrl: z.url(t("common.errmsg.url_invalid")),
channelId: z channelId: z
.string({ message: t("settings.notification.channel.form.mattermost_channel_id.placeholder") }) .string(t("settings.notification.channel.form.mattermost_channel_id.placeholder"))
.nonempty(t("settings.notification.channel.form.mattermost_channel_id.placeholder")), .nonempty(t("settings.notification.channel.form.mattermost_channel_id.placeholder")),
username: z username: z
.string({ message: t("settings.notification.channel.form.mattermost_username.placeholder") }) .string(t("settings.notification.channel.form.mattermost_username.placeholder"))
.nonempty(t("settings.notification.channel.form.mattermost_username.placeholder")), .nonempty(t("settings.notification.channel.form.mattermost_username.placeholder")),
password: z password: z
.string({ message: t("settings.notification.channel.form.mattermost_password.placeholder") }) .string(t("settings.notification.channel.form.mattermost_password.placeholder"))
.nonempty(t("settings.notification.channel.form.mattermost_password.placeholder")), .nonempty(t("settings.notification.channel.form.mattermost_password.placeholder")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,13 +1,13 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, Input } from "antd"; import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
const NotifyChannelEditFormPushPlusFields = () => { const NotifyChannelEditFormPushPlusFields = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
token: z.string({ message: t("settings.notification.channel.form.pushplus_token.placeholder") }), token: z.string(t("settings.notification.channel.form.pushplus_token.placeholder")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,17 +1,17 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, Input } from "antd"; import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
const NotifyChannelEditFormPushoverFields = () => { const NotifyChannelEditFormPushoverFields = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
token: z token: z
.string({ message: t("settings.notification.channel.form.pushover_token.placeholder") }) .string(t("settings.notification.channel.form.pushover_token.placeholder"))
.nonempty(t("settings.notification.channel.form.pushover_token.placeholder")), .nonempty(t("settings.notification.channel.form.pushover_token.placeholder")),
user: z user: z
.string({ message: t("settings.notification.channel.form.pushover_user.placeholder") }) .string(t("settings.notification.channel.form.pushover_user.placeholder"))
.nonempty(t("settings.notification.channel.form.pushover_user.placeholder")), .nonempty(t("settings.notification.channel.form.pushover_user.placeholder")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,13 +1,13 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, Input } from "antd"; import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
const NotifyChannelEditFormServerChanFields = () => { const NotifyChannelEditFormServerChanFields = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
url: z.string({ message: t("settings.notification.channel.form.serverchan_url.placeholder") }).url(t("common.errmsg.url_invalid")), url: z.url(t("common.errmsg.url_invalid")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,18 +1,18 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, Input } from "antd"; import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
const NotifyChannelEditFormTelegramFields = () => { const NotifyChannelEditFormTelegramFields = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
apiToken: z apiToken: z
.string({ message: t("settings.notification.channel.form.telegram_api_token.placeholder") }) .string(t("settings.notification.channel.form.telegram_api_token.placeholder"))
.min(1, t("settings.notification.channel.form.telegram_api_token.placeholder")) .min(1, t("settings.notification.channel.form.telegram_api_token.placeholder"))
.max(256, t("common.errmsg.string_max", { max: 256 })), .max(256, t("common.errmsg.string_max", { max: 256 })),
chatId: z chatId: z
.string({ message: t("settings.notification.channel.form.telegram_chat_id.placeholder") }) .string(t("settings.notification.channel.form.telegram_chat_id.placeholder"))
.min(1, t("settings.notification.channel.form.telegram_chat_id.placeholder")) .min(1, t("settings.notification.channel.form.telegram_chat_id.placeholder"))
.max(64, t("common.errmsg.string_max", { max: 64 })), .max(64, t("common.errmsg.string_max", { max: 64 })),
}); });

View File

@ -1,13 +1,13 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, Input } from "antd"; import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
const NotifyChannelEditFormWeComFields = () => { const NotifyChannelEditFormWeComFields = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
webhookUrl: z.string({ message: t("settings.notification.channel.form.wecom_webhook_url.placeholder") }).url({ message: t("common.errmsg.url_invalid") }), webhookUrl: z.url(t("common.errmsg.url_invalid")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,13 +1,13 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, Input } from "antd"; import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
const NotifyChannelEditFormWebhookFields = () => { const NotifyChannelEditFormWebhookFields = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
url: z.string({ message: t("settings.notification.channel.form.webhook_url.placeholder") }).url(t("common.errmsg.url_invalid")), url: z.url(t("common.errmsg.url_invalid")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -4,7 +4,7 @@ import { useRequest } from "ahooks";
import { Button, Form, Input, Skeleton, message, notification } from "antd"; import { Button, Form, Input, Skeleton, message, notification } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { ClientResponseError } from "pocketbase"; import { ClientResponseError } from "pocketbase";
import { z } from "zod"; import { z } from "zod/v4";
import Show from "@/components/Show"; import Show from "@/components/Show";
import { type NotifyTemplatesSettingsContent, SETTINGS_NAMES, defaultNotifyTemplate } from "@/domain/settings"; import { type NotifyTemplatesSettingsContent, SETTINGS_NAMES, defaultNotifyTemplate } from "@/domain/settings";

View File

@ -10,7 +10,7 @@ import {
import { useControllableValue } from "ahooks"; import { useControllableValue } from "ahooks";
import { AutoComplete, Button, Divider, Flex, Form, type FormInstance, Input, InputNumber, Select, Switch, Tooltip, Typography } from "antd"; import { AutoComplete, Button, Divider, Flex, Form, type FormInstance, Input, InputNumber, Select, Switch, Tooltip, Typography } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import AccessEditModal from "@/components/access/AccessEditModal"; import AccessEditModal from "@/components/access/AccessEditModal";
import AccessSelect from "@/components/access/AccessSelect"; import AccessSelect from "@/components/access/AccessSelect";
@ -60,22 +60,20 @@ const ApplyNodeConfigForm = forwardRef<ApplyNodeConfigFormInstance, ApplyNodeCon
const { accesses } = useAccessesStore(useZustandShallowSelector("accesses")); const { accesses } = useAccessesStore(useZustandShallowSelector("accesses"));
const formSchema = z.object({ const formSchema = z.object({
domains: z.string({ message: t("workflow_node.apply.form.domains.placeholder") }).refine((v) => { domains: z.string(t("workflow_node.apply.form.domains.placeholder")).refine((v) => {
if (!v) return false; if (!v) return false;
return String(v) return String(v)
.split(MULTIPLE_INPUT_SEPARATOR) .split(MULTIPLE_INPUT_SEPARATOR)
.every((e) => validDomainName(e, { allowWildcard: true })); .every((e) => validDomainName(e, { allowWildcard: true }));
}, t("common.errmsg.domain_invalid")), }, t("common.errmsg.domain_invalid")),
contactEmail: z.string({ message: t("workflow_node.apply.form.contact_email.placeholder") }).email(t("common.errmsg.email_invalid")), contactEmail: z.email(t("common.errmsg.email_invalid")),
challengeType: z.string().nullish(), challengeType: z.string().nullish(),
provider: z.string({ message: t("workflow_node.apply.form.provider.placeholder") }).nonempty(t("workflow_node.apply.form.provider.placeholder")), provider: z.string(t("workflow_node.apply.form.provider.placeholder")).nonempty(t("workflow_node.apply.form.provider.placeholder")),
providerAccessId: z providerAccessId: z.string(t("workflow_node.apply.form.provider_access.placeholder")).min(1, t("workflow_node.apply.form.provider_access.placeholder")),
.string({ message: t("workflow_node.apply.form.provider_access.placeholder") })
.min(1, t("workflow_node.apply.form.provider_access.placeholder")),
providerConfig: z.any().nullish(), providerConfig: z.any().nullish(),
caProvider: z.string({ message: t("workflow_node.apply.form.ca_provider.placeholder") }).nullish(), caProvider: z.string(t("workflow_node.apply.form.ca_provider.placeholder")).nullish(),
caProviderAccessId: z caProviderAccessId: z
.string({ message: t("workflow_node.apply.form.ca_provider_access.placeholder") }) .string(t("workflow_node.apply.form.ca_provider_access.placeholder"))
.nullish() .nullish()
.refine((v) => { .refine((v) => {
if (!fieldCAProvider) return true; if (!fieldCAProvider) return true;
@ -84,14 +82,13 @@ const ApplyNodeConfigForm = forwardRef<ApplyNodeConfigFormInstance, ApplyNodeCon
return !!provider?.builtin || !!v; return !!provider?.builtin || !!v;
}, t("workflow_node.apply.form.ca_provider_access.placeholder")), }, t("workflow_node.apply.form.ca_provider_access.placeholder")),
caProviderConfig: z.any().nullish(), caProviderConfig: z.any().nullish(),
keyAlgorithm: z keyAlgorithm: z.string(t("workflow_node.apply.form.key_algorithm.placeholder")).nonempty(t("workflow_node.apply.form.key_algorithm.placeholder")),
.string({ message: t("workflow_node.apply.form.key_algorithm.placeholder") })
.nonempty(t("workflow_node.apply.form.key_algorithm.placeholder")),
nameservers: z nameservers: z
.string() .string()
.nullish() .nullish()
.refine((v) => { .refine((v) => {
if (!v) return true; if (!v) return true;
return String(v) return String(v)
.split(MULTIPLE_INPUT_SEPARATOR) .split(MULTIPLE_INPUT_SEPARATOR)
.every((e) => validIPv4Address(e) || validIPv6Address(e) || validDomainName(e)); .every((e) => validIPv4Address(e) || validIPv6Address(e) || validDomainName(e));

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
type ApplyNodeConfigFormAWSRoute53ConfigFieldValues = Nullish<{ type ApplyNodeConfigFormAWSRoute53ConfigFieldValues = Nullish<{
region: string; region: string;
@ -33,11 +33,9 @@ const ApplyNodeConfigFormAWSRoute53Config = ({
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
region: z region: z.string(t("workflow_node.apply.form.aws_route53_region.placeholder")).nonempty(t("workflow_node.apply.form.aws_route53_region.placeholder")),
.string({ message: t("workflow_node.apply.form.aws_route53_region.placeholder") })
.nonempty(t("workflow_node.apply.form.aws_route53_region.placeholder")),
hostedZoneId: z hostedZoneId: z
.string({ message: t("workflow_node.apply.form.aws_route53_hosted_zone_id.placeholder") }) .string(t("workflow_node.apply.form.aws_route53_hosted_zone_id.placeholder"))
.nonempty(t("workflow_node.apply.form.aws_route53_hosted_zone_id.placeholder")), .nonempty(t("workflow_node.apply.form.aws_route53_hosted_zone_id.placeholder")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
type ApplyNodeConfigFormAliyunESAConfigFieldValues = Nullish<{ type ApplyNodeConfigFormAliyunESAConfigFieldValues = Nullish<{
region: string; region: string;
@ -23,9 +23,7 @@ const ApplyNodeConfigFormAliyunESAConfig = ({ form: formInst, formName, disabled
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
region: z region: z.string(t("workflow_node.apply.form.aliyun_esa_region.placeholder")).nonempty(t("workflow_node.apply.form.aliyun_esa_region.placeholder")),
.string({ message: t("workflow_node.apply.form.aliyun_esa_region.placeholder") })
.nonempty(t("workflow_node.apply.form.aliyun_esa_region.placeholder")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
type ApplyNodeConfigFormHuaweiCloudDNSConfigFieldValues = Nullish<{ type ApplyNodeConfigFormHuaweiCloudDNSConfigFieldValues = Nullish<{
region: string; region: string;
@ -32,7 +32,7 @@ const ApplyNodeConfigFormHuaweiCloudDNSConfig = ({
const formSchema = z.object({ const formSchema = z.object({
region: z region: z
.string({ message: t("workflow_node.apply.form.huaweicloud_dns_region.placeholder") }) .string(t("workflow_node.apply.form.huaweicloud_dns_region.placeholder"))
.nonempty(t("workflow_node.apply.form.huaweicloud_dns_region.placeholder")), .nonempty(t("workflow_node.apply.form.huaweicloud_dns_region.placeholder")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
type ApplyNodeConfigFormJDCloudDNSConfigFieldValues = Nullish<{ type ApplyNodeConfigFormJDCloudDNSConfigFieldValues = Nullish<{
regionId: string; regionId: string;
@ -32,7 +32,7 @@ const ApplyNodeConfigFormJDCloudDNSConfig = ({
const formSchema = z.object({ const formSchema = z.object({
regionId: z regionId: z
.string({ message: t("workflow_node.apply.form.jdcloud_dns_region_id.placeholder") }) .string(t("workflow_node.apply.form.jdcloud_dns_region_id.placeholder"))
.nonempty(t("workflow_node.apply.form.jdcloud_dns_region_id.placeholder")), .nonempty(t("workflow_node.apply.form.jdcloud_dns_region_id.placeholder")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
type ApplyNodeConfigFormTencentCloudEOConfigFieldValues = Nullish<{ type ApplyNodeConfigFormTencentCloudEOConfigFieldValues = Nullish<{
zoneId: string; zoneId: string;
@ -30,7 +30,7 @@ const ApplyNodeConfigFormTencentCloudEOConfig = ({
const formSchema = z.object({ const formSchema = z.object({
zoneId: z zoneId: z
.string({ message: t("workflow_node.apply.form.tencentcloud_eo_zone_id.placeholder") }) .string(t("workflow_node.apply.form.tencentcloud_eo_zone_id.placeholder"))
.nonempty(t("workflow_node.apply.form.tencentcloud_eo_zone_id.placeholder")), .nonempty(t("workflow_node.apply.form.tencentcloud_eo_zone_id.placeholder")),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -2,7 +2,7 @@ import { forwardRef, memo, useImperativeHandle, useRef } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance } from "antd"; import { Form, type FormInstance } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import { type Expr, type WorkflowNodeConfigForCondition, defaultNodeConfigForCondition } from "@/domain/workflow"; import { type Expr, type WorkflowNodeConfigForCondition, defaultNodeConfigForCondition } from "@/domain/workflow";
import { useAntdForm } from "@/hooks"; import { useAntdForm } from "@/hooks";

View File

@ -3,7 +3,7 @@ import { useTranslation } from "react-i18next";
import { PlusOutlined as PlusOutlinedIcon, QuestionCircleOutlined as QuestionCircleOutlinedIcon } from "@ant-design/icons"; import { PlusOutlined as PlusOutlinedIcon, QuestionCircleOutlined as QuestionCircleOutlinedIcon } from "@ant-design/icons";
import { Button, Divider, Flex, Form, type FormInstance, Select, Switch, Tooltip, Typography, theme } from "antd"; import { Button, Divider, Flex, Form, type FormInstance, Select, Switch, Tooltip, Typography, theme } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import AccessEditModal from "@/components/access/AccessEditModal"; import AccessEditModal from "@/components/access/AccessEditModal";
import AccessSelect from "@/components/access/AccessSelect"; import AccessSelect from "@/components/access/AccessSelect";
@ -137,12 +137,10 @@ const DeployNodeConfigForm = forwardRef<DeployNodeConfigFormInstance, DeployNode
const { getWorkflowOuptutBeforeId } = useWorkflowStore(useZustandShallowSelector(["updateNode", "getWorkflowOuptutBeforeId"])); const { getWorkflowOuptutBeforeId } = useWorkflowStore(useZustandShallowSelector(["updateNode", "getWorkflowOuptutBeforeId"]));
const formSchema = z.object({ const formSchema = z.object({
certificate: z certificate: z.string(t("workflow_node.deploy.form.certificate.placeholder")).nonempty(t("workflow_node.deploy.form.certificate.placeholder")),
.string({ message: t("workflow_node.deploy.form.certificate.placeholder") }) provider: z.string(t("workflow_node.deploy.form.provider.placeholder")).nonempty(t("workflow_node.deploy.form.provider.placeholder")),
.nonempty(t("workflow_node.deploy.form.certificate.placeholder")),
provider: z.string({ message: t("workflow_node.deploy.form.provider.placeholder") }).nonempty(t("workflow_node.deploy.form.provider.placeholder")),
providerAccessId: z providerAccessId: z
.string({ message: t("workflow_node.deploy.form.provider_access.placeholder") }) .string(t("workflow_node.deploy.form.provider_access.placeholder"))
.nullish() .nullish()
.refine((v) => { .refine((v) => {
if (!fieldProvider) return true; if (!fieldProvider) return true;

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Switch } from "antd"; import { Form, type FormInstance, Switch } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
type DeployNodeConfigForm1PanelConsoleConfigFieldValues = Nullish<{ type DeployNodeConfigForm1PanelConsoleConfigFieldValues = Nullish<{
autoRestart?: boolean; autoRestart?: boolean;

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Select } from "antd"; import { Form, type FormInstance, Input, Select } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import Show from "@/components/Show"; import Show from "@/components/Show";
@ -38,9 +38,7 @@ const DeployNodeConfigForm1PanelSiteConfig = ({
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
resourceType: z.union([z.literal(RESOURCE_TYPE_WEBSITE), z.literal(RESOURCE_TYPE_CERTIFICATE)], { resourceType: z.literal([RESOURCE_TYPE_WEBSITE, RESOURCE_TYPE_CERTIFICATE], t("workflow_node.deploy.form.1panel_site_resource_type.placeholder")),
message: t("workflow_node.deploy.form.1panel_site_resource_type.placeholder"),
}),
websiteId: z websiteId: z
.union([z.string(), z.number().int()]) .union([z.string(), z.number().int()])
.nullish() .nullish()

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Select } from "antd"; import { Form, type FormInstance, Input, Select } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
import Show from "@/components/Show"; import Show from "@/components/Show";
@ -31,9 +31,7 @@ const DeployNodeConfigFormAPISIXConfig = ({ form: formInst, formName, disabled,
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
resourceType: z.literal(RESOURCE_TYPE_CERTIFICATE, { resourceType: z.literal(RESOURCE_TYPE_CERTIFICATE, t("workflow_node.deploy.form.apisix_resource_type.placeholder")),
message: t("workflow_node.deploy.form.apisix_resource_type.placeholder"),
}),
certificateId: z certificateId: z
.string() .string()
.nullish() .nullish()

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd"; import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
type DeployNodeConfigFormAWSACMConfigFieldValues = Nullish<{ type DeployNodeConfigFormAWSACMConfigFieldValues = Nullish<{
region: string; region: string;
@ -24,9 +24,7 @@ const DeployNodeConfigFormAWSACMConfig = ({ form: formInst, formName, disabled,
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
region: z region: z.string(t("workflow_node.deploy.form.aws_acm_region.placeholder")).nonempty(t("workflow_node.deploy.form.aws_acm_region.placeholder")),
.string({ message: t("workflow_node.deploy.form.aws_acm_region.placeholder") })
.nonempty(t("workflow_node.deploy.form.aws_acm_region.placeholder")),
certificateArn: z.string().nullish(), certificateArn: z.string().nullish(),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);

View File

@ -1,7 +1,7 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Select } from "antd"; import { Form, type FormInstance, Input, Select } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod"; import { z } from "zod/v4";
type DeployNodeConfigFormAWSCloudFrontConfigFieldValues = Nullish<{ type DeployNodeConfigFormAWSCloudFrontConfigFieldValues = Nullish<{
region: string; region: string;

Some files were not shown because too many files have changed in this diff Show More