Get-NozGraph, Find-NozNote, Measure-NozGarden, Set-NozNoteStatus, Get-NozOrphans — graph edges, Meilisearch search, garden stats, frontmatter status patch, orphan detection from inbound link analysis.
31 lines
979 B
C#
31 lines
979 B
C#
using System.Management.Automation;
|
|
|
|
namespace Noz.PowerShell.Cmdlets;
|
|
|
|
/// Returns notes that have no incoming wikilinks — good candidates for cleanup or linking.
|
|
[Cmdlet(VerbsCommon.Get, "NozOrphans")]
|
|
[OutputType(typeof(NozNote))]
|
|
public sealed class GetNozOrphansCmdlet : NozCmdletBase
|
|
{
|
|
[Parameter]
|
|
public string? Topic { get; set; }
|
|
|
|
protected override void ProcessRecord()
|
|
{
|
|
var notesTask = Api.GetNotesAsync();
|
|
var graphTask = Api.GetGraphAsync();
|
|
|
|
var notes = Run(notesTask);
|
|
var graph = Run(graphTask);
|
|
|
|
var targets = new HashSet<string>(graph.Edges.Select(e => e.Target));
|
|
|
|
var orphans = notes.Where(n => !targets.Contains(n.Slug));
|
|
|
|
if (Topic is not null)
|
|
orphans = orphans.Where(n => string.Equals(n.Topic, Topic, StringComparison.OrdinalIgnoreCase));
|
|
|
|
foreach (var n in orphans.OrderBy(n => n.Topic).ThenBy(n => n.Slug))
|
|
WriteObject(NozNote.From(n));
|
|
}
|
|
}
|