2025-05-01 01:45:46 +02:00
|
|
|
import { toTypedSchema } from "@vee-validate/zod";
|
2025-08-28 07:41:51 +02:00
|
|
|
import type { Instance } from "@versia/client/schemas";
|
2025-05-01 01:45:46 +02:00
|
|
|
import { z } from "zod";
|
2025-07-16 07:48:39 +02:00
|
|
|
import * as m from "~~/paraglide/messages.js";
|
2025-05-01 01:45:46 +02:00
|
|
|
|
|
|
|
|
const characterRegex = new RegExp(/^[a-z0-9_-]+$/);
|
|
|
|
|
|
2025-08-28 07:41:51 +02:00
|
|
|
export const formSchema = (instance: z.infer<typeof Instance>) =>
|
2025-05-01 01:45:46 +02:00
|
|
|
toTypedSchema(
|
|
|
|
|
z.strictObject({
|
|
|
|
|
banner: z
|
|
|
|
|
.instanceof(File)
|
|
|
|
|
.refine(
|
|
|
|
|
(v) =>
|
|
|
|
|
v.size <=
|
2025-08-28 07:41:51 +02:00
|
|
|
(instance.configuration.accounts.header_limit ??
|
|
|
|
|
Number.POSITIVE_INFINITY),
|
2025-05-01 01:45:46 +02:00
|
|
|
m.civil_icy_ant_mend({
|
2025-08-28 07:41:51 +02:00
|
|
|
size: instance.configuration.accounts.header_limit,
|
2025-05-01 01:45:46 +02:00
|
|
|
}),
|
|
|
|
|
)
|
|
|
|
|
.optional(),
|
|
|
|
|
avatar: z
|
|
|
|
|
.instanceof(File)
|
|
|
|
|
.refine(
|
|
|
|
|
(v) =>
|
|
|
|
|
v.size <=
|
2025-08-28 07:41:51 +02:00
|
|
|
(instance.configuration.accounts.avatar_limit ??
|
|
|
|
|
Number.POSITIVE_INFINITY),
|
2025-05-01 01:45:46 +02:00
|
|
|
m.zippy_caring_raven_edit({
|
2025-08-28 07:41:51 +02:00
|
|
|
size: instance.configuration.accounts.avatar_limit,
|
2025-05-01 01:45:46 +02:00
|
|
|
}),
|
|
|
|
|
)
|
|
|
|
|
.or(z.string().url())
|
|
|
|
|
.optional(),
|
|
|
|
|
name: z
|
|
|
|
|
.string()
|
|
|
|
|
.max(
|
2025-08-28 07:41:51 +02:00
|
|
|
instance.configuration.accounts.max_displayname_characters,
|
2025-05-01 01:45:46 +02:00
|
|
|
),
|
|
|
|
|
username: z
|
|
|
|
|
.string()
|
|
|
|
|
.regex(characterRegex, m.still_upper_otter_dine())
|
2025-08-28 07:41:51 +02:00
|
|
|
.max(instance.configuration.accounts.max_username_characters),
|
2025-05-01 01:45:46 +02:00
|
|
|
bio: z
|
|
|
|
|
.string()
|
2025-08-28 07:41:51 +02:00
|
|
|
.max(instance.configuration.accounts.max_note_characters),
|
2025-05-01 01:45:46 +02:00
|
|
|
bot: z.boolean().default(false),
|
|
|
|
|
locked: z.boolean().default(false),
|
|
|
|
|
discoverable: z.boolean().default(true),
|
|
|
|
|
fields: z.array(
|
|
|
|
|
z.strictObject({ name: z.string(), value: z.string() }),
|
|
|
|
|
),
|
|
|
|
|
}),
|
|
|
|
|
);
|