Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * A string guaranteed to have a length within the range [L,H)
- */
- export type WithinRangeString<L extends number, H extends number> = string &
- IWithinRangeStringTag<L, H>;
- function validateWithinRangeString<L extends number, H extends number>(
- arg: string,
- l: L,
- h: H
- ): Option<ReadonlyArray<string>> {
- const validation = validateAll([
- { arg, length: arg.length },
- {
- arg: [[isString, "not string"]],
- length: [[gt(l), "too short"], [lt(h), "too long"]]
- }
- ]);
- if (hasErrors(validation)) {
- return option(getErrorStrings(validation));
- } else {
- return none;
- }
- }
- export function isWithinRangeString<L extends number, H extends number>(
- arg: string,
- l: L,
- h: H
- ): arg is WithinRangeString<L, H> {
- return validateWithinRangeString(arg, l, h).match({
- none: always(true),
- some: always(false)
- });
- }
- export function toWithinRangeString<L extends number, H extends number>(
- arg: string,
- l: L,
- h: H
- ): Either<ReadonlyArray<string>, WithinRangeString<L, H>> {
- return isWithinRangeString(arg, l, h)
- ? right(arg)
- : left(validateWithinRangeString(arg, l, h).getOrElse([]));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement