Skip to content

Commit b3b4a00

Browse files
authored
chore: update valibot to latest (#5793)
* update valibot
1 parent c4b640f commit b3b4a00

File tree

16 files changed

+257
-212
lines changed

16 files changed

+257
-212
lines changed

app/(gcforms)/[locale]/(app administration)/admin/(with nav)/events/actions.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@ import {
1010
string,
1111
email,
1212
toLowerCase,
13-
toTrimmed,
13+
trim,
1414
minLength,
1515
maxLength,
1616
safeParse,
17+
pipe,
1718
} from "valibot";
1819

1920
const _retrieveEvents = async (query: QueryCommandInput) => {
@@ -156,11 +157,11 @@ export const getEventsForForm = async (formId: string) => {
156157
};
157158

158159
const emailSchema = object({
159-
subject: string([email()]),
160+
subject: pipe(string(), email()),
160161
});
161162

162163
const formSchema = object({
163-
subject: string([minLength(1), maxLength(100), toLowerCase(), toTrimmed()]),
164+
subject: pipe(string(), minLength(1), maxLength(100), toLowerCase(), trim()),
164165
});
165166

166167
export const findSubject = async (_: unknown, formData: FormData) => {

app/(gcforms)/[locale]/(support)/contact/actions.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { serverTranslation } from "@i18n";
44
import { createTicket } from "@lib/integration/freshdesk";
55
import { logMessage } from "@lib/logger";
6-
import { email, minLength, object, safeParse, string, toLowerCase, toTrimmed } from "valibot";
6+
import { email, minLength, object, safeParse, string, toLowerCase, trim, pipe } from "valibot";
77

88
export interface ErrorStates {
99
validationErrors: {
@@ -115,18 +115,20 @@ const validate = async (
115115

116116
const SupportSchema = object({
117117
// checkbox input can send a non-string value when empty
118-
request: string(t("input-validation.required", { ns: "common" }), [
119-
minLength(1, t("input-validation.required", { ns: "common" })),
120-
]),
121-
description: string([minLength(1, t("input-validation.required", { ns: "common" }))]),
122-
name: string([minLength(1, t("input-validation.required", { ns: "common" }))]),
123-
email: string([
118+
request: pipe(
119+
string(t("input-validation.required", { ns: "common" })),
120+
minLength(1, t("input-validation.required", { ns: "common" }))
121+
),
122+
description: pipe(string(), minLength(1, t("input-validation.required", { ns: "common" }))),
123+
name: pipe(string(), minLength(1, t("input-validation.required", { ns: "common" }))),
124+
email: pipe(
125+
string(),
124126
toLowerCase(),
125-
toTrimmed(),
127+
trim(),
126128
minLength(1, t("input-validation.required", { ns: "common" })),
127-
email(t("input-validation.email", { ns: "common" })),
128-
]),
129-
department: string([minLength(1, t("input-validation.required", { ns: "common" }))]),
129+
email(t("input-validation.email", { ns: "common" }))
130+
),
131+
department: pipe(string(), minLength(1, t("input-validation.required", { ns: "common" }))),
130132
// Note: branch and jobTitle are not required/validated
131133
branch: string(),
132134
jobTitle: string(),

app/(gcforms)/[locale]/(support)/contact/components/client/ContactForm.tsx

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { TextInput } from "../../../components/client/TextInput";
1414
import { MultipleChoiceGroup } from "../../../components/client/MultipleChoiceGroup";
1515
import { TextArea } from "../../../components/client/TextArea";
1616
import { SubmitButton } from "../../../components/client/SubmitButton";
17-
import { email, minLength, object, safeParse, string, toLowerCase, toTrimmed } from "valibot";
17+
import { email, minLength, object, safeParse, string, toLowerCase, trim, pipe } from "valibot";
1818
import { useState } from "react";
1919
import { Success } from "../../../components/client/Success";
2020

@@ -34,20 +34,27 @@ export const ContactForm = () => {
3434
const submitForm = async (formData: FormData) => {
3535
const formEntries = Object.fromEntries(formData.entries());
3636

37+
if (!formEntries.request) {
38+
// Set to empty string if the request field is not set
39+
formEntries.request = "";
40+
}
41+
3742
const SupportSchema = object({
3843
// checkbox input can send a non-string value when empty
39-
request: string(t("input-validation.required", { ns: "common" }), [
40-
minLength(1, t("input-validation.required", { ns: "common" })),
41-
]),
42-
description: string([minLength(1, t("input-validation.required", { ns: "common" }))]),
43-
name: string([minLength(1, t("input-validation.required", { ns: "common" }))]),
44-
email: string([
44+
request: pipe(
45+
string(t("input-validation.required", { ns: "common" })),
46+
minLength(1, t("input-validation.required", { ns: "common" }))
47+
),
48+
description: pipe(string(), minLength(1, t("input-validation.required", { ns: "common" }))),
49+
name: pipe(string(), minLength(1, t("input-validation.required", { ns: "common" }))),
50+
email: pipe(
51+
string(),
4552
toLowerCase(),
46-
toTrimmed(),
53+
trim(),
4754
minLength(1, t("input-validation.required", { ns: "common" })),
48-
email(t("input-validation.email", { ns: "common" })),
49-
]),
50-
department: string([minLength(1, t("input-validation.required", { ns: "common" }))]),
55+
email(t("input-validation.email", { ns: "common" }))
56+
),
57+
department: pipe(string(), minLength(1, t("input-validation.required", { ns: "common" }))),
5158
// Note: branch and jobTitle are not required/validated
5259
branch: string(),
5360
jobTitle: string(),

app/(gcforms)/[locale]/(support)/support/actions.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { serverTranslation } from "@i18n";
44
import { createTicket } from "@lib/integration/freshdesk";
55
import { logMessage } from "@lib/logger";
6-
import { email, minLength, object, safeParse, string, toLowerCase, toTrimmed } from "valibot";
6+
import { email, minLength, object, safeParse, string, toLowerCase, trim, pipe } from "valibot";
77

88
export interface ErrorStates {
99
validationErrors: {
@@ -96,16 +96,20 @@ const validate = async (
9696
const { t } = await serverTranslation(["common"], { lang: language });
9797

9898
const SupportSchema = object({
99-
name: string([minLength(1, t("input-validation.required"))]),
100-
email: string([
99+
name: pipe(string(), minLength(1, t("input-validation.required"))),
100+
email: pipe(
101+
string(),
101102
toLowerCase(),
102-
toTrimmed(),
103+
trim(),
103104
minLength(1, t("input-validation.required")),
104-
email(t("input-validation.email")),
105-
]),
105+
email(t("input-validation.email"))
106+
),
106107
// radio input can send a non-string value when empty
107-
request: string(t("input-validation.required"), [minLength(1, t("input-validation.required"))]),
108-
description: string([minLength(1, t("input-validation.required"))]),
108+
request: pipe(
109+
string(t("input-validation.required")),
110+
minLength(1, t("input-validation.required"))
111+
),
112+
description: pipe(string(), minLength(1, t("input-validation.required"))),
109113
});
110114

111115
return safeParse(SupportSchema, formEntries, { abortPipeEarly: true });

app/(gcforms)/[locale]/(support)/support/components/client/SupportForm.tsx

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { MultipleChoiceGroup } from "../../../components/client/MultipleChoiceGr
1515
import { TextArea } from "../../../components/client/TextArea";
1616
import { SubmitButton } from "../../../components/client/SubmitButton";
1717
import { useState } from "react";
18-
import { email, minLength, object, safeParse, string, toLowerCase, toTrimmed } from "valibot";
18+
import { email, minLength, object, safeParse, string, toLowerCase, trim, pipe } from "valibot";
1919
import { Success } from "../../../components/client/Success";
2020
import { GcdsH1 } from "@serverComponents/globals/GcdsH1";
2121

@@ -35,19 +35,26 @@ export const SupportForm = () => {
3535
const submitForm = async (formData: FormData) => {
3636
const formEntries = Object.fromEntries(formData.entries());
3737

38+
if (!formEntries.request) {
39+
// Set to empty string if the request field is not set
40+
formEntries.request = "";
41+
}
42+
3843
const SupportSchema = object({
39-
name: string([minLength(1, t("input-validation.required"))]),
40-
email: string([
44+
name: pipe(string(), minLength(1, t("input-validation.required"))),
45+
email: pipe(
46+
string(),
4147
toLowerCase(),
42-
toTrimmed(),
48+
trim(),
4349
minLength(1, t("input-validation.required")),
44-
email(t("input-validation.email")),
45-
]),
50+
email(t("input-validation.email"))
51+
),
4652
// radio input can send a non-string value when empty
47-
request: string(t("input-validation.required"), [
48-
minLength(1, t("input-validation.required")),
49-
]),
50-
description: string([minLength(1, t("input-validation.required"))]),
53+
request: pipe(
54+
string(t("input-validation.required")),
55+
minLength(1, t("input-validation.required"))
56+
),
57+
description: pipe(string(), minLength(1, t("input-validation.required"))),
5158
});
5259

5360
const validateForm = safeParse(SupportSchema, formEntries, { abortPipeEarly: true });

app/(gcforms)/[locale]/(support)/unlock-publishing/actions.ts

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,16 @@ import { serverTranslation } from "@i18n";
44
import { createTicket } from "@lib/integration/freshdesk";
55
import { logMessage } from "@lib/logger";
66
import {
7-
custom,
7+
check,
88
email,
99
minLength,
1010
maxLength,
1111
object,
1212
safeParse,
1313
string,
1414
toLowerCase,
15-
toTrimmed,
15+
trim,
16+
pipe,
1617
} from "valibot";
1718
import { isValidGovEmail } from "@lib/validation/validation";
1819
import { AuthenticatedAction } from "@lib/actions";
@@ -109,25 +110,27 @@ const validate = async (
109110
const { t } = await serverTranslation(["unlock-publishing", "common"], { lang: language });
110111

111112
const SupportSchema = object({
112-
managerEmail: string([
113+
managerEmail: pipe(
114+
string(),
113115
toLowerCase(),
114-
toTrimmed(),
116+
trim(),
115117
minLength(1, t("input-validation.required", { ns: "common" })),
116118
email(t("input-validation.email", { ns: "common" })),
117-
custom(
119+
check(
118120
(email) => isValidGovEmail(email),
119121
t("input-validation.validGovEmail", { ns: "common" })
120122
),
121-
custom(
123+
check(
122124
(email) => email?.toLowerCase() != userEmail?.toLowerCase(),
123125
t("input-validation.notSameAsUserEmail", { ns: "common" })
124-
),
125-
]),
126-
department: string([
126+
)
127+
),
128+
department: pipe(
129+
string(),
127130
minLength(1, t("input-validation.required", { ns: "common" })),
128-
maxLength(50, t("signUpRegistration.fields.name.error.maxLength")),
129-
]),
130-
goals: string([minLength(1, t("input-validation.required", { ns: "common" }))]),
131+
maxLength(50, t("signUpRegistration.fields.name.error.maxLength"))
132+
),
133+
goals: pipe(string(), minLength(1, t("input-validation.required", { ns: "common" }))),
131134
});
132135

133136
return safeParse(SupportSchema, formEntries, { abortPipeEarly: true });

app/(gcforms)/[locale]/(support)/unlock-publishing/components/client/UnlockPublishingForm.tsx

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@ import { TextArea } from "../../../components/client/TextArea";
1515
import { SubmitButton } from "../../../components/client/SubmitButton";
1616
import { useState } from "react";
1717
import {
18-
custom,
18+
check,
1919
email,
2020
minLength,
2121
maxLength,
2222
object,
2323
safeParse,
2424
string,
2525
toLowerCase,
26-
toTrimmed,
26+
trim,
27+
pipe,
2728
} from "valibot";
2829
import { isValidGovEmail } from "@lib/validation/validation";
2930
import { Success } from "./Success";
@@ -45,25 +46,27 @@ export const UnlockPublishingForm = ({ userEmail }: { userEmail: string }) => {
4546
const formEntries = Object.fromEntries(formData.entries());
4647

4748
const SupportSchema = object({
48-
managerEmail: string([
49+
managerEmail: pipe(
50+
string(),
4951
toLowerCase(),
50-
toTrimmed(),
52+
trim(),
5153
minLength(1, t("input-validation.required", { ns: "common" })),
5254
email(t("input-validation.email", { ns: "common" })),
53-
custom(
55+
check(
5456
(email) => isValidGovEmail(email),
5557
t("input-validation.validGovEmail", { ns: "common" })
5658
),
57-
custom(
59+
check(
5860
(email) => email?.toLowerCase() != userEmail?.toLowerCase(),
5961
t("input-validation.notSameAsUserEmail", { ns: "common" })
60-
),
61-
]),
62-
department: string([
62+
)
63+
),
64+
department: pipe(
65+
string(),
6366
minLength(1, t("input-validation.required", { ns: "common" })),
64-
maxLength(50, t("signUpRegistration.fields.name.error.maxLength")),
65-
]),
66-
goals: string([minLength(1, t("input-validation.required", { ns: "common" }))]),
67+
maxLength(50, t("signUpRegistration.fields.name.error.maxLength"))
68+
),
69+
goals: pipe(string(), minLength(1, t("input-validation.required", { ns: "common" }))),
6770
});
6871

6972
const validateForm = safeParse(SupportSchema, formEntries, { abortPipeEarly: true });

app/(gcforms)/[locale]/(user authentication)/auth/login/actions.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -137,17 +137,19 @@ const validate = async (
137137
const { t } = await serverTranslation(["login", "common"], { lang: language });
138138

139139
const formValidationSchema = v.object({
140-
username: v.string([
140+
username: v.pipe(
141+
v.string(),
141142
v.toLowerCase(),
142-
v.toTrimmed(),
143+
v.trim(),
143144
v.minLength(1, t("input-validation.required", { ns: "common" })),
144-
v.custom((input) => isValidGovEmail(input), t("input-validation.validGovEmail")),
145-
]),
146-
password: v.string([
147-
v.toTrimmed(),
145+
v.check((input) => isValidGovEmail(input), t("input-validation.validGovEmail"))
146+
),
147+
password: v.pipe(
148+
v.string(),
149+
v.trim(),
148150
v.minLength(1, t("input-validation.required", { ns: "common" })),
149-
v.maxLength(50, t("fields.password.errors.maxLength")),
150-
]),
151+
v.maxLength(50, t("fields.password.errors.maxLength"))
152+
),
151153
});
152154
return v.safeParse(formValidationSchema, formEntries, { abortPipeEarly: true });
153155
};

app/(gcforms)/[locale]/(user authentication)/auth/mfa/actions.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,13 +172,14 @@ const validate = async (
172172
const { t } = await serverTranslation(["auth-verify"], { lang: language });
173173

174174
const formValidationSchema = v.object({
175-
verificationCode: v.string([
175+
verificationCode: v.pipe(
176+
v.string(),
176177
v.minLength(1, t("verify.fields.confirmationCode.error.notEmpty")),
177178
v.length(5, t("verify.fields.confirmationCode.error.length")),
178-
v.regex(/^[a-z0-9]*$/i, t("verify.fields.confirmationCode.error.noSymbols")),
179-
]),
180-
authenticationFlowToken: v.string([v.minLength(1)]),
181-
email: v.string([v.toTrimmed(), v.toLowerCase(), v.minLength(1)]),
179+
v.regex(/^[a-z0-9]*$/i, t("verify.fields.confirmationCode.error.noSymbols"))
180+
),
181+
authenticationFlowToken: v.pipe(v.string(), v.minLength(1)),
182+
email: v.pipe(v.string(), v.trim(), v.toLowerCase(), v.minLength(1)),
182183
});
183184
return v.safeParse(formValidationSchema, formEntries, { abortPipeEarly: true });
184185
};

0 commit comments

Comments
 (0)