1 | const path = require('path');
|
2 | const Joi = require('joi');
|
3 |
|
4 | const IMPORTS_SCHEMA = Joi.alternatives().try(
|
5 | Joi.string(),
|
6 | Joi.object().keys({
|
7 | value: Joi.string(),
|
8 | path: Joi.string(),
|
9 | })
|
10 | );
|
11 |
|
12 | const LAYOUT_SCHEMA = Joi.string();
|
13 |
|
14 | const OPTIONS_SCHEMA = Joi.object()
|
15 | .keys({
|
16 | loaders: Joi.object().keys({
|
17 | js: Joi.func(),
|
18 | mdx: Joi.func(),
|
19 | }),
|
20 | pagesPath: Joi.string(),
|
21 | defaultImports: Joi.alternatives()
|
22 | .try(IMPORTS_SCHEMA, Joi.array().items(IMPORTS_SCHEMA))
|
23 | .optional(),
|
24 | defaultLayout: LAYOUT_SCHEMA.optional(),
|
25 | })
|
26 | .unknown();
|
27 |
|
28 | module.exports = (pluginOptions = {}) => {
|
29 | const options = Object.assign(
|
30 | { pagesPath: path.resolve(process.cwd(), 'src/pages') },
|
31 | pluginOptions
|
32 | );
|
33 |
|
34 | if (options.loaders == null) options.loaders = {};
|
35 | if (options.loaders.js == null) options.loaders.js = () => undefined;
|
36 | if (options.loaders.mdx == null) options.loaders.mdx = () => undefined;
|
37 |
|
38 | const { error } = Joi.validate(options, OPTIONS_SCHEMA);
|
39 | if (error) throw new Error(`Invalid gatsby-transformer-mdx options - ${error.toString()}`);
|
40 |
|
41 | return options;
|
42 | };
|