{
  "version": 3,
  "sources": ["../src/index.ts", "../src/definition/classes/iam-chain.class.ts", "../src/utils/constants/symbol-keys.constant.ts", "../src/actor/classes/actor.class.ts", "../src/symbol/classes/usecase-symbol.class.ts", "../src/symbol/constants/symbol-lookup.constant.ts", "../src/symbol/functions/create-symbol-id.function.ts", "../src/event/constants/event-keys.ts", "../src/utils/constants/symbol-tag.constant.ts", "../src/actor/classes/role.class.ts", "../src/actor/functions/define-role.function.ts", "../src/symbol/functions/get-symbol-by-id.function.ts", "../src/actor/functions/get-or-define-roles.function.ts", "../src/actor/functions/define-actor.function.ts", "../src/definition/functions/i-am.function.ts", "../src/boundary/functions/create-boundary-name-details.function.ts", "../src/boundary/classes/boundary.class.ts", "../src/boundary/functions/define-boundary.function.ts", "../src/definition/classes/scope.class.ts", "../src/goal/classes/goal.class.ts", "../src/goal/functions/create-goal-name.function.ts", "../src/goal/functions/define-goal.function.ts", "../src/definition/classes/as-chain.class.ts", "../src/definition/classes/as-i-can-chain.class.ts", "../src/definition/classes/as-i-can-so-that-chain.class.ts", "../src/usecase/classes/usecase.class.ts", "../src/actor/functions/get-role-name.function.ts", "../src/boundary/functions/get-boundary-name.function.ts", "../src/goal/functions/get-goal-boundary.function.ts", "../src/goal/functions/get-goal-title.funciton.ts", "../src/usecase/functions/create-usecase-title.function.ts", "../src/symbol/functions/get-symbol-name.function.ts", "../src/usecase/functions/define-usecase.function.ts", "../src/definition/functions/define-scope.function.ts", "../src/symbol/functions/emit-symbol-event.function.ts", "../src/usecase/classes/transaction.class.ts", "../src/actor/functions/intersect-roles.function.ts", "../src/usecase/functions/is-actor-allow-to-perform.function.ts", "../src/usecase/functions/create-session-data.function.ts", "../src/execution/functions/assume.function.ts", "../src/event/functions/listen-symbol-event.function.ts", "../src/event/functions/unlisten-symbol-event.function.ts", "../src/event/functions/clear-all-symbol-event-listeners.function.ts", "../src/event/functions/clear-symbol-event-listeners.function.ts", "../src/symbol/functions/clear-symbols.function.ts", "../src/usecase/functions/mock-usecase-handler.funtion.ts", "../src/usecase/functions/clear-mock-usecase-handler.function.ts"],
  "sourcesContent": ["import { iAm } from './definition/functions/i-am.function';\nimport { defineScope } from './definition/functions/define-scope.function';\nimport { assume } from './execution/functions/assume.function';\n\nimport { listenSymbolEvent as listen } from './event/functions/listen-symbol-event.function';\nimport { unlistenSymbolEvent as unlisten } from './event/functions/unlisten-symbol-event.function';\nimport { clearAllSymbolListeners as clearAllListeners } from './event/functions/clear-all-symbol-event-listeners.function';\nimport { clearSymbolEventListeners as clearListeners } from './event/functions/clear-symbol-event-listeners.function';\n\nimport { Transaction } from './usecase/classes/transaction.class';\n\nimport { clearSymbols } from './symbol/functions/clear-symbols.function';\nimport { mockUsecaseHandler } from './usecase/functions/mock-usecase-handler.funtion';\nimport { clearMockeUsecaseHandler } from './usecase/functions/clear-mock-usecase-handler.function';\n\nimport { Actor } from './actor/classes/actor.class';\nimport { Role } from './actor/classes/role.class';\nimport { Boundary } from './boundary/classes/boundary.class';\nimport { Goal } from './goal/classes/goal.class';\nimport { Usecase } from './usecase/classes/usecase.class';\n\nexport {\n   // Definitions\n   iAm,\n   defineScope,\n\n   // Execution\n   assume,\n\n   // Event Listeners\n   listen,\n   unlisten,\n   clearListeners,\n   clearAllListeners,\n\n   // Available Symbols\n   Actor,\n   Role,\n   Boundary,\n   Goal,\n   Usecase,\n\n   // utility:execution\n   Transaction,\n\n   // utility:testing\n   clearSymbols,\n   mockUsecaseHandler,\n   clearMockeUsecaseHandler,\n};\n", "import { get, set } from '@dikolab/private-parts';\nimport { TITLE_KEY } from '../../utils/constants/symbol-keys.constant';\nimport { defineActor } from '../../actor/functions/define-actor.function';\n\n/**\n * Fluent chain for defining an actor by name\n * and assigning roles\n */\nexport class IAmChain<ActorName extends string> {\n   get [TITLE_KEY](): ActorName {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, TITLE_KEY);\n   }\n\n   constructor(actorName: ActorName) {\n      set(this, TITLE_KEY, actorName);\n   }\n\n   /**\n    * Defines an Actor with the given Roles.\n    *\n    * @param roles Roles to attach\n    * @returns Actor\n    */\n   as<RoleNames extends readonly string[]>(...roles: RoleNames) {\n      return defineActor(this[TITLE_KEY], ...roles);\n   }\n}\n", "export const ID_KEY: unique symbol = Symbol('ID');\nexport const NAME_KEY: unique symbol = Symbol('Name');\nexport const TYPE_KEY: unique symbol = Symbol('Type');\nexport const EVENT_KEY: unique symbol = Symbol('Event Emitter');\nexport const TITLE_KEY: unique symbol = Symbol('Title');\n\nexport const ACTOR_KEY: unique symbol = Symbol('Actor');\nexport const ROLE_KEY: unique symbol = Symbol('Role');\nexport const ROLES_KEY: unique symbol = Symbol('Roles');\nexport const ROLE_NAMES_KEY: unique symbol = Symbol('Role Names');\n\nexport const BOUNDARY_KEY: unique symbol = Symbol('Boundary');\nexport const SUBTYPE_KEY: unique symbol = Symbol('Subtype');\nexport const STATE_KEY: unique symbol = Symbol('State');\n\nexport const GOAL_KEY: unique symbol = Symbol('Goal');\nexport const GOAL_HANDLER_KEY: unique symbol = Symbol('Goal Handler');\n\nexport const HANDLER_KEY: unique symbol = Symbol('Handler');\nexport const MOCK_HANDLER_KEY: unique symbol = Symbol('Mock Handler');\n\nexport const USECASE_KEY: unique symbol = Symbol('Usecase');\nexport const STORY_KEY: unique symbol = Symbol('Story');\n\nexport const TRANSACTION_SESSION: unique symbol = Symbol(\n   'Transaction Session',\n);\nexport const TRANSACTION_SIGNATURE: unique symbol = Symbol(\n   'Transaction Signature',\n);\n", "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", "import { get, set } from '@dikolab/private-parts';\nimport { SYMBOL_LOOKUP } from '../constants/symbol-lookup.constant';\nimport type {\n   UsecaseSymbolLike,\n   UsecaseSymbolModel,\n} from '../types/usecase-symbol-model.interface';\nimport {\n   ID_KEY,\n   NAME_KEY,\n   TYPE_KEY,\n} from '../../utils/constants/symbol-keys.constant';\nimport type { UsecaseSymbolJSON } from '../types/usecase-symbol-json.interface';\nimport type { UsecaseSymbolId } from '../types/utility.type';\nimport { createSymbolId } from '../functions/create-symbol-id.function';\nimport { EVENT_EMITTER_KEY } from '../../event/constants/event-keys';\nimport EventEmitter from 'events';\nimport type {\n   AnyEventMap,\n   DefaultEventMap,\n} from '../../event/types/event-map.type';\n\n/**\n * Abstract base for all use case domain symbols\n * (actors, roles, boundaries, goals, use cases)\n */\nexport abstract class UsecaseSymbol<\n      Type extends string,\n      Name extends string,\n      EventMap extends AnyEventMap = DefaultEventMap,\n   >\n   implements\n      UsecaseSymbolModel<Type, Name, EventMap>,\n      UsecaseSymbolJSON<Type, Name>\n{\n   get [TYPE_KEY](): Type {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, TYPE_KEY);\n   }\n\n   get [NAME_KEY](): Name {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, NAME_KEY);\n   }\n\n   get [ID_KEY](): UsecaseSymbolId<Type, Name> {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, ID_KEY);\n   }\n\n   get [EVENT_EMITTER_KEY](): EventEmitter<EventMap> {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, EVENT_EMITTER_KEY);\n   }\n\n   constructor(type: Type, name: Name) {\n      const id = createSymbolId(type, name);\n\n      // symbols are unique\n      if (SYMBOL_LOOKUP.has(id)) {\n         throw new ReferenceError(`Symbol ${id} already exist.`);\n      }\n\n      set(\n         this,\n         EVENT_EMITTER_KEY,\n         new EventEmitter({\n            captureRejections: true,\n         }),\n      );\n      set(this, TYPE_KEY, type);\n      set(this, NAME_KEY, name);\n      set(this, ID_KEY, id);\n\n      // register to symbol lookup\n      SYMBOL_LOOKUP.set(id, this as UsecaseSymbolLike);\n   }\n\n   /** Returns the symbol's unique identifier */\n   toString() {\n      return this[ID_KEY] as string;\n   }\n\n   /** Returns a plain object with type and name */\n   toJSON() {\n      return {\n         type: this[TYPE_KEY],\n         name: this[NAME_KEY],\n      };\n   }\n}\n", "import type { UsecaseSymbolLike } from '../types/usecase-symbol-model.interface';\n\nexport const SYMBOL_LOOKUP = new Map<string, UsecaseSymbolLike>();\n", "import type { UsecaseSymbolId } from '../types/utility.type';\n\nexport function createSymbolId<\n   Type extends string,\n   Name extends string,\n>(type: Type, name: Name): UsecaseSymbolId<Type, Name>;\n\nexport function createSymbolId<\n   Type extends string,\n   Name extends string,\n>(id: string): UsecaseSymbolId<Type, Name>;\n\nexport function createSymbolId(\n   typeOrId: string,\n   name?: string,\n): string {\n   if (typeof name === 'string') {\n      return `${typeOrId}<${name}>`;\n   }\n\n   return typeOrId;\n}\n", "export const EVENT_EMITTER_KEY: unique symbol = Symbol('Event Emitter');\n\nexport const EVENT_EMIT_KEY: unique symbol = Symbol('Emit Event');\n", "export const ACTOR_TYPE = 'Actor';\nexport const ROLE_TYPE = 'Role';\nexport const BOUNDARY_TYPE = 'Boundary';\nexport const ACTION_TYPE = 'Action';\nexport const USECASE_TYPE = 'Usecase';\nexport const GOAL_TYPE = 'Goal';\n", "import { UsecaseSymbol } from '../../symbol/classes/usecase-symbol.class';\nimport { ROLE_TYPE } from '../../utils/constants/symbol-tag.constant';\nimport type { RoleModel } from '../types/role-model.interface';\n\n/**\n * Represents a named role that can be assigned\n * to actors to grant use case permissions\n */\nexport class Role<Name extends string>\n   extends UsecaseSymbol<typeof ROLE_TYPE, Name>\n   implements RoleModel<Name>\n{\n   constructor(name: Name) {\n      super(ROLE_TYPE, name);\n   }\n}\n", "import { Role } from '../classes/role.class';\n\nexport function defineRole<Name extends string>(name: Name) {\n   return new Role(name);\n}\n", "import { SYMBOL_LOOKUP } from '../constants/symbol-lookup.constant';\nimport type { UsecaseSymbolModel } from '../types/usecase-symbol-model.interface';\nimport type { UsecaseSymbolId } from '../types/utility.type';\nimport { createSymbolId } from './create-symbol-id.function';\n\nexport function getSymbolById<Type extends string, Name extends string>(\n   type: Type,\n   name: Name,\n): UsecaseSymbolModel<Type, Name> | null;\n\nexport function getSymbolById<Type extends string, Name extends string>(\n   id: UsecaseSymbolId<Type, Name>,\n): UsecaseSymbolModel<Type, Name> | null;\n\nexport function getSymbolById(typeOrId: string, name?: string) {\n   const fullId =\n      typeof name === 'string'\n         ? createSymbolId(typeOrId, name)\n         : createSymbolId(typeOrId);\n\n   if (SYMBOL_LOOKUP.has(fullId)) {\n      return SYMBOL_LOOKUP.get(fullId);\n   }\n\n   return null;\n}\n", "import { defineRole } from '../../actor/functions/define-role.function';\nimport { getSymbolById } from '../../symbol/functions/get-symbol-by-id.function';\nimport { ROLE_TYPE } from '../../utils/constants/symbol-tag.constant';\nimport type { ResolveRoles } from '../types/utility.type';\n\nexport function getOrDefineRoles<Names extends readonly string[]>(\n   ...roleNames: Names\n) {\n   return roleNames.map((name) => {\n      if (typeof name !== 'string') {\n         throw new TypeError(\n            `\"${String(name)}\" in roleNames parameter is invalid.`,\n         );\n      }\n\n      return getSymbolById(ROLE_TYPE, name) || defineRole(name);\n   }) as ResolveRoles<Names>;\n}\n", "import { Actor } from '../classes/actor.class';\nimport type { Role } from '../classes/role.class';\nimport type { ResolveRoles } from '../types/utility.type';\nimport { getOrDefineRoles } from './get-or-define-roles.function';\n\nexport function defineActor<\n   Name extends string,\n   RoleNames extends readonly string[],\n>(name: Name, ...roleOrNames: RoleNames) {\n   if (!name || typeof name !== 'string') {\n      throw new TypeError(`\"${name}\" name parameter is invald.`);\n   }\n\n   // get role or create if do not exist!\n   const [role] = getOrDefineRoles(name) as [Role<Name>];\n   const others = getOrDefineRoles(\n      ...roleOrNames,\n   ) as ResolveRoles<RoleNames>;\n   const roles = [role, ...others] as const;\n\n   return new Actor(name, roles);\n}\n", "import { IAmChain } from '../classes/iam-chain.class';\n\n/**\n * A chain call to create Actor and attached roles\n *\n * @param name Actor name\n * @returns Chain declaration instance of Actor.\n */\nexport function iAm<Name extends string>(name: Name) {\n   if (!name || typeof name !== 'string') {\n      throw new TypeError(`\"${name}\" name parameter is invald.`);\n   }\n\n   return new IAmChain(name);\n}\n", "const BOUNDARY_NAME_PATTERN = /^([^:]+):(.+)$/;\n\nexport function createBoundaryNameDetails<\n   Type extends string,\n   Title extends string,\n>(name: `${Type}:${Title}`) {\n   if (!BOUNDARY_NAME_PATTERN.test(name)) {\n      throw new SyntaxError(`${name} Boundary Name is malformed.`);\n   }\n\n   const [rawType, rawTitle] = name\n      .match(BOUNDARY_NAME_PATTERN)\n      ?.slice(1) || ['', ''];\n\n   const type = rawType.trim() as Type;\n   const title = rawTitle.trim() as Title;\n   const id = `${type}:${title}`;\n\n   return [type, title, id] as const;\n}\n", "import { get, set } from '@dikolab/private-parts';\nimport { UsecaseSymbol } from '../../symbol/classes/usecase-symbol.class';\nimport {\n   SUBTYPE_KEY,\n   TITLE_KEY,\n} from '../../utils/constants/symbol-keys.constant';\n\nimport { BOUNDARY_TYPE } from '../../utils/constants/symbol-tag.constant';\nimport type { BoundaryModel } from '../types/boundary-model.interface';\n\n/**\n * Represents a system boundary that groups\n * related goals and use cases under a typed\n * domain scope\n */\nexport class Boundary<Type extends string, Title extends string>\n   extends UsecaseSymbol<typeof BOUNDARY_TYPE, `${Type}:${Title}`>\n   implements BoundaryModel<Type, Title>\n{\n   get [SUBTYPE_KEY](): Type {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, SUBTYPE_KEY);\n   }\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   constructor(type: Type, title: Title) {\n      super(BOUNDARY_TYPE, `${type}:${title}`);\n\n      set(this, SUBTYPE_KEY, type);\n      set(this, TITLE_KEY, title);\n   }\n\n   /** Returns a plain object with type, name, and subtype */\n   toJSON() {\n      return {\n         ...super.toJSON(),\n         subtype: this[SUBTYPE_KEY],\n      };\n   }\n}\n", "import { Boundary } from '../classes/boundary.class';\n\nexport function defineBoundary<\n   Type extends string,\n   Title extends string,\n>(type: Type, title: Title): Boundary<Type, Title> {\n   return new Boundary(type, title);\n}\n", "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", "import { get, set } from '@dikolab/private-parts';\nimport { UsecaseSymbol } from '../../symbol/classes/usecase-symbol.class';\nimport { GOAL_TYPE } from '../../utils/constants/symbol-tag.constant';\nimport type { GoalModel } from '../types/goal-model.interface';\nimport type { AnyBoundary } from '../../boundary/types/utility.type';\nimport {\n   BOUNDARY_KEY,\n   TITLE_KEY,\n} from '../../utils/constants/symbol-keys.constant';\nimport type { GoalName } from '../types/goal-name.type';\nimport { createGoalName } from '../functions/create-goal-name.function';\nimport type { GoalEventMap } from '../types/goal-event-map.type';\n\n/**\n * Represents an outcome that a use case aims\n * to achieve within a boundary\n */\nexport class Goal<Title extends string, Boundary extends AnyBoundary>\n   extends UsecaseSymbol<\n      typeof GOAL_TYPE,\n      GoalName<Title, Boundary>,\n      GoalEventMap\n   >\n   implements GoalModel<Title, Boundary>\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 [BOUNDARY_KEY](): Boundary {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, BOUNDARY_KEY);\n   }\n\n   constructor(title: Title, boundary: Boundary) {\n      super(GOAL_TYPE, createGoalName(title, boundary));\n      set(this, TITLE_KEY, title);\n      set(this, BOUNDARY_KEY, boundary);\n   }\n}\n", "import type { AnyBoundary } from '../../boundary/types/utility.type';\nimport { NAME_KEY } from '../../utils/constants/symbol-keys.constant';\nimport type { GoalName } from '../types/goal-name.type';\n\nexport function createGoalName<\n   Title extends string,\n   Boundary extends AnyBoundary,\n>(title: Title, boundary: Boundary) {\n   const boundaryName = boundary[NAME_KEY];\n\n   return `${boundaryName}-${title}` as GoalName<Title, Boundary>;\n}\n", "import type { AnyBoundary } from '../../boundary/types/utility.type';\nimport { Goal } from '../classes/goal.class';\n\nexport function defineGoal<\n   Title extends string,\n   Boundary extends AnyBoundary,\n>(title: Title, boundary: Boundary) {\n   return new Goal(title, boundary);\n}\n", "import { get, set } from '@dikolab/private-parts';\nimport {\n   BOUNDARY_KEY,\n   ROLE_NAMES_KEY,\n} from '../../utils/constants/symbol-keys.constant';\nimport type { RoleNamesDefined } from '../types/role-names-defined.interface';\nimport type { ICanActionTitle } from '../types/i-can-action-title.interface';\nimport { AsICanChain } from './as-i-can-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 use case roles,\n * continues with an action title via `iCan()`\n */\nexport class AsChain<\n      Boundary extends AnyBoundary,\n      RoleNames extends readonly [...string[]],\n   >\n   implements\n      BoundaryDefined<Boundary>,\n      RoleNamesDefined<RoleNames>,\n      ICanActionTitle\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   constructor(boundary: Boundary, roleNames: RoleNames) {\n      set(this, BOUNDARY_KEY, boundary);\n      set(this, ROLE_NAMES_KEY, roleNames);\n   }\n\n   /**\n    * Declares text title of the Use-case.\n    *\n    * @param title Text title of the Use-case\n    * @returns declaration chain\n    */\n   iCan<ActionTitle extends string>(\n      title: ActionTitle,\n   ): AsICanChain<Boundary, RoleNames, ActionTitle> {\n      return new AsICanChain(\n         this[BOUNDARY_KEY],\n         this[ROLE_NAMES_KEY],\n         title,\n      );\n   }\n}\n", "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", "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", "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", "import { get } from '@dikolab/private-parts';\nimport type { AnyRole, RoleName } from '../types/utility.type';\nimport { NAME_KEY } from '../../utils/constants/symbol-keys.constant';\n\nexport function getRoleName<Role extends AnyRole>(\n   role: Role,\n): RoleName<Role> {\n   // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n   return get(role, NAME_KEY);\n}\n", "import { get } from '@dikolab/private-parts';\nimport type { AnyBoundary, BoundaryName } from '../types/utility.type';\nimport { NAME_KEY } from '../../utils/constants/symbol-keys.constant';\n\nexport function getBoundaryName<Boundary extends AnyBoundary>(\n   boundary: Boundary,\n): BoundaryName<Boundary> {\n   // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n   return get(boundary, NAME_KEY);\n}\n", "import { get } from '@dikolab/private-parts';\nimport { BOUNDARY_KEY } from '../../utils/constants/symbol-keys.constant';\nimport type { GoalBoundary } from '../types/goal-boundary.type';\nimport type { AnyGoal } from '../types/utility.type';\n\nexport function getGoalBoundary<Goal extends AnyGoal>(\n   goal: Goal,\n): GoalBoundary<Goal> {\n   // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n   return get(goal, BOUNDARY_KEY);\n}\n", "import { get } from '@dikolab/private-parts';\nimport { TITLE_KEY } from '../../utils/constants/symbol-keys.constant';\nimport type { GoalTitle } from '../types/goal-title.type';\nimport type { AnyGoal } from '../types/utility.type';\n\nexport function getGoalTitle<Goal extends AnyGoal>(\n   goal: Goal,\n): GoalTitle<Goal> {\n   // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n   return get(goal, TITLE_KEY);\n}\n", "import { getRoleName } from '../../actor/functions/get-role-name.function';\nimport type {\n   AnyRole,\n   StringifyRoles,\n} from '../../actor/types/utility.type';\nimport { getBoundaryName } from '../../boundary/functions/get-boundary-name.function';\nimport { getGoalBoundary } from '../../goal/functions/get-goal-boundary.function';\n\nimport { getGoalTitle } from '../../goal/functions/get-goal-title.funciton';\nimport type { AnyGoal } from '../../goal/types/utility.type';\nimport type { UsecaseTitleFrom } from '../types/usecase-title-from.type';\n\nexport function createUsecaseTitle<\n   Title extends string,\n   Roles extends readonly AnyRole[],\n   Goal extends AnyGoal,\n>(\n   title: Title,\n   goal: Goal,\n   ...roles: Roles\n): UsecaseTitleFrom<Title, Roles, Goal> {\n   const rolesNames = roles\n      .map((role) => getRoleName(role))\n      .join(',') as StringifyRoles<Roles>;\n\n   const goalTitle = getGoalTitle(goal);\n\n   const boundaryName = getBoundaryName(getGoalBoundary(goal));\n\n   return `As Role<${rolesNames}>, I can ${title} in ${boundaryName}. So that, ${goalTitle}`;\n}\n", "import { NAME_KEY } from '../../utils/constants/symbol-keys.constant';\nimport type {\n   AnyUsecaseSymbol,\n   UsecaseSymbolName,\n} from '../types/utility.type';\n\nexport function getSymbolName<UsecaseSymbol extends AnyUsecaseSymbol>(\n   usecaseSymbol: UsecaseSymbol,\n) {\n   return usecaseSymbol[NAME_KEY] as UsecaseSymbolName<UsecaseSymbol>;\n}\n", "import type { AnyRole } from '../../actor/types/utility.type';\nimport type { AnyGoal } from '../../goal/types/utility.type';\nimport type { AnyFunction } from '../../utils/types/utility.type';\nimport { Usecase } from '../classes/usecase.class';\n\nexport function defineUsecase<\n   Title extends string,\n   Roles extends readonly AnyRole[],\n   Handler extends AnyFunction,\n   Goal extends AnyGoal,\n>(title: Title, roles: Roles, goal: Goal, handler: Handler) {\n   return new Usecase(title, roles, goal, handler);\n}\n", "import { createBoundaryNameDetails } from '../../boundary/functions/create-boundary-name-details.function';\nimport { defineBoundary } from '../../boundary/functions/define-boundary.function';\nimport { Scope } from '../classes/scope.class';\n\n/**\n * Defines a Boundary and declaration scope.\n *\n * @param name Name of the Boundary in this format `${Type}:${Title}`\n * @returns declaration Scope\n */\nexport function defineScope<Type extends string, Title extends string>(\n   name: `${Type}:${Title}`,\n) {\n   const [type, title] = createBoundaryNameDetails(name);\n\n   const boundary = defineBoundary(type, title);\n\n   return new Scope(boundary);\n}\n", "import { EVENT_EMITTER_KEY } from '../../event/constants/event-keys';\nimport type { AnyEventMap } from '../../event/types/event-map.type';\nimport type { AnyList } from '../../utils/types/utility.type';\nimport type { UsecaseSymbolEventMap } from '../types/usecase-symbol-event.type';\nimport type { UsecaseSymbolModel } from '../types/usecase-symbol-model.interface';\n\n/**\n * Disptaches Target Symbol event.\n *\n * @param symbol Target symbol. may be one of the following: Actor,\n * Role, Usecase, Goal, Boundary\n * @param type Event type\n * @param args Parameters of the dispatched event.\n */\nexport function emitSymbolEvent<\n   Source extends UsecaseSymbolModel<string, string, AnyEventMap>,\n   Type extends keyof UsecaseSymbolEventMap<Source>,\n   Params extends UsecaseSymbolEventMap<Source>[Type],\n>(\n   symbol: Source,\n   type: Type,\n   ...args: Params extends AnyList ? [...Params] : []\n): void {\n   symbol[EVENT_EMITTER_KEY].emit(type, ...args);\n}\n", "import { get, set } from '@dikolab/private-parts';\nimport {\n   ACTOR_KEY,\n   GOAL_KEY,\n   HANDLER_KEY,\n   MOCK_HANDLER_KEY,\n   ROLES_KEY,\n   TRANSACTION_SESSION,\n   TRANSACTION_SIGNATURE,\n} from '../../utils/constants/symbol-keys.constant';\nimport type { TransactionModel } from '../types/transaction-model.type';\nimport type {\n   PerformParameters,\n   PerformAwaitedResult,\n   PerformUsecase,\n} from '../types/performer.type';\n\nimport type { AnyActor } from '../../actor/types/utility.type';\nimport { isActorAllowToPerform } from '../functions/is-actor-allow-to-perform.function';\nimport { createSessionData } from '../functions/create-session-data.function';\nimport type { AnyFunction } from '../../utils/types/utility.type';\nimport { emitSymbolEvent } from '../../symbol/functions/emit-symbol-event.function';\nimport type { AnyUsecase } from '../types/utility.type';\n\n/**\n * Encapsulates an actor's execution context with\n * session data, providing methods to perform use\n * cases and override session state\n */\nexport class Transaction<\n   Data extends object,\n   Actor extends AnyActor = AnyActor,\n> implements TransactionModel<Data>\n{\n   readonly [TRANSACTION_SIGNATURE] = 1;\n\n   get [ACTOR_KEY](): Actor {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, ACTOR_KEY);\n   }\n\n   get [TRANSACTION_SESSION](): Readonly<Data> {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return get(this, TRANSACTION_SESSION);\n   }\n\n   constructor(data: Data, actor: Actor) {\n      set(this, TRANSACTION_SESSION, data);\n      set(this, ACTOR_KEY, actor);\n   }\n\n   /**\n    * Retrieves Session data based from \"name\" key parameter.\n    *\n    * @param name Key of session data\n    * @returns value of store session data. Or, undefined if not found\n    */\n   get<Key extends keyof Data>(name: Key): Data[Key] | undefined {\n      const session = this[TRANSACTION_SESSION];\n\n      return Object.prototype.hasOwnProperty.call(session, name)\n         ? session[name]\n         : undefined;\n   }\n\n   /**\n    * Creates new transaction with overridden Session data\n    *\n    * @param overrides session data overrides\n    * @returns Transaction\n    */\n   override<Overrides extends object>(\n      overrides: Overrides,\n   ): Transaction<Data & Overrides> {\n      const session = this[TRANSACTION_SESSION];\n\n      const newData = Object.assign({}, session, overrides);\n\n      return new Transaction(newData, this[ACTOR_KEY]);\n   }\n\n   /**\n    * Performs a Use-case and returns result of the Use-case handler.\n    *\n    * @param usecase The Use-case to perform allowed by Roles\n    * @param params Use case handler parameters\n    * @returns Result of perform Use-case\n    */\n   async perform<Usecase extends PerformUsecase<Data>>(\n      usecase: Usecase,\n      ...params: PerformParameters<Usecase>\n   ): Promise<PerformAwaitedResult<Usecase>> {\n      const roles = usecase[ROLES_KEY];\n      const actor = this[ACTOR_KEY];\n\n      if (!isActorAllowToPerform(actor, roles)) {\n         throw new Error(\n            `${String(this[ACTOR_KEY])} is not allowed to perform \"${String(usecase)}\"`,\n         );\n      }\n\n      // if no mock handler, use the original handler\n      const handler = (usecase[MOCK_HANDLER_KEY] ||\n         usecase[HANDLER_KEY]) as AnyFunction;\n\n      const transaction = new Transaction(\n         createSessionData(this[TRANSACTION_SESSION]),\n         actor,\n      );\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n      const result = await handler(...params, transaction);\n\n      emitSymbolEvent(\n         usecase as AnyUsecase,\n         'perform',\n         result,\n         usecase,\n         actor,\n      );\n\n      const goal = usecase[GOAL_KEY];\n\n      emitSymbolEvent(goal, 'achieved', goal, usecase, result);\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return result;\n   }\n}\n", "import type { IntersectTuple } from '../../utils/types/utility.type';\nimport type { AnyRole } from '../types/utility.type';\n\nexport function intersectRoles<\n   Pool extends readonly AnyRole[],\n   Target extends readonly AnyRole[],\n>(pool: Pool, target: Target) {\n   const set = new WeakSet<AnyRole>(pool);\n   return target.filter((role) => set.has(role)) as [\n      ...IntersectTuple<Pool, Target>,\n   ];\n}\n", "import { intersectRoles } from '../../actor/functions/intersect-roles.function';\nimport type { AnyActor, AnyRole } from '../../actor/types/utility.type';\nimport { ROLES_KEY } from '../../utils/constants/symbol-keys.constant';\n\nexport function isActorAllowToPerform(\n   actor: AnyActor,\n   roles: readonly AnyRole[],\n): boolean {\n   return intersectRoles(roles, actor[ROLES_KEY]).length > 0;\n}\n", "import { get, set } from '@dikolab/private-parts';\n\nexport function createSessionData<Data extends object>(\n   data: Data,\n): Readonly<Data> {\n   return (Object.keys(data) as (keyof Data)[]).reduce(\n      (newData, key) => {\n         set(newData, key, data[key]);\n         Object.defineProperty(newData, key, {\n            enumerable: true,\n            configurable: false,\n            get() {\n               // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n               return get(newData, key);\n            },\n         });\n\n         return newData;\n      },\n      {} as Readonly<Data>,\n   );\n}\n", "import type { AnyActor } from '../../actor/types/utility.type';\nimport { emitSymbolEvent } from '../../symbol/functions/emit-symbol-event.function';\nimport { Transaction } from '../../usecase/classes/transaction.class';\n\nimport { Actor } from '../../actor/classes/actor.class';\n\n/**\n * Assumes actor to perform allowed Use-case based on Roles.\n *\n * @param actor Actor to assume for later perform Use-case\n * @returns Transaction\n */\nexport function assume<Source extends AnyActor>(actor: Source) {\n   const transaction = new Transaction({}, actor);\n\n   if (actor instanceof Actor) {\n      emitSymbolEvent(actor, 'assume', actor);\n   }\n\n   return transaction;\n}\n", "import { EVENT_EMITTER_KEY } from '../constants/event-keys';\nimport type { AnyEventMap } from '../types/event-map.type';\nimport type { AnyList, AnyType } from '../../utils/types/utility.type';\nimport type { UsecaseSymbolEventMap } from '../../symbol/types/usecase-symbol-event.type';\nimport type { UsecaseSymbolModel } from '../../symbol/types/usecase-symbol-model.interface';\n\n/**\n * Listens to Symbol events\n *\n * @param symbol Target symbol. may be one of the following: Actor,\n * Role, Usecase, Goal, Boundary\n * @param type Event type\n * @param listener the function callback to execute when event is dispatched.\n */\nexport function listenSymbolEvent<\n   Source extends UsecaseSymbolModel<string, string, AnyEventMap>,\n   Type extends keyof UsecaseSymbolEventMap<Source>,\n   Params extends UsecaseSymbolEventMap<Source>[Type],\n>(\n   symbol: Source,\n   type: Type,\n   listener: (\n      ...args: Params extends AnyList ? [...Params] : []\n   ) => AnyType,\n): void {\n   symbol[EVENT_EMITTER_KEY].on(type, listener);\n}\n", "import { EVENT_EMITTER_KEY } from '../constants/event-keys';\nimport type { AnyEventMap } from '../types/event-map.type';\nimport type { AnyList, AnyType } from '../../utils/types/utility.type';\nimport type { UsecaseSymbolEventMap } from '../../symbol/types/usecase-symbol-event.type';\nimport type { UsecaseSymbolModel } from '../../symbol/types/usecase-symbol-model.interface';\n\n/**\n * Removes event listener registered in the Target symbol\n *\n * @param symbol Target symbol. may be one of the following: Actor,\n * Role, Usecase, Goal, Boundary\n * @param type Event Name\n * @param listener The registered event listener callback function.\n */\nexport function unlistenSymbolEvent<\n   Source extends UsecaseSymbolModel<string, string, AnyEventMap>,\n   Type extends keyof UsecaseSymbolEventMap<Source>,\n   Params extends UsecaseSymbolEventMap<Source>[Type],\n>(\n   symbol: Source,\n   type: Type,\n   listener: (\n      ...args: Params extends AnyList ? [...Params] : []\n   ) => AnyType,\n): void {\n   symbol[EVENT_EMITTER_KEY].removeListener(type, listener);\n}\n", "import type EventEmitter from 'events';\nimport { EVENT_EMITTER_KEY } from '../constants/event-keys';\nimport { SYMBOL_LOOKUP } from '../../symbol/constants/symbol-lookup.constant';\n\n/**\n * Clears all event listeners of all Symbols.\n * Target symbols. may be one of the following: Actor,\n * Role, Usecase, Goal, Boundary\n */\nexport function clearAllSymbolListeners(): void {\n   let eventEmitter: EventEmitter | null;\n\n   SYMBOL_LOOKUP.forEach((symbol) => {\n      eventEmitter = symbol[EVENT_EMITTER_KEY];\n\n      eventEmitter\n         .eventNames()\n         .forEach((key) => eventEmitter?.removeAllListeners(key));\n   });\n\n   eventEmitter = null;\n}\n", "import { EVENT_EMITTER_KEY } from '../constants/event-keys';\nimport type { AnyEventMap } from '../types/event-map.type';\nimport type { UsecaseSymbolEventMap } from '../../symbol/types/usecase-symbol-event.type';\nimport type { UsecaseSymbolModel } from '../../symbol/types/usecase-symbol-model.interface';\n\n/**\n * Removes all event listeners of the Target symbol registered for event type.\n *\n * @param symbol Target symbol. may be one of the following: Actor,\n * Role, Usecase, Goal, Boundary\n * @param type Event Name\n */\nexport function clearSymbolEventListeners<\n   Source extends UsecaseSymbolModel<string, string, AnyEventMap>,\n>(symbol: Source, type: keyof UsecaseSymbolEventMap<Source>): void {\n   symbol[EVENT_EMITTER_KEY].removeAllListeners(type);\n}\n", "import { SYMBOL_LOOKUP } from '../constants/symbol-lookup.constant';\n\n/**\n * Unregisters Symbol. This is only used for running Unit tests.\n */\nexport function clearSymbols(): void {\n   SYMBOL_LOOKUP.clear();\n}\n", "import { MOCK_HANDLER_KEY } from '../../utils/constants/symbol-keys.constant';\nimport type { UsecaseHandler } from '../types/usecase-handler.type';\nimport type { AnyUsecase } from '../types/utility.type';\n\n/**\n * Replaces a use case's handler with a mock\n * for testing purposes\n *\n * @param usecase The use case to mock\n * @param handler The mock handler function\n * @returns The use case with mocked handler\n */\nexport function mockUsecaseHandler<Usecase extends AnyUsecase>(\n   usecase: Usecase,\n   handler: UsecaseHandler<Usecase>,\n): Usecase {\n   usecase[MOCK_HANDLER_KEY] = handler;\n   return usecase;\n}\n", "import { MOCK_HANDLER_KEY } from '../../utils/constants/symbol-keys.constant';\nimport type { AnyUsecase } from '../types/utility.type';\n\n/**\n * Removes a mock handler from a use case,\n * restoring the original handler\n *\n * @param usecase The use case to restore\n * @returns The use case with original handler\n */\nexport function clearMockeUsecaseHandler<Usecase extends AnyUsecase>(\n   usecase: Usecase,\n): Usecase {\n   usecase[MOCK_HANDLER_KEY] = null;\n   return usecase;\n}\n"],
  "mappings": "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",
  "names": ["import_private_parts", "import_private_parts", "EventEmitter", "import_private_parts", "import_private_parts", "import_private_parts", "import_private_parts", "import_private_parts", "import_private_parts", "import_private_parts", "import_private_parts", "import_private_parts", "import_private_parts", "import_private_parts", "import_private_parts", "set", "import_private_parts"]
}
