type OrganizationSelectorFields = { _id?: string; id?: string; name: string; slug: string; }; export function normalizeOrganizationSelector(input: string | undefined | null) { const trimmed = input?.trim(); if (!trimmed) return undefined; return trimmed.slice(0, 160); } function organizationId(organization: OrganizationSelectorFields) { return String(organization._id ?? organization.id ?? ""); } export function organizationMatchesSelector( organization: OrganizationSelectorFields | null | undefined, selector: string | null | undefined, ) { const normalizedSelector = normalizeOrganizationSelector(selector)?.toLowerCase(); if (!organization || !normalizedSelector) return false; return ( organizationId(organization).toLowerCase() === normalizedSelector || organization.slug.toLowerCase() === normalizedSelector || organization.name.trim().toLowerCase() === normalizedSelector ); } export function resolveOrganizationBySelector< T extends OrganizationSelectorFields, >(organizations: T[], selector: string | null | undefined): T | null { const normalizedSelector = normalizeOrganizationSelector(selector)?.toLowerCase(); if (!normalizedSelector) return null; const slugMatch = organizations.find( (organization) => organization.slug.toLowerCase() === normalizedSelector, ); if (slugMatch) return slugMatch; const idMatch = organizations.find( (organization) => organizationId(organization).toLowerCase() === normalizedSelector, ); if (idMatch) return idMatch; const nameMatches = organizations.filter( (organization) => organization.name.trim().toLowerCase() === normalizedSelector, ); if (nameMatches.length === 1) return nameMatches[0]; return null; }