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(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)); } }