Работа с метаданными

Markdown-it — это мощная и гибкая библиотека для парсинга Markdown в JavaScript, обеспечивающая высокую производительность и расширяемость через плагины. Одной из важных задач при работе с Markdown-документами является обработка метаданных — дополнительной информации, не входящей напрямую в текст, но используемой для управления выводом, настройками или интеграцией с внешними системами.

Понятие метаданных

Метаданные в Markdown часто хранятся в формате YAML Front Matter или специальных блоках внутри текста. Примеры включают заголовки документа, дату создания, автора, категории, теги, а также произвольные пользовательские данные. Основная задача — выделить эти данные и сделать их доступными для дальнейшей обработки.

Подключение и базовая настройка Markdown-it

const MarkdownIt = require('markdown-it');
const md = new MarkdownIt({
  html: true,
  linkify: true,
  typographer: true
});

Параметры конфигурации позволяют включать поддержку HTML-тегов, автоматически распознавать ссылки и использовать типографские символы. Это важно, так как метаданные могут содержать HTML или ссылки.

Использование плагинов для метаданных

Markdown-it не имеет встроенной поддержки Front Matter, поэтому для работы с метаданными часто применяются плагины. Один из популярных вариантов — markdown-it-front-matter.

const frontMatter = require('markdown-it-front-matter');

let metadata = {};

md.use(frontMatter, (fm) => {
  metadata = parseYAML(fm); // parseYAML — функция для разбора YAML
});
  • frontMatter принимает callback, в котором содержимое метаданных передается для дальнейшей обработки.
  • Можно использовать любую библиотеку YAML, например js-yaml, для преобразования текста метаданных в объект JavaScript.
const yaml = require('js-yaml');

function parseYAML(fmText) {
  try {
    return yaml.load(fmText);
  } catch (e) {
    console.error('Ошибка разбора метаданных:', e);
    return {};
  }
}

Доступ к метаданным при рендеринге

После разбора Front Matter объект метаданных можно использовать для различных целей: настройка шаблонов, генерация заголовков, фильтрация контента. Например, при рендеринге HTML:

const content = `
---
title: "Пример документа"
author: "Иван Иванов"
date: "2026-03-22"
tags: ["JavaScript", "Markdown-it"]
---

# Заголовок документа

Текст документа.
`;

md.use(frontMatter, (fm) => {
  metadata = parseYAML(fm);
});

const html = md.render(content);

console.log(metadata.title); // "Пример документа"
console.log(html);           // HTML-документ без Front Matter

Расширение функционала через кастомные правила

Markdown-it поддерживает добавление собственных токенов и правил парсинга. Это позволяет интегрировать метаданные, хранящиеся внутри текста, а не только в Front Matter.

md.core.ruler.push('collect_metadata', function (state) {
  state.tokens.forEach(token => {
    if (token.type === 'inline' && token.content.startsWith('meta:')) {
      const [, key, value] = token.content.match(/^meta:\s*(\w+)\s*=\s*(.+)$/);
      metadata[key] = value;
    }
  });
});
  • Здесь создается кастомное правило collect_metadata.
  • Проверяются токены типа inline.
  • Содержимое, начинающееся с meta:, парсится и добавляется в объект metadata.

Применение метаданных в динамическом контенте

Метаданные позволяют управлять генерацией страниц, например, формировать списки статей по тегам, сортировать по дате, менять оформление в зависимости от автора. Совмещение Markdown-it и Front Matter делает это особенно удобным:

function renderArticle(content) {
  metadata = {};
  const html = md.render(content);
  return {
    html,
    metadata
  };
}

const article = renderArticle(content);

if (article.metadata.tags.includes('JavaScript')) {
  console.log('Это статья по JavaScript');
}

Выводы по работе с метаданными

  • Метаданные хранятся отдельно от основного текста и обеспечивают гибкость управления контентом.
  • Front Matter и плагины Markdown-it — стандартный способ обработки метаданных.
  • Кастомные правила позволяют расширять возможности библиотеки для специфических форматов.
  • Использование объектов метаданных совместно с рендерингом открывает возможности динамической генерации и фильтрации контента.

Метаданные превращают Markdown-документы из простого текста в управляемую структуру данных, интегрируемую с современными веб-приложениями и системами генерации статических сайтов.