* Get all files * @param {Tree} tree * @param {(item:Tree)=>object} transform
(tree, transform, listedDirs)
| 205 | * @param {(item:Tree)=>object} transform |
| 206 | */ |
| 207 | function flattenTree(tree, transform, listedDirs) { |
| 208 | const list = []; |
| 209 | const { children } = tree; |
| 210 | if (!children) { |
| 211 | return [transform(tree)]; |
| 212 | } |
| 213 | |
| 214 | if (listedDirs.includes(tree.url)) return list; |
| 215 | |
| 216 | listedDirs.push(tree.url); |
| 217 | |
| 218 | children.forEach((item) => { |
| 219 | if (item.children) list.push(...flattenTree(item, transform, listedDirs)); |
| 220 | else list.push(transform(item)); |
| 221 | }); |
| 222 | return list; |
| 223 | } |
| 224 | |
| 225 | /** |
| 226 | * Called when a folder is added |