summaryrefslogtreecommitdiffhomepage
path: root/js/src/id
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/id')
-rw-r--r--js/src/id/id.ts23
1 files changed, 23 insertions, 0 deletions
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]);
+ }
+}