diff --git a/PkgStore.Kernel.psd1 b/PkgStore.Kernel.psd1 index 13f95e7..cd6f275 100644 --- a/PkgStore.Kernel.psd1 +++ b/PkgStore.Kernel.psd1 @@ -1,17 +1,133 @@ -@{ - RootModule = 'PkgStore.Kernel.psm1' - ModuleVersion = '0.1.0' - GUID = '58655ac6-8750-4397-a15f-29f9e18e257d' - Author = 'Kitsune Solar' - CompanyName = 'iHub.TO' - Copyright = '(c) 2023 Library Online. All rights reserved.' - Description = 'A kernel for PowerShell modules from Package Store.' - PowerShellVersion = '7.2' - PrivateData = @{ - PSData = @{ - Tags = @('pwsh', 'kernel') - LicenseUri = 'https://github.com/pkgstore/pwsh-kernel/blob/main/LICENSE' - ProjectUri = 'https://github.com/pkgstore/pwsh-kernel' - } - } -} +# +# Module manifest for module 'PkgStore.Kernel' +# +# Generated by: Kitsune Solar +# +# Generated on: 18.11.2023 +# + +@{ + +# Script module or binary module file associated with this manifest. +RootModule = 'PkgStore.Kernel.psm1' + +# Version number of this module. +ModuleVersion = '0.1.0' + +# Supported PSEditions +# CompatiblePSEditions = @() + +# ID used to uniquely identify this module +GUID = '58655ac6-8750-4397-a15f-29f9e18e257d' + +# Author of this module +Author = 'Kitsune Solar' + +# Company or vendor of this module +CompanyName = 'iHub.TO' + +# Copyright statement for this module +Copyright = '(c) 2023 Library Online. All rights reserved.' + +# Description of the functionality provided by this module +Description = 'A kernel for PowerShell modules from Package Store.' + +# Minimum version of the PowerShell engine required by this module +PowerShellVersion = '7.2' + +# Name of the PowerShell host required by this module +# PowerShellHostName = '' + +# Minimum version of the PowerShell host required by this module +# PowerShellHostVersion = '' + +# Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only. +# DotNetFrameworkVersion = '' + +# Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only. +# ClrVersion = '' + +# Processor architecture (None, X86, Amd64) required by this module +# ProcessorArchitecture = '' + +# Modules that must be imported into the global environment prior to importing this module +# RequiredModules = @() + +# Assemblies that must be loaded prior to importing this module +# RequiredAssemblies = @() + +# Script files (.ps1) that are run in the caller's environment prior to importing this module. +# ScriptsToProcess = @() + +# Type files (.ps1xml) to be loaded when importing this module +# TypesToProcess = @() + +# Format files (.ps1xml) to be loaded when importing this module +# FormatsToProcess = @() + +# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess +# NestedModules = @() + +# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. +FunctionsToExport = 'Copy-Data', 'Move-Data', 'New-Data', 'Remove-Data', 'Test-Data', + 'Test-Module', 'Write-Msg' + +# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. +CmdletsToExport = @() + +# Variables to export from this module +# VariablesToExport = @() + +# Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export. +AliasesToExport = @() + +# DSC resources to export from this module +# DscResourcesToExport = @() + +# List of all modules packaged with this module +# ModuleList = @() + +# List of all files packaged with this module +# FileList = @() + +# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. +PrivateData = @{ + + PSData = @{ + + # Tags applied to this module. These help with module discovery in online galleries. + Tags = 'pwsh','kernel' + + # A URL to the license for this module. + LicenseUri = 'https://github.com/pkgstore/pwsh-kernel/blob/main/LICENSE' + + # A URL to the main website for this project. + ProjectUri = 'https://github.com/pkgstore/pwsh-kernel' + + # A URL to an icon representing this module. + # IconUri = '' + + # ReleaseNotes of this module + # ReleaseNotes = '' + + # Prerelease string of this module + # Prerelease = '' + + # Flag to indicate whether the module requires explicit user acceptance for install/update/save + # RequireLicenseAcceptance = $false + + # External dependent modules of this module + # ExternalModuleDependencies = @() + + } # End of PSData hashtable + + } # End of PrivateData hashtable + +# HelpInfo URI of this module +# HelpInfoURI = '' + +# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix. +# DefaultCommandPrefix = '' + +} + diff --git a/PkgStore.Kernel.psm1 b/PkgStore.Kernel.psm1 index 68c4f2f..4138d41 100644 --- a/PkgStore.Kernel.psm1 +++ b/PkgStore.Kernel.psm1 @@ -1,13 +1,16 @@ +$ModuleManifest = (Get-ChildItem -Path $PSScriptRoot | Where-Object {$_.Extension -eq '.psd1'}) +$CurrentManifest = (Test-ModuleManifest $ModuleManifest) + $Aliases = @() -$PrivateFunctions = (Get-ChildItem -Path (Join-Path $PSScriptRoot 'Private') -Include '*.ps1' -File -Recurse) -$PublicFunctions = (Get-ChildItem -Path (Join-Path $PSScriptRoot 'Public') -Include '*.ps1' -File -Recurse) +$PrivateFunctions = (Get-ChildItem -Path (Join-Path $PSScriptRoot 'Private') | Where-Object {$_.Extension -eq '.ps1'}) +$PublicFunctions = (Get-ChildItem -Path (Join-Path $PSScriptRoot 'Public') | Where-Object {$_.Extension -eq '.ps1'}) (@($PrivateFunctions) + @($PublicFunctions)) | ForEach-Object { try { - Write-Verbose "Loading '$($_.FullName)'." + Write-Verbose "Loading: '$($_.FullName)'." . $_.FullName } catch { - Write-Warning $_.Exception.Message + $_.Exception.Message | Write-Warning } } @@ -21,3 +24,28 @@ $PublicFunctions = (Get-ChildItem -Path (Join-Path $PSScriptRoot 'Public') -Incl Export-ModuleMember -Function $_.BaseName } } + +$FunctionsAdded = ($PublicFunctions | Where-Object {$_.BaseName -notin $CurrentManifest.ExportedFunctions.Keys}) +$FunctionsRemoved = ($CurrentManifest.ExportedFunctions.Keys | Where-Object {$_ -notin $PublicFunctions.BaseName}) +$AliasesAdded = ($Aliases | Where-Object {$_ -notin $CurrentManifest.ExportedAliases.Keys}) +$AliasesRemoved = ($CurrentManifest.ExportedAliases.Keys | Where-Object {$_ -notin $Aliases}) + +if ($FunctionsAdded -or $FunctionsRemoved -or $AliasesAdded -or $AliasesRemoved) { + try { + $UpdateModuleManifestParams = @{} + $UpdateModuleManifestParams.Add('Path', $ModuleManifest) + $UpdateModuleManifestParams.Add('ErrorAction', 'Stop') + + if ($Aliases.Count -gt 0) { + $UpdateModuleManifestParams.Add('AliasesToExport', $Aliases) + } + + if ($PublicFunctions.Count -gt 0) { + $UpdateModuleManifestParams.Add('FunctionsToExport', $PublicFunctions.BaseName) + } + + Update-ModuleManifest @UpdateModuleManifestParams + } catch { + $_ | Write-Error + } +}