45 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import path from 'path';
 | |
| import { Observable } from 'rx';
 | |
| import adler32 from 'adler32';
 | |
| 
 | |
| const basePath = process.cwd() + '/seed/challenges/';
 | |
| 
 | |
| export default function getFromDisk$(challenge) {
 | |
|   if (challenge && !challenge.fileName) {
 | |
|     throw new Error(
 | |
|       `Challenge ${challenge.name} has no fileName.
 | |
|       Did you remember run node seed?`
 | |
|     );
 | |
|   }
 | |
|   delete require.cache[require.resolve(
 | |
|     path.join(basePath, challenge.fileName)
 | |
|   )];
 | |
| 
 | |
|   return Observable.just(require(path.join(basePath, challenge.fileName)))
 | |
|     .map(challengeSpec => {
 | |
|       const _challenge = challengeSpec.challenges[challenge.suborder - 1];
 | |
|       _challenge.helpRoom = challengeSpec.helpRoom || 'Help';
 | |
|       return _challenge;
 | |
|     })
 | |
|     .map(challenge => {
 | |
|       challenge.checksum = adler32.sum(
 | |
|         Buffer(challenge.title +
 | |
|           JSON.stringify(challenge.description) +
 | |
|           JSON.stringify(challenge.challengeSeed) +
 | |
|           JSON.stringify(challenge.tests)));
 | |
| 
 | |
|       challenge.head = challenge.head || [];
 | |
|       challenge.tail = challenge.tail || [];
 | |
|       challenge.challengeType = '' + challenge.challengeType;
 | |
| 
 | |
|       challenge.name = challenge.title.replace(/[^a-zA-Z0-9\s]/g, '');
 | |
| 
 | |
|       challenge.dashedName = challenge.name
 | |
|         .toLowerCase()
 | |
|         .replace(/\:/g, '')
 | |
|         .replace(/\s/g, '-');
 | |
| 
 | |
|       return challenge;
 | |
|     });
 | |
| }
 |