Skip to content

Commit

Permalink
gatsby methods clean up (gatsbyjs#111)
Browse files Browse the repository at this point in the history
  • Loading branch information
avigoldman authored and ChristopherBiscardi committed Jun 27, 2019
1 parent 27ec005 commit e7ea583
Show file tree
Hide file tree
Showing 6 changed files with 121 additions and 105 deletions.
105 changes: 7 additions & 98 deletions packages/gatsby-plugin-mdx/gatsby-node.js
@@ -1,120 +1,26 @@
const path = require("path");
const fs = require("fs-extra");
const merge = require("lodash/merge");
const escapeStringRegexp = require("escape-string-regexp");
const defaultOptions = require("./utils/default-options");
const extractExports = require("./utils/extract-exports");
const mdx = require("./utils/mdx");

/**
* Create Mdx nodes from MDX files.
*/
exports.onCreateNode = require("./on-create-node");
exports.onCreateNode = require("./gatsby/on-create-node");

/**
* Add additional fields to MDX nodes
*/
exports.setFieldsOnGraphQLNodeType = require("./extend-node-type");
exports.setFieldsOnGraphQLNodeType = require("./gatsby/extend-node-type");

/**
* Add frontmatter as page context for MDX pages
*/
exports.onCreatePage = async ({ page, actions }, pluginOptions) => {
const { createPage, deletePage } = actions;
const { extensions, ...options } = defaultOptions(pluginOptions);
const ext = path.extname(page.component);

if (extensions.includes(ext)) {
const content = await fs.readFile(page.component, "utf8");
const code = await mdx(content, options);

// grab the exported frontmatter
const { frontmatter } = extractExports(code);

deletePage(page);
createPage(
merge(
{
context: {
frontmatter: {
...frontmatter
}
}
},
page
)
);
}
};
exports.onCreatePage = require("./gatsby/on-create-page");

/**
* Add the webpack config for loading MDX files
*/
exports.onCreateWebpackConfig = (
{ stage, loaders, plugins, actions, getNodes },
pluginOptions
) => {
const options = defaultOptions(pluginOptions);
const testPattern = new RegExp(
options.extensions.map(ext => `${escapeStringRegexp(ext)}$`).join("|")
);
const mdxTestPattern = new RegExp(
options.extensions
.concat(".deck-mdx")
.map(ext => `${escapeStringRegexp(ext)}$`)
.join("|")
);

const decks = options.decks.map(ext => `${escapeStringRegexp(ext)}`);

actions.setWebpackConfig({
module: {
rules: [
{
test: /\.js$/,
include: path.resolve(__dirname, ".cache/gatsby-mdx"),
use: [loaders.js()]
},
{
test: testPattern,
exclude: decks,
use: [
loaders.js(),
{
loader: "gatsby-mdx/mdx-loader",
options: {
getNodes,
pluginOptions: options
}
}
]
},
{
test: mdxTestPattern,
include: decks,
use: [
loaders.js(),
{ loader: "gatsby-mdx/mdx-deck-post-loader" },
{ loader: "mdx-deck/loader" }
]
},
{
test: /.deck-mdx$/,
use: [
loaders.js(),
{ loader: "gatsby-mdx/mdx-deck-post-loader" },
{ loader: "mdx-deck/loader" }
]
}
]
},
plugins: [
plugins.define({
__DEVELOPMENT__: stage === `develop` || stage === `develop-html`
})
]
});
};
exports.onCreateWebpackConfig = require("./gatsby/create-webpack-config");

/**
* Add the MDX extensions as resolvable. This is how the page creator
Expand All @@ -140,6 +46,9 @@ exports.preprocessSource = async function preprocessSource(
return null;
};

/**
* Required config for mdx to function
*/
exports.onCreateBabelConfig = ({ actions }) => {
actions.setBabelPlugin({
name: `@babel/plugin-proposal-object-rest-spread`
Expand Down
69 changes: 69 additions & 0 deletions packages/gatsby-plugin-mdx/gatsby/create-webpack-config.js
@@ -0,0 +1,69 @@
const path = require("path");
const escapeStringRegexp = require("escape-string-regexp");
const defaultOptions = require("../utils/default-options");

module.exports = (
{ stage, loaders, plugins, actions, getNodes },
pluginOptions
) => {
const options = defaultOptions(pluginOptions);
const testPattern = new RegExp(
options.extensions.map(ext => `${escapeStringRegexp(ext)}$`).join("|")
);
const mdxTestPattern = new RegExp(
options.extensions
.concat(".deck-mdx")
.map(ext => `${escapeStringRegexp(ext)}$`)
.join("|")
);

const decks = options.decks.map(ext => `${escapeStringRegexp(ext)}`);

actions.setWebpackConfig({
module: {
rules: [
{
test: /\.js$/,
include: path.resolve(__dirname, ".cache/gatsby-mdx"),
use: [loaders.js()]
},
{
test: testPattern,
exclude: decks,
use: [
loaders.js(),
{
loader: "gatsby-mdx/mdx-loader",
options: {
getNodes,
pluginOptions: options
}
}
]
},
{
test: mdxTestPattern,
include: decks,
use: [
loaders.js(),
{ loader: "gatsby-mdx/mdx-deck-post-loader" },
{ loader: "mdx-deck/loader" }
]
},
{
test: /.deck-mdx$/,
use: [
loaders.js(),
{ loader: "gatsby-mdx/mdx-deck-post-loader" },
{ loader: "mdx-deck/loader" }
]
}
]
},
plugins: [
plugins.define({
__DEVELOPMENT__: stage === `develop` || stage === `develop-html`
})
]
});
};
Expand Up @@ -27,10 +27,10 @@ const babel = require("@babel/core");
const rawMDX = require("@mdx-js/mdx");

const debug = require("debug")("gatsby-mdx:extend-node-type");
const mdx = require("./utils/mdx");
const getTableOfContents = require("./utils/get-table-of-content");
const defaultOptions = require("./utils/default-options");
const getSourcePluginsAsRemarkPlugins = require("./utils/get-source-plugins-as-remark-plugins");
const mdx = require("../utils/mdx");
const getTableOfContents = require("../utils/get-table-of-content");
const defaultOptions = require("../utils/default-options");
const getSourcePluginsAsRemarkPlugins = require("../utils/get-source-plugins-as-remark-plugins");

const stripFrontmatter = source => grayMatter(source).content;
/*
Expand Down
@@ -1,8 +1,8 @@
const { isFunction } = require("lodash");
const debug = require("debug")("gatsby-mdx:on-create-node");

const defaultOptions = require("./utils/default-options");
const createMDXNode = require("./utils/create-mdx-node");
const defaultOptions = require("../utils/default-options");
const createMDXNode = require("../utils/create-mdx-node");

module.exports = async (
{ node, getNode, loadNodeContent, actions, createNodeId },
Expand Down
34 changes: 34 additions & 0 deletions packages/gatsby-plugin-mdx/gatsby/on-create-page.js
@@ -0,0 +1,34 @@
const path = require("path");
const fs = require("fs-extra");
const merge = require("lodash/merge");
const defaultOptions = require("../utils/default-options");
const extractExports = require("../utils/extract-exports");
const mdx = require("../utils/mdx");

module.exports = async ({ page, actions }, pluginOptions) => {
const { createPage, deletePage } = actions;
const { extensions, ...options } = defaultOptions(pluginOptions);
const ext = path.extname(page.component);

if (extensions.includes(ext)) {
const content = await fs.readFile(page.component, "utf8");
const code = await mdx(content, options);

// grab the exported frontmatter
const { frontmatter } = extractExports(code);

deletePage(page);
createPage(
merge(
{
context: {
frontmatter: {
...frontmatter
}
}
},
page
)
);
}
};
6 changes: 5 additions & 1 deletion packages/gatsby-plugin-mdx/index.js
@@ -1 +1,5 @@
// noop
/**
* Welcome to gastby-mdx!
*
* Start reading in gatsby-node.js
*/

0 comments on commit e7ea583

Please sign in to comment.