{
  "version": 3,
  "sources": ["../src/definition/classes/as-i-can-so-that-chain.class.ts"],
  "sourcesContent": ["import { get, set } from '@dikolab/private-parts';\nimport {\n   BOUNDARY_KEY,\n   GOAL_KEY,\n   ROLE_NAMES_KEY,\n   TITLE_KEY,\n} from '../../utils/constants/symbol-keys.constant';\nimport type { ActionTitleDefined } from '../types/action-title-defined.interface';\nimport type { RoleNamesDefined } from '../types/role-names-defined.interface';\n\nimport type { Usecase } from '../../usecase/classes/usecase.class';\nimport { getOrDefineRoles } from '../../actor/functions/get-or-define-roles.function';\nimport { defineUsecase } from '../../usecase/functions/define-usecase.function';\nimport type { AnyGoal } from '../../goal/types/utility.type';\nimport type { GoalDefined } from '../types/goal-defined.interface';\nimport type { ResolveRoles } from '../../actor/types/utility.type';\n\nimport type { AnyFunction } from '../../utils/types/utility.type';\nimport type { ImplementedAs } from '../types/implemented-as.interface';\nimport type { AnyBoundary } from '../../boundary/types/utility.type';\nimport type { BoundaryDefined } from '../types/boundary-defined.interface';\n\n/**\n * Fluent chain for declaring a use case goal,\n * finalized with a handler via `implementedAs()`\n */\nexport class AsICanSoThatChain<\n      Boundary extends AnyBoundary,\n      RoleNames extends readonly string[],\n      ActionTitle extends string,\n      Goal extends AnyGoal,\n   >\n   implements\n      BoundaryDefined<Boundary>,\n      RoleNamesDefined<RoleNames>,\n      ActionTitleDefined<ActionTitle>,\n      GoalDefined<Goal>,\n      ImplementedAs<RoleNames, ActionTitle, Goal>\n{\n   // InBoundary\n   get [BOUNDARY_KEY](): Boundary {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, BOUNDARY_KEY);\n   }\n\n   get [ROLE_NAMES_KEY](): RoleNames {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, ROLE_NAMES_KEY);\n   }\n\n   get [TITLE_KEY](): ActionTitle {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, TITLE_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   constructor(\n      boundary: Boundary,\n      roleNames: RoleNames,\n      title: ActionTitle,\n      goal: Goal,\n   ) {\n      set(this, BOUNDARY_KEY, boundary);\n      set(this, ROLE_NAMES_KEY, roleNames);\n      set(this, TITLE_KEY, title);\n      set(this, GOAL_KEY, goal);\n   }\n\n   /**\n    * Attaches handler function to be executed when Use-case is performed.\n    *\n    * @param handler Use-case execution handler function.\n    * @returns Usecase\n    */\n   implementedAs<Handler extends AnyFunction>(\n      handler: Handler,\n   ): Usecase<ActionTitle, ResolveRoles<RoleNames>, Handler, Goal> {\n      const roles = getOrDefineRoles(\n         ...this[ROLE_NAMES_KEY],\n      ) as ResolveRoles<RoleNames>;\n\n      const title = this[TITLE_KEY];\n      const goal = this[GOAL_KEY];\n\n      return defineUsecase(title, roles, goal, handler);\n   }\n}\n"],
  "mappings": ";;;;;;;;;;;;;;AAAA,SAAS,KAAK,WAAW;AA0BlB,IAAM,oBAAN,MAYP;AAAA;AAAA,EAEG,KAAK,YAAY,IAAc;AAE5B,WAAO,IAAI,MAAM,YAAY;AAAA,EAChC;AAAA,EAEA,KAAK,cAAc,IAAe;AAE/B,WAAO,IAAI,MAAM,cAAc;AAAA,EAClC;AAAA,EAEA,KAAK,SAAS,IAAiB;AAE5B,WAAO,IAAI,MAAM,SAAS;AAAA,EAC7B;AAAA,EAEA,KAAK,QAAQ,IAAU;AAEpB,WAAO,IAAI,MAAM,QAAQ;AAAA,EAC5B;AAAA,EAEA,YACG,UACA,WACA,OACA,MACD;AACC,QAAI,MAAM,cAAc,QAAQ;AAChC,QAAI,MAAM,gBAAgB,SAAS;AACnC,QAAI,MAAM,WAAW,KAAK;AAC1B,QAAI,MAAM,UAAU,IAAI;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cACG,SAC6D;AAC7D,UAAM,QAAQ;AAAA,MACX,GAAG,KAAK,cAAc;AAAA,IACzB;AAEA,UAAM,QAAQ,KAAK,SAAS;AAC5B,UAAM,OAAO,KAAK,QAAQ;AAE1B,WAAO,cAAc,OAAO,OAAO,MAAM,OAAO;AAAA,EACnD;AACH;",
  "names": []
}
