Initial commit: Financial Crime domain exemplar
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
param(
|
||||
[string]$SpecDir = "md-ddl-specification",
|
||||
[string]$OutputFileName = "MD-DDL-Complete.md"
|
||||
)
|
||||
|
||||
$repoRoot = (Resolve-Path (Join-Path $PSScriptRoot "..\..")).Path
|
||||
$specPath = Join-Path $repoRoot $SpecDir
|
||||
$outputPath = Join-Path $specPath $OutputFileName
|
||||
|
||||
# Deterministic section order for MD-DDL spec generation.
|
||||
$sectionFiles = @(
|
||||
"1-Foundation.md",
|
||||
"2-Domains.md",
|
||||
"3-Entities.md",
|
||||
"4-Enumerations.md",
|
||||
"5-Relationships.md",
|
||||
"6-Events.md",
|
||||
"7-Sources.md",
|
||||
"8-Transformations.md",
|
||||
"9-Data-Products.md",
|
||||
"10-Adoption.md"
|
||||
)
|
||||
|
||||
$files = foreach ($name in $sectionFiles) {
|
||||
$fullPath = Join-Path $specPath $name
|
||||
if (-not (Test-Path $fullPath)) {
|
||||
throw "Missing required spec section file: $name"
|
||||
}
|
||||
Get-Item $fullPath
|
||||
}
|
||||
|
||||
$combined = New-Object System.Collections.Generic.List[string]
|
||||
|
||||
for ($i = 0; $i -lt $files.Count; $i++) {
|
||||
$file = $files[$i]
|
||||
$lines = [System.IO.File]::ReadAllLines($file.FullName)
|
||||
|
||||
if ($lines.Length -lt 3) {
|
||||
$body = @()
|
||||
}
|
||||
else {
|
||||
# Keep one global H1 by dropping each section's first two lines in the body.
|
||||
$body = [System.Collections.Generic.List[string]]::new()
|
||||
foreach ($line in $lines[2..($lines.Length - 1)]) {
|
||||
[void]$body.Add($line)
|
||||
}
|
||||
|
||||
# Remove optional trailing navigation block: blank lines, '---', blank lines, '...next:' line.
|
||||
while ($body.Count -gt 0 -and [string]::IsNullOrWhiteSpace($body[$body.Count - 1])) {
|
||||
$body.RemoveAt($body.Count - 1)
|
||||
}
|
||||
|
||||
if ($body.Count -gt 0 -and $body[$body.Count - 1] -like "...next:*") {
|
||||
$body.RemoveAt($body.Count - 1)
|
||||
while ($body.Count -gt 0 -and [string]::IsNullOrWhiteSpace($body[$body.Count - 1])) {
|
||||
$body.RemoveAt($body.Count - 1)
|
||||
}
|
||||
if ($body.Count -gt 0 -and $body[$body.Count - 1] -eq "---") {
|
||||
$body.RemoveAt($body.Count - 1)
|
||||
}
|
||||
while ($body.Count -gt 0 -and [string]::IsNullOrWhiteSpace($body[$body.Count - 1])) {
|
||||
$body.RemoveAt($body.Count - 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($i -eq 0) {
|
||||
# Preserve single top-level title from section 1.
|
||||
[void]$combined.Add($lines[0])
|
||||
[void]$combined.Add("")
|
||||
}
|
||||
|
||||
if ($i -gt 0) {
|
||||
[void]$combined.Add("")
|
||||
}
|
||||
|
||||
foreach ($line in $body) {
|
||||
[void]$combined.Add($line)
|
||||
}
|
||||
}
|
||||
|
||||
# Ensure UTF-8 output (without BOM) so punctuation remains stable across toolchains.
|
||||
$utf8NoBom = New-Object System.Text.UTF8Encoding($false)
|
||||
[System.IO.File]::WriteAllLines($outputPath, $combined, $utf8NoBom)
|
||||
|
||||
Write-Output "Regenerated $OutputFileName from $($files.Count) files in $SpecDir"
|
||||
Reference in New Issue
Block a user