diff options
| author | Mostafa Wahied <97263286+Mostafa-Wahied@users.noreply.github.com> | 2025-06-22 11:47:51 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-22 19:47:51 +0100 |
| commit | 112aa9d942ef0f8548c3728e6218c27cc335a601 (patch) | |
| tree | 9b0c545fb5b16604e9061e59ebd3d57d7033b4a7 /packages/shared | |
| parent | c70d64d4cde2bf2acc5c4164eef79c40fd58aa42 (diff) | |
| download | karakeep-112aa9d942ef0f8548c3728e6218c27cc335a601.tar.zst | |
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 <me@mbassem.com>
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 # +} |
