{
  "version": 3,
  "sources": ["../src/definition/classes/scope.class.ts"],
  "sourcesContent": ["import { get, set } from '@dikolab/private-parts';\nimport type { AnyBoundary } from '../../boundary/types/utility.type';\nimport {\n   BOUNDARY_KEY,\n   NAME_KEY,\n} from '../../utils/constants/symbol-keys.constant';\nimport type { Goal } from '../../goal/classes/goal.class';\nimport { defineGoal } from '../../goal/functions/define-goal.function';\nimport type {\n   AnyRole,\n   ResolveRoleNames,\n} from '../../actor/types/utility.type';\nimport { Role } from '../../actor/classes/role.class';\nimport { AsChain } from './as-chain.class';\n\n/**\n * Provides a scoped context for defining goals\n * and use cases within a boundary\n */\nexport class Scope<Boundary extends AnyBoundary> {\n   get [BOUNDARY_KEY](): Boundary {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, BOUNDARY_KEY);\n   }\n\n   constructor(boundary: Boundary) {\n      set(this, BOUNDARY_KEY, boundary);\n   }\n\n   /**\n    * Creates Goal to be used for declaring a Use-case\n    *\n    * @param title Unique goal title of what you want to achieve.\n    * @returns Goal\n    */\n   defineGoal<Title extends string>(\n      title: Title,\n   ): Goal<Title, Boundary> {\n      return defineGoal(title, this[BOUNDARY_KEY]);\n   }\n\n   /**\n    * Creates declaration of Roles that guards the Use-case execution\n    *\n    * @param roles Role names or Roles included in the context\n    * @returns declaration chain object\n    */\n   as<Targets extends readonly (string | AnyRole)[]>(\n      ...roles: Targets\n   ) {\n      const roleNames = roles.map((roleOrName) => {\n         if (typeof roleOrName === 'string') {\n            return roleOrName;\n         }\n\n         if (roleOrName instanceof Role) {\n            return roleOrName[NAME_KEY];\n         }\n\n         throw new TypeError('Role parameter is invalid.');\n      }) as ResolveRoleNames<Targets>;\n\n      return new AsChain(this[BOUNDARY_KEY], roleNames);\n   }\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;AAAA,SAAS,KAAK,WAAW;AAmBlB,IAAM,QAAN,MAA0C;AAAA,EAC9C,KAAK,YAAY,IAAc;AAE5B,WAAO,IAAI,MAAM,YAAY;AAAA,EAChC;AAAA,EAEA,YAAY,UAAoB;AAC7B,QAAI,MAAM,cAAc,QAAQ;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WACG,OACsB;AACtB,WAAO,WAAW,OAAO,KAAK,YAAY,CAAC;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MACM,OACJ;AACC,UAAM,YAAY,MAAM,IAAI,CAAC,eAAe;AACzC,UAAI,OAAO,eAAe,UAAU;AACjC,eAAO;AAAA,MACV;AAEA,UAAI,sBAAsB,MAAM;AAC7B,eAAO,WAAW,QAAQ;AAAA,MAC7B;AAEA,YAAM,IAAI,UAAU,4BAA4B;AAAA,IACnD,CAAC;AAED,WAAO,IAAI,QAAQ,KAAK,YAAY,GAAG,SAAS;AAAA,EACnD;AACH;",
  "names": []
}
