Store Heading Metadata in a Markdown Document with remark

John Otander
InstructorJohn Otander
Share this video with your friends

Social Share Links

Send Tweet
Published 5 years ago
Updated 4 years ago

You can use unified's virtual file to add data from a document in order to use it elsewhere. In this lesson we'll store metadata from all heading nodes in a markdown document using remark and vfile.

Instructor: [00:00] First, we're going to begin with our test. We'll also want to open up the fixture file so we can look at our headings that we'll expect in our result.

[00:07] Remark will return a data object as part of the result. We can de-structure the headings from there, which you can then assert against in our test.

[00:15] With the test written, you can run yarn test to make sure that it fails. Now we can begin implementing our plugin. In addition to our tree, we'll also pass a virtual file from remark.

[00:25] This is what we're taking the headings from so we can also use that in our plugin. To start, we'll add some mock data. We can run our test again to make sure our mock data is being returned.

[00:35] Now, it's time to actually visit our heading nodes so we can yarn add unist-util-visit. We can then require the library and then use that by passing at the tree and selecting all heading nodes.

[00:47] To start, we can take the depth from each heading node. On the file object, we need to set the default for headings and the data, and then push the depth as a key in the object. We can run our test again and see the proper depth being added to our data attribute.

[01:00] From within our heading node, we'll also need to visit the text nodes. We'll also instantiate a text string which we'll add to for each of the text nodes that we visit. Lastly, we can add the text to our returned object.

[01:11] We can run our test one more time and we should see that it passes. We've stored all headings as a data attribute on our virtual file. Altogether, we have acquired unist-util-visit, added a default headings value, visited every heading node, recorded the depth, aggregated the text, and then pushed that to our file.

[01:29] In our tests, you retrieved the headings data from our virtual file, then asserted against the headings that we expected.

egghead
egghead

Member comments are a way for members to communicate, interact, and ask questions about a lesson.

The instructor or someone from the community might respond to your question Here are a few basic guidelines to commenting on egghead.io

Be on-Topic

Comments are for discussing a lesson. If you're having a general issue with the website functionality, please contact us at support@egghead.io.

Avoid meta-discussion

  • This was great!
  • This was horrible!
  • I didn't like this because it didn't match my skill level.
  • +1 It will likely be deleted as spam.

Code Problems?

Should be accompanied by code! Codesandbox or Stackblitz provide a way to share code and discuss it in context

Details and Context

Vague question? Vague answer. Any details and context you can provide will lure more interesting answers!

Markdown supported.
Become a member to join the discussionEnroll Today