@atproto/lex-schema 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +75 -0
- package/dist/core/$type.d.ts +6 -3
- package/dist/core/$type.d.ts.map +1 -1
- package/dist/core/$type.js +1 -0
- package/dist/core/$type.js.map +1 -1
- package/dist/core/record-key.d.ts +3 -3
- package/dist/core/record-key.d.ts.map +1 -1
- package/dist/core/record-key.js +12 -6
- package/dist/core/record-key.js.map +1 -1
- package/dist/core/result.d.ts.map +1 -1
- package/dist/core/result.js +6 -0
- package/dist/core/result.js.map +1 -1
- package/dist/core/string-format.d.ts +30 -27
- package/dist/core/string-format.d.ts.map +1 -1
- package/dist/core/string-format.js +56 -42
- package/dist/core/string-format.js.map +1 -1
- package/dist/core/types.d.ts +9 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/external.d.ts +31 -28
- package/dist/external.d.ts.map +1 -1
- package/dist/external.js +33 -17
- package/dist/external.js.map +1 -1
- package/dist/schema/_parameters.d.ts +2 -2
- package/dist/schema/_parameters.d.ts.map +1 -1
- package/dist/schema/array.d.ts +5 -6
- package/dist/schema/array.d.ts.map +1 -1
- package/dist/schema/array.js +5 -6
- package/dist/schema/array.js.map +1 -1
- package/dist/schema/blob.d.ts +2 -3
- package/dist/schema/blob.d.ts.map +1 -1
- package/dist/schema/blob.js +1 -2
- package/dist/schema/blob.js.map +1 -1
- package/dist/schema/boolean.d.ts +4 -5
- package/dist/schema/boolean.d.ts.map +1 -1
- package/dist/schema/boolean.js +2 -3
- package/dist/schema/boolean.js.map +1 -1
- package/dist/schema/bytes.d.ts +3 -4
- package/dist/schema/bytes.d.ts.map +1 -1
- package/dist/schema/bytes.js +2 -3
- package/dist/schema/bytes.js.map +1 -1
- package/dist/schema/cid.d.ts +13 -6
- package/dist/schema/cid.d.ts.map +1 -1
- package/dist/schema/cid.js +2 -4
- package/dist/schema/cid.js.map +1 -1
- package/dist/schema/custom.d.ts +3 -4
- package/dist/schema/custom.d.ts.map +1 -1
- package/dist/schema/custom.js +4 -3
- package/dist/schema/custom.js.map +1 -1
- package/dist/schema/dict.d.ts +3 -3
- package/dist/schema/dict.d.ts.map +1 -1
- package/dist/schema/dict.js +1 -1
- package/dist/schema/dict.js.map +1 -1
- package/dist/schema/discriminated-union.d.ts +15 -24
- package/dist/schema/discriminated-union.d.ts.map +1 -1
- package/dist/schema/discriminated-union.js +40 -64
- package/dist/schema/discriminated-union.js.map +1 -1
- package/dist/schema/enum.d.ts +8 -4
- package/dist/schema/enum.d.ts.map +1 -1
- package/dist/schema/enum.js +5 -3
- package/dist/schema/enum.js.map +1 -1
- package/dist/schema/integer.d.ts +3 -4
- package/dist/schema/integer.d.ts.map +1 -1
- package/dist/schema/integer.js +3 -4
- package/dist/schema/integer.js.map +1 -1
- package/dist/schema/intersection.d.ts +22 -14
- package/dist/schema/intersection.d.ts.map +1 -1
- package/dist/schema/intersection.js +12 -22
- package/dist/schema/intersection.js.map +1 -1
- package/dist/schema/literal.d.ts +7 -3
- package/dist/schema/literal.d.ts.map +1 -1
- package/dist/schema/literal.js +5 -3
- package/dist/schema/literal.js.map +1 -1
- package/dist/schema/never.d.ts +2 -2
- package/dist/schema/never.d.ts.map +1 -1
- package/dist/schema/never.js +1 -1
- package/dist/schema/never.js.map +1 -1
- package/dist/schema/null.d.ts +2 -3
- package/dist/schema/null.d.ts.map +1 -1
- package/dist/schema/null.js +1 -2
- package/dist/schema/null.js.map +1 -1
- package/dist/schema/nullable.d.ts +7 -0
- package/dist/schema/nullable.d.ts.map +1 -0
- package/dist/schema/nullable.js +19 -0
- package/dist/schema/nullable.js.map +1 -0
- package/dist/schema/object.d.ts +10 -44
- package/dist/schema/object.d.ts.map +1 -1
- package/dist/schema/object.js +10 -46
- package/dist/schema/object.js.map +1 -1
- package/dist/schema/optional.d.ts +7 -0
- package/dist/schema/optional.d.ts.map +1 -0
- package/dist/schema/optional.js +25 -0
- package/dist/schema/optional.js.map +1 -0
- package/dist/schema/params.d.ts +14 -19
- package/dist/schema/params.d.ts.map +1 -1
- package/dist/schema/params.js +10 -24
- package/dist/schema/params.js.map +1 -1
- package/dist/schema/payload.d.ts +4 -4
- package/dist/schema/payload.d.ts.map +1 -1
- package/dist/schema/payload.js.map +1 -1
- package/dist/schema/permission-set.d.ts +6 -6
- package/dist/schema/permission-set.d.ts.map +1 -1
- package/dist/schema/permission-set.js +1 -2
- package/dist/schema/permission-set.js.map +1 -1
- package/dist/schema/permission.d.ts +0 -1
- package/dist/schema/permission.d.ts.map +1 -1
- package/dist/schema/permission.js +0 -1
- package/dist/schema/permission.js.map +1 -1
- package/dist/schema/procedure.d.ts +8 -9
- package/dist/schema/procedure.d.ts.map +1 -1
- package/dist/schema/procedure.js +0 -1
- package/dist/schema/procedure.js.map +1 -1
- package/dist/schema/query.d.ts +7 -8
- package/dist/schema/query.d.ts.map +1 -1
- package/dist/schema/query.js +0 -1
- package/dist/schema/query.js.map +1 -1
- package/dist/schema/record.d.ts +34 -28
- package/dist/schema/record.d.ts.map +1 -1
- package/dist/schema/record.js +1 -2
- package/dist/schema/record.js.map +1 -1
- package/dist/schema/ref.d.ts +2 -3
- package/dist/schema/ref.d.ts.map +1 -1
- package/dist/schema/ref.js +1 -2
- package/dist/schema/ref.js.map +1 -1
- package/dist/schema/refine.d.ts +18 -0
- package/dist/schema/refine.d.ts.map +1 -0
- package/dist/schema/refine.js +33 -0
- package/dist/schema/refine.js.map +1 -0
- package/dist/schema/regexp.d.ts +7 -0
- package/dist/schema/regexp.d.ts.map +1 -0
- package/dist/schema/regexp.js +22 -0
- package/dist/schema/regexp.js.map +1 -0
- package/dist/schema/string.d.ts +4 -8
- package/dist/schema/string.d.ts.map +1 -1
- package/dist/schema/string.js +6 -3
- package/dist/schema/string.js.map +1 -1
- package/dist/schema/subscription.d.ts +7 -6
- package/dist/schema/subscription.d.ts.map +1 -1
- package/dist/schema/subscription.js.map +1 -1
- package/dist/schema/token.d.ts +2 -3
- package/dist/schema/token.d.ts.map +1 -1
- package/dist/schema/token.js +1 -2
- package/dist/schema/token.js.map +1 -1
- package/dist/schema/typed-object.d.ts +29 -27
- package/dist/schema/typed-object.d.ts.map +1 -1
- package/dist/schema/typed-object.js +1 -2
- package/dist/schema/typed-object.js.map +1 -1
- package/dist/schema/typed-ref.d.ts +2 -2
- package/dist/schema/typed-ref.d.ts.map +1 -1
- package/dist/schema/typed-ref.js +1 -1
- package/dist/schema/typed-ref.js.map +1 -1
- package/dist/schema/typed-union.d.ts +3 -4
- package/dist/schema/typed-union.d.ts.map +1 -1
- package/dist/schema/typed-union.js +3 -10
- package/dist/schema/typed-union.js.map +1 -1
- package/dist/schema/union.d.ts +2 -2
- package/dist/schema/union.d.ts.map +1 -1
- package/dist/schema/union.js +1 -1
- package/dist/schema/union.js.map +1 -1
- package/dist/schema/unknown-object.d.ts +2 -3
- package/dist/schema/unknown-object.d.ts.map +1 -1
- package/dist/schema/unknown-object.js +1 -2
- package/dist/schema/unknown-object.js.map +1 -1
- package/dist/schema/unknown.d.ts +2 -2
- package/dist/schema/unknown.d.ts.map +1 -1
- package/dist/schema/unknown.js +1 -1
- package/dist/schema/unknown.js.map +1 -1
- package/dist/schema.d.ts +4 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +6 -1
- package/dist/schema.js.map +1 -1
- package/dist/util/array-agg.d.ts.map +1 -1
- package/dist/util/array-agg.js +1 -0
- package/dist/util/array-agg.js.map +1 -1
- package/dist/util/lazy-property.d.ts +2 -0
- package/dist/util/lazy-property.d.ts.map +1 -0
- package/dist/util/lazy-property.js +14 -0
- package/dist/util/lazy-property.js.map +1 -0
- package/dist/validation/schema.d.ts +24 -0
- package/dist/validation/schema.d.ts.map +1 -0
- package/dist/validation/schema.js +57 -0
- package/dist/validation/schema.js.map +1 -0
- package/dist/validation/validation-error.d.ts +3 -3
- package/dist/validation/validation-error.d.ts.map +1 -1
- package/dist/validation/validation-error.js +32 -4
- package/dist/validation/validation-error.js.map +1 -1
- package/dist/validation/validation-issue.d.ts +32 -24
- package/dist/validation/validation-issue.d.ts.map +1 -1
- package/dist/validation/validation-issue.js +136 -92
- package/dist/validation/validation-issue.js.map +1 -1
- package/dist/validation/validator.d.ts +20 -50
- package/dist/validation/validator.d.ts.map +1 -1
- package/dist/validation/validator.js +40 -134
- package/dist/validation/validator.js.map +1 -1
- package/dist/validation.d.ts +1 -0
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +1 -0
- package/dist/validation.js.map +1 -1
- package/package.json +8 -4
- package/src/core/$type.ts +7 -4
- package/src/core/record-key.ts +12 -5
- package/src/core/result.ts +6 -0
- package/src/core/string-format.ts +97 -61
- package/src/core/types.ts +12 -6
- package/src/external.ts +92 -70
- package/src/schema/_parameters.test.ts +416 -0
- package/src/schema/array.test.ts +237 -0
- package/src/schema/array.ts +17 -11
- package/src/schema/blob.test.ts +506 -0
- package/src/schema/blob.ts +3 -5
- package/src/schema/boolean.test.ts +116 -0
- package/src/schema/boolean.ts +5 -7
- package/src/schema/bytes.test.ts +226 -0
- package/src/schema/bytes.ts +4 -6
- package/src/schema/cid.test.ts +155 -0
- package/src/schema/cid.ts +14 -8
- package/src/schema/custom.test.ts +413 -0
- package/src/schema/custom.ts +10 -8
- package/src/schema/dict.test.ts +198 -0
- package/src/schema/dict.ts +6 -8
- package/src/schema/discriminated-union.test.ts +675 -0
- package/src/schema/discriminated-union.ts +68 -95
- package/src/schema/enum.test.ts +396 -0
- package/src/schema/enum.ts +12 -5
- package/src/schema/integer.test.ts +312 -0
- package/src/schema/integer.ts +5 -7
- package/src/schema/intersection.test.ts +32 -0
- package/src/schema/intersection.ts +37 -40
- package/src/schema/literal.test.ts +531 -0
- package/src/schema/literal.ts +12 -5
- package/src/schema/never.test.ts +174 -0
- package/src/schema/never.ts +3 -10
- package/src/schema/null.test.ts +79 -0
- package/src/schema/null.ts +3 -5
- package/src/schema/nullable.test.ts +480 -0
- package/src/schema/nullable.ts +23 -0
- package/src/schema/object.test.ts +47 -115
- package/src/schema/object.ts +19 -123
- package/src/schema/optional.test.ts +485 -0
- package/src/schema/optional.ts +31 -0
- package/src/schema/params.test.ts +582 -0
- package/src/schema/params.ts +37 -55
- package/src/schema/payload.test.ts +345 -0
- package/src/schema/payload.ts +5 -5
- package/src/schema/permission-set.test.ts +679 -0
- package/src/schema/permission-set.ts +6 -8
- package/src/schema/permission.test.ts +536 -0
- package/src/schema/permission.ts +0 -2
- package/src/schema/procedure.test.ts +443 -0
- package/src/schema/procedure.ts +11 -13
- package/src/schema/query.test.ts +408 -0
- package/src/schema/query.ts +9 -11
- package/src/schema/record.test.ts +694 -0
- package/src/schema/record.ts +38 -36
- package/src/schema/ref.test.ts +365 -0
- package/src/schema/ref.ts +8 -5
- package/src/schema/refine.test.ts +578 -0
- package/src/schema/refine.ts +85 -0
- package/src/schema/regexp.test.ts +580 -0
- package/src/schema/regexp.ts +22 -0
- package/src/schema/string.test.ts +612 -0
- package/src/schema/string.ts +11 -17
- package/src/schema/subscription.test.ts +689 -0
- package/src/schema/subscription.ts +13 -8
- package/src/schema/token.test.ts +428 -0
- package/src/schema/token.ts +3 -5
- package/src/schema/typed-object.test.ts +612 -0
- package/src/schema/typed-object.ts +23 -20
- package/src/schema/typed-ref.test.ts +823 -0
- package/src/schema/typed-ref.ts +10 -5
- package/src/schema/typed-union.test.ts +378 -0
- package/src/schema/typed-union.ts +6 -15
- package/src/schema/union.test.ts +200 -0
- package/src/schema/union.ts +5 -4
- package/src/schema/unknown-object.test.ts +592 -0
- package/src/schema/unknown-object.ts +3 -5
- package/src/schema/unknown.test.ts +312 -0
- package/src/schema/unknown.ts +3 -3
- package/src/schema.ts +7 -1
- package/src/util/array-agg.ts +1 -0
- package/src/util/lazy-property.ts +14 -0
- package/src/validation/schema.ts +92 -0
- package/src/validation/validation-error.ts +60 -9
- package/src/validation/validation-issue.ts +141 -144
- package/src/validation/validator.ts +67 -206
- package/src/validation.ts +1 -0
- package/tsconfig.build.json +12 -0
- package/tsconfig.json +7 -0
- package/tsconfig.tests.json +9 -0
|
@@ -1,53 +1,149 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.stringifyType = stringifyType;
|
|
5
|
-
exports.stringifyValue = stringifyValue;
|
|
6
|
-
exports.aggregateIssues = aggregateIssues;
|
|
3
|
+
exports.IssueTooSmall = exports.IssueTooBig = exports.IssueRequiredKey = exports.IssueInvalidValue = exports.IssueInvalidType = exports.IssueInvalidFormat = exports.IssueCustom = exports.Issue = void 0;
|
|
7
4
|
const lex_data_1 = require("@atproto/lex-data");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
5
|
+
class Issue {
|
|
6
|
+
code;
|
|
7
|
+
path;
|
|
8
|
+
input;
|
|
9
|
+
constructor(code, path, input) {
|
|
10
|
+
this.code = code;
|
|
11
|
+
this.path = path;
|
|
12
|
+
this.input = input;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.Issue = Issue;
|
|
16
|
+
class IssueCustom extends Issue {
|
|
17
|
+
path;
|
|
18
|
+
input;
|
|
19
|
+
message;
|
|
20
|
+
constructor(path, input, message) {
|
|
21
|
+
super('custom', path, input);
|
|
22
|
+
this.path = path;
|
|
23
|
+
this.input = input;
|
|
24
|
+
this.message = message;
|
|
25
|
+
}
|
|
26
|
+
toString() {
|
|
27
|
+
return `${this.message}${stringifyPath(this.path)}`;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.IssueCustom = IssueCustom;
|
|
31
|
+
class IssueInvalidFormat extends Issue {
|
|
32
|
+
format;
|
|
33
|
+
message;
|
|
34
|
+
constructor(path, input, format, message) {
|
|
35
|
+
super('invalid_format', path, input);
|
|
36
|
+
this.format = format;
|
|
37
|
+
this.message = message;
|
|
38
|
+
}
|
|
39
|
+
toString() {
|
|
40
|
+
return `Invalid ${this.formatDescription} format${this.message ? ` (${this.message})` : ''}${stringifyPath(this.path)} (got ${stringifyValue(this.input)})`;
|
|
41
|
+
}
|
|
42
|
+
get formatDescription() {
|
|
43
|
+
switch (this.format) {
|
|
44
|
+
case 'at-identifier':
|
|
45
|
+
return `AT identifier`;
|
|
46
|
+
case 'did':
|
|
47
|
+
return `DID`;
|
|
48
|
+
case 'nsid':
|
|
49
|
+
return `NSID`;
|
|
50
|
+
case 'cid':
|
|
51
|
+
return `CID string`;
|
|
52
|
+
case 'tid':
|
|
53
|
+
return `TID string`;
|
|
54
|
+
case 'record-key':
|
|
55
|
+
return `record key`;
|
|
56
|
+
default:
|
|
57
|
+
return this.format;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.IssueInvalidFormat = IssueInvalidFormat;
|
|
62
|
+
class IssueInvalidType extends Issue {
|
|
63
|
+
expected;
|
|
64
|
+
constructor(path, input, expected) {
|
|
65
|
+
super('invalid_type', path, input);
|
|
66
|
+
this.expected = expected;
|
|
67
|
+
}
|
|
68
|
+
toString() {
|
|
69
|
+
return `Expected ${oneOf(this.expected.map(stringifyExpectedType))} value type${stringifyPath(this.path)} (got ${stringifyType(this.input)})`;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.IssueInvalidType = IssueInvalidType;
|
|
73
|
+
class IssueInvalidValue extends Issue {
|
|
74
|
+
values;
|
|
75
|
+
constructor(path, input, values) {
|
|
76
|
+
super('invalid_value', path, input);
|
|
77
|
+
this.values = values;
|
|
78
|
+
}
|
|
79
|
+
toString() {
|
|
80
|
+
return `Expected ${oneOf(this.values.map(stringifyValue))}${stringifyPath(this.path)} (got ${stringifyValue(this.input)})`;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.IssueInvalidValue = IssueInvalidValue;
|
|
84
|
+
class IssueRequiredKey extends Issue {
|
|
85
|
+
key;
|
|
86
|
+
constructor(path, input, key) {
|
|
87
|
+
super('required_key', path, input);
|
|
88
|
+
this.key = key;
|
|
89
|
+
}
|
|
90
|
+
toString() {
|
|
91
|
+
return `Missing required key "${String(this.key)}"${stringifyPath(this.path)}`;
|
|
29
92
|
}
|
|
30
93
|
}
|
|
94
|
+
exports.IssueRequiredKey = IssueRequiredKey;
|
|
95
|
+
class IssueTooBig extends Issue {
|
|
96
|
+
maximum;
|
|
97
|
+
type;
|
|
98
|
+
actual;
|
|
99
|
+
constructor(path, input, maximum, type, actual) {
|
|
100
|
+
super('too_big', path, input);
|
|
101
|
+
this.maximum = maximum;
|
|
102
|
+
this.type = type;
|
|
103
|
+
this.actual = actual;
|
|
104
|
+
}
|
|
105
|
+
toString() {
|
|
106
|
+
return `${this.type} too big (maximum ${this.maximum})${stringifyPath(this.path)} (got ${this.actual})`;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.IssueTooBig = IssueTooBig;
|
|
110
|
+
class IssueTooSmall extends Issue {
|
|
111
|
+
minimum;
|
|
112
|
+
type;
|
|
113
|
+
actual;
|
|
114
|
+
constructor(path, input, minimum, type, actual) {
|
|
115
|
+
super('too_small', path, input);
|
|
116
|
+
this.minimum = minimum;
|
|
117
|
+
this.type = type;
|
|
118
|
+
this.actual = actual;
|
|
119
|
+
}
|
|
120
|
+
toString() {
|
|
121
|
+
return `${this.type} too small (minimum ${this.minimum})${stringifyPath(this.path)} (got ${this.actual})`;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
exports.IssueTooSmall = IssueTooSmall;
|
|
31
125
|
function stringifyExpectedType(expected) {
|
|
32
126
|
if (expected === '$typed') {
|
|
33
127
|
return 'an object or record which includes a "$type" property';
|
|
34
128
|
}
|
|
35
129
|
return expected;
|
|
36
130
|
}
|
|
131
|
+
function stringifyPath(path) {
|
|
132
|
+
return ` at ${buildJsonPath(path)}`;
|
|
133
|
+
}
|
|
37
134
|
function buildJsonPath(path) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
135
|
+
return `$${path.map(toJsonPathSegment).join('')}`;
|
|
136
|
+
}
|
|
137
|
+
function toJsonPathSegment(segment) {
|
|
138
|
+
if (typeof segment === 'number') {
|
|
139
|
+
return `[${segment}]`;
|
|
140
|
+
}
|
|
141
|
+
else if (/^[a-zA-Z_$][a-zA-Z0-9_]*$/.test(segment)) {
|
|
142
|
+
return `.${segment}`;
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
return `[${JSON.stringify(segment)}]`;
|
|
49
146
|
}
|
|
50
|
-
return jsonPath;
|
|
51
147
|
}
|
|
52
148
|
function oneOf(arr) {
|
|
53
149
|
if (arr.length === 0)
|
|
@@ -56,30 +152,6 @@ function oneOf(arr) {
|
|
|
56
152
|
return arr[0];
|
|
57
153
|
return `one of ${arr.slice(0, -1).join(', ')} or ${arr.at(-1)}`;
|
|
58
154
|
}
|
|
59
|
-
function stringifyStringFormat(format) {
|
|
60
|
-
switch (format) {
|
|
61
|
-
case 'datetime':
|
|
62
|
-
return 'datetime';
|
|
63
|
-
case 'language':
|
|
64
|
-
return 'language';
|
|
65
|
-
case 'at-identifier':
|
|
66
|
-
return `AT identifier`;
|
|
67
|
-
case 'did':
|
|
68
|
-
return `DID`;
|
|
69
|
-
case 'handle':
|
|
70
|
-
return `handle`;
|
|
71
|
-
case 'nsid':
|
|
72
|
-
return `NSID`;
|
|
73
|
-
case 'cid':
|
|
74
|
-
return `CID string`;
|
|
75
|
-
case 'tid':
|
|
76
|
-
return `TID string`;
|
|
77
|
-
case 'record-key':
|
|
78
|
-
return `record key`;
|
|
79
|
-
default:
|
|
80
|
-
return format;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
155
|
function stringifyType(value) {
|
|
84
156
|
switch (typeof value) {
|
|
85
157
|
case 'object':
|
|
@@ -87,7 +159,7 @@ function stringifyType(value) {
|
|
|
87
159
|
return 'null';
|
|
88
160
|
if (Array.isArray(value))
|
|
89
161
|
return 'array';
|
|
90
|
-
if (lex_data_1.
|
|
162
|
+
if ((0, lex_data_1.asCid)(value))
|
|
91
163
|
return 'cid';
|
|
92
164
|
if (value instanceof Date)
|
|
93
165
|
return 'date';
|
|
@@ -128,40 +200,12 @@ function stringifyValue(value) {
|
|
|
128
200
|
return stringifyType(value);
|
|
129
201
|
}
|
|
130
202
|
}
|
|
203
|
+
/*@__NO_SIDE_EFFECTS__*/
|
|
131
204
|
function stringifyObjectEntry([key, _value]) {
|
|
132
205
|
return `${JSON.stringify(key)}: ...`;
|
|
133
206
|
}
|
|
207
|
+
/*@__NO_SIDE_EFFECTS__*/
|
|
134
208
|
function stringifyArray(arr, fn, n = 2) {
|
|
135
209
|
return arr.slice(0, n).map(fn).join(', ') + (arr.length > n ? ', ...' : '');
|
|
136
210
|
}
|
|
137
|
-
function aggregateIssues(issues) {
|
|
138
|
-
// Quick path for common cases
|
|
139
|
-
if (issues.length <= 1)
|
|
140
|
-
return issues;
|
|
141
|
-
if (issues.length === 2 && issues[0].code !== issues[1].code)
|
|
142
|
-
return issues;
|
|
143
|
-
return [
|
|
144
|
-
// Aggregate invalid_type with identical paths
|
|
145
|
-
...(0, array_agg_js_1.arrayAgg)(issues.filter((issue) => issue.code === 'invalid_type'), (a, b) => comparePropertyPaths(a.path, b.path), (issues) => ({
|
|
146
|
-
...issues[0],
|
|
147
|
-
expected: Array.from(new Set(issues.flatMap((iss) => iss.expected))),
|
|
148
|
-
})),
|
|
149
|
-
// Aggregate invalid_value with identical paths
|
|
150
|
-
...(0, array_agg_js_1.arrayAgg)(issues.filter((issue) => issue.code === 'invalid_value'), (a, b) => comparePropertyPaths(a.path, b.path), (issues) => ({
|
|
151
|
-
...issues[0],
|
|
152
|
-
values: Array.from(new Set(issues.flatMap((iss) => iss.values))),
|
|
153
|
-
})),
|
|
154
|
-
// Pass through other issues
|
|
155
|
-
...issues.filter((issue) => issue.code !== 'invalid_type' && issue.code !== 'invalid_value'),
|
|
156
|
-
];
|
|
157
|
-
}
|
|
158
|
-
function comparePropertyPaths(a, b) {
|
|
159
|
-
if (a.length !== b.length)
|
|
160
|
-
return false;
|
|
161
|
-
for (let i = 0; i < a.length; i++) {
|
|
162
|
-
if (a[i] !== b[i])
|
|
163
|
-
return false;
|
|
164
|
-
}
|
|
165
|
-
return true;
|
|
166
|
-
}
|
|
167
211
|
//# sourceMappingURL=validation-issue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation-issue.js","sourceRoot":"","sources":["../../src/validation/validation-issue.ts"],"names":[],"mappings":"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","sourcesContent":["import { CID, isPlainObject } from '@atproto/lex-data'\nimport { arrayAgg } from '../util/array-agg.js'\nimport { PropertyKey } from './property-key.js'\n\nexport interface Issue<I = unknown> {\n readonly input: I\n readonly code: string\n readonly message?: string\n readonly path: readonly PropertyKey[]\n}\n\nexport interface IssueCustom extends Issue {\n readonly code: 'custom'\n readonly message: string\n}\n\nexport interface IssueInvalidFormat extends Issue {\n readonly code: 'invalid_format'\n readonly format: string\n}\n\nexport interface IssueInvalidType extends Issue {\n readonly code: 'invalid_type'\n readonly expected: readonly string[]\n}\n\nexport interface IssueInvalidValue extends Issue {\n readonly code: 'invalid_value'\n readonly values: readonly unknown[]\n}\n\nexport interface IssueRequiredKey extends Issue {\n readonly code: 'required_key'\n readonly key: PropertyKey\n}\n\nexport interface IssueTooBig extends Issue {\n readonly code: 'too_big'\n readonly maximum: number\n readonly type: 'array' | 'string' | 'integer' | 'grapheme' | 'bytes' | 'blob'\n readonly actual: number\n}\n\nexport interface IssueTooSmall extends Issue {\n readonly code: 'too_small'\n readonly minimum: number\n readonly type: 'array' | 'string' | 'integer' | 'grapheme' | 'bytes'\n readonly actual: number\n}\n\nexport type ValidationIssue =\n | IssueCustom\n | IssueInvalidFormat\n | IssueInvalidType\n | IssueInvalidValue\n | IssueRequiredKey\n | IssueTooBig\n | IssueTooSmall\n\nexport function stringifyIssue(issue: ValidationIssue): string {\n const pathStr = issue.path.length ? ` at ${buildJsonPath(issue.path)}` : ''\n\n switch (issue.code) {\n case 'invalid_format':\n return `Invalid ${stringifyStringFormat(issue.format)} format${issue.message ? ` (${issue.message})` : ''}${pathStr} (got ${stringifyValue(issue.input)})`\n case 'invalid_type':\n return `Expected ${oneOf(issue.expected.map(stringifyExpectedType))} value type${pathStr} (got ${stringifyType(issue.input)})`\n case 'invalid_value':\n return `Expected ${oneOf(issue.values.map(stringifyValue))}${pathStr} (got ${stringifyValue(issue.input)})`\n case 'required_key':\n return `Missing required key \"${String(issue.key)}\"${pathStr}`\n case 'too_big':\n return `${issue.type} too big (maximum ${issue.maximum})${pathStr} (got ${issue.actual})`\n case 'too_small':\n return `${issue.type} too small (minimum ${issue.minimum})${pathStr} (got ${issue.actual})`\n case 'custom':\n return `${issue.message}${pathStr}`\n default:\n // @ts-expect-error fool-proofing\n return `${issue.code} validation error${pathStr}`\n }\n}\n\nfunction stringifyExpectedType(expected: string): string {\n if (expected === '$typed') {\n return 'an object or record which includes a \"$type\" property'\n }\n\n return expected\n}\n\nfunction buildJsonPath(path: readonly PropertyKey[]): string {\n let jsonPath = '$'\n for (const segment of path) {\n if (typeof segment === 'number') {\n jsonPath += `[${segment}]`\n } else if (/^[a-zA-Z_$][a-zA-Z0-9_]*$/.test(segment as string)) {\n jsonPath += `.${segment}`\n } else {\n jsonPath += `[${JSON.stringify(segment)}]`\n }\n }\n return jsonPath\n}\n\nfunction oneOf(arr: readonly string[]): string {\n if (arr.length === 0) return ''\n if (arr.length === 1) return arr[0]\n return `one of ${arr.slice(0, -1).join(', ')} or ${arr.at(-1)}`\n}\n\nfunction stringifyStringFormat(format: string): string {\n switch (format) {\n case 'datetime':\n return 'datetime'\n case 'language':\n return 'language'\n case 'at-identifier':\n return `AT identifier`\n case 'did':\n return `DID`\n case 'handle':\n return `handle`\n case 'nsid':\n return `NSID`\n case 'cid':\n return `CID string`\n case 'tid':\n return `TID string`\n case 'record-key':\n return `record key`\n default:\n return format\n }\n}\n\nexport function stringifyType(value: unknown): string {\n switch (typeof value) {\n case 'object':\n if (value === null) return 'null'\n if (Array.isArray(value)) return 'array'\n if (CID.asCID(value)) return 'cid'\n if (value instanceof Date) return 'date'\n if (value instanceof RegExp) return 'regexp'\n if (value instanceof Map) return 'map'\n if (value instanceof Set) return 'set'\n return 'object'\n case 'number':\n if (Number.isInteger(value)) return 'integer'\n if (Number.isNaN(value)) return 'NaN'\n return 'float'\n default:\n return typeof value\n }\n}\n\nexport function stringifyValue(value: unknown): string {\n switch (typeof value) {\n case 'bigint':\n return `${value}n`\n case 'number':\n case 'string':\n case 'boolean':\n return JSON.stringify(value)\n case 'object':\n if (Array.isArray(value)) {\n return `[${stringifyArray(value, stringifyValue)}]`\n }\n if (isPlainObject(value)) {\n return `{${stringifyArray(Object.entries(value), stringifyObjectEntry)}}`\n }\n // fallthrough\n default:\n return stringifyType(value)\n }\n}\n\nfunction stringifyObjectEntry([key, _value]: [PropertyKey, unknown]): string {\n return `${JSON.stringify(key)}: ...`\n}\n\nfunction stringifyArray<T>(\n arr: readonly T[],\n fn: (item: T) => string,\n n = 2,\n): string {\n return arr.slice(0, n).map(fn).join(', ') + (arr.length > n ? ', ...' : '')\n}\n\nexport function aggregateIssues(issues: ValidationIssue[]): ValidationIssue[] {\n // Quick path for common cases\n if (issues.length <= 1) return issues\n if (issues.length === 2 && issues[0].code !== issues[1].code) return issues\n\n return [\n // Aggregate invalid_type with identical paths\n ...arrayAgg(\n issues.filter((issue) => issue.code === 'invalid_type'),\n (a, b) => comparePropertyPaths(a.path, b.path),\n (issues) => ({\n ...issues[0],\n expected: Array.from(new Set(issues.flatMap((iss) => iss.expected))),\n }),\n ),\n // Aggregate invalid_value with identical paths\n ...arrayAgg(\n issues.filter((issue) => issue.code === 'invalid_value'),\n (a, b) => comparePropertyPaths(a.path, b.path),\n (issues) => ({\n ...issues[0],\n values: Array.from(new Set(issues.flatMap((iss) => iss.values))),\n }),\n ),\n // Pass through other issues\n ...issues.filter(\n (issue) =>\n issue.code !== 'invalid_type' && issue.code !== 'invalid_value',\n ),\n ]\n}\n\nfunction comparePropertyPaths(\n a: readonly PropertyKey[],\n b: readonly PropertyKey[],\n) {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n return true\n}\n"]}
|
|
1
|
+
{"version":3,"file":"validation-issue.js","sourceRoot":"","sources":["../../src/validation/validation-issue.ts"],"names":[],"mappings":"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","sourcesContent":["import { asCid, isPlainObject } from '@atproto/lex-data'\nimport { PropertyKey } from './property-key.js'\n\nexport abstract class Issue {\n constructor(\n readonly code: string,\n readonly path: readonly PropertyKey[],\n readonly input: unknown,\n ) {}\n\n abstract toString(): string\n}\n\nexport class IssueCustom extends Issue {\n constructor(\n readonly path: readonly PropertyKey[],\n readonly input: unknown,\n readonly message: string,\n ) {\n super('custom', path, input)\n }\n\n toString() {\n return `${this.message}${stringifyPath(this.path)}`\n }\n}\n\nexport class IssueInvalidFormat extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly format: string,\n readonly message?: string,\n ) {\n super('invalid_format', path, input)\n }\n\n toString() {\n return `Invalid ${this.formatDescription} format${this.message ? ` (${this.message})` : ''}${stringifyPath(this.path)} (got ${stringifyValue(this.input)})`\n }\n\n get formatDescription(): string {\n switch (this.format) {\n case 'at-identifier':\n return `AT identifier`\n case 'did':\n return `DID`\n case 'nsid':\n return `NSID`\n case 'cid':\n return `CID string`\n case 'tid':\n return `TID string`\n case 'record-key':\n return `record key`\n default:\n return this.format\n }\n }\n}\n\nexport class IssueInvalidType extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly expected: readonly string[],\n ) {\n super('invalid_type', path, input)\n }\n\n toString() {\n return `Expected ${oneOf(this.expected.map(stringifyExpectedType))} value type${stringifyPath(this.path)} (got ${stringifyType(this.input)})`\n }\n}\n\nexport class IssueInvalidValue extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly values: readonly unknown[],\n ) {\n super('invalid_value', path, input)\n }\n\n toString() {\n return `Expected ${oneOf(this.values.map(stringifyValue))}${stringifyPath(this.path)} (got ${stringifyValue(this.input)})`\n }\n}\n\nexport class IssueRequiredKey extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly key: PropertyKey,\n ) {\n super('required_key', path, input)\n }\n\n toString() {\n return `Missing required key \"${String(this.key)}\"${stringifyPath(this.path)}`\n }\n}\n\nexport type MeasurableType =\n | 'array'\n | 'string'\n | 'integer'\n | 'grapheme'\n | 'bytes'\n | 'blob'\n\nexport class IssueTooBig extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly maximum: number,\n readonly type: MeasurableType,\n readonly actual: number,\n ) {\n super('too_big', path, input)\n }\n\n toString() {\n return `${this.type} too big (maximum ${this.maximum})${stringifyPath(this.path)} (got ${this.actual})`\n }\n}\n\nexport class IssueTooSmall extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly minimum: number,\n readonly type: MeasurableType,\n readonly actual: number,\n ) {\n super('too_small', path, input)\n }\n\n toString() {\n return `${this.type} too small (minimum ${this.minimum})${stringifyPath(this.path)} (got ${this.actual})`\n }\n}\n\nfunction stringifyExpectedType(expected: string): string {\n if (expected === '$typed') {\n return 'an object or record which includes a \"$type\" property'\n }\n return expected\n}\n\nfunction stringifyPath(path: readonly PropertyKey[]) {\n return ` at ${buildJsonPath(path)}`\n}\n\nfunction buildJsonPath(path: readonly PropertyKey[]): string {\n return `$${path.map(toJsonPathSegment).join('')}`\n}\n\nfunction toJsonPathSegment(segment: PropertyKey): string {\n if (typeof segment === 'number') {\n return `[${segment}]`\n } else if (/^[a-zA-Z_$][a-zA-Z0-9_]*$/.test(segment as string)) {\n return `.${segment}`\n } else {\n return `[${JSON.stringify(segment)}]`\n }\n}\n\nfunction oneOf(arr: readonly string[]): string {\n if (arr.length === 0) return ''\n if (arr.length === 1) return arr[0]\n return `one of ${arr.slice(0, -1).join(', ')} or ${arr.at(-1)}`\n}\n\nfunction stringifyType(value: unknown): string {\n switch (typeof value) {\n case 'object':\n if (value === null) return 'null'\n if (Array.isArray(value)) return 'array'\n if (asCid(value)) return 'cid'\n if (value instanceof Date) return 'date'\n if (value instanceof RegExp) return 'regexp'\n if (value instanceof Map) return 'map'\n if (value instanceof Set) return 'set'\n return 'object'\n case 'number':\n if (Number.isInteger(value)) return 'integer'\n if (Number.isNaN(value)) return 'NaN'\n return 'float'\n default:\n return typeof value\n }\n}\n\nfunction stringifyValue(value: unknown): string {\n switch (typeof value) {\n case 'bigint':\n return `${value}n`\n case 'number':\n case 'string':\n case 'boolean':\n return JSON.stringify(value)\n case 'object':\n if (Array.isArray(value)) {\n return `[${stringifyArray(value, stringifyValue)}]`\n }\n if (isPlainObject(value)) {\n return `{${stringifyArray(Object.entries(value), stringifyObjectEntry)}}`\n }\n // fallthrough\n default:\n return stringifyType(value)\n }\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nfunction stringifyObjectEntry([key, _value]: [PropertyKey, unknown]): string {\n return `${JSON.stringify(key)}: ...`\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nfunction stringifyArray<T>(\n arr: readonly T[],\n fn: (item: T) => string,\n n = 2,\n): string {\n return arr.slice(0, n).map(fn).join(', ') + (arr.length > n ? ', ...' : '')\n}\n"]}
|
|
@@ -1,41 +1,36 @@
|
|
|
1
1
|
import { ResultFailure, ResultSuccess } from '../core.js';
|
|
2
2
|
import { PropertyKey } from './property-key.js';
|
|
3
3
|
import { ValidationError } from './validation-error.js';
|
|
4
|
-
import {
|
|
4
|
+
import { Issue, MeasurableType } from './validation-issue.js';
|
|
5
5
|
export type ValidationSuccess<Value = any> = ResultSuccess<Value>;
|
|
6
6
|
export type ValidationFailure = ResultFailure<ValidationError>;
|
|
7
7
|
export type ValidationResult<Value = any> = ValidationSuccess<Value> | ValidationFailure;
|
|
8
|
-
type ValidationOptions = {
|
|
8
|
+
export type ValidationOptions = {
|
|
9
9
|
path?: PropertyKey[];
|
|
10
10
|
/** @default true */
|
|
11
11
|
allowTransform?: boolean;
|
|
12
12
|
};
|
|
13
13
|
export type Infer<T extends Validator> = T['_lex']['output'];
|
|
14
|
-
export
|
|
14
|
+
export interface Validator<Output = any> {
|
|
15
15
|
/**
|
|
16
16
|
* This property is used for type inference purposes and does not actually
|
|
17
17
|
* exist at runtime.
|
|
18
18
|
*
|
|
19
|
-
* @deprecated
|
|
19
|
+
* @deprecated **INTERNAL API, DO NOT USE**.
|
|
20
20
|
*/
|
|
21
|
-
_lex: {
|
|
21
|
+
readonly ['_lex']: {
|
|
22
22
|
output: Output;
|
|
23
23
|
};
|
|
24
|
-
readonly lexiconType?: string;
|
|
25
24
|
/**
|
|
26
|
-
* @internal **INTERNAL API
|
|
27
|
-
*
|
|
28
|
-
* Use {@link Validator.assert assert}, {@link Validator.check check},
|
|
29
|
-
* {@link Validator.parse parse} or {@link Validator.validate validate}
|
|
30
|
-
* instead.
|
|
25
|
+
* @internal **INTERNAL API**: use {@link ValidatorContext.validate} instead
|
|
31
26
|
*
|
|
32
27
|
* This method is implemented by subclasses to perform transformation and
|
|
33
28
|
* validation of the input value. Do not call this method directly; as the
|
|
34
29
|
* {@link ValidatorContext.options.allowTransform} option will **not** be
|
|
35
30
|
* enforced. See {@link ValidatorContext.validate} for details. When
|
|
36
31
|
* delegating validation from one validator sub-class implementation to
|
|
37
|
-
* another schema, {@link ValidatorContext.validate}
|
|
38
|
-
*
|
|
32
|
+
* another schema, {@link ValidatorContext.validate} must be used instead of
|
|
33
|
+
* calling {@link Validator.validateInContext}. This will allow to stop the
|
|
39
34
|
* validation process if the value was transformed (by the other schema) but
|
|
40
35
|
* transformations are not allowed.
|
|
41
36
|
*
|
|
@@ -52,31 +47,8 @@ export declare abstract class Validator<Output = any> {
|
|
|
52
47
|
*
|
|
53
48
|
* @see {@link ValidatorContext.validate}
|
|
54
49
|
*/
|
|
55
|
-
|
|
56
|
-
assert(input: unknown): asserts input is Output;
|
|
57
|
-
check(input: unknown): input is Output;
|
|
58
|
-
maybe<I>(input: I): (I & Output) | undefined;
|
|
59
|
-
parse<I>(input: I, options: ValidationOptions & {
|
|
60
|
-
allowTransform: false;
|
|
61
|
-
}): I & Output;
|
|
62
|
-
parse(input: unknown, options?: ValidationOptions): Output;
|
|
63
|
-
validate<I>(input: I, options: ValidationOptions & {
|
|
64
|
-
allowTransform: false;
|
|
65
|
-
}): ValidationResult<I & Output>;
|
|
66
|
-
validate(input: unknown, options?: ValidationOptions): ValidationResult<Output>;
|
|
67
|
-
$assert(input: unknown): asserts input is Output;
|
|
68
|
-
$check(input: unknown): input is Output;
|
|
69
|
-
$maybe<I>(input: I): (I & Output) | undefined;
|
|
70
|
-
$parse(input: unknown, options?: ValidationOptions): Output;
|
|
71
|
-
$validate(input: unknown, options?: ValidationOptions): ValidationResult<Output>;
|
|
50
|
+
validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<Output>;
|
|
72
51
|
}
|
|
73
|
-
export type ContextualIssue = {
|
|
74
|
-
[Code in ValidationIssue['code']]: Omit<Extract<ValidationIssue, {
|
|
75
|
-
code: Code;
|
|
76
|
-
}>, 'path'> & {
|
|
77
|
-
path?: PropertyKey | readonly PropertyKey[];
|
|
78
|
-
};
|
|
79
|
-
}[ValidationIssue['code']];
|
|
80
52
|
export declare class ValidatorContext {
|
|
81
53
|
readonly options: ValidationOptions;
|
|
82
54
|
/**
|
|
@@ -88,26 +60,24 @@ export declare class ValidatorContext {
|
|
|
88
60
|
private readonly issues;
|
|
89
61
|
protected constructor(options: ValidationOptions);
|
|
90
62
|
get path(): PropertyKey[];
|
|
91
|
-
|
|
63
|
+
concatPath(path?: PropertyKey | readonly PropertyKey[]): PropertyKey[];
|
|
92
64
|
/**
|
|
93
65
|
* This is basically the entry point for validation within a context. Use this
|
|
94
66
|
* method instead of {@link Validator.validateInContext} directly, because
|
|
95
67
|
* this method enforces the {@link ValidationOptions.allowTransform} option.
|
|
96
68
|
*/
|
|
97
69
|
validate<V>(input: unknown, validator: Validator<V>): ValidationResult<V>;
|
|
98
|
-
validateChild<I extends object, K extends PropertyKey & keyof I, V>(input: I, key: K, validator:
|
|
99
|
-
addIssue(issue:
|
|
70
|
+
validateChild<I extends object, K extends PropertyKey & keyof I, V extends Validator>(input: I, key: K, validator: V): ValidationResult<Infer<V>>;
|
|
71
|
+
addIssue(issue: Issue): void;
|
|
100
72
|
success<V>(value: V): ValidationResult<V>;
|
|
101
|
-
failure(issue:
|
|
102
|
-
issueInvalidValue(input: unknown, values: readonly unknown[]
|
|
103
|
-
issueInvalidType(input: unknown, expected: string
|
|
104
|
-
issueInvalidPropertyValue<I>(input: I, property: keyof I & PropertyKey, values: readonly unknown[]): ValidationFailure;
|
|
105
|
-
issueInvalidPropertyType<I>(input: I, property: keyof I & PropertyKey, expected: string | readonly string[]): ValidationFailure;
|
|
73
|
+
failure(issue: Issue): ValidationFailure;
|
|
74
|
+
issueInvalidValue(input: unknown, values: readonly unknown[]): ValidationFailure;
|
|
75
|
+
issueInvalidType(input: unknown, expected: string): ValidationFailure;
|
|
106
76
|
issueRequiredKey(input: object, key: PropertyKey): ValidationFailure;
|
|
107
|
-
issueInvalidFormat(input: unknown, format: string,
|
|
108
|
-
issueTooBig(input: unknown, type:
|
|
109
|
-
issueTooSmall(input: unknown, type:
|
|
110
|
-
|
|
77
|
+
issueInvalidFormat(input: unknown, format: string, msg?: string): ValidationFailure;
|
|
78
|
+
issueTooBig(input: unknown, type: MeasurableType, max: number, actual: number): ValidationFailure;
|
|
79
|
+
issueTooSmall(input: unknown, type: MeasurableType, min: number, actual: number): ValidationFailure;
|
|
80
|
+
issueInvalidPropertyValue<I>(input: I, property: keyof I & PropertyKey, values: readonly unknown[]): ValidationFailure;
|
|
81
|
+
issueInvalidPropertyType<I>(input: I, property: keyof I & PropertyKey, expected: string): ValidationFailure;
|
|
111
82
|
}
|
|
112
|
-
export {};
|
|
113
83
|
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/validation/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAoB,MAAM,YAAY,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/validation/validator.ts"],"names":[],"mappings":"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"}
|