param([Parameter(Mandatory = $true)][string]$WebRoot) Set-StrictMode -Version 3.0 $ErrorActionPreference = 'Stop' $root = [IO.Path]::GetFullPath($WebRoot) $index = Join-Path $root 'index.html' if (-not (Test-Path -LiteralPath $index -PathType Leaf)) { throw 'web/index.html is missing.' } $html = Get-Content -LiteralPath $index -Raw -Encoding UTF8 $references = [regex]::Matches($html, '(?:src|href)=["''](?/[^"''?#]+)') | ForEach-Object { $_.Groups['path'].Value.TrimStart('/').Replace('/', '\') } foreach ($relative in $references | Sort-Object -Unique) { if ($relative -match '^https?:') { continue } if (-not (Test-Path -LiteralPath (Join-Path $root $relative) -PathType Leaf)) { throw "web asset referenced by index.html is missing: $relative" } } Write-Host "Bell web asset check passed: $root"