PowerShellProTools.psm1

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
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
80
81
82
function Invoke-Package {
    param([Microsoft.PowerShell.EditorServices.Extensions.EditorContext]$context)

    $outputPath = Split-Path -Path $context.CurrentFile.Path -Parent
    $outputPath = (Join-Path -Path $outputPath -ChildPath "Output").ToString()
    
    Merge-Script -Config @{
        Root = $context.CurrentFile.Path
        OutputPath = $outputPath
        Package = @{
            Enabled = $true
            Obfuscate = $true
        }
        Bundle = @{
            Enabled = $true
            Modules = $true
            NestedModules = $true
            RequiredAssemblies = $true
        }
    } -Verbose
}

function Invoke-Bundle {
    param([Microsoft.PowerShell.EditorServices.Extensions.EditorContext]$context)

    $outputPath = Split-Path -Path $context.CurrentFile.Path -Parent
    $outputPath = (Join-Path -Path $outputPath -ChildPath "Output").ToString()
    
    Merge-Script -Config @{
        Root = $context.CurrentFile.Path
        OutputPath = $outputPath
        Bundle = @{
            Enabled = $true
            Modules = $true
            NestedModules = $true
            RequiredAssemblies = $true
        }
    } -Verbose
}

function Invoke-ConvertToPowerShell {
    param([Microsoft.PowerShell.EditorServices.Extensions.EditorContext]$context)

    $text = $context.CurrentFile.GetText()
    $code = ConvertTo-PowerShell -CSharpCode $text
    $code | Out-File $context.CurrentFile.Path
}

function Invoke-ConvertToCSharp {
    param([Microsoft.PowerShell.EditorServices.Extensions.EditorContext]$context)

    $text = $context.CurrentFile.GetText()
    $code = ConvertTo-CSharp -PowerShellScript $text
    $code | Out-File $context.CurrentFile.Path
}


function New-VsCodeCommands {
    Register-EditorCommand `
    -Name "PowerShellProTools.PackageScriptAsExe" `
    -DisplayName "Package script as executable" `
    -Function Invoke-Package 

    Register-EditorCommand `
    -Name "PowerShellProTools.BundleScript" `
    -DisplayName "Bundle script" `
    -Function Invoke-Bundle 

    Register-EditorCommand `
    -Name "PowerShellProTools.ConvertToPowerShell" `
    -DisplayName "Convert to PowerShell" `
    -Function Invoke-ConvertToPowerShell 

    Register-EditorCommand `
    -Name "PowerShellProTools.ConvertToCSharp" `
    -DisplayName "Convert to C#" `
    -Function Invoke-ConvertToCSharp 
}

if ($host.Name -eq 'Visual Studio Code Host'){
    New-VsCodeCommands
}