63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			63 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;
 | 
						|
}
 |