import type { BlockToolAdapter } from './block'; import type { InlineToolAdapter } from './inline'; import type { BlockTuneAdapter } from './tune'; import type { ToolsCollection as ToolsCollectionInterface } from '@/types/tools/adapters/tools-collection'; export type ToolClass = BlockToolAdapter | InlineToolAdapter | BlockTuneAdapter; /** * Class to store Blok Tools */ export class ToolsCollection extends Map implements ToolsCollectionInterface { /** * Returns Block Tools collection */ public get blockTools(): ToolsCollection { const tools = Array .from(this.entries()) .filter(([, tool]) => tool.isBlock()) as [string, BlockToolAdapter][]; return new ToolsCollection(tools); } /** * Returns Inline Tools collection */ public get inlineTools(): ToolsCollection { const tools = Array .from(this.entries()) .filter(([, tool]) => tool.isInline()) as [string, InlineToolAdapter][]; return new ToolsCollection(tools); } /** * Returns Block Tunes collection */ public get blockTunes(): ToolsCollection { const tools = Array .from(this.entries()) .filter(([, tool]) => tool.isTune()) as [string, BlockTuneAdapter][]; return new ToolsCollection(tools); } /** * Returns internal Tools collection */ public get internalTools(): ToolsCollection { const tools = Array .from(this.entries()) .filter(([, tool]) => tool.isInternal); return new ToolsCollection(tools); } /** * Returns Tools collection provided by user */ public get externalTools(): ToolsCollection { const tools = Array .from(this.entries()) .filter(([, tool]) => !tool.isInternal); return new ToolsCollection(tools); } }