diff --git a/packages/shared/package.json b/packages/shared/package.json index af89eb4..256acb2 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -8,5 +8,8 @@ }, "exports": { ".": "./src/index.ts" + }, + "dependencies": { + "zod": "^4.3.6" } } diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 548d69e..2137233 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -1 +1,2 @@ export * from "./constants.js"; +export * from "./schema.js"; diff --git a/packages/shared/src/schema.ts b/packages/shared/src/schema.ts new file mode 100644 index 0000000..c3274c7 --- /dev/null +++ b/packages/shared/src/schema.ts @@ -0,0 +1,72 @@ +import * as z from "zod"; + +export const Term = z.object({ + id: z.uuid(), + synset_id: z.string(), + pos: z.string(), + created_at: z.iso.datetime(), +}); + +export type Term = z.infer; + +export const Translation = z.object({ + id: z.uuid(), + term_id: z.string(), + language_code: z.string(), + text: z.string(), + created_at: z.iso.datetime(), +}); + +export type Translation = z.infer; + +export const TermGloss = z.object({ + id: z.uuid(), + term_id: z.uuid(), + language_code: z.string(), + text: z.string(), + created_at: z.iso.datetime(), +}); + +export type TermGloss = z.infer; + +export const LanguagePair = z.object({ + id: z.uuid(), + source_language: z.string(), + target_language: z.string(), + label: z.string(), + active: z.boolean(), + created_at: z.iso.datetime(), +}); + +export type LanguagePair = z.infer; + +export const User = z.object({ + id: z.uuid(), + openauth_sub: z.string(), + email: z.email(), + display_name: z.string(), + created_at: z.iso.datetime(), + last_login_at: z.iso.datetime(), +}); + +export type User = z.infer; + +export const Deck = z.object({ + id: z.uuid(), + name: z.string(), + desciption: z.string(), + source_language: z.string(), + validated_languages: z.array(z.string()), + is_public: z.boolean(), + created_at: z.iso.datetime(), +}); + +export type Deck = z.infer; + +export const DeckTerm = z.object({ + deck_id: z.uuid(), + term_id: z.uuid(), + added: z.iso.datetime(), +}); + +export type DeckTerm = z.infer; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ff559a..d4e4bc2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -132,7 +132,11 @@ importers: specifier: ^0.31.10 version: 0.31.10 - packages/shared: {} + packages/shared: + dependencies: + zod: + specifier: ^4.3.6 + version: 4.3.6 packages: