refactor(ui): clean code

This commit is contained in:
Fu Diwei
2025-12-22 17:32:26 +08:00
parent 58b3180043
commit 96a1e90950
94 changed files with 320 additions and 339 deletions
+13 -2
View File
@@ -3,9 +3,11 @@ import { useTranslation } from "react-i18next";
import { RouterProvider } from "react-router-dom";
import { Alert, App, ConfigProvider, type ThemeConfig, theme } from "antd";
import { type Locale } from "antd/es/locale";
import AntdLocaleEnUs from "antd/locale/en_US";
import AntdLocaleEnUS from "antd/locale/en_US";
import AntdLocaleZhCN from "antd/locale/zh_CN";
import dayjs from "dayjs";
import { z } from "zod";
import { en as ZodLocaleEnUs, zhCN as ZodLocaleZhCN } from "zod/locales";
import "dayjs/locale/zh-cn";
import { useBrowserTheme } from "@/hooks";
@@ -13,14 +15,20 @@ import { localeNames } from "@/i18n";
import { router } from "@/routers";
const antdLocalesMap: Record<string, Locale> = {
[localeNames.EN]: AntdLocaleEnUS,
[localeNames.ZH]: AntdLocaleZhCN,
[localeNames.EN]: AntdLocaleEnUs,
};
const antdThemesMap: Record<string, ThemeConfig> = {
["light"]: { algorithm: theme.defaultAlgorithm },
["dark"]: { algorithm: theme.darkAlgorithm },
};
const zodLocalesMap: Record<string, typeof ZodLocaleEnUs> = {
[localeNames.EN]: ZodLocaleEnUs,
[localeNames.ZH]: ZodLocaleZhCN,
};
const RootApp = () => {
const { i18n } = useTranslation();
@@ -32,13 +40,16 @@ const RootApp = () => {
const handleLanguageChanged = () => {
setAntdLocale(antdLocalesMap[i18n.language]);
dayjs.locale(i18n.language);
z.config(zodLocalesMap[i18n.language]?.());
};
i18n.on("initialized", handleLanguageChanged);
i18n.on("languageChanged", handleLanguageChanged);
useLayoutEffect(() => {
handleLanguageChanged();
return () => {
i18n.off("initialized", handleLanguageChanged);
i18n.off("languageChanged", handleLanguageChanged);
};
}, [i18n]);
+2 -6
View File
@@ -6,6 +6,7 @@ import { type AccessModel } from "@/domain/access";
import { accessProvidersMap } from "@/domain/provider";
import { useZustandShallowSelector } from "@/hooks";
import { useAccessesStore } from "@/stores/access";
import { matchSearchOption } from "@/utils/search";
export interface AccessTypeSelectProps extends Omit<SelectProps, "labelRender" | "loading" | "options" | "optionLabelProp" | "optionRender"> {
onFilter?: (value: string, option: AccessModel) => boolean;
@@ -56,12 +57,7 @@ const AccessSelect = ({ onFilter, ...props }: AccessTypeSelectProps) => {
<Select
{...props}
showSearch={{
filterOption: (inputValue, option) => {
if (!option) return false;
const value = inputValue.toLowerCase();
return option.label.toLowerCase().includes(value);
},
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
optionFilterProp: "label",
}}
labelRender={({ value }) => {
@@ -4,6 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod/v4";
import FileTextInput from "@/components/FileTextInput";
import { isJsonObject } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -53,16 +54,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType<typeof getI18n> }) =
return z.object({
serverUrl: z.url(t("common.errmsg.url_invalid")),
credentials: z.string().refine((v) => {
if (!v) return false;
try {
const obj = JSON.parse(v);
return typeof obj === "object" && !Array.isArray(obj);
} catch {
return false;
}
}, t("access.form.acmedns_credentials.errmsg.json_invalid")),
credentials: z.string().refine((v) => isJsonObject(v), t("access.form.acmedns_credentials.errmsg.json_invalid")),
});
};
@@ -3,6 +3,7 @@ import { AutoComplete, Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { matchSearchOption } from "@/utils/search";
import { useFormNestedFieldsContext } from "./_context";
const AccessConfigFormFieldsProviderAzure = () => {
@@ -78,7 +79,7 @@ const AccessConfigFormFieldsProviderAzure = () => {
options={["public", "azureusgovernment", "azurechina"].map((value) => ({ value }))}
placeholder={t("access.form.azure_cloud_name.placeholder")}
showSearch={{
filterOption: (inputValue, option) => option!.value.toLowerCase().includes(inputValue.toLowerCase()),
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
}}
/>
</Form.Item>
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validEmailAddress, validPortNumber } from "@/utils/validators";
import { isEmail, isPortNumber } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -128,7 +128,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType<typeof getI18n> }) =
return z.object({
smtpHost: z.string().nonempty(t("access.form.email_smtp_host.placeholder")),
smtpPort: z.coerce.number().refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
smtpPort: z.coerce.number().refine((v) => isPortNumber(v), t("common.errmsg.port_invalid")),
smtpTls: z.boolean().nullish(),
username: z.string().nonempty(t("access.form.email_username.placeholder")),
password: z.string().nonempty(t("access.form.email_password.placeholder")),
@@ -139,7 +139,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType<typeof getI18n> }) =
.nullish()
.refine((v) => {
if (!v) return true;
return validEmailAddress(v);
return isEmail(v);
}, t("common.errmsg.email_invalid")),
allowInsecureConnections: z.boolean().nullish(),
});
@@ -4,6 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { matchSearchOption } from "@/utils/search";
import { useFormNestedFieldsContext } from "./_context";
@@ -30,7 +31,7 @@ const AccessConfigFormFieldsProviderOVHcloud = () => {
options={["ovh-eu", "ovh-us", "ovh-ca"].map((value) => ({ value }))}
placeholder={t("access.form.ovhcloud_endpoint.placeholder")}
showSearch={{
filterOption: (inputValue, option) => option!.value.toLowerCase().includes(inputValue.toLowerCase()),
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
}}
/>
</Form.Item>
@@ -3,7 +3,7 @@ import { Form, Input, InputNumber, Select } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName, validIPv4Address, validIPv6Address, validPortNumber } from "@/utils/validators";
import { isDomain, isIPv4, isIPv6, isPortNumber } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -81,8 +81,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType<typeof getI18n> }) =
const { t } = i18n;
return z.object({
host: z.string().refine((v) => validDomainName(v) || validIPv4Address(v) || validIPv6Address(v), t("common.errmsg.host_invalid")),
port: z.coerce.number().refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
host: z.string().refine((v) => isDomain(v) || isIPv4(v) || isIPv6(v), t("common.errmsg.host_invalid")),
port: z.coerce.number().refine((v) => isPortNumber(v), t("common.errmsg.port_invalid")),
tsigAlgorithm: z.string().nonempty(t("access.form.rfc2136_tsig_algorithm.placeholder")),
tsigKey: z.string().nullish(),
tsigSecret: z.string().nullish(),
@@ -72,7 +72,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType<typeof getI18n> }) =
return z.object({
serverUrl: z.url(t("common.errmsg.url_invalid")),
accessTokenId: z.coerce.number().int(t("access.form.ratpanel_access_token_id.placeholder")).positive(t("access.form.ratpanel_access_token_id.placeholder")),
accessTokenId: z.coerce.number().int().positive(),
accessToken: z.string().nonempty(t("access.form.ratpanel_access_token.placeholder")),
allowInsecureConnections: z.boolean().nullish(),
});
@@ -4,10 +4,10 @@ import { Button, Collapse, Form, Input, InputNumber, Radio } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import FileTextInput from "@/components/FileTextInput";
import Show from "@/components/Show";
import { mergeCls } from "@/utils/css";
import { validDomainName, validIPv4Address, validIPv6Address, validPortNumber } from "@/utils/validators";
import { isDomain, isIPv4, isIPv6, isPortNumber } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -234,11 +234,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType<typeof getI18n> }) =
const baseSchema = z
.object({
host: z.string().refine((v) => validDomainName(v) || validIPv4Address(v) || validIPv6Address(v), t("common.errmsg.host_invalid")),
port: z.coerce
.number()
.int(t("access.form.ssh_port.placeholder"))
.refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
host: z.string().refine((v) => isDomain(v) || isIPv4(v) || isIPv6(v), t("common.errmsg.host_invalid")),
port: z.coerce.number().refine((v) => isPortNumber(v), t("common.errmsg.port_invalid")),
authMethod: z.literal([AUTH_METHOD_NONE, AUTH_METHOD_PASSWORD, AUTH_METHOD_KEY], t("access.form.ssh_auth_method.placeholder")),
username: z.string().nonempty(t("access.form.ssh_username.placeholder")),
password: z.string().nullish(),
@@ -7,6 +7,7 @@ import { z } from "zod";
import CodeTextInput from "@/components/CodeTextInput";
import Show from "@/components/Show";
import Tips from "@/components/Tips";
import { isJsonObject } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -362,13 +363,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType<typeof getI18n> }) =
.nullish()
.refine((v) => {
if (!v) return true;
try {
const obj = JSON.parse(v);
return typeof obj === "object" && !Array.isArray(obj);
} catch {
return false;
}
return isJsonObject(v);
}, t("access.form.webhook_data.errmsg.json_invalid")),
allowInsecureConnections: z.boolean().nullish(),
});
@@ -3,6 +3,7 @@ import { useTranslation } from "react-i18next";
import { Avatar, Select, Typography, theme } from "antd";
import { type ACMEDns01Provider, acmeDns01ProvidersMap } from "@/domain/provider";
import { matchSearchOption } from "@/utils/search";
import { type SharedSelectProps, useSelectDataSource } from "./_shared";
@@ -67,14 +68,7 @@ const ACMEDns01ProviderSelect = ({ showAvailability, onFilter, ...props }: ACMED
optionLabelProp={void 0}
optionRender={(option) => renderOption(option.data.value as string)}
showSearch={{
filterOption: (inputValue, option) => {
if (!option) return false;
if (!option.label) return false;
if (!option.value) return false;
const value = inputValue.toLowerCase();
return String(option.value).toLowerCase().includes(value) || String(option.label).toLowerCase().includes(value);
},
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
}}
/>
);
@@ -3,6 +3,7 @@ import { useTranslation } from "react-i18next";
import { Avatar, Select, Typography, theme } from "antd";
import { type ACMEHttp01Provider, acmeHttp01ProvidersMap } from "@/domain/provider";
import { matchSearchOption } from "@/utils/search";
import { type SharedSelectProps, useSelectDataSource } from "./_shared";
@@ -67,14 +68,7 @@ const ACMEHttp01ProviderSelect = ({ showAvailability, onFilter, ...props }: ACME
optionLabelProp={void 0}
optionRender={(option) => renderOption(option.data.value as string)}
showSearch={{
filterOption: (inputValue, option) => {
if (!option) return false;
if (!option.label) return false;
if (!option.value) return false;
const value = inputValue.toLowerCase();
return String(option.value).toLowerCase().includes(value) || String(option.label).toLowerCase().includes(value);
},
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
}}
/>
);
@@ -4,6 +4,7 @@ import { Avatar, Select, Tag, Typography, theme } from "antd";
import Show from "@/components/Show";
import { ACCESS_USAGES, type AccessProvider, type AccessUsageType, accessProvidersMap } from "@/domain/provider";
import { matchSearchOption } from "@/utils/search";
import { type SharedSelectProps } from "./_shared";
@@ -95,14 +96,7 @@ const AccessProviderSelect = ({ showOptionTags, onFilter, ...props }: AccessProv
optionLabelProp={void 0}
optionRender={(option) => renderOption(option.data.value)}
showSearch={{
filterOption: (inputValue, option) => {
if (!option) return false;
if (!option.label) return false;
if (!option.value) return false;
const value = inputValue.toLowerCase();
return String(option.value).toLowerCase().includes(value) || String(option.label).toLowerCase().includes(value);
},
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
optionFilterProp: "label",
}}
/>
@@ -6,6 +6,7 @@ import { Avatar, Select, Typography, theme } from "antd";
import { type CAProvider, caProvidersMap } from "@/domain/provider";
import { useZustandShallowSelector } from "@/hooks";
import { useSSLProviderSettingsStore } from "@/stores/settings";
import { matchSearchOption } from "@/utils/search";
import { type SharedSelectProps, useSelectDataSource } from "./_shared";
@@ -119,12 +120,7 @@ const CAProviderSelect = ({ showAvailability, showDefault, onFilter, ...props }:
filterOption: (inputValue, option) => {
if (option?.value === "") return true; // 始终显示系统默认项
if (!option) return false;
if (!option.label) return false;
if (!option.value) return false;
const value = inputValue.toLowerCase();
return String(option.value).toLowerCase().includes(value) || String(option.label).toLowerCase().includes(value);
return matchSearchOption(inputValue, option!);
},
}}
value={value}
@@ -3,6 +3,7 @@ import { useTranslation } from "react-i18next";
import { Avatar, Select, Typography, theme } from "antd";
import { type DeploymentProvider, deploymentProvidersMap } from "@/domain/provider";
import { matchSearchOption } from "@/utils/search";
import { type SharedSelectProps, useSelectDataSource } from "./_shared";
@@ -67,14 +68,7 @@ const DeploymentProviderSelect = ({ showAvailability = false, onFilter, ...props
optionLabelProp={void 0}
optionRender={(option) => renderOption(option.data.value as string)}
showSearch={{
filterOption: (inputValue, option) => {
if (!option) return false;
if (!option.label) return false;
if (!option.value) return false;
const value = inputValue.toLowerCase();
return String(option.value).toLowerCase().includes(value) || String(option.label).toLowerCase().includes(value);
},
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
}}
/>
);
@@ -3,6 +3,7 @@ import { useTranslation } from "react-i18next";
import { Avatar, Select, Typography, theme } from "antd";
import { type NotificationProvider, notificationProvidersMap } from "@/domain/provider";
import { matchSearchOption } from "@/utils/search";
import { type SharedSelectProps, useSelectDataSource } from "./_shared";
@@ -67,14 +68,7 @@ const NotificationProviderSelect = ({ showAvailability = false, onFilter, ...pro
optionLabelProp={void 0}
optionRender={(option) => renderOption(option.data.value as string)}
showSearch={{
filterOption: (inputValue, option) => {
if (!option) return false;
if (!option.label) return false;
if (!option.value) return false;
const value = inputValue.toLowerCase();
return String(option.value).toLowerCase().includes(value) || String(option.label).toLowerCase().includes(value);
},
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
}}
/>
);
+2 -2
View File
@@ -6,6 +6,7 @@ import { type SelectProps } from "antd";
import { useZustandShallowSelector } from "@/hooks";
import { useAccessesStore } from "@/stores/access";
import { matchSearchString } from "@/utils/search";
type Provider = { type: string; name: string };
@@ -123,8 +124,7 @@ export const usePickerDataSource = <T extends Provider>({
})
.filter((provider) => {
if (keyword) {
const value = keyword.toLowerCase();
return provider.type.toLowerCase().includes(value) || t(provider.name).toLowerCase().includes(value);
return matchSearchString(keyword, provider.type) || matchSearchString(keyword, t(provider.name));
}
return true;
@@ -24,7 +24,8 @@ import { useAntdForm, useZustandShallowSelector } from "@/hooks";
import { useAccessesStore } from "@/stores/access";
import { useContactEmailsStore } from "@/stores/settings";
import { getErrMsg } from "@/utils/error";
import { validDomainName, validIPv4Address, validIPv6Address } from "@/utils/validators";
import { matchSearchOption } from "@/utils/search";
import { isDomain, isIPv4, isIPv6 } from "@/utils/validator";
import { FormNestedFieldsContextProvider, NodeFormContextProvider } from "./_context";
import BizApplyNodeConfigFieldsProvider from "./BizApplyNodeConfigFieldsProvider";
@@ -530,7 +531,7 @@ const BizApplyNodeConfigForm = ({ node, ...props }: BizApplyNodeConfigFormProps)
}))}
placeholder={t("workflow_node.apply.form.preferred_chain.placeholder")}
showSearch={{
filterOption: (inputValue, option) => "value" in option! && String(option.value).toLowerCase().includes(inputValue.toLowerCase()),
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
}}
/>
</Form.Item>
@@ -558,7 +559,7 @@ const BizApplyNodeConfigForm = ({ node, ...props }: BizApplyNodeConfigFormProps)
}))}
placeholder={t("workflow_node.apply.form.acme_profile.placeholder")}
showSearch={{
filterOption: (inputValue, option) => "value" in option! && String(option.value).toLowerCase().includes(inputValue.toLowerCase()),
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
}}
/>
</Form.Item>
@@ -860,22 +861,22 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return z
.object({
domains: z.string(t("workflow_node.apply.form.domains.placeholder")).refine((v) => {
domains: z.string().refine((v) => {
if (!v) return false;
return String(v)
.split(MULTIPLE_INPUT_SEPARATOR)
.every((e) => validDomainName(e, { allowWildcard: true }));
.every((e) => isDomain(e, { allowWildcard: true }));
}, t("common.errmsg.domain_invalid")),
contactEmail: z.email(t("common.errmsg.email_invalid")),
challengeType: z.enum([CHALLENGE_TYPE_DNS01, CHALLENGE_TYPE_HTTP01], t("workflow_node.apply.form.challenge_type.placeholder")),
provider: z.string(t("workflow_node.apply.form.provider.placeholder")).nonempty(t("workflow_node.apply.form.provider.placeholder")),
providerAccessId: z.string(t("workflow_node.apply.form.provider_access.placeholder")).nullish(),
provider: z.string().nonempty(t("workflow_node.apply.form.provider.placeholder")),
providerAccessId: z.string().nullish(),
providerConfig: z.any().nullish(),
caProvider: z.string().nullish(),
caProviderAccessId: z.string().nullish(),
caProviderConfig: z.any().nullish(),
keySource: z.enum([KEY_SOURCE_AUTO, KEY_SOURCE_REUSE, KEY_SOURCE_CUSTOM], t("workflow_node.apply.form.key_source.placeholder")),
keyAlgorithm: z.string(t("workflow_node.apply.form.key_algorithm.placeholder")).nonempty(t("workflow_node.apply.form.key_algorithm.placeholder")),
keyAlgorithm: z.string().nonempty(t("workflow_node.apply.form.key_algorithm.placeholder")),
keyContent: z.string().nullish(),
nameservers: z
.string()
@@ -885,27 +886,19 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return String(v)
.split(MULTIPLE_INPUT_SEPARATOR)
.every((e) => validIPv4Address(e) || validIPv6Address(e) || validDomainName(e));
.every((e) => isIPv4(e) || isIPv6(e) || isDomain(e));
}, t("common.errmsg.host_invalid")),
dnsPropagationWait: z.preprocess(
(v) => (v == null || v === "" ? void 0 : Number(v)),
z
.number()
.int(t("workflow_node.apply.form.dns_propagation_wait.placeholder"))
.gte(0, t("workflow_node.apply.form.dns_propagation_wait.placeholder"))
.nullish()
z.number().int().gte(0, t("workflow_node.apply.form.dns_propagation_wait.placeholder")).nullish()
),
dnsPropagationTimeout: z.preprocess(
(v) => (v == null || v === "" ? void 0 : Number(v)),
z
.number()
.int(t("workflow_node.apply.form.dns_propagation_timeout.placeholder"))
.gte(1, t("workflow_node.apply.form.dns_propagation_timeout.placeholder"))
.nullish()
z.number().int().gte(1, t("workflow_node.apply.form.dns_propagation_timeout.placeholder")).nullish()
),
dnsTTL: z.preprocess(
(v) => (v == null || v === "" ? void 0 : Number(v)),
z.number().int(t("workflow_node.apply.form.dns_ttl.placeholder")).gte(1, t("workflow_node.apply.form.dns_ttl.placeholder")).nullish()
z.number().int().gte(1, t("workflow_node.apply.form.dns_ttl.placeholder")).nullish()
),
validityLifetime: z
.string()
@@ -918,10 +911,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
acmeProfile: z.string().nullish(),
disableFollowCNAME: z.boolean().nullish(),
disableARI: z.boolean().nullish(),
skipBeforeExpiryDays: z.coerce
.number()
.int(t("workflow_node.apply.form.skip_before_expiry_days.placeholder"))
.positive(t("workflow_node.apply.form.skip_before_expiry_days.placeholder")),
skipBeforeExpiryDays: z.coerce.number().int().positive(),
})
.superRefine((values, ctx) => {
if (values.domains) {
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -110,7 +110,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
.string()
.nullish()
.refine((v) => {
return !v || validDomainName(v!, { allowWildcard: true });
return !v || isDomain(v!, { allowWildcard: true });
}, t("common.errmsg.domain_invalid")),
})
.superRefine((values, ctx) => {
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -170,7 +170,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -100,7 +100,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName, validPortNumber } from "@/utils/validators";
import { isDomain, isPortNumber } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -110,14 +110,14 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
.string()
.nullish()
.refine((v) => {
return !v || validDomainName(v!, { allowWildcard: true });
return !v || isDomain(v!, { allowWildcard: true });
}, t("common.errmsg.domain_invalid")),
})
.superRefine((values, ctx) => {
switch (values.resourceType) {
case RESOURCE_TYPE_LISTENER:
{
if (!validPortNumber(values.listenerPort!)) {
if (!isPortNumber(values.listenerPort!)) {
ctx.addIssue({
code: "custom",
message: t("workflow_node.deploy.form.aliyun_clb_listener_port.placeholder"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -100,7 +100,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -96,7 +96,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -114,7 +114,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -97,7 +97,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
.string()
.nullish()
.refine((v) => {
return !v || validDomainName(v!);
return !v || isDomain(v!);
}, t("common.errmsg.domain_invalid")),
})
.superRefine((values, ctx) => {
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -96,7 +96,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -64,7 +64,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return z.object({
region: z.string().nonempty(t("workflow_node.deploy.form.aliyun_oss_region.placeholder")),
bucket: z.string().nonempty(t("workflow_node.deploy.form.aliyun_oss_bucket.placeholder")),
domain: z.string().refine((v) => validDomainName(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
domain: z.string().refine((v) => isDomain(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
});
};
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -96,7 +96,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,8 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName, validPortNumber } from "@/utils/validators";
import { matchSearchOption } from "@/utils/search";
import { isDomain, isPortNumber } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -84,7 +85,9 @@ const BizDeployNodeConfigFieldsProviderAliyunWAF = () => {
<AutoComplete
options={["ecs", "clb4", "clb7", "nlb"].map((value) => ({ value }))}
placeholder={t("workflow_node.deploy.form.aliyun_waf_resource_product.placeholder")}
filterOption={(inputValue, option) => option!.value.toLowerCase().includes(inputValue.toLowerCase())}
showSearch={{
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
}}
/>
</Form.Item>
@@ -147,7 +150,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
.string()
.nullish()
.refine((v) => {
return !v || validDomainName(v!, { allowWildcard: true });
return !v || isDomain(v!, { allowWildcard: true });
}, t("common.errmsg.domain_invalid")),
})
.superRefine((values, ctx) => {
@@ -170,7 +173,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
});
}
if (!validPortNumber(values.resourcePort!)) {
if (!isPortNumber(values.resourcePort!)) {
ctx.addIssue({
code: "custom",
message: t("workflow_node.deploy.form.aliyun_waf_resource_port.placeholder"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName, validPortNumber } from "@/utils/validators";
import { isDomain, isPortNumber } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -110,14 +110,14 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
.string()
.nullish()
.refine((v) => {
return !v || validDomainName(v!, { allowWildcard: true });
return !v || isDomain(v!, { allowWildcard: true });
}, t("common.errmsg.domain_invalid")),
})
.superRefine((values, ctx) => {
switch (values.resourceType) {
case RESOURCE_TYPE_LISTENER:
{
if (!validPortNumber(values.listenerPort!)) {
if (!isPortNumber(values.listenerPort!)) {
ctx.addIssue({
code: "custom",
message: t("workflow_node.deploy.form.baiducloud_appblb_listener_port.placeholder"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName, validPortNumber } from "@/utils/validators";
import { isDomain, isPortNumber } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -110,14 +110,14 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
.string()
.nullish()
.refine((v) => {
return !v || validDomainName(v!, { allowWildcard: true });
return !v || isDomain(v!, { allowWildcard: true });
}, t("common.errmsg.domain_invalid")),
})
.superRefine((values, ctx) => {
switch (values.resourceType) {
case RESOURCE_TYPE_LISTENER:
{
if (!validPortNumber(values.listenerPort!)) {
if (!isPortNumber(values.listenerPort!)) {
ctx.addIssue({
code: "custom",
message: t("workflow_node.deploy.form.baiducloud_blb_listener_port.placeholder"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -125,7 +125,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
switch (values.domainMatchPattern) {
case DOMAIN_MATCH_PATTERN_EXACT:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import MultipleSplitValueInput from "@/components/MultipleSplitValueInput";
import { validPortNumber } from "@/utils/validators";
import { isPortNumber } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -74,10 +74,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
},
{ error: t("workflow_node.deploy.form.baotawaf_site_names.placeholder") }
),
sitePort: z.coerce
.number()
.int(t("workflow_node.deploy.form.baotawaf_site_port.placeholder"))
.refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
sitePort: z.coerce.number().refine((v) => isPortNumber(v), t("common.errmsg.port_invalid")),
});
};
@@ -2,7 +2,7 @@ import { getI18n, useTranslation } from "react-i18next";
import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -59,7 +59,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
.string()
.nonempty(t("workflow_node.deploy.form.bunny_cdn_hostname.placeholder"))
.refine((v) => {
return validDomainName(v!, { allowWildcard: true });
return isDomain(v!, { allowWildcard: true });
}, t("common.errmsg.domain_invalid")),
});
};
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -75,7 +75,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
switch (values.domainMatchPattern) {
case DOMAIN_MATCH_PATTERN_EXACT:
{
if (!validDomainName(values.domain!)) {
if (!isDomain(values.domain!)) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -75,7 +75,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
switch (values.domainMatchPattern) {
case DOMAIN_MATCH_PATTERN_EXACT:
{
if (!validDomainName(values.domain!)) {
if (!isDomain(values.domain!)) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -96,7 +96,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -62,15 +62,9 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
const { t } = i18n;
return z.object({
region: z
.string(t("workflow_node.deploy.form.huaweicloud_obs_region.placeholder"))
.nonempty(t("workflow_node.deploy.form.huaweicloud_obs_region.placeholder")),
bucket: z
.string(t("workflow_node.deploy.form.huaweicloud_obs_bucket.placeholder"))
.nonempty(t("workflow_node.deploy.form.huaweicloud_obs_bucket.placeholder")),
domain: z
.string(t("workflow_node.deploy.form.huaweicloud_obs_domain.placeholder"))
.refine((v) => validDomainName(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
region: z.string().nonempty(t("workflow_node.deploy.form.huaweicloud_obs_region.placeholder")),
bucket: z.string().nonempty(t("workflow_node.deploy.form.huaweicloud_obs_bucket.placeholder")),
domain: z.string().refine((v) => isDomain(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
});
};
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -102,7 +102,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case RESOURCE_TYPE_CLOUDSERVER:
case RESOURCE_TYPE_PREMIUMHOST:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("workflow_node.deploy.form.huaweicloud_waf_domain.placeholder"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -110,7 +110,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
.string()
.nullish()
.refine((v) => {
return !v || validDomainName(v!, { allowWildcard: true });
return !v || isDomain(v!, { allowWildcard: true });
}, t("common.errmsg.domain_invalid")),
})
.superRefine((values, ctx) => {
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -75,7 +75,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
switch (values.domainMatchPattern) {
case DOMAIN_MATCH_PATTERN_EXACT:
{
if (!validDomainName(values.domain!)) {
if (!isDomain(values.domain!)) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -75,7 +75,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
switch (values.domainMatchPattern) {
case DOMAIN_MATCH_PATTERN_EXACT:
{
if (!validDomainName(values.domain!)) {
if (!isDomain(values.domain!)) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -128,7 +128,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -52,7 +52,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return z.object({
bucket: z.string().nonempty(t("workflow_node.deploy.form.qiniu_kodo_domain.placeholder")),
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
});
};
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -87,7 +87,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
switch (values.domainMatchPattern) {
case DOMAIN_MATCH_PATTERN_EXACT:
{
if (!validDomainName(values.domain!)) {
if (!isDomain(values.domain!)) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -145,7 +145,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
switch (values.domainMatchPattern) {
case DOMAIN_MATCH_PATTERN_EXACT:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -95,7 +95,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -145,7 +145,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
});
}
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -64,7 +64,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return z.object({
region: z.string().nonempty(t("workflow_node.deploy.form.tencentcloud_cos_region.placeholder")),
bucket: z.string().nonempty(t("workflow_node.deploy.form.tencentcloud_cos_bucket.placeholder")),
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
});
};
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -86,7 +86,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
switch (values.domainMatchPattern) {
case DOMAIN_MATCH_PATTERN_EXACT:
{
if (!validDomainName(values.domain!)) {
if (!isDomain(values.domain!)) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -95,7 +95,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -5,7 +5,7 @@ import { z } from "zod";
import MultipleSplitValueInput from "@/components/MultipleSplitValueInput";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -136,7 +136,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
values.domains &&
String(values.domains)
.split(MULTIPLE_INPUT_SEPARATOR)
.every((e) => validDomainName(e, { allowWildcard: true }));
.every((e) => isDomain(e, { allowWildcard: true }));
if (!v) {
ctx.addIssue({
code: "custom",
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -98,7 +98,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
switch (values.domainMatchPattern) {
case DOMAIN_MATCH_PATTERN_EXACT:
{
if (!validDomainName(values.domain!)) {
if (!isDomain(values.domain!)) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -5,6 +5,7 @@ import { z } from "zod";
import MultipleSplitValueInput from "@/components/MultipleSplitValueInput";
import Tips from "@/components/Tips";
import { matchSearchOption } from "@/utils/search";
import { useFormNestedFieldsContext } from "./_context";
@@ -56,7 +57,9 @@ const BizDeployNodeConfigFieldsProviderTencentCloudSSLDeploy = () => {
<AutoComplete
options={["apigateway", "cdn", "clb", "cos", "ddos", "lighthouse", "live", "tcb", "teo", "tke", "tse", "vod", "waf"].map((value) => ({ value }))}
placeholder={t("workflow_node.deploy.form.tencentcloud_ssldeploy_resource_product.placeholder")}
filterOption={(inputValue, option) => option!.value.toLowerCase().includes(inputValue.toLowerCase())}
showSearch={{
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
}}
/>
</Form.Item>
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -103,7 +103,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
switch (values.domainMatchPattern) {
case DOMAIN_MATCH_PATTERN_EXACT:
{
if (!validDomainName(values.domain!)) {
if (!isDomain(values.domain!)) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -86,7 +86,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return z.object({
endpoint: z.string().nullish(),
region: z.string().nonempty(t("workflow_node.deploy.form.tencentcloud_waf_region.placeholder")),
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
domainId: z.string().nonempty(t("workflow_node.deploy.form.tencentcloud_waf_domain_id.placeholder")),
instanceId: z.string().nonempty(t("workflow_node.deploy.form.tencentcloud_waf_instance_id.placeholder")),
});
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -111,7 +111,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
.string()
.nullish()
.refine((v) => {
return !v || validDomainName(v);
return !v || isDomain(v);
}, t("common.errmsg.domain_invalid")),
})
.superRefine((values, ctx) => {
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -41,7 +41,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
const { t } = i18n;
return z.object({
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
});
};
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validPortNumber } from "@/utils/validators";
import { isPortNumber } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -54,7 +54,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return z.object({
acceleratorId: z.string().nonempty(t("workflow_node.deploy.form.ucloud_upathx_accelerator_id.placeholder")),
listenerPort: z.coerce.number().refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
listenerPort: z.coerce.number().refine((v) => isPortNumber(v), t("common.errmsg.port_invalid")),
});
};
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -64,7 +64,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return z.object({
region: z.string().nonempty(t("workflow_node.deploy.form.ucloud_us3_region.placeholder")),
bucket: z.string().nonempty(t("workflow_node.deploy.form.ucloud_us3_bucket.placeholder")),
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
});
};
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Tips from "@/components/Tips";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -75,7 +75,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return z.object({
spaceProvider: z.string().nonempty(t("workflow_node.deploy.form.unicloud_webhost_space_provider.placeholder")),
spaceId: z.string().nonempty(t("workflow_node.deploy.form.unicloud_webhost_space_id.placeholder")),
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
});
};
@@ -5,7 +5,7 @@ import { z } from "zod";
import Show from "@/components/Show";
import Tips from "@/components/Tips";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -89,7 +89,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Tips from "@/components/Tips";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -57,7 +57,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return z.object({
bucket: z.string().nonempty(t("workflow_node.deploy.form.upyun_file_bucket.placeholder")),
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
});
};
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -110,7 +110,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
.string()
.nullish()
.refine((v) => {
return !v || validDomainName(v!, { allowWildcard: true });
return !v || isDomain(v!, { allowWildcard: true });
}, t("common.errmsg.domain_invalid")),
})
.superRefine((values, ctx) => {
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -3,7 +3,7 @@ import { Form, Input, Radio } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -81,7 +81,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -65,7 +65,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return z.object({
region: z.string().nonempty(t("workflow_node.deploy.form.volcengine_imagex_region.placeholder")),
serviceId: z.string().nonempty(t("workflow_node.deploy.form.volcengine_imagex_service_id.placeholder")),
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
});
};
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -77,7 +77,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -64,7 +64,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return z.object({
region: z.string().nonempty(t("workflow_node.deploy.form.volcengine_tos_region.placeholder")),
bucket: z.string().nonempty(t("workflow_node.deploy.form.volcengine_tos_bucket.placeholder")),
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
});
};
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -112,7 +112,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case DOMAIN_MATCH_PATTERN_EXACT:
case DOMAIN_MATCH_PATTERN_WILDCARD:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -3,7 +3,7 @@ import { Form, Input, Select } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -72,7 +72,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return z.object({
region: z.string().nonempty(t("workflow_node.deploy.form.volcengine_waf_region.placeholder")),
accessMode: z.literal([ACCESS_MODE_CNAME], t("workflow_node.deploy.form.volcengine_waf_access_mode.placeholder")),
domain: z.string().refine((v) => validDomainName(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
domain: z.string().refine((v) => isDomain(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
});
};
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import MultipleSplitValueInput from "@/components/MultipleSplitValueInput";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -92,7 +92,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
values.domains &&
String(values.domains)
.split(MULTIPLE_INPUT_SEPARATOR)
.every((e) => validDomainName(e, { allowWildcard: true }));
.every((e) => isDomain(e, { allowWildcard: true }));
if (!v) {
ctx.addIssue({
code: "custom",
@@ -3,7 +3,7 @@ import { Form, Input, Radio, Select } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validDomainName } from "@/utils/validators";
import { isDomain } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -119,7 +119,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
switch (values.domainMatchPattern) {
case DOMAIN_MATCH_PATTERN_EXACT:
{
if (!validDomainName(values.domain!, { allowWildcard: true })) {
if (!isDomain(values.domain!, { allowWildcard: true })) {
ctx.addIssue({
code: "custom",
message: t("common.errmsg.domain_invalid"),
@@ -5,6 +5,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import CodeTextInput from "@/components/CodeTextInput";
import { isJsonObject } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -79,17 +80,11 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
.nullish()
.refine((v) => {
if (!v) return true;
try {
const obj = JSON.parse(v);
return typeof obj === "object" && !Array.isArray(obj);
} catch {
return false;
}
return isJsonObject(v);
}, t("workflow_node.deploy.form.webhook_data.errmsg.json_invalid")),
timeout: z.preprocess(
(v) => (v == null || v === "" ? void 0 : Number(v)),
z.number().int(t("workflow_node.deploy.form.webhook_timeout.placeholder")).gte(1, t("workflow_node.deploy.form.webhook_timeout.placeholder")).nullish()
z.number().int().gte(1, t("workflow_node.deploy.form.webhook_timeout.placeholder")).nullish()
),
});
};
@@ -263,10 +263,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return z
.object({
certificateOutputNodeId: z
.string(t("workflow_node.deploy.form.certificate_output_node_id.placeholder"))
.nonempty(t("workflow_node.deploy.form.certificate_output_node_id.placeholder")),
provider: z.string(t("workflow_node.deploy.form.provider.placeholder")).nonempty(t("workflow_node.deploy.form.provider.placeholder")),
certificateOutputNodeId: z.string().nonempty(t("workflow_node.deploy.form.certificate_output_node_id.placeholder")),
provider: z.string().nonempty(t("workflow_node.deploy.form.provider.placeholder")),
providerAccessId: z.string().nullish(),
providerConfig: z.any().nullish(),
skipOnLastSucceeded: z.boolean().nullish(),
@@ -8,7 +8,7 @@ import { z } from "zod";
import Tips from "@/components/Tips";
import { type WorkflowNodeConfigForBizMonitor, defaultNodeConfigForBizMonitor } from "@/domain/workflow";
import { useAntdForm } from "@/hooks";
import { validDomainName, validIPv4Address, validIPv6Address, validPortNumber } from "@/utils/validators";
import { isDomain, isIPv4, isIPv6, isPortNumber } from "@/utils/validator";
import { NodeFormContextProvider } from "./_context";
import { NodeType } from "../nodes/typings";
@@ -90,19 +90,14 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
const { t } = i18n;
return z.object({
host: z.string(t("workflow_node.monitor.form.host.placeholder")).refine((v) => {
return validDomainName(v) || validIPv4Address(v) || validIPv6Address(v);
}, t("common.errmsg.host_invalid")),
port: z.coerce
.number()
.int(t("workflow_node.monitor.form.port.placeholder"))
.refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
host: z.string().refine((v) => isDomain(v) || isIPv4(v) || isIPv6(v), t("common.errmsg.host_invalid")),
port: z.coerce.number().refine((v) => isPortNumber(v), t("common.errmsg.port_invalid")),
domain: z
.string()
.nullish()
.refine((v) => {
if (!v) return true;
return validDomainName(v);
return isDomain(v);
}, t("common.errmsg.domain_invalid")),
requestPath: z.string().nullish(),
});
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validEmailAddress } from "@/utils/validators";
import { isEmail } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -45,7 +45,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
.nullish()
.refine((v) => {
if (!v) return true;
return validEmailAddress(v);
return isEmail(v);
}, t("common.errmsg.email_invalid")),
});
};
@@ -5,6 +5,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import CodeTextInput from "@/components/CodeTextInput";
import { isJsonObject } from "@/utils/validator";
import { useFormNestedFieldsContext } from "./_context";
@@ -79,17 +80,11 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
.nullish()
.refine((v) => {
if (!v) return true;
try {
const obj = JSON.parse(v);
return typeof obj === "object" && !Array.isArray(obj);
} catch {
return false;
}
return isJsonObject(v);
}, t("workflow_node.notify.form.webhook_data.errmsg.json_invalid")),
timeout: z.preprocess(
(v) => (v == null || v === "" ? void 0 : Number(v)),
z.number().int(t("workflow_node.notify.form.webhook_timeout.placeholder")).gte(1, t("workflow_node.notify.form.webhook_timeout.placeholder")).nullish()
z.number().int().gte(1, t("workflow_node.notify.form.webhook_timeout.placeholder")).nullish()
),
});
};
@@ -242,8 +242,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return z.object({
subject: z.string().nonempty(t("workflow_node.notify.form.subject.placeholder")),
message: z.string().nonempty(t("workflow_node.notify.form.message.placeholder")),
provider: z.string(t("workflow_node.notify.form.provider.placeholder")).nonempty(t("workflow_node.notify.form.provider.placeholder")),
providerAccessId: z.string(t("workflow_node.notify.form.provider_access.placeholder")).nonempty(t("workflow_node.notify.form.provider_access.placeholder")),
provider: z.string().nonempty(t("workflow_node.notify.form.provider.placeholder")),
providerAccessId: z.string().nonempty(t("workflow_node.notify.form.provider_access.placeholder")),
providerConfig: z.any().nullish(),
skipOnAllPrevSkipped: z.boolean().nullish(),
});
@@ -6,12 +6,13 @@ import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { validateCertificate, validatePrivateKey } from "@/api/certificates";
import Show from "@/components/Show";
import FileTextInput from "@/components/FileTextInput";
import Show from "@/components/Show";
import Tips from "@/components/Tips";
import { type WorkflowNodeConfigForBizUpload, defaultNodeConfigForBizUpload } from "@/domain/workflow";
import { useAntdForm } from "@/hooks";
import { getErrMsg } from "@/utils/error";
import { isUrlWithHttpOrHttps } from "@/utils/validator";
import { NodeFormContextProvider } from "./_context";
import { NodeType } from "../nodes/typings";
@@ -245,7 +246,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
case UPLOAD_SOURCE_URL:
{
if (!z.url().safeParse(values.certificate).success) {
if (!isUrlWithHttpOrHttps(values.certificate)) {
ctx.addIssue({
code: "custom",
message: t("workflow_node.upload.form.certificate_url.placeholder"),
@@ -253,7 +254,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
});
}
if (!z.url().safeParse(values.privateKey).success) {
if (!isUrlWithHttpOrHttps(values.privateKey)) {
ctx.addIssue({
code: "custom",
message: t("workflow_node.upload.form.private_key_url.placeholder"),
@@ -71,13 +71,10 @@ const getInitialValues = (): Nullish<z.infer<ReturnType<typeof getSchema>>> => {
};
const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> }) => {
const { t } = i18n;
const { t: _ } = i18n;
return z.object({
wait: z.coerce
.number(t("workflow_node.delay.form.wait.placeholder"))
.int(t("workflow_node.delay.form.wait.placeholder"))
.positive(t("workflow_node.delay.form.wait.placeholder")),
wait: z.coerce.number().int().positive(),
});
};
@@ -11,7 +11,7 @@ import Show from "@/components/Show";
import Tips from "@/components/Tips";
import { WORKFLOW_TRIGGERS, type WorkflowNodeConfigForStart, type WorkflowTriggerType, defaultNodeConfigForStart } from "@/domain/workflow";
import { useAntdForm } from "@/hooks";
import { getNextCronExecutions, validCronExpression } from "@/utils/cron";
import { getNextCronExecutions, validateCronExpression } from "@/utils/cron";
import { NodeFormContextProvider } from "./_context";
import { NodeType } from "../nodes/typings";
@@ -134,12 +134,12 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
return z
.object({
trigger: z.string(t("workflow_node.start.form.trigger.placeholder")).nonempty(t("workflow_node.start.form.trigger.placeholder")),
trigger: z.string().nonempty(t("workflow_node.start.form.trigger.placeholder")),
triggerCron: z.string().nullish(),
})
.superRefine((values, ctx) => {
if (values.trigger === WORKFLOW_TRIGGERS.SCHEDULED) {
if (!validCronExpression(values.triggerCron!)) {
if (!validateCronExpression(values.triggerCron!)) {
ctx.addIssue({
code: "custom",
message: t("workflow_node.start.form.trigger_cron.errmsg.invalid"),
+2 -2
View File
@@ -1,6 +1,6 @@
import { CronExpressionParser } from "cron-parser";
export const validCronExpression = (expr: string): boolean => {
export const validateCronExpression = (expr: string): boolean => {
try {
CronExpressionParser.parse(expr);
@@ -21,7 +21,7 @@ export const validCronExpression = (expr: string): boolean => {
};
export const getNextCronExecutions = (expr: string, times = 1): Date[] => {
if (!validCronExpression(expr)) return [];
if (!validateCronExpression(expr)) return [];
const now = new Date();
const cron = CronExpressionParser.parse(expr, { currentDate: now });
+42
View File
@@ -0,0 +1,42 @@
export const matchSearchString = (keyword: string, candidate: string) => {
keyword = String(keyword).toLowerCase();
candidate = String(candidate).toLowerCase();
if (keyword.length === 0) {
return false;
}
if (candidate.includes(keyword)) {
return true;
}
if (keyword.includes(" ")) {
keyword = keyword.replaceAll(" ", "");
candidate = candidate.replaceAll(" ", "");
if (matchSearchString(keyword, candidate)) {
return true;
}
}
return false;
};
export const matchSearchOption = (keyword: string, candidate: string | { label?: unknown } | { value?: unknown }) => {
if (typeof candidate === "string") {
return matchSearchString(keyword, candidate);
}
if ("label" in candidate && candidate.label != null) {
if (matchSearchString(keyword, candidate.label as string)) {
return true;
}
}
if ("value" in candidate && candidate.value != null) {
if (matchSearchString(keyword, candidate.value as string)) {
return true;
}
}
return false;
};
+51
View File
@@ -0,0 +1,51 @@
import { z } from "zod";
import { validateCronExpression } from "./cron";
export const isCron = (value: string) => {
return validateCronExpression(value);
};
export const isDomain = (value: string, { allowWildcard = false }: { allowWildcard?: boolean } = {}) => {
const re = allowWildcard
? /^(?:\*\.)?(?!-)[A-Za-z0-9-]{1,}(?<!-)(\.[A-Za-z0-9-]{1,}(?<!-)){0,}$/
: /^(?!-)[A-Za-z0-9-]{1,}(?<!-)(\.[A-Za-z0-9-]{1,}(?<!-)){0,}$/;
return re.test(value);
};
export const isEmail = (value: string) => {
return z.email().safeParse(value).success;
};
export const isIPv4 = (value: string) => {
return z.ipv4().safeParse(value).success;
};
export const isIPv6 = (value: string) => {
return z.ipv6().safeParse(value).success;
};
export const isJsonObject = (value: string) => {
try {
const obj = JSON.parse(value);
return typeof obj === "object" && !Array.isArray(obj);
} catch {
return false;
}
};
export const isPortNumber = (value: string | number) => {
return z.coerce.number().int().min(1).max(65535).safeParse(value).success;
};
export const isUrlWithHttp = (value: string) => {
return z.url().startsWith("http://").safeParse(value).success;
};
export const isUrlWithHttps = (value: string) => {
return z.url().startsWith("https://").safeParse(value).success;
};
export const isUrlWithHttpOrHttps = (value: string) => {
return isUrlWithHttp(value) || isUrlWithHttps(value);
};
-39
View File
@@ -1,39 +0,0 @@
import { z } from "zod/mini";
import { validCronExpression as _validCronExpression } from "./cron";
export const validCronExpression = (value: string) => {
return _validCronExpression(value);
};
export const validDomainName = (value: string, { allowWildcard = false }: { allowWildcard?: boolean } = {}) => {
const re = allowWildcard
? /^(?:\*\.)?(?!-)[A-Za-z0-9-]{1,}(?<!-)(\.[A-Za-z0-9-]{1,}(?<!-)){0,}$/
: /^(?!-)[A-Za-z0-9-]{1,}(?<!-)(\.[A-Za-z0-9-]{1,}(?<!-)){0,}$/;
return re.test(value);
};
export const validEmailAddress = (value: string) => {
return z.email().safeParse(value).success;
};
export const validIPv4Address = (value: string) => {
return z.ipv4().safeParse(value).success;
};
export const validIPv6Address = (value: string) => {
return z.ipv6().safeParse(value).success;
};
export const validHttpOrHttpsUrl = (value: string) => {
try {
const url = new URL(value);
return url.protocol === "http:" || url.protocol === "https:";
} catch {
return false;
}
};
export const validPortNumber = (value: string | number) => {
return parseInt(value + "") === +value && String(+value) === String(value) && +value >= 1 && +value <= 65535;
};