s3Helper.ts 858 B

12345678910111213141516171819202122232425262728293031323334353637
  1. import _ from "lodash";
  2. export const pathsToTree = (paths: string[]) => {
  3. let __result = [];
  4. let level = { __result, __prefix: "" };
  5. paths.forEach((path) => {
  6. path.split("/").reduce((r, label, i, a) => {
  7. if (!r[label]) {
  8. const __prefix = `${r.__prefix ? r.__prefix + "/" : ""}${label}`;
  9. r[label] = { __result: [], __prefix };
  10. r.__result.push({
  11. key: __prefix,
  12. label,
  13. isDir: a.length !== i + 1,
  14. children: r[label].__result,
  15. });
  16. }
  17. return r[label];
  18. }, level);
  19. });
  20. return __result;
  21. };
  22. type TreeNodeLike = {
  23. children?: TreeNodeLike[];
  24. };
  25. export const getTreeLeafs = <T extends TreeNodeLike>(
  26. treeNode: T
  27. ): T[] => {
  28. if (treeNode.children?.length) {
  29. return _.flatMap<T, T>(treeNode.children as T[], getTreeLeafs);
  30. }
  31. return [treeNode];
  32. };