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';
|
} from '../../shared/config/curriculum';
|
||||||
import { createDialogueFile, validateBlockName } from './utils';
|
import { createDialogueFile, validateBlockName } from './utils';
|
||||||
import { getBaseMeta } from './helpers/get-base-meta';
|
import { getBaseMeta } from './helpers/get-base-meta';
|
||||||
|
import { createIntroMD } from './helpers/create-intro';
|
||||||
|
|
||||||
const helpCategories = ['English'] as const;
|
const helpCategories = ['English'] as const;
|
||||||
|
|
||||||
@@ -42,12 +43,12 @@ async function createLanguageBlock(
|
|||||||
if (!title) {
|
if (!title) {
|
||||||
title = block;
|
title = block;
|
||||||
}
|
}
|
||||||
void updateIntroJson(superBlock, block, title);
|
await updateIntroJson(superBlock, block, title);
|
||||||
|
|
||||||
const challengeId = await createDialogueChallenge(superBlock, block);
|
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.
|
// TODO: remove once we stop relying on markdown in the client.
|
||||||
void createIntroMD(superBlock, block, title);
|
await createIntroMD(superBlock, block, title);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updateIntroJson(
|
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(
|
async function createDialogueChallenge(
|
||||||
superBlock: SuperBlocks,
|
superBlock: SuperBlocks,
|
||||||
block: string
|
block: string
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import {
|
|||||||
} from '../../shared/config/curriculum';
|
} from '../../shared/config/curriculum';
|
||||||
import { createStepFile, validateBlockName } from './utils';
|
import { createStepFile, validateBlockName } from './utils';
|
||||||
import { getBaseMeta } from './helpers/get-base-meta';
|
import { getBaseMeta } from './helpers/get-base-meta';
|
||||||
|
import { createIntroMD } from './helpers/create-intro';
|
||||||
|
|
||||||
const helpCategories = [
|
const helpCategories = [
|
||||||
'HTML-CSS',
|
'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(
|
async function createFirstChallenge(
|
||||||
superBlock: SuperBlocks,
|
superBlock: SuperBlocks,
|
||||||
block: string
|
block: string
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import {
|
|||||||
} from '../../shared/config/curriculum';
|
} from '../../shared/config/curriculum';
|
||||||
import { createQuizFile, validateBlockName } from './utils';
|
import { createQuizFile, validateBlockName } from './utils';
|
||||||
import { getBaseMeta } from './helpers/get-base-meta';
|
import { getBaseMeta } from './helpers/get-base-meta';
|
||||||
|
import { createIntroMD } from './helpers/create-intro';
|
||||||
|
|
||||||
const helpCategories = [
|
const helpCategories = [
|
||||||
'HTML-CSS',
|
'HTML-CSS',
|
||||||
@@ -48,7 +49,7 @@ async function createQuiz(
|
|||||||
if (!title) {
|
if (!title) {
|
||||||
title = block;
|
title = block;
|
||||||
}
|
}
|
||||||
void updateIntroJson(superBlock, block, title);
|
await updateIntroJson(superBlock, block, title);
|
||||||
|
|
||||||
const challengeId = await createQuizChallenge(
|
const challengeId = await createQuizChallenge(
|
||||||
superBlock,
|
superBlock,
|
||||||
@@ -56,9 +57,9 @@ async function createQuiz(
|
|||||||
title,
|
title,
|
||||||
questionCount
|
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.
|
// TODO: remove once we stop relying on markdown in the client.
|
||||||
void createIntroMD(superBlock, block, title);
|
await createIntroMD(superBlock, block, title);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updateIntroJson(
|
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(
|
async function createQuizChallenge(
|
||||||
superBlock: SuperBlocks,
|
superBlock: SuperBlocks,
|
||||||
block: string,
|
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