56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
import { prompt } from 'inquirer';
|
|
|
|
import { getMetaData, updateMetaData } from './helpers/project-metadata';
|
|
import { getChallengeOrderFromMeta } from './helpers/get-challenge-order';
|
|
|
|
const updateChallengeOrder = async () => {
|
|
const oldChallengeOrder = getChallengeOrderFromMeta();
|
|
console.log('Current challenge order is: ');
|
|
console.table(oldChallengeOrder.map(({ title }) => ({ title })));
|
|
|
|
const newChallengeOrder: { id: string; title: string }[] = [];
|
|
|
|
while (oldChallengeOrder.length) {
|
|
const nextChallenge = (await prompt({
|
|
name: 'id',
|
|
message: newChallengeOrder.length
|
|
? `What challenge comes after ${
|
|
newChallengeOrder[newChallengeOrder.length - 1].title
|
|
}?`
|
|
: 'What is the first challenge?',
|
|
type: 'list',
|
|
choices: oldChallengeOrder.map(({ id, title }) => ({
|
|
name: title,
|
|
value: id
|
|
}))
|
|
})) as { id: string };
|
|
const nextChallengeIndex = oldChallengeOrder.findIndex(
|
|
({ id }) => id === nextChallenge.id
|
|
);
|
|
const targetChallenge = oldChallengeOrder[nextChallengeIndex];
|
|
oldChallengeOrder.splice(nextChallengeIndex, 1);
|
|
newChallengeOrder.push(targetChallenge);
|
|
}
|
|
|
|
console.log('New challenge order is: ');
|
|
console.table(newChallengeOrder.map(({ title }) => ({ title })));
|
|
|
|
const confirm = await prompt({
|
|
name: 'correct',
|
|
message: 'Is this correct?',
|
|
type: 'confirm',
|
|
default: false
|
|
});
|
|
|
|
if (!confirm.correct) {
|
|
console.error('Aborting.');
|
|
return;
|
|
}
|
|
|
|
const meta = getMetaData();
|
|
meta.challengeOrder = newChallengeOrder;
|
|
updateMetaData(meta);
|
|
};
|
|
|
|
void (async () => await updateChallengeOrder())();
|