fix(client): ensure validation works during watch (#38936)
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							3567813c51
						
					
				
				
					commit
					d233cb35a3
				
			@@ -34,7 +34,7 @@ module.exports = {
 | 
				
			|||||||
      options: {
 | 
					      options: {
 | 
				
			||||||
        name: 'challenges',
 | 
					        name: 'challenges',
 | 
				
			||||||
        source: buildChallenges,
 | 
					        source: buildChallenges,
 | 
				
			||||||
        onSourceChange: replaceChallengeNode,
 | 
					        onSourceChange: replaceChallengeNode(config.locale),
 | 
				
			||||||
        curriculumPath: localeChallengesRootDir
 | 
					        curriculumPath: localeChallengesRootDir
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,10 +14,10 @@ const arrToString = arr =>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
exports.localeChallengesRootDir = getChallengesDirForLang(locale);
 | 
					exports.localeChallengesRootDir = getChallengesDirForLang(locale);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exports.replaceChallengeNode = async function replaceChallengeNode(
 | 
					exports.replaceChallengeNode = locale => {
 | 
				
			||||||
  fullFilePath
 | 
					  return async function replaceChallengeNode(fullFilePath) {
 | 
				
			||||||
) {
 | 
					    return prepareChallenge(await createChallenge(fullFilePath, null, locale));
 | 
				
			||||||
  return prepareChallenge(await createChallenge(fullFilePath));
 | 
					  };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exports.buildChallenges = async function buildChallenges() {
 | 
					exports.buildChallenges = async function buildChallenges() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,6 @@ exports.getMetaForBlock = getMetaForBlock;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
exports.getChallengesForLang = function getChallengesForLang(lang) {
 | 
					exports.getChallengesForLang = function getChallengesForLang(lang) {
 | 
				
			||||||
  let curriculum = {};
 | 
					  let curriculum = {};
 | 
				
			||||||
  const validate = challengeSchemaValidator(lang);
 | 
					 | 
				
			||||||
  return new Promise(resolve => {
 | 
					  return new Promise(resolve => {
 | 
				
			||||||
    let running = 1;
 | 
					    let running = 1;
 | 
				
			||||||
    function done() {
 | 
					    function done() {
 | 
				
			||||||
@@ -39,13 +38,13 @@ exports.getChallengesForLang = function getChallengesForLang(lang) {
 | 
				
			|||||||
    readDirP({ root: getChallengesDirForLang(lang) })
 | 
					    readDirP({ root: getChallengesDirForLang(lang) })
 | 
				
			||||||
      .on('data', file => {
 | 
					      .on('data', file => {
 | 
				
			||||||
        running++;
 | 
					        running++;
 | 
				
			||||||
        buildCurriculum(file, curriculum, validate).then(done);
 | 
					        buildCurriculum(file, curriculum, lang).then(done);
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      .on('end', done);
 | 
					      .on('end', done);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function buildCurriculum(file, curriculum, validate) {
 | 
					async function buildCurriculum(file, curriculum, lang) {
 | 
				
			||||||
  const { name, depth, path: filePath, fullPath, stat } = file;
 | 
					  const { name, depth, path: filePath, fullPath, stat } = file;
 | 
				
			||||||
  if (depth === 1 && stat.isDirectory()) {
 | 
					  if (depth === 1 && stat.isDirectory()) {
 | 
				
			||||||
    // extract the superBlock info
 | 
					    // extract the superBlock info
 | 
				
			||||||
@@ -81,12 +80,12 @@ async function buildCurriculum(file, curriculum, validate) {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  const { meta } = challengeBlock;
 | 
					  const { meta } = challengeBlock;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const challenge = await createChallenge(fullPath, meta, validate);
 | 
					  const challenge = await createChallenge(fullPath, meta, lang);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  challengeBlock.challenges = [...challengeBlock.challenges, challenge];
 | 
					  challengeBlock.challenges = [...challengeBlock.challenges, challenge];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function createChallenge(fullPath, maybeMeta, validate) {
 | 
					async function createChallenge(fullPath, maybeMeta, lang) {
 | 
				
			||||||
  let meta;
 | 
					  let meta;
 | 
				
			||||||
  if (maybeMeta) {
 | 
					  if (maybeMeta) {
 | 
				
			||||||
    meta = maybeMeta;
 | 
					    meta = maybeMeta;
 | 
				
			||||||
@@ -99,7 +98,7 @@ async function createChallenge(fullPath, maybeMeta, validate) {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  const { name: superBlock } = superBlockInfoFromFullPath(fullPath);
 | 
					  const { name: superBlock } = superBlockInfoFromFullPath(fullPath);
 | 
				
			||||||
  const challenge = await parseMarkdown(fullPath);
 | 
					  const challenge = await parseMarkdown(fullPath);
 | 
				
			||||||
  const result = validate(challenge);
 | 
					  const result = challengeSchemaValidator(lang)(challenge);
 | 
				
			||||||
  if (result.error) {
 | 
					  if (result.error) {
 | 
				
			||||||
    console.log(result.value);
 | 
					    console.log(result.value);
 | 
				
			||||||
    throw new Error(result.error);
 | 
					    throw new Error(result.error);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user