{"version":3,"sources":["../src/Tree.ts","../src/Utils.ts"],"sourcesContent":["import type { Component, Children, HierarchicalData } from \"./types\";\nimport { generateKey } from \"./Utils\";\n\nexport class Tree<Kind extends string> implements Component<Kind> {\n  private children: Children = {};\n  constructor(\n    public kind: Kind,\n    public name: string,\n  ) {}\n\n  public getChildByPaths(paths: string[], kind: string): Component<string> | undefined {\n    const [name, ...pathArray] = paths;\n    if (!name) {\n      return;\n    }\n    if (pathArray.length === 0) {\n      const component = this.children[generateKey(kind, name)];\n      return component;\n    }\n    const childTree = this.children[generateKey(this.kind, name)];\n    return childTree && childTree.getChildByPaths(pathArray, kind);\n  }\n\n  public getHierarchy(): HierarchicalData {\n    const entires = Object.entries(this.children).map(([key, child]) => {\n      return [key, child.getHierarchy()];\n    });\n    return {\n      name: this.name,\n      children: Object.fromEntries(entires),\n    };\n  }\n\n  public getChildren(): Children {\n    return this.children;\n  }\n\n  public hasChildren(): boolean {\n    return Object.keys(this.children).length === 0;\n  }\n\n  public set(pathName: string, component: Component): void {\n    const key = generateKey(component.kind, pathName);\n    this.children[key] = component;\n  }\n\n  public remove(pathName: string, component: Component<string>): void {\n    const targetKey = generateKey(component.kind, pathName);\n    const entries = Object.entries(this.children).filter(([key]) => {\n      return targetKey !== key;\n    });\n    this.children = Object.fromEntries(entries);\n  }\n}\n","export const generateKey = (kind: string, name: string): string => {\n  return `${kind}:${name}`;\n};\n\nexport const splitKey = (key: string): string[] => {\n  return key.split(\":\");\n};\n\nexport const split = (p: string, delimiter: string): string[] => {\n  const array = [];\n  for (const seg of p.split(delimiter)) {\n    switch (seg) {\n      case \".\":\n        break;\n      case \"..\":\n        array.pop();\n        break;\n      default:\n        array.push(seg);\n        break;\n    }\n  }\n  return array;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,cAAc,CAAC,MAAc,SAAyB;AACjE,SAAO,GAAG,IAAI,IAAI,IAAI;AACxB;;;ADCO,IAAM,OAAN,MAA2D;AAAA,EAEhE,YACS,MACA,MACP;AAFO;AACA;AAAA,EACN;AAAA,EAFM;AAAA,EACA;AAAA,EAHD,WAAqB,CAAC;AAAA,EAMvB,gBAAgB,OAAiB,MAA6C;AACnF,UAAM,CAAC,MAAM,GAAG,SAAS,IAAI;AAC7B,QAAI,CAAC,MAAM;AACT;AAAA,IACF;AACA,QAAI,UAAU,WAAW,GAAG;AAC1B,YAAM,YAAY,KAAK,SAAS,YAAY,MAAM,IAAI,CAAC;AACvD,aAAO;AAAA,IACT;AACA,UAAM,YAAY,KAAK,SAAS,YAAY,KAAK,MAAM,IAAI,CAAC;AAC5D,WAAO,aAAa,UAAU,gBAAgB,WAAW,IAAI;AAAA,EAC/D;AAAA,EAEO,eAAiC;AACtC,UAAM,UAAU,OAAO,QAAQ,KAAK,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAClE,aAAO,CAAC,KAAK,MAAM,aAAa,CAAC;AAAA,IACnC,CAAC;AACD,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,UAAU,OAAO,YAAY,OAAO;AAAA,IACtC;AAAA,EACF;AAAA,EAEO,cAAwB;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,cAAuB;AAC5B,WAAO,OAAO,KAAK,KAAK,QAAQ,EAAE,WAAW;AAAA,EAC/C;AAAA,EAEO,IAAI,UAAkB,WAA4B;AACvD,UAAM,MAAM,YAAY,UAAU,MAAM,QAAQ;AAChD,SAAK,SAAS,GAAG,IAAI;AAAA,EACvB;AAAA,EAEO,OAAO,UAAkB,WAAoC;AAClE,UAAM,YAAY,YAAY,UAAU,MAAM,QAAQ;AACtD,UAAM,UAAU,OAAO,QAAQ,KAAK,QAAQ,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM;AAC9D,aAAO,cAAc;AAAA,IACvB,CAAC;AACD,SAAK,WAAW,OAAO,YAAY,OAAO;AAAA,EAC5C;AACF;","names":[]}