feat(client/curriculum): release new superblocks, certs coming soon (#63574)

Co-authored-by: ahmad abdolsaheb <ahmad.abdolsaheb@gmail.com>
This commit is contained in:
Tom
2025-11-12 12:50:49 -06:00
committed by GitHub
parent 4352a5b628
commit 8ec4053a05
25 changed files with 520 additions and 101 deletions
@@ -40,6 +40,13 @@ interface Block<T> {
const ver = 'v1';
export const orderedSuperBlockInfo = [
{ dashedName: SuperBlocks.RespWebDesignV9, public: false },
{ dashedName: SuperBlocks.JsV9, public: false },
{ dashedName: SuperBlocks.FrontEndDevLibsV9, public: false },
{ dashedName: SuperBlocks.PythonV9, public: false },
{ dashedName: SuperBlocks.RelationalDbV9, public: false },
{ dashedName: SuperBlocks.BackEndDevApisV9, public: false },
{ dashedName: SuperBlocks.FullStackDeveloperV9, public: false },
{ dashedName: SuperBlocks.RespWebDesignNew, public: true },
{ dashedName: SuperBlocks.DataAnalysisPy, public: true },
{ dashedName: SuperBlocks.MachineLearningPy, public: true },
@@ -49,7 +56,6 @@ export const orderedSuperBlockInfo = [
{ dashedName: SuperBlocks.TheOdinProject, public: true },
{ dashedName: SuperBlocks.RespWebDesign, public: true },
{ dashedName: SuperBlocks.PythonForEverybody, public: true },
{ dashedName: SuperBlocks.FullStackDeveloper, public: false },
{ dashedName: SuperBlocks.JsAlgoDataStructNew, public: false },
{ dashedName: SuperBlocks.FrontEndDevLibs, public: false },
{ dashedName: SuperBlocks.DataVis, public: false },
@@ -3,7 +3,10 @@ import { resolve, dirname } from 'path';
import { omit } from 'lodash';
import { submitTypes } from '../../../shared-dist/config/challenge-types';
import { type ChallengeNode } from '../../../client/src/redux/prop-types';
import { SuperBlocks } from '../../../shared-dist/config/curriculum';
import {
SuperBlocks,
chapterBasedSuperBlocks
} from '../../../shared-dist/config/curriculum';
import type { Chapter } from '../../../shared-dist/config/chapters';
import { getSuperblockStructure } from '../../../curriculum/src/file-handler';
import { patchBlock } from './patches';
@@ -114,9 +117,39 @@ const intros = JSON.parse(
export const orderedSuperBlockInfo: OrderedSuperBlocks = {
[SuperBlockStage.Core]: [
{
dashedName: SuperBlocks.FullStackDeveloper,
dashedName: SuperBlocks.RespWebDesignV9,
public: false,
title: intros[SuperBlocks.FullStackDeveloper].title
title: intros[SuperBlocks.RespWebDesignV9].title
},
{
dashedName: SuperBlocks.JsV9,
public: false,
title: intros[SuperBlocks.JsV9].title
},
{
dashedName: SuperBlocks.FrontEndDevLibsV9,
public: false,
title: intros[SuperBlocks.FrontEndDevLibsV9].title
},
{
dashedName: SuperBlocks.PythonV9,
public: false,
title: intros[SuperBlocks.PythonV9].title
},
{
dashedName: SuperBlocks.RelationalDbV9,
public: false,
title: intros[SuperBlocks.RelationalDbV9].title
},
{
dashedName: SuperBlocks.BackEndDevApisV9,
public: false,
title: intros[SuperBlocks.BackEndDevApisV9].title
},
{
dashedName: SuperBlocks.FullStackDeveloperV9,
public: false,
title: intros[SuperBlocks.FullStackDeveloperV9].title
}
],
@@ -273,7 +306,7 @@ export function buildExtCurriculumDataV2(
});
for (const superBlockKey of superBlockKeys) {
if (superBlockKey === SuperBlocks.FullStackDeveloper) {
if (chapterBasedSuperBlocks.includes(superBlockKey)) {
buildChapterBasedCurriculum(superBlockKey);
} else {
buildBlockBasedCurriculum(superBlockKey);
@@ -284,7 +317,7 @@ export function buildExtCurriculumDataV2(
}
function buildChapterBasedCurriculum(superBlockKey: SuperBlocks) {
const { chapters } = getSuperblockStructure('full-stack-developer') as {
const { chapters } = getSuperblockStructure(superBlockKey) as {
chapters: Chapter[];
};
const blocksWithData = curriculum[superBlockKey].blocks;
@@ -91,7 +91,11 @@ const chapterBasedCurriculumSchema = Joi.object().pattern(
modules: Joi.array()
.items(
Joi.object().keys({
moduleType: Joi.valid('review', 'exam').optional(),
moduleType: Joi.valid(
'review',
'exam',
'cert-project'
).optional(),
name: Joi.string().required(),
comingSoon: Joi.boolean().optional(),
dashedName: Joi.string().regex(slugRE).required(),