diff --git a/package.json b/package.json index 09df48cbe067..ceac177e805e 100644 --- a/package.json +++ b/package.json @@ -125,6 +125,7 @@ "@types/yargs-parser": "^20.2.1", "chai": "^4.3.4", "cheerio": "^1.0.0-rc.10", + "hast-util-select": "^5.0.1", "mocha": "^9.1.3", "vite": "~2.6.10" }, diff --git a/test/astro-markdown-plugins.test.js b/test/astro-markdown-plugins.test.js index aca9fcf7b1fe..ee780a738ef5 100644 --- a/test/astro-markdown-plugins.test.js +++ b/test/astro-markdown-plugins.test.js @@ -2,6 +2,7 @@ import { expect } from 'chai'; import cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; import markdownRemark from '@astrojs/markdown-remark'; +import addClasses from './fixtures/astro-markdown-plugins/add-classes.mjs'; describe('Astro Markdown plugins', () => { let fixture; @@ -15,11 +16,7 @@ describe('Astro Markdown plugins', () => { markdownRemark, { remarkPlugins: ['remark-code-titles', ['rehype-autolink-headings', { behavior: 'prepend' }]], - rehypePlugins: [ - [import('rehype-toc'), { headings: ['h2', 'h3'] }], - [import('../../../examples/with-markdown-plugins/add-classes.mjs'), { 'h1,h2,h3': 'title' }], - 'rehype-slug', - ], + rehypePlugins: [['rehype-toc', { headings: ['h2', 'h3'] }], [addClasses, { 'h1,h2,h3': 'title' }], 'rehype-slug'], }, ], }, diff --git a/test/fixtures/astro-markdown-plugins/add-classes.mjs b/test/fixtures/astro-markdown-plugins/add-classes.mjs new file mode 100644 index 000000000000..39acabd52670 --- /dev/null +++ b/test/fixtures/astro-markdown-plugins/add-classes.mjs @@ -0,0 +1,18 @@ +import { selectAll } from 'hast-util-select'; + +export default (additions) => { + const adders = Object.entries(additions).map(adder); + return (node) => adders.forEach((a) => a(node)); +}; + +const adder = ([selector, className]) => { + const writer = write(className); + return (node) => selectAll(selector, node).forEach(writer); +}; + +const write = + (className) => + ({ properties }) => { + if (!properties.className) properties.className = className; + else properties.className += ` ${className}`; + };