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/File.js
CHANGED
|
@@ -1,52 +1,60 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
1
|
+
import XanvType from '../XanvType.js';
|
|
2
|
+
|
|
3
|
+
class XVFile extends XanvType {
|
|
4
|
+
constructor(size) {
|
|
5
|
+
super();
|
|
6
|
+
if (size !== undefined) {
|
|
7
|
+
this.size(size);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
check(value) {
|
|
11
|
+
if (!(value instanceof File || value instanceof Blob)) {
|
|
12
|
+
throw new Error(`Value should be a File or Blob, received ${typeof value}`);
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
size(size) {
|
|
17
|
+
return this.set("size", (v) => {
|
|
18
|
+
const file = v;
|
|
19
|
+
if (file.size !== size) {
|
|
20
|
+
throw new Error(`File size should be exactly ${size} bytes, received ${file.size} bytes`);
|
|
21
|
+
}
|
|
22
|
+
}, size);
|
|
23
|
+
}
|
|
24
|
+
minsize(size) {
|
|
25
|
+
return this.set("minsize", (v) => {
|
|
26
|
+
const file = v;
|
|
27
|
+
if (file.size < size) {
|
|
28
|
+
throw new Error(`File size should be at least ${size} bytes, received ${file.size} bytes`);
|
|
29
|
+
}
|
|
30
|
+
}, size);
|
|
31
|
+
}
|
|
32
|
+
maxsize(size) {
|
|
33
|
+
return this.set("maxsize", (v) => {
|
|
34
|
+
const file = v;
|
|
35
|
+
if (file.size > size) {
|
|
36
|
+
throw new Error(`File size should not exceed ${size} bytes, received ${file.size} bytes`);
|
|
37
|
+
}
|
|
38
|
+
}, size);
|
|
39
|
+
}
|
|
40
|
+
type(allowedTypes) {
|
|
41
|
+
return this.set("type", (v) => {
|
|
42
|
+
const file = v;
|
|
43
|
+
if (!allowedTypes.includes(file.type)) {
|
|
44
|
+
throw new Error(`File type ${file.type} is not allowed. Allowed types: ${allowedTypes.join(", ")}`);
|
|
45
|
+
}
|
|
46
|
+
}, allowedTypes);
|
|
47
|
+
}
|
|
48
|
+
extension(allowedExtensions) {
|
|
49
|
+
return this.set("extension", (v) => {
|
|
50
|
+
const file = v;
|
|
51
|
+
const ext = file.name.split(".").pop();
|
|
52
|
+
if (!ext || !allowedExtensions.includes(ext)) {
|
|
53
|
+
throw new Error(`File extension ${ext} is not allowed. Allowed extensions: ${allowedExtensions.join(", ")}`);
|
|
54
|
+
}
|
|
55
|
+
}, allowedExtensions);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export { XVFile as default };
|
|
60
|
+
//# sourceMappingURL=File.js.map
|
package/types/File.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"File.js","sources":["../../src/types/File.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\n\nclass XVFile
|
|
1
|
+
{"version":3,"file":"File.js","sources":["../../src/types/File.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\r\n\r\nclass XVFile extends XanvType<File | Blob, unknown> {\r\n constructor(size?: number) {\r\n super();\r\n if (size !== undefined) {\r\n this.size(size);\r\n }\r\n }\r\n\r\n protected check(value: unknown): File | Blob {\r\n if (!(value instanceof File || value instanceof Blob)) {\r\n throw new Error(\r\n `Value should be a File or Blob, received ${typeof value}`\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n size(size: number) {\r\n return this.set(\r\n \"size\",\r\n (v: unknown) => {\r\n const file = v as File | Blob;\r\n if (file.size !== size) {\r\n throw new Error(\r\n `File size should be exactly ${size} bytes, received ${file.size} bytes`\r\n );\r\n }\r\n },\r\n size\r\n );\r\n }\r\n\r\n minsize(size: number) {\r\n return this.set(\r\n \"minsize\",\r\n (v: unknown) => {\r\n const file = v as File | Blob;\r\n if (file.size < size) {\r\n throw new Error(\r\n `File size should be at least ${size} bytes, received ${file.size} bytes`\r\n );\r\n }\r\n },\r\n size\r\n );\r\n }\r\n\r\n maxsize(size: number) {\r\n return this.set(\r\n \"maxsize\",\r\n (v: unknown) => {\r\n const file = v as File | Blob;\r\n if (file.size > size) {\r\n throw new Error(\r\n `File size should not exceed ${size} bytes, received ${file.size} bytes`\r\n );\r\n }\r\n },\r\n size\r\n );\r\n }\r\n\r\n type(allowedTypes: string[]) {\r\n return this.set(\r\n \"type\",\r\n (v: unknown) => {\r\n const file = v as File | Blob;\r\n if (!allowedTypes.includes(file.type)) {\r\n throw new Error(\r\n `File type ${file.type} is not allowed. Allowed types: ${allowedTypes.join(\r\n \", \"\r\n )}`\r\n );\r\n }\r\n },\r\n allowedTypes\r\n );\r\n }\r\n\r\n extension(allowedExtensions: string[]) {\r\n return this.set(\r\n \"extension\",\r\n (v: unknown) => {\r\n const file: any = v as File | Blob;\r\n const ext = file.name.split(\".\").pop();\r\n if (!ext || !allowedExtensions.includes(ext)) {\r\n throw new Error(\r\n `File extension ${ext} is not allowed. Allowed extensions: ${allowedExtensions.join(\r\n \", \"\r\n )}`\r\n );\r\n }\r\n },\r\n allowedExtensions\r\n );\r\n }\r\n}\r\n\r\nexport default XVFile;\r\n"],"names":[],"mappings":";;AAEA,MAAM,MAAO,SAAQ,QAA8B,CAAA;AAChD,IAAA,WAAA,CAAY,IAAa,EAAA;AACtB,QAAA,KAAK,EAAE,CAAC;QACR,IAAI,IAAI,KAAK,SAAS,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClB,QAAA,CAAA;IACJ,CAAC;AAES,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,EAAE,KAAK,YAAY,IAAI,IAAI,KAAK,YAAY,IAAI,CAAC,EAAE;YACpD,MAAM,IAAI,KAAK,CACZ,CAAA,yCAAA,EAA4C,OAAO,KAAK,CAAA,CAAE,CAC5D,CAAC;AACJ,QAAA,CAAA;AACD,QAAA,OAAO,KAAK,CAAC;IAChB,CAAC;AAED,IAAA,IAAI,CAAC,IAAY,EAAA;QACd,OAAO,IAAI,CAAC,GAAG,CACZ,MAAM,EACN,CAAC,CAAU,KAAI;YACZ,MAAM,IAAI,GAAG,CAAgB,CAAC;AAC9B,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;gBACrB,MAAM,IAAI,KAAK,CACZ,CAAA,4BAAA,EAA+B,IAAI,CAAA,iBAAA,EAAoB,IAAI,CAAC,IAAI,CAAA,MAAA,CAAQ,CAC1E,CAAC;AACJ,YAAA,CAAA;QACJ,CAAC,EACD,IAAI,CACN,CAAC;IACL,CAAC;AAED,IAAA,OAAO,CAAC,IAAY,EAAA;QACjB,OAAO,IAAI,CAAC,GAAG,CACZ,SAAS,EACT,CAAC,CAAU,KAAI;YACZ,MAAM,IAAI,GAAG,CAAgB,CAAC;AAC9B,YAAA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE;gBACnB,MAAM,IAAI,KAAK,CACZ,CAAA,6BAAA,EAAgC,IAAI,CAAA,iBAAA,EAAoB,IAAI,CAAC,IAAI,CAAA,MAAA,CAAQ,CAC3E,CAAC;AACJ,YAAA,CAAA;QACJ,CAAC,EACD,IAAI,CACN,CAAC;IACL,CAAC;AAED,IAAA,OAAO,CAAC,IAAY,EAAA;QACjB,OAAO,IAAI,CAAC,GAAG,CACZ,SAAS,EACT,CAAC,CAAU,KAAI;YACZ,MAAM,IAAI,GAAG,CAAgB,CAAC;AAC9B,YAAA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE;gBACnB,MAAM,IAAI,KAAK,CACZ,CAAA,4BAAA,EAA+B,IAAI,CAAA,iBAAA,EAAoB,IAAI,CAAC,IAAI,CAAA,MAAA,CAAQ,CAC1E,CAAC;AACJ,YAAA,CAAA;QACJ,CAAC,EACD,IAAI,CACN,CAAC;IACL,CAAC;AAED,IAAA,IAAI,CAAC,YAAsB,EAAA;QACxB,OAAO,IAAI,CAAC,GAAG,CACZ,MAAM,EACN,CAAC,CAAU,KAAI;YACZ,MAAM,IAAI,GAAG,CAAgB,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACpC,gBAAA,MAAM,IAAI,KAAK,CACZ,CAAA,UAAA,EAAa,IAAI,CAAC,IAAI,CAAA,gCAAA,EAAmC,YAAY,CAAC,IAAI,CACvE,IAAI,CACN,CAAA,CAAE,CACL,CAAC;AACJ,YAAA,CAAA;QACJ,CAAC,EACD,YAAY,CACd,CAAC;IACL,CAAC;AAED,IAAA,SAAS,CAAC,iBAA2B,EAAA;QAClC,OAAO,IAAI,CAAC,GAAG,CACZ,WAAW,EACX,CAAC,CAAU,KAAI;YACZ,MAAM,IAAI,GAAQ,CAAgB,CAAC;AACnC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC3C,gBAAA,MAAM,IAAI,KAAK,CACZ,CAAA,eAAA,EAAkB,GAAG,CAAA,qCAAA,EAAwC,iBAAiB,CAAC,IAAI,CAChF,IAAI,CACN,CAAA,CAAE,CACL,CAAC;AACJ,YAAA,CAAA;QACJ,CAAC,EACD,iBAAiB,CACnB,CAAC;IACL,CAAC;AACH;;;;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var XanvType = require('../XanvType.cjs');
|
|
4
|
+
|
|
5
|
+
class XVFunction extends XanvType {
|
|
6
|
+
constructor(args, ret) {
|
|
7
|
+
super();
|
|
8
|
+
this._args = args;
|
|
9
|
+
this._return = ret;
|
|
10
|
+
}
|
|
11
|
+
check(value) {
|
|
12
|
+
if (typeof value !== "function") {
|
|
13
|
+
throw new Error(`Value should be a function, received ${typeof value}`);
|
|
14
|
+
}
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
parse(fn) {
|
|
18
|
+
super.parse(fn);
|
|
19
|
+
return ((...args) => {
|
|
20
|
+
// Validate each argument
|
|
21
|
+
this._args.forEach((argValidator, i) => {
|
|
22
|
+
argValidator.parse(args[i]);
|
|
23
|
+
});
|
|
24
|
+
const result = fn(...args);
|
|
25
|
+
// Validate return value
|
|
26
|
+
this._return.parse(result);
|
|
27
|
+
return result;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
module.exports = XVFunction;
|
|
33
|
+
//# sourceMappingURL=Function.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Function.cjs","sources":["../../src/types/Function.ts"],"sourcesContent":["import { Infer, XVInstanceType } from \"../types\";\r\nimport XanvType from \"../XanvType\";\r\n\r\ntype Func<A extends XVInstanceType[], R extends XVInstanceType> =\r\n (...args: { [K in keyof A]: Infer<A[K]> }) => Infer<R>;\r\n\r\nclass XVFunction<A extends XVInstanceType[], R extends XVInstanceType>\r\n extends XanvType<Func<A, R>, unknown> {\r\n\r\n private _args: A;\r\n private _return: R;\r\n\r\n constructor(args: A, ret: R) {\r\n super();\r\n this._args = args;\r\n this._return = ret;\r\n }\r\n\r\n protected check(value: any): Func<A, R> {\r\n if (typeof value !== \"function\") {\r\n throw new Error(`Value should be a function, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n\r\n parse(fn: any): Func<A, R> {\r\n super.parse(fn);\r\n\r\n return ((...args: any[]) => {\r\n // Validate each argument\r\n this._args.forEach((argValidator, i) => {\r\n argValidator.parse(args[i]);\r\n });\r\n\r\n const result = fn(...args);\r\n\r\n // Validate return value\r\n this._return.parse(result);\r\n\r\n return result;\r\n }) as Func<A, R>;\r\n }\r\n}\r\n\r\nexport default XVFunction;\r\n"],"names":[],"mappings":";;;;AAMA,MAAM,UACH,SAAQ,QAA6B,CAAA;IAKrC,WAAA,CAAY,IAAO,EAAE,GAAM,EAAA;AACxB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IACtB,CAAC;AAES,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,OAAO,KAAK,CAAA,CAAE,CAAC,CAAC;AAC1E,QAAA,CAAA;AACD,QAAA,OAAO,KAAK,CAAC;IAChB,CAAC;AAED,IAAA,KAAK,CAAC,EAAO,EAAA;AACV,QAAA,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAEhB,QAAA,QAAQ,CAAC,GAAG,IAAW,KAAI;;YAExB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,CAAC,KAAI;gBACpC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAA,CAAC,CAAC,CAAC;AAEH,YAAA,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;;AAG3B,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAE3B,YAAA,OAAO,MAAM,CAAC;AACjB,QAAA,CAAC,EAAgB;IACpB,CAAC;AACH;;;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { XVInstanceType, Infer } from '../types.js';
|
|
2
|
+
import XanvType from '../XanvType.js';
|
|
3
|
+
|
|
4
|
+
type Func<A extends XVInstanceType[], R extends XVInstanceType> = (...args: {
|
|
5
|
+
[K in keyof A]: Infer<A[K]>;
|
|
6
|
+
}) => Infer<R>;
|
|
7
|
+
declare class XVFunction<A extends XVInstanceType[], R extends XVInstanceType> extends XanvType<Func<A, R>, unknown> {
|
|
8
|
+
private _args;
|
|
9
|
+
private _return;
|
|
10
|
+
constructor(args: A, ret: R);
|
|
11
|
+
protected check(value: any): Func<A, R>;
|
|
12
|
+
parse(fn: any): Func<A, R>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { XVFunction as default };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import XanvType from '../XanvType.js';
|
|
2
|
+
|
|
3
|
+
class XVFunction extends XanvType {
|
|
4
|
+
constructor(args, ret) {
|
|
5
|
+
super();
|
|
6
|
+
this._args = args;
|
|
7
|
+
this._return = ret;
|
|
8
|
+
}
|
|
9
|
+
check(value) {
|
|
10
|
+
if (typeof value !== "function") {
|
|
11
|
+
throw new Error(`Value should be a function, received ${typeof value}`);
|
|
12
|
+
}
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
parse(fn) {
|
|
16
|
+
super.parse(fn);
|
|
17
|
+
return ((...args) => {
|
|
18
|
+
// Validate each argument
|
|
19
|
+
this._args.forEach((argValidator, i) => {
|
|
20
|
+
argValidator.parse(args[i]);
|
|
21
|
+
});
|
|
22
|
+
const result = fn(...args);
|
|
23
|
+
// Validate return value
|
|
24
|
+
this._return.parse(result);
|
|
25
|
+
return result;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { XVFunction as default };
|
|
31
|
+
//# sourceMappingURL=Function.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Function.js","sources":["../../src/types/Function.ts"],"sourcesContent":["import { Infer, XVInstanceType } from \"../types\";\r\nimport XanvType from \"../XanvType\";\r\n\r\ntype Func<A extends XVInstanceType[], R extends XVInstanceType> =\r\n (...args: { [K in keyof A]: Infer<A[K]> }) => Infer<R>;\r\n\r\nclass XVFunction<A extends XVInstanceType[], R extends XVInstanceType>\r\n extends XanvType<Func<A, R>, unknown> {\r\n\r\n private _args: A;\r\n private _return: R;\r\n\r\n constructor(args: A, ret: R) {\r\n super();\r\n this._args = args;\r\n this._return = ret;\r\n }\r\n\r\n protected check(value: any): Func<A, R> {\r\n if (typeof value !== \"function\") {\r\n throw new Error(`Value should be a function, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n\r\n parse(fn: any): Func<A, R> {\r\n super.parse(fn);\r\n\r\n return ((...args: any[]) => {\r\n // Validate each argument\r\n this._args.forEach((argValidator, i) => {\r\n argValidator.parse(args[i]);\r\n });\r\n\r\n const result = fn(...args);\r\n\r\n // Validate return value\r\n this._return.parse(result);\r\n\r\n return result;\r\n }) as Func<A, R>;\r\n }\r\n}\r\n\r\nexport default XVFunction;\r\n"],"names":[],"mappings":";;AAMA,MAAM,UACH,SAAQ,QAA6B,CAAA;IAKrC,WAAA,CAAY,IAAO,EAAE,GAAM,EAAA;AACxB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IACtB,CAAC;AAES,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,OAAO,KAAK,CAAA,CAAE,CAAC,CAAC;AAC1E,QAAA,CAAA;AACD,QAAA,OAAO,KAAK,CAAC;IAChB,CAAC;AAED,IAAA,KAAK,CAAC,EAAO,EAAA;AACV,QAAA,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAEhB,QAAA,QAAQ,CAAC,GAAG,IAAW,KAAI;;YAExB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,CAAC,KAAI;gBACpC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAA,CAAC,CAAC,CAAC;AAEH,YAAA,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;;AAG3B,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAE3B,YAAA,OAAO,MAAM,CAAC;AACjB,QAAA,CAAC,EAAgB;IACpB,CAAC;AACH;;;;"}
|
package/types/Json.cjs
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var XanvType = require('../XanvType.cjs');
|
|
4
|
+
|
|
5
|
+
class XVJson extends XanvType {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this.name = "XanvJson";
|
|
9
|
+
}
|
|
10
|
+
check(value) {
|
|
11
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
12
|
+
throw new Error("Value is not a valid JSON object");
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
module.exports = XVJson;
|
|
19
|
+
//# sourceMappingURL=Json.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Json.cjs","sources":["../../src/types/Json.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\r\n\r\nclass XVJson<T extends Record<string, any> = Record<string, any>> extends XanvType<T, unknown> {\r\n name: string = \"XanvJson\";\r\n\r\n protected check(value: unknown): T {\r\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\r\n throw new Error(\"Value is not a valid JSON object\");\r\n }\r\n return value as T;\r\n }\r\n}\r\n\r\nexport default XVJson;\r\n"],"names":[],"mappings":";;;;AAEA,MAAM,MAA4D,SAAQ,QAAoB,CAAA;AAA9F,IAAA,WAAA,GAAA;;QACG,IAAA,CAAA,IAAI,GAAW,UAAU,CAAC;IAQ7B,CAAC;AANY,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtE,YAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACtD,QAAA,CAAA;AACD,QAAA,OAAO,KAAU,CAAC;IACrB,CAAC;AACH;;;;"}
|
package/types/Json.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import XanvType from '../XanvType.js';
|
|
2
2
|
|
|
3
|
-
declare class XVJson extends XanvType<
|
|
4
|
-
name: string;
|
|
5
|
-
protected check(value:
|
|
3
|
+
declare class XVJson<T extends Record<string, any> = Record<string, any>> extends XanvType<T, unknown> {
|
|
4
|
+
name: string;
|
|
5
|
+
protected check(value: unknown): T;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
export { XVJson as default };
|
package/types/Json.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
1
|
+
import XanvType from '../XanvType.js';
|
|
2
|
+
|
|
3
|
+
class XVJson extends XanvType {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(...arguments);
|
|
6
|
+
this.name = "XanvJson";
|
|
7
|
+
}
|
|
8
|
+
check(value) {
|
|
9
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
10
|
+
throw new Error("Value is not a valid JSON object");
|
|
11
|
+
}
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { XVJson as default };
|
|
17
|
+
//# sourceMappingURL=Json.js.map
|
package/types/Json.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Json.js","sources":["../../src/types/Json.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\n\nclass XVJson extends XanvType<
|
|
1
|
+
{"version":3,"file":"Json.js","sources":["../../src/types/Json.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\r\n\r\nclass XVJson<T extends Record<string, any> = Record<string, any>> extends XanvType<T, unknown> {\r\n name: string = \"XanvJson\";\r\n\r\n protected check(value: unknown): T {\r\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\r\n throw new Error(\"Value is not a valid JSON object\");\r\n }\r\n return value as T;\r\n }\r\n}\r\n\r\nexport default XVJson;\r\n"],"names":[],"mappings":";;AAEA,MAAM,MAA4D,SAAQ,QAAoB,CAAA;AAA9F,IAAA,WAAA,GAAA;;QACG,IAAA,CAAA,IAAI,GAAW,UAAU,CAAC;IAQ7B,CAAC;AANY,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtE,YAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACtD,QAAA,CAAA;AACD,QAAA,OAAO,KAAU,CAAC;IACrB,CAAC;AACH;;;;"}
|
package/types/Map.cjs
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var XanvType = require('../XanvType.cjs');
|
|
4
|
+
|
|
5
|
+
class XVMap extends XanvType {
|
|
6
|
+
constructor(key, value) {
|
|
7
|
+
super();
|
|
8
|
+
this.keySchema = key;
|
|
9
|
+
this.valueSchema = value;
|
|
10
|
+
}
|
|
11
|
+
check(value) {
|
|
12
|
+
if (!(value instanceof Map)) {
|
|
13
|
+
throw new Error(`Value should be a Map, received ${typeof value}`);
|
|
14
|
+
}
|
|
15
|
+
const result = new Map();
|
|
16
|
+
for (const [k, v] of value.entries()) {
|
|
17
|
+
try {
|
|
18
|
+
const parsedKey = this.keySchema.parse(k);
|
|
19
|
+
const parsedValue = this.valueSchema.parse(v);
|
|
20
|
+
result.set(parsedKey, parsedValue);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
throw new Error(`Map entry should have key of type ${this.keySchema.constructor.name} and value of type ${this.valueSchema.constructor.name}, received key: ${typeof k}, value: ${typeof v}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
module.exports = XVMap;
|
|
31
|
+
//# sourceMappingURL=Map.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Map.cjs","sources":["../../src/types/Map.ts"],"sourcesContent":["import { Infer, XVInstanceType } from \"../types\";\r\nimport XanvType from \"../XanvType\";\r\n\r\nclass XVMap<K extends XVInstanceType = any, V extends XVInstanceType = any> extends XanvType<Map<Infer<K>, Infer<V>>, unknown> {\r\n private keySchema: K;\r\n private valueSchema: V;\r\n\r\n constructor(key: K, value: V) {\r\n super();\r\n this.keySchema = key;\r\n this.valueSchema = value;\r\n }\r\n\r\n protected check(value: unknown): Map<Infer<K>, Infer<V>> {\r\n if (!(value instanceof Map)) {\r\n throw new Error(`Value should be a Map, received ${typeof value}`);\r\n }\r\n\r\n const result = new Map<Infer<K>, Infer<V>>();\r\n\r\n for (const [k, v] of (value as any).entries()) {\r\n try {\r\n const parsedKey = this.keySchema.parse(k) as Infer<K>;\r\n const parsedValue = this.valueSchema.parse(v) as Infer<V>;\r\n result.set(parsedKey, parsedValue);\r\n } catch (err) {\r\n throw new Error(\r\n `Map entry should have key of type ${this.keySchema.constructor.name} and value of type ${this.valueSchema.constructor.name}, received key: ${typeof k}, value: ${typeof v}`\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVMap;\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,KAAsE,SAAQ,QAA0C,CAAA;IAI3H,WAAA,CAAY,GAAM,EAAE,KAAQ,EAAA;AACzB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC5B,CAAC;AAES,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,EAAE,KAAK,YAAY,GAAG,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,OAAO,KAAK,CAAA,CAAE,CAAC,CAAC;AACrE,QAAA,CAAA;AAED,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;QAE7C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAK,KAAa,CAAC,OAAO,EAAE,EAAE;YAC5C,IAAI;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAa,CAAC;gBACtD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAa,CAAC;AAC1D,gBAAA,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AACrC,YAAA,CAAA;AAAC,YAAA,OAAO,GAAG,EAAE;gBACX,MAAM,IAAI,KAAK,CACZ,CAAA,kCAAA,EAAqC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAA,mBAAA,EAAsB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAA,gBAAA,EAAmB,OAAO,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,CAAA,CAAE,CAC9K,CAAC;AACJ,YAAA,CAAA;AACH,QAAA,CAAA;AAED,QAAA,OAAO,MAAM,CAAC;IACjB,CAAC;AACH;;;;"}
|
package/types/Map.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
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 XVMap<K = any, V = any> extends XanvType<Map<K
|
|
5
|
-
private
|
|
6
|
-
private
|
|
7
|
-
constructor(key:
|
|
8
|
-
protected check(value:
|
|
4
|
+
declare class XVMap<K extends XVInstanceType = any, V extends XVInstanceType = any> extends XanvType<Map<Infer<K>, Infer<V>>, unknown> {
|
|
5
|
+
private keySchema;
|
|
6
|
+
private valueSchema;
|
|
7
|
+
constructor(key: K, value: V);
|
|
8
|
+
protected check(value: unknown): Map<Infer<K>, Infer<V>>;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
export { XVMap as default };
|
package/types/Map.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 XVMap extends XanvType {
|
|
4
|
+
constructor(key, value) {
|
|
5
|
+
super();
|
|
6
|
+
this.keySchema = key;
|
|
7
|
+
this.valueSchema = value;
|
|
8
|
+
}
|
|
9
|
+
check(value) {
|
|
10
|
+
if (!(value instanceof Map)) {
|
|
11
|
+
throw new Error(`Value should be a Map, received ${typeof value}`);
|
|
12
|
+
}
|
|
13
|
+
const result = new Map();
|
|
14
|
+
for (const [k, v] of value.entries()) {
|
|
15
|
+
try {
|
|
16
|
+
const parsedKey = this.keySchema.parse(k);
|
|
17
|
+
const parsedValue = this.valueSchema.parse(v);
|
|
18
|
+
result.set(parsedKey, parsedValue);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
throw new Error(`Map entry should have key of type ${this.keySchema.constructor.name} and value of type ${this.valueSchema.constructor.name}, received key: ${typeof k}, value: ${typeof v}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { XVMap as default };
|
|
29
|
+
//# sourceMappingURL=Map.js.map
|
package/types/Map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Map.js","sources":["../../src/types/Map.ts"],"sourcesContent":["import { XVInstanceType } from \"../types\";\nimport XanvType from \"../XanvType\";\n\nclass XVMap<K = any, V = any> extends XanvType<Map<K
|
|
1
|
+
{"version":3,"file":"Map.js","sources":["../../src/types/Map.ts"],"sourcesContent":["import { Infer, XVInstanceType } from \"../types\";\r\nimport XanvType from \"../XanvType\";\r\n\r\nclass XVMap<K extends XVInstanceType = any, V extends XVInstanceType = any> extends XanvType<Map<Infer<K>, Infer<V>>, unknown> {\r\n private keySchema: K;\r\n private valueSchema: V;\r\n\r\n constructor(key: K, value: V) {\r\n super();\r\n this.keySchema = key;\r\n this.valueSchema = value;\r\n }\r\n\r\n protected check(value: unknown): Map<Infer<K>, Infer<V>> {\r\n if (!(value instanceof Map)) {\r\n throw new Error(`Value should be a Map, received ${typeof value}`);\r\n }\r\n\r\n const result = new Map<Infer<K>, Infer<V>>();\r\n\r\n for (const [k, v] of (value as any).entries()) {\r\n try {\r\n const parsedKey = this.keySchema.parse(k) as Infer<K>;\r\n const parsedValue = this.valueSchema.parse(v) as Infer<V>;\r\n result.set(parsedKey, parsedValue);\r\n } catch (err) {\r\n throw new Error(\r\n `Map entry should have key of type ${this.keySchema.constructor.name} and value of type ${this.valueSchema.constructor.name}, received key: ${typeof k}, value: ${typeof v}`\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVMap;\r\n"],"names":[],"mappings":";;AAGA,MAAM,KAAsE,SAAQ,QAA0C,CAAA;IAI3H,WAAA,CAAY,GAAM,EAAE,KAAQ,EAAA;AACzB,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC5B,CAAC;AAES,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,EAAE,KAAK,YAAY,GAAG,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,OAAO,KAAK,CAAA,CAAE,CAAC,CAAC;AACrE,QAAA,CAAA;AAED,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;QAE7C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAK,KAAa,CAAC,OAAO,EAAE,EAAE;YAC5C,IAAI;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAa,CAAC;gBACtD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAa,CAAC;AAC1D,gBAAA,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AACrC,YAAA,CAAA;AAAC,YAAA,OAAO,GAAG,EAAE;gBACX,MAAM,IAAI,KAAK,CACZ,CAAA,kCAAA,EAAqC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAA,mBAAA,EAAsB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAA,gBAAA,EAAmB,OAAO,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,CAAA,CAAE,CAC9K,CAAC;AACJ,YAAA,CAAA;AACH,QAAA,CAAA;AAED,QAAA,OAAO,MAAM,CAAC;IACjB,CAAC;AACH;;;;"}
|
|
@@ -1,67 +1,77 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var XanvType = require('../XanvType.cjs');
|
|
4
|
+
|
|
5
|
+
class XVNumber extends XanvType {
|
|
6
|
+
constructor(length) {
|
|
7
|
+
super();
|
|
8
|
+
if (length !== undefined) {
|
|
9
|
+
this.length(length);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
check(value) {
|
|
13
|
+
if (typeof value !== "number") {
|
|
14
|
+
throw new Error(`Value should be a number, received ${typeof value}`);
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
length(value) {
|
|
19
|
+
return this.set("length", (v) => {
|
|
20
|
+
const n = v;
|
|
21
|
+
if (n.toString().length !== value) {
|
|
22
|
+
throw new Error(`Number length should be ${value} digits, received ${n.toString().length}`);
|
|
23
|
+
}
|
|
24
|
+
}, value);
|
|
25
|
+
}
|
|
26
|
+
min(value) {
|
|
27
|
+
return this.set("min", (v) => {
|
|
28
|
+
const n = v;
|
|
29
|
+
if (n < value) {
|
|
30
|
+
throw new Error(`Minimum value should be ${value}, received ${n}`);
|
|
31
|
+
}
|
|
32
|
+
}, value);
|
|
33
|
+
}
|
|
34
|
+
max(value) {
|
|
35
|
+
return this.set("max", (v) => {
|
|
36
|
+
const n = v;
|
|
37
|
+
if (n > value) {
|
|
38
|
+
throw new Error(`Maximum value should be ${value}, received ${n}`);
|
|
39
|
+
}
|
|
40
|
+
}, value);
|
|
41
|
+
}
|
|
42
|
+
positive() {
|
|
43
|
+
return this.set("positive", (v) => {
|
|
44
|
+
const n = v;
|
|
45
|
+
if (n < 0) {
|
|
46
|
+
throw new Error(`Value should be positive, received ${n}`);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
negative() {
|
|
51
|
+
return this.set("negative", (v) => {
|
|
52
|
+
const n = v;
|
|
53
|
+
if (n > 0) {
|
|
54
|
+
throw new Error(`Value should be negative, received ${n}`);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
integer() {
|
|
59
|
+
return this.set("integer", (v) => {
|
|
60
|
+
const n = v;
|
|
61
|
+
if (!Number.isInteger(n)) {
|
|
62
|
+
throw new Error(`Value should be an integer, received ${n}`);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
float() {
|
|
67
|
+
return this.set("float", (v) => {
|
|
68
|
+
const n = v;
|
|
69
|
+
if (!Number.isFinite(n) || Number.isInteger(n)) {
|
|
70
|
+
throw new Error(`Value should be a float, received ${n}`);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
module.exports = XVNumber;
|
|
77
|
+
//# sourceMappingURL=Number.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Number.cjs","sources":["../../src/types/Number.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\r\n\r\nclass XVNumber<T extends number = number> extends XanvType<T> {\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: any): T {\r\n if (typeof value !== \"number\") {\r\n throw new Error(`Value should be a number, received ${typeof value}`);\r\n }\r\n return value as T\r\n }\r\n\r\n length(value: number) {\r\n return this.set(\"length\", (v: unknown) => {\r\n const n = v as number;\r\n if (n.toString().length !== value) {\r\n throw new Error(\r\n `Number length should be ${value} digits, received ${n.toString().length}`\r\n );\r\n }\r\n }, value);\r\n }\r\n\r\n min(value: number) {\r\n return this.set(\"min\", (v: unknown) => {\r\n const n = v as number;\r\n if (n < value) {\r\n throw new Error(`Minimum value should be ${value}, received ${n}`);\r\n }\r\n }, value);\r\n }\r\n\r\n max(value: number) {\r\n return this.set(\"max\", (v: unknown) => {\r\n const n = v as number;\r\n if (n > value) {\r\n throw new Error(`Maximum value should be ${value}, received ${n}`);\r\n }\r\n }, value);\r\n }\r\n\r\n positive() {\r\n return this.set(\"positive\", (v: unknown) => {\r\n const n = v as number;\r\n if (n < 0) {\r\n throw new Error(`Value should be positive, received ${n}`);\r\n }\r\n });\r\n }\r\n\r\n negative() {\r\n return this.set(\"negative\", (v: unknown) => {\r\n const n = v as number;\r\n if (n > 0) {\r\n throw new Error(`Value should be negative, received ${n}`);\r\n }\r\n });\r\n }\r\n\r\n integer() {\r\n return this.set(\"integer\", (v: unknown) => {\r\n const n = v as number;\r\n if (!Number.isInteger(n)) {\r\n throw new Error(`Value should be an integer, received ${n}`);\r\n }\r\n });\r\n }\r\n\r\n float() {\r\n return this.set(\"float\", (v: unknown) => {\r\n const n = v as number;\r\n if (!Number.isFinite(n) || Number.isInteger(n)) {\r\n throw new Error(`Value should be a float, received ${n}`);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default XVNumber;\r\n"],"names":[],"mappings":"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"}
|