Skip to content

Commit c841a78

Browse files
committed
Handle ContentTypes added before source-filesystem
This can be useful, for example, if you are creating the ContentType in gridsome.server.js. * Patch all the mimeTypes defined by RemarkTransform * Add @gridsome/transformer-remark and gridsome as peer dependencies
1 parent b0c093b commit c841a78

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

index.js

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const fs = require('fs')
22
const path = require('path')
33
const yaml = require('js-yaml')
4+
const RemarkTransformer = require('@gridsome/transformer-remark')
45

56
function getCMSConfigPath(config) {
67
try {
@@ -22,27 +23,20 @@ class NetlifyPaths {
2223
return {
2324
contentTypes: [],
2425
coverField: undefined,
25-
mimeType: 'text/markdown',
2626
}
2727
}
2828

2929
constructor(api, options = {}) {
3030
this.options = options
3131

3232
const {_app, config, context, store} = api
33-
3433
const cmsConfig = yaml.safeLoad(
3534
fs.readFileSync(getCMSConfigPath(config), 'utf8'),
3635
)
3736

3837
this.mediaFolder = path.join(context, cmsConfig.media_folder)
3938
this.publicFolder = cmsConfig.public_folder
4039

41-
let remark = store._transformers[options.mimeType]
42-
const _resolve = remark.resolveNodeFilePath.bind(remark)
43-
remark.resolveNodeFilePath = (node, toPath) =>
44-
_resolve(node, this.fixPath(toPath))
45-
4640
for (const {use, options: opts} of config.plugins) {
4741
if (
4842
use === '@gridsome/source-filesystem' &&
@@ -54,7 +48,23 @@ class NetlifyPaths {
5448
typeName: typeName,
5549
route: route,
5650
})
51+
52+
// Patch remark transformer to fix image paths in markdown bodies
53+
for (const mimeType of RemarkTransformer.mimeTypes()) {
54+
const transformer = ContentType._transformers[mimeType]
55+
if (transformer instanceof RemarkTransformer) {
56+
console.info(
57+
`Patching RemarkTransformer for ${typeName} (${mimeType})`,
58+
)
59+
const _resolve = transformer.resolveNodeFilePath.bind(transformer)
60+
transformer.resolveNodeFilePath = (node, toPath) =>
61+
_resolve(node, this.fixPath(toPath))
62+
}
63+
}
64+
65+
// Fix cover images
5766
if (coverField !== undefined) {
67+
console.info(`Fixing cover images for ${typeName}.${coverField}`)
5868
ContentType.on('add', node => {
5969
node[coverField] = this.fixPath(node[coverField])
6070
})

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,9 @@
1212
],
1313
"dependencies": {
1414
"js-yaml": "^3.13.1"
15+
},
16+
"peerDependencies": {
17+
"@gridsome/transformer-remark": "^0.3.2",
18+
"gridsome": "^0.6.5"
1519
}
1620
}

0 commit comments

Comments
 (0)