import {isPopulatedArray} from "../utils/Arrays.js"; import { Persona, personaName, personaPronoun, personaPronounObject, personaPronounPossessive, personaVerb } from "./Persona.js"; import chalk from "chalk"; import capitalize from "capitalize"; import { ArraySerializer, ObjectSerializer, OptionalArrayStringSerializer, OptionalSerializer } from "../schemata/Serialization.js"; export interface GuidedEmpathy { readonly feelings?: readonly string[] readonly needs?: readonly string[] readonly events?: readonly string[] readonly requests?: readonly string[] } export const GuidedEmpathySerializer = new ObjectSerializer({ feelings: OptionalArrayStringSerializer, needs: OptionalArrayStringSerializer, events: OptionalArrayStringSerializer, requests: OptionalArrayStringSerializer, }, ["feelings", "needs", "events", "requests"]) export const ArrayGuidedEmpathySerializer = new ArraySerializer(GuidedEmpathySerializer) export const OptionalArrayGuidedEmpathySerializer = new OptionalSerializer(ArrayGuidedEmpathySerializer) export function isPopulatedGuidedEmpathy(empathy: GuidedEmpathy | undefined): boolean { return !!empathy && (isPopulatedArray(empathy.feelings) || isPopulatedArray(empathy.needs) || isPopulatedArray(empathy.events) || isPopulatedArray(empathy.requests)) } export function guidedEmpathyToString(empathy: GuidedEmpathy, persona: Persona | undefined): string { return (`${(capitalize(personaName(persona), true))} ${personaVerb(persona, "feel", "feels")}: ${empathy.feelings?.join(", ") || chalk.dim("(???)")}...\n` + `Because ${personaPronoun(persona)} ${personaVerb(persona, "need", "needs")}: ${empathy.needs?.join(", ") || chalk.dim("(???)")}...\n` + `And ${personaPronounPossessive(persona)} needs were affected when: ${empathy.events?.join("; ") || chalk.dim("(???)")}...\n` + `So to get good outcomes for ${personaPronounObject(persona)} in the future, can we try: ${empathy.requests?.join("; ") || chalk.dim("(???)")}?`) } export function guidedEmpathyToStringShort(empathy: GuidedEmpathy): string { return `Feeling ${empathy.feelings?.join(", ") || chalk.dim("(none)")} // Because ${empathy.needs?.join(", ") || chalk.dim("(none)")} // When ${empathy.events?.join("; ") || chalk.dim("(none)")} // So ${empathy.requests?.join("; ") || chalk.dim("(none)")}` }