Skip to content

Commit 719a99f

Browse files
author
vitaly.basaraba
committed
Featured: work generator
1 parent ec07016 commit 719a99f

File tree

1 file changed

+50
-4
lines changed

1 file changed

+50
-4
lines changed

helpers/generateTextLesson.js

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,11 @@ function generateMarkdown(obj) {
4949
// Clear and recreate the level folder
5050
const levelsFolder = path.resolve(__dirname, `${repo}/level`);
5151
clearFolder(levelsFolder);
52+
53+
const uniqueLevels = new Set();
5254
data.forEach(obj => {
5355
if (obj.level) {
56+
uniqueLevels.add(obj.level);
5457
const levelFolderPath = path.join(levelsFolder, obj.level);
5558
const content = generateMarkdown(obj);
5659
writeToFile(levelFolderPath, `${obj.title.replace(/[^a-z0-9]+/gi, '_')}.md`, content);
@@ -60,10 +63,13 @@ data.forEach(obj => {
6063
// Clear and recreate the theme folder
6164
const themesFolder = path.resolve(__dirname, `${repo}/theme`);
6265
clearFolder(themesFolder);
66+
67+
const uniqueThemes = new Set();
6368
data.forEach(obj => {
6469
if (obj.theme) {
6570
const themes = obj.theme.split(',').map(theme => theme.trim());
6671
themes.forEach(theme => {
72+
uniqueThemes.add(theme);
6773
const themeFolderPath = path.join(themesFolder, theme);
6874
const content = generateMarkdown(obj);
6975
writeToFile(themeFolderPath, `${obj.title.replace(/[^a-z0-9]+/gi, '_')}.md`, content);
@@ -74,18 +80,58 @@ data.forEach(obj => {
7480
// Clear and recreate the video folder
7581
const videoFolder = path.resolve(__dirname, `${repo}/video`);
7682
clearFolder(videoFolder);
83+
84+
const videoQuestions = [];
7785
data.forEach(obj => {
7886
if (obj.url && obj.url.includes('tiktok')) {
87+
videoQuestions.push(obj);
7988
const content = generateMarkdown(obj);
8089
writeToFile(videoFolder, `${obj.title.replace(/[^a-z0-9]+/gi, '_')}.md`, content);
8190
}
8291
});
8392

84-
// Save the Markdown content to a README.md file
85-
const outputFilePath = path.resolve(__dirname, './repo/README.md');
93+
// Generate the README header
94+
const totalQuestions = data.length;
95+
const levelsLinks = Array.from(uniqueLevels)
96+
.map(level => `- [${level}](./level/${level})`)
97+
.join('\n');
98+
const themesLinks = Array.from(uniqueThemes)
99+
.map(theme => `- [${theme}](./theme/${theme})`)
100+
.join('\n');
101+
const videosLinks = videoQuestions
102+
.map(q => `- [${q.title}](${q.url})`)
103+
.join('\n');
104+
105+
// Convert the array of objects to Markdown format
106+
const markdownContent = data.map(obj => {
107+
const titleWithLink = obj.link ? `[${obj.title}](${obj.link})` : obj.title;
108+
const tags = obj.level && obj.theme ? `**Tags**: ${obj.level}, ${obj.theme}` : '';
109+
const url = obj.url ? `**URL**: [${obj.url}](${obj.url})` : '';
110+
return `## ${titleWithLink}\n\n${obj.text}\n\n${tags}\n\n${url}\n`;
111+
}).join('\n---\n\n');
112+
113+
const readmeContent = `
114+
# javascript-questions-pro (${totalQuestions} questions)
115+
116+
## [Levels](./level/)
117+
${levelsLinks}
118+
119+
## [Themes](./theme/)
120+
${themesLinks}
121+
122+
## [Tutorials with Videos](./video/)
123+
${videosLinks}
124+
125+
## All questions
126+
${markdownContent}
127+
---
128+
`;
129+
130+
// Write the README header and questions
131+
const outputFilePath = path.resolve(__dirname, `${repo}/README.md`);
86132
try {
87-
fs.writeFileSync(outputFilePath, generateMarkdown, 'utf8');
88-
console.log(`Markdown file has been saved to ${outputFilePath}`);
133+
fs.writeFileSync(outputFilePath, readmeContent, 'utf8');
134+
console.log(`README file has been saved to ${outputFilePath}`);
89135
} catch (err) {
90136
console.error(`Failed to write to file at ${outputFilePath}:`, err.message);
91137
process.exit(1);

0 commit comments

Comments
 (0)