pleroma/packages/pl-api/lib/entities/poll.ts
2024-10-14 20:54:44 +02:00

32 lines
1 KiB
TypeScript

import * as v from 'valibot';
import { customEmojiSchema } from './custom-emoji';
import { filteredArray } from './utils';
const pollOptionSchema = v.object({
title: v.fallback(v.string(), ''),
votes_count: v.fallback(v.number(), 0),
title_map: v.record(v.string(), v.string()).nullable().catch(null),
});
/** @see {@link https://docs.joinmastodon.org/entities/Poll/} */
const pollSchema = v.object({
emojis: filteredArray(customEmojiSchema),
expired: v.fallback(v.boolean(), false),
expires_at: v.fallback(v.nullable(z.string().datetime()), null),
id: v.string(),
multiple: v.fallback(v.boolean(), false),
options: z.array(pollOptionSchema).min(2),
voters_count: v.fallback(v.number(), 0),
votes_count: v.fallback(v.number(), 0),
own_votes: v.fallback(v.nullable(z.number()).nonempty(), null),
voted: v.fallback(v.boolean(), false),
non_anonymous: v.fallback(v.boolean(), false),
});
type Poll = v.InferOutput<typeof pollSchema>;
type PollOption = Poll['options'][number];
export { pollSchema, type Poll, type PollOption };