mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-03-03 23:01:25 -05:00
59 lines
1.4 KiB
TypeScript
59 lines
1.4 KiB
TypeScript
import Joi from 'joi';
|
|
|
|
interface DailyCodingChallengeLanguageFromDb {
|
|
tests: {
|
|
text: string;
|
|
testString: string;
|
|
}[];
|
|
challengeFiles: {
|
|
fileKey: string;
|
|
contents: string;
|
|
}[];
|
|
}
|
|
|
|
export interface DailyCodingChallengeFromDb {
|
|
id: string;
|
|
challengeNumber: number;
|
|
title: string;
|
|
date: string;
|
|
description: string;
|
|
javascript: DailyCodingChallengeLanguageFromDb;
|
|
python: DailyCodingChallengeLanguageFromDb;
|
|
}
|
|
|
|
const challengeLanguageDataSchema = Joi.object({
|
|
tests: Joi.array()
|
|
.items(
|
|
Joi.object({
|
|
text: Joi.string().required(),
|
|
testString: Joi.string().required()
|
|
})
|
|
)
|
|
.required(),
|
|
challengeFiles: Joi.array()
|
|
.items(
|
|
Joi.object({
|
|
fileKey: Joi.string().required(),
|
|
contents: Joi.string().required()
|
|
})
|
|
)
|
|
.required(),
|
|
disableLoopProtectTests: Joi.boolean().optional()
|
|
});
|
|
|
|
const challengeDataFromDbSchema = Joi.object({
|
|
id: Joi.string().required(),
|
|
challengeNumber: Joi.number().integer().min(1).required(),
|
|
title: Joi.string().required(),
|
|
date: Joi.string().required(),
|
|
description: Joi.string().required(),
|
|
javascript: challengeLanguageDataSchema.required(),
|
|
python: challengeLanguageDataSchema.required()
|
|
});
|
|
|
|
export const validateDailyCodingChallengeSchema = (
|
|
challenge: DailyCodingChallengeFromDb
|
|
) => {
|
|
return challengeDataFromDbSchema.validate(challenge);
|
|
};
|