unist-util-index
unist utility to create an index from certain nodes.
Contents
- What is this?
- When should I use this?
- Install
- Use
- API
- Types
- Compatibility
- Related
- Contribute
- License
What is this?
This utility creates a mutable index data structure, that maps property values or computed keys, to nodes. For example, you can use this to index all (footnote) definitions in a tree, or all headings of a certain rank, to later retrieve them without having to walk the tree each time.
When should I use this?
This is a utility that helps you deal with indexing the tree. It’s pretty small, and you can definitely do it yourself, but this little wrapper makes it all a bit easier.
Install
This package is ESM only. In Node.js (version 14.14+ and 16.0+), install with npm:
npm install unist-util-index
In Deno with esm.sh
:
import {Index} from 'https://esm.sh/unist-util-index@3'
In browsers with esm.sh
:
<script type="module">
import {Index} from 'https://esm.sh/unist-util-index@3?bundle'
</script>
Use
import fs from 'node:fs/promises'
import {fromMarkdown} from 'mdast-util-from-markdown'
import {toString} from 'mdast-util-to-string'
import {Index} from 'unist-util-index'
// Parse and read this repo’s readme:
const tree = fromMarkdown(await fs.readFile('readme.md'))
// Index on heading depth:
const indexOnDepth = new Index('depth', tree, 'heading')
console.log(indexOnDepth.get(2).map((d) => toString(d)))
// Index on definition identifier:
const indexOnIdentifier = new Index('identifier', tree, 'definition')
console.log(indexOnIdentifier.get('unist').map((node) => node.url))
Yields:
[
'Contents',
'What is this?',
'When should I use this?',
'Install',
'Use',
'API',
'Types',
'Compatibility',
'Related',
'Contribute',
'License'
]
[ 'https://github.com/syntax-tree/unist' ]
API
This package exports the identifier Index
.
There is no default export.
Index(prop|keyFunction[, tree[, test]])
Create a mutable index data structure, that maps property values or computed keys, to nodes.
If tree
is given, the index is initialized with all nodes, optionally
filtered by test
.
Parameters
-
prop
(string
) — field to look up in each node to find keys -
keyFunction
(KeyFunction
) — function called with each node to calculate keys -
tree
(Node
, optional) — tree to index -
test
(Test
, optional) —unist-util-is
compatible test
Returns
Instance (Index
).
Index#get(key)
Get nodes by key
.
Parameters
-
key
(unknown
) — key to retrieve, can be anything that can be used as a key in aMap
Returns
List of zero or more nodes (Array<Node>
).
Index#add(node)
Add node
to the index (if not already present).
Parameters
-
node
(Node
) — node to index
Returns
Current instance (Index
).
Index#remove(node)
Remove node
from the index (if present).
Parameters
-
node
(Node
) — node to remove
Returns
Current instance (Index
).
KeyFunction
Function called with every added node to calculate the key to index on (TypeScript type).
Parameters
-
node
(Node
) — node to calculate a key for
Returns
Key to index on (unknown
).
Can be anything that can be used as a key in a Map
.
Test
unist-util-is
compatible test (TypeScript type).
Types
This package is fully typed with TypeScript.
It exports the additional types KeyFunction
and
Test
.
Compatibility
Projects maintained by the unified collective are compatible with all maintained versions of Node.js. As of now, that is Node.js 12.20+, 14.14+, 16.0+, and 18.0+. Our projects sometimes work with older versions, but this is not guaranteed.
Related
-
unist-util-is
— utility to check if a node passes a test -
unist-util-visit
— utility to recursively walk over nodes -
unist-util-select
— select nodes with CSS-like selectors
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, organisation, or community you agree to abide by its terms.
License
MIT © Eugene Sharygin