75 lines
2.2 KiB
JavaScript
75 lines
2.2 KiB
JavaScript
require('babel-register');
|
|
|
|
const { getChallenges } = require('@freecodecamp/curriculum');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const { Observable } = require('rx');
|
|
const { dasherize } = require('../api-server/server/utils');
|
|
|
|
let pathMap = {};
|
|
|
|
function createPathMigrationMap() {
|
|
return new Promise(resolve => {
|
|
Observable.of(getChallenges())
|
|
.map(blocks => {
|
|
blocks.forEach(block => {
|
|
const { name: blockName, superBlock, challenges } = block;
|
|
if (!(dasherize(superBlock) in pathMap)) {
|
|
pathMap[dasherize(superBlock)] = {};
|
|
}
|
|
if (!(dasherize(blockName) in pathMap[superBlock])) {
|
|
pathMap[dasherize(superBlock)][
|
|
dasherize(blockName)
|
|
] = challenges.map(({ title, challengeType }) => ({
|
|
dashedName: dasherize(title),
|
|
challengeType
|
|
}));
|
|
}
|
|
});
|
|
})
|
|
.subscribe(() => {}, console.error, () => {
|
|
const migMap = Object.keys(pathMap)
|
|
.filter(key => !key.includes('certificate'))
|
|
.map(superBlock => {
|
|
return Object.keys(pathMap[superBlock])
|
|
.map(block => {
|
|
return pathMap[superBlock][block].reduce(
|
|
(map, { dashedName, challengeType }) => ({
|
|
...map,
|
|
[dashedName]:
|
|
challengeType === 7
|
|
? `/${superBlock}/${block}`
|
|
: `/${superBlock}/${block}/${dashedName}`
|
|
}),
|
|
{}
|
|
);
|
|
})
|
|
.reduce(
|
|
(acc, current) => ({
|
|
...acc,
|
|
...current
|
|
}),
|
|
{}
|
|
);
|
|
})
|
|
.reduce(
|
|
(acc, current) => ({
|
|
...acc,
|
|
...current
|
|
}),
|
|
{}
|
|
);
|
|
fs.writeFileSync(
|
|
path.resolve(
|
|
__dirname,
|
|
'../api-server/server/resources/pathMigration.json'
|
|
),
|
|
JSON.stringify(migMap, null, 2)
|
|
);
|
|
resolve();
|
|
});
|
|
});
|
|
}
|
|
|
|
exports.createPathMigrationMap = createPathMigrationMap;
|