import type { H3Event } from 'h3'; import type { PronounExamplesData } from '~/locale/data.ts'; import { getLocale, loadPronounExamples } from '~/server/data.ts'; import { PronounExample } from '~/src/classes.ts'; import type { Pronoun } from '~/src/classes.ts'; import { buildList } from '~/src/helpers.ts'; import { Example } from '~/src/language/examples.ts'; export interface PublicPronoun extends Omit { examples: string[]; name: string; } const buildExample = (e: PronounExamplesData): PronounExample => new PronounExample( Example.parse(e.singular), Example.parse(e.plural || e.singular), Example.parse(e.null || e.singular), Example.parse(e.null_plural || e.plural || e.singular), e.isHonorific, ); export const getPronounExamples = async (event: H3Event): Promise => { const examples = getQuery(event).examples as string[] | undefined; if (!examples || !examples.length) { return loadPronounExamples(getLocale(event)); } return examples.map((example) => { const [singular, plural, isHonorific] = example.split('|'); return { singular, plural, isHonorific: !!isHonorific }; }); }; export const addExamples = (pronoun: Pronoun, examples: PronounExamplesData[]): string[] => { return buildList(function* () { for (const example of examples) { yield buildExample(example).example(pronoun).toSpellingString(pronoun.toExampleValues()); } }); }; export const makePublicPronoun = (pronoun: Pronoun, examples: PronounExamplesData[]): PublicPronoun => { const publicPronoun: any = pronoun.clone(); publicPronoun.examples = addExamples(pronoun, examples); publicPronoun.name = pronoun.name(); delete publicPronoun.config; delete publicPronoun.hidden; return publicPronoun; };