xanv 1.1.11 → 1.1.13
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/XanvType.cjs +62 -0
- package/XanvType.cjs.map +1 -0
- package/XanvType.d.ts +20 -14
- package/XanvType.js +60 -54
- package/XanvType.js.map +1 -1
- package/index.cjs +61 -0
- package/index.cjs.map +1 -0
- package/index.d.ts +25 -29
- package/index.js +41 -17
- package/index.js.map +1 -1
- package/package.json +4 -19
- package/readme.md +199 -199
- package/types/Any.cjs +16 -0
- package/types/Any.cjs.map +1 -0
- package/types/Any.d.ts +3 -3
- package/types/Any.js +14 -6
- package/types/Any.js.map +1 -1
- package/types/Array.cjs +66 -0
- package/types/Array.cjs.map +1 -0
- package/types/Array.d.ts +9 -9
- package/types/Array.js +64 -80
- package/types/Array.js.map +1 -1
- package/types/Boolean.cjs +15 -0
- package/types/Boolean.cjs.map +1 -0
- package/types/Boolean.d.ts +2 -2
- package/types/Boolean.js +13 -7
- package/types/Boolean.js.map +1 -1
- package/types/{Date.mjs → Date.cjs} +15 -7
- package/types/Date.cjs.map +1 -0
- package/types/Date.d.ts +2 -2
- package/types/Date.js +13 -7
- package/types/Date.js.map +1 -1
- package/types/Enum.cjs +28 -0
- package/types/Enum.cjs.map +1 -0
- package/types/Enum.d.ts +4 -5
- package/types/Enum.js +26 -25
- package/types/Enum.js.map +1 -1
- package/types/File.cjs +62 -0
- package/types/File.cjs.map +1 -0
- package/types/File.d.ts +8 -8
- package/types/File.js +60 -52
- package/types/File.js.map +1 -1
- package/types/Function.cjs +33 -0
- package/types/Function.cjs.map +1 -0
- package/types/Function.d.ts +15 -0
- package/types/Function.js +31 -0
- package/types/Function.js.map +1 -0
- package/types/Json.cjs +19 -0
- package/types/Json.cjs.map +1 -0
- package/types/Json.d.ts +3 -3
- package/types/Json.js +17 -11
- package/types/Json.js.map +1 -1
- package/types/Map.cjs +31 -0
- package/types/Map.cjs.map +1 -0
- package/types/Map.d.ts +6 -6
- package/types/Map.js +29 -23
- package/types/Map.js.map +1 -1
- package/types/{Number.mjs → Number.cjs} +77 -67
- package/types/Number.cjs.map +1 -0
- package/types/Number.d.ts +10 -10
- package/types/Number.js +75 -67
- package/types/Number.js.map +1 -1
- package/types/Object.cjs +22 -0
- package/types/Object.cjs.map +1 -0
- package/types/Object.d.ts +11 -5
- package/types/Object.js +20 -26
- package/types/Object.js.map +1 -1
- package/types/Promise.cjs +29 -0
- package/types/Promise.cjs.map +1 -0
- package/types/Promise.d.ts +11 -0
- package/types/Promise.js +27 -0
- package/types/Promise.js.map +1 -0
- package/types/{Record.mjs → Record.cjs} +31 -24
- package/types/Record.cjs.map +1 -0
- package/types/Record.d.ts +7 -7
- package/types/Record.js +29 -24
- package/types/Record.js.map +1 -1
- package/types/{Set.mjs → Set.cjs} +41 -33
- package/types/Set.cjs.map +1 -0
- package/types/Set.d.ts +6 -6
- package/types/Set.js +39 -33
- package/types/Set.js.map +1 -1
- package/types/{String.mjs → String.cjs} +95 -87
- package/types/String.cjs.map +1 -0
- package/types/String.d.ts +12 -12
- package/types/String.js +93 -87
- package/types/String.js.map +1 -1
- package/types/Tuple.cjs +31 -0
- package/types/Tuple.cjs.map +1 -0
- package/types/Tuple.d.ts +9 -5
- package/types/Tuple.js +29 -23
- package/types/Tuple.js.map +1 -1
- package/types/Union.cjs +34 -0
- package/types/Union.cjs.map +1 -0
- package/types/Union.d.ts +5 -4
- package/types/Union.js +32 -28
- package/types/Union.js.map +1 -1
- package/types.d.ts +29 -10
- package/XanvType.mjs +0 -54
- package/XanvType.mjs.map +0 -1
- package/index.mjs +0 -17
- package/index.mjs.map +0 -1
- package/types/Any.mjs +0 -6
- package/types/Any.mjs.map +0 -1
- package/types/Array.mjs +0 -80
- package/types/Array.mjs.map +0 -1
- package/types/Boolean.mjs +0 -7
- package/types/Boolean.mjs.map +0 -1
- package/types/Date.mjs.map +0 -1
- package/types/Enum.mjs +0 -25
- package/types/Enum.mjs.map +0 -1
- package/types/File.mjs +0 -52
- package/types/File.mjs.map +0 -1
- package/types/Json.mjs +0 -11
- package/types/Json.mjs.map +0 -1
- package/types/Map.mjs +0 -23
- package/types/Map.mjs.map +0 -1
- package/types/Number.mjs.map +0 -1
- package/types/Object.mjs +0 -26
- package/types/Object.mjs.map +0 -1
- package/types/Record.mjs.map +0 -1
- package/types/Set.mjs.map +0 -1
- package/types/String.mjs.map +0 -1
- package/types/Tuple.mjs +0 -23
- package/types/Tuple.mjs.map +0 -1
- package/types/Union.mjs +0 -28
- package/types/Union.mjs.map +0 -1
package/types/String.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"String.js","sources":["../../src/types/String.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\n\nclass XVString
|
|
1
|
+
{"version":3,"file":"String.js","sources":["../../src/types/String.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\r\n\r\nclass XVString extends XanvType<string, unknown> {\r\n constructor(length?: number) {\r\n super();\r\n if (length !== undefined) {\r\n this.length(length);\r\n }\r\n }\r\n\r\n protected check(value: unknown): string {\r\n if (typeof value !== \"string\") {\r\n throw new Error(`Value should be a string, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n\r\n length(length: number) {\r\n return this.set(\r\n \"length\",\r\n (v: unknown) => {\r\n const s = String(v);\r\n if (s.length !== length) {\r\n throw new Error(\r\n `String length should be ${length} characters, received ${s.length}`\r\n );\r\n }\r\n },\r\n length\r\n );\r\n }\r\n\r\n min(length: number) {\r\n return this.set(\r\n \"min\",\r\n (v: unknown) => {\r\n const s = String(v);\r\n if (s.length < length) {\r\n throw new Error(\r\n `Minimum length should be ${length} characters, received ${s.length}`\r\n );\r\n }\r\n },\r\n length\r\n );\r\n }\r\n\r\n max(length: number) {\r\n return this.set(\r\n \"max\",\r\n (v: unknown) => {\r\n const s = String(v);\r\n if (s.length > length) {\r\n throw new Error(\r\n `Maximum length should be ${length} characters, received ${s.length}`\r\n );\r\n }\r\n },\r\n length\r\n );\r\n }\r\n\r\n email() {\r\n return this.set(\"email\", (v: unknown) => {\r\n const s = String(v);\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n if (!emailRegex.test(s)) {\r\n throw new Error(`String should be a valid email address`);\r\n }\r\n });\r\n }\r\n\r\n uppercase() {\r\n return this.set(\"uppercase\", (v: unknown) => {\r\n const s = String(v);\r\n if (s !== s.toUpperCase()) {\r\n throw new Error(`String should be in uppercase`);\r\n }\r\n });\r\n }\r\n\r\n lowercase() {\r\n return this.set(\"lowercase\", (v: unknown) => {\r\n const s = String(v);\r\n if (s !== s.toLowerCase()) {\r\n throw new Error(`String should be in lowercase`);\r\n }\r\n });\r\n }\r\n\r\n number() {\r\n return this.set(\"number\", (v: unknown) => {\r\n const s = String(v);\r\n if (isNaN(Number(s))) {\r\n throw new Error(`String should be a valid number`);\r\n }\r\n });\r\n }\r\n\r\n date() {\r\n return this.set(\"date\", (v: unknown) => {\r\n const s = String(v);\r\n const d = new Date(s);\r\n if (isNaN(d.getTime())) {\r\n throw new Error(`String should be a valid date`);\r\n }\r\n });\r\n }\r\n\r\n base64() {\r\n return this.set(\"base64\", (v: unknown) => {\r\n const s = String(v);\r\n if (!/^[A-Za-z0-9+/]+={0,2}$/.test(s)) {\r\n throw new Error(`String should be a valid Base64 encoded string`);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default XVString;\r\n"],"names":[],"mappings":"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"}
|
package/types/Tuple.cjs
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var XanvType = require('../XanvType.cjs');
|
|
4
|
+
|
|
5
|
+
class XVTuple extends XanvType {
|
|
6
|
+
constructor(types) {
|
|
7
|
+
super();
|
|
8
|
+
this.types = types;
|
|
9
|
+
}
|
|
10
|
+
check(value) {
|
|
11
|
+
if (!Array.isArray(value)) {
|
|
12
|
+
throw new Error(`Value should be a tuple, received ${typeof value}`);
|
|
13
|
+
}
|
|
14
|
+
if (value.length !== this.types.length) {
|
|
15
|
+
throw new Error(`Tuple length should be ${this.types.length}, received ${value.length}`);
|
|
16
|
+
}
|
|
17
|
+
const result = [];
|
|
18
|
+
for (let i = 0; i < value.length; i++) {
|
|
19
|
+
try {
|
|
20
|
+
result[i] = this.types[i].parse(value[i]);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
throw new Error(`Tuple item at index ${i} should be of type ${this.types[i].constructor.name}, received ${typeof value[i]}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
module.exports = XVTuple;
|
|
31
|
+
//# sourceMappingURL=Tuple.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tuple.cjs","sources":["../../src/types/Tuple.ts"],"sourcesContent":["import { Infer, XVInstanceType } from \"../types\";\r\nimport XanvType from \"../XanvType\";\r\n\r\nclass XVTuple<T extends XVInstanceType[] = XVInstanceType[]> extends XanvType<{ [K in keyof T]: Infer<T[K]> }, unknown> {\r\n private types: T;\r\n\r\n constructor(types: T) {\r\n super();\r\n this.types = types;\r\n }\r\n\r\n protected check(value: unknown): { [K in keyof T]: Infer<T[K]> } {\r\n if (!Array.isArray(value)) {\r\n throw new Error(`Value should be a tuple, received ${typeof value}`);\r\n }\r\n\r\n if (value.length !== this.types.length) {\r\n throw new Error(`Tuple length should be ${this.types.length}, received ${value.length}`);\r\n }\r\n\r\n const result = [] as unknown as { [K in keyof T]: Infer<T[K]> };\r\n\r\n for (let i = 0; i < value.length; i++) {\r\n try {\r\n result[i] = this.types[i].parse(value[i]) as Infer<T[typeof i]>;\r\n } catch (err: any) {\r\n throw new Error(\r\n `Tuple item at index ${i} should be of type ${this.types[i].constructor.name}, received ${typeof value[i]}`\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVTuple;\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,OAAuD,SAAQ,QAAkD,CAAA;AAGpH,IAAA,WAAA,CAAY,KAAQ,EAAA;AACjB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACtB,CAAC;AAES,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,CAAA,kCAAA,EAAqC,OAAO,KAAK,CAAA,CAAE,CAAC,CAAC;AACvE,QAAA,CAAA;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACrC,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,IAAI,CAAC,KAAK,CAAC,MAAM,cAAc,KAAK,CAAC,MAAM,CAAA,CAAE,CAAC,CAAC;AAC3F,QAAA,CAAA;QAED,MAAM,MAAM,GAAG,EAAgD,CAAC;AAEhE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI;AACD,gBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAuB,CAAC;AAClE,YAAA,CAAA;AAAC,YAAA,OAAO,GAAQ,EAAE;gBAChB,MAAM,IAAI,KAAK,CACZ,CAAA,oBAAA,EAAuB,CAAC,sBAAsB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAA,WAAA,EAAc,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE,CAC7G,CAAC;AACJ,YAAA,CAAA;AACH,QAAA,CAAA;AAED,QAAA,OAAO,MAAM,CAAC;IACjB,CAAC;AACH;;;;"}
|
package/types/Tuple.d.ts
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import { XVInstanceType } from '../types.js';
|
|
1
|
+
import { XVInstanceType, Infer } from '../types.js';
|
|
2
2
|
import XanvType from '../XanvType.js';
|
|
3
3
|
|
|
4
|
-
declare class XVTuple<T extends
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
declare class XVTuple<T extends XVInstanceType[] = XVInstanceType[]> extends XanvType<{
|
|
5
|
+
[K in keyof T]: Infer<T[K]>;
|
|
6
|
+
}, unknown> {
|
|
7
|
+
private types;
|
|
8
|
+
constructor(types: T);
|
|
9
|
+
protected check(value: unknown): {
|
|
10
|
+
[K in keyof T]: Infer<T[K]>;
|
|
11
|
+
};
|
|
8
12
|
}
|
|
9
13
|
|
|
10
14
|
export { XVTuple as default };
|
package/types/Tuple.js
CHANGED
|
@@ -1,23 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
1
|
+
import XanvType from '../XanvType.js';
|
|
2
|
+
|
|
3
|
+
class XVTuple extends XanvType {
|
|
4
|
+
constructor(types) {
|
|
5
|
+
super();
|
|
6
|
+
this.types = types;
|
|
7
|
+
}
|
|
8
|
+
check(value) {
|
|
9
|
+
if (!Array.isArray(value)) {
|
|
10
|
+
throw new Error(`Value should be a tuple, received ${typeof value}`);
|
|
11
|
+
}
|
|
12
|
+
if (value.length !== this.types.length) {
|
|
13
|
+
throw new Error(`Tuple length should be ${this.types.length}, received ${value.length}`);
|
|
14
|
+
}
|
|
15
|
+
const result = [];
|
|
16
|
+
for (let i = 0; i < value.length; i++) {
|
|
17
|
+
try {
|
|
18
|
+
result[i] = this.types[i].parse(value[i]);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
throw new Error(`Tuple item at index ${i} should be of type ${this.types[i].constructor.name}, received ${typeof value[i]}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { XVTuple as default };
|
|
29
|
+
//# sourceMappingURL=Tuple.js.map
|
package/types/Tuple.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tuple.js","sources":["../../src/types/Tuple.ts"],"sourcesContent":["import { XVInstanceType } from \"../types\";\nimport XanvType from \"../XanvType\";\n\nclass XVTuple<T extends
|
|
1
|
+
{"version":3,"file":"Tuple.js","sources":["../../src/types/Tuple.ts"],"sourcesContent":["import { Infer, XVInstanceType } from \"../types\";\r\nimport XanvType from \"../XanvType\";\r\n\r\nclass XVTuple<T extends XVInstanceType[] = XVInstanceType[]> extends XanvType<{ [K in keyof T]: Infer<T[K]> }, unknown> {\r\n private types: T;\r\n\r\n constructor(types: T) {\r\n super();\r\n this.types = types;\r\n }\r\n\r\n protected check(value: unknown): { [K in keyof T]: Infer<T[K]> } {\r\n if (!Array.isArray(value)) {\r\n throw new Error(`Value should be a tuple, received ${typeof value}`);\r\n }\r\n\r\n if (value.length !== this.types.length) {\r\n throw new Error(`Tuple length should be ${this.types.length}, received ${value.length}`);\r\n }\r\n\r\n const result = [] as unknown as { [K in keyof T]: Infer<T[K]> };\r\n\r\n for (let i = 0; i < value.length; i++) {\r\n try {\r\n result[i] = this.types[i].parse(value[i]) as Infer<T[typeof i]>;\r\n } catch (err: any) {\r\n throw new Error(\r\n `Tuple item at index ${i} should be of type ${this.types[i].constructor.name}, received ${typeof value[i]}`\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVTuple;\r\n"],"names":[],"mappings":";;AAGA,MAAM,OAAuD,SAAQ,QAAkD,CAAA;AAGpH,IAAA,WAAA,CAAY,KAAQ,EAAA;AACjB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACtB,CAAC;AAES,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,CAAA,kCAAA,EAAqC,OAAO,KAAK,CAAA,CAAE,CAAC,CAAC;AACvE,QAAA,CAAA;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACrC,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,IAAI,CAAC,KAAK,CAAC,MAAM,cAAc,KAAK,CAAC,MAAM,CAAA,CAAE,CAAC,CAAC;AAC3F,QAAA,CAAA;QAED,MAAM,MAAM,GAAG,EAAgD,CAAC;AAEhE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI;AACD,gBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAuB,CAAC;AAClE,YAAA,CAAA;AAAC,YAAA,OAAO,GAAQ,EAAE;gBAChB,MAAM,IAAI,KAAK,CACZ,CAAA,oBAAA,EAAuB,CAAC,sBAAsB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAA,WAAA,EAAc,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE,CAC7G,CAAC;AACJ,YAAA,CAAA;AACH,QAAA,CAAA;AAED,QAAA,OAAO,MAAM,CAAC;IACjB,CAAC;AACH;;;;"}
|
package/types/Union.cjs
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var XanvType = require('../XanvType.cjs');
|
|
4
|
+
|
|
5
|
+
class XVUnion extends XanvType {
|
|
6
|
+
constructor(types) {
|
|
7
|
+
super();
|
|
8
|
+
if (!Array.isArray(types) || types.length === 0) {
|
|
9
|
+
throw new Error("Union types must be a non-empty array");
|
|
10
|
+
}
|
|
11
|
+
this.types = types;
|
|
12
|
+
}
|
|
13
|
+
check(value) {
|
|
14
|
+
let lastError = null;
|
|
15
|
+
for (const type of this.types) {
|
|
16
|
+
try {
|
|
17
|
+
return type.parse(value); // parse each type
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
lastError = err;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
throw new Error(`Value does not match any of the union types: ${this.types
|
|
24
|
+
.map((t) => t.constructor.name)
|
|
25
|
+
.join(", ")}. Last error: ${(lastError === null || lastError === void 0 ? void 0 : lastError.message) || lastError}`);
|
|
26
|
+
}
|
|
27
|
+
parse(value) {
|
|
28
|
+
// return the base parse value
|
|
29
|
+
return super.parse(value); // cast outside when using Infer if needed
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
module.exports = XVUnion;
|
|
34
|
+
//# sourceMappingURL=Union.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Union.cjs","sources":["../../src/types/Union.ts"],"sourcesContent":["import { XVInstanceType } from \"../types\";\r\nimport XanvType from \"../XanvType\";\r\n\r\nclass XVUnion<T extends XVInstanceType[] = XVInstanceType[]> extends XanvType<unknown> {\r\n private types: T;\r\n\r\n constructor(types: T) {\r\n super();\r\n if (!Array.isArray(types) || types.length === 0) {\r\n throw new Error(\"Union types must be a non-empty array\");\r\n }\r\n this.types = types;\r\n }\r\n\r\n protected check(value: unknown): unknown {\r\n let lastError: any = null;\r\n\r\n for (const type of this.types) {\r\n try {\r\n return type.parse(value); // parse each type\r\n } catch (err) {\r\n lastError = err;\r\n }\r\n }\r\n\r\n throw new Error(\r\n `Value does not match any of the union types: ${this.types\r\n .map((t) => t.constructor.name)\r\n .join(\", \")}. Last error: ${lastError?.message || lastError}`\r\n );\r\n }\r\n\r\n parse(value: unknown) {\r\n // return the base parse value\r\n return super.parse(value); // cast outside when using Infer if needed\r\n }\r\n}\r\n\r\nexport default XVUnion;\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,OAAuD,SAAQ,QAAiB,CAAA;AAGnF,IAAA,WAAA,CAAY,KAAQ,EAAA;AACjB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9C,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC3D,QAAA,CAAA;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACtB,CAAC;AAES,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,SAAS,GAAQ,IAAI,CAAC;AAE1B,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC5B,IAAI;gBACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3B,YAAA,CAAA;AAAC,YAAA,OAAO,GAAG,EAAE;gBACX,SAAS,GAAG,GAAG,CAAC;AAClB,YAAA,CAAA;AACH,QAAA,CAAA;AAED,QAAA,MAAM,IAAI,KAAK,CACZ,CAAA,6CAAA,EAAgD,IAAI,CAAC,KAAK;aACtD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;AAC9B,aAAA,IAAI,CAAC,IAAI,CAAC,CAAA,cAAA,EAAiB,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,OAAO,KAAI,SAAS,CAAA,CAAE,CAClE,CAAC;IACL,CAAC;AAED,IAAA,KAAK,CAAC,KAAc,EAAA;;QAEjB,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;AACH;;;;"}
|
package/types/Union.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { XVInstanceType } from '../types.js';
|
|
2
2
|
import XanvType from '../XanvType.js';
|
|
3
3
|
|
|
4
|
-
declare class XVUnion<T =
|
|
5
|
-
private
|
|
6
|
-
constructor(
|
|
7
|
-
protected check(value:
|
|
4
|
+
declare class XVUnion<T extends XVInstanceType[] = XVInstanceType[]> extends XanvType<unknown> {
|
|
5
|
+
private types;
|
|
6
|
+
constructor(types: T);
|
|
7
|
+
protected check(value: unknown): unknown;
|
|
8
|
+
parse(value: unknown): unknown;
|
|
8
9
|
}
|
|
9
10
|
|
|
10
11
|
export { XVUnion as default };
|
package/types/Union.js
CHANGED
|
@@ -1,28 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
1
|
+
import XanvType from '../XanvType.js';
|
|
2
|
+
|
|
3
|
+
class XVUnion extends XanvType {
|
|
4
|
+
constructor(types) {
|
|
5
|
+
super();
|
|
6
|
+
if (!Array.isArray(types) || types.length === 0) {
|
|
7
|
+
throw new Error("Union types must be a non-empty array");
|
|
8
|
+
}
|
|
9
|
+
this.types = types;
|
|
10
|
+
}
|
|
11
|
+
check(value) {
|
|
12
|
+
let lastError = null;
|
|
13
|
+
for (const type of this.types) {
|
|
14
|
+
try {
|
|
15
|
+
return type.parse(value); // parse each type
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
lastError = err;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
throw new Error(`Value does not match any of the union types: ${this.types
|
|
22
|
+
.map((t) => t.constructor.name)
|
|
23
|
+
.join(", ")}. Last error: ${(lastError === null || lastError === void 0 ? void 0 : lastError.message) || lastError}`);
|
|
24
|
+
}
|
|
25
|
+
parse(value) {
|
|
26
|
+
// return the base parse value
|
|
27
|
+
return super.parse(value); // cast outside when using Infer if needed
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { XVUnion as default };
|
|
32
|
+
//# sourceMappingURL=Union.js.map
|
package/types/Union.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Union.js","sources":["../../src/types/Union.ts"],"sourcesContent":["import { XVInstanceType } from \"../types\";\nimport XanvType from \"../XanvType\";\n\nclass XVUnion<T =
|
|
1
|
+
{"version":3,"file":"Union.js","sources":["../../src/types/Union.ts"],"sourcesContent":["import { XVInstanceType } from \"../types\";\r\nimport XanvType from \"../XanvType\";\r\n\r\nclass XVUnion<T extends XVInstanceType[] = XVInstanceType[]> extends XanvType<unknown> {\r\n private types: T;\r\n\r\n constructor(types: T) {\r\n super();\r\n if (!Array.isArray(types) || types.length === 0) {\r\n throw new Error(\"Union types must be a non-empty array\");\r\n }\r\n this.types = types;\r\n }\r\n\r\n protected check(value: unknown): unknown {\r\n let lastError: any = null;\r\n\r\n for (const type of this.types) {\r\n try {\r\n return type.parse(value); // parse each type\r\n } catch (err) {\r\n lastError = err;\r\n }\r\n }\r\n\r\n throw new Error(\r\n `Value does not match any of the union types: ${this.types\r\n .map((t) => t.constructor.name)\r\n .join(\", \")}. Last error: ${lastError?.message || lastError}`\r\n );\r\n }\r\n\r\n parse(value: unknown) {\r\n // return the base parse value\r\n return super.parse(value); // cast outside when using Infer if needed\r\n }\r\n}\r\n\r\nexport default XVUnion;\r\n"],"names":[],"mappings":";;AAGA,MAAM,OAAuD,SAAQ,QAAiB,CAAA;AAGnF,IAAA,WAAA,CAAY,KAAQ,EAAA;AACjB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9C,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC3D,QAAA,CAAA;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACtB,CAAC;AAES,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,SAAS,GAAQ,IAAI,CAAC;AAE1B,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC5B,IAAI;gBACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3B,YAAA,CAAA;AAAC,YAAA,OAAO,GAAG,EAAE;gBACX,SAAS,GAAG,GAAG,CAAC;AAClB,YAAA,CAAA;AACH,QAAA,CAAA;AAED,QAAA,MAAM,IAAI,KAAK,CACZ,CAAA,6CAAA,EAAgD,IAAI,CAAC,KAAK;aACtD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;AAC9B,aAAA,IAAI,CAAC,IAAI,CAAC,CAAA,cAAA,EAAiB,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,OAAO,KAAI,SAAS,CAAA,CAAE,CAClE,CAAC;IACL,CAAC;AAED,IAAA,KAAK,CAAC,KAAc,EAAA;;QAEjB,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;AACH;;;;"}
|
package/types.d.ts
CHANGED
|
@@ -1,25 +1,44 @@
|
|
|
1
|
-
import XanvType from './XanvType.js';
|
|
2
1
|
import XVAny from './types/Any.js';
|
|
3
2
|
import XVArray from './types/Array.js';
|
|
4
3
|
import XVBoolean from './types/Boolean.js';
|
|
5
4
|
import XVDate from './types/Date.js';
|
|
6
5
|
import XVEnum from './types/Enum.js';
|
|
7
6
|
import XVFile from './types/File.js';
|
|
7
|
+
import XVFunction from './types/Function.js';
|
|
8
|
+
import XVJson from './types/Json.js';
|
|
8
9
|
import XVMap from './types/Map.js';
|
|
9
10
|
import XVNumber from './types/Number.js';
|
|
10
|
-
import XVObject from './types/Object.js';
|
|
11
|
+
import XVObject, { XVObjectShape } from './types/Object.js';
|
|
12
|
+
import XVPromise from './types/Promise.js';
|
|
11
13
|
import XVRecord from './types/Record.js';
|
|
12
14
|
import XVSet from './types/Set.js';
|
|
13
15
|
import XVString from './types/String.js';
|
|
14
16
|
import XVTuple from './types/Tuple.js';
|
|
15
17
|
import XVUnion from './types/Union.js';
|
|
16
18
|
|
|
17
|
-
type XVInstanceType =
|
|
18
|
-
type
|
|
19
|
-
type
|
|
20
|
-
type
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
type XVInstanceType = XVAny | XVArray<any> | XVBoolean | XVDate | XVEnum<any> | XVFile | XVMap<any, any> | XVNumber | XVObject<XVObjectShape> | XVRecord<XVInstanceType, XVInstanceType> | XVSet<any> | XVString | XVTuple<any> | XVUnion<any> | XVJson<Record<string, any>> | XVFunction<any[], any> | XVPromise<any>;
|
|
20
|
+
type XVCheckCallback<T> = (value: T) => void;
|
|
21
|
+
type Dec<N extends number> = N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : N extends 2 ? 1 : N extends 1 ? 0 : 0;
|
|
22
|
+
type Infer<T, Depth extends number = 5> = Depth extends 0 ? any : T extends {
|
|
23
|
+
meta: {
|
|
24
|
+
optional: true;
|
|
25
|
+
nullable: true;
|
|
26
|
+
};
|
|
27
|
+
} ? InferType<T, Dec<Depth>> | null | undefined : T extends {
|
|
28
|
+
meta: {
|
|
29
|
+
optional: true;
|
|
30
|
+
};
|
|
31
|
+
} ? InferType<T, Dec<Depth>> | undefined : T extends {
|
|
32
|
+
meta: {
|
|
33
|
+
nullable: true;
|
|
34
|
+
};
|
|
35
|
+
} ? InferType<T, Dec<Depth>> | null : InferType<T, Dec<Depth>>;
|
|
36
|
+
type InferType<T, Depth extends number> = T extends XVFunction<infer A extends XVInstanceType[], infer R> ? (...args: {
|
|
37
|
+
[K in keyof A]: Infer<A[K], Depth>;
|
|
38
|
+
}) => Infer<R, Depth> : T extends XVPromise<infer U> ? Promise<Infer<U, Depth>> : T extends XVString ? string : T extends XVNumber ? number : T extends XVBoolean ? boolean : T extends XVDate ? Date : T extends XVAny ? any : T extends XVFile ? File | Blob : T extends XVEnum<infer U> ? U[number] : T extends XVArray<infer U> ? Infer<U, Depth>[] : T extends XVTuple<infer U extends XVInstanceType[]> ? {
|
|
39
|
+
[K in keyof U]: Infer<U[K], Depth>;
|
|
40
|
+
} : T extends XVUnion<infer U extends XVInstanceType[]> ? Infer<U[number], Depth> : T extends XVMap<infer K, infer V> ? Map<Infer<K, Depth>, Infer<V, Depth>> : T extends XVSet<infer U> ? Set<Infer<U, Depth>> : T extends XVRecord<infer K, infer V> ? Record<Infer<K, Depth>, Infer<V, Depth>> : T extends XVJson ? Record<string, any> : T extends XVObject<infer O> ? {
|
|
41
|
+
[K in keyof O]: Infer<O[K], Depth>;
|
|
42
|
+
} : any;
|
|
24
43
|
|
|
25
|
-
export type {
|
|
44
|
+
export type { Infer, XVCheckCallback, XVInstanceType };
|
package/XanvType.mjs
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
class XanvType {
|
|
2
|
-
constructor() {
|
|
3
|
-
this.checkes = new Map();
|
|
4
|
-
this.transforms = [];
|
|
5
|
-
this.meta = {};
|
|
6
|
-
}
|
|
7
|
-
set(methodName, check, args = true) {
|
|
8
|
-
const has = methodName in this;
|
|
9
|
-
if (!has) {
|
|
10
|
-
throw new Error(`Method ${methodName} does not exist on ${this.constructor.name}`);
|
|
11
|
-
}
|
|
12
|
-
this.checkes.set(methodName, check);
|
|
13
|
-
this.meta[methodName] = args;
|
|
14
|
-
return this;
|
|
15
|
-
}
|
|
16
|
-
clone() {
|
|
17
|
-
const cloned = Object.create(this);
|
|
18
|
-
cloned.checkes = new Map(this.checkes);
|
|
19
|
-
cloned.meta = Object.assign({}, this.meta);
|
|
20
|
-
cloned.transforms = [...this.transforms];
|
|
21
|
-
return cloned;
|
|
22
|
-
}
|
|
23
|
-
optional() {
|
|
24
|
-
return this.set('optional', () => { }, true);
|
|
25
|
-
}
|
|
26
|
-
default(value) {
|
|
27
|
-
return this.set('default', () => { }, value);
|
|
28
|
-
}
|
|
29
|
-
nullable() {
|
|
30
|
-
return this.set('nullable', () => { }, true);
|
|
31
|
-
}
|
|
32
|
-
transform(cb) {
|
|
33
|
-
this.transforms.push(cb);
|
|
34
|
-
}
|
|
35
|
-
parse(value) {
|
|
36
|
-
if (this.meta.default !== undefined && (value === undefined || value === null)) {
|
|
37
|
-
value = typeof this.meta.default === 'function' ? this.meta.default() : this.meta.default;
|
|
38
|
-
}
|
|
39
|
-
if (this.meta.optional && value === undefined) {
|
|
40
|
-
return value;
|
|
41
|
-
}
|
|
42
|
-
if (this.meta.nullable && value === null) {
|
|
43
|
-
return value;
|
|
44
|
-
}
|
|
45
|
-
value = this.check(value) || value;
|
|
46
|
-
for (const [, check] of Array.from(this.checkes.entries())) {
|
|
47
|
-
check(value);
|
|
48
|
-
}
|
|
49
|
-
for (const transform of this.transforms) {
|
|
50
|
-
value = transform(value);
|
|
51
|
-
}
|
|
52
|
-
return value;
|
|
53
|
-
}
|
|
54
|
-
}export{XanvType as default};//# sourceMappingURL=XanvType.mjs.map
|
package/XanvType.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"XanvType.mjs","sources":["../src/XanvType.ts"],"sourcesContent":["import { XanvTransformCallback, XVCheckCallback } from \"./types\";\n\nabstract class XanvType<Value = any> {\n private checkes = new Map<string, XVCheckCallback<Value>>();\n private transforms: XanvTransformCallback<Value>[] = []\n readonly meta: Record<string, any> = {}\n protected abstract check(value: any): any;\n\n protected set(methodName: string, check: XVCheckCallback<Value>, args: any = true) {\n const has = methodName in this\n if (!has) {\n throw new Error(`Method ${methodName} does not exist on ${this.constructor.name}`);\n }\n this.checkes.set(methodName, check);\n this.meta[methodName] = args\n return this\n }\n\n clone() {\n const cloned = Object.create(this);\n cloned.checkes = new Map(this.checkes);\n cloned.meta = { ...this.meta };\n cloned.transforms = [...this.transforms];\n return cloned;\n }\n\n optional() {\n return this.set('optional', () => { }, true);\n }\n\n default(value: Value | (() => Value)) {\n return this.set('default', () => { }, value);\n }\n\n nullable() {\n return this.set('nullable', () => { }, true);\n }\n\n transform(cb: XanvTransformCallback<Value>) {\n this.transforms.push(cb);\n }\n\n parse(value: any): Value | undefined | null {\n\n if (this.meta.default !== undefined && (value === undefined || value === null)) {\n value = typeof this.meta.default === 'function' ? this.meta.default() : this.meta.default\n }\n\n if (this.meta.optional && value === undefined) {\n return value;\n }\n\n if (this.meta.nullable && value === null) {\n return value;\n }\n\n value = this.check(value) || value;\n\n for (const [, check] of Array.from(this.checkes.entries())) {\n check(value);\n }\n\n for (const transform of this.transforms) {\n value = transform(value);\n }\n\n return value;\n }\n}\n\nexport default XanvType;"],"names":[],"mappings":"AAEA,MAAe,QAAQ,CAAA;AAAvB,IAAA,WAAA,GAAA;AACW,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAkC;QACnD,IAAA,CAAA,UAAU,GAAmC,EAAE;QAC9C,IAAA,CAAA,IAAI,GAAwB,EAAE;IA+D1C;AA5Da,IAAA,GAAG,CAAC,UAAkB,EAAE,KAA6B,EAAE,OAAY,IAAI,EAAA;AAC9E,QAAA,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI;QAC9B,IAAI,CAAC,GAAG,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,UAAU,CAAA,mBAAA,EAAsB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA,CAAE,CAAC;AACpF,QAAA;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI;AAC5B,QAAA,OAAO,IAAI;IACd;IAEA,KAAK,GAAA;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QAClC,MAAM,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,CAAC,IAAI,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,IAAI,CAAC,IAAI,CAAE;QAC9B,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;AACxC,QAAA,OAAO,MAAM;IAChB;IAEA,QAAQ,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAK,EAAG,CAAC,EAAE,IAAI,CAAC;IAC/C;AAEA,IAAA,OAAO,CAAC,KAA4B,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAK,EAAG,CAAC,EAAE,KAAK,CAAC;IAC/C;IAEA,QAAQ,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAK,EAAG,CAAC,EAAE,IAAI,CAAC;IAC/C;AAEA,IAAA,SAAS,CAAC,EAAgC,EAAA;AACvC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3B;AAEA,IAAA,KAAK,CAAC,KAAU,EAAA;AAEb,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE;YAC7E,KAAK,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;AAC3F,QAAA;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;AAC5C,YAAA,OAAO,KAAK;AACd,QAAA;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AACvC,YAAA,OAAO,KAAK;AACd,QAAA;QAED,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK;AAElC,QAAA,KAAK,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE;YACzD,KAAK,CAAC,KAAK,CAAC;AACd,QAAA;AAED,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;AAC1B,QAAA;AAED,QAAA,OAAO,KAAK;IACf;AACF"}
|
package/index.mjs
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export{default as XanvType}from'./XanvType.mjs';import XVAny from'./types/Any.mjs';import XVArray from'./types/Array.mjs';import XVBoolean from'./types/Boolean.mjs';import XVDate from'./types/Date.mjs';import XVEnum from'./types/Enum.mjs';import XVFile from'./types/File.mjs';import XVMap from'./types/Map.mjs';import XVNumber from'./types/Number.mjs';import XVObject from'./types/Object.mjs';import XVRecord from'./types/Record.mjs';import XVSet from'./types/Set.mjs';import XVString from'./types/String.mjs';import XVTuple from'./types/Tuple.mjs';import XVUnion from'./types/Union.mjs';import XVJson from'./types/Json.mjs';const xv = {
|
|
2
|
-
any: () => new XVAny(),
|
|
3
|
-
array: (type, length) => new XVArray(type, length),
|
|
4
|
-
boolean: () => new XVBoolean(),
|
|
5
|
-
date: () => new XVDate(),
|
|
6
|
-
enum: (values) => new XVEnum(values),
|
|
7
|
-
file: () => new XVFile(),
|
|
8
|
-
map: (key, value) => new XVMap(key, value),
|
|
9
|
-
number: (length) => new XVNumber(length),
|
|
10
|
-
object: (arg) => new XVObject(arg),
|
|
11
|
-
record: (key, value) => new XVRecord(key, value),
|
|
12
|
-
set: (type) => new XVSet(type),
|
|
13
|
-
string: (length) => new XVString(length),
|
|
14
|
-
tuple: (type) => new XVTuple(type),
|
|
15
|
-
union: (type) => new XVUnion(type),
|
|
16
|
-
json: () => new XVJson(),
|
|
17
|
-
};export{XVAny,XVArray,XVBoolean,XVDate,XVEnum,XVFile,XVJson,XVMap,XVNumber,XVObject,XVRecord,XVSet,XVString,XVTuple,XVUnion,xv};//# sourceMappingURL=index.mjs.map
|
package/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import XanvType from \"./XanvType\";\nimport XVAny from \"./types/Any\";\nimport XVArray from \"./types/Array\";\nimport XVBoolean from \"./types/Boolean\";\nimport XVDate from \"./types/Date\";\nimport XVEnum from \"./types/Enum\";\nimport XVFile from \"./types/File\";\nimport XVMap from \"./types/Map\";\nimport XVNumber from \"./types/Number\";\nimport XVObject from \"./types/Object\";\nimport XVRecord from \"./types/Record\";\nimport XVSet from \"./types/Set\";\nimport XVString from \"./types/String\";\nimport XVTuple from \"./types/Tuple\";\nimport XVUnion from \"./types/Union\";\nimport XVJson from \"./types/Json\";\n\nimport {\n XVEnumValues,\n XVInstanceType,\n XVObjectType,\n XVCheckCallback,\n XVObjectValueType,\n} from \"./types\";\n\nexport type {\n XVEnumValues,\n XVInstanceType,\n XVObjectType,\n XVCheckCallback,\n XVObjectValueType,\n};\n\nexport {\n XanvType,\n XVAny,\n XVArray,\n XVBoolean,\n XVDate,\n XVEnum,\n XVFile,\n XVMap,\n XVNumber,\n XVObject,\n XVRecord,\n XVSet,\n XVString,\n XVTuple,\n XVUnion,\n XVJson,\n};\n\nexport const xv = {\n any: () => new XVAny(),\n array: (type: XVInstanceType, length?: number) => new XVArray(type, length),\n boolean: () => new XVBoolean(),\n date: () => new XVDate(),\n enum: (values: XVEnumValues) => new XVEnum(values),\n file: () => new XVFile(),\n map: (key: XVInstanceType, value: XVInstanceType) => new XVMap(key, value),\n number: (length?: number) => new XVNumber(length),\n object: (arg?: XVObjectType) => new XVObject(arg),\n record: (key: XVInstanceType, value: XVInstanceType) => new XVRecord(key, value),\n set: (type: XVInstanceType) => new XVSet(type),\n string: (length?: number) => new XVString(length),\n tuple: (type: XVInstanceType[]) => new XVTuple(type),\n union: (type: XVInstanceType[]) => new XVUnion(type),\n json: () => new XVJson(),\n}\n\nexport type Infer<T> =\n T extends XanvType<infer U> ? U :\n T extends XVString ? string :\n T extends XVNumber ? number :\n T extends XVBoolean ? boolean :\n T extends XVDate ? Date :\n T extends XVAny ? any :\n T extends XVFile ? File | Blob :\n T extends XVEnum ? (string | number) :\n T extends XVArray ? any[] :\n T extends XVTuple ? any[] :\n T extends XVUnion ? any :\n T extends XVMap ? Map<any, any> :\n T extends XVSet ? Set<any> :\n T extends XVRecord ? Record<string, any> :\n T extends XVJson ? object :\n T extends XVObject ? (T extends { arg?: infer O } ? { [K in keyof O]: Infer<O[K]> } : any) :\n T extends object ? { [K in keyof T]: Infer<T[K]> } :\n any;\n\n"],"names":[],"mappings":"inBAoDO,MAAM,EAAE,GAAG;AACf,IAAA,GAAG,EAAE,MAAM,IAAI,KAAK,EAAE;AACtB,IAAA,KAAK,EAAE,CAAC,IAAoB,EAAE,MAAe,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AAC3E,IAAA,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE;AAC9B,IAAA,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE;IACxB,IAAI,EAAE,CAAC,MAAoB,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC;AAClD,IAAA,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE;AACxB,IAAA,GAAG,EAAE,CAAC,GAAmB,EAAE,KAAqB,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;IAC1E,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAC,GAAkB,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC;AACjD,IAAA,MAAM,EAAE,CAAC,GAAmB,EAAE,KAAqB,KAAK,IAAI,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC;IAChF,GAAG,EAAE,CAAC,IAAoB,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;IAC9C,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAAC,IAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IACpD,KAAK,EAAE,CAAC,IAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;AACpD,IAAA,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE;"}
|
package/types/Any.mjs
DELETED
package/types/Any.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Any.mjs","sources":["../../src/types/Any.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\n\nclass XVAny<T = any> extends XanvType<T> {\n protected check() { }\n\n parse(value: any): T | undefined | null {\n return super.parse(value) as any;\n }\n}\n\nexport default XVAny;"],"names":[],"mappings":"sCAEA,MAAM,KAAe,SAAQ,QAAW,CAAA;AAC3B,IAAA,KAAK,KAAK;AAEpB,IAAA,KAAK,CAAC,KAAU,EAAA;AACb,QAAA,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAQ;IACnC;AACF"}
|
package/types/Array.mjs
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import XVMap from'./Map.mjs';import XVObject from'./Object.mjs';import XVRecord from'./Record.mjs';import XanvType from'../XanvType.mjs';class XVArray extends XanvType {
|
|
2
|
-
constructor(type, length) {
|
|
3
|
-
super();
|
|
4
|
-
this.type = type;
|
|
5
|
-
this.length = length;
|
|
6
|
-
}
|
|
7
|
-
check(value) {
|
|
8
|
-
let _value = value;
|
|
9
|
-
if (!Array.isArray(value)) {
|
|
10
|
-
throw new Error(`Value should be an array, received ${typeof value}`);
|
|
11
|
-
}
|
|
12
|
-
if (this.length !== undefined && value.length !== this.length) {
|
|
13
|
-
throw new Error(`Array length should be ${this.length}, received ${value.length}`);
|
|
14
|
-
}
|
|
15
|
-
if (this.type) {
|
|
16
|
-
for (let i = 0; i < value.length; i++) {
|
|
17
|
-
const item = value[i];
|
|
18
|
-
try {
|
|
19
|
-
_value[i] = this.type.parse(item);
|
|
20
|
-
}
|
|
21
|
-
catch (error) {
|
|
22
|
-
throw new Error(`Array item at index ${i} should be of type ${this.type.constructor.name}, received ${typeof item}: ${error.message}`);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return _value;
|
|
27
|
-
}
|
|
28
|
-
min(length) {
|
|
29
|
-
return this.set("min", v => {
|
|
30
|
-
if (v.length < length) {
|
|
31
|
-
throw new Error(`Array length should be at least ${length} items, received ${v.length}`);
|
|
32
|
-
}
|
|
33
|
-
}, length);
|
|
34
|
-
}
|
|
35
|
-
max(length) {
|
|
36
|
-
return this.set("max", v => {
|
|
37
|
-
if (v.length > length) {
|
|
38
|
-
throw new Error(`Array length should not exceed ${length} items, received ${v.length}`);
|
|
39
|
-
}
|
|
40
|
-
}, length);
|
|
41
|
-
}
|
|
42
|
-
unique() {
|
|
43
|
-
return this.set("unique", v => {
|
|
44
|
-
let format = [];
|
|
45
|
-
for (let i = 0; i < v.length; i++) {
|
|
46
|
-
if (this.type instanceof XVObject || this.type instanceof XVRecord) {
|
|
47
|
-
const u = JSON.stringify(v[i]);
|
|
48
|
-
if (format.includes(u)) {
|
|
49
|
-
throw new Error(`Array items should be unique, found duplicate: ${u}`);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
format.push(u);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
else if (this.type instanceof XVArray) {
|
|
56
|
-
const u = JSON.stringify(v[i]);
|
|
57
|
-
if (format.includes(u)) {
|
|
58
|
-
throw new Error(`Array items should be unique, found duplicate: ${u}`);
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
format.push(u);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
else if (this.type instanceof XVMap) {
|
|
65
|
-
const u = JSON.stringify(Array.from(v.entries()));
|
|
66
|
-
if (format.includes(u)) {
|
|
67
|
-
throw new Error(`Array items should be unique, found duplicate: ${u}`);
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
format.push(u);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
const uitems = new Set(v);
|
|
75
|
-
if (uitems.size !== v.length) {
|
|
76
|
-
throw new Error(`Array items should be unique, found duplicates`);
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
}export{XVArray as default};//# sourceMappingURL=Array.mjs.map
|
package/types/Array.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Array.mjs","sources":["../../src/types/Array.ts"],"sourcesContent":["\nimport XVMap from \"./Map\";\nimport XVObject from \"./Object\";\nimport XVRecord from \"./Record\";\nimport XanvType from \"../XanvType\";\nimport { XVInstanceType } from \"../types\";\n\nclass XVArray<T = any[]> extends XanvType<T[]> {\n private type?: XVInstanceType;\n private length?: number;\n constructor(type?: XVInstanceType, length?: number) {\n super();\n this.type = type;\n this.length = length;\n }\n\n protected check(value: any): void {\n let _value = value;\n if (!Array.isArray(value)) {\n throw new Error(`Value should be an array, received ${typeof value}`);\n }\n\n if (this.length !== undefined && value.length !== this.length) {\n throw new Error(`Array length should be ${this.length}, received ${value.length}`);\n }\n\n if (this.type) {\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n try {\n _value[i] = this.type.parse(item);\n } catch (error: any) {\n throw new Error(`Array item at index ${i} should be of type ${this.type.constructor.name}, received ${typeof item}: ${error.message}`);\n }\n }\n }\n return _value;\n }\n\n min(length: number) {\n return this.set(\"min\", v => {\n if (v.length < length) {\n throw new Error(`Array length should be at least ${length} items, received ${v.length}`)\n }\n }, length);\n }\n\n max(length: number) {\n return this.set(\"max\", v => {\n if (v.length > length) {\n throw new Error(`Array length should not exceed ${length} items, received ${v.length}`)\n }\n }, length);\n }\n\n unique() {\n return this.set(\"unique\", v => {\n let format: any = []\n for (let i = 0; i < v.length; i++) {\n if (this.type instanceof XVObject || this.type instanceof XVRecord) {\n const u = JSON.stringify(v[i]);\n if (format.includes(u)) {\n throw new Error(`Array items should be unique, found duplicate: ${u}`);\n } else {\n format.push(u);\n }\n } else if (this.type instanceof XVArray) {\n const u = JSON.stringify(v[i]);\n if (format.includes(u)) {\n throw new Error(`Array items should be unique, found duplicate: ${u}`);\n } else {\n format.push(u);\n }\n } else if (this.type instanceof XVMap) {\n const u = JSON.stringify(Array.from(v.entries()));\n if (format.includes(u)) {\n throw new Error(`Array items should be unique, found duplicate: ${u}`);\n } else {\n format.push(u);\n }\n }\n }\n\n const uitems = new Set(v);\n if (uitems.size !== v.length) {\n throw new Error(`Array items should be unique, found duplicates`);\n }\n });\n }\n}\n\nexport default XVArray;"],"names":[],"mappings":"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"}
|
package/types/Boolean.mjs
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import XanvType from'../XanvType.mjs';class XVBoolean extends XanvType {
|
|
2
|
-
check(value) {
|
|
3
|
-
if (typeof value !== 'boolean') {
|
|
4
|
-
throw new Error(`Value should be a boolean, received ${typeof value}`);
|
|
5
|
-
}
|
|
6
|
-
}
|
|
7
|
-
}export{XVBoolean as default};//# sourceMappingURL=Boolean.mjs.map
|
package/types/Boolean.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Boolean.mjs","sources":["../../src/types/Boolean.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\n\nclass XVBoolean extends XanvType<boolean> {\n protected check(value: any): void {\n if (typeof value !== 'boolean') {\n throw new Error(`Value should be a boolean, received ${typeof value}`);\n }\n }\n}\n\nexport default XVBoolean;"],"names":[],"mappings":"sCAEA,MAAM,SAAU,SAAQ,QAAiB,CAAA;AAC5B,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,KAAK,CAAA,CAAE,CAAC;AACxE,QAAA;IACJ;AACF"}
|
package/types/Date.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Date.mjs","sources":["../../src/types/Date.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\n\nclass XVDate<T extends Date = Date> extends XanvType<T> {\n protected check(value: any): void {\n if (!(value instanceof Date) || isNaN(value.getTime())) {\n throw new Error(`Value should be a valid Date object, received ${typeof value}`);\n }\n }\n\n}\n\nexport default XVDate;"],"names":[],"mappings":"sCAEA,MAAM,MAA8B,SAAQ,QAAW,CAAA;AAC1C,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,CAAA,8CAAA,EAAiD,OAAO,KAAK,CAAA,CAAE,CAAC;AAClF,QAAA;IACJ;AAEF"}
|
package/types/Enum.mjs
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import XanvType from'../XanvType.mjs';class XVEnum extends XanvType {
|
|
2
|
-
constructor(values) {
|
|
3
|
-
super();
|
|
4
|
-
if (typeof values === 'object' && !Array.isArray(values) && values !== null) {
|
|
5
|
-
values = Object.values(values).map(v => {
|
|
6
|
-
if (typeof v !== 'string' && typeof v !== 'number') {
|
|
7
|
-
throw new Error("Enum values must be strings or numbers");
|
|
8
|
-
}
|
|
9
|
-
return v;
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
if (!Array.isArray(values) || values.length === 0) {
|
|
13
|
-
throw new Error("Enum values must be a non-empty array");
|
|
14
|
-
}
|
|
15
|
-
this.values = values;
|
|
16
|
-
}
|
|
17
|
-
check(value) {
|
|
18
|
-
if (typeof value !== 'string' && typeof value !== 'number') {
|
|
19
|
-
throw new Error(`Value should be a string or number, received ${typeof value}`);
|
|
20
|
-
}
|
|
21
|
-
if (!this.values.includes(value)) {
|
|
22
|
-
throw new Error(`Value should be one of the enum values: ${this.values.join(', ')}`);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}export{XVEnum as default};//# sourceMappingURL=Enum.mjs.map
|