44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
const visitChildren = require('unist-util-visit-children');
|
|
const { root } = require('mdast-builder');
|
|
|
|
const { getFileVisitor } = require('./utils/get-file-visitor');
|
|
const { splitOnThematicBreak } = require('./utils/split-on-thematic-break');
|
|
const getAllBetween = require('./utils/between-headings');
|
|
const { editableRegionMarker } = require('./add-seed');
|
|
|
|
function validateMarkers({ value }) {
|
|
const lines = value.split('\n');
|
|
if (lines.some(line => line.match(RegExp(editableRegionMarker))))
|
|
throw Error(
|
|
'--fcc-editable-region-- should only appear in the --seed-contents--\n' +
|
|
'section, not in --solutions--'
|
|
);
|
|
}
|
|
|
|
function createPlugin() {
|
|
return function transformer(tree, file) {
|
|
const solutionArrays = splitOnThematicBreak(
|
|
getAllBetween(tree, `--solutions--`)
|
|
);
|
|
const solutions = [];
|
|
|
|
solutionArrays.forEach(nodes => {
|
|
const solution = {};
|
|
const solutionTree = root(nodes);
|
|
const visitForContents = visitChildren(
|
|
getFileVisitor(solution, 'contents', validateMarkers)
|
|
);
|
|
|
|
visitForContents(solutionTree);
|
|
solutions.push(solution);
|
|
});
|
|
|
|
file.data = {
|
|
...file.data,
|
|
solutions: solutions
|
|
};
|
|
};
|
|
}
|
|
|
|
module.exports = createPlugin;
|