{
  "version": 3,
  "sources": ["../src/actor/classes/actor.class.ts"],
  "sourcesContent": ["import { get, set } from '@dikolab/private-parts';\nimport { UsecaseSymbol } from '../../symbol/classes/usecase-symbol.class';\nimport {\n   NAME_KEY,\n   ROLES_KEY,\n} from '../../utils/constants/symbol-keys.constant';\n\nimport { ACTOR_TYPE } from '../../utils/constants/symbol-tag.constant';\nimport type { ActorModel } from '../types/actor-model.interface';\nimport type { AnyRole, RoleNames } from '../types/utility.type';\nimport type { ActorEventMap } from '../types/actor-events.type';\n\n/**\n * Represents a named actor with assigned roles\n * that determine which use cases it can perform\n */\nexport class Actor<\n      Name extends string,\n      Roles extends readonly AnyRole[],\n   >\n   extends UsecaseSymbol<typeof ACTOR_TYPE, Name, ActorEventMap>\n   implements ActorModel<Name, Roles>\n{\n   get [ROLES_KEY](): Roles {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, ROLES_KEY);\n   }\n\n   constructor(name: Name, roles: Roles) {\n      super(ACTOR_TYPE, name);\n\n      set(this, ROLES_KEY, roles);\n   }\n\n   /** Returns a plain object with type, name, and role names */\n   toJSON() {\n      const roles = this[ROLES_KEY].map((role) => role[NAME_KEY]);\n\n      return {\n         ...super.toJSON(),\n         roles: roles as RoleNames<Roles>,\n      };\n   }\n}\n"],
  "mappings": ";;;;;;;;;;;;AAAA,SAAS,KAAK,WAAW;AAgBlB,IAAM,QAAN,cAII,cAEX;AAAA,EACG,KAAK,SAAS,IAAW;AAEtB,WAAO,IAAI,MAAM,SAAS;AAAA,EAC7B;AAAA,EAEA,YAAY,MAAY,OAAc;AACnC,UAAM,YAAY,IAAI;AAEtB,QAAI,MAAM,WAAW,KAAK;AAAA,EAC7B;AAAA;AAAA,EAGA,SAAS;AACN,UAAM,QAAQ,KAAK,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC;AAE1D,WAAO;AAAA,MACJ,GAAG,MAAM,OAAO;AAAA,MAChB;AAAA,IACH;AAAA,EACH;AACH;",
  "names": []
}
