From a34d020bc6b252e842f042d935c7a0e6444460cf Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Sat, 17 May 2025 21:31:42 -0400 Subject: sync --- js/src/id/id.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 js/src/id/id.ts (limited to 'js/src/id/id.ts') diff --git a/js/src/id/id.ts b/js/src/id/id.ts new file mode 100644 index 000000000..a63716041 --- /dev/null +++ b/js/src/id/id.ts @@ -0,0 +1,23 @@ +import { ulid } from "ulid"; +import { z } from "zod"; + +export namespace Identifier { + const prefixes = { + session: "ses", + } as const; + + export function create( + prefix: keyof typeof prefixes, + given?: string, + ): string { + if (given) { + if (given.startsWith(prefixes[prefix])) return given; + throw new Error(`ID ${given} does not start with ${prefixes[prefix]}`); + } + return [prefixes[prefix], ulid()].join("_"); + } + + export function schema(prefix: keyof typeof prefixes) { + return z.string().startsWith(prefixes[prefix]); + } +} -- cgit v1.2.3