import { ObjectId } from 'bson'; import { select } from '@inquirer/prompts'; import { getTemplate } from './helpers/get-challenge-template.js'; import { newChallengePrompts } from './helpers/new-challenge-prompts.js'; import { getProjectPath } from './helpers/get-project-info.js'; import { getMetaData, updateMetaData } from './helpers/project-metadata.js'; import { createChallengeFile } from './utils.js'; const insertChallenge = async () => { const path = getProjectPath(); const options = await newChallengePrompts(); const challenges = getMetaData().challengeOrder; const challengeAfterId = await select({ message: 'Which challenge should come AFTER this new one?', choices: challenges.map(({ id, title }) => ({ name: title, value: id })) }); const indexToInsert = challenges.findIndex( ({ id }) => id === challengeAfterId ); const template = getTemplate(options.challengeType); const challengeId = new ObjectId(); const challengeText = template({ ...options, challengeId }); createChallengeFile(options.dashedName, challengeText, path); const meta = getMetaData(); meta.challengeOrder.splice(indexToInsert, 0, { id: challengeId.toString(), title: options.title }); await updateMetaData(meta); }; void insertChallenge();