64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const _ = require('lodash');
 | |
| 
 | |
| const {
 | |
|   getChallengesForLang,
 | |
|   createChallenge,
 | |
|   getChallengesDirForLang
 | |
| } = require('../../curriculum/getChallenges');
 | |
| const utils = require('./');
 | |
| const { locale } = require('../config/env.json');
 | |
| const { blockNameify } = require('./blockNameify');
 | |
| 
 | |
| const dasherize = utils.dasherize;
 | |
| const nameify = utils.nameify;
 | |
| 
 | |
| const arrToString = arr =>
 | |
|   Array.isArray(arr) ? arr.join('\n') : _.toString(arr);
 | |
| 
 | |
| exports.localeChallengesRootDir = getChallengesDirForLang(locale);
 | |
| 
 | |
| exports.replaceChallengeNode = async function replaceChallengeNode(
 | |
|   fullFilePath
 | |
| ) {
 | |
|   return prepareChallenge(await createChallenge(fullFilePath));
 | |
| };
 | |
| 
 | |
| exports.buildChallenges = async function buildChallenges() {
 | |
|   const curriculum = await getChallengesForLang(locale);
 | |
|   const superBlocks = Object.keys(curriculum);
 | |
|   const blocks = superBlocks
 | |
|     .map(superBlock => curriculum[superBlock].blocks)
 | |
|     .reduce((blocks, superBlock) => {
 | |
|       const currentBlocks = Object.keys(superBlock).map(key => superBlock[key]);
 | |
|       return blocks.concat(_.flatten(currentBlocks));
 | |
|     }, []);
 | |
| 
 | |
|   const builtChallenges = blocks
 | |
|     .filter(block => !block.isPrivate)
 | |
|     .map(({ challenges }) => challenges.map(prepareChallenge))
 | |
|     .reduce((accu, current) => accu.concat(current), []);
 | |
|   return builtChallenges;
 | |
| };
 | |
| 
 | |
| function prepareChallenge(challenge) {
 | |
|   challenge.name = nameify(challenge.title);
 | |
|   if (challenge.files) {
 | |
|     challenge.files = _.reduce(
 | |
|       challenge.files,
 | |
|       (map, file) => {
 | |
|         map[file.key] = {
 | |
|           ...file,
 | |
|           head: arrToString(file.head),
 | |
|           contents: arrToString(file.contents),
 | |
|           tail: arrToString(file.tail)
 | |
|         };
 | |
|         return map;
 | |
|       },
 | |
|       {}
 | |
|     );
 | |
|   }
 | |
|   challenge.block = dasherize(challenge.block);
 | |
|   challenge.superBlock = blockNameify(challenge.superBlock);
 | |
|   return challenge;
 | |
| }
 |