tree = (data) => {
let root = {};
let cwd = root;
for (const { command, output } of parse(data)) {
const [, cmd, ...args] = command.split(/\s+/);
switch (cmd) {
case "cd":
const [dir] = args;
cwd[dir] = cwd[dir] || {};
cwd = cwd[dir];
if (dir === "/") root = cwd;
break;
case "ls":
for (const line of output) {
const [size, name] = line.split(/\s+/);
cwd[name] = cwd[name] || (size === "dir" ? { "..": cwd } : +size);
}
break;
default:
throw new Error(`unknown command: ${command}`);
}
}
return root;
}