Private/Add-SpecPSM1.ps1

function Add-SpecPSM1 {
    [cmdletbinding()]

    param (
        [parameter (mandatory = $true)]
        [string]$moduleName,

        [parameter (mandatory = $true)]
        [string]$modulePath
    )

    begin {
        $fullModulePath = Join-Path $modulePath $moduleName

        # .psm1 module loader code
        $moduleLoaderCode = @'
 #Get public and private function definition files.
$Public = @(Get-ChildItem -Path $PSScriptRoot\Public\*.ps1 -ErrorAction SilentlyContinue)
$Private = @(Get-ChildItem -Path $PSScriptRoot\Private\*.ps1 -ErrorAction SilentlyContinue)
 
#Dot source the files
Foreach($import in @($Public + $Private)) {
    Try {
        . $import.fullname
    } Catch {
        Write-Error -Message "Failed to import function $($import.fullname): $_"
    }
}
 
Export-ModuleMember -Function $Public.Basename
'@

    }

    process {
        # Create .psm1 module loader
        try {
            Write-Verbose "Creating $moduleName.psm1 module loader"
            new-item -path $fullModulePath -Name "$moduleName.psm1" -ItemType File | Out-Null -ErrorAction stop -ev x
            Set-Content -Path (Join-Path $fullModulePath "$moduleName.psm1") -Value $moduleLoaderCode
            return $true
        } catch {
            write-warning "Unable to create $moduleName.psm1 file"
            write-warning "The error was $x"
            return $false
        }
    }
}