Types/OpenPackage.Part/ReadText.ps1

<#
.SYNOPSIS
    Reads Part Content as Text
.DESCRIPTION
    Reads Package Part Content as Text
#>

[Reflection.AssemblyMetadata(
    # This should automatically apply to .txt files, sql files, modelfiles, and dockerfiles.
    'FilePattern', 
    '(?>Dockerfile|Modelfile|c|h|cpp|cs|js|md|sql|txt)$'
)]
[Reflection.AssemblyMetadata(
    # This should automatically apply to any text/ content types
    'ContentTypePattern', 
    '^text/'
)]
[Reflection.AssemblyMetadata(
    # This has a higher order, indicating it should be run later than most.
    'Order', 
    100
)]
param(
    # An optional input object
    # If provided, content will be read from this object.
    # If not provided, content will be read from this part.
    [Alias('Input')]
    [PSObject]$InputObject = $null,
 
    # Any options used to read the data.
    [Alias('Options')]
    [Collections.IDictionary]$Option = [Ordered]@{}
)

if (-not $InputObject -and 
    ($this -is [IO.Packaging.PackagePart])
) {
    $Stream = $this.GetStream('Open','Read')

    $streamReader = [IO.StreamReader]::new($Stream, $true)

    $partText = $streamReader.ReadToEnd()

    $Stream.Close()
    $Stream.Dispose()

    $streamReader.Close()
    $streamReader.Dispose()

    $partText
} elseif ($InputObject -is [IO.Stream]) {

    $streamReader = [IO.StreamReader]::new($InputObject, $true)
    $partText = $streamReader.ReadToEnd()
    $streamReader.Close()
    $streamReader.Dispose()
    $partText
} elseif ($inputObject -is [string]) {
    $InputObject
}