unist-util-visit-parents

中文文档
6.1.0发布于 2026/10/25MITTypeScriptES Module近 30 天下载 3亿

unist utility to recursively walk over nodes, with ancestral information

原始使用文档
文档目录26 节
  1. Contents
  2. What is this?
  3. When should I use this?
  4. Install
  5. Use
  6. API
  7. visitParents(tree[, test], enter|visitors[, reverse])
  8. CONTINUE
  9. EXIT
  10. SKIP
  11. Action
  12. ActionTuple
  13. BuildVisitor
  14. BuildVisitors
  15. Index
  16. Test
  17. Visitor
  18. VisitorExit
  19. VisitorResult
  20. VisitorResultExit
  21. Visitors
  22. Types
  23. Compatibility
  24. Related
  25. Contribute
  26. License

unist-util-visit-parents

Build Coverage Downloads Size Sponsors Backers Chat

unist utility to walk the tree with a stack of parents.

Contents

What is this?

This is a very important utility for working with unist as it lets you walk the tree.

When should I use this?

You can use this utility when you want to walk the tree and want to know about every parent of each node. You can use unist-util-visit if you don’t care about the entire stack of parents.

Install

This package is ESM only. In Node.js (version 16+), install with npm:

npm install unist-util-visit-parents

In Deno with esm.sh:

import {visitParents} from 'https://esm.sh/unist-util-visit-parents@6'

In browsers with esm.sh:

<script type="module">
  import {visitParents} from 'https://esm.sh/unist-util-visit-parents@6?bundle'
</script>

Use

import {visitParents} from 'unist-util-visit-parents'
import {fromMarkdown} from 'mdast-util-from-markdown'

const tree = fromMarkdown('Some *emphasis*, **strong**, and `code`.')

visitParents(tree, 'strong', function (node, ancestors) {
  console.log(node.type, ancestors.map(ancestor => ancestor.type))
})

Yields:

strong ['root', 'paragraph']

API

This package exports the identifiers CONTINUE, EXIT, SKIP, and visitParents. There is no default export.

visitParents(tree[, test], enter|visitors[, reverse])

Visit nodes, with ancestral information.

This algorithm performs depth-first tree traversal in preorder (NLR) or if reverse is given, in reverse preorder (NRL). An exit visitor is called in postorder (LRN) or if reverse is given, in reverse postorder (RLN).

You can choose which nodes are visited by passing a test. For complex tests, you should test yourself in a visitor, as it will be faster and will have improved type information.

Walking the tree is an intensive task. Make use of the return values of the visitor when possible. Instead of walking a tree multiple times, walk it once, use unist-util-is to check if a node matches, and then perform different operations.

You can change the tree. Changes inside a node made when entering it are walked, changes made when exiting it are not. See Visitor and VisitorExit for more info.

Signatures
  • visitParents(tree[, test], enter[, reverse])
  • visitParents(tree[, test], visitors[, reverse])
Parameters
  • tree (Node) — tree to traverse
  • test (Test, optional) — unist-util-is-compatible test
  • enter (Visitor) — handle each node when entering it
  • visitors (Visitors) — handle each node when exiting it, and optionally when entering it
  • reverse (boolean, default: false) — walk children from last to first; for enter, reverse preorder (NRL) instead of preorder (NLR); for exit, reverse postorder (RLN) instead of postorder (LRN)
Returns

Nothing (undefined).

CONTINUE

Continue traversing as normal (true).

EXIT

Stop traversing immediately (false).

SKIP

Do not traverse this node’s children ('skip'). Only works when entering a node.

Action

Union of the action types (TypeScript type).

Type
type Action = typeof CONTINUE | typeof EXIT | typeof SKIP

ActionTuple

List with one or two values, the first an action, the second an index (TypeScript type).

Type
type ActionTuple = [
  (Action | null | undefined | void)?,
  (Index | null | undefined)?
]

BuildVisitor

Build a typed Visitor function from a tree and a test (TypeScript type).

It will infer which values are passed as node and which as parents.

Type parameters
  • Tree (Node, default: Node) — tree type
  • Check (Test, default: Test) — test type
Returns

Visitor.

BuildVisitors

Build typed Visitors from a tree and a test (TypeScript type).

It will infer which values are passed as node and which as parents.

Type parameters
  • Tree (Node, default: Node) — tree type
  • Check (Test, default: Test) — test type
Returns

Visitors.

Index

