39 lines
983 B
JavaScript
39 lines
983 B
JavaScript
|
const crypto = require('crypto');
|
||
|
|
||
|
function createChallengeNodes(
|
||
|
path,
|
||
|
pluginOptions = {}
|
||
|
) {
|
||
|
const { source } = pluginOptions;
|
||
|
return new Promise(resolve => {
|
||
|
const challengeNodes = source(path)
|
||
|
.reduce((nodes, { challenges, name }) => {
|
||
|
const challengeNodes = challenges.map(challenge => {
|
||
|
const contentDigest = crypto
|
||
|
.createHash('md5')
|
||
|
.update(JSON.stringify(challenge))
|
||
|
.digest('hex');
|
||
|
const internal = {
|
||
|
contentDigest,
|
||
|
type: 'ChallengeNode'
|
||
|
};
|
||
|
|
||
|
return JSON.parse(
|
||
|
JSON.stringify({
|
||
|
id: challenge.id,
|
||
|
children: [],
|
||
|
parent: null,
|
||
|
internal,
|
||
|
sourceInstanceName: pluginOptions.name || '__PROGRAMATTIC__',
|
||
|
...challenge
|
||
|
})
|
||
|
);
|
||
|
});
|
||
|
return nodes.concat(challengeNodes);
|
||
|
}, []);
|
||
|
resolve(challengeNodes);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
exports.createChallengeNodes = createChallengeNodes;
|