gatsby-transformer-remark-plaintext
Version:
Creates a new graphql field `plainText` on every MarkdownRemark node
68 lines (51 loc) • 1.78 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
const Remark = require(`remark`);
const strip = require(`strip-markdown`);
const _require = require(`gatsby/graphql`),
GraphQLString = _require.GraphQLString;
const Promise = require(`bluebird`);
let pathPrefixCacheStr = ``;
const plainTextCacheKey = node => `transformer-remark-markdown-plaintext-${node.internal.contentDigest}-${pathPrefixCacheStr}`;
module.exports = ({
type,
pathPrefix,
cache
}) => {
if (type.name !== `MarkdownRemark`) {
return {};
}
pathPrefixCacheStr = pathPrefix || ``;
return new Promise((resolve, reject) => {
function getPlainText(_x) {
return _getPlainText.apply(this, arguments);
}
function _getPlainText() {
_getPlainText = (0, _asyncToGenerator2.default)(function* (markdownNode) {
const cacheKey = plainTextCacheKey(markdownNode);
let plainText = yield cache.get(cacheKey);
if (typeof plainText === 'undefined') {
plainText = ``;
if (markdownNode.rawMarkdownBody) {
try {
const result = yield Remark().use(strip).process(markdownNode.rawMarkdownBody);
plainText = result.contents && String(result.contents) || String(result);
cache.set(cacheKey, plainText);
} catch (e) {}
}
}
return plainText;
});
return _getPlainText.apply(this, arguments);
}
return resolve({
plainText: {
type: GraphQLString,
resolve(markdownNode) {
return getPlainText(markdownNode);
}
}
});
});
};