{
  "version": 3,
  "sources": ["../src/definition/classes/as-i-can-chain.class.ts"],
  "sourcesContent": ["import { get, set } from '@dikolab/private-parts';\nimport {\n   BOUNDARY_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';\nimport type { SoThatGoal } from '../types/so-that-goal.interface';\nimport type {\n   AnyGoal,\n   AnyGoalBoundTo,\n} from '../../goal/types/utility.type';\nimport { AsICanSoThatChain } from './as-i-can-so-that-chain.class';\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 action,\n * continues with a goal via `soThat()`\n */\nexport class AsICanChain<\n      Boundary extends AnyBoundary,\n      RoleNames extends readonly string[],\n      ActionTitle extends string,\n   >\n   implements\n      BoundaryDefined<Boundary>,\n      RoleNamesDefined<RoleNames>,\n      ActionTitleDefined<ActionTitle>,\n      SoThatGoal<Boundary>\n{\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   constructor(\n      boundary: Boundary,\n      roleNames: RoleNames,\n      title: ActionTitle,\n   ) {\n      set(this, BOUNDARY_KEY, boundary);\n      set(this, ROLE_NAMES_KEY, roleNames);\n      set(this, TITLE_KEY, title);\n   }\n\n   /**\n    * Assigns Goal of the Use-case\n    *\n    * @param goal The goal of the Use-case.\n    * @returns declaration chain\n    */\n   soThat<Goal extends AnyGoalBoundTo<Boundary>>(goal: AnyGoal) {\n      return new AsICanSoThatChain(\n         this[BOUNDARY_KEY],\n         this[ROLE_NAMES_KEY],\n         this[TITLE_KEY],\n         goal,\n      ) as AsICanSoThatChain<Boundary, RoleNames, ActionTitle, Goal>;\n   }\n}\n"],
  "mappings": ";;;;;;;;;;AAAA,SAAS,KAAK,WAAW;AAqBlB,IAAM,cAAN,MAUP;AAAA,EACG,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,YACG,UACA,WACA,OACD;AACC,QAAI,MAAM,cAAc,QAAQ;AAChC,QAAI,MAAM,gBAAgB,SAAS;AACnC,QAAI,MAAM,WAAW,KAAK;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAA8C,MAAe;AAC1D,WAAO,IAAI;AAAA,MACR,KAAK,YAAY;AAAA,MACjB,KAAK,cAAc;AAAA,MACnB,KAAK,SAAS;AAAA,MACd;AAAA,IACH;AAAA,EACH;AACH;",
  "names": []
}
