{"version":3,"sources":["../../src/process/UseCase.ts"],"sourcesContent":["import { Scope } from './Scope';\nimport { App } from './App';\nimport { Enum } from '../types/Enum';\nimport { text } from '../types/Template';\nimport { kebab, Text } from '../types/Text';\nimport { List, toList } from '../types/List';\nimport { IdName } from '../types/Identity';\nimport { isIn, isString } from '../types/Is';\n\nexport class UseCase extends Enum {\n  constructor(\n    readonly app: App,\n    name: string,\n    id: Text = text(name).kebab,\n    readonly scopes: List<Scope> = toList<Scope>()\n  ) {\n    super(name, id.toString());\n  }\n\n  with(...s: Scope[]): this {\n    this.scopes.add(\n      ...toList(s)\n        .flatMap(s => s.expand())\n        .distinct()\n    );\n    return this;\n  }\n\n  for(item: string | IdName): UseCase {\n    return new UseCase(this.app, `${this.name} ${isString(item) ? item : item?.name}`, kebab(`${this.id} ${isString(item) ? item : item.id}`)).with(\n      ...this.scopes.map(s => s?.for(item))\n    );\n  }\n\n  static byScopes<U extends UseCase>(...s: Scope[]): List<U> {\n    return this.filter(u => u.scopes.some(us => isIn(us, s)));\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AASO,IAAM,UAAN,MAAM,iBAAgB,KAAK;AAAA,EAChC,YACW,KACT,MACA,KAAW,KAAK,IAAI,EAAE,OACb,SAAsB,OAAc,GAC7C;AACA,UAAM,MAAM,GAAG,SAAS,CAAC;AALhB;AAGA;AAAA,EAGX;AAAA,EAEA,QAAQ,GAAkB;AACxB,SAAK,OAAO;AAAA,MACV,GAAG,OAAO,CAAC,EACR,QAAQ,CAAAA,OAAKA,GAAE,OAAO,CAAC,EACvB,SAAS;AAAA,IACd;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,MAAgC;AAClC,WAAO,IAAI,SAAQ,KAAK,KAAK,GAAG,KAAK,IAAI,IAAI,SAAS,IAAI,IAAI,OAAO,MAAM,IAAI,IAAI,MAAM,GAAG,KAAK,EAAE,IAAI,SAAS,IAAI,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC,EAAE;AAAA,MACzI,GAAG,KAAK,OAAO,IAAI,OAAK,GAAG,IAAI,IAAI,CAAC;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,OAAO,YAA+B,GAAqB;AACzD,WAAO,KAAK,OAAO,OAAK,EAAE,OAAO,KAAK,QAAM,KAAK,IAAI,CAAC,CAAC,CAAC;AAAA,EAC1D;AACF;","names":["s"]}