diff options
Diffstat (limited to 'packages/shared')
| -rw-r--r-- | packages/shared/types/tags.ts | 11 | ||||
| -rw-r--r-- | packages/shared/utils/tag.ts | 6 |
2 files changed, 15 insertions, 2 deletions
diff --git a/packages/shared/types/tags.ts b/packages/shared/types/tags.ts index c7a0103e..efb26bfa 100644 --- a/packages/shared/types/tags.ts +++ b/packages/shared/types/tags.ts @@ -1,7 +1,14 @@ import { z } from "zod"; +import { normalizeTagName } from "../utils/tag"; + +const zTagNameSchemaWithValidation = z + .string() + .transform((s) => normalizeTagName(s).trim()) + .pipe(z.string().min(1)); + export const zCreateTagRequestSchema = z.object({ - name: z.string().min(1), + name: zTagNameSchemaWithValidation, }); export const zAttachedByEnumSchema = z.enum(["ai", "human"]); @@ -23,7 +30,7 @@ export type ZGetTagResponse = z.infer<typeof zGetTagResponseSchema>; export const zUpdateTagRequestSchema = z.object({ tagId: z.string(), - name: z.string().optional(), + name: zTagNameSchemaWithValidation.optional(), }); export const zTagBasicSchema = z.object({ diff --git a/packages/shared/utils/tag.ts b/packages/shared/utils/tag.ts new file mode 100644 index 00000000..8e1bd105 --- /dev/null +++ b/packages/shared/utils/tag.ts @@ -0,0 +1,6 @@ +/** + * Ensures exactly ONE leading # + */ +export function normalizeTagName(raw: string): string { + return raw.trim().replace(/^#+/, ""); // strip every leading # +} |
