File size: 1,350 Bytes
5636c1c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Updates html files with cache busting urls including file hashes.

# Actual file processing
$htmlfiles = Get-ChildItem -Path . -Recurse -Filter "*.html" | Where {$_.FullName -notlike "*\node_modules\*"} | Resolve-path -relative
foreach ($htmlfile in $htmlfiles) {
    Write-Host "[info] Processing '${htmlfile}' for cache busting..." -ForegroundColor Blue

    $resfiles = (@(Get-ChildItem -Path . -Recurse -Filter "*.css") + (Get-ChildItem -Path . -Recurse -Filter "*.js")) | Resolve-Path -relative

    if ($args[0] -eq "gitadd") {
        $resfiles = (git status -s | Select-String -Pattern "[A-Z]  .+") | ForEach-Object { -split $_.Line | Select-Object -Last 1 }
    }

    foreach ($resfile in $resfiles) {
        $resfile = $resfile -replace '\\', '/' -replace '\./', ''
        # Check if resource is used in html file
        if ($null -ne (Select-String -Path $htmlfile -Pattern $resfile)) {
            $hash = (Get-FileHash $resfile -Algorithm SHA1).Hash
            
            # This is just for cache busting...
            # If 7 first characters of SHA1 is okay for git, it should be more than enough for us
            $hash = $hash.Substring(0, 7).ToLower()

            (Get-Content -Raw -Path $htmlfile).replace('\r\n', "\n") -replace "$resfile(\?v=[a-z0-9]+)?", "${resfile}?v=$hash" | Set-Content $htmlfile
        }
    }
}