@prostojs/tree
Version:
Print tree
2 lines (1 loc) • 1.76 kB
JavaScript
class n{constructor(n){var e,l,i,r,t;const d=(null==n?void 0:n.label)||"label",o=(null==n?void 0:n.children)||"children",h="number"==typeof(null==n?void 0:n.branchWidth)?null==n?void 0:n.branchWidth:2,s=((null===(e=null==n?void 0:n.chars)||void 0===e?void 0:e.hLine)||"─").repeat(h),c={end:(null===(l=null==n?void 0:n.chars)||void 0===l?void 0:l.end)||"[2m└",middle:(null===(i=null==n?void 0:n.chars)||void 0===i?void 0:i.middle)||"[2m├",vLine:(null===(r=null==n?void 0:n.chars)||void 0===r?void 0:r.vLine)||"[2m│",hLine:s,node:(null===(t=null==n?void 0:n.chars)||void 0===t?void 0:t.node)||"•"};this.options={label:d,children:o,renderLabel:(null==n?void 0:n.renderLabel)||(n=>"string"==typeof n?n:n[d]),chars:c,branchWidth:h}}_render(n,l){const{children:i,renderLabel:r,branchWidth:t,chars:d}=this.options;return function n(o,h="",s=0,c=[]){let v="",a="";for(let e=0;e<s-1;e++){a+=`${c[e]?d.vLine:" "}${" ".repeat(t)}`}const u=[r(o,s)].flat(),$=o[i]||[];c[s]=!!$.length;let L="";for(let e=0;e<=s;e++){L+=`${c[e]?d.vLine:" "}${" ".repeat(t)}`}L=L.slice(0,-t)+" ";for(let e=0;e<u.length;e++){const n=u[e];v+=0===e?`${a}${h}${d.node} ${n}\n`:`${L}${n}\n`}if($.length&&(null==l?void 0:l.level)&&s>=l.level-1)v+=L+e($.length)+"\n",c[s]=!1;else for(let i=0;i<$.length;i++){const r=i===$.length-1;if((null==l?void 0:l.childrenLimit)&&i===l.childrenLimit&&(!l.showLast||!r)){v+=L+e($.length-i)+"\n",c[s]=!1,l.showLast&&(v+=`${n($[$.length-1],`${d.end}${d.hLine}`,s+1,c)}`);break}c[s]=!r,v+=`${n($[i],`${r?d.end:d.middle}${d.hLine}`,s+1,c)}`}return v}(n)}render(n,e){return this._render(n,e)}print(n,e){const l=this.render(n,e);return console.log(l),l}}function e(n){return"[2m+ [3m"+n.toString()+" item"+(1===n?"":"s")+"[0m"}export{n as ProstoTree};