param([string]$CatalogPath = '')
$ErrorActionPreference = 'Stop'
$taskRepo = Split-Path -Parent $PSScriptRoot
if ([string]::IsNullOrWhiteSpace($CatalogPath)) { $CatalogPath = Join-Path $taskRepo '.artifacts/basic-nodes-catalog.json' }
if (-not (Test-Path -LiteralPath $CatalogPath)) { throw '请先执行 BasicDataTests.CatalogPortsAreUniqueDescribedAndAvailableToCodeAndGraphs,生成节点元数据。' }
$taskCatalog = Get-Content -Raw -LiteralPath $CatalogPath | ConvertFrom-Json
$taskTick = [char]96
function Escape-Cell([string]$value) { return $value.Replace('|', '\|').Replace([string][char]13, '').Replace([string][char]10, ' ') }
function Format-Ports($ports) {
if ($ports.Count -eq 0) { return '无' }
return (($ports | ForEach-Object { "$taskTick$($_.name)$taskTick $($_.type) · $(Escape-Cell $_.label)" }) -join '<br>')
}
$taskLines = [Collections.Generic.List[string]]::new()
$taskLines.Add('# 内置基础节点完整目录')
$taskLines.Add('')
$taskLines.Add("SDK 1.6 的 $($taskCatalog.Count) 个核心动作节点。由核心能力声明生成;所有动作还带执行输入与声明的执行输出。另有间隔、每日、文件变化、工作流完成四个系统触发节点。")
$taskLines.Add('')
$taskLines.Add('使用教程、类型规则、C# 关键词对应和导入示例见[基础节点](basic-nodes.md)。通过节点库分类、中文名称、方法名或下表能力 ID 搜索。')
foreach ($taskGroup in ($taskCatalog | Group-Object category | Sort-Object Name)) {
$taskLines.Add('')
$taskLines.Add("## $($taskGroup.Name)($($taskGroup.Count))")
$taskLines.Add('')
$taskLines.Add('| 节点与能力 ID | 输入 | 输出 | 用途 |')
$taskLines.Add('|---|---|---|---|')
foreach ($taskNode in ($taskGroup.Group | Sort-Object name)) {
$taskDescription = if ([string]::IsNullOrWhiteSpace($taskNode.description)) { $taskNode.name + ';详见工作流与运行说明。' } else { $taskNode.description }
$taskLines.Add("| $(Escape-Cell $taskNode.name)<br>$taskTick$($taskNode.id)$taskTick | $(Format-Ports $taskNode.inputs) | $(Format-Ports $taskNode.outputs) | $(Escape-Cell $taskDescription) |")
}
}
$taskLines.Add('')
$taskLines.Add('目录由 [Export-BasicNodeCatalog.ps1](../tools/Export-BasicNodeCatalog.ps1) 根据验收测试导出的实际运行元数据生成。')
[IO.File]::WriteAllText((Join-Path $taskRepo 'docs/basic-node-catalog.md'), ($taskLines -join [Environment]::NewLine) + [Environment]::NewLine, [Text.UTF8Encoding]::new($false))
param([string]$CatalogPath = '')
$ErrorActionPreference = 'Stop'
$taskRepo = Split-Path -Parent $PSScriptRoot
if ([string]::IsNullOrWhiteSpace($CatalogPath)) { $CatalogPath = Join-Path $taskRepo '.artifacts/basic-nodes-catalog.json' }
if (-not (Test-Path -LiteralPath $CatalogPath)) { throw '请先执行 BasicDataTests.CatalogPortsAreUniqueDescribedAndAvailableToCodeAndGraphs,生成节点元数据。' }
$taskCatalog = Get-Content -Raw -LiteralPath $CatalogPath | ConvertFrom-Json
$taskTick = [char]96
function Escape-Cell([string]$value) { return $value.Replace('|', '\|').Replace([string][char]13, '').Replace([string][char]10, ' ') }
function Format-Ports($ports) {
if ($ports.Count -eq 0) { return '无' }
return (($ports | ForEach-Object { "$taskTick$($_.name)$taskTick $($_.type) · $(Escape-Cell $_.label)" }) -join '<br>')
}
$taskLines = [Collections.Generic.List[string]]::new()
$taskLines.Add('# 内置基础节点完整目录')
$taskLines.Add('')
$taskLines.Add("SDK 1.6 的 $($taskCatalog.Count) 个核心动作节点。由核心能力声明生成;所有动作还带执行输入与声明的执行输出。另有间隔、每日、文件变化、工作流完成四个系统触发节点。")
$taskLines.Add('')
$taskLines.Add('使用教程、类型规则、C# 关键词对应和导入示例见[基础节点](basic-nodes.md)。通过节点库分类、中文名称、方法名或下表能力 ID 搜索。')
foreach ($taskGroup in ($taskCatalog | Group-Object category | Sort-Object Name)) {
$taskLines.Add('')
$taskLines.Add("## $($taskGroup.Name)($($taskGroup.Count))")
$taskLines.Add('')
$taskLines.Add('| 节点与能力 ID | 输入 | 输出 | 用途 |')
$taskLines.Add('|---|---|---|---|')
foreach ($taskNode in ($taskGroup.Group | Sort-Object name)) {
$taskDescription = if ([string]::IsNullOrWhiteSpace($taskNode.description)) { $taskNode.name + ';详见工作流与运行说明。' } else { $taskNode.description }
$taskLines.Add("| $(Escape-Cell $taskNode.name)<br>$taskTick$($taskNode.id)$taskTick | $(Format-Ports $taskNode.inputs) | $(Format-Ports $taskNode.outputs) | $(Escape-Cell $taskDescription) |")
}
}
$taskLines.Add('')
$taskLines.Add('目录由 [Export-BasicNodeCatalog.ps1](../tools/Export-BasicNodeCatalog.ps1) 根据验收测试导出的实际运行元数据生成。')
[IO.File]::WriteAllText((Join-Path $taskRepo 'docs/basic-node-catalog.md'), ($taskLines -join [Environment]::NewLine) + [Environment]::NewLine, [Text.UTF8Encoding]::new($false))