Eleventy Plugin Unified
Use the unified ecosystem in Eleventy.
You can render and transform:
- markdown with the remark ecosystem.
- html with the rehype ecosystem.
retext is not yet supported, raise an issue if you'd like this.
Install
npm install eleventy-plugin-unified
const EleventyUnifiedPlugin = require("eleventy-plugin-unified");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(EleventyUnifiedPlugin);
};
Full example
npm install eleventy-plugin-unified remark-slug rehype-format unist-util-visit
const EleventyUnifiedPlugin = require("eleventy-plugin-unified");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(EleventyUnifiedPlugin, {
transformsDirectory: "./plugins/",
markdownTransforms: ["aria-current-links.js", "remark-slug"],
htmlTransforms: [["rehype-format", { indent: "\t" }]],
});
};
import { join } from "node:path";
import { visit } from "unist-util-visit";
export default function ariaCurrentLinks() {
const {
pageContext: { page },
} = this.data();
return (tree) => {
visit(tree, ["link", "linkReference"], (node) => {
const url = node?.url;
if (url && join(page.filePathStem) !== join(url)) {
return;
}
node.data = {
...node.data,
hProperties: {
...node.data.hProperties,
"aria-current": "true",
},
};
});
};
}
const EleventyUnifiedPlugin = require("eleventy-plugin-unified");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(EleventyUnifiedPlugin, [
markdownTransforms: [
'remark-emoji'
]
]);
};
Configuring html transforms (rehype plugins)
const EleventyUnifiedPlugin = require("eleventy-plugin-unified");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(EleventyUnifiedPlugin, [
htmlTransforms: [
'rehype-format'
]
]);
};
Configuring options for a plugin
const EleventyUnifiedPlugin = require("eleventy-plugin-unified");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(EleventyUnifiedPlugin, [
htmlTransforms: [
["rehype-format", { indent: "\t" }]
],
]);
};
Configuring internal plugins
const EleventyUnifiedPlugin = require("eleventy-plugin-unified");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(EleventyUnifiedPlugin, [
markdownTransforms: [
"./plugins/responsive-tables.js"
],
]);
};
or
const EleventyUnifiedPlugin = require("eleventy-plugin-unified");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(EleventyUnifiedPlugin, [
transformsDirectory: "./plugins",
markdownTransforms: [
"responsive-tables.js"
],
]);
};
Getting access to page context and eleventy config
npm install eleventy-plugin-unified unist-util-visit
const EleventyUnifiedPlugin = require("eleventy-plugin-unified");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(EleventyUnifiedPlugin, {
transformsDirectory: "./plugins/",
markdownTransforms: ["log-data.js"],
});
};
export default function logData() {
const { pageContext, eleventyConfig } = this.data();
console.log({ pageContext, eleventyConfig });
}
Acknowledgements
Inspired by florianeckerstorfer/eleventy-plugin-remark