| 12
 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
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 
 | #Requires -Version 7.0
[CmdletBinding()]
param (
    [parameter(Mandatory = $true)]
    [ValidateScript({ Test-Path $_ })]
    [string]$PackageJsonPath,
    [parameter(Mandatory = $false)]
    [ValidateScript({ Test-Path $_ })]
    [string]$OverridesPath,
    [parameter(Mandatory = $true)]
    [string]$OutputDirectory,
    [parameter(Mandatory = $false)]
    [string]$PackageJsonFileName = "emitter-package.json"
)
$packageJson = Get-Content $PackageJsonPath | ConvertFrom-Json -AsHashtable
# If we provide OverridesPath, use that to load a hashtable of version overrides
$overrides = [ordered]@{}
if ($OverridesPath) {
    Write-Host "Using overrides from $OverridesPath`:`n"
    $overridesJson = Get-Content $OverridesPath | ConvertFrom-Json -AsHashtable
    foreach ($key in $overridesJson.Keys | Sort-Object) {
        $overrides[$key] = $overridesJson[$key]
    }
    Write-Host ($overrides | ConvertTo-Json)
    Write-Host ""
}
# If there's a peer dependency and a dev dependency for the same package, carry the
# dev dependency forward into emitter-package.json
$devDependencies = [ordered]@{}
$possiblyPinnedPackages = $packageJson['azure-sdk/emitter-package-json-pinning'] ?? $packageJson.peerDependencies.Keys;
foreach ($package in $possiblyPinnedPackages | Sort-Object) {
    $pinnedVersion = $packageJson.devDependencies[$package]
    if ($pinnedVersion -and -not $overrides[$package]) {
        #We have a dev pinned version that isn't overridden by the overrides.json file
        Write-Host "Pinning $package to $pinnedVersion"
        $devDependencies[$package] = $pinnedVersion
    }
}
$emitterPackageJson = [ordered]@{
  "main" = "dist/src/index.js"
  "dependencies" = @{
      $packageJson.name = $overrides[$packageJson.name] ?? $packageJson.version
  }
}
# you shouldn't specify the same package in both dependencies and overrides
$overrides.Remove($packageJson.name)
# Avoid adding an empty devDependencies section
if($devDependencies.Keys.Count -gt 0) {
  $emitterPackageJson["devDependencies"] = $devDependencies
}
# Avoid adding an empty overrides section
if($overrides.Keys.Count -gt 0) {
    $emitterPackageJson["overrides"] = $overrides
}
New-Item $OutputDirectory -ItemType Directory -ErrorAction SilentlyContinue | Out-Null
$OutputDirectory = Resolve-Path $OutputDirectory
$dest = Join-Path $OutputDirectory $PackageJsonFileName
$destJson = $emitterPackageJson | ConvertTo-Json -Depth 100
Write-Host "Generating $dest"
$destJson | Out-File $dest
Write-Host $destJson
 |