-
Notifications
You must be signed in to change notification settings - Fork 1
/
string.ts
128 lines (125 loc) · 2.75 KB
/
string.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import { refine, refineWithMetainformation } from "../refine";
import { Schema, coerce, makeSimpleSchema } from "../schema";
import { ValidationIssue } from "../validation";
export function string(
issues?: Partial<{
required: string;
wrongType: string;
}>
): Schema<string, string, { type: "string" }> {
return makeSimpleSchema(
(v) => {
if (v === undefined || v === null) {
return new ValidationIssue("required", issues?.required, v);
}
if (typeof v !== "string") {
return new ValidationIssue(
"wrong_type",
issues?.wrongType,
v,
"string"
);
}
},
() => ({ type: "string" })
);
}
export function coercedString() {
return coerce(string(), String);
}
export function minLength<O, M>(
schema: Schema<string, O, M>,
minLength: number,
issue?: string
) {
return refineWithMetainformation(
schema,
(v) => {
if (v.length < minLength) {
return new ValidationIssue("minLength", issue, v, minLength);
}
},
{ minLength }
);
}
export function maxLength<O, M>(
schema: Schema<string, O, M>,
maxLength: number,
issue?: string
) {
return refineWithMetainformation(
schema,
(v) => {
if (v.length > maxLength) {
return new ValidationIssue("maxLength", issue, v, maxLength);
}
},
{ maxLength }
);
}
export function length<O, M>(
schema: Schema<string, O, M>,
length: number,
issue?: string
) {
return refineWithMetainformation(
schema,
(v) => {
if (v.length !== length) {
return new ValidationIssue("length", issue, v, length);
}
},
{ minLength: length, maxLength: length }
);
}
export function nonEmptyString<O, M>(
schema: Schema<string, O, M>,
issue?: string
) {
return minLength(schema, 1, issue);
}
export function pattern<O, M>(
schema: Schema<string, O, M>,
pattern: RegExp,
issue?: string
) {
return refineWithMetainformation(
schema,
(v) => {
if (!pattern.test(v)) {
return new ValidationIssue("pattern", issue, v, pattern);
}
},
{ pattern }
);
}
export function startsWith<O, M>(
schema: Schema<string, O, M>,
searchString: string,
position?: number,
issue?: string
) {
return refine(schema, (v) => {
if (!v.startsWith(searchString, position)) {
return new ValidationIssue(
"startsWith",
issue,
v,
searchString,
position
);
}
});
}
export function endsWith<O, M>(
schema: Schema<string, O, M>,
searchString: string,
position?: number,
issue?: string
) {
return refine(schema, (v) => {
if (!v.endsWith(searchString, position)) {
return new ValidationIssue("endsWith", issue, v, searchString, position);
}
});
}