Skip to content

Commit 1cee6bf

Browse files
templating system updates
1 parent 14c1c34 commit 1cee6bf

File tree

10 files changed

+156
-47
lines changed

10 files changed

+156
-47
lines changed
0 Bytes
Binary file not shown.
Binary file not shown.

PSModuleDevelopment/bin/PSModuleDevelopment.xml

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

PSModuleDevelopment/changelog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## ???
4+
5+
+ Upd: Invoke-PSMDTemplate - added parameter `-GenerateObjects` to return objects representing what would have been created as file, rather than actually creating files / folders.
6+
37
## 2.2.10.134 (2022-03-17)
48

59
+ New: Test-PSMDClmCompatibility - Tests, whether the targeted file would have trouble executing under Constrained Language Mode.

PSModuleDevelopment/functions/templating/Invoke-PSMDTemplate.ps1

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -222,14 +222,11 @@
222222
}
223223
}
224224
#endregion Scripts
225-
$createdTemplateItems=@()
226-
switch ($templateData.Type.ToString()) {
225+
$createdTemplateItems = switch ($templateData.Type.ToString()) {
227226
#region File
228227
"File" {
229228
foreach ($child in $templateData.Children) {
230-
$createdTemplateItems += New-TemplateItem -Item $child -Path $OutPath -ParameterFlat $Parameters -ParameterScript $scriptParameters -Raw $Raw
231-
# Write-PSFMessage "`$createdTemplateItems=$($createdTemplateItems|convertto-json)"
232-
# Write-TemplateResult -TemplateResult $createdTemplateItems -Encoding $Encoding
229+
New-TemplateItem -Item $child -Path $OutPath -ParameterFlat $Parameters -ParameterScript $scriptParameters -Raw $Raw
233230
}
234231
if ($Raw -and $templateData.Scripts.Values) {
235232
$templateData.Scripts.Values | Export-Clixml -Path (Join-Path $OutPath "_PSMD_ParameterScripts.xml")
@@ -257,9 +254,7 @@
257254
#endregion Resolve output folder
258255

259256
foreach ($child in $templateData.Children) {
260-
$createdTemplateItems += New-TemplateItem -Item $child -Path $newFolder.FullName -ParameterFlat $Parameters -ParameterScript $scriptParameters -Raw $Raw
261-
# Write-PSFMessage "`$createdTemplateItems=$($createdTemplateItems|convertto-json)"
262-
# Write-TemplateResult -TemplateResult $createdTemplateItems -Encoding $Encoding
257+
New-TemplateItem -Item $child -Path $newFolder.FullName -ParameterFlat $Parameters -ParameterScript $scriptParameters -Raw $Raw
263258
}
264259

265260
#region Write Config File (Raw)
@@ -290,19 +285,18 @@
290285
$optionsTemplate = $optionsTemplate -replace "þþþPLACEHOLDER-$($guid)þþþ", ""
291286
}
292287

293-
$createdTemplateItems += [TemplateResult]@{
294-
Filename = "PSMDTemplate.ps1"
288+
[PSModuleDevelopment.Template.TemplateResult]@{
289+
Name = "PSMDTemplate.ps1"
295290
Path = $newFolder.FullName
296291
FullPath = (Join-Path $newFolder.FullName "PSMDTemplate.ps1")
297292
Content = $optionsTemplate
298293
}
299-
# Set-Content -Path $configFile -Value $optionsTemplate -Encoding ([PSFEncoding]'utf-8').Encoding
300294
}
301295
#endregion Write Config File (Raw)
302296
}
303297
#endregion Project
304298
}
305-
If($GenerateObjects){
299+
If ($GenerateObjects) {
306300
return $createdTemplateItems
307301
}
308302
Write-TemplateResult -TemplateResult $createdTemplateItems -Encoding $Encoding
@@ -355,17 +349,17 @@
355349
$text = [PSModuleDevelopment.Utility.UtilityHost]::Replace($text, "$($identifier)!$($param)!$($identifier)", $ParameterScript[$param], $false)
356350
}
357351
}
358-
return [TemplateResult]@{
359-
Filename = $fileName
352+
return [PSModuleDevelopment.Template.TemplateResult]@{
353+
Name = $fileName
360354
Path = $Path
361355
FullPath = $destPath
362356
Content = $text
363357
}
364358
}
365359
else {
366360
$bytes = [System.Convert]::FromBase64String($Item.Value)
367-
return [TemplateResult]@{
368-
Filename = $fileName
361+
return [PSModuleDevelopment.Template.TemplateResult]@{
362+
Name = $fileName
369363
Path = $Path
370364
FullPath = $destPath
371365
Content = $bytes
@@ -387,39 +381,54 @@
387381
}
388382
}
389383
$folder = Join-Path -Path $Path -ChildPath $folderName
390-
# $folder = New-Item -Path $Path -Name $folderName -ItemType Directory
391-
$createdTemplateItems = @()
384+
385+
# Return a folder object to make sure empty folders are not excluded
386+
[PSModuleDevelopment.Template.TemplateResult]@{
387+
Name = $folderName
388+
Path = $Path
389+
FullPath = $folder
390+
IsFolder = $true
391+
IsText = $false
392+
}
393+
392394
foreach ($child in $Item.Children) {
393-
$createdTemplateItems += New-TemplateItem -Item $child -Path $folder -ParameterFlat $ParameterFlat -ParameterScript $ParameterScript -Raw $Raw
395+
New-TemplateItem -Item $child -Path $folder -ParameterFlat $ParameterFlat -ParameterScript $ParameterScript -Raw $Raw
394396
}
395-
return $createdTemplateItems
396397
}
397398
#endregion Folder
398399
}
400+
399401
function Write-TemplateResult {
400402
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessForStateChangingFunctions", "")]
401403
[CmdletBinding()]
402404
param (
403-
[TemplateResult[]]
405+
[PSModuleDevelopment.Template.TemplateResult[]]
404406
$TemplateResult,
405407

406408
[PSFEncoding]
407409
$Encoding
408410
)
409-
foreach ($item in $TemplateResult) {
410-
Write-PSFMessage -Level Verbose -Message "Creating file: $($Item.FullPath)" -FunctionName Invoke-PSMDTemplate -ModuleName PSModuleDevelopment -Tag 'create', 'template'
411-
# Write-PSFMessage -Level Verbose -Message "Creating file: $($Item |convertto-json)" -FunctionName Invoke-PSMDTemplate -ModuleName PSModuleDevelopment -Tag 'create', 'template'
412-
if (-not (Test-Path $Item.Path)) {
413-
Write-PSFMessage -Level Verbose -Message "Creating Folder $($Item.Path)"
414-
New-Item -Path $Item.Path -ItemType Directory | Out-Null
411+
$msgParam = @{ Level = 'Verbose'; FunctionName = 'Invoke-PSMDTemplate' }
412+
foreach ($item in $TemplateResult | Sort-Object { $_.FullPath.Length }) {
413+
Write-PSFMessage @msgParam -Message "Creating file: $($item.FullPath)" -FunctionName Invoke-PSMDTemplate -ModuleName PSModuleDevelopment -Tag 'create', 'template'
414+
if (-not (Test-Path $item.Path)) {
415+
Write-PSFMessage -Level Verbose -Message "Creating Folder $($item.Path)"
416+
$null = New-Item -Path $item.Path -ItemType Directory
417+
}
418+
if ($item.IsFolder) {
419+
if (-not (Test-Path $item.FullPath)) {
420+
Write-PSFMessage @msgParam -Message "Creating Folder $($item.FullPath)"
421+
$null = New-Item -Path $item.FullPath -ItemType Directory
422+
}
423+
continue
415424
}
416-
if ($Item.IsText) {
417-
Write-PSFMessage -Level Verbose -Message "Creating as a Text-File"
418-
[System.IO.File]::WriteAllText($Item.FullPath, $Item.Content, $Encoding)
425+
if ($item.IsText) {
426+
Write-PSFMessage @msgParam -Message "Creating as a Text-File"
427+
[System.IO.File]::WriteAllText($item.FullPath, $item.Content, $Encoding)
419428
}
420429
else {
421-
Write-PSFMessage -Level Verbose -Message "Creating as a Binary-File"
422-
[System.IO.File]::WriteAllBytes($Item.FullPath, $Item.Content)
430+
Write-PSFMessage @msgParam -Message "Creating as a Binary-File"
431+
[System.IO.File]::WriteAllBytes($item.FullPath, $item.Content)
423432
}
424433
}
425434
}

PSModuleDevelopment/internal/classes/TemplateResult.ps1

Lines changed: 0 additions & 7 deletions
This file was deleted.

PSModuleDevelopment/internal/scripts/preimport.ps1

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,4 @@ foreach ($file in (Get-ChildItem "$($script:ModuleRoot)\internal\configurations\
1717
}
1818

1919
# Load additional resources needed during import
20-
. Import-ModuleFile -Path "$($script:ModuleRoot)\internal\scripts\initialize.ps1"
21-
22-
# Load all classes
23-
foreach ($file in (Get-ChildItem "$($script:ModuleRoot)\internal\classes\*.ps1" -ErrorAction Ignore))
24-
{
25-
. Import-ModuleFile -Path $file.FullName
26-
}
20+
. Import-ModuleFile -Path "$($script:ModuleRoot)\internal\scripts\initialize.ps1"

PSModuleDevelopment/xml/PSModuleDevelopment.Format.ps1xml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,41 @@
315315
</TableControl>
316316
</View>
317317

318+
<!-- PSModuleDevelopment.Template.TemplateResult -->
319+
<View>
320+
<Name>PSModuleDevelopment.Template.TemplateResult</Name>
321+
<ViewSelectedBy>
322+
<TypeName>PSModuleDevelopment.Template.TemplateResult</TypeName>
323+
</ViewSelectedBy>
324+
<TableControl>
325+
<AutoSize/>
326+
<TableHeaders>
327+
<TableColumnHeader/>
328+
<TableColumnHeader/>
329+
<TableColumnHeader/>
330+
<TableColumnHeader/>
331+
</TableHeaders>
332+
<TableRowEntries>
333+
<TableRowEntry>
334+
<TableColumnItems>
335+
<TableColumnItem>
336+
<PropertyName>IsFolder</PropertyName>
337+
</TableColumnItem>
338+
<TableColumnItem>
339+
<PropertyName>Path</PropertyName>
340+
</TableColumnItem>
341+
<TableColumnItem>
342+
<PropertyName>Name</PropertyName>
343+
</TableColumnItem>
344+
<TableColumnItem>
345+
<PropertyName>IsText</PropertyName>
346+
</TableColumnItem>
347+
</TableColumnItems>
348+
</TableRowEntry>
349+
</TableRowEntries>
350+
</TableControl>
351+
</View>
352+
318353
<!-- PSModuleDevelopment.Utility.LinesOfCode -->
319354
<View>
320355
<Name>PSModuleDevelopment.Utility.LinesOfCode</Name>

library/PSModuleDevelopment/PSModuleDevelopment/PSModuleDevelopment.csproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
<AppDesignerFolder>Properties</AppDesignerFolder>
1010
<RootNamespace>PSModuleDevelopment</RootNamespace>
1111
<AssemblyName>PSModuleDevelopment</AssemblyName>
12-
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
12+
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
1313
<FileAlignment>512</FileAlignment>
14+
<TargetFrameworkProfile />
1415
</PropertyGroup>
1516
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
1617
<DebugSymbols>true</DebugSymbols>
@@ -69,6 +70,7 @@
6970
<Compile Include="Template\TemplateItemBase.cs" />
7071
<Compile Include="Template\TemplateItemFile.cs" />
7172
<Compile Include="Template\TemplateItemFolder.cs" />
73+
<Compile Include="Template\TemplateResult.cs" />
7274
<Compile Include="Template\TemplateType.cs" />
7375
<Compile Include="Utility\LinesOfCode.cs" />
7476
<Compile Include="Utility\PropertySearchResult.cs" />
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
namespace PSModuleDevelopment.Template
2+
{
3+
/// <summary>
4+
/// The result object of a template invokation item.
5+
/// A project template will generate one such object per file/folder
6+
/// </summary>
7+
public class TemplateResult
8+
{
9+
/// <summary>
10+
/// Name of the file or folder
11+
/// </summary>
12+
public string Name;
13+
/// <summary>
14+
/// Path the file or folder should be written to
15+
/// </summary>
16+
public string Path;
17+
/// <summary>
18+
/// The full, resolved path of the item
19+
/// </summary>
20+
public string FullPath;
21+
/// <summary>
22+
/// Any content to write (only viable for files)
23+
/// </summary>
24+
public object Content;
25+
/// <summary>
26+
/// Whether the item to create is a folder or a file
27+
/// </summary>
28+
public bool IsFolder;
29+
/// <summary>
30+
/// Whether the file is a text-file.
31+
/// If false, it will be written as a binary file instead.
32+
/// </summary>
33+
public bool IsText = true;
34+
}
35+
}

0 commit comments

Comments
 (0)