mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-03-14 04:00:42 -04:00
feat: make new javascript live (#52623)
Co-authored-by: scissorsneedfoodtoo <scissorsneedfoodtoo@gmail.com>
This commit is contained in:
@@ -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": [
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -452,6 +452,7 @@ function postResetProgress(req, res, next) {
|
||||
isRelationalDatabaseCertV8: false,
|
||||
isCollegeAlgebraPyCertV8: false,
|
||||
isFoundationalCSharpCertV8: false,
|
||||
isJsAlgoDataStructCertV8: false,
|
||||
completedChallenges: [],
|
||||
completedExams: [],
|
||||
savedChallenges: [],
|
||||
|
||||
@@ -16,5 +16,6 @@
|
||||
"fullStack": "isFullStackCert",
|
||||
"relationalDatabaseV8": "isRelationalDatabaseV8",
|
||||
"collegeAlgebraPyV8": "isCollegeAlgebraPyCertV8",
|
||||
"foundationalCSharpV8": "isFoundationalCSharpCertV8"
|
||||
"foundationalCSharpV8": "isFoundationalCSharpCertV8",
|
||||
"isJsAlgoDataStructCertV8": "isJsAlgoDataStructCertV8"
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ export const publicUserProps = [
|
||||
'isMachineLearningPyCertV7',
|
||||
'isCollegeAlgebraPyCertV8',
|
||||
'isFoundationalCSharpCertV8',
|
||||
'isJsAlgoDataStructCertV8',
|
||||
'linkedin',
|
||||
'location',
|
||||
'name',
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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": [
|
||||
{
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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
|
||||
})
|
||||
);
|
||||
|
||||
|
||||
@@ -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
|
||||
---
|
||||
|
||||
@@ -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
|
||||
---
|
||||
|
||||
@@ -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
|
||||
---
|
||||
|
||||
@@ -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
|
||||
---
|
||||
|
||||
@@ -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
|
||||
---
|
||||
|
||||
@@ -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
|
||||
---
|
||||
|
||||
@@ -346,6 +346,7 @@ export type ClaimedCertifications = {
|
||||
isSciCompPyCertV7: boolean;
|
||||
isDataAnalysisPyCertV7: boolean;
|
||||
isMachineLearningPyCertV7: boolean;
|
||||
isJsAlgoDataStructCertV8: boolean;
|
||||
};
|
||||
|
||||
type SavedChallenges = SavedChallenge[];
|
||||
|
||||
@@ -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: [
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
{
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
{
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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": [
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -82,7 +82,7 @@ describe('firstNotAuditedSuperBlock', () => {
|
||||
showNewCurriculum: false,
|
||||
showUpcomingChanges: false
|
||||
});
|
||||
expect(result).toEqual(SuperBlocks.FoundationalCSharp);
|
||||
expect(result).toEqual(SuperBlocks.JsAlgoDataStructNew);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -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
|
||||
]
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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: [],
|
||||
|
||||
Reference in New Issue
Block a user