feat: make new javascript live (#52623)

Co-authored-by: scissorsneedfoodtoo <scissorsneedfoodtoo@gmail.com>
This commit is contained in:
Naomi Carrigan
2023-12-19 22:39:33 -08:00
committed by GitHub
parent 897770863a
commit 2d513aee33
79 changed files with 228 additions and 159 deletions

View File

@@ -230,6 +230,11 @@
"description": "Camper is foundational C# certified",
"default": false
},
"isJsAlgoDataStructCertV8": {
"type": "boolean",
"description": "Camper is javascript algorithms and data structures certified (2023)",
"default": false
},
"completedChallenges": {
"type": [
{

View File

@@ -43,7 +43,8 @@ const {
machineLearningPyV7Id,
relationalDatabaseV8Id,
collegeAlgebraPyV8Id,
foundationalCSharpV8Id
foundationalCSharpV8Id,
jsAlgoDataStructV8Id
} = certIds;
const log = debug('fcc:certification');
@@ -105,6 +106,10 @@ function createCertTypeIds(allChallenges) {
return {
// legacy
[certTypes.frontEnd]: getCertById(legacyFrontEndChallengeId, allChallenges),
[certTypes.jsAlgoDataStruct]: getCertById(
jsAlgoDataStructId,
allChallenges
),
[certTypes.backEnd]: getCertById(legacyBackEndChallengeId, allChallenges),
[certTypes.dataVis]: getCertById(legacyDataVisId, allChallenges),
[certTypes.infosecQa]: getCertById(legacyInfosecQaId, allChallenges),
@@ -112,12 +117,12 @@ function createCertTypeIds(allChallenges) {
// modern
[certTypes.respWebDesign]: getCertById(respWebDesignId, allChallenges),
[certTypes.frontEndDevLibs]: getCertById(frontEndDevLibsId, allChallenges),
[certTypes.dataVis2018]: getCertById(dataVis2018Id, allChallenges),
[certTypes.jsAlgoDataStruct]: getCertById(
jsAlgoDataStructId,
[certTypes.jsAlgoDataStructV8]: getCertById(
jsAlgoDataStructV8Id,
allChallenges
),
[certTypes.frontEndDevLibs]: getCertById(frontEndDevLibsId, allChallenges),
[certTypes.dataVis2018]: getCertById(dataVis2018Id, allChallenges),
[certTypes.apisMicroservices]: getCertById(
apisMicroservicesId,
allChallenges
@@ -171,8 +176,8 @@ function sendCertifiedEmail(
name,
username,
isRespWebDesignCert,
isJsAlgoDataStructCertV8,
isFrontEndLibsCert,
isJsAlgoDataStructCert,
isDataVisCert,
isApisMicroservicesCert,
isQaCertV7,
@@ -189,8 +194,8 @@ function sendCertifiedEmail(
if (
!isEmail(email) ||
!isRespWebDesignCert ||
!isJsAlgoDataStructCertV8 ||
!isFrontEndLibsCert ||
!isJsAlgoDataStructCert ||
!isDataVisCert ||
!isApisMicroservicesCert ||
!isQaCertV7 ||
@@ -224,6 +229,7 @@ function getUserIsCertMap(user) {
const {
isRespWebDesignCert = false,
isJsAlgoDataStructCert = false,
isJsAlgoDataStructCertV8 = false,
isFrontEndLibsCert = false,
is2018DataVisCert = false,
isApisMicroservicesCert = false,
@@ -245,6 +251,7 @@ function getUserIsCertMap(user) {
return {
isRespWebDesignCert,
isJsAlgoDataStructCert,
isJsAlgoDataStructCertV8,
isFrontEndLibsCert,
is2018DataVisCert,
isApisMicroservicesCert,
@@ -395,6 +402,7 @@ function createShowCert(app) {
isRespWebDesignCert: true,
isFrontEndLibsCert: true,
isJsAlgoDataStructCert: true,
isJsAlgoDataStructCertV8: true,
isDataVisCert: true,
is2018DataVisCert: true,
isApisMicroservicesCert: true,

View File

@@ -452,6 +452,7 @@ function postResetProgress(req, res, next) {
isRelationalDatabaseCertV8: false,
isCollegeAlgebraPyCertV8: false,
isFoundationalCSharpCertV8: false,
isJsAlgoDataStructCertV8: false,
completedChallenges: [],
completedExams: [],
savedChallenges: [],

View File

@@ -16,5 +16,6 @@
"fullStack": "isFullStackCert",
"relationalDatabaseV8": "isRelationalDatabaseV8",
"collegeAlgebraPyV8": "isCollegeAlgebraPyCertV8",
"foundationalCSharpV8": "isFoundationalCSharpCertV8"
"foundationalCSharpV8": "isFoundationalCSharpCertV8",
"isJsAlgoDataStructCertV8": "isJsAlgoDataStructCertV8"
}

View File

@@ -28,6 +28,7 @@ export const publicUserProps = [
'isMachineLearningPyCertV7',
'isCollegeAlgebraPyCertV8',
'isFoundationalCSharpCertV8',
'isJsAlgoDataStructCertV8',
'linkedin',
'location',
'name',

View File

@@ -14,7 +14,7 @@ const responsiveWeb22Base = '/learn/2022/responsive-web-design';
const jsAlgoBase =
'/learn/javascript-algorithms-and-data-structures/' +
'javascript-algorithms-and-data-structures-projects';
const jsAlgo22Base = '/learn/2022/javascript-algorithms-and-data-structures';
const jsAlgo22Base = '/learn/javascript-algorithms-and-data-structures-v8';
const feLibsBase =
'/learn/front-end-development-libraries/front-end-development-libraries-projects';
const dataVisBase = '/learn/data-visualization/data-visualization-projects';
@@ -99,39 +99,39 @@ const allStandardCerts = [
]
},
{
id: '561abd10cb81ac38a17513bc',
title: 'JavaScript Algorithms and Data Structures',
certSlug: Certification.JsAlgoDataStruct,
id: '658180220947283cdc0689ce',
title: 'JavaScript Algorithms and Data Structures (Beta)',
certSlug: Certification.JsAlgoDataStructNew,
projects: [
{
id: 'aaa48de84e1ecc7c742e1124',
title: 'Palindrome Checker',
link: getJavaScriptAlgoPath('palindrome-checker'),
certSlug: Certification.JsAlgoDataStruct
id: '657bdc55a322aae1eac3838f',
title: 'Build a Palindrome Checker',
link: getJavaScriptAlgoPath('build-a-palindrome-checker'),
certSlug: Certification.JsAlgoDataStructNew
},
{
id: 'a7f4d8f2483413a6ce226cac',
title: 'Roman Numeral Converter',
link: getJavaScriptAlgoPath('roman-numeral-converter'),
certSlug: Certification.JsAlgoDataStruct
id: '657bdc8ba322aae1eac38390',
title: 'Build a Roman Numeral Converter',
link: getJavaScriptAlgoPath('build-a-roman-numeral-converter'),
certSlug: Certification.JsAlgoDataStructNew
},
{
id: '56533eb9ac21ba0edf2244e2',
title: 'Caesars Cipher',
link: getJavaScriptAlgoPath('caesars-cipher'),
certSlug: Certification.JsAlgoDataStruct
id: '657bdcb9a322aae1eac38391',
title: 'Build a Telephone Number Validator',
link: getJavaScriptAlgoPath('build-a-telephone-number-validator'),
certSlug: Certification.JsAlgoDataStructNew
},
{
id: 'aff0395860f5d3034dc0bfc9',
title: 'Telephone Number Validator',
link: getJavaScriptAlgoPath('telephone-number-validator'),
certSlug: Certification.JsAlgoDataStruct
id: '657bdcc3a322aae1eac38392',
title: 'Build a Cash Register',
link: getJavaScriptAlgoPath('build-a-cash-register'),
certSlug: Certification.JsAlgoDataStructNew
},
{
id: 'aa2e6f85cab2ab736c9a9b24',
title: 'Cash Register',
link: getJavaScriptAlgoPath('cash-register'),
certSlug: Certification.JsAlgoDataStruct
id: '6555c1d3e11a1574434cf8b5',
title: 'Build a Pokémon Search App',
link: getJavaScriptAlgoPath('build-a-pokemon-search-app'),
certSlug: Certification.JsAlgoDataStructNew
}
]
},
@@ -574,6 +574,43 @@ const allStandardCerts = [
}
]
},
{
id: '561abd10cb81ac38a17513bc',
title: 'JavaScript Algorithms and Data Structures',
certSlug: Certification.JsAlgoDataStruct,
projects: [
{
id: 'aaa48de84e1ecc7c742e1124',
title: 'Palindrome Checker',
link: `${jsAlgoBase}/palindrome-checker`,
certSlug: Certification.JsAlgoDataStruct
},
{
id: 'a7f4d8f2483413a6ce226cac',
title: 'Roman Numeral Converter',
link: `${jsAlgoBase}/roman-numeral-converter`,
certSlug: Certification.JsAlgoDataStruct
},
{
id: '56533eb9ac21ba0edf2244e2',
title: 'Caesars Cipher',
link: `${jsAlgoBase}/caesars-cipher`,
certSlug: Certification.JsAlgoDataStruct
},
{
id: 'aff0395860f5d3034dc0bfc9',
title: 'Telephone Number Validator',
link: `${jsAlgoBase}/telephone-number-validator`,
certSlug: Certification.JsAlgoDataStruct
},
{
id: 'aa2e6f85cab2ab736c9a9b24',
title: 'Cash Register',
link: `${jsAlgoBase}/cash-register`,
certSlug: Certification.JsAlgoDataStruct
}
]
},
{
id: '660add10cb82ac38a17513be',
title: 'Legacy Back End',
@@ -812,9 +849,7 @@ function getCollegeAlgebraPyPath(project: string) {
}
function getJavaScriptAlgoPath(project: string) {
return showUpcomingChanges
? `${jsAlgo22Base}/${project}-project/${project}`
: `${jsAlgoBase}/${project}`;
return `${jsAlgo22Base}/${project}-project/${project}`;
}
type FilteredCert<T, U> = T extends { certSlug: U } ? T : never;

View File

@@ -299,7 +299,7 @@
}
}
},
"2022/javascript-algorithms-and-data-structures": {
"javascript-algorithms-and-data-structures-v8": {
"title": "مشروعات Javascript لخوارزميات ولهياكل البيانات (قيد الأنشاء)",
"intro": [
"Developers use HTML and CSS to control the content and styling of a page. And they use JavaScript to make that page interactive.",

View File

@@ -299,7 +299,7 @@
}
}
},
"2022/javascript-algorithms-and-data-structures": {
"javascript-algorithms-and-data-structures-v8": {
"title": "JavaScript 算法和數據結構項目Beta 測試版本)",
"intro": [
"Developers use HTML and CSS to control the content and styling of a page. And they use JavaScript to make that page interactive.",

View File

@@ -299,7 +299,7 @@
}
}
},
"2022/javascript-algorithms-and-data-structures": {
"javascript-algorithms-and-data-structures-v8": {
"title": "JavaScript 算法和数据结构项目Beta 测试版本)",
"intro": [
"Developers use HTML and CSS to control the content and styling of a page. And they use JavaScript to make that page interactive.",

View File

@@ -299,7 +299,7 @@
}
}
},
"2022/javascript-algorithms-and-data-structures": {
"javascript-algorithms-and-data-structures-v8": {
"title": "JavaScript Algorithms and Data Structures (Beta)",
"intro": [
"Developers use HTML and CSS to control the content and styling of a page. And they use JavaScript to make that page interactive.",

View File

@@ -126,6 +126,7 @@
"interview-prep-heading": "Prepare for the developer interview job search:",
"legacy-curriculum-heading": "Explore our Legacy Curriculum:",
"upcoming-heading": "Upcoming curriculum:",
"legacy-curriculum-heading": "Explore our Legacy Curriculum:",
"faq": "Frequently asked questions:",
"faqs": [
{

View File

@@ -299,7 +299,7 @@
}
}
},
"2022/javascript-algorithms-and-data-structures": {
"javascript-algorithms-and-data-structures-v8": {
"title": "Algoritmos de JavaScript y estructuras de datos (beta)",
"intro": [
"Developers use HTML and CSS to control the content and styling of a page. And they use JavaScript to make that page interactive.",

View File

@@ -299,7 +299,7 @@
}
}
},
"2022/javascript-algorithms-and-data-structures": {
"javascript-algorithms-and-data-structures-v8": {
"title": "JavaScript-Algorithmen und Datenstrukturen (Beta)",
"intro": [
"Developers use HTML and CSS to control the content and styling of a page. And they use JavaScript to make that page interactive.",

View File

@@ -299,7 +299,7 @@
}
}
},
"2022/javascript-algorithms-and-data-structures": {
"javascript-algorithms-and-data-structures-v8": {
"title": "Algoritmi e Strutture Dati JavaScript (Beta)",
"intro": [
"Developers use HTML and CSS to control the content and styling of a page. And they use JavaScript to make that page interactive.",

View File

@@ -299,7 +299,7 @@
}
}
},
"2022/javascript-algorithms-and-data-structures": {
"javascript-algorithms-and-data-structures-v8": {
"title": "JavaScript アルゴリズムとデータ構造 (ベータ版)",
"intro": [
"Developers use HTML and CSS to control the content and styling of a page. And they use JavaScript to make that page interactive.",

View File

@@ -299,7 +299,7 @@
}
}
},
"2022/javascript-algorithms-and-data-structures": {
"javascript-algorithms-and-data-structures-v8": {
"title": "Algoritmos e estruturas de dados em JavaScript (Beta)",
"intro": [
"Developers use HTML and CSS to control the content and styling of a page. And they use JavaScript to make that page interactive.",

View File

@@ -299,7 +299,7 @@
}
}
},
"2022/javascript-algorithms-and-data-structures": {
"javascript-algorithms-and-data-structures-v8": {
"title": "JavaScript Algorithms and Data Structures (Beta)",
"intro": [
"Developers use HTML and CSS to control the content and styling of a page. And they use JavaScript to make that page interactive.",

View File

@@ -299,7 +299,7 @@
}
}
},
"2022/javascript-algorithms-and-data-structures": {
"javascript-algorithms-and-data-structures-v8": {
"title": "Алгоритми JavaScript та структури даних (бета-версія)",
"intro": [
"Developers use HTML and CSS to control the content and styling of a page. And they use JavaScript to make that page interactive.",

View File

@@ -119,6 +119,7 @@ export function ShowSettings(props: ShowSettingsProps): JSX.Element {
isRelationalDatabaseCertV8,
isCollegeAlgebraPyCertV8,
isFoundationalCSharpCertV8,
isJsAlgoDataStructCertV8,
isEmailVerified,
isHonest,
sendQuincyEmail,
@@ -227,6 +228,7 @@ export function ShowSettings(props: ShowSettingsProps): JSX.Element {
isRelationalDatabaseCertV8={isRelationalDatabaseCertV8}
isRespWebDesignCert={isRespWebDesignCert}
isSciCompPyCertV7={isSciCompPyCertV7}
isJsAlgoDataStructCertV8={isJsAlgoDataStructCertV8}
username={username}
verifyCert={verifyCert}
isEmailVerified={isEmailVerified}

View File

@@ -68,7 +68,8 @@ const isCertSelector = ({
isMachineLearningPyCertV7,
isRelationalDatabaseCertV8,
isCollegeAlgebraPyCertV8,
isFoundationalCSharpCertV8
isFoundationalCSharpCertV8,
isJsAlgoDataStructCertV8
}: ClaimedCertifications) => ({
is2018DataVisCert,
isApisMicroservicesCert,
@@ -87,7 +88,8 @@ const isCertSelector = ({
isMachineLearningPyCertV7,
isRelationalDatabaseCertV8,
isCollegeAlgebraPyCertV8,
isFoundationalCSharpCertV8
isFoundationalCSharpCertV8,
isJsAlgoDataStructCertV8
});
const isCertMapSelector = createSelector(
@@ -109,7 +111,8 @@ const isCertMapSelector = createSelector(
isMachineLearningPyCertV7,
isRelationalDatabaseCertV8,
isCollegeAlgebraPyCertV8,
isFoundationalCSharpCertV8
isFoundationalCSharpCertV8,
isJsAlgoDataStructCertV8
}) => ({
'Responsive Web Design': isRespWebDesignCert,
'JavaScript Algorithms and Data Structures': isJsAlgoDataStructCert,
@@ -132,7 +135,8 @@ const isCertMapSelector = createSelector(
// Certification.
'Example Certification': false,
'Upcoming Python Certification': false,
'A2 English for Developers': false
'A2 English for Developers': false,
'JavaScript Algorithms and Data Structures (Beta)': isJsAlgoDataStructCertV8
})
);

View File

@@ -1,6 +1,6 @@
---
title: JavaScript Algorithms and Data Structures
superBlock: 2022/javascript-algorithms-and-data-structures
superBlock: javascript-algorithms-and-data-structures-v8
certification: javascript-algorithms-and-data-structures
---

View File

@@ -1,7 +1,7 @@
---
title: Introduction to the Learn Basic String and Array Methods by Building a Music Player
block: learn-basic-string-and-array-methods-by-building-a-music-player
superBlock: 2022/javascript-algorithms-and-data-structures
superBlock: javascript-algorithms-and-data-structures-v8
isBeta: true
---

View File

@@ -1,7 +1,7 @@
---
title: Introduction to the Learn Intermediate Algorithmic Thinking by Building a Dice Game
block: learn-intermediate-algorithmic-thinking-by-building-a-dice-game
superBlock: 2022/javascript-algorithms-and-data-structures
superBlock: javascript-algorithms-and-data-structures-v8
isBeta: true
---

View File

@@ -1,7 +1,7 @@
---
title: Introduction to the Learn Intermediate OOP by Building a Platformer Game
block: learn-intermediate-oop-by-building-a-platformer-game
superBlock: 2022/javascript-algorithms-and-data-structures
superBlock: javascript-algorithms-and-data-structures-v8
isBeta: true
---

View File

@@ -1,7 +1,7 @@
---
title: Introduction to the Learn localStorage by Building a Todo App
block: learn-localstorage-by-building-a-todo-app
superBlock: 2022/javascript-algorithms-and-data-structures
superBlock: javascript-algorithms-and-data-structures-v8
isBeta: true
---

View File

@@ -1,7 +1,7 @@
---
title: Introduction to the Learn the Date Object by Building a Date Formatter
block: learn-the-date-object-by-building-a-date-formatter
superBlock: 2022/javascript-algorithms-and-data-structures
superBlock: javascript-algorithms-and-data-structures-v8
isBeta: true
---

View File

@@ -346,6 +346,7 @@ export type ClaimedCertifications = {
isSciCompPyCertV7: boolean;
isDataAnalysisPyCertV7: boolean;
isMachineLearningPyCertV7: boolean;
isJsAlgoDataStructCertV8: boolean;
};
type SavedChallenges = SavedChallenge[];

View File

@@ -129,7 +129,8 @@ export const certificatesByNameSelector = username => state => {
isMachineLearningPyCertV7,
isRelationalDatabaseCertV8,
isCollegeAlgebraPyCertV8,
isFoundationalCSharpCertV8
isFoundationalCSharpCertV8,
isJsAlgoDataStructCertV8
} = userByNameSelector(username)(state);
return {
hasModernCert:
@@ -146,7 +147,8 @@ export const certificatesByNameSelector = username => state => {
isMachineLearningPyCertV7 ||
isRelationalDatabaseCertV8 ||
isCollegeAlgebraPyCertV8 ||
isFoundationalCSharpCertV8,
isFoundationalCSharpCertV8 ||
isJsAlgoDataStructCertV8,
hasLegacyCert:
isFrontEndCert || isBackEndCert || isDataVisCert || isInfosecQaCert,
isFullStackCert,
@@ -215,6 +217,11 @@ export const certificatesByNameSelector = username => state => {
show: isFoundationalCSharpCertV8,
title: 'Foundational C# with Microsoft Certification',
certSlug: Certification.FoundationalCSharp
},
{
show: isJsAlgoDataStructCertV8,
title: 'JavaScript Algorithms and Data Structures (Beta) Certification',
certSlug: Certification.JsAlgoDataStructNew
}
],
legacyCerts: [

View File

@@ -1,18 +0,0 @@
{
"name": "Build a Caesars Cipher Project",
"isUpcomingChange": true,
"dashedName": "build-a-caesars-cipher-project",
"usesMultifileEditor": false,
"helpCategory": "JavaScript",
"order": 17,
"time": "30 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"challengeOrder": [
{
"id": "56533eb9ac21ba0edf2244e2",
"title": "Build a Caesars Cipher"
}
]
}

View File

@@ -1,14 +1,14 @@
{
"name": "Build a Cash Register Project",
"isUpcomingChange": true,
"isUpcomingChange": false,
"dashedName": "build-a-cash-register-project",
"usesMultifileEditor": false,
"usesMultifileEditor": true,
"helpCategory": "JavaScript",
"order": 17,
"time": "30 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"challengeOrder": [
{
"id": "657bdcc3a322aae1eac38392",

View File

@@ -1,14 +1,14 @@
{
"name": "Build a Palindrome Checker Project",
"isUpcomingChange": true,
"isUpcomingChange": false,
"dashedName": "build-a-palindrome-checker-project",
"usesMultifileEditor": false,
"usesMultifileEditor": true,
"helpCategory": "JavaScript",
"order": 4,
"time": "30 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"challengeOrder": [
{
"id": "657bdc55a322aae1eac3838f",

View File

@@ -1,6 +1,6 @@
{
"name": "Build a Pokémon Search App Project",
"isUpcomingChange": true,
"isUpcomingChange": false,
"dashedName": "build-a-pokemon-search-app-project",
"usesMultifileEditor": true,
"helpCategory": "JavaScript",
@@ -8,7 +8,7 @@
"time": "30 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"challengeOrder": [
{
"id": "6555c1d3e11a1574434cf8b5",

View File

@@ -1,14 +1,14 @@
{
"name": "Build a Roman Numeral Converter Project",
"isUpcomingChange": true,
"isUpcomingChange": false,
"dashedName": "build-a-roman-numeral-converter-project",
"usesMultifileEditor": false,
"usesMultifileEditor": true,
"helpCategory": "JavaScript",
"order": 8,
"time": "30 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"challengeOrder": [
{
"id": "657bdc8ba322aae1eac38390",

View File

@@ -1,14 +1,14 @@
{
"name": "Build a Telephone Number Validator Project",
"isUpcomingChange": true,
"isUpcomingChange": false,
"dashedName": "build-a-telephone-number-validator-project",
"usesMultifileEditor": false,
"usesMultifileEditor": true,
"helpCategory": "JavaScript",
"order": 13,
"time": "30 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"challengeOrder": [
{
"id": "657bdcb9a322aae1eac38391",

View File

@@ -1,6 +1,6 @@
{
"name": "Learn Advanced Array Methods by Building a Statistics Calculator",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-advanced-array-methods-by-building-a-statistics-calculator",
@@ -9,7 +9,7 @@
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"superOrder": 4,
"isBeta": true,
"challengeOrder": [

View File

@@ -1,6 +1,6 @@
{
"name": "Learn Asynchronous Programming by Building an fCC Forum Leaderboard",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-asynchronous-programming-by-building-an-fcc-forum-leaderboard",
@@ -9,7 +9,7 @@
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"challengeOrder": [
{
"id": "657386f11fb8265660bfac75",

View File

@@ -1,6 +1,6 @@
{
"name": "Learn Basic Algorithmic Thinking by Building a Number Sorter",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-basic-algorithmic-thinking-by-building-a-number-sorter",
@@ -9,7 +9,7 @@
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"superOrder": 4,
"isBeta": true,
"challengeOrder": [

View File

@@ -1,6 +1,6 @@
{
"name": "Learn Basic JavaScript By Building a Role Playing Game",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-basic-javascript-by-building-a-role-playing-game",
@@ -9,7 +9,7 @@
"time": "2 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"isBeta": true,
"challengeOrder": [
{

View File

@@ -1,6 +1,6 @@
{
"name": "Learn Basic OOP by Building a Shopping Cart",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-basic-oop-by-building-a-shopping-cart",
@@ -9,7 +9,7 @@
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"superOrder": 4,
"isBeta": true,
"challengeOrder": [

View File

@@ -1,6 +1,6 @@
{
"name": "Learn Basic String and Array Methods by Building a Music Player",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-basic-string-and-array-methods-by-building-a-music-player",
@@ -8,7 +8,7 @@
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"superOrder": 4,
"isBeta": true,
"challengeOrder": [

View File

@@ -1,6 +1,6 @@
{
"name": "Learn Fetch and Promises By Building an fCC Authors Page",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-fetch-and-promises-by-building-an-fcc-authors-page",
@@ -9,7 +9,7 @@
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"superOrder": 4,
"isBeta": true,
"challengeOrder": [

View File

@@ -1,6 +1,6 @@
{
"name": "Learn Form Validation By Building a Calorie Counter",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-form-validation-by-building-a-calorie-counter",
@@ -9,7 +9,7 @@
"time": "2 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"challengeOrder": [
{
"id": "5ddb965c65d27e1512d44d9a",

View File

@@ -1,6 +1,6 @@
{
"name": "Learn Functional Programming by Building a Spreadsheet",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-functional-programming-by-building-a-spreadsheet",
@@ -9,7 +9,7 @@
"time": "2 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"superOrder": 4,
"isBeta": true,
"challengeOrder": [

View File

@@ -1,6 +1,6 @@
{
"name": "Learn Intermediate Algorithmic Thinking by Building a Dice Game",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-intermediate-algorithmic-thinking-by-building-a-dice-game",
@@ -8,7 +8,7 @@
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"superOrder": 4,
"isBeta": true,
"challengeOrder": [

View File

@@ -1,6 +1,6 @@
{
"name": "learn-intermediate-oop-by-building-a-platformer-game",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-intermediate-oop-by-building-a-platformer-game",
@@ -9,7 +9,7 @@
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"disableLoopProtectTests": true,
"disableLoopProtectPreview": true,
"superOrder": 4,

View File

@@ -1,6 +1,6 @@
{
"name": "Learn localStorage by Building a Todo App",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-localstorage-by-building-a-todo-app",
@@ -8,7 +8,7 @@
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"superOrder": 4,
"isBeta": true,
"challengeOrder": [

View File

@@ -1,6 +1,6 @@
{
"name": "Learn Modern JavaScript Methods By Building Football Team Cards",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-modern-javascript-methods-by-building-football-team-cards",
@@ -9,7 +9,7 @@
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"superOrder": 4,
"isBeta": true,
"challengeOrder": [

View File

@@ -1,6 +1,6 @@
{
"name": "Learn Recursion by Building a Decimal to Binary Converter",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-recursion-by-building-a-decimal-to-binary-converter",
@@ -10,7 +10,7 @@
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"isBeta": true,
"challengeOrder": [
{

View File

@@ -1,6 +1,6 @@
{
"name": "Learn Regular Expressions by Building a Spam Filter",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-regular-expressions-by-building-a-spam-filter",
@@ -9,7 +9,7 @@
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"superOrder": 4,
"isBeta": true,
"challengeOrder": [

View File

@@ -1,6 +1,6 @@
{
"name": "Learn the Date Object by Building a Date Formatter",
"isUpcomingChange": true,
"isUpcomingChange": false,
"usesMultifileEditor": true,
"hasEditableBoundaries": true,
"dashedName": "learn-the-date-object-by-building-a-date-formatter",
@@ -8,7 +8,7 @@
"time": "5 hours",
"template": "",
"required": [],
"superBlock": "2022/javascript-algorithms-and-data-structures",
"superBlock": "javascript-algorithms-and-data-structures-v8",
"superOrder": 4,
"isBeta": true,
"challengeOrder": [

View File

@@ -0,0 +1,16 @@
id: 658180220947283cdc0689ce
title: JavaScript Algorithms and Data Structures (Beta) Certification
certification: javascript-algorithms-and-data-structures-v8
challengeType: 7
isPrivate: true
tests:
- id: 657bdc55a322aae1eac3838f
title: Build a Palindrome Checker
- id: 657bdc8ba322aae1eac38390
title: Build a Roman Numeral Converter
- id: 657bdcb9a322aae1eac38391
title: Build a Telephone Number Validator
- id: 657bdcc3a322aae1eac38392
title: Build a Cash Register
- id: 6555c1d3e11a1574434cf8b5
title: Build a Pokémon Search App

View File

@@ -1,6 +1,6 @@
---
id: 657bdcc3a322aae1eac38392
title: Build A Cash Register
title: Build a Cash Register
challengeType: 14
forumTopicId: 16012
dashedName: build-a-cash-register

View File

@@ -1,6 +1,6 @@
---
id: 657bdc55a322aae1eac3838f
title: Build A Palindrome Checker
title: Build a Palindrome Checker
challengeType: 14
forumTopicId: 16004
dashedName: build-a-palindrome-checker

View File

@@ -1,6 +1,6 @@
---
id: 657bdc8ba322aae1eac38390
title: Build A Roman Numeral Converter
title: Build a Roman Numeral Converter
challengeType: 14
forumTopicId: 16044
dashedName: build-a-roman-numeral-converter

View File

@@ -298,10 +298,6 @@ ${getFullPath('english', filePath)}
{
certification: 'responsive-web-design',
dupe: '2022/responsive-web-design'
},
{
certification: 'javascript-algorithms-and-data-structures',
dupe: '2022/javascript-algorithms-and-data-structures'
}
];
const hasDupe = dupeCertifications.find(

View File

@@ -90,7 +90,7 @@ const schema = Joi.object()
blockId: Joi.objectId(),
challengeOrder: Joi.number(),
removeComments: Joi.bool().required(),
certification: Joi.string().regex(slugRE),
certification: Joi.string().regex(slugWithSlashRE),
challengeType: Joi.number().min(0).max(22).required(),
checksum: Joi.number(),
// TODO: require this only for normal challenges, not certs

View File

@@ -87,7 +87,7 @@ const schema = Joi.object()
blockId: Joi.objectId(),
challengeOrder: Joi.number(),
removeComments: Joi.bool().required(),
certification: Joi.string().regex(slugRE),
certification: Joi.string().regex(slugWithSlashRE),
challengeType: Joi.number().min(0).max(22).required(),
checksum: Joi.number(),
// TODO: require this only for normal challenges, not certs

View File

@@ -284,7 +284,6 @@ function populateTestsForLang({ lang, challenges, meta }) {
// * tricky and needs cleaning up before deploying).
// */
// const superBlocksUnderDevelopment = [
// '2022/javascript-algorithms-and-data-structures'
// ];
// const superBlocks = new Set([
// ...Object.values(meta)

View File

@@ -75,7 +75,7 @@ const directoryToSuperblock = {
'13-relational-databases': 'relational-database',
'14-responsive-web-design-22': '2022/responsive-web-design',
'15-javascript-algorithms-and-data-structures-22':
'2022/javascript-algorithms-and-data-structures',
'javascript-algorithms-and-data-structures-v8',
'16-the-odin-project': 'the-odin-project',
'17-college-algebra-with-python': 'college-algebra-with-python',
'18-project-euler': 'project-euler',

View File

@@ -11,7 +11,7 @@ config({ path: path.resolve(__dirname, '../.env') });
const mockSuperBlocks = [
SuperBlocks.RespWebDesignNew,
SuperBlocks.JsAlgoDataStruct,
SuperBlocks.JsAlgoDataStructNew,
SuperBlocks.FrontEndDevLibs,
SuperBlocks.DataVis,
SuperBlocks.RelationalDb,
@@ -26,14 +26,14 @@ const mockSuperBlocks = [
SuperBlocks.CodingInterviewPrep,
SuperBlocks.ProjectEuler,
SuperBlocks.RespWebDesign,
SuperBlocks.JsAlgoDataStructNew,
SuperBlocks.JsAlgoDataStruct,
SuperBlocks.TheOdinProject,
SuperBlocks.ExampleCertification
];
const fullSuperOrder = {
[SuperBlocks.RespWebDesignNew]: 0,
[SuperBlocks.JsAlgoDataStruct]: 1,
[SuperBlocks.JsAlgoDataStructNew]: 1,
[SuperBlocks.FrontEndDevLibs]: 2,
[SuperBlocks.DataVis]: 3,
[SuperBlocks.RelationalDb]: 4,
@@ -48,7 +48,7 @@ const fullSuperOrder = {
[SuperBlocks.CodingInterviewPrep]: 13,
[SuperBlocks.ProjectEuler]: 14,
[SuperBlocks.RespWebDesign]: 15,
[SuperBlocks.JsAlgoDataStructNew]: 16,
[SuperBlocks.JsAlgoDataStruct]: 16,
[SuperBlocks.TheOdinProject]: 17,
[SuperBlocks.ExampleCertification]: 18
};
@@ -93,17 +93,17 @@ describe('getSuperOrder', () => {
process.env.SHOW_NEW_CURRICULUM !== 'true' &&
process.env.SHOW_UPCOMING_CHANGES !== 'true'
) {
expect.assertions(16);
expect.assertions(17);
} else if (process.env.SHOW_NEW_CURRICULUM !== 'true') {
expect.assertions(16);
expect.assertions(17);
} else if (process.env.SHOW_UPCOMING_CHANGES !== 'true') {
expect.assertions(16);
expect.assertions(17);
} else {
expect.assertions(19);
}
expect(getSuperOrder(SuperBlocks.RespWebDesignNew)).toBe(0);
expect(getSuperOrder(SuperBlocks.JsAlgoDataStruct)).toBe(1);
expect(getSuperOrder(SuperBlocks.JsAlgoDataStructNew)).toBe(1);
expect(getSuperOrder(SuperBlocks.FrontEndDevLibs)).toBe(2);
expect(getSuperOrder(SuperBlocks.DataVis)).toBe(3);
expect(getSuperOrder(SuperBlocks.RelationalDb)).toBe(4);
@@ -118,18 +118,17 @@ describe('getSuperOrder', () => {
expect(getSuperOrder(SuperBlocks.CodingInterviewPrep)).toBe(13);
expect(getSuperOrder(SuperBlocks.ProjectEuler)).toBe(14);
expect(getSuperOrder(SuperBlocks.RespWebDesign)).toBe(15);
expect(getSuperOrder(SuperBlocks.JsAlgoDataStruct)).toBe(16);
if (
process.env.SHOW_NEW_CURRICULUM === 'true' &&
process.env.SHOW_UPCOMING_CHANGES === 'true'
) {
expect(getSuperOrder(SuperBlocks.JsAlgoDataStructNew)).toBe(16);
expect(getSuperOrder(SuperBlocks.TheOdinProject)).toBe(17);
expect(getSuperOrder(SuperBlocks.ExampleCertification)).toBe(18);
} else if (process.env.SHOW_NEW_CURRICULUM === 'true') {
return;
} else if (process.env.SHOW_UPCOMING_CHANGES === 'true') {
expect(getSuperOrder(SuperBlocks.JsAlgoDataStructNew)).toBe(16);
expect(getSuperOrder(SuperBlocks.TheOdinProject)).toBe(17);
expect(getSuperOrder(SuperBlocks.ExampleCertification)).toBe(18);
}

View File

@@ -13,7 +13,7 @@ import { SuperBlocks } from '../../shared/config/superblocks';
*/
export enum Certification {
RespWebDesign = 'responsive-web-design',
JsAlgoDataStruct = 'javascript-algorithms-and-data-structures',
JsAlgoDataStructNew = 'javascript-algorithms-and-data-structures-v8',
FrontEndDevLibs = 'front-end-development-libraries',
DataVis = 'data-visualization',
RelationalDb = 'relational-database-v8',
@@ -30,6 +30,7 @@ export enum Certification {
A2English = 'a2-english-for-developers-v8',
// Legacy certifications
LegacyFrontEnd = 'legacy-front-end',
JsAlgoDataStruct = 'javascript-algorithms-and-data-structures',
LegacyBackEnd = 'legacy-back-end',
LegacyDataVis = 'legacy-data-visualization',
LegacyInfoSecQa = 'information-security-and-quality-assurance',
@@ -40,7 +41,7 @@ export enum Certification {
// live and not legacy.
export const currentCertifications = [
Certification.RespWebDesign,
Certification.JsAlgoDataStruct,
Certification.JsAlgoDataStructNew,
Certification.FrontEndDevLibs,
Certification.DataVis,
Certification.RelationalDb,
@@ -58,6 +59,7 @@ export const currentCertifications = [
// still live and claimable, but some parts of the UI handle them differently.
export const legacyCertifications = [
Certification.LegacyFrontEnd,
Certification.JsAlgoDataStruct,
Certification.LegacyBackEnd,
Certification.LegacyDataVis,
Certification.LegacyInfoSecQa
@@ -95,7 +97,8 @@ export const certTypes = {
relationalDatabaseV8: 'isRelationalDatabaseCertV8',
collegeAlgebraPyV8: 'isCollegeAlgebraPyCertV8',
foundationalCSharpV8: 'isFoundationalCSharpCertV8',
upcomingPythonV8: 'isUpcomingPythonCertV8'
upcomingPythonV8: 'isUpcomingPythonCertV8',
jsAlgoDataStructV8: 'isJsAlgoDataStructCertV8'
} as const;
export const certIds = {
@@ -117,7 +120,8 @@ export const certIds = {
relationalDatabaseV8Id: '606243f50267e718b1e755f4',
collegeAlgebraPyV8Id: '61531b20cc9dfa2741a5b800',
foundationalCSharpV8Id: '647f7da207d29547b3bee1ba',
upcomingPythonV8Id: '64afc4e8f3b37856e035b85f'
upcomingPythonV8Id: '64afc4e8f3b37856e035b85f',
jsAlgoDataStructV8Id: '658180220947283cdc0689ce'
};
export const completionHours = {
@@ -139,12 +143,14 @@ export const completionHours = {
[certTypes.relationalDatabaseV8]: 300,
[certTypes.collegeAlgebraPyV8]: 300,
[certTypes.foundationalCSharpV8]: 300,
[certTypes.upcomingPythonV8]: 300
[certTypes.upcomingPythonV8]: 300,
[certTypes.jsAlgoDataStructV8]: 300
};
export const certSlugTypeMap = {
// legacy
[Certification.LegacyFrontEnd]: certTypes.frontEnd,
[Certification.JsAlgoDataStruct]: certTypes.jsAlgoDataStruct,
[Certification.LegacyBackEnd]: certTypes.backEnd,
[Certification.LegacyDataVis]: certTypes.dataVis,
[Certification.LegacyInfoSecQa]: certTypes.infosecQa,
@@ -152,7 +158,7 @@ export const certSlugTypeMap = {
// modern
[Certification.RespWebDesign]: certTypes.respWebDesign,
[Certification.JsAlgoDataStruct]: certTypes.jsAlgoDataStruct,
[Certification.JsAlgoDataStructNew]: certTypes.jsAlgoDataStructV8,
[Certification.FrontEndDevLibs]: certTypes.frontEndDevLibs,
[Certification.DataVis]: certTypes.dataVis2018,
[Certification.BackEndDevApis]: certTypes.apisMicroservices,
@@ -172,6 +178,7 @@ export const certSlugTypeMap = {
export const superBlockCertTypeMap = {
// legacy
'legacy-front-end': certTypes.frontEnd,
[SuperBlocks.JsAlgoDataStruct]: certTypes.jsAlgoDataStruct,
'legacy-back-end': certTypes.backEnd,
'legacy-data-visualization': certTypes.dataVis,
'information-security-and-quality-assurance': certTypes.infosecQa,
@@ -179,7 +186,7 @@ export const superBlockCertTypeMap = {
// modern
[SuperBlocks.RespWebDesign]: certTypes.respWebDesign,
[SuperBlocks.JsAlgoDataStruct]: certTypes.jsAlgoDataStruct,
[SuperBlocks.JsAlgoDataStructNew]: certTypes.jsAlgoDataStructV8,
[SuperBlocks.FrontEndDevLibs]: certTypes.frontEndDevLibs,
[SuperBlocks.DataVis]: certTypes.dataVis2018,
[SuperBlocks.BackEndDevApis]: certTypes.apisMicroservices,
@@ -195,7 +202,6 @@ export const superBlockCertTypeMap = {
// post-modern
// TODO: use enum
[SuperBlocks.RespWebDesignNew]: certTypes.respWebDesign,
[SuperBlocks.JsAlgoDataStructNew]: certTypes.jsAlgoDataStruct,
// upcoming
[SuperBlocks.UpcomingPython]: certTypes.upcomingPythonV8
@@ -220,7 +226,8 @@ export const certTypeIdMap = {
[certTypes.relationalDatabaseV8]: certIds.relationalDatabaseV8Id,
[certTypes.collegeAlgebraPyV8]: certIds.collegeAlgebraPyV8Id,
[certTypes.foundationalCSharpV8]: certIds.foundationalCSharpV8Id,
[certTypes.upcomingPythonV8]: certIds.upcomingPythonV8Id
[certTypes.upcomingPythonV8]: certIds.upcomingPythonV8Id,
[certTypes.jsAlgoDataStructV8]: certIds.jsAlgoDataStructV8Id
};
export const certTypeTitleMap = {
@@ -242,7 +249,9 @@ export const certTypeTitleMap = {
[certTypes.relationalDatabaseV8]: 'Relational Database',
[certTypes.collegeAlgebraPyV8]: 'College Algebra with Python',
[certTypes.foundationalCSharpV8]: 'Foundational C# with Microsoft',
[certTypes.upcomingPythonV8]: 'Upcoming Python'
[certTypes.upcomingPythonV8]: 'Upcoming Python',
[certTypes.jsAlgoDataStructV8]:
'JavaScript Algorithms and Data Structures (Beta)'
};
export const oldDataVizId = '561add10cb82ac38a17513b3';

View File

@@ -82,7 +82,7 @@ describe('firstNotAuditedSuperBlock', () => {
showNewCurriculum: false,
showUpcomingChanges: false
});
expect(result).toEqual(SuperBlocks.FoundationalCSharp);
expect(result).toEqual(SuperBlocks.JsAlgoDataStructNew);
});
});

View File

@@ -5,7 +5,7 @@ export enum SuperBlocks {
RespWebDesignNew = '2022/responsive-web-design',
RespWebDesign = 'responsive-web-design',
JsAlgoDataStruct = 'javascript-algorithms-and-data-structures',
JsAlgoDataStructNew = '2022/javascript-algorithms-and-data-structures',
JsAlgoDataStructNew = 'javascript-algorithms-and-data-structures-v8',
FrontEndDevLibs = 'front-end-development-libraries',
DataVis = 'data-visualization',
RelationalDb = 'relational-database',
@@ -55,7 +55,7 @@ export type SuperBlockOrder = {
export const superBlockOrder: SuperBlockOrder = {
[SuperBlockStages.FrontEnd]: [
SuperBlocks.RespWebDesignNew,
SuperBlocks.JsAlgoDataStruct,
SuperBlocks.JsAlgoDataStructNew,
SuperBlocks.FrontEndDevLibs,
SuperBlocks.DataVis
],
@@ -81,11 +81,11 @@ export const superBlockOrder: SuperBlockOrder = {
],
[SuperBlockStages.Legacy]: [
SuperBlocks.RespWebDesign,
SuperBlocks.JsAlgoDataStruct,
SuperBlocks.PythonForEverybody
],
[SuperBlockStages.New]: [],
[SuperBlockStages.Upcoming]: [
SuperBlocks.JsAlgoDataStructNew,
SuperBlocks.ExampleCertification,
SuperBlocks.UpcomingPython
]

View File

@@ -43,7 +43,7 @@ const superBlockFolderMap = {
'coding-interview-prep': '11-coding-interview-prep',
'relational-database': '13-relational-database',
'2022/responsive-web-design': '14-responsive-web-design-22',
'2022/javascript-algorithms-and-data-structures':
'javascript-algorithms-and-data-structures-v8':
'15-javascript-algorithms-and-data-structures-22',
'the-odin-project': '16-the-odin-project',
'college-algebra-with-python': '17-college-algebra-with-python',

View File

@@ -85,7 +85,7 @@ describe('external curriculum data build', () => {
);
const isUpcoming = [
'2022/javascript-algorithms-and-data-structures',
'javascript-algorithms-and-data-structures-v8',
'college-algebra-with-python',
'foundational-c-sharp-with-microsoft',
'the-odin-project',

View File

@@ -120,6 +120,7 @@ const demoUser = {
isRelationalDatabaseCertV8: false,
isCollegeAlgebraPyCertV8: false,
isFoundationalCSharpCertV8: false,
isJsAlgoDataStructCertV8: false,
completedChallenges: args.includes('--seed-trophy-challenges')
? trophyChallenges
: [],
@@ -186,6 +187,7 @@ const blankUser = {
isMachineLearningPyCertV7: false,
isRelationalDatabaseCertV8: false,
isCollegeAlgebraPyCertV8: false,
isFoundationalCSharpCertV8: false,
completedChallenges: [],
portfolio: [],
yearsTopContributor: [],