unified

Project: syntax-tree/unist-util-index

Package: unist-util-index@3.0.1

  1. Dependents: 8
  2. unist utility to index property values or computed keys to nodes
  1. util 143
  2. utility 139
  3. unist 126
  4. tree 41
  5. ast 31
  6. unist-util 25
  7. node 23
  8. filter 5
  9. map 2
  10. property 2

unist-util-index

Build Coverage Downloads Size Sponsors Backers Chat

unist utility to create a mutable index mapping property values or computed keys back to nodes.

Install

This package is ESM only: Node 12+ is needed to use it and it must be imported instead of required.

npm:

npm install unist-util-index

Use

import fs from 'node:fs'
import {remark} from 'remark'
import {toString} from 'mdast-util-to-string'
import {Index} from 'unist-util-index'

// Parse and read this repo’s readme:
const tree = remark.parse(fs.readFileSync('readme.md'))

// Index on heading depth:
const indexOnDepth = new Index('depth', tree, 'heading')

console.log(indexOnDepth.get(2).map(toString))

// Index on definition identifier:
const indexOnIdentifier = new Index('identifier', tree, 'definition')

console.log(indexOnIdentifier.get('unist').map(node => node.url))

Yields:

[ 'Install', 'Use', 'API', 'Related', 'Contribute', 'License' ]
[ 'https://github.com/syntax-tree/unist' ]

API

This package exports the following identifiers: Index. There is no default export.

class Index(prop|keyFn[, tree[, test]])

Create an index data structure that maps keys (calculated by keyFn function or the values at prop in each node) to a list of nodes.

If tree is given, the index is initialized with all nodes, optionally filtered by test.

Parameters
Returns

Index — an index instance.

function keyFn(node)

Function called with every added node to return the key to index on.

Index#get(key)

Get nodes by key (*). Returns a list of zero or more nodes (Array.<Node>).

Index#add(node)

Add node to the index (if not already present).

Index#remove(node)

Remove node from the index (if present).

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