@fncts/schema 0.0.16 → 0.0.18
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/AST.d.ts +19 -6
- package/ASTAnnotation.d.ts +10 -2
- package/ParseError/ParseError.d.ts +231 -0
- package/ParseError/ParseErrorFormatter.d.ts +2 -0
- package/ParseError/PathFormatter.d.ts +13 -0
- package/ParseError/TreeFormatter.d.ts +14 -0
- package/ParseError.d.ts +4 -144
- package/ParseResult.d.ts +1 -8
- package/Parser/interpreter.d.ts +0 -1
- package/Schema/api/conc.d.ts +0 -2
- package/Schema/api/hashMap.d.ts +0 -1
- package/Schema/api/hashSet.d.ts +0 -1
- package/Schema/api/immutableArray.d.ts +0 -1
- package/Schema/api/list.d.ts +1 -2
- package/Schema/api/map.d.ts +19 -0
- package/Schema/api/set.d.ts +19 -0
- package/Schema/api.d.ts +11 -1
- package/Schema.d.ts +2 -0
- package/Show.d.ts +7 -3
- package/_cjs/AST.cjs +181 -114
- package/_cjs/AST.cjs.map +1 -1
- package/_cjs/ASTAnnotation.cjs +7 -2
- package/_cjs/ASTAnnotation.cjs.map +1 -1
- package/_cjs/ASTAnnotationMap.cjs +1 -1
- package/_cjs/ASTAnnotationMap.cjs.map +1 -1
- package/_cjs/Gen.cjs +25 -25
- package/_cjs/Gen.cjs.map +1 -1
- package/_cjs/Guard.cjs +1 -1
- package/_cjs/Guard.cjs.map +1 -1
- package/_cjs/InvalidInterpretationError.cjs.map +1 -1
- package/_cjs/ParseError/ParseError.cjs +260 -0
- package/_cjs/ParseError/ParseError.cjs.map +1 -0
- package/_cjs/ParseError/ParseErrorFormatter.cjs +6 -0
- package/_cjs/ParseError/ParseErrorFormatter.cjs.map +1 -0
- package/_cjs/ParseError/PathFormatter.cjs +94 -0
- package/_cjs/ParseError/PathFormatter.cjs.map +1 -0
- package/_cjs/ParseError/TreeFormatter.cjs +123 -0
- package/_cjs/ParseError/TreeFormatter.cjs.map +1 -0
- package/_cjs/ParseError.cjs +43 -289
- package/_cjs/ParseError.cjs.map +1 -1
- package/_cjs/ParseResult.cjs +2 -11
- package/_cjs/ParseResult.cjs.map +1 -1
- package/_cjs/Parser/api.cjs +3 -3
- package/_cjs/Parser/api.cjs.map +1 -1
- package/_cjs/Parser/definition.cjs +2 -2
- package/_cjs/Parser/definition.cjs.map +1 -1
- package/_cjs/Parser/interpreter.cjs +122 -118
- package/_cjs/Parser/interpreter.cjs.map +1 -1
- package/_cjs/Parser.cjs.map +1 -1
- package/_cjs/Schema/api/conc.cjs +36 -46
- package/_cjs/Schema/api/conc.cjs.map +1 -1
- package/_cjs/Schema/api/either.cjs +25 -31
- package/_cjs/Schema/api/either.cjs.map +1 -1
- package/_cjs/Schema/api/hashMap.cjs +42 -102
- package/_cjs/Schema/api/hashMap.cjs.map +1 -1
- package/_cjs/Schema/api/hashSet.cjs +47 -107
- package/_cjs/Schema/api/hashSet.cjs.map +1 -1
- package/_cjs/Schema/api/immutableArray.cjs +23 -49
- package/_cjs/Schema/api/immutableArray.cjs.map +1 -1
- package/_cjs/Schema/api/list.cjs +36 -53
- package/_cjs/Schema/api/list.cjs.map +1 -1
- package/_cjs/Schema/api/map.cjs +97 -0
- package/_cjs/Schema/api/map.cjs.map +1 -0
- package/_cjs/Schema/api/maybe.cjs +25 -36
- package/_cjs/Schema/api/maybe.cjs.map +1 -1
- package/_cjs/Schema/api/set.cjs +76 -0
- package/_cjs/Schema/api/set.cjs.map +1 -0
- package/_cjs/Schema/api.cjs +21 -3
- package/_cjs/Schema/api.cjs.map +1 -1
- package/_cjs/Schema/definition.cjs +1 -1
- package/_cjs/Schema/definition.cjs.map +1 -1
- package/_cjs/Schema/derivations.cjs +1 -1
- package/_cjs/Schema/derivations.cjs.map +1 -1
- package/_cjs/Schema.cjs +22 -0
- package/_cjs/Schema.cjs.map +1 -1
- package/_cjs/Show.cjs +107 -90
- package/_cjs/Show.cjs.map +1 -1
- package/_cjs/global.cjs.map +1 -1
- package/_cjs/index.cjs.map +1 -1
- package/_cjs/utils.cjs +6 -1
- package/_cjs/utils.cjs.map +1 -1
- package/_mjs/AST.mjs +177 -112
- package/_mjs/AST.mjs.map +1 -1
- package/_mjs/ASTAnnotation.mjs +5 -0
- package/_mjs/ASTAnnotation.mjs.map +1 -1
- package/_mjs/ASTAnnotationMap.mjs.map +1 -1
- package/_mjs/Gen.mjs +24 -24
- package/_mjs/Gen.mjs.map +1 -1
- package/_mjs/Guard.mjs.map +1 -1
- package/_mjs/InvalidInterpretationError.mjs.map +1 -1
- package/_mjs/ParseError/ParseError.mjs +228 -0
- package/_mjs/ParseError/ParseError.mjs.map +1 -0
- package/_mjs/ParseError/ParseErrorFormatter.mjs +2 -0
- package/_mjs/ParseError/ParseErrorFormatter.mjs.map +1 -0
- package/_mjs/ParseError/PathFormatter.mjs +86 -0
- package/_mjs/ParseError/PathFormatter.mjs.map +1 -0
- package/_mjs/ParseError/TreeFormatter.mjs +113 -0
- package/_mjs/ParseError/TreeFormatter.mjs.map +1 -0
- package/_mjs/ParseError.mjs +6 -270
- package/_mjs/ParseError.mjs.map +1 -1
- package/_mjs/ParseResult.mjs +1 -9
- package/_mjs/ParseResult.mjs.map +1 -1
- package/_mjs/Parser/api.mjs +2 -2
- package/_mjs/Parser/api.mjs.map +1 -1
- package/_mjs/Parser/definition.mjs +1 -1
- package/_mjs/Parser/definition.mjs.map +1 -1
- package/_mjs/Parser/interpreter.mjs +121 -117
- package/_mjs/Parser/interpreter.mjs.map +1 -1
- package/_mjs/Parser.mjs.map +1 -1
- package/_mjs/Schema/api/conc.mjs +35 -44
- package/_mjs/Schema/api/conc.mjs.map +1 -1
- package/_mjs/Schema/api/either.mjs +24 -30
- package/_mjs/Schema/api/either.mjs.map +1 -1
- package/_mjs/Schema/api/hashMap.mjs +41 -101
- package/_mjs/Schema/api/hashMap.mjs.map +1 -1
- package/_mjs/Schema/api/hashSet.mjs +46 -106
- package/_mjs/Schema/api/hashSet.mjs.map +1 -1
- package/_mjs/Schema/api/immutableArray.mjs +23 -49
- package/_mjs/Schema/api/immutableArray.mjs.map +1 -1
- package/_mjs/Schema/api/list.mjs +35 -52
- package/_mjs/Schema/api/list.mjs.map +1 -1
- package/_mjs/Schema/api/map.mjs +88 -0
- package/_mjs/Schema/api/map.mjs.map +1 -0
- package/_mjs/Schema/api/maybe.mjs +24 -35
- package/_mjs/Schema/api/maybe.mjs.map +1 -1
- package/_mjs/Schema/api/set.mjs +67 -0
- package/_mjs/Schema/api/set.mjs.map +1 -0
- package/_mjs/Schema/api.mjs +18 -2
- package/_mjs/Schema/api.mjs.map +1 -1
- package/_mjs/Schema/definition.mjs.map +1 -1
- package/_mjs/Schema/derivations.mjs.map +1 -1
- package/_mjs/Schema.mjs +2 -0
- package/_mjs/Schema.mjs.map +1 -1
- package/_mjs/Show.mjs +106 -90
- package/_mjs/Show.mjs.map +1 -1
- package/_mjs/global.mjs.map +1 -1
- package/_mjs/index.mjs.map +1 -1
- package/_mjs/utils.mjs +4 -0
- package/_mjs/utils.mjs.map +1 -1
- package/_src/AST.ts +139 -38
- package/_src/ASTAnnotation.ts +8 -1
- package/_src/Gen.ts +4 -1
- package/_src/ParseError/ParseError.ts +304 -0
- package/_src/ParseError/ParseErrorFormatter.ts +1 -0
- package/_src/ParseError/PathFormatter.ts +117 -0
- package/_src/ParseError/TreeFormatter.ts +127 -0
- package/_src/ParseError.ts +7 -331
- package/_src/ParseResult.ts +2 -9
- package/_src/Parser/api.ts +1 -1
- package/_src/Parser/interpreter.ts +98 -75
- package/_src/Schema/api/conc.ts +33 -42
- package/_src/Schema/api/either.ts +20 -30
- package/_src/Schema/api/hashMap.ts +40 -124
- package/_src/Schema/api/hashSet.ts +31 -117
- package/_src/Schema/api/immutableArray.ts +15 -45
- package/_src/Schema/api/list.ts +32 -55
- package/_src/Schema/api/map.ts +93 -0
- package/_src/Schema/api/maybe.ts +19 -34
- package/_src/Schema/api/set.ts +74 -0
- package/_src/Schema/api.ts +20 -2
- package/_src/Schema.ts +2 -0
- package/_src/Show.ts +156 -128
- package/_src/global.ts +0 -4
- package/_src/utils.ts +6 -0
- package/global.d.ts +0 -4
- package/package.json +3 -3
- package/utils.d.ts +1 -0
- package/ParseFailure.d.ts +0 -18
- package/_cjs/ParseFailure.cjs +0 -28
- package/_cjs/ParseFailure.cjs.map +0 -1
- package/_mjs/ParseFailure.mjs +0 -20
- package/_mjs/ParseFailure.mjs.map +0 -1
- package/_src/ParseFailure.ts +0 -18
package/_src/ParseError.ts
CHANGED
|
@@ -1,331 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export const enum ParseErrorTag {
|
|
9
|
-
Type,
|
|
10
|
-
Index,
|
|
11
|
-
Key,
|
|
12
|
-
Missing,
|
|
13
|
-
Unexpected,
|
|
14
|
-
UnionMember,
|
|
15
|
-
Refinement,
|
|
16
|
-
Transformation,
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* @tsplus type fncts.schema.ParseError
|
|
21
|
-
* @tsplus companion fncts.schema.ParseErrorOps
|
|
22
|
-
*/
|
|
23
|
-
export type ParseError =
|
|
24
|
-
| TypeError
|
|
25
|
-
| IndexError
|
|
26
|
-
| KeyError
|
|
27
|
-
| MissingError
|
|
28
|
-
| UnexpectedError
|
|
29
|
-
| UnionMemberError
|
|
30
|
-
| RefinementError
|
|
31
|
-
| TransformationError;
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* @tsplus companion fncts.schema.ParseError.TypeError
|
|
35
|
-
*/
|
|
36
|
-
export class TypeError {
|
|
37
|
-
readonly _tag = ParseErrorTag.Type;
|
|
38
|
-
constructor(
|
|
39
|
-
readonly expected: AST,
|
|
40
|
-
readonly actual: unknown,
|
|
41
|
-
) {}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* @tsplus static fncts.schema.ParseError.TypeError __call
|
|
46
|
-
* @tsplus static fncts.schema.ParseErrorOps TypeError
|
|
47
|
-
*/
|
|
48
|
-
export function typeError(expected: AST, actual: unknown): ParseError {
|
|
49
|
-
return new TypeError(expected, actual);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* @tsplus companion fncts.schema.ParseError.IndexError
|
|
54
|
-
*/
|
|
55
|
-
export class IndexError {
|
|
56
|
-
readonly _tag = ParseErrorTag.Index;
|
|
57
|
-
constructor(
|
|
58
|
-
readonly index: number,
|
|
59
|
-
readonly errors: Vector<ParseError>,
|
|
60
|
-
) {}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* @tsplus static fncts.schema.ParseError.IndexError __call
|
|
65
|
-
* @tsplus static fncts.schema.ParseErrorOps IndexError
|
|
66
|
-
*/
|
|
67
|
-
export function indexError(index: number, errors: Vector<ParseError>): ParseError {
|
|
68
|
-
return new IndexError(index, errors);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* @tsplus companion fncts.schema.ParseError.KeyError
|
|
73
|
-
*/
|
|
74
|
-
export class KeyError {
|
|
75
|
-
readonly _tag = ParseErrorTag.Key;
|
|
76
|
-
constructor(
|
|
77
|
-
readonly keyAST: AST,
|
|
78
|
-
readonly key: any,
|
|
79
|
-
readonly errors: Vector<ParseError>,
|
|
80
|
-
) {}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* @tsplus static fncts.schema.ParseError.KeyError __call
|
|
85
|
-
* @tsplus static fncts.schema.ParseErrorOps KeyError
|
|
86
|
-
*/
|
|
87
|
-
export function keyError(keyAST: AST, key: any, errors: Vector<ParseError>): ParseError {
|
|
88
|
-
return new KeyError(keyAST, key, errors);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* @tsplus companion fncts.schema.ParseError.MissingError
|
|
93
|
-
*/
|
|
94
|
-
export class MissingError {
|
|
95
|
-
readonly _tag = ParseErrorTag.Missing;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* @tsplus static fncts.schema.ParseErrorOps MissingError
|
|
100
|
-
*/
|
|
101
|
-
export const missingError = new MissingError();
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* @tsplus companion fncts.schema.ParseError.UnexpectedError
|
|
105
|
-
*/
|
|
106
|
-
export class UnexpectedError {
|
|
107
|
-
readonly _tag = ParseErrorTag.Unexpected;
|
|
108
|
-
constructor(readonly actual: unknown) {}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* @tsplus static fncts.schema.ParseError.UnexpectedError __call
|
|
113
|
-
* @tsplus static fncts.schema.ParseErrorOps UnexpectedError
|
|
114
|
-
*/
|
|
115
|
-
export function unexpectedError(actual: unknown): ParseError {
|
|
116
|
-
return new UnexpectedError(actual);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* @tsplus companion fncts.schema.ParseError.UnionMemberError
|
|
121
|
-
*/
|
|
122
|
-
export class UnionMemberError {
|
|
123
|
-
readonly _tag = ParseErrorTag.UnionMember;
|
|
124
|
-
constructor(readonly errors: Vector<ParseError>) {}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* @tsplus static fncts.schema.ParseError.UnionMemberError __call
|
|
129
|
-
* @tsplus static fncts.schema.ParseErrorOps UnionMemberError
|
|
130
|
-
*/
|
|
131
|
-
export function unionMemberError(errors: Vector<ParseError>): ParseError {
|
|
132
|
-
return new UnionMemberError(errors);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* @tsplus companion fncts.schema.ParseError.RefinementError
|
|
137
|
-
*/
|
|
138
|
-
export class RefinementError {
|
|
139
|
-
readonly _tag = ParseErrorTag.Refinement;
|
|
140
|
-
constructor(
|
|
141
|
-
readonly ast: Refinement,
|
|
142
|
-
readonly actual: unknown,
|
|
143
|
-
readonly kind: "From" | "Predicate",
|
|
144
|
-
readonly errors: Vector<ParseError>,
|
|
145
|
-
) {}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* @tsplus static fncts.schema.ParseError.RefinementError __call
|
|
150
|
-
* @tsplus static fncts.schema.ParseErrorOps RefinementError
|
|
151
|
-
*/
|
|
152
|
-
export function refinementError(
|
|
153
|
-
ast: Refinement,
|
|
154
|
-
actual: unknown,
|
|
155
|
-
kind: "From" | "Predicate",
|
|
156
|
-
errors: Vector<ParseError>,
|
|
157
|
-
): ParseError {
|
|
158
|
-
return new RefinementError(ast, actual, kind, errors);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* @tsplus companion fncts.schema.ParseError.TransformationError
|
|
163
|
-
*/
|
|
164
|
-
export class TransformationError {
|
|
165
|
-
readonly _tag = ParseErrorTag.Transformation;
|
|
166
|
-
constructor(
|
|
167
|
-
readonly ast: Transform,
|
|
168
|
-
readonly actual: unknown,
|
|
169
|
-
readonly kind: "Encoded" | "Transformation" | "Type",
|
|
170
|
-
readonly errors: Vector<ParseError>,
|
|
171
|
-
) {}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* @tsplus static fncts.schema.ParseError.TransformationError __call
|
|
176
|
-
* @tsplus static fncts.schema.ParseErrorOps TransformationError
|
|
177
|
-
*/
|
|
178
|
-
export function transformationError(
|
|
179
|
-
ast: Transform,
|
|
180
|
-
actual: unknown,
|
|
181
|
-
kind: "Encoded" | "Transformation" | "Type",
|
|
182
|
-
errors: Vector<ParseError>,
|
|
183
|
-
): ParseError {
|
|
184
|
-
return new TransformationError(ast, actual, kind, errors);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* @tsplus static fncts.schema.ParseErrorOps format
|
|
189
|
-
*/
|
|
190
|
-
export function format(errors: Vector<ParseError>): string {
|
|
191
|
-
return RoseTree(`${errors.length} error(s) found`, errors.map(go)).draw;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
function formatActual(actual: unknown): string {
|
|
195
|
-
return showWithOptions(actual, { colors: false });
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
function formatTemplateLiteralSpan(span: TemplateLiteralSpan): string {
|
|
199
|
-
switch (span.type._tag) {
|
|
200
|
-
case ASTTag.StringKeyword:
|
|
201
|
-
return "${string}";
|
|
202
|
-
case ASTTag.NumberKeyword:
|
|
203
|
-
return "${number}";
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
function formatTemplateLiteral(ast: TemplateLiteral): string {
|
|
208
|
-
return ast.head + ast.spans.map((span) => formatTemplateLiteralSpan(span) + span.literal).join("");
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
function formatRefinementKind(error: RefinementError): string {
|
|
212
|
-
switch (error.kind) {
|
|
213
|
-
case "From": {
|
|
214
|
-
return "From side refinement failure";
|
|
215
|
-
}
|
|
216
|
-
case "Predicate": {
|
|
217
|
-
return "Predicate refinement failure";
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
function formatTransformationKind(error: TransformationError): string {
|
|
223
|
-
switch (error.kind) {
|
|
224
|
-
case "Encoded": {
|
|
225
|
-
return "Encoded side transformation failure";
|
|
226
|
-
}
|
|
227
|
-
case "Transformation": {
|
|
228
|
-
return "Transformation process failure";
|
|
229
|
-
}
|
|
230
|
-
case "Type": {
|
|
231
|
-
return "Type side transformation failure";
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
function getExpected(ast: AST): Maybe<string> {
|
|
237
|
-
return ast.annotations
|
|
238
|
-
.get(ASTAnnotation.Identifier)
|
|
239
|
-
.orElse(ast.annotations.get(ASTAnnotation.Title))
|
|
240
|
-
.flatMap((title) =>
|
|
241
|
-
ast.annotations.get(ASTAnnotation.Description).match(
|
|
242
|
-
() => Just(title),
|
|
243
|
-
(description) => Just(`${title} (${description})`),
|
|
244
|
-
),
|
|
245
|
-
);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
function getMissedBrands(ast: Validation): string {
|
|
249
|
-
return ast.validation.map((validation) => validation.name).join(" & ");
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
function formatExpected(ast: AST): string {
|
|
253
|
-
concrete(ast);
|
|
254
|
-
switch (ast._tag) {
|
|
255
|
-
case ASTTag.StringKeyword:
|
|
256
|
-
return getExpected(ast).getOrElse("string");
|
|
257
|
-
case ASTTag.NumberKeyword:
|
|
258
|
-
return getExpected(ast).getOrElse("number");
|
|
259
|
-
case ASTTag.BooleanKeyword:
|
|
260
|
-
return getExpected(ast).getOrElse("boolean");
|
|
261
|
-
case ASTTag.BigIntKeyword:
|
|
262
|
-
return getExpected(ast).getOrElse("bigint");
|
|
263
|
-
case ASTTag.UndefinedKeyword:
|
|
264
|
-
return getExpected(ast).getOrElse("undefined");
|
|
265
|
-
case ASTTag.SymbolKeyword:
|
|
266
|
-
return getExpected(ast).getOrElse("symbol");
|
|
267
|
-
case ASTTag.ObjectKeyword:
|
|
268
|
-
return getExpected(ast).getOrElse("object");
|
|
269
|
-
case ASTTag.AnyKeyword:
|
|
270
|
-
return getExpected(ast).getOrElse("any");
|
|
271
|
-
case ASTTag.UnknownKeyword:
|
|
272
|
-
return getExpected(ast).getOrElse("unknown");
|
|
273
|
-
case ASTTag.VoidKeyword:
|
|
274
|
-
return getExpected(ast).getOrElse("void");
|
|
275
|
-
case ASTTag.NeverKeyword:
|
|
276
|
-
return getExpected(ast).getOrElse("never");
|
|
277
|
-
case ASTTag.Literal:
|
|
278
|
-
return getExpected(ast).getOrElse(formatActual(ast.literal));
|
|
279
|
-
case ASTTag.UniqueSymbol:
|
|
280
|
-
return getExpected(ast).getOrElse(formatActual(ast.symbol));
|
|
281
|
-
case ASTTag.Union:
|
|
282
|
-
return ast.types.map(formatExpected).join(" or ");
|
|
283
|
-
case ASTTag.Refinement:
|
|
284
|
-
return getExpected(ast).getOrElse("refinement");
|
|
285
|
-
case ASTTag.TemplateLiteral:
|
|
286
|
-
return getExpected(ast).getOrElse(formatTemplateLiteral(ast));
|
|
287
|
-
case ASTTag.Tuple:
|
|
288
|
-
return getExpected(ast).getOrElse("tuple or array");
|
|
289
|
-
case ASTTag.TypeLiteral:
|
|
290
|
-
return getExpected(ast).getOrElse("type literal");
|
|
291
|
-
case ASTTag.Enum:
|
|
292
|
-
return getExpected(ast).getOrElse(ast.enums.map(([_, value]) => JSON.stringify(value)).join(" | "));
|
|
293
|
-
case ASTTag.Lazy:
|
|
294
|
-
return getExpected(ast).getOrElse("<anonymous lazy schema>");
|
|
295
|
-
case ASTTag.Declaration:
|
|
296
|
-
return getExpected(ast).getOrElse("<anonymous Declaration schema>");
|
|
297
|
-
case ASTTag.Transform:
|
|
298
|
-
return `a parsable value from ${formatExpected(ast.from)} to ${formatExpected(ast.to)}`;
|
|
299
|
-
case ASTTag.Validation:
|
|
300
|
-
return getExpected(ast).match(
|
|
301
|
-
() => getMissedBrands(ast),
|
|
302
|
-
(expected) => `${expected} with validation(s) ${getMissedBrands(ast)}`,
|
|
303
|
-
);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
function go(error: ParseError): RoseTree<string> {
|
|
308
|
-
switch (error._tag) {
|
|
309
|
-
case ParseErrorTag.Type:
|
|
310
|
-
return RoseTree(
|
|
311
|
-
error.expected.annotations
|
|
312
|
-
.get(ASTAnnotation.Message)
|
|
313
|
-
.map((f) => f(error.actual))
|
|
314
|
-
.getOrElse(`Expected ${formatExpected(error.expected)}, actual ${formatActual(error.actual)}`),
|
|
315
|
-
);
|
|
316
|
-
case ParseErrorTag.Index:
|
|
317
|
-
return RoseTree(`index ${error.index}`, error.errors.map(go));
|
|
318
|
-
case ParseErrorTag.Unexpected:
|
|
319
|
-
return RoseTree("is unexpected");
|
|
320
|
-
case ParseErrorTag.Key:
|
|
321
|
-
return RoseTree(`key ${formatActual(error.key)}`, error.errors.map(go));
|
|
322
|
-
case ParseErrorTag.Missing:
|
|
323
|
-
return RoseTree("is missing");
|
|
324
|
-
case ParseErrorTag.UnionMember:
|
|
325
|
-
return RoseTree("union member", error.errors.map(go));
|
|
326
|
-
case ParseErrorTag.Refinement:
|
|
327
|
-
return RoseTree(formatRefinementKind(error), error.errors.map(go));
|
|
328
|
-
case ParseErrorTag.Transformation:
|
|
329
|
-
return RoseTree(formatTransformationKind(error), error.errors.map(go));
|
|
330
|
-
}
|
|
331
|
-
}
|
|
1
|
+
/* eslint-disable simple-import-sort/exports */
|
|
2
|
+
// codegen:start { preset: barrel, include: ./ParseError/*.ts }
|
|
3
|
+
export * from "./ParseError/TreeFormatter.js";
|
|
4
|
+
export * from "./ParseError/PathFormatter.js";
|
|
5
|
+
export * from "./ParseError/ParseErrorFormatter.js";
|
|
6
|
+
export * from "./ParseError/ParseError.js";
|
|
7
|
+
// codegen:end
|
package/_src/ParseResult.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @tsplus type fncts.schema.ParseResult
|
|
3
3
|
* @tsplus companion fncts.schema.ParseResultOps
|
|
4
4
|
*/
|
|
5
|
-
export interface ParseResult<A> extends Either<
|
|
5
|
+
export interface ParseResult<A> extends Either<ParseError, A> {}
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* @tsplus static fncts.schema.ParseResultOps succeed
|
|
@@ -11,16 +11,9 @@ export function succeed<A>(value: A): ParseResult<A> {
|
|
|
11
11
|
return Either.right(value);
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
/**
|
|
15
|
-
* @tsplus static fncts.schema.ParseResultOps failures
|
|
16
|
-
*/
|
|
17
|
-
export function failures<A = never>(value: Vector<ParseError>): ParseResult<A> {
|
|
18
|
-
return Either.left(ParseFailure(value));
|
|
19
|
-
}
|
|
20
|
-
|
|
21
14
|
/**
|
|
22
15
|
* @tsplus static fncts.schema.ParseResultOps fail
|
|
23
16
|
*/
|
|
24
17
|
export function fail<A = never>(value: ParseError): ParseResult<A> {
|
|
25
|
-
return Either.left(
|
|
18
|
+
return Either.left(value);
|
|
26
19
|
}
|
package/_src/Parser/api.ts
CHANGED
|
@@ -45,7 +45,7 @@ function parseOrThrow(ast: AST) {
|
|
|
45
45
|
const parser = parserFor(ast, true);
|
|
46
46
|
return (input: unknown, options?: ParseOptions) => {
|
|
47
47
|
return parser(input, options).match((failure) => {
|
|
48
|
-
throw new Error(ParseError.
|
|
48
|
+
throw new Error(ParseError.drawTree(failure));
|
|
49
49
|
}, Function.identity);
|
|
50
50
|
};
|
|
51
51
|
}
|