From 6abfcd86084a902174cc8a65ed46172e35829345 Mon Sep 17 00:00:00 2001 From: Oliver Eyton-Williams Date: Mon, 1 Feb 2021 17:01:31 +0100 Subject: [PATCH] fix(curriculum): use js-yaml to parse certs --- curriculum/getChallenges.js | 22 +++++++++----------- curriculum/package-lock.json | 39 +++++++++++++++++++++++++----------- curriculum/package.json | 1 + 3 files changed, 37 insertions(+), 25 deletions(-) diff --git a/curriculum/getChallenges.js b/curriculum/getChallenges.js index 3ab51017d3..0b6967c251 100644 --- a/curriculum/getChallenges.js +++ b/curriculum/getChallenges.js @@ -1,7 +1,7 @@ const path = require('path'); const { findIndex, reduce, toString } = require('lodash'); const readDirP = require('readdirp'); -const { parseMarkdown } = require('../tools/challenge-md-parser'); +const yaml = require('js-yaml'); const { parseMD } = require('../tools/challenge-md-parser/mdx'); const fs = require('fs'); const util = require('util'); @@ -127,6 +127,10 @@ function getMetaForBlock(block) { ); } +function parseCert(filePath) { + return yaml.load(fs.readFileSync(filePath, 'utf8')); +} + exports.getChallengesDirForLang = getChallengesDirForLang; exports.getMetaForBlock = getMetaForBlock; @@ -164,7 +168,7 @@ exports.getChallengesForLang = async function getChallengesForLang(lang) { return walk( root, curriculum, - { type: 'files', fileFilter: ['*.md', '*.markdown'] }, + { type: 'files', fileFilter: ['*.md', '*.yml'] }, cb ); }; @@ -261,21 +265,13 @@ ${getFullPath('english')} // while the auditing is ongoing, we default to English for un-audited certs // once that's complete, we can revert to using isEnglishChallenge(fullPath) const useEnglish = lang === 'english' || !isAuditedCert(lang, superBlock); - const isCert = path.extname(filePath) === '.markdown'; + const isCert = path.extname(filePath) === '.yml'; let challenge; if (isCert) { - // TODO: this uses the old parser to handle certifcates, but Markdown is a - // clunky way to store data, consider converting to YAML and removing the - // old parser. challenge = await (useEnglish - ? parseMarkdown(getFullPath('english')) - : parseTranslation( - getFullPath(lang), - COMMENT_TRANSLATIONS, - lang, - parseMarkdown - )); + ? parseCert(getFullPath('english')) + : parseCert(getFullPath(lang))); } else { challenge = await (useEnglish ? parseMD(getFullPath('english')) diff --git a/curriculum/package-lock.json b/curriculum/package-lock.json index 88e9a246cb..6f7f9ed5e7 100644 --- a/curriculum/package-lock.json +++ b/curriculum/package-lock.json @@ -1316,13 +1316,10 @@ "dev": true }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "arr-diff": { "version": "4.0.0", @@ -4953,13 +4950,12 @@ "dev": true }, "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "jsbn": { @@ -5497,6 +5493,15 @@ "picomatch": "^2.0.4" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "binary-extensions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", @@ -5643,6 +5648,16 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", diff --git a/curriculum/package.json b/curriculum/package.json index bf149ece03..e046d3659f 100644 --- a/curriculum/package.json +++ b/curriculum/package.json @@ -48,6 +48,7 @@ "invariant": "^2.2.4", "joi": "^13.3.0", "joi-objectid": "^2.0.0", + "js-yaml": "^4.0.0", "jsdom": "^12.2.0", "live-server": "^1.2.1", "lodash": "^4.17.20",