| 310 | } |
| 311 | |
| 312 | function findAllFiles(files: string[], npmDeps = {}) { |
| 313 | files = files.map(file => (path.isAbsolute(file) ? file : path.resolve('../../../', file))); |
| 314 | |
| 315 | let queue: string[] = [...files]; |
| 316 | let allFiles = new Set<string>(); |
| 317 | for (let i = 0; i < queue.length; i++) { |
| 318 | let file = queue[i]; |
| 319 | let contents = readFile(file); |
| 320 | allFiles.add(file); |
| 321 | |
| 322 | let deps = parseFile(file, contents, npmDeps); |
| 323 | for (let dep of deps) { |
| 324 | if (!allFiles.has(dep)) { |
| 325 | queue.push(dep); |
| 326 | } |
| 327 | } |
| 328 | } |
| 329 | |
| 330 | let addedFiles = [...allFiles.values()].filter(f => !files.includes(f)).sort(); |
| 331 | return [...files, ...addedFiles]; |
| 332 | } |
| 333 | |
| 334 | function parseFile(file: string, contents: string, npmDeps = {}, urls = {}) { |
| 335 | let deps = new Set<string>(); |