Move to the sibling at index next (after node itself is completely traversed) (TypeScript type).

Useful if mutating the tree, such as removing the node the visitor is currently on, or any of its previous siblings. Results less than 0 or greater than or equal to children.length stop traversing the parent.

Type
type Index = number

Test

unist-util-is compatible test (TypeScript type).

Visitor

Handle a node (matching test, if given) before its children (TypeScript type).

Changes inside node are walked next. Replacing or removing it is easier in exit. When replacing or removing it here, return SKIP (as otherwise its old children are walked), or [SKIP, index] to continue with the node now at index. Changing next siblings (in walk order) is fine; changing previous siblings needs a new Index. Removing an ancestor or changing its previous siblings is not supported.

Parameters
  • node (Node) — found node
  • parents (Array<Node>) — ancestors of node
  • index (number or undefined) — index of node in its parent (the last of parents), or undefined for the tree itself
Returns

What to do next (VisitorResult).

Passing a tuple back (ActionTuple) only makes sense as [SKIP, Index].

VisitorExit

Handle a node (matching test, if given) after its children (TypeScript type).

Changes inside node are not walked, which makes this a good place to change node based on its children, or to replace or remove it. When removing node or changing previous siblings (in walk order), return a new Index. Removing an ancestor or changing its previous siblings is not supported.

Parameters
  • node (Node) — found node
  • parents (Array<Node>) — ancestors of node
  • index (number or undefined) — index of node in its parent (the last of parents), or undefined for the tree itself
Returns

What to do next (VisitorResultExit).

CONTINUE (true, nothing) continues as normal, EXIT (false) stops traversing, and Index continues at that sibling.

VisitorResult

Any value that can be returned from an enter visitor (TypeScript type).

Like VisitorResultExit but SKIP can be returned to not walk children of the node, and ActionTuple can be used to combine an action with an index.

Type
type VisitorResult =
  | Action
  | ActionTuple
  | Index
  | null
  | undefined
  | void

VisitorResultExit

Any value that can be returned from an exit visitor (TypeScript type).

Type
type VisitorResultExit = Index | boolean | null | undefined | void

Visitors

Handle nodes when entering and exiting them (TypeScript type). The enter visitor is optional while exit is required.

Pass an enter visitor directly to only handle nodes when entering them.

enter is called before children (if any) are walked and exit after that. exit is still called when enter returns SKIP. Both enter and exit are only called for nodes that match an optional test.

Fields
  • enter (Visitor, optional) — handle a node before its children
  • exit (VisitorExit) — handle a node after its children

Types

This package is fully typed with TypeScript. It exports the additional types Action, ActionTuple, BuildVisitor, BuildVisitors, Index, Test, Visitor, VisitorExit, VisitorResult, VisitorResultExit, and Visitors.

Compatibility

Projects maintained by the unified collective are compatible with maintained versions of Node.js.

When we cut a new major release, we drop support for unmaintained versions of Node. This means we try to keep the current release line, unist-util-visit-parents@^6, compatible with Node.js 16.

Contribute

See contributing.md in syntax-tree/.github for ways to get started. See support.md for ways to get help.

This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.

License

MIT © Titus Wormer

版本与发布记录

unist-util-visit-parents 共发布 26 个版本,首次发布于 2016/03/25;过去 12 个月发布了 1 个版本。

版本发布日期距今
6.1.0latest2026/10/2512 天前
6.0.22025/10/171.1 年前
6.0.12023/07/073 年前
6.0.02023/07/073 年前
5.1.32023/01/243 年前
5.1.22023/01/243 年前

关于 unist-util-visit-parents 的常见问题

unist-util-visit-parents 是什么?

unist utility to recursively walk over nodes, with ancestral information

如何安装 unist-util-visit-parents?

在项目目录运行 npm install unist-util-visit-parents,或使用 pnpm add / yarn add / bun add。

unist-util-visit-parents 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

unist-util-visit-parents 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

unist-util-visit-parents 可以商用吗?

unist-util-visit-parents 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

unist-util-visit-parents 的下载量有多少?

根据 npm 官方下载统计,unist-util-visit-parents 在 2026/10/05 – 2026/11/03 这 30 天内被下载 297,792,201 次,日均约 9,926,407 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

unist-util-visit-parents 还在维护吗?

最新版本 6.1.0 发布于 2026/10/25(12 天前);至今共发布 26 个版本,其中过去 12 个月发布了 1 个;首次发布于 2016/03/25。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。