ProjectDiffer
in package
FinalYes
Compare two parsed eXeLearning projects semantically.
Table of Contents
Methods
- diff() : array<string, mixed>
- Compare two parsed projects.
- assetHashes() : array<string, string>
- Build resource path-to-hash map.
-
diffAssets()
: array{added: array
, removed: array , modified: array } - Compare project resource files by package path and content hash.
-
diffItems()
: array{added: array
, removed: array , changed: array } - Compare entity arrays by ID, falling back to stable positional keys.
- diffMetadata() : array<string, array{before: mixed, after: mixed}>
- Compare core metadata fields.
- indexItems() : array<string, array<string, mixed>>
- Index entity arrays by ID or positional fallback.
- stripBlockComponents() : array<int, array<string, mixed>>
- Remove nested components from block-level comparisons.
- stripNestedPages() : array<int, array<string, mixed>>
- Remove nested blocks/iDevices from page-level comparisons.
Methods
diff()
Compare two parsed projects.
public
diff(ELPParser $left, ELPParser $right[, string $algorithm = 'sha256' ]) : array<string, mixed>
Parameters
- $left : ELPParser
-
Left project.
- $right : ELPParser
-
Right project.
- $algorithm : string = 'sha256'
-
Hash algorithm for content/assets.
Return values
array<string, mixed>assetHashes()
Build resource path-to-hash map.
private
assetHashes(ELPParser $parser, string $algorithm) : array<string, string>
Parameters
- $parser : ELPParser
-
Parsed project.
- $algorithm : string
-
Hash algorithm.
Return values
array<string, string>diffAssets()
Compare project resource files by package path and content hash.
private
diffAssets(ELPParser $left, ELPParser $right, string $algorithm) : array{added: array, removed: array, modified: array}
Parameters
- $left : ELPParser
-
Left project.
- $right : ELPParser
-
Right project.
- $algorithm : string
-
Hash algorithm.
Return values
array{added: arraydiffItems()
Compare entity arrays by ID, falling back to stable positional keys.
private
diffItems(array<int, array<string, mixed>> $left, array<int, array<string, mixed>> $right, string $prefix) : array{added: array, removed: array, changed: array}
Parameters
- $left : array<int, array<string, mixed>>
-
Left entities.
- $right : array<int, array<string, mixed>>
-
Right entities.
- $prefix : string
-
Fallback key prefix.
Return values
array{added: arraydiffMetadata()
Compare core metadata fields.
private
diffMetadata(ELPParser $left, ELPParser $right) : array<string, array{before: mixed, after: mixed}>
Parameters
Return values
array<string, array{before: mixed, after: mixed}>indexItems()
Index entity arrays by ID or positional fallback.
private
indexItems(array<int, array<string, mixed>> $items, string $prefix) : array<string, array<string, mixed>>
Parameters
- $items : array<int, array<string, mixed>>
-
Entities.
- $prefix : string
-
Fallback key prefix.
Return values
array<string, array<string, mixed>>stripBlockComponents()
Remove nested components from block-level comparisons.
private
stripBlockComponents(array<int, array<string, mixed>> $blocks) : array<int, array<string, mixed>>
Parameters
- $blocks : array<int, array<string, mixed>>
-
Blocks.
Return values
array<int, array<string, mixed>>stripNestedPages()
Remove nested blocks/iDevices from page-level comparisons.
private
stripNestedPages(array<int, array<string, mixed>> $pages) : array<int, array<string, mixed>>
Parameters
- $pages : array<int, array<string, mixed>>
-
Pages.