@fncts/schema 0.0.16 → 0.0.17
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 +180 -113
- package/_cjs/AST.cjs.map +1 -1
- package/_cjs/ASTAnnotation.cjs +6 -1
- package/_cjs/ASTAnnotation.cjs.map +1 -1
- package/_cjs/Gen.cjs +24 -24
- package/_cjs/Gen.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 +1 -10
- package/_cjs/ParseResult.cjs.map +1 -1
- package/_cjs/Parser/api.cjs +2 -2
- package/_cjs/Parser/api.cjs.map +1 -1
- package/_cjs/Parser/definition.cjs +1 -1
- package/_cjs/Parser/interpreter.cjs +121 -117
- package/_cjs/Parser/interpreter.cjs.map +1 -1
- package/_cjs/Schema/api/conc.cjs +35 -45
- package/_cjs/Schema/api/conc.cjs.map +1 -1
- package/_cjs/Schema/api/either.cjs +24 -30
- package/_cjs/Schema/api/either.cjs.map +1 -1
- package/_cjs/Schema/api/hashMap.cjs +41 -101
- package/_cjs/Schema/api/hashMap.cjs.map +1 -1
- package/_cjs/Schema/api/hashSet.cjs +46 -106
- package/_cjs/Schema/api/hashSet.cjs.map +1 -1
- package/_cjs/Schema/api/immutableArray.cjs +22 -48
- package/_cjs/Schema/api/immutableArray.cjs.map +1 -1
- package/_cjs/Schema/api/list.cjs +35 -52
- 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 +24 -35
- 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 +20 -2
- package/_cjs/Schema/api.cjs.map +1 -1
- package/_cjs/Schema.cjs +22 -0
- package/_cjs/Schema.cjs.map +1 -1
- package/_cjs/Show.cjs +106 -89
- package/_cjs/Show.cjs.map +1 -1
- package/_cjs/utils.cjs +5 -0
- 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/Gen.mjs +24 -24
- package/_mjs/Gen.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/interpreter.mjs +121 -117
- package/_mjs/Parser/interpreter.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.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/utils.mjs +4 -0
- package/_mjs/utils.mjs.map +1 -1
- package/_src/AST.ts +144 -43
- package/_src/ASTAnnotation.ts +8 -1
- package/_src/Gen.ts +12 -9
- 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 +5 -0
- package/global.d.ts +0 -4
- package/package.json +2 -2
- 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/_mjs/Show.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Show.mjs","names":["globalValue","
|
|
1
|
+
{"version":3,"file":"Show.mjs","names":["globalValue","formatUnknown","showMemoMap","Symbol","for","WeakMap","showMemoMapVerbose","goMemo","ast","verbose","memoMap","memo","get","s","go","set","show","self","showAST","_tag","tsplus_module_2","getOrElse","tsplus_module_1","getFormattedExpected","literal","symbol","formatTemplateLiteral","formatTuple","formatTypeLiteral","tsplus_module_3","join","map","types","orElse","flatMap","tsplus_module_4","tryCatch","getAST","enums","length","_","value","JSON","stringify","from","to","v","name","validation","formatTemplateLiteralSpan","span","type","head","spans","formatElement","isOptional","getParameterBase","formattedElements","element","elements","tsplus_module_5","match","isReadonly","rest","unsafeHead","tail","formattedHead","wrappedHead","includes","formattedTail","filter","isNonEmpty","formattedPropertySignatures","ps","String","propertySignatures","indexSignatures","formattedIndexSignatures","is","parameter"],"sources":["../_src/Show.ts"],"sourcesContent":[null],"mappings":"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"}
|
package/_mjs/utils.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "@fncts/base/collection/immutable/Vector/api";
|
|
2
2
|
import * as tsplus_module_2 from "@fncts/schema/AST";
|
|
3
|
+
import { showWithOptions } from "@fncts/base/data/Showable";
|
|
3
4
|
export function memoize(f) {
|
|
4
5
|
const cache = new Map();
|
|
5
6
|
return a => {
|
|
@@ -38,4 +39,7 @@ export function getKeysForIndexSignature(input, parameter) {
|
|
|
38
39
|
return getKeysForIndexSignature(input, parameter.from);
|
|
39
40
|
}
|
|
40
41
|
}
|
|
42
|
+
export function formatUnknown(u) {
|
|
43
|
+
return showWithOptions(u, {});
|
|
44
|
+
}
|
|
41
45
|
//# sourceMappingURL=utils.mjs.map
|
package/_mjs/utils.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.mjs","names":["memoize","f","cache","Map","a","has","b","set","get","ownKeys","o","tsplus_module_1","from","Reflect","empty","getTemplateLiteralRegex","ast","pattern","head","span","spans","tsplus_module_2","isStringKeyword","type","isNumberKeyword","literal","RegExp","getKeysForIndexSignature","input","parameter","_tag","Object","keys","getOwnPropertySymbols"],"sources":["../_src/utils.ts"],"sourcesContent":[null],"mappings":";;
|
|
1
|
+
{"version":3,"file":"utils.mjs","names":["showWithOptions","memoize","f","cache","Map","a","has","b","set","get","ownKeys","o","tsplus_module_1","from","Reflect","empty","getTemplateLiteralRegex","ast","pattern","head","span","spans","tsplus_module_2","isStringKeyword","type","isNumberKeyword","literal","RegExp","getKeysForIndexSignature","input","parameter","_tag","Object","keys","getOwnPropertySymbols","formatUnknown","u"],"sources":["../_src/utils.ts"],"sourcesContent":[null],"mappings":";;AAGA,SAASA,eAAe,QAAQ,2BAA2B;AAE3D,OAAM,SAAUC,OAAOA,CAAOC,CAAc;EAC1C,MAAMC,KAAK,GAAG,IAAIC,GAAG,EAAE;EACvB,OAAQC,CAAC,IAAI;IACX,IAAI,CAACF,KAAK,CAACG,GAAG,CAACD,CAAC,CAAC,EAAE;MACjB,MAAME,CAAC,GAAGL,CAAC,CAACG,CAAC,CAAC;MACdF,KAAK,CAACK,GAAG,CAACH,CAAC,EAAEE,CAAC,CAAC;MACf,OAAOA,CAAC;IACV;IACA,OAAOJ,KAAK,CAACM,GAAG,CAACJ,CAAC,CAAC;EACrB,CAAC;AACH;AAEA,OAAM,SAAUK,OAAOA,CAACC,CAAqB;EAC3C,OAAOA,CAAC,GAAGC,eAAA,CAAAC,IAAA,CAAYC,OAAO,CAACJ,OAAO,CAACC,CAAC,CAAC,CAAC,GAAGC,eAAA,CAAAG,KAAA,EAAc;AAC7D;AAEA,OAAM,SAAUC,uBAAuBA,CAACC,GAAoB;EAC1D,IAAIC,OAAO,GAAG,IAAID,GAAG,CAACE,IAAI,EAAE;EAC5B,KAAK,MAAMC,IAAI,IAAIH,GAAG,CAACI,KAAK,EAAE;IAC5B,IAAIC,eAAA,CAAAC,eAAA,CAAAH,IAAI,CAACI,IAAI,CAAkB,EAAE;MAC/BN,OAAO,IAAI,IAAI;IACjB,CAAC,MAAM,IAAII,eAAA,CAAAG,eAAA,CAAAL,IAAI,CAACI,IAAI,CAAkB,EAAE;MACtCN,OAAO,IAAI,kBAAkB;IAC/B;IACAA,OAAO,IAAIE,IAAI,CAACM,OAAO;EACzB;EACAR,OAAO,IAAI,GAAG;EACd,OAAO,IAAIS,MAAM,CAACT,OAAO,CAAC;AAC5B;AAEA,OAAM,SAAUU,wBAAwBA,CACtCC,KAA6C,EAC7CC,SAAsC;EAEtC,QAAQA,SAAS,CAACC,IAAI;IACpB;IACA;MACE,OAAOnB,eAAA,CAAAC,IAAA,CAAYmB,MAAM,CAACC,IAAI,CAACJ,KAAK,CAAC,CAAC;IACxC;MACE,OAAOjB,eAAA,CAAAC,IAAA,CAAYmB,MAAM,CAACE,qBAAqB,CAACL,KAAK,CAAC,CAAC;IACzD;MACE,OAAOD,wBAAwB,CAACC,KAAK,EAAEC,SAAS,CAACjB,IAAW,CAAC;EACjE;AACF;AAEA,OAAM,SAAUsB,aAAaA,CAACC,CAAU;EACtC,OAAOpC,eAAe,CAACoC,CAAC,EAAE,EAAE,CAAC;AAC/B"}
|
package/_src/AST.ts
CHANGED
|
@@ -22,6 +22,10 @@ export abstract class AST extends Annotated {
|
|
|
22
22
|
readonly [ASTTypeId]: ASTTypeId = ASTTypeId;
|
|
23
23
|
|
|
24
24
|
abstract clone(newProperties: Partial<this>): AST;
|
|
25
|
+
|
|
26
|
+
toString(verbose: boolean = false): string {
|
|
27
|
+
return this.show(verbose);
|
|
28
|
+
}
|
|
25
29
|
}
|
|
26
30
|
|
|
27
31
|
export declare namespace AST {
|
|
@@ -103,14 +107,19 @@ export function getAnnotations<V>(key: ASTAnnotation<V>) {
|
|
|
103
107
|
* Declaration
|
|
104
108
|
*/
|
|
105
109
|
|
|
110
|
+
/**
|
|
111
|
+
* @tsplus type fncts.schema.AST.Declaration
|
|
112
|
+
*/
|
|
106
113
|
export class Declaration extends AST {
|
|
107
114
|
readonly _tag = ASTTag.Declaration;
|
|
108
115
|
constructor(
|
|
109
116
|
readonly typeParameters: Vector<AST>,
|
|
110
|
-
readonly type: AST,
|
|
111
117
|
readonly decode: (
|
|
112
118
|
...typeParameters: ReadonlyArray<AST>
|
|
113
119
|
) => (input: any, options?: ParseOptions) => ParseResult<any>,
|
|
120
|
+
readonly encode: (
|
|
121
|
+
...typeParameters: ReadonlyArray<AST>
|
|
122
|
+
) => (input: any, options?: ParseOptions) => ParseResult<any>,
|
|
114
123
|
readonly annotations: ASTAnnotationMap = ASTAnnotationMap.empty,
|
|
115
124
|
) {
|
|
116
125
|
super();
|
|
@@ -119,8 +128,8 @@ export class Declaration extends AST {
|
|
|
119
128
|
clone(newProperties: Partial<this>): AST {
|
|
120
129
|
return new Declaration(
|
|
121
130
|
newProperties.typeParameters ?? this.typeParameters,
|
|
122
|
-
newProperties.type ?? this.type,
|
|
123
131
|
newProperties.decode ?? this.decode,
|
|
132
|
+
newProperties.encode ?? this.encode,
|
|
124
133
|
newProperties.annotations ?? this.annotations,
|
|
125
134
|
);
|
|
126
135
|
}
|
|
@@ -131,11 +140,11 @@ export class Declaration extends AST {
|
|
|
131
140
|
*/
|
|
132
141
|
export function createDeclaration(
|
|
133
142
|
typeParameters: Vector<AST>,
|
|
134
|
-
type: AST,
|
|
135
143
|
decode: (...typeParameters: ReadonlyArray<AST>) => (input: any, options?: ParseOptions) => ParseResult<any>,
|
|
144
|
+
encode: (...typeParameters: ReadonlyArray<AST>) => (input: any, options?: ParseOptions) => ParseResult<any>,
|
|
136
145
|
annotations: ASTAnnotationMap = ASTAnnotationMap.empty,
|
|
137
146
|
): Declaration {
|
|
138
|
-
return new Declaration(typeParameters,
|
|
147
|
+
return new Declaration(typeParameters, decode, encode, annotations);
|
|
139
148
|
}
|
|
140
149
|
|
|
141
150
|
/**
|
|
@@ -528,6 +537,15 @@ export class TemplateLiteralSpan {
|
|
|
528
537
|
readonly type: StringKeyword | NumberKeyword,
|
|
529
538
|
readonly literal: string,
|
|
530
539
|
) {}
|
|
540
|
+
|
|
541
|
+
toString() {
|
|
542
|
+
switch (this.type._tag) {
|
|
543
|
+
case ASTTag.StringKeyword:
|
|
544
|
+
return "${string}";
|
|
545
|
+
case ASTTag.NumberKeyword:
|
|
546
|
+
return "${number}";
|
|
547
|
+
}
|
|
548
|
+
}
|
|
531
549
|
}
|
|
532
550
|
|
|
533
551
|
/*
|
|
@@ -577,6 +595,10 @@ export class Element {
|
|
|
577
595
|
readonly type: AST,
|
|
578
596
|
readonly isOptional: boolean,
|
|
579
597
|
) {}
|
|
598
|
+
|
|
599
|
+
toString() {
|
|
600
|
+
return String(this.type) + (this.isOptional ? "?" : "");
|
|
601
|
+
}
|
|
580
602
|
}
|
|
581
603
|
|
|
582
604
|
/**
|
|
@@ -632,18 +654,16 @@ export const unknownArray = AST.createTuple(Vector.empty(), Just(Vector(AST.unkn
|
|
|
632
654
|
* PropertySignature
|
|
633
655
|
*/
|
|
634
656
|
|
|
635
|
-
export class PropertySignature
|
|
657
|
+
export class PropertySignature {
|
|
636
658
|
constructor(
|
|
637
659
|
readonly name: PropertyKey,
|
|
638
660
|
readonly type: AST,
|
|
639
661
|
readonly isOptional: boolean,
|
|
640
662
|
readonly isReadonly: boolean,
|
|
641
663
|
readonly annotations: ASTAnnotationMap = ASTAnnotationMap.empty,
|
|
642
|
-
) {
|
|
643
|
-
super();
|
|
644
|
-
}
|
|
664
|
+
) {}
|
|
645
665
|
|
|
646
|
-
clone(newProperties: Partial<this>):
|
|
666
|
+
clone(newProperties: Partial<this>): PropertySignature {
|
|
647
667
|
return new PropertySignature(
|
|
648
668
|
newProperties.name ?? this.name,
|
|
649
669
|
newProperties.type ?? this.type,
|
|
@@ -705,7 +725,7 @@ export class TypeLiteral extends AST {
|
|
|
705
725
|
) {
|
|
706
726
|
super();
|
|
707
727
|
this.propertySignatures = sortByAscendingCardinality(propertySignatures);
|
|
708
|
-
this.indexSignatures
|
|
728
|
+
this.indexSignatures = sortByAscendingCardinality(indexSignatures);
|
|
709
729
|
}
|
|
710
730
|
|
|
711
731
|
clone(newProperties: Partial<this>): AST {
|
|
@@ -923,6 +943,7 @@ export class Validation extends AST {
|
|
|
923
943
|
) {
|
|
924
944
|
super();
|
|
925
945
|
}
|
|
946
|
+
|
|
926
947
|
clone(newProperties: Partial<this>): AST {
|
|
927
948
|
return new Validation(
|
|
928
949
|
newProperties.from ?? this.from,
|
|
@@ -949,8 +970,6 @@ export function createValidation(
|
|
|
949
970
|
export function getCardinality(ast: AST): number {
|
|
950
971
|
concrete(ast);
|
|
951
972
|
switch (ast._tag) {
|
|
952
|
-
case ASTTag.Declaration:
|
|
953
|
-
return getCardinality(ast.type);
|
|
954
973
|
case ASTTag.NeverKeyword:
|
|
955
974
|
return 0;
|
|
956
975
|
case ASTTag.Literal:
|
|
@@ -966,7 +985,7 @@ export function getCardinality(ast: AST): number {
|
|
|
966
985
|
case ASTTag.SymbolKeyword:
|
|
967
986
|
return 3;
|
|
968
987
|
case ASTTag.ObjectKeyword:
|
|
969
|
-
return
|
|
988
|
+
return 5;
|
|
970
989
|
case ASTTag.UnknownKeyword:
|
|
971
990
|
case ASTTag.AnyKeyword:
|
|
972
991
|
return 6;
|
|
@@ -975,7 +994,7 @@ export function getCardinality(ast: AST): number {
|
|
|
975
994
|
case ASTTag.Transform:
|
|
976
995
|
return getCardinality(ast.to);
|
|
977
996
|
default:
|
|
978
|
-
return
|
|
997
|
+
return 4;
|
|
979
998
|
}
|
|
980
999
|
}
|
|
981
1000
|
|
|
@@ -983,30 +1002,64 @@ function sortByAscendingCardinality<A extends { readonly type: AST }>(types: Vec
|
|
|
983
1002
|
return types.sort(Number.Ord.contramap(({ type }) => getCardinality(type)));
|
|
984
1003
|
}
|
|
985
1004
|
|
|
986
|
-
export
|
|
1005
|
+
export type Weight = readonly [number, number, number];
|
|
1006
|
+
|
|
1007
|
+
const OrdWeight = Ord.tuple(Number.Ord, Number.Ord, Number.Ord);
|
|
1008
|
+
|
|
1009
|
+
const maxWeight = Ord.max(OrdWeight);
|
|
1010
|
+
|
|
1011
|
+
function maxWeightAll(weights: Iterable<Weight>): Weight {
|
|
1012
|
+
return weights.foldLeft(emptyWeight, (b, a) => maxWeight(b)(a));
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
const emptyWeight: Weight = [0, 0, 0];
|
|
1016
|
+
|
|
1017
|
+
export function getWeight(ast: AST): Weight {
|
|
987
1018
|
concrete(ast);
|
|
988
1019
|
switch (ast._tag) {
|
|
989
1020
|
case ASTTag.Declaration:
|
|
990
|
-
return
|
|
1021
|
+
return ast.annotations.get(ASTAnnotation.Surrogate).match(
|
|
1022
|
+
() => [6, 0, 0],
|
|
1023
|
+
(ast) => {
|
|
1024
|
+
const [_, y, z] = getWeight(ast);
|
|
1025
|
+
return [6, y, z];
|
|
1026
|
+
},
|
|
1027
|
+
);
|
|
991
1028
|
case ASTTag.Tuple:
|
|
992
|
-
return
|
|
993
|
-
|
|
994
|
-
|
|
1029
|
+
return [
|
|
1030
|
+
2,
|
|
1031
|
+
ast.elements.length,
|
|
1032
|
+
ast.rest.match(
|
|
1033
|
+
() => 0,
|
|
1034
|
+
(rest) => rest.length,
|
|
1035
|
+
),
|
|
1036
|
+
];
|
|
1037
|
+
case ASTTag.TypeLiteral: {
|
|
1038
|
+
const y = ast.propertySignatures.length;
|
|
1039
|
+
const z = ast.indexSignatures.length;
|
|
1040
|
+
return y + z === 0 ? [-4, 0, 0] : [4, y, z];
|
|
1041
|
+
}
|
|
995
1042
|
case ASTTag.Union:
|
|
996
|
-
return ast.types.
|
|
1043
|
+
return maxWeightAll(ast.types.map(getWeight));
|
|
997
1044
|
case ASTTag.Lazy:
|
|
998
|
-
return
|
|
1045
|
+
return [8, 0, 0];
|
|
999
1046
|
case ASTTag.Refinement:
|
|
1000
|
-
|
|
1047
|
+
const [x, y, z] = getWeight(ast.from);
|
|
1048
|
+
return [x + 1, y, z];
|
|
1001
1049
|
case ASTTag.Transform:
|
|
1002
|
-
return getWeight(ast.
|
|
1050
|
+
return getWeight(ast.from);
|
|
1051
|
+
case ASTTag.ObjectKeyword:
|
|
1052
|
+
return [-2, 0, 0];
|
|
1053
|
+
case ASTTag.UnknownKeyword:
|
|
1054
|
+
case ASTTag.AnyKeyword:
|
|
1055
|
+
return [-4, 0, 0];
|
|
1003
1056
|
default:
|
|
1004
|
-
return
|
|
1057
|
+
return emptyWeight;
|
|
1005
1058
|
}
|
|
1006
1059
|
}
|
|
1007
1060
|
|
|
1008
1061
|
function sortByDescendingWeight(types: Vector<AST>): Vector<AST> {
|
|
1009
|
-
return types.sort(
|
|
1062
|
+
return types.sort(OrdWeight.contramap(getWeight));
|
|
1010
1063
|
}
|
|
1011
1064
|
|
|
1012
1065
|
function unify(candidates: Vector<AST>): Vector<AST> {
|
|
@@ -1094,7 +1147,10 @@ export function getPropertySignatures(self: AST): Vector<PropertySignature> {
|
|
|
1094
1147
|
concrete(self);
|
|
1095
1148
|
switch (self._tag) {
|
|
1096
1149
|
case ASTTag.Declaration:
|
|
1097
|
-
return
|
|
1150
|
+
return self.annotations.get(ASTAnnotation.Surrogate).match(
|
|
1151
|
+
() => Vector.empty(),
|
|
1152
|
+
(surrogate) => getPropertySignatures(surrogate),
|
|
1153
|
+
);
|
|
1098
1154
|
case ASTTag.Tuple:
|
|
1099
1155
|
return self.elements.mapWithIndex((i, element) =>
|
|
1100
1156
|
createPropertySignature(i, element.type, element.isOptional, self.isReadonly),
|
|
@@ -1116,6 +1172,8 @@ export function getPropertySignatures(self: AST): Vector<PropertySignature> {
|
|
|
1116
1172
|
return Nothing();
|
|
1117
1173
|
});
|
|
1118
1174
|
}
|
|
1175
|
+
case ASTTag.TypeLiteral:
|
|
1176
|
+
return self.propertySignatures;
|
|
1119
1177
|
case ASTTag.Lazy:
|
|
1120
1178
|
return getPropertySignatures(self.getAST());
|
|
1121
1179
|
case ASTTag.Refinement:
|
|
@@ -1134,7 +1192,10 @@ export function keysOf(ast: AST): Vector<AST> {
|
|
|
1134
1192
|
concrete(ast);
|
|
1135
1193
|
switch (ast._tag) {
|
|
1136
1194
|
case ASTTag.Declaration:
|
|
1137
|
-
return
|
|
1195
|
+
return ast.annotations.get(ASTAnnotation.Surrogate).match(
|
|
1196
|
+
() => Vector.empty(),
|
|
1197
|
+
(surrogate) => keysOf(surrogate),
|
|
1198
|
+
);
|
|
1138
1199
|
case ASTTag.NeverKeyword:
|
|
1139
1200
|
case ASTTag.AnyKeyword:
|
|
1140
1201
|
return Vector(stringKeyword, numberKeyword, symbolKeyword);
|
|
@@ -1171,14 +1232,11 @@ export function keyof(self: AST): AST {
|
|
|
1171
1232
|
*/
|
|
1172
1233
|
export function createRecord(key: AST, value: AST, isReadonly: boolean): TypeLiteral {
|
|
1173
1234
|
const propertySignatures: MutableVector<PropertySignature> = Vector.emptyPushable();
|
|
1174
|
-
const indexSignatures: MutableVector<IndexSignature>
|
|
1235
|
+
const indexSignatures: MutableVector<IndexSignature> = Vector.emptyPushable();
|
|
1175
1236
|
|
|
1176
1237
|
function go(key: AST): void {
|
|
1177
1238
|
concrete(key);
|
|
1178
1239
|
switch (key._tag) {
|
|
1179
|
-
case ASTTag.Declaration:
|
|
1180
|
-
go(key.type);
|
|
1181
|
-
break;
|
|
1182
1240
|
case ASTTag.NeverKeyword:
|
|
1183
1241
|
break;
|
|
1184
1242
|
case ASTTag.StringKeyword:
|
|
@@ -1236,8 +1294,6 @@ export function omit(keys: Vector<PropertyKey>) {
|
|
|
1236
1294
|
export function partial(self: AST): AST {
|
|
1237
1295
|
concrete(self);
|
|
1238
1296
|
switch (self._tag) {
|
|
1239
|
-
case ASTTag.Declaration:
|
|
1240
|
-
return partial(self.type);
|
|
1241
1297
|
case ASTTag.Tuple:
|
|
1242
1298
|
return createTuple(
|
|
1243
1299
|
self.elements.map((e) => createElement(e.type, true)),
|
|
@@ -1275,8 +1331,13 @@ export function createKey(key: PropertyKey): AST {
|
|
|
1275
1331
|
export function getFrom(ast: AST): AST {
|
|
1276
1332
|
AST.concrete(ast);
|
|
1277
1333
|
switch (ast._tag) {
|
|
1278
|
-
case ASTTag.Declaration:
|
|
1279
|
-
|
|
1334
|
+
case ASTTag.Declaration: {
|
|
1335
|
+
const surrogate = ast.annotations.get(ASTAnnotation.Surrogate);
|
|
1336
|
+
if (surrogate.isJust()) {
|
|
1337
|
+
return getFrom(surrogate.value);
|
|
1338
|
+
}
|
|
1339
|
+
break;
|
|
1340
|
+
}
|
|
1280
1341
|
case ASTTag.Tuple:
|
|
1281
1342
|
return AST.createTuple(
|
|
1282
1343
|
ast.elements.map((element) => AST.createElement(getFrom(element.type), element.isOptional)),
|
|
@@ -1309,8 +1370,13 @@ export function getFrom(ast: AST): AST {
|
|
|
1309
1370
|
export function getTo(ast: AST): AST {
|
|
1310
1371
|
AST.concrete(ast);
|
|
1311
1372
|
switch (ast._tag) {
|
|
1312
|
-
case ASTTag.Declaration:
|
|
1313
|
-
|
|
1373
|
+
case ASTTag.Declaration: {
|
|
1374
|
+
const surrogate = ast.annotations.get(ASTAnnotation.Surrogate);
|
|
1375
|
+
if (surrogate.isJust()) {
|
|
1376
|
+
return getTo(surrogate.value);
|
|
1377
|
+
}
|
|
1378
|
+
break;
|
|
1379
|
+
}
|
|
1314
1380
|
case ASTTag.Tuple:
|
|
1315
1381
|
return AST.createTuple(
|
|
1316
1382
|
ast.elements.map((element) => AST.createElement(getTo(element.type), element.isOptional)),
|
|
@@ -1352,8 +1418,13 @@ export function getCompiler<A>(match: AST.Match<A>): AST.Compiler<A> {
|
|
|
1352
1418
|
export function getLiterals(ast: AST, isDecoding: boolean): ReadonlyArray<[PropertyKey, Literal]> {
|
|
1353
1419
|
AST.concrete(ast);
|
|
1354
1420
|
switch (ast._tag) {
|
|
1355
|
-
case ASTTag.Declaration:
|
|
1356
|
-
|
|
1421
|
+
case ASTTag.Declaration: {
|
|
1422
|
+
const surrogate = ast.annotations.get(ASTAnnotation.Surrogate);
|
|
1423
|
+
if (surrogate.isJust()) {
|
|
1424
|
+
return getLiterals(surrogate.value, isDecoding);
|
|
1425
|
+
}
|
|
1426
|
+
break;
|
|
1427
|
+
}
|
|
1357
1428
|
case ASTTag.TypeLiteral: {
|
|
1358
1429
|
const out: Array<[PropertyKey, Literal]> = [];
|
|
1359
1430
|
for (let i = 0; i < ast.propertySignatures.length; i++) {
|
|
@@ -1379,6 +1450,7 @@ export function getSearchTree(
|
|
|
1379
1450
|
keys: {
|
|
1380
1451
|
readonly [key: PropertyKey]: {
|
|
1381
1452
|
buckets: { [literal: string]: ReadonlyArray<AST> };
|
|
1453
|
+
literals: ReadonlyArray<Literal>;
|
|
1382
1454
|
ast: AST;
|
|
1383
1455
|
};
|
|
1384
1456
|
};
|
|
@@ -1387,28 +1459,31 @@ export function getSearchTree(
|
|
|
1387
1459
|
const keys: {
|
|
1388
1460
|
[key: PropertyKey]: {
|
|
1389
1461
|
buckets: { [literal: string]: Array<AST> };
|
|
1462
|
+
literals: Array<Literal>;
|
|
1390
1463
|
ast: AST;
|
|
1391
1464
|
};
|
|
1392
1465
|
} = {};
|
|
1393
1466
|
const otherwise: Array<AST> = [];
|
|
1394
1467
|
for (let i = 0; i < members.length; i++) {
|
|
1395
1468
|
const member = members[i]!;
|
|
1396
|
-
const tags
|
|
1469
|
+
const tags = getLiterals(member, isDecoding);
|
|
1397
1470
|
if (tags.length > 0) {
|
|
1398
1471
|
for (let j = 0; j < tags.length; j++) {
|
|
1399
1472
|
const [key, literal] = tags[j]!;
|
|
1400
|
-
const hash
|
|
1401
|
-
keys[key]!
|
|
1402
|
-
const buckets
|
|
1473
|
+
const hash = String(literal.literal);
|
|
1474
|
+
keys[key]! ||= { buckets: {}, ast: AST.neverKeyword, literals: [] };
|
|
1475
|
+
const buckets = keys[key]!.buckets;
|
|
1403
1476
|
if (Object.prototype.hasOwnProperty.call(buckets, hash)) {
|
|
1404
1477
|
if (j < tags.length - 1) {
|
|
1405
1478
|
continue;
|
|
1406
1479
|
}
|
|
1407
1480
|
buckets[hash]!.push(member);
|
|
1408
1481
|
keys[key]!.ast = AST.createUnion(Vector(keys[key]!.ast, literal));
|
|
1482
|
+
keys[key]!.literals.push(literal);
|
|
1409
1483
|
} else {
|
|
1410
1484
|
buckets[hash]! = [member];
|
|
1411
1485
|
keys[key]!.ast = AST.createUnion(Vector(keys[key]!.ast, literal));
|
|
1486
|
+
keys[key]!.literals.push(literal);
|
|
1412
1487
|
break;
|
|
1413
1488
|
}
|
|
1414
1489
|
}
|
|
@@ -1418,3 +1493,29 @@ export function getSearchTree(
|
|
|
1418
1493
|
}
|
|
1419
1494
|
return { keys, otherwise };
|
|
1420
1495
|
}
|
|
1496
|
+
|
|
1497
|
+
/**
|
|
1498
|
+
* @tsplus pipeable fncts.schema.AST getFormattedExpected
|
|
1499
|
+
*/
|
|
1500
|
+
export function getFormattedExpected(verbose: boolean = false) {
|
|
1501
|
+
return (self: AST): Maybe<string> => {
|
|
1502
|
+
if (verbose) {
|
|
1503
|
+
const description = self.annotations
|
|
1504
|
+
.get(ASTAnnotation.Description)
|
|
1505
|
+
.orElse(self.annotations.get(ASTAnnotation.Title));
|
|
1506
|
+
return self.annotations.get(ASTAnnotation.Identifier).match(
|
|
1507
|
+
() => description,
|
|
1508
|
+
(identifier) =>
|
|
1509
|
+
description.match(
|
|
1510
|
+
() => Just(identifier),
|
|
1511
|
+
(description) => Just(`${identifier} (${description})`),
|
|
1512
|
+
),
|
|
1513
|
+
);
|
|
1514
|
+
} else {
|
|
1515
|
+
return self.annotations
|
|
1516
|
+
.get(ASTAnnotation.Identifier)
|
|
1517
|
+
.orElse(self.annotations.get(ASTAnnotation.Title))
|
|
1518
|
+
.orElse(self.annotations.get(ASTAnnotation.Description));
|
|
1519
|
+
}
|
|
1520
|
+
};
|
|
1521
|
+
}
|
package/_src/ASTAnnotation.ts
CHANGED
|
@@ -53,7 +53,7 @@ export const DescriptionTag = Tag<string>();
|
|
|
53
53
|
*/
|
|
54
54
|
export const Description = new ASTAnnotation(DescriptionTag, "Description", (_, a) => a);
|
|
55
55
|
|
|
56
|
-
export const MessageTag = Tag<(
|
|
56
|
+
export const MessageTag = Tag<(error: ParseError) => string>();
|
|
57
57
|
|
|
58
58
|
/**
|
|
59
59
|
* @tsplus static fncts.schema.ASTAnnotationOps Message
|
|
@@ -81,6 +81,13 @@ export const ParseOptionalTag = Tag<boolean>();
|
|
|
81
81
|
*/
|
|
82
82
|
export const ParseOptional = new ASTAnnotation(ParseOptionalTag, "ParseOptional", (_, b) => b);
|
|
83
83
|
|
|
84
|
+
export const SurrogateTag = Tag<AST>();
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @tsplus static fncts.schema.ASTAnnotationOps Surrogate
|
|
88
|
+
*/
|
|
89
|
+
export const Surrogate = new ASTAnnotation(SurrogateTag, "Surrogate", (_, b) => b);
|
|
90
|
+
|
|
84
91
|
export type Hook<A> = (...typeParameters: ReadonlyArray<A>) => A;
|
|
85
92
|
|
|
86
93
|
export function hook(handler: (...typeParameters: ReadonlyArray<any>) => any): Hook<any> {
|
package/_src/Gen.ts
CHANGED
|
@@ -44,7 +44,10 @@ const go = memoize(function go(ast: AST): Gen<Sized, any> {
|
|
|
44
44
|
switch (ast._tag) {
|
|
45
45
|
case ASTTag.Declaration:
|
|
46
46
|
return getHook(ast).match(
|
|
47
|
-
() =>
|
|
47
|
+
() =>
|
|
48
|
+
Gen.fromIO(
|
|
49
|
+
IO.haltNow(new InvalidInterpretationError("cannot build a Gen for a Declaration without a Gen hook")),
|
|
50
|
+
),
|
|
48
51
|
(hook) => hook(...ast.typeParameters.map(go)),
|
|
49
52
|
);
|
|
50
53
|
case ASTTag.Literal:
|
|
@@ -83,8 +86,8 @@ const go = memoize(function go(ast: AST): Gen<Sized, any> {
|
|
|
83
86
|
}
|
|
84
87
|
case ASTTag.Tuple: {
|
|
85
88
|
const elements = ast.elements.map((e) => go(e.type));
|
|
86
|
-
const rest
|
|
87
|
-
let output
|
|
89
|
+
const rest = ast.rest.map((restElement) => restElement.map(go));
|
|
90
|
+
let output = Gen.tuple(...elements);
|
|
88
91
|
if (elements.length > 0 && rest.isNothing()) {
|
|
89
92
|
const firstOptionalIndex = ast.elements.findIndex((e) => e.isOptional);
|
|
90
93
|
if (firstOptionalIndex !== -1) {
|
|
@@ -96,7 +99,7 @@ const go = memoize(function go(ast: AST): Gen<Sized, any> {
|
|
|
96
99
|
if (rest.isJust()) {
|
|
97
100
|
const head = rest.value.unsafeHead!;
|
|
98
101
|
const tail = rest.value.tail;
|
|
99
|
-
output
|
|
102
|
+
output = output.flatMap((as) => head.arrayWith({ maxLength: 5 }).map((rest) => [...as, ...rest]));
|
|
100
103
|
for (let j = 0; j < tail.length; j++) {
|
|
101
104
|
output = output.flatMap((as) => tail[j]!.map((a) => [...as, a]));
|
|
102
105
|
}
|
|
@@ -105,11 +108,11 @@ const go = memoize(function go(ast: AST): Gen<Sized, any> {
|
|
|
105
108
|
}
|
|
106
109
|
case ASTTag.TypeLiteral: {
|
|
107
110
|
const propertySignatureTypes = ast.propertySignatures.map((ps) => go(ps.type));
|
|
108
|
-
const indexSignatures
|
|
111
|
+
const indexSignatures = ast.indexSignatures.map((is) => [go(is.parameter), go(is.type)] as const);
|
|
109
112
|
const requiredGens: Record<PropertyKey, Gen<any, any>> = {};
|
|
110
113
|
const optionalGens: Record<PropertyKey, Gen<any, any>> = {};
|
|
111
114
|
for (let i = 0; i < propertySignatureTypes.length; i++) {
|
|
112
|
-
const ps
|
|
115
|
+
const ps = ast.propertySignatures[i]!;
|
|
113
116
|
const name = ps.name;
|
|
114
117
|
if (!ps.isOptional) {
|
|
115
118
|
requiredGens[name] = propertySignatureTypes[i]!;
|
|
@@ -120,8 +123,8 @@ const go = memoize(function go(ast: AST): Gen<Sized, any> {
|
|
|
120
123
|
let output = Gen.struct(requiredGens).zipWith(Gen.partial(optionalGens), (a, b) => ({ ...a, ...b }));
|
|
121
124
|
for (let i = 0; i < indexSignatures.length; i++) {
|
|
122
125
|
const parameter = indexSignatures[i]![0]!;
|
|
123
|
-
const type
|
|
124
|
-
output
|
|
126
|
+
const type = indexSignatures[i]![1]!;
|
|
127
|
+
output = output.flatMap((o) => {
|
|
125
128
|
return record(parameter, type).map((d) => ({ ...d, ...o }));
|
|
126
129
|
});
|
|
127
130
|
}
|
|
@@ -134,7 +137,7 @@ const go = memoize(function go(ast: AST): Gen<Sized, any> {
|
|
|
134
137
|
case ASTTag.Lazy: {
|
|
135
138
|
return getHook(ast).match(
|
|
136
139
|
() => {
|
|
137
|
-
const f
|
|
140
|
+
const f = () => go(ast.getAST());
|
|
138
141
|
const get = memoize<typeof f, Gen<any, any>>(f);
|
|
139
142
|
return Gen.defer(() => get(f));
|
|
140
143
|
},
|