From 2d513aee338f2fd68c3a38e5545e909cbb085cae Mon Sep 17 00:00:00 2001 From: Naomi Carrigan Date: Tue, 19 Dec 2023 22:39:33 -0800 Subject: [PATCH] feat: make new javascript live (#52623) Co-authored-by: scissorsneedfoodtoo --- api-server/src/common/models/user.json | 5 ++ api-server/src/server/boot/certificate.js | 22 +++-- api-server/src/server/boot/user.js | 1 + api-server/src/server/utils/certTypes.json | 3 +- .../src/server/utils/publicUserProps.js | 1 + client/config/cert-and-project-map.ts | 89 +++++++++++++------ client/i18n/locales/arabic/intro.json | 2 +- .../locales/chinese-traditional/intro.json | 2 +- client/i18n/locales/chinese/intro.json | 2 +- client/i18n/locales/english/intro.json | 2 +- client/i18n/locales/english/translations.json | 1 + client/i18n/locales/espanol/intro.json | 2 +- client/i18n/locales/german/intro.json | 2 +- client/i18n/locales/italian/intro.json | 2 +- client/i18n/locales/japanese/intro.json | 2 +- client/i18n/locales/portuguese/intro.json | 2 +- client/i18n/locales/swahili/intro.json | 2 +- client/i18n/locales/ukrainian/intro.json | 2 +- .../src/client-only-routes/show-settings.tsx | 2 + .../src/components/settings/certification.tsx | 12 ++- .../basic-javascript-rpg-game/index.md | 0 .../index.md | 0 .../index.md | 2 +- .../index.md | 0 .../index.md | 0 .../index.md | 0 .../index.md | 0 .../index.md | 0 .../index.md | 2 +- .../index.md | 0 .../index.md | 0 .../index.md | 2 +- .../index.md | 2 +- .../index.md | 2 +- .../index.md | 0 .../index.md | 0 .../index.md | 0 .../index.md | 2 +- client/src/redux/prop-types.ts | 1 + client/src/redux/selectors.js | 11 ++- .../build-a-caesars-cipher-project/meta.json | 18 ---- .../build-a-cash-register-project/meta.json | 6 +- .../meta.json | 6 +- .../meta.json | 4 +- .../meta.json | 6 +- .../meta.json | 6 +- .../meta.json | 4 +- .../meta.json | 4 +- .../meta.json | 4 +- .../meta.json | 4 +- .../meta.json | 4 +- .../meta.json | 4 +- .../meta.json | 4 +- .../meta.json | 4 +- .../meta.json | 4 +- .../meta.json | 4 +- .../meta.json | 4 +- .../meta.json | 4 +- .../meta.json | 4 +- .../meta.json | 4 +- .../meta.json | 4 +- .../meta.json | 4 +- ...s-and-data-structures-certification-v8.yml | 16 ++++ ...h-register.md => build-a-cash-register.md} | 2 +- ...ecker.md => build-a-palindrome-checker.md} | 2 +- ....md => build-a-roman-numeral-converter.md} | 2 +- ... => build-a-telephone-number-validator.md} | 0 curriculum/get-challenges.js | 4 - .../challenge-schema.test.js.snap | 2 +- curriculum/schema/challenge-schema.js | 2 +- curriculum/test/test-challenges.js | 1 - curriculum/utils.js | 2 +- curriculum/utils.test.ts | 19 ++-- shared/config/certification-settings.ts | 29 +++--- shared/config/superblocks.test.ts | 2 +- shared/config/superblocks.ts | 6 +- tools/challenge-auditor/index.ts | 2 +- .../build-external-curricula-data.test.ts | 2 +- tools/scripts/seed/seed-demo-user.js | 2 + 79 files changed, 228 insertions(+), 159 deletions(-) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/basic-javascript-rpg-game/index.md (100%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/functional-programming-spreadsheet/index.md (100%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/index.md (75%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/intermediate-javascript-calorie-counter/index.md (100%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/learn-advanced-array-methods-by-building-a-statistics-calculator/index.md (100%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/learn-asynchronous-programming-by-building-an-fcc-forum-leaderboard/index.md (100%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/learn-basic-algorithmic-thinking-by-building-a-number-sorter/index.md (100%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/learn-basic-oop-by-building-a-shopping-cart/index.md (100%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/learn-basic-string-and-array-methods-by-building-a-music-player/index.md (84%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/learn-fetch-and-promises-by-building-an-fcc-authors-page/index.md (100%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/learn-functional-programming-by-building-a-spreadsheet/index.md (100%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/learn-intermediate-algorithmic-thinking-by-building-a-dice-game/index.md (84%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/learn-intermediate-oop-by-building-a-platformer-game/index.md (83%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/learn-localstorage-by-building-a-todo/index.md (81%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/learn-modern-javascript-methods-by-building-football-team-cards/index.md (100%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/learn-recursion-by-building-a-decimal-to-binary-converter/index.md (100%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/learn-regular-expressions-by-building-a-spam-filter/index.md (100%) rename client/src/pages/learn/{2022/javascript-algorithms-and-data-structures => javascript-algorithms-and-data-structures-v8}/learn-the-date-object-by-building-a-date-formatter/index.md (82%) delete mode 100644 curriculum/challenges/_meta/build-a-caesars-cipher-project/meta.json create mode 100644 curriculum/challenges/english/00-certifications/javascript-algorithms-and-data-structures-v8/javascript-algorithms-and-data-structures-certification-v8.yml rename curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-cash-register-project/{cash-register.md => build-a-cash-register.md} (99%) rename curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-palindrome-checker-project/{palindrome-checker.md => build-a-palindrome-checker.md} (99%) rename curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-roman-numeral-converter-project/{roman-numeral-converter.md => build-a-roman-numeral-converter.md} (99%) rename curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-telephone-number-validator-project/{telephone-number-validator.md => build-a-telephone-number-validator.md} (100%) diff --git a/api-server/src/common/models/user.json b/api-server/src/common/models/user.json index ba22b7f689b..28c76668657 100644 --- a/api-server/src/common/models/user.json +++ b/api-server/src/common/models/user.json @@ -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": [ { diff --git a/api-server/src/server/boot/certificate.js b/api-server/src/server/boot/certificate.js index 11a5fab310f..d49d320532c 100644 --- a/api-server/src/server/boot/certificate.js +++ b/api-server/src/server/boot/certificate.js @@ -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, diff --git a/api-server/src/server/boot/user.js b/api-server/src/server/boot/user.js index c89e8c17d99..aaa4a362161 100644 --- a/api-server/src/server/boot/user.js +++ b/api-server/src/server/boot/user.js @@ -452,6 +452,7 @@ function postResetProgress(req, res, next) { isRelationalDatabaseCertV8: false, isCollegeAlgebraPyCertV8: false, isFoundationalCSharpCertV8: false, + isJsAlgoDataStructCertV8: false, completedChallenges: [], completedExams: [], savedChallenges: [], diff --git a/api-server/src/server/utils/certTypes.json b/api-server/src/server/utils/certTypes.json index 27af67a6579..38bcd9aa84c 100644 --- a/api-server/src/server/utils/certTypes.json +++ b/api-server/src/server/utils/certTypes.json @@ -16,5 +16,6 @@ "fullStack": "isFullStackCert", "relationalDatabaseV8": "isRelationalDatabaseV8", "collegeAlgebraPyV8": "isCollegeAlgebraPyCertV8", - "foundationalCSharpV8": "isFoundationalCSharpCertV8" + "foundationalCSharpV8": "isFoundationalCSharpCertV8", + "isJsAlgoDataStructCertV8": "isJsAlgoDataStructCertV8" } diff --git a/api-server/src/server/utils/publicUserProps.js b/api-server/src/server/utils/publicUserProps.js index f5b8a71cb33..8fb35d36fea 100644 --- a/api-server/src/server/utils/publicUserProps.js +++ b/api-server/src/server/utils/publicUserProps.js @@ -28,6 +28,7 @@ export const publicUserProps = [ 'isMachineLearningPyCertV7', 'isCollegeAlgebraPyCertV8', 'isFoundationalCSharpCertV8', + 'isJsAlgoDataStructCertV8', 'linkedin', 'location', 'name', diff --git a/client/config/cert-and-project-map.ts b/client/config/cert-and-project-map.ts index 20aafb4de00..89a20f05786 100644 --- a/client/config/cert-and-project-map.ts +++ b/client/config/cert-and-project-map.ts @@ -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 extends { certSlug: U } ? T : never; diff --git a/client/i18n/locales/arabic/intro.json b/client/i18n/locales/arabic/intro.json index 59f873abf34..eb4cf9f1382 100644 --- a/client/i18n/locales/arabic/intro.json +++ b/client/i18n/locales/arabic/intro.json @@ -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.", diff --git a/client/i18n/locales/chinese-traditional/intro.json b/client/i18n/locales/chinese-traditional/intro.json index 1c8b255a99e..83aae6305cb 100644 --- a/client/i18n/locales/chinese-traditional/intro.json +++ b/client/i18n/locales/chinese-traditional/intro.json @@ -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.", diff --git a/client/i18n/locales/chinese/intro.json b/client/i18n/locales/chinese/intro.json index 68836bc9175..57ce76f2e1a 100644 --- a/client/i18n/locales/chinese/intro.json +++ b/client/i18n/locales/chinese/intro.json @@ -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.", diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json index 6e4da1d7c92..f349a3f4261 100644 --- a/client/i18n/locales/english/intro.json +++ b/client/i18n/locales/english/intro.json @@ -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.", diff --git a/client/i18n/locales/english/translations.json b/client/i18n/locales/english/translations.json index a617c35e323..20f5d16be46 100644 --- a/client/i18n/locales/english/translations.json +++ b/client/i18n/locales/english/translations.json @@ -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": [ { diff --git a/client/i18n/locales/espanol/intro.json b/client/i18n/locales/espanol/intro.json index 4f9c6bc252b..60bc05d307f 100644 --- a/client/i18n/locales/espanol/intro.json +++ b/client/i18n/locales/espanol/intro.json @@ -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.", diff --git a/client/i18n/locales/german/intro.json b/client/i18n/locales/german/intro.json index fb9bfa6b7f4..e5762799a46 100644 --- a/client/i18n/locales/german/intro.json +++ b/client/i18n/locales/german/intro.json @@ -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.", diff --git a/client/i18n/locales/italian/intro.json b/client/i18n/locales/italian/intro.json index dd86eb751c6..7cb58ee03cb 100644 --- a/client/i18n/locales/italian/intro.json +++ b/client/i18n/locales/italian/intro.json @@ -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.", diff --git a/client/i18n/locales/japanese/intro.json b/client/i18n/locales/japanese/intro.json index 61c586df723..dc2e5bc2646 100644 --- a/client/i18n/locales/japanese/intro.json +++ b/client/i18n/locales/japanese/intro.json @@ -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.", diff --git a/client/i18n/locales/portuguese/intro.json b/client/i18n/locales/portuguese/intro.json index 623b9a839e2..423cf2a48e1 100644 --- a/client/i18n/locales/portuguese/intro.json +++ b/client/i18n/locales/portuguese/intro.json @@ -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.", diff --git a/client/i18n/locales/swahili/intro.json b/client/i18n/locales/swahili/intro.json index e1198bafd76..6e103ea912f 100644 --- a/client/i18n/locales/swahili/intro.json +++ b/client/i18n/locales/swahili/intro.json @@ -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.", diff --git a/client/i18n/locales/ukrainian/intro.json b/client/i18n/locales/ukrainian/intro.json index 867315b0c5f..0c2106e9b9b 100644 --- a/client/i18n/locales/ukrainian/intro.json +++ b/client/i18n/locales/ukrainian/intro.json @@ -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.", diff --git a/client/src/client-only-routes/show-settings.tsx b/client/src/client-only-routes/show-settings.tsx index 04d927074ce..32c0bf97696 100644 --- a/client/src/client-only-routes/show-settings.tsx +++ b/client/src/client-only-routes/show-settings.tsx @@ -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} diff --git a/client/src/components/settings/certification.tsx b/client/src/components/settings/certification.tsx index 070b4127b75..83d6e4a8667 100644 --- a/client/src/components/settings/certification.tsx +++ b/client/src/components/settings/certification.tsx @@ -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 }) ); diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/basic-javascript-rpg-game/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/basic-javascript-rpg-game/index.md similarity index 100% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/basic-javascript-rpg-game/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/basic-javascript-rpg-game/index.md diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/functional-programming-spreadsheet/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/functional-programming-spreadsheet/index.md similarity index 100% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/functional-programming-spreadsheet/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/functional-programming-spreadsheet/index.md diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/index.md similarity index 75% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/index.md index c93ba44b1c8..e467434c10d 100644 --- a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/index.md +++ b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/index.md @@ -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 --- diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/intermediate-javascript-calorie-counter/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/intermediate-javascript-calorie-counter/index.md similarity index 100% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/intermediate-javascript-calorie-counter/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/intermediate-javascript-calorie-counter/index.md diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-advanced-array-methods-by-building-a-statistics-calculator/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-advanced-array-methods-by-building-a-statistics-calculator/index.md similarity index 100% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-advanced-array-methods-by-building-a-statistics-calculator/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-advanced-array-methods-by-building-a-statistics-calculator/index.md diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-asynchronous-programming-by-building-an-fcc-forum-leaderboard/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-asynchronous-programming-by-building-an-fcc-forum-leaderboard/index.md similarity index 100% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-asynchronous-programming-by-building-an-fcc-forum-leaderboard/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-asynchronous-programming-by-building-an-fcc-forum-leaderboard/index.md diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-basic-algorithmic-thinking-by-building-a-number-sorter/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-basic-algorithmic-thinking-by-building-a-number-sorter/index.md similarity index 100% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-basic-algorithmic-thinking-by-building-a-number-sorter/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-basic-algorithmic-thinking-by-building-a-number-sorter/index.md diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-basic-oop-by-building-a-shopping-cart/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-basic-oop-by-building-a-shopping-cart/index.md similarity index 100% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-basic-oop-by-building-a-shopping-cart/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-basic-oop-by-building-a-shopping-cart/index.md diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-basic-string-and-array-methods-by-building-a-music-player/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-basic-string-and-array-methods-by-building-a-music-player/index.md similarity index 84% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-basic-string-and-array-methods-by-building-a-music-player/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-basic-string-and-array-methods-by-building-a-music-player/index.md index 011e8042ffd..bd2610836f2 100644 --- a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-basic-string-and-array-methods-by-building-a-music-player/index.md +++ b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-basic-string-and-array-methods-by-building-a-music-player/index.md @@ -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 --- diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-fetch-and-promises-by-building-an-fcc-authors-page/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-fetch-and-promises-by-building-an-fcc-authors-page/index.md similarity index 100% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-fetch-and-promises-by-building-an-fcc-authors-page/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-fetch-and-promises-by-building-an-fcc-authors-page/index.md diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-functional-programming-by-building-a-spreadsheet/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-functional-programming-by-building-a-spreadsheet/index.md similarity index 100% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-functional-programming-by-building-a-spreadsheet/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-functional-programming-by-building-a-spreadsheet/index.md diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-intermediate-algorithmic-thinking-by-building-a-dice-game/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-intermediate-algorithmic-thinking-by-building-a-dice-game/index.md similarity index 84% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-intermediate-algorithmic-thinking-by-building-a-dice-game/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-intermediate-algorithmic-thinking-by-building-a-dice-game/index.md index 2d3aad769c4..735bf132811 100644 --- a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-intermediate-algorithmic-thinking-by-building-a-dice-game/index.md +++ b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-intermediate-algorithmic-thinking-by-building-a-dice-game/index.md @@ -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 --- diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-intermediate-oop-by-building-a-platformer-game/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-intermediate-oop-by-building-a-platformer-game/index.md similarity index 83% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-intermediate-oop-by-building-a-platformer-game/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-intermediate-oop-by-building-a-platformer-game/index.md index 25c43e6a0bf..645fa9be385 100644 --- a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-intermediate-oop-by-building-a-platformer-game/index.md +++ b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-intermediate-oop-by-building-a-platformer-game/index.md @@ -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 --- diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-localstorage-by-building-a-todo/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-localstorage-by-building-a-todo/index.md similarity index 81% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-localstorage-by-building-a-todo/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-localstorage-by-building-a-todo/index.md index 4d86d5c222c..800be06abd1 100644 --- a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-localstorage-by-building-a-todo/index.md +++ b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-localstorage-by-building-a-todo/index.md @@ -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 --- diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-modern-javascript-methods-by-building-football-team-cards/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-modern-javascript-methods-by-building-football-team-cards/index.md similarity index 100% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-modern-javascript-methods-by-building-football-team-cards/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-modern-javascript-methods-by-building-football-team-cards/index.md diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-recursion-by-building-a-decimal-to-binary-converter/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-recursion-by-building-a-decimal-to-binary-converter/index.md similarity index 100% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-recursion-by-building-a-decimal-to-binary-converter/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-recursion-by-building-a-decimal-to-binary-converter/index.md diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-regular-expressions-by-building-a-spam-filter/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-regular-expressions-by-building-a-spam-filter/index.md similarity index 100% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-regular-expressions-by-building-a-spam-filter/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-regular-expressions-by-building-a-spam-filter/index.md diff --git a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-the-date-object-by-building-a-date-formatter/index.md b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-the-date-object-by-building-a-date-formatter/index.md similarity index 82% rename from client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-the-date-object-by-building-a-date-formatter/index.md rename to client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-the-date-object-by-building-a-date-formatter/index.md index fa91bb61cac..c679510bfdf 100644 --- a/client/src/pages/learn/2022/javascript-algorithms-and-data-structures/learn-the-date-object-by-building-a-date-formatter/index.md +++ b/client/src/pages/learn/javascript-algorithms-and-data-structures-v8/learn-the-date-object-by-building-a-date-formatter/index.md @@ -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 --- diff --git a/client/src/redux/prop-types.ts b/client/src/redux/prop-types.ts index 5855d66483e..7d6b253c8a8 100644 --- a/client/src/redux/prop-types.ts +++ b/client/src/redux/prop-types.ts @@ -346,6 +346,7 @@ export type ClaimedCertifications = { isSciCompPyCertV7: boolean; isDataAnalysisPyCertV7: boolean; isMachineLearningPyCertV7: boolean; + isJsAlgoDataStructCertV8: boolean; }; type SavedChallenges = SavedChallenge[]; diff --git a/client/src/redux/selectors.js b/client/src/redux/selectors.js index 498480c7372..64e17ae8393 100644 --- a/client/src/redux/selectors.js +++ b/client/src/redux/selectors.js @@ -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: [ diff --git a/curriculum/challenges/_meta/build-a-caesars-cipher-project/meta.json b/curriculum/challenges/_meta/build-a-caesars-cipher-project/meta.json deleted file mode 100644 index 0122dbe9dcf..00000000000 --- a/curriculum/challenges/_meta/build-a-caesars-cipher-project/meta.json +++ /dev/null @@ -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" - } - ] -} \ No newline at end of file diff --git a/curriculum/challenges/_meta/build-a-cash-register-project/meta.json b/curriculum/challenges/_meta/build-a-cash-register-project/meta.json index a10196d6859..cf907663bed 100644 --- a/curriculum/challenges/_meta/build-a-cash-register-project/meta.json +++ b/curriculum/challenges/_meta/build-a-cash-register-project/meta.json @@ -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", diff --git a/curriculum/challenges/_meta/build-a-palindrome-checker-project/meta.json b/curriculum/challenges/_meta/build-a-palindrome-checker-project/meta.json index b85fa22c8e2..bd125b4f9e5 100644 --- a/curriculum/challenges/_meta/build-a-palindrome-checker-project/meta.json +++ b/curriculum/challenges/_meta/build-a-palindrome-checker-project/meta.json @@ -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", diff --git a/curriculum/challenges/_meta/build-a-pokemon-search-app-project/meta.json b/curriculum/challenges/_meta/build-a-pokemon-search-app-project/meta.json index 3f31f22cee8..d975c075715 100644 --- a/curriculum/challenges/_meta/build-a-pokemon-search-app-project/meta.json +++ b/curriculum/challenges/_meta/build-a-pokemon-search-app-project/meta.json @@ -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", diff --git a/curriculum/challenges/_meta/build-a-roman-numeral-converter-project/meta.json b/curriculum/challenges/_meta/build-a-roman-numeral-converter-project/meta.json index bc52a932250..1013c173fb8 100644 --- a/curriculum/challenges/_meta/build-a-roman-numeral-converter-project/meta.json +++ b/curriculum/challenges/_meta/build-a-roman-numeral-converter-project/meta.json @@ -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", diff --git a/curriculum/challenges/_meta/build-a-telephone-number-validator-project/meta.json b/curriculum/challenges/_meta/build-a-telephone-number-validator-project/meta.json index 991caea525a..6f068975dc3 100644 --- a/curriculum/challenges/_meta/build-a-telephone-number-validator-project/meta.json +++ b/curriculum/challenges/_meta/build-a-telephone-number-validator-project/meta.json @@ -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", diff --git a/curriculum/challenges/_meta/learn-advanced-array-methods-by-building-a-statistics-calculator/meta.json b/curriculum/challenges/_meta/learn-advanced-array-methods-by-building-a-statistics-calculator/meta.json index e1e840d73f2..9d7def9b142 100644 --- a/curriculum/challenges/_meta/learn-advanced-array-methods-by-building-a-statistics-calculator/meta.json +++ b/curriculum/challenges/_meta/learn-advanced-array-methods-by-building-a-statistics-calculator/meta.json @@ -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": [ diff --git a/curriculum/challenges/_meta/learn-asynchronous-programming-by-building-an-fcc-forum-leaderboard/meta.json b/curriculum/challenges/_meta/learn-asynchronous-programming-by-building-an-fcc-forum-leaderboard/meta.json index 30a67b9e056..61b1d259e7d 100644 --- a/curriculum/challenges/_meta/learn-asynchronous-programming-by-building-an-fcc-forum-leaderboard/meta.json +++ b/curriculum/challenges/_meta/learn-asynchronous-programming-by-building-an-fcc-forum-leaderboard/meta.json @@ -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", diff --git a/curriculum/challenges/_meta/learn-basic-algorithmic-thinking-by-building-a-number-sorter/meta.json b/curriculum/challenges/_meta/learn-basic-algorithmic-thinking-by-building-a-number-sorter/meta.json index c1d60aca2cd..46bf39d4bc2 100644 --- a/curriculum/challenges/_meta/learn-basic-algorithmic-thinking-by-building-a-number-sorter/meta.json +++ b/curriculum/challenges/_meta/learn-basic-algorithmic-thinking-by-building-a-number-sorter/meta.json @@ -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": [ diff --git a/curriculum/challenges/_meta/learn-basic-javascript-by-building-a-role-playing-game/meta.json b/curriculum/challenges/_meta/learn-basic-javascript-by-building-a-role-playing-game/meta.json index 785df6ff800..474405be8b5 100644 --- a/curriculum/challenges/_meta/learn-basic-javascript-by-building-a-role-playing-game/meta.json +++ b/curriculum/challenges/_meta/learn-basic-javascript-by-building-a-role-playing-game/meta.json @@ -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": [ { diff --git a/curriculum/challenges/_meta/learn-basic-oop-by-building-a-shopping-cart/meta.json b/curriculum/challenges/_meta/learn-basic-oop-by-building-a-shopping-cart/meta.json index 95a406fcc88..52ca0cb7b35 100644 --- a/curriculum/challenges/_meta/learn-basic-oop-by-building-a-shopping-cart/meta.json +++ b/curriculum/challenges/_meta/learn-basic-oop-by-building-a-shopping-cart/meta.json @@ -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": [ diff --git a/curriculum/challenges/_meta/learn-basic-string-and-array-methods-by-building-a-music-player/meta.json b/curriculum/challenges/_meta/learn-basic-string-and-array-methods-by-building-a-music-player/meta.json index 0fb2ef1f1af..634f20c96e6 100644 --- a/curriculum/challenges/_meta/learn-basic-string-and-array-methods-by-building-a-music-player/meta.json +++ b/curriculum/challenges/_meta/learn-basic-string-and-array-methods-by-building-a-music-player/meta.json @@ -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": [ diff --git a/curriculum/challenges/_meta/learn-fetch-and-promises-by-building-an-fcc-authors-page/meta.json b/curriculum/challenges/_meta/learn-fetch-and-promises-by-building-an-fcc-authors-page/meta.json index 3b7ee95a8ac..cee2b3cac23 100644 --- a/curriculum/challenges/_meta/learn-fetch-and-promises-by-building-an-fcc-authors-page/meta.json +++ b/curriculum/challenges/_meta/learn-fetch-and-promises-by-building-an-fcc-authors-page/meta.json @@ -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": [ diff --git a/curriculum/challenges/_meta/learn-form-validation-by-building-a-calorie-counter/meta.json b/curriculum/challenges/_meta/learn-form-validation-by-building-a-calorie-counter/meta.json index a4cdeb86326..e995ac936fb 100644 --- a/curriculum/challenges/_meta/learn-form-validation-by-building-a-calorie-counter/meta.json +++ b/curriculum/challenges/_meta/learn-form-validation-by-building-a-calorie-counter/meta.json @@ -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", diff --git a/curriculum/challenges/_meta/learn-functional-programming-by-building-a-spreadsheet/meta.json b/curriculum/challenges/_meta/learn-functional-programming-by-building-a-spreadsheet/meta.json index ad7133d567a..0f978ac329a 100644 --- a/curriculum/challenges/_meta/learn-functional-programming-by-building-a-spreadsheet/meta.json +++ b/curriculum/challenges/_meta/learn-functional-programming-by-building-a-spreadsheet/meta.json @@ -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": [ diff --git a/curriculum/challenges/_meta/learn-intermediate-algorithmic-thinking-by-building-a-dice-game/meta.json b/curriculum/challenges/_meta/learn-intermediate-algorithmic-thinking-by-building-a-dice-game/meta.json index 723544adce2..b1c55b06941 100644 --- a/curriculum/challenges/_meta/learn-intermediate-algorithmic-thinking-by-building-a-dice-game/meta.json +++ b/curriculum/challenges/_meta/learn-intermediate-algorithmic-thinking-by-building-a-dice-game/meta.json @@ -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": [ diff --git a/curriculum/challenges/_meta/learn-intermediate-oop-by-building-a-platformer-game/meta.json b/curriculum/challenges/_meta/learn-intermediate-oop-by-building-a-platformer-game/meta.json index 11cac53126f..d84ff056503 100644 --- a/curriculum/challenges/_meta/learn-intermediate-oop-by-building-a-platformer-game/meta.json +++ b/curriculum/challenges/_meta/learn-intermediate-oop-by-building-a-platformer-game/meta.json @@ -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, diff --git a/curriculum/challenges/_meta/learn-localstorage-by-building-a-todo-app/meta.json b/curriculum/challenges/_meta/learn-localstorage-by-building-a-todo-app/meta.json index fe5df1debf0..f7fad3b3749 100644 --- a/curriculum/challenges/_meta/learn-localstorage-by-building-a-todo-app/meta.json +++ b/curriculum/challenges/_meta/learn-localstorage-by-building-a-todo-app/meta.json @@ -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": [ diff --git a/curriculum/challenges/_meta/learn-modern-javascript-methods-by-building-football-team-cards/meta.json b/curriculum/challenges/_meta/learn-modern-javascript-methods-by-building-football-team-cards/meta.json index b7cbb6a599e..31949fc63bc 100644 --- a/curriculum/challenges/_meta/learn-modern-javascript-methods-by-building-football-team-cards/meta.json +++ b/curriculum/challenges/_meta/learn-modern-javascript-methods-by-building-football-team-cards/meta.json @@ -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": [ diff --git a/curriculum/challenges/_meta/learn-recursion-by-building-a-decimal-to-binary-converter/meta.json b/curriculum/challenges/_meta/learn-recursion-by-building-a-decimal-to-binary-converter/meta.json index b0e40b0e0de..aad540de1c7 100644 --- a/curriculum/challenges/_meta/learn-recursion-by-building-a-decimal-to-binary-converter/meta.json +++ b/curriculum/challenges/_meta/learn-recursion-by-building-a-decimal-to-binary-converter/meta.json @@ -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": [ { diff --git a/curriculum/challenges/_meta/learn-regular-expressions-by-building-a-spam-filter/meta.json b/curriculum/challenges/_meta/learn-regular-expressions-by-building-a-spam-filter/meta.json index c98441cdecf..d249ca2b922 100644 --- a/curriculum/challenges/_meta/learn-regular-expressions-by-building-a-spam-filter/meta.json +++ b/curriculum/challenges/_meta/learn-regular-expressions-by-building-a-spam-filter/meta.json @@ -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": [ diff --git a/curriculum/challenges/_meta/learn-the-date-object-by-building-a-date-formatter/meta.json b/curriculum/challenges/_meta/learn-the-date-object-by-building-a-date-formatter/meta.json index 780d87c132c..7577a06555b 100644 --- a/curriculum/challenges/_meta/learn-the-date-object-by-building-a-date-formatter/meta.json +++ b/curriculum/challenges/_meta/learn-the-date-object-by-building-a-date-formatter/meta.json @@ -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": [ diff --git a/curriculum/challenges/english/00-certifications/javascript-algorithms-and-data-structures-v8/javascript-algorithms-and-data-structures-certification-v8.yml b/curriculum/challenges/english/00-certifications/javascript-algorithms-and-data-structures-v8/javascript-algorithms-and-data-structures-certification-v8.yml new file mode 100644 index 00000000000..2cc53ddfb75 --- /dev/null +++ b/curriculum/challenges/english/00-certifications/javascript-algorithms-and-data-structures-v8/javascript-algorithms-and-data-structures-certification-v8.yml @@ -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 diff --git a/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-cash-register-project/cash-register.md b/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-cash-register-project/build-a-cash-register.md similarity index 99% rename from curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-cash-register-project/cash-register.md rename to curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-cash-register-project/build-a-cash-register.md index 42d7560639e..49dc7020061 100644 --- a/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-cash-register-project/cash-register.md +++ b/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-cash-register-project/build-a-cash-register.md @@ -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 diff --git a/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-palindrome-checker-project/palindrome-checker.md b/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-palindrome-checker-project/build-a-palindrome-checker.md similarity index 99% rename from curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-palindrome-checker-project/palindrome-checker.md rename to curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-palindrome-checker-project/build-a-palindrome-checker.md index fab7b30012e..8da4219cb17 100644 --- a/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-palindrome-checker-project/palindrome-checker.md +++ b/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-palindrome-checker-project/build-a-palindrome-checker.md @@ -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 diff --git a/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-roman-numeral-converter-project/roman-numeral-converter.md b/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-roman-numeral-converter-project/build-a-roman-numeral-converter.md similarity index 99% rename from curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-roman-numeral-converter-project/roman-numeral-converter.md rename to curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-roman-numeral-converter-project/build-a-roman-numeral-converter.md index dfd440aa13a..b84203cfa14 100644 --- a/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-roman-numeral-converter-project/roman-numeral-converter.md +++ b/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-roman-numeral-converter-project/build-a-roman-numeral-converter.md @@ -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 diff --git a/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-telephone-number-validator-project/telephone-number-validator.md b/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-telephone-number-validator-project/build-a-telephone-number-validator.md similarity index 100% rename from curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-telephone-number-validator-project/telephone-number-validator.md rename to curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/build-a-telephone-number-validator-project/build-a-telephone-number-validator.md diff --git a/curriculum/get-challenges.js b/curriculum/get-challenges.js index de2047aa403..d560620a586 100644 --- a/curriculum/get-challenges.js +++ b/curriculum/get-challenges.js @@ -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( diff --git a/curriculum/schema/__snapshots__/challenge-schema.test.js.snap b/curriculum/schema/__snapshots__/challenge-schema.test.js.snap index c77b0065835..6db363fa8f9 100644 --- a/curriculum/schema/__snapshots__/challenge-schema.test.js.snap +++ b/curriculum/schema/__snapshots__/challenge-schema.test.js.snap @@ -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 diff --git a/curriculum/schema/challenge-schema.js b/curriculum/schema/challenge-schema.js index ebeb035895f..3196ed9ad91 100644 --- a/curriculum/schema/challenge-schema.js +++ b/curriculum/schema/challenge-schema.js @@ -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 diff --git a/curriculum/test/test-challenges.js b/curriculum/test/test-challenges.js index b691a91c2df..60549326a24 100644 --- a/curriculum/test/test-challenges.js +++ b/curriculum/test/test-challenges.js @@ -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) diff --git a/curriculum/utils.js b/curriculum/utils.js index 51eda3c96fd..6cdf82cf509 100644 --- a/curriculum/utils.js +++ b/curriculum/utils.js @@ -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', diff --git a/curriculum/utils.test.ts b/curriculum/utils.test.ts index e7771810d74..a34e32b1ff5 100644 --- a/curriculum/utils.test.ts +++ b/curriculum/utils.test.ts @@ -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); } diff --git a/shared/config/certification-settings.ts b/shared/config/certification-settings.ts index 52bd65b06f0..98ec0a43638 100644 --- a/shared/config/certification-settings.ts +++ b/shared/config/certification-settings.ts @@ -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'; diff --git a/shared/config/superblocks.test.ts b/shared/config/superblocks.test.ts index 60761279217..921e810e47e 100644 --- a/shared/config/superblocks.test.ts +++ b/shared/config/superblocks.test.ts @@ -82,7 +82,7 @@ describe('firstNotAuditedSuperBlock', () => { showNewCurriculum: false, showUpcomingChanges: false }); - expect(result).toEqual(SuperBlocks.FoundationalCSharp); + expect(result).toEqual(SuperBlocks.JsAlgoDataStructNew); }); }); diff --git a/shared/config/superblocks.ts b/shared/config/superblocks.ts index 8d5b843c2d9..7870bb72962 100644 --- a/shared/config/superblocks.ts +++ b/shared/config/superblocks.ts @@ -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 ] diff --git a/tools/challenge-auditor/index.ts b/tools/challenge-auditor/index.ts index 89486469349..7b8a469b674 100644 --- a/tools/challenge-auditor/index.ts +++ b/tools/challenge-auditor/index.ts @@ -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', diff --git a/tools/scripts/build/build-external-curricula-data.test.ts b/tools/scripts/build/build-external-curricula-data.test.ts index a7be6a5e69c..acb04bcf287 100644 --- a/tools/scripts/build/build-external-curricula-data.test.ts +++ b/tools/scripts/build/build-external-curricula-data.test.ts @@ -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', diff --git a/tools/scripts/seed/seed-demo-user.js b/tools/scripts/seed/seed-demo-user.js index 8d3c32e1c71..ffa2df98ee5 100644 --- a/tools/scripts/seed/seed-demo-user.js +++ b/tools/scripts/seed/seed-demo-user.js @@ -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: [],