From 112aa9d942ef0f8548c3728e6218c27cc335a601 Mon Sep 17 00:00:00 2001 From: Mostafa Wahied <97263286+Mostafa-Wahied@users.noreply.github.com> Date: Sun, 22 Jun 2025 11:47:51 -0700 Subject: fix(tags): normalise leading hashes in tag names (#1317) (#1351) * fix(tags): normalise leading hashes in tag names (#1317) * move the transformation to zod * fix openapi spec --------- Co-authored-by: Mohamed Bassem --- packages/shared/types/tags.ts | 11 +++++++++-- packages/shared/utils/tag.ts | 6 ++++++ 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 packages/shared/utils/tag.ts (limited to 'packages/shared') 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; 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 # +} -- cgit v1.2.3-70-g09d2