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;
|
|
});
|
|
}
|