refactor: share common intro creation code (#61814)

This commit is contained in:
Oliver Eyton-Williams
2025-08-15 08:05:54 +02:00
committed by GitHub
parent 91f87ea237
commit 0ae01847cb
4 changed files with 45 additions and 72 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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,

View 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'
});
}