bisheng
Version:
Transform Markdown(and other static files with transformers) into a SPA website using React.
72 lines (59 loc) • 2.37 kB
JavaScript
;
var fs = require('fs');
var path = require('path');
var sourceData = require('../utils/source-data');
var resolvePlugins = require('../utils/resolve-plugins');
var context = require('../context');
var boss = require('./common/boss');
module.exports = function
/* content */
bishengDataLoader() {
if (this.cacheable) {
this.cacheable();
}
var bishengConfig = context.bishengConfig,
themeConfig = context.themeConfig;
var markdown = sourceData.generate(bishengConfig.source, bishengConfig.transformers);
var browserPlugins = resolvePlugins(themeConfig.plugins, 'browser');
var pluginsString = browserPlugins.map(function (plugin) {
return "[require('".concat(plugin[0], "'), ").concat(JSON.stringify(plugin[1]), "]");
}).join(',\n');
var callback = this.async();
var picked = {};
var pickedPromises = []; // Flag to remind loader that job is done.
if (themeConfig.pick) {
var nodePlugins = resolvePlugins(themeConfig.plugins, 'node');
sourceData.traverse(markdown, function (filename) {
var fileContent = fs.readFileSync(path.join(process.cwd(), filename)).toString();
pickedPromises.push(new Promise(function (resolve) {
boss.queue({
filename: filename,
content: fileContent,
plugins: nodePlugins,
transformers: bishengConfig.transformers,
isBuild: context.isBuild,
callback: function callback(err, result) {
var parsedMarkdown = eval("(".concat(result, ")")); // eslint-disable-line no-eval
Object.keys(themeConfig.pick).forEach(function (key) {
if (!picked[key]) {
picked[key] = [];
}
var picker = themeConfig.pick[key];
var pickedData = picker(parsedMarkdown);
if (pickedData) {
picked[key].push(pickedData);
}
});
resolve();
}
});
}));
});
}
Promise.all(pickedPromises).then(function () {
var sourceDataString = sourceData.stringify(markdown, {
lazyLoad: themeConfig.lazyLoad
});
callback(null, 'module.exports = {' + "\n markdown: ".concat(sourceDataString, ",") + "\n picked: ".concat(JSON.stringify(picked, null, 2), ",") + "\n plugins: [\n".concat(pluginsString, "\n],") + '\n};');
});
};