mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2025-12-19 18:18:27 -05:00
* refactor: explicit types for validate * refactor: explicit return types for ui-components * refactor: use exec instead of match * refactor: add lots more boundary types * refactor: more eslint warnings * refactor: more explicit exports * refactor: more explicit types * refactor: even more explicit types * fix: relax type contrainsts for superblock-order * refactor: final boundaries * refactor: avoid using 'object' type * fix: use named import for captureException This uses TypeScript (which works) instead of import/namespace (which doesn't) to check if captureException exists in sentry/gatsby (it does)
74 lines
2.0 KiB
TypeScript
74 lines
2.0 KiB
TypeScript
import fs from 'fs';
|
|
import { getProjectPath } from './helpers/get-project-info';
|
|
import { getMetaData } from './helpers/project-metadata';
|
|
import {
|
|
createStepFile,
|
|
deleteStepFromMeta,
|
|
getChallengeSeeds,
|
|
insertStepIntoMeta,
|
|
updateStepTitles
|
|
} from './utils';
|
|
|
|
function deleteStep(stepNum: number): void {
|
|
if (stepNum < 1) {
|
|
throw 'Step not deleted. Step num must be a number greater than 0.';
|
|
}
|
|
|
|
const challengeOrder = getMetaData().challengeOrder;
|
|
|
|
if (stepNum > challengeOrder.length)
|
|
throw `Step # ${stepNum} not deleted. Largest step number is ${challengeOrder.length}.`;
|
|
|
|
const stepId = challengeOrder[stepNum - 1][0];
|
|
|
|
fs.unlinkSync(`${getProjectPath()}${stepId}.md`);
|
|
deleteStepFromMeta({ stepNum });
|
|
updateStepTitles();
|
|
|
|
console.log(`Sucessfully deleted step #${stepNum}`);
|
|
}
|
|
|
|
function insertStep(stepNum: number): void {
|
|
if (stepNum < 1) {
|
|
throw 'Step not inserted. New step number must be greater than 0.';
|
|
}
|
|
const challengeOrder = getMetaData().challengeOrder;
|
|
|
|
if (stepNum > challengeOrder.length + 1)
|
|
throw `Step not inserted. New step number must be less than ${
|
|
challengeOrder.length + 2
|
|
}.`;
|
|
|
|
const challengeSeeds =
|
|
stepNum > 1
|
|
? getChallengeSeeds(
|
|
`${getProjectPath()}${challengeOrder[stepNum - 2][0]}.md`
|
|
)
|
|
: {};
|
|
|
|
const stepId = createStepFile({
|
|
stepNum,
|
|
challengeSeeds
|
|
});
|
|
|
|
insertStepIntoMeta({ stepNum, stepId });
|
|
updateStepTitles();
|
|
console.log(`Sucessfully inserted new step #${stepNum}`);
|
|
}
|
|
|
|
function createEmptySteps(num: number): void {
|
|
if (num < 1 || num > 1000) {
|
|
throw `No steps created. arg 'num' must be between 1 and 1000 inclusive`;
|
|
}
|
|
|
|
const nextStepNum = getMetaData().challengeOrder.length + 1;
|
|
|
|
for (let stepNum = nextStepNum; stepNum < nextStepNum + num; stepNum++) {
|
|
const stepId = createStepFile({ stepNum });
|
|
insertStepIntoMeta({ stepNum, stepId });
|
|
}
|
|
console.log(`Sucessfully added ${num} steps`);
|
|
}
|
|
|
|
export { deleteStep, insertStep, createEmptySteps };
|