1 /*
2  *  Make.org Core API
3  *  Copyright (C) 2018 Make.org
4  *
5  * This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU Affero General Public License as
7  *  published by the Free Software Foundation, either version 3 of the
8  *  License, or (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU Affero General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Affero General Public License
16  *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
17  *
18  */
19 
20 package org.make.core
21 
22 import cats.{Eq, Show}
23 import cats.data.{ValidatedNec, NonEmptyChain => Nec, NonEmptySeq => Nes}
24 import cats.implicits._
25 
26 import java.time.LocalDate
27 import jakarta.mail.internet.InternetAddress
28 import enumeratum.values.StringEnum
29 import eu.timepit.refined.auto._
30 import eu.timepit.refined.api.{Refined, Validate}
31 import eu.timepit.refined.boolean.And
32 import eu.timepit.refined.collection.NonEmpty
33 import grizzled.slf4j.Logging
34 import io.circe.generic.semiauto.deriveCodec
35 import io.circe.{Codec, Decoder, Encoder}
36 import org.jsoup.Jsoup
37 import org.jsoup.safety.{Cleaner, Safelist}
38 import org.make.core.Validator.ValidatedValue
39 import org.make.core.elasticsearch.ElasticsearchFieldName
40 import org.make.core.reference.Language
41 import org.make.core.technical.ValidatedUtils._
42 
43 import scala.util.matching.Regex
44 import scala.util.{Failure, Success, Try}
45 import scala.annotation.nowarn
46 
47 object Validation extends Logging {
48 
49   private def isEmail(str: String): Boolean =
50     Try(new InternetAddress(str).validate()).isSuccess
51 
52   private val passwordRegex: Regex = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9 ])(?!.* ).{8,}$".r
53 
54   private val colorRegex: Regex = "^#[0-9a-fA-F]{6}$".r
55 
56   private val postalCodeRegex: Regex = "^\\d{5}$".r
57 
58   private val uploadFileNameRegex: Regex = "[a-zA-Z0-9_.-]+".r
59 
60   val emailRegex: Regex = "^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$".r
61 
62   val minAgeWithLegalConsent: Int = 8
63   val minLegalAgeForExternalProposal: Int = 18
64   private val maxAgeWithLegalConsent: Int = 16
65   val maxAge: Int = 120
66 
67   def validateOptional(maybeRequire: Option[Requirement]*): Unit = validate(maybeRequire.flatten: _*)
68 
69   @SuppressWarnings(Array("org.wartremover.warts.Throw"))
70   def validate(require: Requirement*): Unit = {
71     val messages: Seq[ValidationError] = require.flatMap { requirement =>
72       Try(requirement.condition()) match {
73         case Failure(e) =>
74           Seq(ValidationError(requirement.field, requirement.key, Option(e.getMessage)))
75         case Success(false) =>
76           Seq(ValidationError(requirement.field, requirement.key, Option(requirement.message())))
77         case _ => Nil
78       }
79     }
80     if (messages.nonEmpty) {
81       throw ValidationFailedError(messages)
82     }
83   }
84 
85   def validateField(field: String, key: String, condition: => Boolean, message: => String): Requirement =
86     Requirement(field, key, () => condition, () => message)
87 
88   // StringWithParsers -> .withMaxLength
89   def maxLength(
90     field: String,
91     maxLength: Int,
92     fieldValue: String,
93     message: Option[Int => String] = None
94   ): Requirement = {
95 
96     val computeLength: Int = {
97       Option(fieldValue).map(_.length).getOrElse(0)
98     }
99     val isValid = {
100       computeLength <= maxLength
101     }
102 
103     Requirement(field, "too_long", () => isValid, () => {
104       if (isValid) {
105         ""
106       } else {
107         message.map(_(computeLength)).getOrElse(s"$field should not be longer than $maxLength")
108       }
109     })
110   }
111 
112   // Should be discarded completely: nulls should not exist, and we have better (more specific)
113   // ways of handling Options
114   def mandatoryField(fieldName: String, fieldValue: => Any, message: Option[String] = None): Requirement = {
115     val condition: () => Boolean = () => {
116       val value = fieldValue
117       Option(value).isDefined && value != None
118     }
119     validateField(fieldName, "mandatory", condition(), message.getOrElse(s"$fieldName is mandatory"))
120   }
121 
122   // OptionWithParsers -> .getValidated
123   def requirePresent(fieldName: String, fieldValue: => Option[_], message: Option[String] = None): Requirement = {
124     validateField(fieldName, "mandatory", fieldValue.nonEmpty, message.getOrElse(s"$fieldName should not be empty"))
125   }
126 
127   // StringWithParsers -> .toValidHTML
128   def validateUserInput(fieldName: String, fieldValue: => String, message: Option[String]): Requirement = {
129     val condition: () => Boolean = () => {
130       new Cleaner(Safelist.none()).isValid(Jsoup.parse(fieldValue))
131     }
132     validateField(fieldName, "invalid_content", condition(), message.getOrElse(s"$fieldName is not a valid user input"))
133   }
134 
135   // To be replaced with OptionWithParsers -> .getValidated >>= StringWithParsers -> .toValidHTML
136   def validateOptionalUserInput(
137     fieldName: String,
138     fieldValue: => Option[String],
139     message: Option[String]
140   ): Requirement = {
141     val condition: () => Boolean = () => {
142       fieldValue.forall(value => new Cleaner(Safelist.none()).isValid(Jsoup.parse(value)))
143     }
144     validateField(fieldName, "invalid_content", condition(), message.getOrElse(s"$fieldName is not a valid user input"))
145   }
146 
147   // StringWithParsers -> .toSlug
148   def requireValidSlug(
149     fieldName: String,
150     fieldValue: => Option[String],
151     message: Option[String] = None
152   ): Requirement = {
153     validateField(
154       fieldName,
155       "invalid_slug",
156       fieldValue.getOrElse("") == SlugHelper.apply(fieldValue.getOrElse("")),
157       message.getOrElse(s"$fieldName should not be empty")
158     )
159   }
160 
161   // SeqWithParsers -> .toEmpty
162   def requireEmpty(fieldName: String, fieldValue: => Seq[_], message: Option[String] = None): Requirement = {
163     validateField(fieldName, "non_empty", fieldValue.isEmpty, message.getOrElse(s"$fieldName should be empty"))
164   }
165 
166   def requireNotPresent(fieldName: String, fieldValue: => Option[_], message: Option[String] = None): Requirement = {
167     validateField(fieldName, "non_empty", fieldValue.isEmpty, message.getOrElse(s"$fieldName should be empty"))
168   }
169 
170   // AnyWithParsers -> .isOneOf
171   def validChoices[T](
172     fieldName: String,
173     message: Option[String] = None,
174     userChoices: Seq[T],
175     validChoices: Seq[T]
176   ): Requirement = {
177     val condition: () => Boolean = () => {
178       userChoices.forall(validChoices.contains)
179     }
180     validateField(fieldName, "invalid_value", condition(), message.getOrElse(s"$fieldName is not valid"))
181   }
182 
183   // BirthDate -> .validatedAge
184   def validateAge(fieldName: String, userDateInput: Option[LocalDate], message: Option[String] = None): Requirement = {
185     val condition: Boolean =
186       userDateInput
187         .map(BirthDate(_))
188         .forall(_.isBetween(minAgeWithLegalConsent, maxAge))
189     validateField(
190       fieldName,
191       "invalid_age",
192       condition,
193       message.getOrElse(s"Invalid date: age must be between $minAgeWithLegalConsent and $maxAge")
194     )
195   }
196 
197   // BirthDate -> .validateLegalConsent
198   def validateLegalConsent(
199     fieldName: String,
200     userDateInput: LocalDate,
201     userLegalConsent: Option[Boolean],
202     message: Option[String] = None
203   ): Requirement = {
204     val condition: Boolean =
205       LocalDate.now().minusYears(maxAgeWithLegalConsent).plusDays(1).isAfter(userDateInput) ||
206         BirthDate(userDateInput).isBetween(minAgeWithLegalConsent, maxAgeWithLegalConsent) &&
207           userLegalConsent.contains(true)
208     validateField(fieldName, "legal_consent", condition, message.getOrElse(s"Field $fieldName must be approved."))
209   }
210 
211   def validateSort[T <: ElasticsearchFieldName](
212     fieldName: String
213   )(sort: T)(implicit stringEnum: StringEnum[T]): Requirement = {
214     val choices = stringEnum.values.filter(_.sortable)
215     Validation.validChoices(
216       fieldName = fieldName,
217       message = Some(s"Invalid sort. Got $sort but expected one of: ${choices.mkString("\"", "\", \"", "\"")}"),
218       Seq(sort),
219       choices
220     )
221   }
222 
223   def validateUploadFileName(fileName: String): Requirement = {
224     validateField(
225       "filename",
226       "invalid_filename",
227       uploadFileNameRegex.matches(fileName),
228       s"File name ${fileName} is invalid. The file name should only contains letters, numbers, hyphen, dot or underscore"
229     )
230   }
231 
232   final case class BirthDate(val birthDate: LocalDate) extends AnyVal {
233 
234     def isBetween(inclusiveMin: Int, exclusiveMax: Int): Boolean = {
235       LocalDate.now().minusYears(exclusiveMax).isBefore(birthDate) &&
236       LocalDate.now().minusYears(inclusiveMin).plusDays(1).isAfter(birthDate)
237     }
238 
239     def validatedAge(fieldName: String, message: Option[String] = None): ValidatedNec[ValidationError, BirthDate] =
240       if (isBetween(minAgeWithLegalConsent, maxAge))
241         this.validNec
242       else
243         ValidationError(
244           fieldName,
245           "invalid_age",
246           message.orElse(Some(s"Invalid date: age must be between $minAgeWithLegalConsent and $maxAge"))
247         ).invalidNec
248 
249     def validatedLegalConsent(
250       fieldName: String,
251       userLegalConsent: Option[Boolean]
252     ): ValidatedNec[ValidationError, BirthDate] =
253       if (LocalDate.now().minusYears(maxAgeWithLegalConsent).plusDays(1).isAfter(birthDate) ||
254           isBetween(minAgeWithLegalConsent, maxAgeWithLegalConsent) &&
255           userLegalConsent.contains(true))
256         this.validNec
257       else
258         ValidationError(
259           fieldName,
260           "legal_consent",
261           Some(s"${birthDate.toString} does not fit legal consent requirements")
262         ).invalidNec
263   }
264 
265   object BirthDate {
266 
267     def fromAge(age: Int): BirthDate =
268       BirthDate(DateHelper.computeBirthDate(age))
269   }
270 
271   implicit class LocalDateExt(val t: LocalDate) extends AnyVal {
272     def elapsedYears: Int = LocalDate.now().getYear() - t.getYear()
273   }
274 
275   implicit val birthDateDecoder: Decoder[BirthDate] = Decoder.decodeLocalDate.emap { t =>
276     if (minAgeWithLegalConsent until maxAge contains (t.elapsedYears))
277       Right(BirthDate(t))
278     else
279       Left(s"Invalid date: age must be between $minAgeWithLegalConsent and $maxAge")
280   }
281   implicit val birthDateEncoder: Encoder[BirthDate] = Encoder.encodeLocalDate.contramap(_.birthDate)
282 
283   final case class NonEmptyType[T](elem: T) extends AnyVal
284 
285   implicit class EmptyableWithParsers[A <: { def isEmpty: Boolean }](elem: A) {
286 
287     def toEmpty(fieldName: String, message: Option[String] = None): ValidatedNec[ValidationError, Unit] =
288       if (elem.isEmpty)
289         ().validNec
290       else
291         ValidationError(fieldName, "non_empty", message.orElse(Some("Element was not empty"))).invalidNec
292 
293     def toNonEmpty(fieldName: String, message: Option[String] = None): ValidatedNec[ValidationError, NonEmptyType[A]] =
294       if (elem.isEmpty)
295         ValidationError(fieldName, "empty", message.orElse(Some("Element was empty"))).invalidNec
296       else
297         NonEmptyType[A](elem).validNec
298   }
299 
300   final case class SeqSubset[A](values: Iterable[A], superset: Set[A])
301 
302   implicit class IterableWithParsers[A](it: Iterable[A]) {
303 
304     private lazy val valuesAsSet = it.toSet
305 
306     def toEmpty(fieldName: String, message: Option[String]): ValidatedNec[ValidationError, Nil.type] =
307       it match {
308         case Nil => Nil.validNec
309         case _ =>
310           ValidationError(fieldName, "empty_seq", message.orElse(Some("Iterable was not empty"))).invalidNec
311       }
312 
313     def toSubsetOf(choices: Set[A]): ValidatedNec[ValidationError, SeqSubset[A]] =
314       choices &~ valuesAsSet match {
315         case Nil =>
316           SeqSubset(it, choices).validNec
317         case rejections =>
318           ValidationError("values", s"Values ${rejections.mkString(",")} are not allowed").invalidNec
319       }
320 
321     @SuppressWarnings(Array("org.wartremover.warts.ListUnapply"))
322     def toNel(fieldName: String, key: String, message: Option[String]): ValidatedNec[ValidationError, Nes[A]] =
323       it match {
324         case head :: next =>
325           Nes(head, next).validNec
326         case _ =>
327           ValidationError(fieldName, key, Some(s"$fieldName must not be empty")).invalidNec
328       }
329   }
330 
331   final case class OneOf[A](value: A, allowedValues: Iterable[A])
332 
333   implicit class AnyWithParsers[A](val value: A) extends AnyVal {
334 
335     def toOneOf(
336       choices: Iterable[A],
337       fieldName: String,
338       message: Option[String] = None
339     ): ValidatedNec[ValidationError, OneOf[A]] =
340       if (choices.exists(_ == value)) OneOf(value, choices).validNec
341       else
342         ValidationError(fieldName, message.getOrElse(s"Value $value is not one of ${choices.mkString(",")}")).invalidNec
343 
344     def equalsValidated(other: A, fieldName: String, key: String = "not_equal", message: Option[String] = None)(
345       implicit E: Eq[A]
346     ): ValidatedNec[ValidationError, A] =
347       Either.cond(value === other, value, ValidationError(fieldName, key, message)).toValidatedNec
348 
349     def predicateValidated(
350       predicate: A => Boolean,
351       fieldName: String,
352       key: String,
353       message: Option[String] = None
354     ): ValidatedNec[ValidationError, A] =
355       Either.cond(predicate(value), value, ValidationError(fieldName, key, message)).toValidatedNec
356   }
357 
358   implicit class ElasticsearchFieldNameWithParsers[T <: ElasticsearchFieldName](val value: T) extends AnyVal {
359 
360     def sortValidated(fieldName: String, sort: T)(implicit E: StringEnum[T]): ValidatedNec[ValidationError, OneOf[T]] =
361       sort.toOneOf(E.values.filter(_.sortable), fieldName)
362   }
363 
364   final case class StringWithMinLength(value: String, minLength: Int)
365 
366   final case class StringWithMaxLength(value: String, maxLength: Int)
367 
368   final case class NonEmptyString(value: String) extends AnyVal
369 
370   final case class ValidHtml()
371   object ValidHtml {
372     @inline
373     @deprecated("There is no guarantee the parameter is html safe", since = "2023-09-20")
374     def fromStringUnsafe(t: String): String Refined ValidHtml = Refined.unsafeApply(t)
375   }
376 
377   implicit def validateHtml: Validate.Plain[String, ValidHtml] =
378     Validate.fromPredicate(
379       t => new Cleaner(Safelist.none()).isValid(Jsoup.parse(t)),
380       _ => "invalid user input",
381       ValidHtml()
382     )
383 
384   type Name = String Refined (ValidHtml And NonEmpty)
385 
386   final case class Email(value: String) extends AnyVal
387 
388   implicit val emailDecoder: Decoder[Email] = Decoder.decodeString.emap {
389     case t if isEmail(t) => Right(Email(t))
390     case _               => Left("Malformed email")
391   }
392   implicit val emailEncoder: Encoder[Email] = Encoder.encodeString.contramap(_.value)
393 
394   final case class Password(value: String) extends AnyVal
395 
396   implicit val passwordDecoder: Decoder[Password] = Decoder.decodeString.emap {
397     case t if passwordRegex.matches(t) => Right(Password(t))
398     case _ =>
399       Left("password must be at least 8 characters long including 1 figure, 1 uppercase and 1 special characters")
400   }
401   implicit val passwordEncoder: Encoder[Password] = Encoder.encodeString.contramap(_.value)
402 
403   final case class Slug()
404   object Slug {
405     @inline
406     @deprecated("There is no guarantee the parameter is a valid slug", since = "2023-09-20")
407     def fromStringUnsafe(t: String): String Refined Slug = Refined.unsafeApply(t)
408   }
409 
410   implicit val validateSlug: Validate.Plain[String, Slug] =
411     Validate.fromPredicate(
412       t => validateHtml.isValid(t) && SlugHelper.apply(t) === t,
413       t => s"${t} is not a valid slug",
414       Slug()
415     )
416 
417   final case class PostalCode(value: String) extends AnyVal
418 
419   implicit val postalCodeDecoder: Decoder[PostalCode] = Decoder.decodeString.emap {
420     case t if (postalCodeRegex.findFirstIn(t).isDefined) => Right(PostalCode(t))
421     case t                                               => Left(s"Invalid postal code $t. Must be formatted '01234'")
422   }
423   implicit val postalCodeEncoder: Encoder[PostalCode] = Encoder.encodeString.contramap(_.value)
424 
425   final case class Colour()
426   implicit val validateColour: Validate.Plain[String, Colour] =
427     Validate.fromPredicate(colorRegex.matches(_), t => s"$t is not a valid colour", Colour())
428   object Colour {
429     @inline
430     @deprecated("There is no guarantee the parameter is a valid colour", since = "2023-09-20")
431     def fromStringUnsafe(t: String): String Refined Colour = Refined.unsafeApply(t)
432 
433     // NOTE: cannot check at compile-time that our string is a valid colour:
434     // https://github.com/fthomas/refined/blob/master/modules/docs/macro_pitfalls.md#solution-2
435     @nowarn("cat=deprecation")
436     val black: String Refined Colour = Colour.fromStringUnsafe("#000000")
437   }
438 
439   final case object EmptyString
440 
441   implicit class StringWithParsers(val value: String) extends AnyVal {
442 
443     def toEmpty(fieldName: String, message: Option[String] = None): ValidatedNec[ValidationError, EmptyString.type] =
444       value match {
445         case "" => EmptyString.validNec
446         case _ =>
447           ValidationError(fieldName, "empty_string", message.orElse(Some("String was not empty"))).invalidNec
448       }
449 
450     def withMinLength(
451       minLength: Int,
452       fieldName: String,
453       language: Option[Language] = None,
454       message: Option[String] = None
455     ): ValidatedNec[ValidationError, StringWithMinLength] =
456       if (value.length >= minLength)
457         StringWithMinLength(value, minLength).validNec
458       else {
459         val forLanguage = language.fold("")(l => s" for the language : ${l.value}")
460         ValidationError(
461           fieldName,
462           "too_short",
463           message.orElse(Some(s"$fieldName should not be shorter than $minLength$forLanguage"))
464         ).invalidNec
465       }
466 
467     def withMaxLength(
468       maxLength: Int,
469       fieldName: String,
470       language: Option[Language] = None,
471       message: Option[String] = None
472     ): ValidatedNec[ValidationError, StringWithMaxLength] =
473       if (value.length <= maxLength)
474         StringWithMaxLength(value, maxLength).validNec
475       else {
476         val forLanguage = language.fold("")(l => s" for the language : ${l.value}")
477         ValidationError(
478           fieldName,
479           "too_long",
480           message.orElse(Some(s"$fieldName should not be longer than $maxLength$forLanguage"))
481         ).invalidNec
482       }
483 
484     def toNonEmpty(fieldName: String, message: Option[String] = None): ValidatedNec[ValidationError, NonEmptyString] =
485       if (value.nonEmpty)
486         NonEmptyString(value).validNec
487       else
488         ValidationError(fieldName, "empty", message.orElse(Some(s"$fieldName should not be an empty string"))).invalidNec
489 
490     def toSanitizedInput(
491       fieldName: String,
492       message: Option[String] = None
493     ): ValidatedNec[ValidationError, String Refined ValidHtml] =
494       if (new Cleaner(Safelist.none()).isValid(Jsoup.parse(value)))
495         ValidHtml.fromStringUnsafe(value).validNec
496       else
497         ValidationError("user_input", "User provided invalid HTML").invalidNec
498 
499     def toEmail: ValidatedNec[ValidationError, Email] =
500       value
501         .toSanitizedInput("email")
502         .flatMap(
503           v =>
504             if (isEmail(v.value))
505               Email(v.value).validNec
506             else
507               ValidationError("email", "invalid_email", Some("email is not a valid email")).invalidNec
508         )
509 
510     def toPassword: ValidatedNec[ValidationError, Password] =
511       value
512         .toSanitizedInput("password")
513         .flatMap(
514           v =>
515             if (passwordRegex.matches(v.value))
516               Password(v.value).validNec
517             else
518               ValidationError(
519                 "password",
520                 "invalid_password",
521                 Some(
522                   "password must be at least 8 characters long including 1 figure, 1 uppercase and 1 special characters"
523                 )
524               ).invalidNec
525         )
526 
527     def toSlug(message: Option[String] = None): ValidatedNec[ValidationError, String Refined Slug] =
528       value
529         .toSanitizedInput("slug")
530         .flatMap(
531           v =>
532             if (SlugHelper.apply(v.value) === v.value)
533               Slug.fromStringUnsafe(v.value).validNec
534             else
535               ValidationError("slug", s"${v.value} is not a valid slug").invalidNec
536         )
537 
538     def toValidAge(message: Option[String] = None): ValidatedNec[ValidationError, Int] =
539       Try(value.toInt) match {
540         case Success(age) if age >= minLegalAgeForExternalProposal => age.validNec
541         case Success(_) =>
542           ValidationError(
543             "age",
544             "invalid_age",
545             message.orElse(Some(s"$value must be over $minLegalAgeForExternalProposal"))
546           ).invalidNec
547         case Failure(_) => ValidationError("age", "invalid_format", Some(s"'$value' is not a valid number")).invalidNec
548       }
549 
550     def toPostalCode: ValidatedNec[ValidationError, PostalCode] =
551       if (postalCodeRegex.findFirstIn(value).isDefined)
552         PostalCode(value).validNec
553       else
554         ValidationError(
555           "postalCode",
556           "invalid_postal_code",
557           Some(s"Invalid postal code $value. Must be formatted '01234'")
558         ).invalidNec
559 
560     def toColour(
561       fieldName: String,
562       message: Option[String] = None
563     ): ValidatedNec[ValidationError, String Refined Colour] =
564       if (colorRegex.matches(value)) Colour.fromStringUnsafe(value).validNec
565       else ValidationError(fieldName, "invalid_colour", message).invalidNec
566   }
567 
568   implicit class OptionWithParsers[A](val opt: Option[A]) {
569 
570     def getValidated(
571       fieldName: String,
572       key: Option[String] = None,
573       message: Option[String] = None
574     ): ValidatedNec[ValidationError, A] =
575       opt match {
576         case Some(value) => value.validNec
577         case None        => ValidationError(fieldName, key.getOrElse("value_absent"), message).invalidNec
578       }
579 
580     def getNone(fieldName: String, message: Option[String] = None): ValidatedNec[ValidationError, Unit] =
581       opt match {
582         case Some(value) => ValidationError(fieldName, "value_present", message).invalidNec
583         case None        => ().validNec
584       }
585   }
586 
587   implicit class LongWithParsers(val value: Long) {
588     def max(fieldName: String, maxValue: Long, message: Option[String] = None): ValidatedNec[ValidationError, Long] = {
589       if (value > maxValue) {
590         ValidationError(fieldName, "exceeds_max", message.orElse(Some(s"$fieldName should be lower than $maxValue"))).invalidNec
591       } else {
592         value.validNec
593       }
594     }
595   }
596 
597   implicit class MapWithParser(val map: Map[String, String]) extends AnyVal {
598     def getNonEmptyString(fieldName: String, message: Option[String]): ValidatedNec[ValidationError, NonEmptyString] =
599       map.get(fieldName).getValidated(fieldName, None, message).andThen(_.toNonEmpty(fieldName, message))
600   }
601 }
602 
603 final case class Requirement(field: String, key: String, condition: () => Boolean, message: () => String)
604 
605 trait Validator[T] {
606   def validate(value: T): ValidatedValue[T]
607 }
608 
609 object Validator {
610   def apply[T](validator: T => ValidatedValue[T]): Validator[T] = (value: T) => validator(value)
611 
612   type ValidatedValue[T] = ValidatedNec[ValidationError, T]
613 }
614 
615 final case class ValidationFailedError(errors: Seq[ValidationError]) extends Exception {
616 
617   override def getMessage: String = errors.mkString("[", ",", "]")
618 }
619 
620 object ValidationFailedError {
621 
622   def apply(nec: Nec[ValidationError]): ValidationFailedError =
623     new ValidationFailedError(nec.toList)
624 }
625 
626 final case class ValidationError(field: String, key: String, message: Option[String] = None) {
627 
628   def toThrowable: Throwable = {
629     val errMsg = message.getOrElse(s"$field value '$key' was invalid")
630     new IllegalArgumentException(errMsg)
631   }
632 }
633 
634 object ValidationError {
635 
636   implicit val codec: Codec[ValidationError] = deriveCodec
637 
638   implicit val show: Show[ValidationError] = Show.show(_.toThrowable.toString)
639 }
640 
641 final case class SanitizedHtml(html: String) extends AnyRef
642 
643 object SanitizedHtml {
644 
645   private val cleaner = new Cleaner(Safelist.basic)
646 
647   def fromString(unsafeHtml: String, maxTextLength: Option[Int] = None): Try[SanitizedHtml] = {
648     val sanitized = cleaner.clean(Jsoup.parseBodyFragment(unsafeHtml))
649     maxTextLength match {
650       case Some(maxLength) if sanitized.text().length > maxLength =>
651         Failure(new Error(s"Text exceeded $maxLength characters"))
652       case _ =>
653         Success(new SanitizedHtml(sanitized.body.children.toString))
654     }
655   }
656 }
Line Stmt Id Pos Tree Symbol Tests Code
50 3605 1736 - 1786 Select scala.util.Try.isSuccess org.make.api.user.adminuserapitest,org.make.core.validationtest scala.util.Try.apply[Unit](new jakarta.mail.internet.InternetAddress(str).validate()).isSuccess
50 5378 1740 - 1775 Apply jakarta.mail.internet.InternetAddress.validate org.make.api.user.adminuserapitest,org.make.core.validationtest new jakarta.mail.internet.InternetAddress(str).validate()
52 4984 1825 - 1895 Select scala.collection.StringOps.r org.make.api.avro.avrocompatibilitytest,org.make.api.technical.webflow.desertest,org.make.api.idea.ideasearchenginetest,org.make.core.operation.operationofquestiontest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest scala.Predef.augmentString("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9 ])(?!.* ).{8,}$").r
52 1681 1825 - 1893 Literal <nosymbol> org.make.api.avro.avrocompatibilitytest,org.make.api.technical.webflow.desertest,org.make.core.operation.operationofquestiontest,org.make.api.idea.ideasearchenginetest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.streamutilstest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9 ])(?!.* ).{8,}$"
54 1782 1931 - 1952 Select scala.collection.StringOps.r org.make.api.avro.avrocompatibilitytest,org.make.api.technical.webflow.desertest,org.make.api.idea.ideasearchenginetest,org.make.core.operation.operationofquestiontest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.streamutilstest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest scala.Predef.augmentString("^#[0-9a-fA-F]{6}$").r
54 4014 1931 - 1950 Literal <nosymbol> org.make.api.avro.avrocompatibilitytest,org.make.core.operation.operationofquestiontest,org.make.api.technical.webflow.desertest,org.make.api.idea.ideasearchenginetest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest "^#[0-9a-fA-F]{6}$"
56 5227 1993 - 2003 Literal <nosymbol> org.make.api.avro.avrocompatibilitytest,org.make.core.operation.operationofquestiontest,org.make.api.idea.ideasearchenginetest,org.make.api.technical.webflow.desertest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest "^\\d{5}$"
56 3341 1993 - 2005 Select scala.collection.StringOps.r org.make.api.avro.avrocompatibilitytest,org.make.api.idea.ideasearchenginetest,org.make.core.operation.operationofquestiontest,org.make.api.technical.webflow.desertest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest scala.Predef.augmentString("^\\d{5}$").r
58 1371 2050 - 2067 Literal <nosymbol> org.make.core.operation.operationofquestiontest,org.make.api.idea.ideasearchenginetest,org.make.api.avro.avrocompatibilitytest,org.make.api.technical.webflow.desertest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest "[a-zA-Z0-9_.-]+"
58 5643 2050 - 2069 Select scala.collection.StringOps.r org.make.core.operation.operationofquestiontest,org.make.api.technical.webflow.desertest,org.make.api.avro.avrocompatibilitytest,org.make.api.idea.ideasearchenginetest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest scala.Predef.augmentString("[a-zA-Z0-9_.-]+").r
60 3611 2097 - 2189 Literal <nosymbol> org.make.core.operation.operationofquestiontest,org.make.api.idea.ideasearchenginetest,org.make.api.avro.avrocompatibilitytest,org.make.api.technical.webflow.desertest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.streamutilstest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest "^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$"
60 1613 2097 - 2191 Select scala.collection.StringOps.r org.make.api.avro.avrocompatibilitytest,org.make.api.technical.webflow.desertest,org.make.api.idea.ideasearchenginetest,org.make.core.operation.operationofquestiontest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest scala.Predef.augmentString("^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$").r
62 4829 2229 - 2230 Literal <nosymbol> org.make.core.operation.operationofquestiontest,org.make.api.technical.webflow.desertest,org.make.api.idea.ideasearchenginetest,org.make.api.avro.avrocompatibilitytest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest 8
63 2750 2275 - 2277 Literal <nosymbol> org.make.core.operation.operationofquestiontest,org.make.api.technical.webflow.desertest,org.make.api.idea.ideasearchenginetest,org.make.api.avro.avrocompatibilitytest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.streamutilstest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest 18
64 1929 2322 - 2324 Literal <nosymbol> org.make.api.avro.avrocompatibilitytest,org.make.api.technical.webflow.desertest,org.make.core.operation.operationofquestiontest,org.make.api.idea.ideasearchenginetest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.streamutilstest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest 16
65 5238 2345 - 2348 Literal <nosymbol> org.make.core.operation.operationofquestiontest,org.make.api.idea.ideasearchenginetest,org.make.api.technical.webflow.desertest,org.make.api.avro.avrocompatibilitytest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.streamutilstest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest 120
67 3125 2439 - 2439 TypeApply scala.Predef.$conforms scala.Predef.$conforms[Option[org.make.core.Requirement]]
67 5328 2417 - 2451 Apply org.make.core.Validation.validate Validation.this.validate((maybeRequire.flatten[org.make.core.Requirement](scala.Predef.$conforms[Option[org.make.core.Requirement]]): _*))
67 1232 2426 - 2446 ApplyToImplicitArgs scala.collection.IterableOps.flatten maybeRequire.flatten[org.make.core.Requirement](scala.Predef.$conforms[Option[org.make.core.Requirement]])
71 3140 2600 - 2956 Apply scala.collection.IterableOps.flatMap org.make.api.technical.elasticsearch.proposalindexationstreamtest,org.make.core.proposal.searchquerytest require.flatMap[org.make.core.ValidationError](((requirement: org.make.core.Requirement) => scala.util.Try.apply[Boolean](requirement.condition.apply()) match { case (exception: Throwable): scala.util.Failure[Boolean]((e @ _)) => scala.`package`.Seq.apply[org.make.core.ValidationError](ValidationError.apply(requirement.field, requirement.key, scala.Option.apply[String](e.getMessage()))) case (value: Boolean): scala.util.Success[Boolean](false) => scala.`package`.Seq.apply[org.make.core.ValidationError](ValidationError.apply(requirement.field, requirement.key, scala.Option.apply[String](requirement.message.apply()))) case _ => scala.`package`.Nil }))
72 3566 2643 - 2666 Apply scala.Function0.apply org.make.api.technical.elasticsearch.proposalindexationstreamtest,org.make.core.proposal.searchquerytest requirement.condition.apply()
72 1621 2639 - 2667 Apply scala.util.Try.apply org.make.api.technical.elasticsearch.proposalindexationstreamtest,org.make.core.proposal.searchquerytest scala.util.Try.apply[Boolean](requirement.condition.apply())
74 5182 2769 - 2789 Apply scala.Option.apply scala.Option.apply[String](e.getMessage())
74 1243 2713 - 2791 Apply scala.collection.SeqFactory.Delegate.apply scala.`package`.Seq.apply[org.make.core.ValidationError](ValidationError.apply(requirement.field, requirement.key, scala.Option.apply[String](e.getMessage())))
74 3132 2717 - 2790 Apply org.make.core.ValidationError.apply ValidationError.apply(requirement.field, requirement.key, scala.Option.apply[String](e.getMessage()))
74 1938 2776 - 2788 Apply java.lang.Throwable.getMessage e.getMessage()
74 2889 2752 - 2767 Select org.make.core.Requirement.key requirement.key
74 4767 2733 - 2750 Select org.make.core.Requirement.field requirement.field
76 3576 2872 - 2887 Select org.make.core.Requirement.key org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.core.validationtest requirement.key
76 4775 2889 - 2918 Apply scala.Option.apply org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.core.validationtest scala.Option.apply[String](requirement.message.apply())
76 1437 2896 - 2917 Apply scala.Function0.apply org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.core.validationtest requirement.message.apply()
76 2023 2833 - 2920 Apply scala.collection.SeqFactory.Delegate.apply org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.core.validationtest scala.`package`.Seq.apply[org.make.core.ValidationError](ValidationError.apply(requirement.field, requirement.key, scala.Option.apply[String](requirement.message.apply())))
76 2899 2837 - 2919 Apply org.make.core.ValidationError.apply org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.core.validationtest ValidationError.apply(requirement.field, requirement.key, scala.Option.apply[String](requirement.message.apply()))
76 5632 2853 - 2870 Select org.make.core.Requirement.field org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.core.validationtest requirement.field
77 5189 2939 - 2942 Select scala.Nil org.make.api.technical.elasticsearch.proposalindexationstreamtest,org.make.core.proposal.searchquerytest scala.`package`.Nil
80 1449 2961 - 2961 Literal <nosymbol> org.make.api.technical.elasticsearch.proposalindexationstreamtest,org.make.core.proposal.searchquerytest ()
80 1165 2965 - 2982 Select scala.collection.IterableOnceOps.nonEmpty org.make.api.technical.elasticsearch.proposalindexationstreamtest,org.make.core.proposal.searchquerytest messages.nonEmpty
80 4786 2961 - 2961 Block <nosymbol> org.make.api.technical.elasticsearch.proposalindexationstreamtest,org.make.core.proposal.searchquerytest ()
81 4391 2992 - 3029 Throw <nosymbol> org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.core.validationtest throw ValidationFailedError.apply(messages)
81 3673 2992 - 3029 Block <nosymbol> org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.core.validationtest throw ValidationFailedError.apply(messages)
86 3018 3151 - 3206 Apply org.make.core.Requirement.apply org.make.api.technical.elasticsearch.proposalindexationstreamtest,org.make.core.proposal.searchquerytest Requirement.apply(field, key, (() => condition), (() => message))
97 2033 3430 - 3475 Apply scala.Option.getOrElse scala.Option.apply[String](fieldValue).map[Int](((x$1: String) => x$1.length())).getOrElse[Int](0)
100 5171 3508 - 3534 Apply scala.Int.<= computeLength.<=(maxLength)
103 3027 3546 - 3757 Apply org.make.core.Requirement.apply Requirement.apply(field, "too_long", (() => isValid), (() => if (isValid) "" else message.map[String](((x$2: Int => String) => x$2.apply(computeLength))).getOrElse[String](("".+(field).+(" should not be longer than ").+(maxLength): String))))
103 3095 3565 - 3575 Literal <nosymbol> "too_long"
105 4653 3629 - 3631 Block <nosymbol> ""
105 1176 3629 - 3631 Literal <nosymbol> ""
107 3683 3667 - 3683 Apply scala.Function1.apply x$2.apply(computeLength)
107 1615 3655 - 3742 Apply scala.Option.getOrElse message.map[String](((x$2: Int => String) => x$2.apply(computeLength))).getOrElse[String](("".+(field).+(" should not be longer than ").+(maxLength): String))
107 4731 3655 - 3742 Block scala.Option.getOrElse message.map[String](((x$2: Int => String) => x$2.apply(computeLength))).getOrElse[String](("".+(field).+(" should not be longer than ").+(maxLength): String))
117 5179 4103 - 4116 Apply scala.Any.!= value.!=(scala.None)
117 1034 4112 - 4116 Select scala.None scala.None
117 3272 4076 - 4116 Apply scala.Boolean.&& scala.Option.apply[Any](value).isDefined.&&(value.!=(scala.None))
119 1327 4152 - 4163 Literal <nosymbol> "mandatory"
119 3513 4178 - 4223 Apply scala.Option.getOrElse message.getOrElse[String](("".+(fieldName).+(" is mandatory"): String))
119 4664 4165 - 4176 Apply scala.Function0.apply condition.apply()
119 1555 4127 - 4224 Apply org.make.core.Validation.validateField Validation.this.validateField(fieldName, "mandatory", condition.apply(), message.getOrElse[String](("".+(fieldName).+(" is mandatory"): String)))
124 5185 4389 - 4501 Apply org.make.core.Validation.validateField Validation.this.validateField(fieldName, "mandatory", fieldValue.nonEmpty, message.getOrElse[String](("".+(fieldName).+(" should not be empty"): String)))
124 2974 4427 - 4446 Select scala.Option.nonEmpty fieldValue.nonEmpty
124 1045 4448 - 4500 Apply scala.Option.getOrElse message.getOrElse[String](("".+(fieldName).+(" should not be empty"): String))
124 4923 4414 - 4425 Literal <nosymbol> "mandatory"
130 1160 4740 - 4763 Apply org.jsoup.Jsoup.parse org.jsoup.Jsoup.parse(fieldValue)
130 4607 4703 - 4764 Apply org.jsoup.safety.Cleaner.isValid new org.jsoup.safety.Cleaner(org.jsoup.safety.Safelist.none()).isValid(org.jsoup.Jsoup.parse(fieldValue))
130 3201 4715 - 4730 Apply org.jsoup.safety.Safelist.none org.jsoup.safety.Safelist.none()
132 2818 4775 - 4891 Apply org.make.core.Validation.validateField Validation.this.validateField(fieldName, "invalid_content", condition.apply(), message.getOrElse[String](("".+(fieldName).+(" is not a valid user input"): String)))
132 4720 4832 - 4890 Apply scala.Option.getOrElse message.getOrElse[String](("".+(fieldName).+(" is not a valid user input"): String))
132 1562 4819 - 4830 Apply scala.Function0.apply condition.apply()
132 3523 4800 - 4817 Literal <nosymbol> "invalid_content"
142 720 5223 - 5238 Apply org.jsoup.safety.Safelist.none org.jsoup.safety.Safelist.none()
142 1097 5184 - 5268 Apply scala.Option.forall fieldValue.forall(((value: String) => new org.jsoup.safety.Cleaner(org.jsoup.safety.Safelist.none()).isValid(org.jsoup.Jsoup.parse(value))))
142 3210 5211 - 5267 Apply org.jsoup.safety.Cleaner.isValid new org.jsoup.safety.Cleaner(org.jsoup.safety.Safelist.none()).isValid(org.jsoup.Jsoup.parse(value))
142 5135 5248 - 5266 Apply org.jsoup.Jsoup.parse org.jsoup.Jsoup.parse(value)
144 1509 5336 - 5394 Apply scala.Option.getOrElse message.getOrElse[String](("".+(fieldName).+(" is not a valid user input"): String))
144 4727 5279 - 5395 Apply org.make.core.Validation.validateField Validation.this.validateField(fieldName, "invalid_content", condition.apply(), message.getOrElse[String](("".+(fieldName).+(" is not a valid user input"): String)))
144 2555 5323 - 5334 Apply scala.Function0.apply condition.apply()
144 4474 5304 - 5321 Literal <nosymbol> "invalid_content"
153 2676 5577 - 5773 Apply org.make.core.Validation.validateField Validation.this.validateField(fieldName, "invalid_slug", fieldValue.getOrElse[String]("").==(SlugHelper.apply(fieldValue.getOrElse[String](""))), message.getOrElse[String](("".+(fieldName).+(" should not be empty"): String)))
155 2751 5615 - 5629 Literal <nosymbol> "invalid_slug"
156 1106 5637 - 5707 Apply java.lang.Object.== fieldValue.getOrElse[String]("").==(SlugHelper.apply(fieldValue.getOrElse[String]("")))
156 5146 5682 - 5706 Apply scala.Option.getOrElse fieldValue.getOrElse[String]("")
156 3368 5665 - 5707 Apply org.make.core.SlugHelper.apply SlugHelper.apply(fieldValue.getOrElse[String](""))
156 1029 5658 - 5660 Literal <nosymbol> ""
157 4484 5715 - 5767 Apply scala.Option.getOrElse message.getOrElse[String](("".+(fieldName).+(" should not be empty"): String))
163 5002 5963 - 5981 Select scala.collection.SeqOps.isEmpty fieldValue.isEmpty
163 1517 5950 - 5961 Literal <nosymbol> "non_empty"
163 1041 5925 - 6032 Apply org.make.core.Validation.validateField Validation.this.validateField(fieldName, "non_empty", fieldValue.isEmpty, message.getOrElse[String](("".+(fieldName).+(" should be empty"): String)))
163 2760 5983 - 6031 Apply scala.Option.getOrElse message.getOrElse[String](("".+(fieldName).+(" should be empty"): String))
167 1117 6218 - 6266 Apply scala.Option.getOrElse message.getOrElse[String](("".+(fieldName).+(" should be empty"): String))
167 3046 6198 - 6216 Select scala.Option.isEmpty fieldValue.isEmpty
167 4604 6160 - 6267 Apply org.make.core.Validation.validateField Validation.this.validateField(fieldName, "non_empty", fieldValue.isEmpty, message.getOrElse[String](("".+(fieldName).+(" should be empty"): String)))
167 4325 6185 - 6196 Literal <nosymbol> "non_empty"
178 1497 6507 - 6548 Apply scala.collection.IterableOnceOps.forall userChoices.forall(((elem: Any) => validChoices.contains[Any](elem)))
178 2689 6526 - 6547 Apply scala.collection.SeqOps.contains validChoices.contains[Any](elem)
180 4686 6584 - 6599 Literal <nosymbol> "invalid_value"
180 4338 6559 - 6660 Apply org.make.core.Validation.validateField Validation.this.validateField(fieldName, "invalid_value", condition.apply(), message.getOrElse[String](("".+(fieldName).+(" is not valid"): String)))
180 2769 6601 - 6612 Apply scala.Function0.apply condition.apply()
180 975 6614 - 6659 Apply scala.Option.getOrElse message.getOrElse[String](("".+(fieldName).+(" is not valid"): String))
187 3141 6880 - 6892 Apply org.make.core.Validation.BirthDate.apply org.make.core.validationtest Validation.this.BirthDate.apply(x$3)
188 2617 6910 - 6953 Apply org.make.core.Validation.BirthDate.isBetween org.make.core.validationtest x$4.isBetween(Validation.this.minAgeWithLegalConsent, Validation.this.maxAge)
188 1505 6853 - 6954 Apply scala.Option.forall org.make.core.validationtest userDateInput.map[org.make.core.Validation.BirthDate](((x$3: java.time.LocalDate) => Validation.this.BirthDate.apply(x$3))).forall(((x$4: org.make.core.Validation.BirthDate) => x$4.isBetween(Validation.this.minAgeWithLegalConsent, Validation.this.maxAge)))
188 4612 6946 - 6952 Select org.make.core.Validation.maxAge org.make.core.validationtest Validation.this.maxAge
188 1062 6922 - 6944 Select org.make.core.Validation.minAgeWithLegalConsent org.make.core.validationtest Validation.this.minAgeWithLegalConsent
189 989 6959 - 7132 Apply org.make.core.Validation.validateField org.make.core.validationtest Validation.this.validateField(fieldName, "invalid_age", condition, message.getOrElse[String](("Invalid date: age must be between ".+(Validation.this.minAgeWithLegalConsent).+(" and ").+(Validation.this.maxAge): String)))
191 4860 6997 - 7010 Literal <nosymbol> org.make.core.validationtest "invalid_age"
193 2921 7035 - 7126 Apply scala.Option.getOrElse org.make.core.validationtest message.getOrElse[String](("Invalid date: age must be between ".+(Validation.this.minAgeWithLegalConsent).+(" and ").+(Validation.this.maxAge): String))
205 4131 7416 - 7438 Select scala.Int.toLong org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.api.user.userapitest,org.make.core.validationtest Validation.this.maxAgeWithLegalConsent.toLong
205 4794 7389 - 7613 Apply scala.Boolean.|| org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.api.user.userapitest,org.make.core.validationtest java.time.LocalDate.now().minusYears(Validation.this.maxAgeWithLegalConsent.toLong).plusDays(1L).isAfter(userDateInput).||(Validation.this.BirthDate.apply(userDateInput).isBetween(Validation.this.minAgeWithLegalConsent, Validation.this.maxAgeWithLegalConsent).&&(userLegalConsent.contains[Boolean](true)))
205 3149 7449 - 7450 Literal <nosymbol> org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.api.user.userapitest,org.make.core.validationtest 1L
206 490 7486 - 7613 Apply scala.Boolean.&& org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.api.user.userapitest,org.make.core.validationtest Validation.this.BirthDate.apply(userDateInput).isBetween(Validation.this.minAgeWithLegalConsent, Validation.this.maxAgeWithLegalConsent).&&(userLegalConsent.contains[Boolean](true))
206 4559 7545 - 7567 Select org.make.core.Validation.maxAgeWithLegalConsent org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.api.user.userapitest,org.make.core.validationtest Validation.this.maxAgeWithLegalConsent
206 1260 7521 - 7543 Select org.make.core.Validation.minAgeWithLegalConsent org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.api.user.userapitest,org.make.core.validationtest Validation.this.minAgeWithLegalConsent
207 2628 7582 - 7613 Apply scala.Option.contains org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.api.user.userapitest,org.make.core.validationtest userLegalConsent.contains[Boolean](true)
208 4138 7618 - 7728 Apply org.make.core.Validation.validateField org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.api.user.userapitest,org.make.core.validationtest Validation.this.validateField(fieldName, "legal_consent", condition, message.getOrElse[String](("Field ".+(fieldName).+(" must be approved."): String)))
208 931 7671 - 7727 Apply scala.Option.getOrElse org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.api.user.userapitest,org.make.core.validationtest message.getOrElse[String](("Field ".+(fieldName).+(" must be approved."): String))
208 2754 7643 - 7658 Literal <nosymbol> org.make.api.user.validation.defaultuserregistrationvalidatortest,org.make.api.user.userapitest,org.make.core.validationtest "legal_consent"
214 3156 7914 - 7924 Select org.make.core.elasticsearch.ElasticsearchFieldName.sortable x$5.sortable
214 1385 7889 - 7925 Apply scala.collection.IterableOps.filter stringEnum.values.filter(((x$5: T) => x$5.sortable))
215 499 7930 - 8133 Apply org.make.core.Validation.validChoices Validation.validChoices[T](fieldName, scala.Some.apply[String](("Invalid sort. Got ".+(sort).+(" but expected one of: ").+(choices.mkString("\"", "\", \"", "\"")): String)), scala.`package`.Seq.apply[T](sort), choices)
217 4410 8000 - 8095 Apply scala.Some.apply scala.Some.apply[String](("Invalid sort. Got ".+(sort).+(" but expected one of: ").+(choices.mkString("\"", "\", \"", "\"")): String))
218 2564 8103 - 8112 Apply scala.collection.SeqFactory.Delegate.apply scala.`package`.Seq.apply[T](sort)
224 4149 8207 - 8438 Apply org.make.core.Validation.validateField org.make.core.validationtest Validation.this.validateField("filename", "invalid_filename", Validation.this.uploadFileNameRegex.matches(fileName), ("File name ".+(fileName).+(" is invalid. The file name should only contains letters, numbers, hyphen, dot or underscore"): String))
225 4801 8228 - 8238 Literal <nosymbol> org.make.core.validationtest "filename"
226 3036 8246 - 8264 Literal <nosymbol> org.make.core.validationtest "invalid_filename"
227 790 8272 - 8309 Apply scala.util.matching.Regex.matches org.make.core.validationtest Validation.this.uploadFileNameRegex.matches(fileName)
235 1058 8642 - 8651 Select org.make.core.Validation.BirthDate.birthDate org.make.api.user.userservicetest,org.make.core.validationtest BirthDate.this.birthDate
235 3109 8619 - 8631 Select scala.Int.toLong org.make.api.user.userservicetest,org.make.core.validationtest exclusiveMax.toLong
235 2705 8592 - 8733 Apply scala.Boolean.&& org.make.api.user.userservicetest,org.make.core.validationtest java.time.LocalDate.now().minusYears(exclusiveMax.toLong).isBefore(BirthDate.this.birthDate).&&(java.time.LocalDate.now().minusYears(inclusiveMin.toLong).plusDays(1L).isAfter(BirthDate.this.birthDate))
236 2612 8712 - 8713 Literal <nosymbol> org.make.api.user.userservicetest,org.make.core.validationtest 1L
236 4954 8662 - 8733 Apply java.time.LocalDate.isAfter org.make.api.user.userservicetest,org.make.core.validationtest java.time.LocalDate.now().minusYears(inclusiveMin.toLong).plusDays(1L).isAfter(BirthDate.this.birthDate)
236 4675 8689 - 8701 Select scala.Int.toLong org.make.api.user.userservicetest,org.make.core.validationtest inclusiveMin.toLong
236 509 8723 - 8732 Select org.make.core.Validation.BirthDate.birthDate org.make.api.user.userservicetest,org.make.core.validationtest BirthDate.this.birthDate
240 2167 8867 - 8908 Apply org.make.core.Validation.BirthDate.isBetween org.make.api.user.userservicetest BirthDate.this.isBetween(Validation.this.minAgeWithLegalConsent, Validation.this.maxAge)
240 4262 8901 - 8907 Select org.make.core.Validation.maxAge org.make.api.user.userservicetest Validation.this.maxAge
240 721 8877 - 8899 Select org.make.core.Validation.minAgeWithLegalConsent org.make.api.user.userservicetest Validation.this.minAgeWithLegalConsent
241 4353 8918 - 8931 Block cats.syntax.ValidatedIdOpsBinCompat0.validNec org.make.api.user.userservicetest cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.BirthDate](this).validNec[Nothing]
241 1346 8918 - 8931 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec org.make.api.user.userservicetest cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.BirthDate](this).validNec[Nothing]
243 2995 8951 - 9128 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, "invalid_age", message.orElse[String](scala.Some.apply[String](("Invalid date: age must be between ".+(Validation.this.minAgeWithLegalConsent).+(" and ").+(Validation.this.maxAge): String))))
245 2623 8999 - 9012 Literal <nosymbol> "invalid_age"
246 642 9039 - 9117 Apply scala.Some.apply scala.Some.apply[String](("Invalid date: age must be between ".+(Validation.this.minAgeWithLegalConsent).+(" and ").+(Validation.this.maxAge): String))
246 4963 9024 - 9118 Apply scala.Option.orElse message.orElse[String](scala.Some.apply[String](("Invalid date: age must be between ".+(Validation.this.minAgeWithLegalConsent).+(" and ").+(Validation.this.maxAge): String)))
247 929 8951 - 9139 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "invalid_age", message.orElse[String](scala.Some.apply[String](("Invalid date: age must be between ".+(Validation.this.minAgeWithLegalConsent).+(" and ").+(Validation.this.maxAge): String))))).invalidNec[Nothing]
247 4272 8951 - 9139 Block cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "invalid_age", message.orElse[String](scala.Some.apply[String](("Invalid date: age must be between ".+(Validation.this.minAgeWithLegalConsent).+(" and ").+(Validation.this.maxAge): String))))).invalidNec[Nothing]
253 4625 9368 - 9377 Select org.make.core.Validation.BirthDate.birthDate BirthDate.this.birthDate
253 1356 9357 - 9358 Literal <nosymbol> 1L
253 937 9297 - 9494 Apply scala.Boolean.|| java.time.LocalDate.now().minusYears(Validation.this.maxAgeWithLegalConsent.toLong).plusDays(1L).isAfter(BirthDate.this.birthDate).||(BirthDate.this.isBetween(Validation.this.minAgeWithLegalConsent, Validation.this.maxAgeWithLegalConsent).&&(userLegalConsent.contains[Boolean](true)))
253 2142 9324 - 9346 Select scala.Int.toLong Validation.this.maxAgeWithLegalConsent.toLong
254 3002 9392 - 9494 Apply scala.Boolean.&& BirthDate.this.isBetween(Validation.this.minAgeWithLegalConsent, Validation.this.maxAgeWithLegalConsent).&&(userLegalConsent.contains[Boolean](true))
254 2562 9402 - 9424 Select org.make.core.Validation.minAgeWithLegalConsent Validation.this.minAgeWithLegalConsent
254 653 9426 - 9448 Select org.make.core.Validation.maxAgeWithLegalConsent Validation.this.maxAgeWithLegalConsent
255 3816 9463 - 9494 Apply scala.Option.contains userLegalConsent.contains[Boolean](true)
256 2152 9504 - 9517 Block cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.BirthDate](this).validNec[Nothing]
256 4205 9504 - 9517 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.BirthDate](this).validNec[Nothing]
258 2572 9537 - 9692 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, "legal_consent", scala.Some.apply[String](("".+(BirthDate.this.birthDate.toString()).+(" does not fit legal consent requirements"): String)))
260 1118 9585 - 9600 Literal <nosymbol> "legal_consent"
261 4511 9612 - 9682 Apply scala.Some.apply scala.Some.apply[String](("".+(BirthDate.this.birthDate.toString()).+(" does not fit legal consent requirements"): String))
262 442 9537 - 9703 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "legal_consent", scala.Some.apply[String](("".+(BirthDate.this.birthDate.toString()).+(" does not fit legal consent requirements"): String)))).invalidNec[Nothing]
262 3828 9537 - 9703 Block cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "legal_consent", scala.Some.apply[String](("".+(BirthDate.this.birthDate.toString()).+(" does not fit legal consent requirements"): String)))).invalidNec[Nothing]
268 1051 9776 - 9819 Apply org.make.core.Validation.BirthDate.apply org.make.api.user.userservicetest Validation.this.BirthDate.apply(DateHelper.computeBirthDate(age))
268 2851 9786 - 9818 Apply org.make.core.DefaultDateHelper.computeBirthDate org.make.api.user.userservicetest DateHelper.computeBirthDate(age)
272 4216 9946 - 9957 Apply java.time.LocalDate.getYear org.make.api.user.userapitest LocalDateExt.this.t.getYear()
272 2095 9918 - 9957 Apply scala.Int.- org.make.api.user.userapitest java.time.LocalDate.now().getYear().-(LocalDateExt.this.t.getYear())
275 5488 10017 - 10247 Apply io.circe.Decoder.emap org.make.core.operation.operationofquestiontest,org.make.api.technical.webflow.desertest,org.make.api.idea.ideasearchenginetest,org.make.api.avro.avrocompatibilitytest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.streamutilstest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest io.circe.Decoder.decodeLocalDate.emap[org.make.core.Validation.BirthDate](((t: java.time.LocalDate) => if (scala.Predef.intWrapper(Validation.this.minAgeWithLegalConsent).until(Validation.this.maxAge).contains(Validation.this.LocalDateExt(t).elapsedYears)) scala.`package`.Right.apply[Nothing, org.make.core.Validation.BirthDate](Validation.this.BirthDate.apply(t)) else scala.`package`.Left.apply[String, Nothing](("Invalid date: age must be between ".+(Validation.this.minAgeWithLegalConsent).+(" and ").+(Validation.this.maxAge): String))))
276 448 10061 - 10122 Apply scala.collection.immutable.Range.contains org.make.api.user.userapitest scala.Predef.intWrapper(Validation.this.minAgeWithLegalConsent).until(Validation.this.maxAge).contains(Validation.this.LocalDateExt(t).elapsedYears)
276 1125 10061 - 10083 Select org.make.core.Validation.minAgeWithLegalConsent org.make.api.user.userapitest Validation.this.minAgeWithLegalConsent
276 4348 10090 - 10096 Select org.make.core.Validation.maxAge org.make.api.user.userapitest Validation.this.maxAge
276 2700 10107 - 10121 Select org.make.core.Validation.LocalDateExt.elapsedYears org.make.api.user.userapitest Validation.this.LocalDateExt(t).elapsedYears
277 2990 10130 - 10149 Apply scala.util.Right.apply org.make.api.user.userapitest scala.`package`.Right.apply[Nothing, org.make.core.Validation.BirthDate](Validation.this.BirthDate.apply(t))
277 3755 10136 - 10148 Apply org.make.core.Validation.BirthDate.apply org.make.api.user.userapitest Validation.this.BirthDate.apply(t)
277 725 10130 - 10149 Block scala.util.Right.apply org.make.api.user.userapitest scala.`package`.Right.apply[Nothing, org.make.core.Validation.BirthDate](Validation.this.BirthDate.apply(t))
279 2102 10165 - 10243 Block scala.util.Left.apply org.make.api.user.userapitest scala.`package`.Left.apply[String, Nothing](("Invalid date: age must be between ".+(Validation.this.minAgeWithLegalConsent).+(" and ").+(Validation.this.maxAge): String))
279 4191 10165 - 10243 Apply scala.util.Left.apply org.make.api.user.userapitest scala.`package`.Left.apply[String, Nothing](("Invalid date: age must be between ".+(Validation.this.minAgeWithLegalConsent).+(" and ").+(Validation.this.maxAge): String))
281 2375 10302 - 10348 Apply io.circe.Encoder.contramap org.make.api.avro.avrocompatibilitytest,org.make.api.idea.ideasearchenginetest,org.make.api.technical.webflow.desertest,org.make.core.operation.operationofquestiontest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.streamutilstest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest io.circe.Encoder.encodeLocalDate.contramap[org.make.core.Validation.BirthDate](((x$6: org.make.core.Validation.BirthDate) => x$6.birthDate))
281 4621 10336 - 10347 Select org.make.core.Validation.BirthDate.birthDate x$6.birthDate
288 562 10607 - 10619 Select org.make.core.Validation.<refinement>.isEmpty EmptyableWithParsers.this.elem.isEmpty
289 3767 10629 - 10631 Literal <nosymbol> ()
289 2997 10629 - 10640 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[Unit](()).validNec[Nothing]
289 999 10629 - 10640 Block cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[Unit](()).validNec[Nothing]
291 2311 10715 - 10744 Apply scala.Some.apply scala.Some.apply[String]("Element was not empty")
291 2637 10660 - 10757 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "non_empty", message.orElse[String](scala.Some.apply[String]("Element was not empty")))).invalidNec[Nothing]
291 5603 10700 - 10745 Apply scala.Option.orElse message.orElse[String](scala.Some.apply[String]("Element was not empty"))
291 4200 10687 - 10698 Literal <nosymbol> "non_empty"
291 4630 10660 - 10746 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, "non_empty", message.orElse[String](scala.Some.apply[String]("Element was not empty")))
291 574 10660 - 10757 Block cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "non_empty", message.orElse[String](scala.Some.apply[String]("Element was not empty")))).invalidNec[Nothing]
294 3972 10889 - 10901 Select org.make.core.Validation.<refinement>.isEmpty EmptyableWithParsers.this.elem.isEmpty
295 4581 10911 - 11000 Block cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "empty", message.orElse[String](scala.Some.apply[String]("Element was empty")))).invalidNec[Nothing]
295 1007 10962 - 10987 Apply scala.Some.apply scala.Some.apply[String]("Element was empty")
295 2945 10938 - 10945 Literal <nosymbol> "empty"
295 2236 10911 - 10989 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, "empty", message.orElse[String](scala.Some.apply[String]("Element was empty")))
295 5473 10911 - 11000 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "empty", message.orElse[String](scala.Some.apply[String]("Element was empty")))).invalidNec[Nothing]
295 4148 10947 - 10988 Apply scala.Option.orElse message.orElse[String](scala.Some.apply[String]("Element was empty"))
297 585 11020 - 11041 Apply org.make.core.Validation.NonEmptyType.apply Validation.this.NonEmptyType.apply[A](EmptyableWithParsers.this.elem)
297 1880 11020 - 11050 Block cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.NonEmptyType[A]](Validation.this.NonEmptyType.apply[A](EmptyableWithParsers.this.elem)).validNec[Nothing]
297 3751 11020 - 11050 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.NonEmptyType[A]](Validation.this.NonEmptyType.apply[A](EmptyableWithParsers.this.elem)).validNec[Nothing]
297 2516 11036 - 11040 Select org.make.core.Validation.EmptyableWithParsers.elem EmptyableWithParsers.this.elem
307 949 11342 - 11344 Select org.make.core.Validation.IterableWithParsers.it IterableWithParsers.this.it
308 2248 11373 - 11385 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[Nil.type](scala.`package`.Nil).validNec[Nothing]
308 4158 11373 - 11376 Select scala.Nil scala.`package`.Nil
310 3762 11414 - 11512 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "empty_seq", message.orElse[String](scala.Some.apply[String]("Iterable was not empty")))).invalidNec[Nil.type]
310 5397 11441 - 11452 Literal <nosymbol> "empty_seq"
310 2462 11454 - 11500 Apply scala.Option.orElse message.orElse[String](scala.Some.apply[String]("Iterable was not empty"))
310 518 11414 - 11501 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, "empty_seq", message.orElse[String](scala.Some.apply[String]("Iterable was not empty")))
310 4432 11469 - 11499 Apply scala.Some.apply scala.Some.apply[String]("Iterable was not empty")
314 1803 11611 - 11633 Apply scala.collection.SetOps.&~ choices.&~(IterableWithParsers.this.valuesAsSet)
316 995 11682 - 11684 Select org.make.core.Validation.IterableWithParsers.it IterableWithParsers.this.it
316 2053 11672 - 11703 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.SeqSubset[A]](Validation.this.SeqSubset.apply[A](IterableWithParsers.this.it, choices)).validNec[Nothing]
316 4166 11672 - 11694 Apply org.make.core.Validation.SeqSubset.apply Validation.this.SeqSubset.apply[A](IterableWithParsers.this.it, choices)
318 2634 11741 - 11821 Apply org.make.core.ValidationError.apply ValidationError.apply("values", ("Values ".+(rejections.mkString(",")).+(" are not allowed"): String), ValidationError.apply$default$3)
318 3455 11741 - 11741 Select org.make.core.ValidationError.apply$default$3 ValidationError.apply$default$3
318 527 11741 - 11832 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("values", ("Values ".+(rejections.mkString(",")).+(" are not allowed"): String), ValidationError.apply$default$3)).invalidNec[Nothing]
318 5407 11757 - 11765 Literal <nosymbol> "values"
323 3708 12026 - 12028 Select org.make.core.Validation.IterableWithParsers.it IterableWithParsers.this.it
325 1004 12076 - 12100 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[cats.data.NonEmptySeq[A]](cats.data.NonEmptySeq.apply[A](head, next)).validNec[Nothing]
325 1818 12076 - 12091 Apply cats.data.NonEmptySeq.apply cats.data.NonEmptySeq.apply[A](head, next)
327 5341 12129 - 12210 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, key, scala.Some.apply[String](("".+(fieldName).+(" must not be empty"): String)))).invalidNec[Nothing]
327 2062 12129 - 12199 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, key, scala.Some.apply[String](("".+(fieldName).+(" must not be empty"): String)))
327 4283 12161 - 12198 Apply scala.Some.apply scala.Some.apply[String](("".+(fieldName).+(" must not be empty"): String))
340 3636 12544 - 12549 Select org.make.core.Validation.AnyWithParsers.value AnyWithParsers.this.value
340 2643 12539 - 12549 Apply scala.Any.== x$7.==(AnyWithParsers.this.value)
340 1737 12552 - 12573 Apply org.make.core.Validation.OneOf.apply Validation.this.OneOf.apply[A](AnyWithParsers.this.value, choices)
340 3713 12558 - 12563 Select org.make.core.Validation.AnyWithParsers.value AnyWithParsers.this.value
340 4290 12552 - 12582 Block cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.OneOf[A]](Validation.this.OneOf.apply[A](AnyWithParsers.this.value, choices)).validNec[Nothing]
340 504 12524 - 12550 Apply scala.collection.IterableOnceOps.exists choices.exists(((x$7: A) => x$7.==(AnyWithParsers.this.value)))
340 946 12552 - 12582 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.OneOf[A]](Validation.this.OneOf.apply[A](AnyWithParsers.this.value, choices)).validNec[Nothing]
342 5350 12602 - 12602 Select org.make.core.ValidationError.apply$default$3 ValidationError.apply$default$3
342 3645 12602 - 12703 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, message.getOrElse[String](("Value ".+(AnyWithParsers.this.value).+(" is not one of ").+(choices.mkString(",")): String)), ValidationError.apply$default$3)
342 2580 12602 - 12714 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, message.getOrElse[String](("Value ".+(AnyWithParsers.this.value).+(" is not one of ").+(choices.mkString(",")): String)), ValidationError.apply$default$3)).invalidNec[Nothing]
342 515 12602 - 12714 Block cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, message.getOrElse[String](("Value ".+(AnyWithParsers.this.value).+(" is not one of ").+(choices.mkString(",")): String)), ValidationError.apply$default$3)).invalidNec[Nothing]
342 2162 12629 - 12702 Apply scala.Option.getOrElse message.getOrElse[String](("Value ".+(AnyWithParsers.this.value).+(" is not one of ").+(choices.mkString(",")): String))
347 1952 12930 - 12935 Select org.make.core.Validation.AnyWithParsers.value AnyWithParsers.this.value
347 3838 12913 - 12928 Apply cats.syntax.EqOps.=== cats.implicits.catsSyntaxEq[A](AnyWithParsers.this.value)(E).===(other)
347 4226 12901 - 12978 Apply scala.util.Either.cond scala.`package`.Either.cond[org.make.core.ValidationError, A](cats.implicits.catsSyntaxEq[A](AnyWithParsers.this.value)(E).===(other), AnyWithParsers.this.value, ValidationError.apply(fieldName, key, message))
347 5275 12937 - 12977 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, key, message)
347 2171 12901 - 12993 Select cats.syntax.EitherOpsBinCompat0.toValidatedNec cats.implicits.catsSyntaxEitherBinCompat0[org.make.core.ValidationError, A](scala.`package`.Either.cond[org.make.core.ValidationError, A](cats.implicits.catsSyntaxEq[A](AnyWithParsers.this.value)(E).===(other), AnyWithParsers.this.value, ValidationError.apply(fieldName, key, message))).toValidatedNec
355 5556 13205 - 13210 Select org.make.core.Validation.AnyWithParsers.value AnyWithParsers.this.value
355 3591 13195 - 13211 Apply scala.Function1.apply predicate.apply(AnyWithParsers.this.value)
355 457 13220 - 13260 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, key, message)
355 1811 13183 - 13276 Select cats.syntax.EitherOpsBinCompat0.toValidatedNec cats.implicits.catsSyntaxEitherBinCompat0[org.make.core.ValidationError, A](scala.`package`.Either.cond[org.make.core.ValidationError, A](predicate.apply(AnyWithParsers.this.value), AnyWithParsers.this.value, ValidationError.apply(fieldName, key, message))).toValidatedNec
355 2588 13213 - 13218 Select org.make.core.Validation.AnyWithParsers.value AnyWithParsers.this.value
355 3847 13183 - 13261 Apply scala.util.Either.cond scala.`package`.Either.cond[org.make.core.ValidationError, A](predicate.apply(AnyWithParsers.this.value), AnyWithParsers.this.value, ValidationError.apply(fieldName, key, message))
361 3464 13520 - 13572 Apply org.make.core.Validation.AnyWithParsers.toOneOf qual$1.toOneOf(x$1, x$2, x$3)
361 2112 13533 - 13560 Apply scala.collection.IterableOps.filter E.values.filter(((x$8: T) => x$8.sortable))
361 5207 13520 - 13524 ApplyImplicitView org.make.core.Validation.AnyWithParsers Validation.this.AnyWithParsers[T](sort)
361 4109 13549 - 13559 Select org.make.core.elasticsearch.ElasticsearchFieldName.sortable x$8.sortable
361 5338 13525 - 13525 Select org.make.core.Validation.AnyWithParsers.toOneOf$default$3 qual$1.toOneOf$default$3
374 2535 14003 - 14025 Apply eu.timepit.refined.api.Refined.unsafeApply org.make.api.user.userservicetest,org.make.api.user.adminuserapitest,org.make.core.validationtest eu.timepit.refined.api.Refined.unsafeApply[String, org.make.core.Validation.ValidHtml](t)
378 2123 14100 - 14245 Apply eu.timepit.refined.api.Validate.fromPredicate eu.timepit.refined.api.Validate.fromPredicate[String, org.make.core.Validation.ValidHtml](((t: String) => new org.jsoup.safety.Cleaner(org.jsoup.safety.Safelist.none()).isValid(org.jsoup.Jsoup.parse(t))), ((x$9: String) => "invalid user input"), Validation.this.ValidHtml.apply())
379 1734 14135 - 14187 Apply org.jsoup.safety.Cleaner.isValid new org.jsoup.safety.Cleaner(org.jsoup.safety.Safelist.none()).isValid(org.jsoup.Jsoup.parse(t))
379 3856 14172 - 14186 Apply org.jsoup.Jsoup.parse org.jsoup.Jsoup.parse(t)
379 466 14147 - 14162 Apply org.jsoup.safety.Safelist.none org.jsoup.safety.Safelist.none()
380 5094 14200 - 14220 Literal <nosymbol> "invalid user input"
381 4054 14228 - 14239 Apply org.make.core.Validation.ValidHtml.apply Validation.this.ValidHtml.apply()
388 3991 14404 - 14531 Apply io.circe.Decoder.emap org.make.api.avro.avrocompatibilitytest,org.make.api.idea.ideasearchenginetest,org.make.api.technical.webflow.desertest,org.make.core.operation.operationofquestiontest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest io.circe.Decoder.decodeString.emap[org.make.core.Validation.Email](((x0$1: String) => x0$1 match { case (t @ _) if Validation.this.isEmail(t) => scala.`package`.Right.apply[Nothing, org.make.core.Validation.Email](Validation.this.Email.apply(t)) case _ => scala.`package`.Left.apply[String, Nothing]("Malformed email") }))
389 5345 14446 - 14456 Apply org.make.core.Validation.isEmail org.make.api.user.userapitest Validation.this.isEmail(t)
389 1649 14460 - 14475 Apply scala.util.Right.apply org.make.api.user.userapitest scala.`package`.Right.apply[Nothing, org.make.core.Validation.Email](Validation.this.Email.apply(t))
389 3391 14466 - 14474 Apply org.make.core.Validation.Email.apply org.make.api.user.userapitest Validation.this.Email.apply(t)
390 418 14504 - 14527 Apply scala.util.Left.apply org.make.api.user.userapitest scala.`package`.Left.apply[String, Nothing]("Malformed email")
392 5025 14578 - 14617 Apply io.circe.Encoder.contramap org.make.core.operation.operationofquestiontest,org.make.api.avro.avrocompatibilitytest,org.make.api.idea.ideasearchenginetest,org.make.api.technical.webflow.desertest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.streamutilstest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest io.circe.Encoder.encodeString.contramap[org.make.core.Validation.Email](((x$10: org.make.core.Validation.Email) => x$10.value))
392 1747 14609 - 14616 Select org.make.core.Validation.Email.value x$10.value
396 1578 14730 - 14951 Apply io.circe.Decoder.emap org.make.api.avro.avrocompatibilitytest,org.make.api.idea.ideasearchenginetest,org.make.api.technical.webflow.desertest,org.make.core.operation.operationofquestiontest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.streamutilstest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest io.circe.Decoder.decodeString.emap[org.make.core.Validation.Password](((x0$2: String) => x0$2 match { case (t @ _) if Validation.this.passwordRegex.matches(t) => scala.`package`.Right.apply[Nothing, org.make.core.Validation.Password](Validation.this.Password.apply(t)) case _ => scala.`package`.Left.apply[String, Nothing]("password must be at least 8 characters long including 1 figure, 1 uppercase and 1 special characters") }))
397 2131 14806 - 14817 Apply org.make.core.Validation.Password.apply org.make.api.user.userapitest Validation.this.Password.apply(t)
397 5618 14800 - 14818 Apply scala.util.Right.apply org.make.api.user.userapitest scala.`package`.Right.apply[Nothing, org.make.core.Validation.Password](Validation.this.Password.apply(t))
397 4221 14772 - 14796 Apply scala.util.matching.Regex.matches org.make.api.user.userapitest Validation.this.passwordRegex.matches(t)
399 3404 14839 - 14947 Apply scala.util.Left.apply org.make.api.user.userapitest scala.`package`.Left.apply[String, Nothing]("password must be at least 8 characters long including 1 figure, 1 uppercase and 1 special characters")
401 3998 15004 - 15043 Apply io.circe.Encoder.contramap org.make.api.avro.avrocompatibilitytest,org.make.core.operation.operationofquestiontest,org.make.api.technical.webflow.desertest,org.make.api.idea.ideasearchenginetest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest io.circe.Encoder.encodeString.contramap[org.make.core.Validation.Password](((x$11: org.make.core.Validation.Password) => x$11.value))
401 598 15035 - 15042 Select org.make.core.Validation.Password.value x$11.value
407 2010 15251 - 15273 Apply eu.timepit.refined.api.Refined.unsafeApply eu.timepit.refined.api.Refined.unsafeApply[String, org.make.core.Validation.Slug](t)
411 5626 15343 - 15490 Apply eu.timepit.refined.api.Validate.fromPredicate org.make.api.avro.avrocompatibilitytest,org.make.api.idea.ideasearchenginetest,org.make.core.operation.operationofquestiontest,org.make.api.technical.webflow.desertest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest eu.timepit.refined.api.Validate.fromPredicate[String, org.make.core.Validation.Slug](((t: String) => Validation.this.validateHtml.isValid(t).&&(cats.implicits.catsSyntaxEq[String](SlugHelper.apply(t))(cats.implicits.catsKernelStdOrderForString).===(t))), ((t: String) => ("".+(t).+(" is not a valid slug"): String)), Validation.this.Slug.apply())
412 3318 15378 - 15430 Apply scala.Boolean.&& Validation.this.validateHtml.isValid(t).&&(cats.implicits.catsSyntaxEq[String](SlugHelper.apply(t))(cats.implicits.catsKernelStdOrderForString).===(t))
412 5204 15405 - 15430 Apply cats.syntax.EqOps.=== cats.implicits.catsSyntaxEq[String](SlugHelper.apply(t))(cats.implicits.catsKernelStdOrderForString).===(t)
414 2107 15478 - 15484 Apply org.make.core.Validation.Slug.apply org.make.core.operation.operationofquestiontest,org.make.api.technical.webflow.desertest,org.make.api.idea.ideasearchenginetest,org.make.api.avro.avrocompatibilitytest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest Validation.this.Slug.apply()
419 2018 15609 - 15840 Apply io.circe.Decoder.emap org.make.api.avro.avrocompatibilitytest,org.make.api.technical.webflow.desertest,org.make.api.idea.ideasearchenginetest,org.make.core.operation.operationofquestiontest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest io.circe.Decoder.decodeString.emap[org.make.core.Validation.PostalCode](((x0$3: String) => x0$3 match { case (t @ _) if Validation.this.postalCodeRegex.findFirstIn(t).isDefined => scala.`package`.Right.apply[Nothing, org.make.core.Validation.PostalCode](Validation.this.PostalCode.apply(t)) case (t @ _) => scala.`package`.Left.apply[String, Nothing](("Invalid postal code ".+(t).+(". Must be formatted \'01234\'"): String)) }))
420 3657 15652 - 15692 Select scala.Option.isDefined org.make.api.user.userapitest Validation.this.postalCodeRegex.findFirstIn(t).isDefined
420 609 15697 - 15717 Apply scala.util.Right.apply org.make.api.user.userapitest scala.`package`.Right.apply[Nothing, org.make.core.Validation.PostalCode](Validation.this.PostalCode.apply(t))
420 1590 15703 - 15716 Apply org.make.core.Validation.PostalCode.apply org.make.api.user.userapitest Validation.this.PostalCode.apply(t)
421 3774 15778 - 15836 Apply scala.util.Left.apply org.make.api.user.userapitest scala.`package`.Left.apply[String, Nothing](("Invalid postal code ".+(t).+(". Must be formatted \'01234\'"): String))
423 5157 15928 - 15935 Select org.make.core.Validation.PostalCode.value x$12.value
423 3246 15897 - 15936 Apply io.circe.Encoder.contramap org.make.core.operation.operationofquestiontest,org.make.api.technical.webflow.desertest,org.make.api.avro.avrocompatibilitytest,org.make.api.idea.ideasearchenginetest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest io.circe.Encoder.encodeString.contramap[org.make.core.Validation.PostalCode](((x$12: org.make.core.Validation.PostalCode) => x$12.value))
427 2119 16057 - 16078 Apply scala.util.matching.Regex.matches akka.http.scaladsl.testkit.routetest Validation.this.colorRegex.matches(x$13)
427 5419 16114 - 16122 Apply org.make.core.Validation.Colour.apply org.make.api.avro.avrocompatibilitytest,org.make.api.idea.ideasearchenginetest,org.make.core.operation.operationofquestiontest,org.make.api.technical.webflow.desertest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest Validation.this.Colour.apply()
427 3547 16034 - 16123 Apply eu.timepit.refined.api.Validate.fromPredicate org.make.core.operation.operationofquestiontest,org.make.api.technical.webflow.desertest,org.make.api.idea.ideasearchenginetest,org.make.api.avro.avrocompatibilitytest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest eu.timepit.refined.api.Validate.fromPredicate[String, org.make.core.Validation.Colour](((x$13: String) => Validation.this.colorRegex.matches(x$13)), ((t: String) => ("".+(t).+(" is not a valid colour"): String)), Validation.this.Colour.apply())
431 1600 16310 - 16332 Apply eu.timepit.refined.api.Refined.unsafeApply org.make.core.operation.operationofquestiontest,org.make.api.idea.ideasearchenginetest,org.make.api.avro.avrocompatibilitytest,org.make.api.technical.webflow.desertest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.streamutilstest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest,org.make.api.makeunittest eu.timepit.refined.api.Refined.unsafeApply[String, org.make.core.Validation.Colour](t)
436 415 16577 - 16611 Apply org.make.core.Validation.Colour.fromStringUnsafe org.make.core.operation.operationofquestiontest,org.make.api.technical.webflow.desertest,org.make.api.avro.avrocompatibilitytest,org.make.api.idea.ideasearchenginetest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.streamutilstest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest,org.make.api.makeunittest Validation.this.Colour.fromStringUnsafe("#000000")
444 3786 16846 - 16851 Select org.make.core.Validation.StringWithParsers.value StringWithParsers.this.value
445 5164 16879 - 16899 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.EmptyString.type](Validation.this.EmptyString).validNec[Nothing]
445 1827 16879 - 16890 Select org.make.core.Validation.EmptyString Validation.this.EmptyString
447 5430 16971 - 17015 Apply scala.Option.orElse message.orElse[String](scala.Some.apply[String]("String was not empty"))
447 3644 16928 - 17016 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, "empty_string", message.orElse[String](scala.Some.apply[String]("String was not empty")))
447 3258 16955 - 16969 Literal <nosymbol> "empty_string"
447 2068 16986 - 17014 Apply scala.Some.apply scala.Some.apply[String]("String was not empty")
447 1537 16928 - 17027 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "empty_string", message.orElse[String](scala.Some.apply[String]("String was not empty")))).invalidNec[org.make.core.Validation.EmptyString.type]
456 4756 17255 - 17280 Apply scala.Int.>= StringWithParsers.this.value.length().>=(minLength)
457 3181 17290 - 17336 Block cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.StringWithMinLength](Validation.this.StringWithMinLength.apply(StringWithParsers.this.value, minLength)).validNec[Nothing]
457 2007 17290 - 17327 Apply org.make.core.Validation.StringWithMinLength.apply Validation.this.StringWithMinLength.apply(StringWithParsers.this.value, minLength)
457 3723 17310 - 17315 Select org.make.core.Validation.StringWithParsers.value StringWithParsers.this.value
457 5033 17290 - 17336 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.StringWithMinLength](Validation.this.StringWithMinLength.apply(StringWithParsers.this.value, minLength)).validNec[Nothing]
458 5283 17348 - 17627 Block <nosymbol> { val forLanguage: String = language.fold[String]("")(((l: org.make.core.reference.Language) => (" for the language : ".+(l.value): String))); cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "too_short", message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should not be shorter than ").+(minLength).+(forLanguage): String))))).invalidNec[Nothing] }
459 2075 17390 - 17392 Literal <nosymbol> ""
459 5361 17376 - 17433 Apply scala.Option.fold language.fold[String]("")(((l: org.make.core.reference.Language) => (" for the language : ".+(l.value): String)))
460 3731 17442 - 17608 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, "too_short", message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should not be shorter than ").+(minLength).+(forLanguage): String))))
462 3653 17490 - 17501 Literal <nosymbol> "too_short"
463 4706 17513 - 17598 Apply scala.Option.orElse message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should not be shorter than ").+(minLength).+(forLanguage): String)))
463 1415 17528 - 17597 Apply scala.Some.apply scala.Some.apply[String](("".+(fieldName).+(" should not be shorter than ").+(minLength).+(forLanguage): String))
464 2014 17442 - 17619 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "too_short", message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should not be shorter than ").+(minLength).+(forLanguage): String))))).invalidNec[Nothing]
473 3239 17847 - 17872 Apply scala.Int.<= org.make.api.avro.avrocompatibilitytest,org.make.api.technical.webflow.desertest,org.make.api.idea.ideasearchenginetest,org.make.core.operation.operationofquestiontest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest StringWithParsers.this.value.length().<=(maxLength)
474 2355 17902 - 17907 Select org.make.core.Validation.StringWithParsers.value org.make.api.avro.avrocompatibilitytest,org.make.api.idea.ideasearchenginetest,org.make.api.technical.webflow.desertest,org.make.core.operation.operationofquestiontest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.streamutilstest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest StringWithParsers.this.value
474 5578 17882 - 17919 Apply org.make.core.Validation.StringWithMaxLength.apply org.make.core.operation.operationofquestiontest,org.make.api.technical.webflow.desertest,org.make.api.idea.ideasearchenginetest,org.make.api.avro.avrocompatibilitytest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.streamutilstest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest Validation.this.StringWithMaxLength.apply(StringWithParsers.this.value, maxLength)
474 3661 17882 - 17928 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec org.make.api.avro.avrocompatibilitytest,org.make.api.idea.ideasearchenginetest,org.make.api.technical.webflow.desertest,org.make.core.operation.operationofquestiontest,org.make.api.technical.streamutilstest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.StringWithMaxLength](Validation.this.StringWithMaxLength.apply(StringWithParsers.this.value, maxLength)).validNec[Nothing]
474 1672 17882 - 17928 Block cats.syntax.ValidatedIdOpsBinCompat0.validNec org.make.api.avro.avrocompatibilitytest,org.make.api.technical.webflow.desertest,org.make.api.idea.ideasearchenginetest,org.make.core.operation.operationofquestiontest,org.make.api.sequence.sequencecacheactortest,org.make.api.technical.streamutilstest,org.make.api.technical.retryablefuturetest,org.make.api.user.persistentuserservicecomponenttest,org.make.api.technical.directives.clientdirectivestest,org.make.api.crmtemplates.crmtemplatesservicetest,org.make.api.sessionhistory.sessionhistorycoordinatortest cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.StringWithMaxLength](Validation.this.StringWithMaxLength.apply(StringWithParsers.this.value, maxLength)).validNec[Nothing]
475 3606 17940 - 18217 Block <nosymbol> { val forLanguage: String = language.fold[String]("")(((l: org.make.core.reference.Language) => (" for the language : ".+(l.value): String))); cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "too_long", message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should not be longer than ").+(maxLength).+(forLanguage): String))))).invalidNec[Nothing] }
476 4894 17982 - 17984 Literal <nosymbol> ""
476 4008 17968 - 18025 Apply scala.Option.fold language.fold[String]("")(((l: org.make.core.reference.Language) => (" for the language : ".+(l.value): String)))
477 1295 18034 - 18198 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, "too_long", message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should not be longer than ").+(maxLength).+(forLanguage): String))))
479 1968 18082 - 18092 Literal <nosymbol> "too_long"
480 3169 18104 - 18188 Apply scala.Option.orElse message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should not be longer than ").+(maxLength).+(forLanguage): String)))
480 5292 18119 - 18187 Apply scala.Some.apply scala.Some.apply[String](("".+(fieldName).+(" should not be longer than ").+(maxLength).+(forLanguage): String))
481 5586 18034 - 18209 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "too_long", message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should not be longer than ").+(maxLength).+(forLanguage): String))))).invalidNec[Nothing]
485 4819 18348 - 18362 Select scala.collection.StringOps.nonEmpty org.make.api.user.userservicetest scala.Predef.augmentString(StringWithParsers.this.value).nonEmpty
485 1534 18348 - 18353 Select org.make.core.Validation.StringWithParsers.value org.make.api.user.userservicetest StringWithParsers.this.value
486 1976 18372 - 18393 Apply org.make.core.Validation.NonEmptyString.apply org.make.api.user.userservicetest Validation.this.NonEmptyString.apply(StringWithParsers.this.value)
486 3177 18372 - 18402 Block cats.syntax.ValidatedIdOpsBinCompat0.validNec org.make.api.user.userservicetest cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.NonEmptyString](Validation.this.NonEmptyString.apply(StringWithParsers.this.value)).validNec[Nothing]
486 3718 18387 - 18392 Select org.make.core.Validation.StringWithParsers.value org.make.api.user.userservicetest StringWithParsers.this.value
486 5228 18372 - 18402 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec org.make.api.user.userservicetest cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.NonEmptyString](Validation.this.NonEmptyString.apply(StringWithParsers.this.value)).validNec[Nothing]
488 4832 18422 - 18535 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "empty", message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should not be an empty string"): String))))).invalidNec[Nothing]
488 1485 18422 - 18524 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, "empty", message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should not be an empty string"): String))))
488 2795 18422 - 18535 Block cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "empty", message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should not be an empty string"): String))))).invalidNec[Nothing]
488 5355 18473 - 18522 Apply scala.Some.apply scala.Some.apply[String](("".+(fieldName).+(" should not be an empty string"): String))
488 3613 18458 - 18523 Apply scala.Option.orElse message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should not be an empty string"): String)))
488 1304 18449 - 18456 Literal <nosymbol> "empty"
494 1079 18700 - 18756 Apply org.jsoup.safety.Cleaner.isValid org.make.api.user.userservicetest,org.make.api.user.adminuserapitest,org.make.core.validationtest new org.jsoup.safety.Cleaner(org.jsoup.safety.Safelist.none()).isValid(org.jsoup.Jsoup.parse(StringWithParsers.this.value))
494 5118 18749 - 18754 Select org.make.core.Validation.StringWithParsers.value org.make.api.user.userservicetest,org.make.api.user.adminuserapitest,org.make.core.validationtest StringWithParsers.this.value
494 3126 18737 - 18755 Apply org.jsoup.Jsoup.parse org.make.api.user.userservicetest,org.make.api.user.adminuserapitest,org.make.core.validationtest org.jsoup.Jsoup.parse(StringWithParsers.this.value)
494 1759 18712 - 18727 Apply org.jsoup.safety.Safelist.none org.make.api.user.userservicetest,org.make.api.user.adminuserapitest,org.make.core.validationtest org.jsoup.safety.Safelist.none()
495 4841 18766 - 18808 Block cats.syntax.ValidatedIdOpsBinCompat0.validNec org.make.api.user.userservicetest,org.make.api.user.adminuserapitest,org.make.core.validationtest cats.implicits.catsSyntaxValidatedIdBinCompat0[eu.timepit.refined.api.Refined[String,org.make.core.Validation.ValidHtml]](Validation.this.ValidHtml.fromStringUnsafe(StringWithParsers.this.value)).validNec[Nothing]
495 3414 18766 - 18799 Apply org.make.core.Validation.ValidHtml.fromStringUnsafe org.make.api.user.userservicetest,org.make.api.user.adminuserapitest,org.make.core.validationtest Validation.this.ValidHtml.fromStringUnsafe(StringWithParsers.this.value)
495 1490 18766 - 18808 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec org.make.api.user.userservicetest,org.make.api.user.adminuserapitest,org.make.core.validationtest cats.implicits.catsSyntaxValidatedIdBinCompat0[eu.timepit.refined.api.Refined[String,org.make.core.Validation.ValidHtml]](Validation.this.ValidHtml.fromStringUnsafe(StringWithParsers.this.value)).validNec[Nothing]
495 5369 18793 - 18798 Select org.make.core.Validation.StringWithParsers.value org.make.api.user.userservicetest,org.make.api.user.adminuserapitest,org.make.core.validationtest StringWithParsers.this.value
497 1770 18858 - 18886 Literal <nosymbol> org.make.core.validationtest "User provided invalid HTML"
497 5212 18828 - 18828 Select org.make.core.ValidationError.apply$default$3 org.make.core.validationtest ValidationError.apply$default$3
497 1085 18828 - 18898 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec org.make.core.validationtest cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("user_input", "User provided invalid HTML", ValidationError.apply$default$3)).invalidNec[Nothing]
497 3133 18828 - 18887 Apply org.make.core.ValidationError.apply org.make.core.validationtest ValidationError.apply("user_input", "User provided invalid HTML", ValidationError.apply$default$3)
497 2729 18844 - 18856 Literal <nosymbol> org.make.core.validationtest "user_input"
497 5634 18828 - 18898 Block cats.syntax.ValidatedIdOpsBinCompat0.invalidNec org.make.core.validationtest cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("user_input", "User provided invalid HTML", ValidationError.apply$default$3)).invalidNec[Nothing]
500 1599 18962 - 18967 ApplyImplicitView org.make.core.Validation.StringWithParsers org.make.api.user.adminuserapitest,org.make.core.validationtest Validation.this.StringWithParsers(StringWithParsers.this.value)
500 3602 18962 - 18967 Select org.make.core.Validation.StringWithParsers.value org.make.api.user.adminuserapitest,org.make.core.validationtest StringWithParsers.this.value
501 2024 18962 - 19002 Apply org.make.core.Validation.StringWithParsers.toSanitizedInput org.make.api.user.adminuserapitest,org.make.core.validationtest qual$1.toSanitizedInput("email", x$2)
501 2738 18977 - 18977 Select org.make.core.Validation.StringWithParsers.toSanitizedInput$default$2 org.make.api.user.adminuserapitest,org.make.core.validationtest qual$1.toSanitizedInput$default$2
501 5223 18993 - 18993 Select org.make.core.technical.ValidatedUtils.validatedMonad org.make.api.user.adminuserapitest,org.make.core.validationtest org.make.core.technical.ValidatedUtils.validatedMonad
501 4776 18994 - 19001 Literal <nosymbol> org.make.api.user.adminuserapitest,org.make.core.validationtest "email"
502 3565 18962 - 19237 Apply cats.FlatMap.Ops.flatMap org.make.api.user.adminuserapitest,org.make.core.validationtest cats.implicits.toFlatMapOps[[+A]cats.data.ValidatedNec[org.make.core.ValidationError,A], eu.timepit.refined.api.Refined[String,org.make.core.Validation.ValidHtml]]({ <artifact> val qual$1: org.make.core.Validation.StringWithParsers = Validation.this.StringWithParsers(StringWithParsers.this.value); <artifact> val x$1: String("email") = "email"; <artifact> val x$2: Option[String] @scala.reflect.internal.annotations.uncheckedBounds = qual$1.toSanitizedInput$default$2; qual$1.toSanitizedInput("email", x$2) })(org.make.core.technical.ValidatedUtils.validatedMonad).flatMap[org.make.core.Validation.Email](((v: eu.timepit.refined.api.Refined[String,org.make.core.Validation.ValidHtml]) => if (Validation.this.isEmail(v.value)) cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.Email](Validation.this.Email.apply(v.value)).validNec[Nothing] else cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("email", "invalid_email", scala.Some.apply[String]("email is not a valid email"))).invalidNec[Nothing]))
504 1370 19052 - 19068 Apply org.make.core.Validation.isEmail org.make.api.user.adminuserapitest,org.make.core.validationtest Validation.this.isEmail(v.value)
504 3338 19060 - 19067 Select eu.timepit.refined.api.Refined.value org.make.api.user.adminuserapitest,org.make.core.validationtest v.value
505 1611 19084 - 19107 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec org.make.api.user.adminuserapitest,org.make.core.validationtest cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.Email](Validation.this.Email.apply(v.value)).validNec[Nothing]
505 4825 19084 - 19107 Block cats.syntax.ValidatedIdOpsBinCompat0.validNec org.make.api.user.adminuserapitest,org.make.core.validationtest cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.Email](Validation.this.Email.apply(v.value)).validNec[Nothing]
505 3556 19084 - 19098 Apply org.make.core.Validation.Email.apply org.make.api.user.adminuserapitest,org.make.core.validationtest Validation.this.Email.apply(v.value)
505 4393 19090 - 19097 Select eu.timepit.refined.api.Refined.value org.make.api.user.adminuserapitest,org.make.core.validationtest v.value
507 1925 19164 - 19179 Literal <nosymbol> org.make.core.validationtest "invalid_email"
507 3019 19155 - 19162 Literal <nosymbol> org.make.core.validationtest "email"
507 5234 19181 - 19215 Apply scala.Some.apply org.make.core.validationtest scala.Some.apply[String]("email is not a valid email")
507 4654 19139 - 19227 Block cats.syntax.ValidatedIdOpsBinCompat0.invalidNec org.make.core.validationtest cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("email", "invalid_email", scala.Some.apply[String]("email is not a valid email"))).invalidNec[Nothing]
507 3266 19139 - 19216 Apply org.make.core.ValidationError.apply org.make.core.validationtest ValidationError.apply("email", "invalid_email", scala.Some.apply[String]("email is not a valid email"))
507 1226 19139 - 19227 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec org.make.core.validationtest cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("email", "invalid_email", scala.Some.apply[String]("email is not a valid email"))).invalidNec[Nothing]
511 1616 19307 - 19312 Select org.make.core.Validation.StringWithParsers.value StringWithParsers.this.value
511 4765 19307 - 19312 ApplyImplicitView org.make.core.Validation.StringWithParsers Validation.this.StringWithParsers(StringWithParsers.this.value)
512 2885 19339 - 19349 Literal <nosymbol> "password"
512 3130 19338 - 19338 Select org.make.core.technical.ValidatedUtils.validatedMonad org.make.core.technical.ValidatedUtils.validatedMonad
512 1867 19322 - 19322 Select org.make.core.Validation.StringWithParsers.toSanitizedInput$default$2 qual$1.toSanitizedInput$default$2
512 5180 19307 - 19350 Apply org.make.core.Validation.StringWithParsers.toSanitizedInput qual$1.toSanitizedInput("password", x$2)
513 1445 19307 - 19782 Apply cats.FlatMap.Ops.flatMap cats.implicits.toFlatMapOps[[+A]cats.data.ValidatedNec[org.make.core.ValidationError,A], eu.timepit.refined.api.Refined[String,org.make.core.Validation.ValidHtml]]({ <artifact> val qual$1: org.make.core.Validation.StringWithParsers = Validation.this.StringWithParsers(StringWithParsers.this.value); <artifact> val x$1: String("password") = "password"; <artifact> val x$2: Option[String] @scala.reflect.internal.annotations.uncheckedBounds = qual$1.toSanitizedInput$default$2; qual$1.toSanitizedInput("password", x$2) })(org.make.core.technical.ValidatedUtils.validatedMonad).flatMap[org.make.core.Validation.Password](((v: eu.timepit.refined.api.Refined[String,org.make.core.Validation.ValidHtml]) => if (Validation.this.passwordRegex.matches(v.value)) cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.Password](Validation.this.Password.apply(v.value)).validNec[Nothing] else cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("password", "invalid_password", scala.Some.apply[String]("password must be at least 8 characters long including 1 figure, 1 uppercase and 1 special characters"))).invalidNec[Nothing]))
515 1151 19422 - 19429 Select eu.timepit.refined.api.Refined.value v.value
515 4377 19400 - 19430 Apply scala.util.matching.Regex.matches Validation.this.passwordRegex.matches(v.value)
516 3573 19455 - 19462 Select eu.timepit.refined.api.Refined.value v.value
516 1556 19446 - 19463 Apply org.make.core.Validation.Password.apply Validation.this.Password.apply(v.value)
516 2808 19446 - 19472 Block cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.Password](Validation.this.Password.apply(v.value)).validNec[Nothing]
516 4773 19446 - 19472 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.Password](Validation.this.Password.apply(v.value)).validNec[Nothing]
518 1163 19504 - 19761 Apply org.make.core.ValidationError.apply ValidationError.apply("password", "invalid_password", scala.Some.apply[String]("password must be at least 8 characters long including 1 figure, 1 uppercase and 1 special characters"))
519 759 19537 - 19547 Literal <nosymbol> "password"
520 5186 19565 - 19583 Literal <nosymbol> "invalid_password"
521 3087 19601 - 19745 Apply scala.Some.apply scala.Some.apply[String]("password must be at least 8 characters long including 1 figure, 1 uppercase and 1 special characters")
524 3672 19504 - 19772 Block cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("password", "invalid_password", scala.Some.apply[String]("password must be at least 8 characters long including 1 figure, 1 uppercase and 1 special characters"))).invalidNec[Nothing]
524 4644 19504 - 19772 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("password", "invalid_password", scala.Some.apply[String]("password must be at least 8 characters long including 1 figure, 1 uppercase and 1 special characters"))).invalidNec[Nothing]
528 3017 19891 - 19896 ApplyImplicitView org.make.core.Validation.StringWithParsers Validation.this.StringWithParsers(StringWithParsers.this.value)
528 4721 19891 - 19896 Select org.make.core.Validation.StringWithParsers.value StringWithParsers.this.value
529 770 19923 - 19929 Literal <nosymbol> "slug"
529 3094 19891 - 19930 Apply org.make.core.Validation.StringWithParsers.toSanitizedInput qual$1.toSanitizedInput("slug", x$2)
529 5304 19906 - 19906 Select org.make.core.Validation.StringWithParsers.toSanitizedInput$default$2 qual$1.toSanitizedInput$default$2
529 1098 19922 - 19922 Select org.make.core.technical.ValidatedUtils.validatedMonad org.make.core.technical.ValidatedUtils.validatedMonad
530 1043 19891 - 20183 Apply cats.FlatMap.Ops.flatMap cats.implicits.toFlatMapOps[[+A]cats.data.ValidatedNec[org.make.core.ValidationError,A], eu.timepit.refined.api.Refined[String,org.make.core.Validation.ValidHtml]]({ <artifact> val qual$1: org.make.core.Validation.StringWithParsers = Validation.this.StringWithParsers(StringWithParsers.this.value); <artifact> val x$1: String("slug") = "slug"; <artifact> val x$2: Option[String] @scala.reflect.internal.annotations.uncheckedBounds = qual$1.toSanitizedInput$default$2; qual$1.toSanitizedInput("slug", x$2) })(org.make.core.technical.ValidatedUtils.validatedMonad).flatMap[eu.timepit.refined.api.Refined[String,org.make.core.Validation.Slug]](((v: eu.timepit.refined.api.Refined[String,org.make.core.Validation.ValidHtml]) => if (cats.implicits.catsSyntaxEq[String](SlugHelper.apply(v.value))(cats.implicits.catsKernelStdOrderForString).===(v.value)) cats.implicits.catsSyntaxValidatedIdBinCompat0[eu.timepit.refined.api.Refined[String,org.make.core.Validation.Slug]](Validation.this.Slug.fromStringUnsafe(v.value)).validNec[Nothing] else cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("slug", ("".+(v.value).+(" is not a valid slug"): String), ValidationError.apply$default$3)).invalidNec[Nothing]))
532 4652 19997 - 20004 Select eu.timepit.refined.api.Refined.value v.value
532 1542 19996 - 19996 Select cats.kernel.instances.StringInstances.catsKernelStdOrderForString cats.implicits.catsKernelStdOrderForString
532 3025 19980 - 20017 Apply cats.syntax.EqOps.=== cats.implicits.catsSyntaxEq[String](SlugHelper.apply(v.value))(cats.implicits.catsKernelStdOrderForString).===(v.value)
532 2415 19980 - 20005 Apply org.make.core.SlugHelper.apply SlugHelper.apply(v.value)
532 4728 20010 - 20017 Select eu.timepit.refined.api.Refined.value v.value
533 1031 20055 - 20062 Select eu.timepit.refined.api.Refined.value v.value
533 5176 20033 - 20063 Apply org.make.core.Validation.Slug.fromStringUnsafe Validation.this.Slug.fromStringUnsafe(v.value)
533 1107 20033 - 20072 Block cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[eu.timepit.refined.api.Refined[String,org.make.core.Validation.Slug]](Validation.this.Slug.fromStringUnsafe(v.value)).validNec[Nothing]
533 3188 20033 - 20072 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[eu.timepit.refined.api.Refined[String,org.make.core.Validation.Slug]](Validation.this.Slug.fromStringUnsafe(v.value)).validNec[Nothing]
535 1551 20104 - 20162 Apply org.make.core.ValidationError.apply ValidationError.apply("slug", ("".+(v.value).+(" is not a valid slug"): String), ValidationError.apply$default$3)
535 4840 20104 - 20173 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("slug", ("".+(v.value).+(" is not a valid slug"): String), ValidationError.apply$default$3)).invalidNec[Nothing]
535 2677 20104 - 20104 Select org.make.core.ValidationError.apply$default$3 ValidationError.apply$default$3
535 4660 20120 - 20126 Literal <nosymbol> "slug"
535 2973 20104 - 20173 Block cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("slug", ("".+(v.value).+(" is not a valid slug"): String), ValidationError.apply$default$3)).invalidNec[Nothing]
539 5128 20284 - 20289 Select org.make.core.Validation.StringWithParsers.value StringWithParsers.this.value
539 1155 20280 - 20296 Apply scala.util.Try.apply scala.util.Try.apply[Int](scala.Predef.augmentString(StringWithParsers.this.value).toInt)
539 3200 20284 - 20295 Select scala.collection.StringOps.toInt scala.Predef.augmentString(StringWithParsers.this.value).toInt
540 4605 20341 - 20371 Select org.make.core.Validation.minLegalAgeForExternalProposal Validation.this.minLegalAgeForExternalProposal
540 2545 20334 - 20371 Apply scala.Int.>= age.>=(Validation.this.minLegalAgeForExternalProposal)
540 1498 20375 - 20387 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[Int](age).validNec[Nothing]
542 3207 20425 - 20588 Apply org.make.core.ValidationError.apply ValidationError.apply("age", "invalid_age", message.orElse[String](scala.Some.apply[String](("".+(StringWithParsers.this.value).+(" must be over ").+(Validation.this.minLegalAgeForExternalProposal): String))))
543 4853 20454 - 20459 Literal <nosymbol> "age"
544 2812 20473 - 20486 Literal <nosymbol> "invalid_age"
545 4186 20500 - 20576 Apply scala.Option.orElse message.orElse[String](scala.Some.apply[String](("".+(StringWithParsers.this.value).+(" must be over ").+(Validation.this.minLegalAgeForExternalProposal): String)))
545 977 20515 - 20575 Apply scala.Some.apply scala.Some.apply[String](("".+(StringWithParsers.this.value).+(" must be over ").+(Validation.this.minLegalAgeForExternalProposal): String))
546 1095 20425 - 20599 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("age", "invalid_age", message.orElse[String](scala.Some.apply[String](("".+(StringWithParsers.this.value).+(" must be over ").+(Validation.this.minLegalAgeForExternalProposal): String))))).invalidNec[Nothing]
547 4724 20627 - 20708 Apply org.make.core.ValidationError.apply ValidationError.apply("age", "invalid_format", scala.Some.apply[String](("\'".+(StringWithParsers.this.value).+("\' is not a valid number"): String)))
547 1506 20668 - 20707 Apply scala.Some.apply scala.Some.apply[String](("\'".+(StringWithParsers.this.value).+("\' is not a valid number"): String))
547 2663 20650 - 20666 Literal <nosymbol> "invalid_format"
547 2747 20627 - 20719 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("age", "invalid_format", scala.Some.apply[String](("\'".+(StringWithParsers.this.value).+("\' is not a valid number"): String)))).invalidNec[Nothing]
547 4471 20643 - 20648 Literal <nosymbol> "age"
551 1025 20833 - 20838 Select org.make.core.Validation.StringWithParsers.value StringWithParsers.this.value
551 4311 20805 - 20849 Select scala.Option.isDefined Validation.this.postalCodeRegex.findFirstIn(StringWithParsers.this.value).isDefined
552 2673 20859 - 20885 Block cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.PostalCode](Validation.this.PostalCode.apply(StringWithParsers.this.value)).validNec[Nothing]
552 4401 20859 - 20885 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.Validation.PostalCode](Validation.this.PostalCode.apply(StringWithParsers.this.value)).validNec[Nothing]
552 1102 20859 - 20876 Apply org.make.core.Validation.PostalCode.apply Validation.this.PostalCode.apply(StringWithParsers.this.value)
552 3150 20870 - 20875 Select org.make.core.Validation.StringWithParsers.value StringWithParsers.this.value
554 966 20905 - 21061 Apply org.make.core.ValidationError.apply ValidationError.apply("postalCode", "invalid_postal_code", scala.Some.apply[String](("Invalid postal code ".+(StringWithParsers.this.value).+(". Must be formatted \'01234\'"): String)))
555 1704 20932 - 20944 Literal <nosymbol> "postalCode"
556 5000 20956 - 20977 Literal <nosymbol> "invalid_postal_code"
557 2756 20989 - 21051 Apply scala.Some.apply scala.Some.apply[String](("Invalid postal code ".+(StringWithParsers.this.value).+(". Must be formatted \'01234\'"): String))
558 3196 20905 - 21072 Block cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("postalCode", "invalid_postal_code", scala.Some.apply[String](("Invalid postal code ".+(StringWithParsers.this.value).+(". Must be formatted \'01234\'"): String)))).invalidNec[Nothing]
558 4324 20905 - 21072 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply("postalCode", "invalid_postal_code", scala.Some.apply[String](("Invalid postal code ".+(StringWithParsers.this.value).+(". Must be formatted \'01234\'"): String)))).invalidNec[Nothing]
564 3037 21253 - 21292 Block cats.syntax.ValidatedIdOpsBinCompat0.validNec org.make.core.validationtest cats.implicits.catsSyntaxValidatedIdBinCompat0[eu.timepit.refined.api.Refined[String,org.make.core.Validation.Colour]](Validation.this.Colour.fromStringUnsafe(StringWithParsers.this.value)).validNec[Nothing]
564 2603 21277 - 21282 Select org.make.core.Validation.StringWithParsers.value org.make.core.validationtest StringWithParsers.this.value
564 1386 21245 - 21250 Select org.make.core.Validation.StringWithParsers.value org.make.core.validationtest StringWithParsers.this.value
564 4603 21226 - 21251 Apply scala.util.matching.Regex.matches org.make.core.validationtest Validation.this.colorRegex.matches(StringWithParsers.this.value)
564 703 21253 - 21283 Apply org.make.core.Validation.Colour.fromStringUnsafe org.make.core.validationtest Validation.this.Colour.fromStringUnsafe(StringWithParsers.this.value)
564 4848 21253 - 21292 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec org.make.core.validationtest cats.implicits.catsSyntaxValidatedIdBinCompat0[eu.timepit.refined.api.Refined[String,org.make.core.Validation.Colour]](Validation.this.Colour.fromStringUnsafe(StringWithParsers.this.value)).validNec[Nothing]
565 974 21304 - 21357 Apply org.make.core.ValidationError.apply org.make.core.validationtest ValidationError.apply(fieldName, "invalid_colour", message)
565 4335 21304 - 21368 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec org.make.core.validationtest cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "invalid_colour", message)).invalidNec[Nothing]
565 3138 21304 - 21368 Block cats.syntax.ValidatedIdOpsBinCompat0.invalidNec org.make.core.validationtest cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "invalid_colour", message)).invalidNec[Nothing]
575 1250 21601 - 21604 Select org.make.core.Validation.OptionWithParsers.opt OptionWithParsers.this.opt
576 4551 21641 - 21655 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[A](value).validNec[Nothing]
577 2613 21711 - 21740 Apply scala.Option.getOrElse key.getOrElse[String]("value_absent")
577 548 21684 - 21750 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, key.getOrElse[String]("value_absent"), message)
577 4782 21684 - 21761 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, key.getOrElse[String]("value_absent"), message)).invalidNec[Nothing]
581 2742 21883 - 21886 Select org.make.core.Validation.OptionWithParsers.opt OptionWithParsers.this.opt
582 4263 21923 - 21986 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "value_present", message)).invalidNec[Nothing]
582 985 21923 - 21975 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, "value_present", message)
583 2217 22015 - 22017 Literal <nosymbol> ()
583 1173 22015 - 22026 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[Unit](()).validNec[Nothing]
589 4398 22222 - 22238 Apply scala.Long.> LongWithParsers.this.value.>(maxValue)
590 2625 22277 - 22290 Literal <nosymbol> "exceeds_max"
590 489 22307 - 22357 Apply scala.Some.apply scala.Some.apply[String](("".+(fieldName).+(" should be lower than ").+(maxValue): String))
590 4792 22292 - 22358 Apply scala.Option.orElse message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should be lower than ").+(maxValue): String)))
590 3024 22250 - 22359 Apply org.make.core.ValidationError.apply ValidationError.apply(fieldName, "exceeds_max", message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should be lower than ").+(maxValue): String))))
590 780 22250 - 22370 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "exceeds_max", message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should be lower than ").+(maxValue): String))))).invalidNec[Nothing]
590 4136 22250 - 22370 Block cats.syntax.ValidatedIdOpsBinCompat0.invalidNec cats.implicits.catsSyntaxValidatedIdBinCompat0[org.make.core.ValidationError](ValidationError.apply(fieldName, "exceeds_max", message.orElse[String](scala.Some.apply[String](("".+(fieldName).+(" should be lower than ").+(maxValue): String))))).invalidNec[Nothing]
592 1183 22394 - 22408 TypeApply cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[Long](LongWithParsers.this.value).validNec[Nothing]
592 2143 22394 - 22399 Select org.make.core.Validation.LongWithParsers.value LongWithParsers.this.value
592 4405 22394 - 22408 Block cats.syntax.ValidatedIdOpsBinCompat0.validNec cats.implicits.catsSyntaxValidatedIdBinCompat0[Long](LongWithParsers.this.value).validNec[Nothing]
599 498 22674 - 22678 Select scala.None scala.None
599 2424 22631 - 22649 Apply scala.collection.MapOps.get MapWithParser.this.map.get(fieldName)
599 4735 22697 - 22729 Apply org.make.core.Validation.StringWithParsers.toNonEmpty Validation.this.StringWithParsers(x$14).toNonEmpty(fieldName, message)
599 3033 22631 - 22730 Apply cats.data.Validated.andThen Validation.this.OptionWithParsers[String](MapWithParser.this.map.get(fieldName)).getValidated(fieldName, scala.None, message).andThen[cats.data.NonEmptyChain[org.make.core.ValidationError], org.make.core.Validation.NonEmptyString](((x$14: String) => Validation.this.StringWithParsers(x$14).toNonEmpty(fieldName, message)))
610 788 23012 - 23028 Apply scala.Function1.apply org.make.api.technical.directives.validationdirectivestest validator.apply(value)
617 4249 23219 - 23249 Apply scala.collection.IterableOnceOps.mkString ValidationFailedError.this.errors.mkString("[", ",", "]")
623 1055 23379 - 23389 Select cats.Foldable.Ops.toList org.make.core.validationtest cats.implicits.toFoldableOps[cats.data.NonEmptyChain, org.make.core.ValidationError](nec)(data.this.NonEmptyChainImpl.catsDataInstancesForNonEmptyChainBinCompat1).toList
623 4670 23353 - 23390 Apply org.make.core.ValidationFailedError.<init> org.make.core.validationtest new ValidationFailedError(cats.implicits.toFoldableOps[cats.data.NonEmptyChain, org.make.core.ValidationError](nec)(data.this.NonEmptyChainImpl.catsDataInstancesForNonEmptyChainBinCompat1).toList)
623 2153 23379 - 23379 Select cats.data.NonEmptyChainInstances.catsDataInstancesForNonEmptyChainBinCompat1 org.make.core.validationtest data.this.NonEmptyChainImpl.catsDataInstancesForNonEmptyChainBinCompat1
629 2607 23540 - 23593 Apply scala.Option.getOrElse ValidationError.this.message.getOrElse[String](("".+(ValidationError.this.field).+(" value \'").+(ValidationError.this.key).+("\' was invalid"): String))
630 627 23598 - 23634 Apply java.lang.IllegalArgumentException.<init> new scala.`package`.IllegalArgumentException(errMsg)
636 3829 23715 - 23726 ApplyToImplicitArgs io.circe.generic.semiauto.deriveCodec org.make.api.technical.directives.clientdirectivestest,org.make.core.validationtest io.circe.generic.semiauto.deriveCodec[org.make.core.ValidationError]({ val inst$macro$16: io.circe.generic.codec.DerivedAsObjectCodec[org.make.core.ValidationError] = { final class anon$lazy$macro$15 extends AnyRef with Serializable { def <init>(): anon$lazy$macro$15 = { anon$lazy$macro$15.super.<init>(); () }; <stable> <accessor> lazy val inst$macro$1: io.circe.generic.codec.DerivedAsObjectCodec[org.make.core.ValidationError] = codec.this.DerivedAsObjectCodec.deriveCodec[org.make.core.ValidationError, shapeless.labelled.FieldType[Symbol @@ String("field"),String] :: shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out](shapeless.this.LabelledGeneric.materializeProduct[org.make.core.ValidationError, (Symbol @@ String("field")) :: (Symbol @@ String("key")) :: (Symbol @@ String("message")) :: shapeless.HNil, String :: String :: Option[String] :: shapeless.HNil, shapeless.labelled.FieldType[Symbol @@ String("field"),String] :: shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out](DefaultSymbolicLabelling.instance[org.make.core.ValidationError, (Symbol @@ String("field")) :: (Symbol @@ String("key")) :: (Symbol @@ String("message")) :: shapeless.HNil](::.apply[Symbol @@ String("field"), (Symbol @@ String("key")) :: (Symbol @@ String("message")) :: shapeless.HNil.type](scala.Symbol.apply("field").asInstanceOf[Symbol @@ String("field")], ::.apply[Symbol @@ String("key"), (Symbol @@ String("message")) :: shapeless.HNil.type](scala.Symbol.apply("key").asInstanceOf[Symbol @@ String("key")], ::.apply[Symbol @@ String("message"), shapeless.HNil.type](scala.Symbol.apply("message").asInstanceOf[Symbol @@ String("message")], HNil)))), Generic.instance[org.make.core.ValidationError, String :: String :: Option[String] :: shapeless.HNil](((x0$3: org.make.core.ValidationError) => x0$3 match { case (field: String, key: String, message: Option[String]): org.make.core.ValidationError((field$macro$11 @ _), (key$macro$12 @ _), (message$macro$13 @ _)) => ::.apply[String, String :: Option[String] :: shapeless.HNil.type](field$macro$11, ::.apply[String, Option[String] :: shapeless.HNil.type](key$macro$12, ::.apply[Option[String], shapeless.HNil.type](message$macro$13, HNil))).asInstanceOf[String :: String :: Option[String] :: shapeless.HNil] }), ((x0$4: String :: String :: Option[String] :: shapeless.HNil) => x0$4 match { case (head: String, tail: String :: Option[String] :: shapeless.HNil): String :: String :: Option[String] :: shapeless.HNil((field$macro$8 @ _), (head: String, tail: Option[String] :: shapeless.HNil): String :: Option[String] :: shapeless.HNil((key$macro$9 @ _), (head: Option[String], tail: shapeless.HNil): Option[String] :: shapeless.HNil((message$macro$10 @ _), HNil))) => core.this.ValidationError.apply(field$macro$8, key$macro$9, message$macro$10) })), hlist.this.ZipWithKeys.hconsZipWithKeys[Symbol @@ String("field"), String, (Symbol @@ String("key")) :: (Symbol @@ String("message")) :: shapeless.HNil, String :: Option[String] :: shapeless.HNil, shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out](hlist.this.ZipWithKeys.hconsZipWithKeys[Symbol @@ String("key"), String, (Symbol @@ String("message")) :: shapeless.HNil, Option[String] :: shapeless.HNil, shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out](hlist.this.ZipWithKeys.hconsZipWithKeys[Symbol @@ String("message"), Option[String], shapeless.HNil, shapeless.HNil, shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out](hlist.this.ZipWithKeys.hnilZipWithKeys, Witness.mkWitness[Symbol with shapeless.tag.Tagged[String("message")]](scala.Symbol.apply("message").asInstanceOf[Symbol @@ String("message")].asInstanceOf[Symbol with shapeless.tag.Tagged[String("message")]])), Witness.mkWitness[Symbol with shapeless.tag.Tagged[String("key")]](scala.Symbol.apply("key").asInstanceOf[Symbol @@ String("key")].asInstanceOf[Symbol with shapeless.tag.Tagged[String("key")]])), Witness.mkWitness[Symbol with shapeless.tag.Tagged[String("field")]](scala.Symbol.apply("field").asInstanceOf[Symbol @@ String("field")].asInstanceOf[Symbol with shapeless.tag.Tagged[String("field")]])), scala.this.<:<.refl[shapeless.labelled.FieldType[Symbol @@ String("field"),String] :: shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]), shapeless.Lazy.apply[io.circe.generic.codec.ReprAsObjectCodec[shapeless.labelled.FieldType[Symbol @@ String("field"),String] :: shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]](anon$lazy$macro$15.this.inst$macro$14)).asInstanceOf[io.circe.generic.codec.DerivedAsObjectCodec[org.make.core.ValidationError]]; <stable> <accessor> lazy val inst$macro$14: io.circe.generic.codec.ReprAsObjectCodec[shapeless.labelled.FieldType[Symbol @@ String("field"),String] :: shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out] = ({ final class $anon extends io.circe.generic.codec.ReprAsObjectCodec[shapeless.labelled.FieldType[Symbol @@ String("field"),String] :: shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out] { def <init>(): <$anon: io.circe.generic.codec.ReprAsObjectCodec[shapeless.labelled.FieldType[Symbol @@ String("field"),String] :: shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]> = { $anon.super.<init>(); () }; private[this] val circeGenericDecoderForkey: io.circe.Decoder[String] = circe.this.Decoder.decodeString; private[this] val circeGenericDecoderFormessage: io.circe.Decoder[Option[String]] = circe.this.Decoder.decodeOption[String](circe.this.Decoder.decodeString); private[this] val circeGenericEncoderForkey: io.circe.Encoder[String] = circe.this.Encoder.encodeString; private[this] val circeGenericEncoderFormessage: io.circe.Encoder[Option[String]] = circe.this.Encoder.encodeOption[String](circe.this.Encoder.encodeString); final def encodeObject(a: shapeless.labelled.FieldType[Symbol @@ String("field"),String] :: shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out): io.circe.JsonObject = a match { case (head: shapeless.labelled.FieldType[Symbol @@ String("field"),String], tail: shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out): shapeless.labelled.FieldType[Symbol @@ String("field"),String] :: shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out((circeGenericHListBindingForfield @ _), (head: shapeless.labelled.FieldType[Symbol @@ String("key"),String], tail: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out): shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out((circeGenericHListBindingForkey @ _), (head: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]], tail: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out): shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out((circeGenericHListBindingFormessage @ _), shapeless.HNil))) => io.circe.JsonObject.fromIterable(scala.collection.immutable.Vector.apply[(String, io.circe.Json)](scala.Tuple2.apply[String, io.circe.Json]("field", $anon.this.circeGenericEncoderForkey.apply(circeGenericHListBindingForfield)), scala.Tuple2.apply[String, io.circe.Json]("key", $anon.this.circeGenericEncoderForkey.apply(circeGenericHListBindingForkey)), scala.Tuple2.apply[String, io.circe.Json]("message", $anon.this.circeGenericEncoderFormessage.apply(circeGenericHListBindingFormessage)))) }; final def apply(c: io.circe.HCursor): io.circe.Decoder.Result[shapeless.labelled.FieldType[Symbol @@ String("field"),String] :: shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out] = ReprDecoder.consResults[io.circe.Decoder.Result, Symbol @@ String("field"), String, shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]($anon.this.circeGenericDecoderForkey.tryDecode(c.downField("field")), ReprDecoder.consResults[io.circe.Decoder.Result, Symbol @@ String("key"), String, shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]($anon.this.circeGenericDecoderForkey.tryDecode(c.downField("key")), ReprDecoder.consResults[io.circe.Decoder.Result, Symbol @@ String("message"), Option[String], shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]($anon.this.circeGenericDecoderFormessage.tryDecode(c.downField("message")), ReprDecoder.hnilResult)(io.circe.Decoder.resultInstance))(io.circe.Decoder.resultInstance))(io.circe.Decoder.resultInstance); final override def decodeAccumulating(c: io.circe.HCursor): io.circe.Decoder.AccumulatingResult[shapeless.labelled.FieldType[Symbol @@ String("field"),String] :: shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out] = ReprDecoder.consResults[io.circe.Decoder.AccumulatingResult, Symbol @@ String("field"), String, shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]($anon.this.circeGenericDecoderForkey.tryDecodeAccumulating(c.downField("field")), ReprDecoder.consResults[io.circe.Decoder.AccumulatingResult, Symbol @@ String("key"), String, shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]($anon.this.circeGenericDecoderForkey.tryDecodeAccumulating(c.downField("key")), ReprDecoder.consResults[io.circe.Decoder.AccumulatingResult, Symbol @@ String("message"), Option[String], shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]($anon.this.circeGenericDecoderFormessage.tryDecodeAccumulating(c.downField("message")), ReprDecoder.hnilResultAccumulating)(io.circe.Decoder.accumulatingResultInstance))(io.circe.Decoder.accumulatingResultInstance))(io.circe.Decoder.accumulatingResultInstance) }; new $anon() }: io.circe.generic.codec.ReprAsObjectCodec[shapeless.labelled.FieldType[Symbol @@ String("field"),String] :: shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]).asInstanceOf[io.circe.generic.codec.ReprAsObjectCodec[shapeless.labelled.FieldType[Symbol @@ String("field"),String] :: shapeless.labelled.FieldType[Symbol @@ String("key"),String] :: shapeless.labelled.FieldType[Symbol @@ String("message"),Option[String]] :: shapeless.ops.hlist.ZipWithKeys.hnilZipWithKeys.Out]] }; new anon$lazy$macro$15().inst$macro$1 }; shapeless.Lazy.apply[io.circe.generic.codec.DerivedAsObjectCodec[org.make.core.ValidationError]](inst$macro$16) })
638 2703 23783 - 23805 Apply java.lang.Throwable.toString x$15.toThrowable.toString()
638 1053 23773 - 23806 Apply cats.Show.show org.make.api.technical.directives.clientdirectivestest,org.make.core.validationtest cats.Show.show[org.make.core.ValidationError](((x$15: org.make.core.ValidationError) => x$15.toThrowable.toString()))
645 4260 23931 - 23945 Apply org.jsoup.safety.Safelist.basic org.make.api.technical.crm.sendmailpublisherservicetest,org.make.core.validationtest org.jsoup.safety.Safelist.basic()
645 2289 23919 - 23946 Apply org.jsoup.safety.Cleaner.<init> org.make.api.technical.crm.sendmailpublisherservicetest,org.make.core.validationtest new org.jsoup.safety.Cleaner(org.jsoup.safety.Safelist.basic())
648 1344 24078 - 24113 Apply org.jsoup.Jsoup.parseBodyFragment org.make.api.technical.crm.sendmailpublisherservicetest,org.make.core.validationtest org.jsoup.Jsoup.parseBodyFragment(unsafeHtml)
648 4349 24064 - 24114 Apply org.jsoup.safety.Cleaner.clean org.make.api.technical.crm.sendmailpublisherservicetest,org.make.core.validationtest SanitizedHtml.this.cleaner.clean(org.jsoup.Jsoup.parseBodyFragment(unsafeHtml))
650 2552 24171 - 24206 Apply scala.Int.> org.make.core.validationtest sanitized.text().length().>(maxLength)
651 3885 24218 - 24276 Apply scala.util.Failure.apply org.make.core.validationtest scala.util.Failure.apply[Nothing](new scala.`package`.Error(("Text exceeded ".+(maxLength).+(" characters"): String)))
651 640 24226 - 24275 Apply java.lang.Error.<init> org.make.core.validationtest new scala.`package`.Error(("Text exceeded ".+(maxLength).+(" characters"): String))
653 2992 24327 - 24359 Apply org.jsoup.select.Elements.toString org.make.api.technical.crm.sendmailpublisherservicetest,org.make.core.validationtest sanitized.body().children().toString()
653 928 24309 - 24360 Apply org.make.core.SanitizedHtml.<init> org.make.api.technical.crm.sendmailpublisherservicetest,org.make.core.validationtest new SanitizedHtml(sanitized.body().children().toString())
653 4193 24301 - 24361 Apply scala.util.Success.apply org.make.api.technical.crm.sendmailpublisherservicetest,org.make.core.validationtest scala.util.Success.apply[org.make.core.SanitizedHtml](new SanitizedHtml(sanitized.body().children().toString()))