Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
evaluate to `$null` or empty strings are now silently skipped
instead of causing lookup errors.
- Added knockout support for hashtable array items.
- Added private function `Get-DatumTupleKeyValueString` for consistent composite key generation
- Added private function `Test-DatumKnockout` for efficient knockout matching

### Changed

Expand All @@ -52,6 +54,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
using an InvokeCommand expression that returns a path for some nodes
and nothing for others.
- Updated build pipeline to also test against Linux and MacOS
- Refactored `Merge-DatumArray` for performance optimization:
- Replaced O(n²) nested loop comparisons using `Compare-Hashtable` with O(n+m) hash-based indexing
- Pre-computed knockout reference items to avoid repeated checks during merge
- Changed output type from `[System.Collections.ArrayList]` to `[System.Collections.Generic.List[object]]`
- Updated RsopWithInvokCommandHandler integration tests to ensure also
node specific Datum handler values from lower layers are merged
correctly.

### Fixed

Expand All @@ -75,6 +84,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
property separator under `ResolutionPrecedence` and
`lookup_options`.
- Fixed issues running integration tests with PowerShell on Linux.
- Fixed build issue with latest ModuleBuilder version by pinning to v3.1.8

### Removed

- Removed private function `Compare-Hashtable.ps1` (no longer needed)

## [0.41.0] - 2026-02-03

Expand Down
2 changes: 1 addition & 1 deletion RequiredModules.psd1
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
'DscResource.AnalyzerRules' = 'latest'
#'DscResource.Common' = 'latest'
Plaster = 'latest'
ModuleBuilder = 'latest'
ModuleBuilder = '3.1.8'
ChangelogManagement = 'latest'
Sampler = 'latest'
'Sampler.GitHubTasks' = 'latest'
Expand Down
6 changes: 0 additions & 6 deletions memory-bank/systemPatterns.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,12 +133,6 @@ tests/
- **DscWorkshopConfigData**: Full hierarchy with ProtectedData credentials + domain join
- **Demo3**: Node1, Node2, Node3 — simple role merge + `$false` value test

### Known Skipped Tests (3 tests)
All in `RsopWithInvokCommandHandler.tests.ps1`, tagged with "There is a bug in the merge logic":
- Ethernet 3 Gateway for DSCFile01
- Ethernet 3 DnsServer for DSCFile01
- Interface Count for DSCFile01

## Build System
- **Sampler-based**: Uses the Sampler module for build/test/publish pipeline
- **ModuleBuilder**: Merges source files into single module output
Expand Down
80 changes: 0 additions & 80 deletions source/Private/Compare-Hashtable.ps1

This file was deleted.

20 changes: 20 additions & 0 deletions source/Private/Get-DatumTupleKeyValueString.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
function Get-DatumTupleKeyValueString
{
[OutputType([string])]
[CmdletBinding()]
param(
[hashtable]$Item,
[string[]]$Keys
)
if (-not $Keys)
{
$Keys = $Item.Keys
}

$sep = '#'
$values = foreach ($k in $Keys)
{
$Item[$k]
}
return ($values -join $sep)
}
Loading