-
Notifications
You must be signed in to change notification settings - Fork 1
/
bigint.ts
48 lines (46 loc) · 999 Bytes
/
bigint.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
import { coerce, makeSimpleSchema, Schema } from "../schema";
import { ValidationIssue } from "../validation";
export function bigInt(
issues?: Partial<{
required: string;
wrongType: string;
}>
): Schema<bigint, bigint, { type: "bigint" }> {
return makeSimpleSchema(
(v) => {
if (v === undefined || v === null) {
return new ValidationIssue("required", issues?.required, v);
}
if (typeof v !== "bigint") {
return new ValidationIssue(
"wrong_type",
issues?.wrongType,
v,
"bigint"
);
}
},
() => ({ type: "bigint" })
);
}
export function coercedBigInt(
issues?: Partial<{
required: string;
wrongType: string;
}>
) {
return coerce(bigInt(issues), (v) => {
if (
typeof v === "string" ||
typeof v === "boolean" ||
typeof v === "number"
) {
try {
return BigInt(v);
} catch {
return v;
}
}
return v;
});
}