import { Actor } from '../classes/actor.class'; import type { Role } from '../classes/role.class'; import type { ResolveRoles } from '../types/utility.type'; import { getOrDefineRoles } from './get-or-define-roles.function'; export function defineActor< Name extends string, RoleNames extends readonly string[], >(name: Name, ...roleOrNames: RoleNames) { if (!name || typeof name !== 'string') { throw new TypeError(`"${name}" name parameter is invald.`); } // get role or create if do not exist! const [role] = getOrDefineRoles(name) as [Role]; const others = getOrDefineRoles( ...roleOrNames, ) as ResolveRoles; const roles = [role, ...others] as const; return new Actor(name, roles); }