utils.cjs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. 'use strict';
  2. const box = require('./shared/consola.DwRq1yyg.cjs');
  3. require('node:tty');
  4. function formatTree(items, options) {
  5. options = {
  6. prefix: " ",
  7. ellipsis: "...",
  8. ...options
  9. };
  10. const tree = _buildTree(items, options).join("");
  11. if (options && options.color) {
  12. return box.colorize(options.color, tree);
  13. }
  14. return tree;
  15. }
  16. function _buildTree(items, options) {
  17. const chunks = [];
  18. const total = items.length - 1;
  19. for (let i = 0; i <= total; i++) {
  20. const item = items[i];
  21. const isItemString = typeof item === "string";
  22. const isLimit = options?.maxDepth != null && options.maxDepth <= 0;
  23. if (isLimit) {
  24. const ellipsis = `${options.prefix}${options.ellipsis}
  25. `;
  26. return [
  27. isItemString ? ellipsis : item.color ? box.colorize(item.color, ellipsis) : ellipsis
  28. // prettier-ignore
  29. ];
  30. }
  31. const isLast = i === total;
  32. const prefix = isLast ? `${options?.prefix}\u2514\u2500` : `${options?.prefix}\u251C\u2500`;
  33. if (isItemString) {
  34. chunks.push(`${prefix}${item}
  35. `);
  36. } else {
  37. const log = `${prefix}${item.text}
  38. `;
  39. chunks.push(item.color ? box.colorize(item.color, log) : log);
  40. if (item.children) {
  41. const _tree = _buildTree(item.children, {
  42. ...options,
  43. maxDepth: options?.maxDepth == null ? void 0 : options.maxDepth - 1,
  44. prefix: `${options?.prefix}${isLast ? " " : "\u2502 "}`
  45. });
  46. chunks.push(..._tree);
  47. }
  48. }
  49. }
  50. return chunks;
  51. }
  52. exports.align = box.align;
  53. exports.box = box.box;
  54. exports.centerAlign = box.centerAlign;
  55. exports.colorize = box.colorize;
  56. exports.colors = box.colors;
  57. exports.getColor = box.getColor;
  58. exports.leftAlign = box.leftAlign;
  59. exports.rightAlign = box.rightAlign;
  60. exports.stripAnsi = box.stripAnsi;
  61. exports.formatTree = formatTree;