()
| 442 | } |
| 443 | |
| 444 | async function collectDashboardSourceInputs() { |
| 445 | const inputs = []; |
| 446 | for (const file of DASHBOARD_SOURCE_FILES) { |
| 447 | try { |
| 448 | const stat = await fs.stat(path.join(dashboardRoot, file)); |
| 449 | if (stat.isFile()) inputs.push(file); |
| 450 | } catch { |
| 451 | // Missing source inputs are normal in packaged crates. |
| 452 | } |
| 453 | } |
| 454 | for (const dir of DASHBOARD_SOURCE_DIRS) { |
| 455 | await collectSourceDir(dir, inputs); |
| 456 | } |
| 457 | return inputs.sort((a, b) => { |
| 458 | const left = normalizedSourcePath(a); |
| 459 | const right = normalizedSourcePath(b); |
| 460 | return left < right ? -1 : left > right ? 1 : 0; |
| 461 | }); |
| 462 | } |
| 463 | |
| 464 | export async function dashboardSourceStamp() { |
| 465 | const inputs = await collectDashboardSourceInputs(); |
no test coverage detected