gatsby-transformer-mdx
Version:
Gatsby plugin to handle MDX files
53 lines (45 loc) • 1.54 kB
JavaScript
const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const grayMatter = require('gray-matter');
const { createPath } = require('gatsby-page-utils');
const readFile = promisify(fs.readFile);
class PageCreator {
constructor({ store, createPage, deletePage, pagesDirectory }) {
this.store = store;
this.createPage = createPage;
this.deletePage = deletePage;
this.pagesDirectory = pagesDirectory;
this.pages = {};
this.create = this.create.bind(this);
this.remove = this.remove.bind(this);
}
async create(filePath) {
const shouldCreate = !this.pages[filePath];
if (shouldCreate) {
this.pages[filePath] = true;
const componentPath = path.join(this.pagesDirectory, filePath);
const content = await readFile(componentPath);
const { data: frontmatter } = grayMatter(content);
this.createPage({
path: createPath(filePath),
component: componentPath,
context: frontmatter,
});
}
}
remove(filePath) {
// Based on - https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-plugin-page-creator/src/gatsby-node.js#L69
const componentPath = path.join(this.pagesDirectory, filePath);
this.store.getState().pages.forEach((page) => {
if (page.component === componentPath) {
this.deletePage({
path: createPath(filePath),
component: componentPath,
});
}
});
this.pages[filePath] = undefined;
}
}
module.exports = PageCreator;