diff --git a/src/index/treePrinter.ts b/src/index/treePrinter.ts new file mode 100644 index 0000000..a59c19b --- /dev/null +++ b/src/index/treePrinter.ts @@ -0,0 +1,30 @@ +/** + * TODO: + * - ASCII pieces to use: ├, │, └, ─. + */ + +const createBranchFromParts = (parts: string[], count: number) => + parts.slice(0, count).join("/"); +const sanitizeDots = (text: string) => text.replace(/\./g, ""); +const compareLeafs = (a: string, b: string) => + sanitizeDots(a).localeCompare(sanitizeDots(b)); + +const resolveLeafs = (targets: string[]) => { + const leafs = targets.reduce>((acc, target) => { + const parts = target.split("/"); + + parts.forEach((_, idx) => acc.add(createBranchFromParts(parts, idx + 1))); + return acc; + }, new Set()); + + return Array.from(leafs).sort(compareLeafs); +}; + +export const treePrinter = (tree: Record) => { + const targets = Object.values(tree); + const leafs = resolveLeafs(targets); + + console.log(leafs); +}; + +export default treePrinter; diff --git a/tests/treePrinter.test.ts b/tests/treePrinter.test.ts new file mode 100644 index 0000000..eb50be8 --- /dev/null +++ b/tests/treePrinter.test.ts @@ -0,0 +1,18 @@ +import treePrinter from "../src/index/treePrinter"; + +treePrinter({ + "index.js": "index.js", + "index.css": "index/index.css", + "App.js": "index/App.js", + "foo.svg": "index/Foo/foo.svg", + "logo.svg": "index/App/logo.svg", + "App.css": "index/App/App.css", + "serviceWorker.js": "index/serviceWorker.js", + "App.test.js": "index/App.test.js", +}); + +describe("treePrinter", () => { + it("should", () => { + expect(true).toBe(true); + }); +});