import { getDuplicatesRefinement } from 'libs/utils/zod' import { z } from 'zod' import { IdSchema } from '../Id' export const GenericArtifactSchema = z.object({ id: IdSchema, notes: z.string().optional(), // isFinished: z.boolean(), // not needed because artifact.isFinished === isDefined(artifact.value) createdBy: IdSchema, createdOn: z.date(), pausedUntil: z.date().optional(), }) export const GenericArtifactsSchema = z.array(GenericArtifactSchema) .superRefine(getDuplicatesRefinement('GenericArtifact', parseGenericArtifactUid)) export const GenericArtifactUidSchema = GenericArtifactSchema.pick({ id: true, }) export type GenericArtifact = z.infer export type GenericArtifactUid = z.infer export function parseGenericArtifact(artifact: GenericArtifact): GenericArtifact { return GenericArtifactSchema.parse(artifact) } export function parseGenericArtifacts(artifacts: GenericArtifact[]): GenericArtifact[] { return GenericArtifactsSchema.parse(artifacts) } export function parseGenericArtifactUid(artifactUid: GenericArtifactUid): GenericArtifactUid { return GenericArtifactUidSchema.parse(artifactUid) }