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