mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2025-12-19 18:18:27 -05:00
refactor: share common intro creation code (#61814)
This commit is contained in:
committed by
GitHub
parent
91f87ea237
commit
0ae01847cb
@@ -12,6 +12,7 @@ import {
|
||||
} from '../../shared/config/curriculum';
|
||||
import { createDialogueFile, validateBlockName } from './utils';
|
||||
import { getBaseMeta } from './helpers/get-base-meta';
|
||||
import { createIntroMD } from './helpers/create-intro';
|
||||
|
||||
const helpCategories = ['English'] as const;
|
||||
|
||||
@@ -42,12 +43,12 @@ async function createLanguageBlock(
|
||||
if (!title) {
|
||||
title = block;
|
||||
}
|
||||
void updateIntroJson(superBlock, block, title);
|
||||
await updateIntroJson(superBlock, block, title);
|
||||
|
||||
const challengeId = await createDialogueChallenge(superBlock, block);
|
||||
void createMetaJson(superBlock, block, title, helpCategory, challengeId);
|
||||
await createMetaJson(superBlock, block, title, helpCategory, challengeId);
|
||||
// TODO: remove once we stop relying on markdown in the client.
|
||||
void createIntroMD(superBlock, block, title);
|
||||
await createIntroMD(superBlock, block, title);
|
||||
}
|
||||
|
||||
async function updateIntroJson(
|
||||
@@ -100,28 +101,6 @@ async function createMetaJson(
|
||||
);
|
||||
}
|
||||
|
||||
async function createIntroMD(superBlock: string, block: string, title: string) {
|
||||
const introMD = `---
|
||||
title: Introduction to the ${title}
|
||||
block: ${block}
|
||||
superBlock: ${superBlock}
|
||||
---
|
||||
|
||||
## Introduction to the ${title}
|
||||
|
||||
This page is for the ${title}
|
||||
`;
|
||||
const dirPath = path.resolve(
|
||||
__dirname,
|
||||
`../../client/src/pages/learn/${superBlock}/${block}/`
|
||||
);
|
||||
const filePath = path.resolve(dirPath, 'index.md');
|
||||
if (!existsSync(dirPath)) {
|
||||
await withTrace(fs.mkdir, dirPath);
|
||||
}
|
||||
void withTrace(fs.writeFile, filePath, introMD, { encoding: 'utf8' });
|
||||
}
|
||||
|
||||
async function createDialogueChallenge(
|
||||
superBlock: SuperBlocks,
|
||||
block: string
|
||||
|
||||
@@ -11,6 +11,7 @@ import {
|
||||
} from '../../shared/config/curriculum';
|
||||
import { createStepFile, validateBlockName } from './utils';
|
||||
import { getBaseMeta } from './helpers/get-base-meta';
|
||||
import { createIntroMD } from './helpers/create-intro';
|
||||
|
||||
const helpCategories = [
|
||||
'HTML-CSS',
|
||||
@@ -117,28 +118,6 @@ async function createMetaJson(
|
||||
);
|
||||
}
|
||||
|
||||
async function createIntroMD(superBlock: string, block: string, title: string) {
|
||||
const introMD = `---
|
||||
title: Introduction to the ${title}
|
||||
block: ${block}
|
||||
superBlock: ${superBlock}
|
||||
---
|
||||
|
||||
## Introduction to the ${title}
|
||||
|
||||
This is a test for the new project-based curriculum.
|
||||
`;
|
||||
const dirPath = path.resolve(
|
||||
__dirname,
|
||||
`../../client/src/pages/learn/${superBlock}/${block}/`
|
||||
);
|
||||
const filePath = path.resolve(dirPath, 'index.md');
|
||||
if (!existsSync(dirPath)) {
|
||||
await withTrace(fs.mkdir, dirPath);
|
||||
}
|
||||
void withTrace(fs.writeFile, filePath, introMD, { encoding: 'utf8' });
|
||||
}
|
||||
|
||||
async function createFirstChallenge(
|
||||
superBlock: SuperBlocks,
|
||||
block: string
|
||||
|
||||
@@ -11,6 +11,7 @@ import {
|
||||
} from '../../shared/config/curriculum';
|
||||
import { createQuizFile, validateBlockName } from './utils';
|
||||
import { getBaseMeta } from './helpers/get-base-meta';
|
||||
import { createIntroMD } from './helpers/create-intro';
|
||||
|
||||
const helpCategories = [
|
||||
'HTML-CSS',
|
||||
@@ -48,7 +49,7 @@ async function createQuiz(
|
||||
if (!title) {
|
||||
title = block;
|
||||
}
|
||||
void updateIntroJson(superBlock, block, title);
|
||||
await updateIntroJson(superBlock, block, title);
|
||||
|
||||
const challengeId = await createQuizChallenge(
|
||||
superBlock,
|
||||
@@ -56,9 +57,9 @@ async function createQuiz(
|
||||
title,
|
||||
questionCount
|
||||
);
|
||||
void createMetaJson(superBlock, block, title, helpCategory, challengeId);
|
||||
await createMetaJson(superBlock, block, title, helpCategory, challengeId);
|
||||
// TODO: remove once we stop relying on markdown in the client.
|
||||
void createIntroMD(superBlock, block, title);
|
||||
await createIntroMD(superBlock, block, title);
|
||||
}
|
||||
|
||||
async function updateIntroJson(
|
||||
@@ -109,28 +110,6 @@ async function createMetaJson(
|
||||
);
|
||||
}
|
||||
|
||||
async function createIntroMD(superBlock: string, block: string, title: string) {
|
||||
const introMD = `---
|
||||
title: Introduction to the ${title}
|
||||
block: ${block}
|
||||
superBlock: ${superBlock}
|
||||
---
|
||||
|
||||
## Introduction to the ${title}
|
||||
|
||||
This page is for the ${title}
|
||||
`;
|
||||
const dirPath = path.resolve(
|
||||
__dirname,
|
||||
`../../client/src/pages/learn/${superBlock}/${block}/`
|
||||
);
|
||||
const filePath = path.resolve(dirPath, 'index.md');
|
||||
if (!existsSync(dirPath)) {
|
||||
await withTrace(fs.mkdir, dirPath);
|
||||
}
|
||||
void withTrace(fs.writeFile, filePath, introMD, { encoding: 'utf8' });
|
||||
}
|
||||
|
||||
async function createQuizChallenge(
|
||||
superBlock: SuperBlocks,
|
||||
block: string,
|
||||
|
||||
36
tools/challenge-helper-scripts/helpers/create-intro.ts
Normal file
36
tools/challenge-helper-scripts/helpers/create-intro.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
import path from 'node:path';
|
||||
import fs from 'node:fs/promises';
|
||||
|
||||
function introTemplate(
|
||||
superBlock: string,
|
||||
block: string,
|
||||
title: string
|
||||
): string {
|
||||
return `---
|
||||
title: Introduction to the ${title}
|
||||
block: ${block}
|
||||
superBlock: ${superBlock}
|
||||
---
|
||||
|
||||
## Introduction to the ${title}
|
||||
|
||||
This page is for the ${title}
|
||||
`;
|
||||
}
|
||||
|
||||
export async function createIntroMD(
|
||||
superBlock: string,
|
||||
block: string,
|
||||
title: string
|
||||
) {
|
||||
const dirPath = path.resolve(
|
||||
__dirname,
|
||||
`../../../client/src/pages/learn/${superBlock}/${block}/`
|
||||
);
|
||||
await fs.mkdir(dirPath, { recursive: true });
|
||||
|
||||
const filePath = path.resolve(dirPath, 'index.md');
|
||||
await fs.writeFile(filePath, introTemplate(superBlock, block, title), {
|
||||
encoding: 'utf8'
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user