AST のヘルパー
@cosense-toolbox/parser/utils は、AST の走査や必要なノードの抽出に使う関数を提供します。ここでは次のページを例にします。
TypeScriptimport { parse } from "@cosense-toolbox/parser"const page = parse(`関連ページ[JavaScript] と [TypeScript] を比べる#メモ`)visit
visit(tree, type?, visitor) は木を深さ優先で走査します。型を指定すると、その型のノードだけが visitor に渡ります。
TypeScriptimport { visit } from "@cosense-toolbox/parser/utils"visit(page, "internalLink", (node) => { console.log(node.target)})visitor が
"skip" を返すと、そのノードの子をたどりません。"exit" を返すと走査全体を終了します。それ以外の値では走査を続けます。find と collect
find(tree, type) は指定した型の最初のノードを返し、見つからなければ null を返します。collect(tree, type) は該当するノードを出現順にすべて返します。返り値の型は
type から導出されるため、たとえば collect(page, "icon") は IconNode[] になります。collectLinks
collectLinks(tree) は内部リンクとハッシュタグの参照先を、出現順・重複なしで返します。[ページ名] と #ページ名 は同じ名前としてまとめられます。includeProjectLinks: true を指定すると、[/project/page] 形式の別プロジェクトへのリンクも含めます。既定では含めません。firstImage
firstImage(tree) は最初に見つかった画像ノードを返します。画像がなければ null です。src はソースの URL のままなので、<img> に渡す前に asImageSrc を使ってください。rawTextOf
rawTextOf(source, node) は position を使ってノードに対応するソース文字列を切り出します。[リンク] のような記法では、括弧などのマーカーも含めて返します。この関数群はパーサー本体を import しないため、サーバーで作った AST をクライアントで走査する構成にも使えます。