feat(parser): handle multi-file solutions

This commit is contained in:
Oliver Eyton-Williams
2020-06-04 16:52:49 +02:00
committed by Mrugesh Mohapatra
parent a959d462e9
commit 063145fe90
4 changed files with 25 additions and 6 deletions

View File

@ -2,11 +2,15 @@ const visit = require('unist-util-visit');
const { selectAll } = require('hast-util-select');
const { sectionFilter } = require('./utils');
const { createCodeGetter } = require('./challengeSeed-to-data');
const solutionRE = /(.+)-solution$/;
function createPlugin() {
return function transformer(tree, file) {
function visitor(node) {
if (sectionFilter(node, 'solution')) {
// fallback for single-file challenges
const solutions = selectAll('code', node).map(
element => element.children[0].value
);
@ -14,6 +18,21 @@ function createPlugin() {
...file.data,
solutions
};
const solutionFiles = {};
const codeDivs = selectAll('div', node);
const solutionContainers = codeDivs.filter(({ properties: { id } }) =>
solutionRE.test(id)
);
solutionContainers.forEach(
createCodeGetter('contents', solutionRE, solutionFiles)
);
file.data = {
...file.data,
solutionFiles: Object.keys(solutionFiles).map(
lang => solutionFiles[lang]
)
};
}
}
visit(tree, 'element', visitor);