From e65f3e44b5ade16127aeece1cc6d58ac2c4875d0 Mon Sep 17 00:00:00 2001 From: "Krzysztof G." <60067306+gikf@users.noreply.github.com> Date: Thu, 6 Mar 2025 23:08:33 +0100 Subject: [PATCH] feat(tools): verify no overlapping dialogue times (#58564) --- curriculum/schema/challenge-schema.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/curriculum/schema/challenge-schema.js b/curriculum/schema/challenge-schema.js index bb2e8134262..d7ba665223c 100644 --- a/curriculum/schema/challenge-schema.js +++ b/curriculum/schema/challenge-schema.js @@ -274,7 +274,24 @@ const schema = Joi.object() }), scene: Joi.object().keys({ setup: setupJoi.required(), - commands: Joi.array().items(commandJoi) + commands: Joi.array() + .items(commandJoi) + .unique( + (a, b) => + a.dialogue && + b.dialogue && + !( + (a.startTime < b.startTime && + a.finishTime < b.finishTime && + a.finishTime <= b.startTime) || + (b.startTime < a.startTime && + b.finishTime < a.finishTime && + b.finishTime <= a.startTime) + ) + ) + .messages({ + 'array.unique': 'Dialogues must not have overlapping times.' + }) }), solutions: Joi.array().items(Joi.array().items(fileJoi).min(1)), superBlock: Joi.string().regex(slugWithSlashRE),