{
  "version": 3,
  "sources": ["../src/usecase/classes/usecase.class.ts"],
  "sourcesContent": ["import { get, set } from '@dikolab/private-parts';\nimport { UsecaseSymbol } from '../../symbol/classes/usecase-symbol.class';\nimport { USECASE_TYPE } from '../../utils/constants/symbol-tag.constant';\nimport {\n   BOUNDARY_KEY,\n   GOAL_KEY,\n   HANDLER_KEY,\n   ROLES_KEY,\n   TITLE_KEY,\n} from '../../utils/constants/symbol-keys.constant';\n\nimport type { UsecaseModel } from '../types/usecase-model.interface';\nimport type { AnyGoal } from '../../goal/types/utility.type';\nimport type { GoalBoundary } from '../../goal/types/goal-boundary.type';\nimport type { AnyRole } from '../../actor/types/utility.type';\nimport type { UsecaseTitleFrom } from '../types/usecase-title-from.type';\nimport { createUsecaseTitle } from '../functions/create-usecase-title.function';\nimport { getSymbolName } from '../../symbol/functions/get-symbol-name.function';\nimport type { AnyFunction } from '../../utils/types/utility.type';\nimport { MOCK_HANDLER_KEY } from '../../utils/constants/symbol-keys.constant';\nimport type { UsecaseEventMap } from '../types/usecase-event-map.type';\n\n/**\n * Represents a use case that maps roles, a goal,\n * and a handler into an executable action\n */\nexport class Usecase<\n      Title extends string,\n      Roles extends readonly AnyRole[],\n      Handler extends AnyFunction,\n      Goal extends AnyGoal,\n   >\n   extends UsecaseSymbol<\n      typeof USECASE_TYPE,\n      UsecaseTitleFrom<Title, Roles, Goal>,\n      UsecaseEventMap\n   >\n   implements UsecaseModel<Title, Roles, Handler, Goal>\n{\n   get [TITLE_KEY](): Title {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, TITLE_KEY);\n   }\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   get [GOAL_KEY](): Goal {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, GOAL_KEY);\n   }\n\n   get [HANDLER_KEY](): Handler {\n      return get(this, HANDLER_KEY);\n   }\n\n   get [MOCK_HANDLER_KEY](): Handler | null {\n      return get(this, MOCK_HANDLER_KEY);\n   }\n\n   set [MOCK_HANDLER_KEY](handler: Handler | null) {\n      set(this, MOCK_HANDLER_KEY, handler);\n   }\n\n   get [BOUNDARY_KEY](): GoalBoundary<Goal> {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this[GOAL_KEY], BOUNDARY_KEY);\n   }\n\n   constructor(\n      title: Title,\n      roles: Roles,\n      goal: Goal,\n      handler: Handler,\n   ) {\n      super(USECASE_TYPE, createUsecaseTitle(title, goal, ...roles));\n\n      set(this, TITLE_KEY, title);\n      set(this, ROLES_KEY, roles);\n      set(this, HANDLER_KEY, handler);\n      set(this, MOCK_HANDLER_KEY, null);\n      set(this, GOAL_KEY, goal);\n   }\n\n   /** Returns the use case's display name */\n   toString(): string {\n      return getSymbolName(this);\n   }\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,KAAK,WAAW;AA0BlB,IAAM,UAAN,cAMI,cAMX;AAAA,EACG,KAAK,SAAS,IAAW;AAEtB,WAAO,IAAI,MAAM,SAAS;AAAA,EAC7B;AAAA,EAEA,KAAK,SAAS,IAAW;AAEtB,WAAO,IAAI,MAAM,SAAS;AAAA,EAC7B;AAAA,EAEA,KAAK,QAAQ,IAAU;AAEpB,WAAO,IAAI,MAAM,QAAQ;AAAA,EAC5B;AAAA,EAEA,KAAK,WAAW,IAAa;AAC1B,WAAO,IAAI,MAAM,WAAW;AAAA,EAC/B;AAAA,EAEA,KAAK,gBAAgB,IAAoB;AACtC,WAAO,IAAI,MAAM,gBAAgB;AAAA,EACpC;AAAA,EAEA,KAAK,gBAAgB,EAAE,SAAyB;AAC7C,QAAI,MAAM,kBAAkB,OAAO;AAAA,EACtC;AAAA,EAEA,KAAK,YAAY,IAAwB;AAEtC,WAAO,IAAI,KAAK,QAAQ,GAAG,YAAY;AAAA,EAC1C;AAAA,EAEA,YACG,OACA,OACA,MACA,SACD;AACC,UAAM,cAAc,mBAAmB,OAAO,MAAM,GAAG,KAAK,CAAC;AAE7D,QAAI,MAAM,WAAW,KAAK;AAC1B,QAAI,MAAM,WAAW,KAAK;AAC1B,QAAI,MAAM,aAAa,OAAO;AAC9B,QAAI,MAAM,kBAAkB,IAAI;AAChC,QAAI,MAAM,UAAU,IAAI;AAAA,EAC3B;AAAA;AAAA,EAGA,WAAmB;AAChB,WAAO,cAAc,IAAI;AAAA,EAC5B;AACH;",
  "names": []
}
