77 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* eslint-disable no-self-compare */
 | 
						|
// no import here as this runs without babel
 | 
						|
const fs = require('fs');
 | 
						|
const path = require('path');
 | 
						|
const omit = require('lodash/omit');
 | 
						|
 | 
						|
const hiddenFile = /(^(\.|\/\.))|(.md$)/g;
 | 
						|
 | 
						|
function getFilesFor(dir) {
 | 
						|
  let targetDir = path.join(__dirname, dir);
 | 
						|
  return fs
 | 
						|
    .readdirSync(targetDir)
 | 
						|
    .filter(file => !hiddenFile.test(file))
 | 
						|
    .map(function(file) {
 | 
						|
      let superBlock;
 | 
						|
      if (fs.statSync(path.join(targetDir, file)).isFile()) {
 | 
						|
        return { file: file };
 | 
						|
      }
 | 
						|
      superBlock = file;
 | 
						|
      return getFilesFor(path.join(dir, superBlock)).map(function(data) {
 | 
						|
        return {
 | 
						|
          file: path.join(superBlock, data.file),
 | 
						|
          superBlock: superBlock
 | 
						|
        };
 | 
						|
      });
 | 
						|
    })
 | 
						|
    .reduce(function(files, entry) {
 | 
						|
      return files.concat(entry);
 | 
						|
    }, []);
 | 
						|
}
 | 
						|
 | 
						|
function superblockInfo(filePath) {
 | 
						|
  let parts = (filePath || '').split('-');
 | 
						|
  let order = parseInt(parts[0], 10);
 | 
						|
  if (isNaN(order)) {
 | 
						|
    return { order: 0, name: filePath };
 | 
						|
  } else {
 | 
						|
    return {
 | 
						|
      order: order,
 | 
						|
      name: parts.splice(1).join('-')
 | 
						|
    };
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
// unpackFlag is an argument passed by the unpack script in unpack.js
 | 
						|
// which allows us to conditionall omit translations when running
 | 
						|
// the test suite and prevent schema related errors in the main fCC branch
 | 
						|
module.exports = function getChallenges(challengesDir, unpackFlag) {
 | 
						|
  if (!challengesDir) {
 | 
						|
    challengesDir = 'challenges';
 | 
						|
  }
 | 
						|
  return getFilesFor(challengesDir).map(function(data) {
 | 
						|
    const challengeSpec = require('./' + challengesDir + '/' + data.file);
 | 
						|
    let superInfo = superblockInfo(data.superBlock);
 | 
						|
    challengeSpec.fileName = data.file;
 | 
						|
    challengeSpec.superBlock = superInfo.name;
 | 
						|
    challengeSpec.superOrder = superInfo.order;
 | 
						|
    challengeSpec.challenges = challengeSpec.challenges.map(challenge =>
 | 
						|
      omit(challenge, [
 | 
						|
        'betaSolutions',
 | 
						|
        'betaTests',
 | 
						|
        'hints',
 | 
						|
        'MDNlinks',
 | 
						|
        'null',
 | 
						|
        'rawSolutions',
 | 
						|
        'react',
 | 
						|
        'reactRedux',
 | 
						|
        'redux',
 | 
						|
        'releasedOn',
 | 
						|
        unpackFlag ? undefined : 'translations',
 | 
						|
        'type'
 | 
						|
      ])
 | 
						|
    );
 | 
						|
    return challengeSpec;
 | 
						|
  });
 | 
						|
};
 |