@@ -65,22 +65,30 @@ export function getPageTreeRoots(
6565}
6666
6767/**
68- * Get other page tree nodes that lives under the same parent
68+ * Get other item nodes that lives under the same parent.
6969 */
7070export function getPageTreePeers (
7171 treeOrTrees : PageTree . Root | Record < string , PageTree . Root > ,
7272 url : string ,
7373) : PageTree . Item [ ] {
74+ return findSiblings ( treeOrTrees , url ) . filter ( ( item ) => item . type === 'page' ) ;
75+ }
76+
77+ /**
78+ * Get other tree nodes that lives under the same parent.
79+ */
80+ export function findSiblings (
81+ treeOrTrees : PageTree . Root | Record < string , PageTree . Root > ,
82+ url : string ,
83+ ) : PageTree . Node [ ] {
7484 // Check if it's a single tree or multiple trees (i18n)
7585 if ( 'children' in treeOrTrees ) {
7686 // Single tree case
7787 const tree = treeOrTrees as PageTree . Root ;
78- const parent = findParentFromTree ( tree , url ) ;
88+ const parent = findParent ( tree , url ) ;
7989 if ( ! parent ) return [ ] ;
8090
81- return parent . children . filter (
82- ( item ) => item . type === 'page' && item . url !== url ,
83- ) as PageTree . Item [ ] ;
91+ return parent . children ;
8492 }
8593
8694 // Multiple trees case
@@ -92,7 +100,7 @@ export function getPageTreePeers(
92100 return [ ] ;
93101}
94102
95- function findParentFromTree (
103+ export function findParent (
96104 from : PageTree . Root | PageTree . Folder ,
97105 url : string ,
98106) : PageTree . Root | PageTree . Folder | undefined {
@@ -157,6 +165,12 @@ export function findPath(
157165
158166const VisitBreak = Symbol ( 'VisitBreak' ) ;
159167
168+ /**
169+ * Perform a depth-first search on page tree visiting every node.
170+ *
171+ * @param root - the root of page tree to visit.
172+ * @param visitor - function to receive nodes, return `skip` to skip the children of current node, `break` to stop the search entirely.
173+ */
160174export function visit < Root extends PageTree . Node | PageTree . Root > (
161175 root : Root ,
162176 visitor : < T extends PageTree . Node | PageTree . Root > (
0 commit comments