Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.12 KB | None | 0 0
  1. /**
  2. * A string guaranteed to have a length within the range [L,H)
  3. */
  4. export type WithinRangeString<L extends number, H extends number> = string &
  5. IWithinRangeStringTag<L, H>;
  6.  
  7. function validateWithinRangeString<L extends number, H extends number>(
  8. arg: string,
  9. l: L,
  10. h: H
  11. ): Option<ReadonlyArray<string>> {
  12. const validation = validateAll([
  13. { arg, length: arg.length },
  14. {
  15. arg: [[isString, "not string"]],
  16. length: [[gt(l), "too short"], [lt(h), "too long"]]
  17. }
  18. ]);
  19. if (hasErrors(validation)) {
  20. return option(getErrorStrings(validation));
  21. } else {
  22. return none;
  23. }
  24. }
  25.  
  26. export function isWithinRangeString<L extends number, H extends number>(
  27. arg: string,
  28. l: L,
  29. h: H
  30. ): arg is WithinRangeString<L, H> {
  31. return validateWithinRangeString(arg, l, h).match({
  32. none: always(true),
  33. some: always(false)
  34. });
  35. }
  36.  
  37. export function toWithinRangeString<L extends number, H extends number>(
  38. arg: string,
  39. l: L,
  40. h: H
  41. ): Either<ReadonlyArray<string>, WithinRangeString<L, H>> {
  42. return isWithinRangeString(arg, l, h)
  43. ? right(arg)
  44. : left(validateWithinRangeString(arg, l, h).getOrElse([]));
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement