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.
Files changed (127) hide show
  1. package/XanvType.cjs +62 -0
  2. package/XanvType.cjs.map +1 -0
  3. package/XanvType.d.ts +20 -14
  4. package/XanvType.js +60 -54
  5. package/XanvType.js.map +1 -1
  6. package/index.cjs +61 -0
  7. package/index.cjs.map +1 -0
  8. package/index.d.ts +25 -29
  9. package/index.js +41 -17
  10. package/index.js.map +1 -1
  11. package/package.json +4 -19
  12. package/readme.md +199 -199
  13. package/types/Any.cjs +16 -0
  14. package/types/Any.cjs.map +1 -0
  15. package/types/Any.d.ts +3 -3
  16. package/types/Any.js +14 -6
  17. package/types/Any.js.map +1 -1
  18. package/types/Array.cjs +66 -0
  19. package/types/Array.cjs.map +1 -0
  20. package/types/Array.d.ts +9 -9
  21. package/types/Array.js +64 -80
  22. package/types/Array.js.map +1 -1
  23. package/types/Boolean.cjs +15 -0
  24. package/types/Boolean.cjs.map +1 -0
  25. package/types/Boolean.d.ts +2 -2
  26. package/types/Boolean.js +13 -7
  27. package/types/Boolean.js.map +1 -1
  28. package/types/{Date.mjs → Date.cjs} +15 -7
  29. package/types/Date.cjs.map +1 -0
  30. package/types/Date.d.ts +2 -2
  31. package/types/Date.js +13 -7
  32. package/types/Date.js.map +1 -1
  33. package/types/Enum.cjs +28 -0
  34. package/types/Enum.cjs.map +1 -0
  35. package/types/Enum.d.ts +4 -5
  36. package/types/Enum.js +26 -25
  37. package/types/Enum.js.map +1 -1
  38. package/types/File.cjs +62 -0
  39. package/types/File.cjs.map +1 -0
  40. package/types/File.d.ts +8 -8
  41. package/types/File.js +60 -52
  42. package/types/File.js.map +1 -1
  43. package/types/Function.cjs +33 -0
  44. package/types/Function.cjs.map +1 -0
  45. package/types/Function.d.ts +15 -0
  46. package/types/Function.js +31 -0
  47. package/types/Function.js.map +1 -0
  48. package/types/Json.cjs +19 -0
  49. package/types/Json.cjs.map +1 -0
  50. package/types/Json.d.ts +3 -3
  51. package/types/Json.js +17 -11
  52. package/types/Json.js.map +1 -1
  53. package/types/Map.cjs +31 -0
  54. package/types/Map.cjs.map +1 -0
  55. package/types/Map.d.ts +6 -6
  56. package/types/Map.js +29 -23
  57. package/types/Map.js.map +1 -1
  58. package/types/{Number.mjs → Number.cjs} +77 -67
  59. package/types/Number.cjs.map +1 -0
  60. package/types/Number.d.ts +10 -10
  61. package/types/Number.js +75 -67
  62. package/types/Number.js.map +1 -1
  63. package/types/Object.cjs +22 -0
  64. package/types/Object.cjs.map +1 -0
  65. package/types/Object.d.ts +11 -5
  66. package/types/Object.js +20 -26
  67. package/types/Object.js.map +1 -1
  68. package/types/Promise.cjs +29 -0
  69. package/types/Promise.cjs.map +1 -0
  70. package/types/Promise.d.ts +11 -0
  71. package/types/Promise.js +27 -0
  72. package/types/Promise.js.map +1 -0
  73. package/types/{Record.mjs → Record.cjs} +31 -24
  74. package/types/Record.cjs.map +1 -0
  75. package/types/Record.d.ts +7 -7
  76. package/types/Record.js +29 -24
  77. package/types/Record.js.map +1 -1
  78. package/types/{Set.mjs → Set.cjs} +41 -33
  79. package/types/Set.cjs.map +1 -0
  80. package/types/Set.d.ts +6 -6
  81. package/types/Set.js +39 -33
  82. package/types/Set.js.map +1 -1
  83. package/types/{String.mjs → String.cjs} +95 -87
  84. package/types/String.cjs.map +1 -0
  85. package/types/String.d.ts +12 -12
  86. package/types/String.js +93 -87
  87. package/types/String.js.map +1 -1
  88. package/types/Tuple.cjs +31 -0
  89. package/types/Tuple.cjs.map +1 -0
  90. package/types/Tuple.d.ts +9 -5
  91. package/types/Tuple.js +29 -23
  92. package/types/Tuple.js.map +1 -1
  93. package/types/Union.cjs +34 -0
  94. package/types/Union.cjs.map +1 -0
  95. package/types/Union.d.ts +5 -4
  96. package/types/Union.js +32 -28
  97. package/types/Union.js.map +1 -1
  98. package/types.d.ts +29 -10
  99. package/XanvType.mjs +0 -54
  100. package/XanvType.mjs.map +0 -1
  101. package/index.mjs +0 -17
  102. package/index.mjs.map +0 -1
  103. package/types/Any.mjs +0 -6
  104. package/types/Any.mjs.map +0 -1
  105. package/types/Array.mjs +0 -80
  106. package/types/Array.mjs.map +0 -1
  107. package/types/Boolean.mjs +0 -7
  108. package/types/Boolean.mjs.map +0 -1
  109. package/types/Date.mjs.map +0 -1
  110. package/types/Enum.mjs +0 -25
  111. package/types/Enum.mjs.map +0 -1
  112. package/types/File.mjs +0 -52
  113. package/types/File.mjs.map +0 -1
  114. package/types/Json.mjs +0 -11
  115. package/types/Json.mjs.map +0 -1
  116. package/types/Map.mjs +0 -23
  117. package/types/Map.mjs.map +0 -1
  118. package/types/Number.mjs.map +0 -1
  119. package/types/Object.mjs +0 -26
  120. package/types/Object.mjs.map +0 -1
  121. package/types/Record.mjs.map +0 -1
  122. package/types/Set.mjs.map +0 -1
  123. package/types/String.mjs.map +0 -1
  124. package/types/Tuple.mjs +0 -23
  125. package/types/Tuple.mjs.map +0 -1
  126. package/types/Union.mjs +0 -28
  127. package/types/Union.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"String.js","sources":["../../src/types/String.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\n\nclass XVString<T extends string = string> extends XanvType<T> {\n\n constructor(length?: number) {\n super();\n if (length) {\n this.length(length);\n }\n }\n\n protected check(value: any): void {\n if (typeof value !== 'string') {\n throw new Error(`Value should be a string, received ${typeof value}`);\n }\n }\n\n length(length: number) {\n return this.set(\"length\", (v: any) => {\n const s = v as string;\n if (s.length !== length) {\n throw new Error(`String length should be ${length} characters, received ${s.length}`);\n }\n }, length)\n }\n\n min(length: number) {\n return this.set(\"min\", (v: any) => {\n const s = v as string;\n if (s.length < length) {\n throw new Error(`Minimum length should be ${length} characters, received ${s.length}`);\n }\n }, length);\n }\n\n max(length: number) {\n return this.set(\"max\", (v: any) => {\n const s = v as string;\n if (s.length > length) {\n throw new Error(`Maximum length should be ${length} characters, received ${s.length}`);\n }\n }, length);\n }\n\n email() {\n return this.set(\"email\", (v: any) => {\n const s = String(v);\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(s)) {\n throw new Error(`String should be a valid email address`);\n }\n });\n }\n\n uppercase() {\n return this.set(\"uppercase\", (v: any) => {\n const s = String(v);\n if (s !== s.toUpperCase()) {\n throw new Error(`String should be in uppercase`);\n }\n });\n }\n\n lowercase() {\n return this.set(\"lowercase\", (v: any) => {\n const s = String(v);\n if (s !== s.toLowerCase()) {\n throw new Error(`String should be in lowercase`);\n }\n });\n }\n\n number() {\n return this.set(\"number\", (v: any) => {\n const s = String(v);\n if (isNaN(Number(s))) {\n throw new Error(`String should be a valid number`);\n }\n });\n }\n\n date() {\n return this.set(\"date\", (v: any) => {\n const s = String(v);\n const date = new Date(s);\n if (isNaN(date.getTime())) {\n throw new Error(`String should be a valid date`);\n }\n });\n }\n\n base64() {\n return this.set(\"base64\", (v: any) => {\n const s = String(v);\n if (!/^[A-Za-z0-9+/]+={0,2}$/.test(s)) {\n throw new Error(`String should be a valid Base64 encoded string`);\n }\n });\n }\n\n}\n\nexport default XVString;\n\n"],"names":["XanvType"],"mappings":"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"}
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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"}
@@ -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 any[] = any[]> extends XanvType<T> {
5
- private type;
6
- constructor(type: XVInstanceType[]);
7
- protected check(value: any): any[];
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
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var XanvType=require('../XanvType.js');class XVTuple extends XanvType.default {
2
- constructor(type) {
3
- super();
4
- this.type = type;
5
- }
6
- check(value) {
7
- if (!Array.isArray(value)) {
8
- throw new Error(`Value should be a tuple, received ${typeof value}`);
9
- }
10
- if (value.length !== this.type.length) {
11
- throw new Error(`Tuple length should be ${this.type.length}, received ${value.length}`);
12
- }
13
- for (let i = 0; i < value.length; i++) {
14
- try {
15
- value[i] = this.type[i].parse(value[i]);
16
- }
17
- catch (error) {
18
- throw new Error(`Tuple item at index ${i} should be of type ${this.type[i].constructor.name}, received ${typeof value[i]}`);
19
- }
20
- }
21
- return value;
22
- }
23
- }exports.default=XVTuple;//# sourceMappingURL=Tuple.js.map
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
@@ -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 any[] = any[]> extends XanvType<T> {\n private type: XVInstanceType[];\n\n constructor(type: XVInstanceType[]) {\n super();\n this.type = type;\n }\n\n protected check(value: any) {\n if (!Array.isArray(value)) {\n throw new Error(`Value should be a tuple, received ${typeof value}`);\n }\n\n if (value.length !== this.type.length) {\n throw new Error(`Tuple length should be ${this.type.length}, received ${value.length}`);\n }\n\n for (let i = 0; i < value.length; i++) {\n try {\n value[i] = this.type[i].parse(value[i]);\n } catch (error: any) {\n throw new Error(`Tuple item at index ${i} should be of type ${this.type[i].constructor.name}, received ${typeof value[i]}`);\n }\n }\n return value;\n }\n\n}\n\nexport default XVTuple;"],"names":["XanvType"],"mappings":"6GAGA,MAAM,OAAiC,SAAQA,gBAAW,CAAA;AAGvD,IAAA,WAAA,CAAY,IAAsB,EAAA;AAC/B,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;IACnB;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,CAAA,kCAAA,EAAqC,OAAO,KAAK,CAAA,CAAE,CAAC;AACtE,QAAA;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACpC,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,IAAI,CAAC,IAAI,CAAC,MAAM,cAAc,KAAK,CAAC,MAAM,CAAA,CAAE,CAAC;AACzF,QAAA;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI;AACD,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzC,YAAA;AAAC,YAAA,OAAO,KAAU,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,CAAA,oBAAA,EAAuB,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAA,WAAA,EAAc,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;AAC7H,YAAA;AACH,QAAA;AACD,QAAA,OAAO,KAAK;IACf;AAEF"}
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;;;;"}
@@ -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 = any> extends XanvType<T> {
5
- private type;
6
- constructor(type: XVInstanceType[]);
7
- protected check(value: any): void;
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
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var XanvType=require('../XanvType.js');class XVUnion extends XanvType.default {
2
- constructor(type) {
3
- super();
4
- this.type = type;
5
- }
6
- check(value) {
7
- if (!Array.isArray(value)) {
8
- throw new Error(`Value should be an array, received ${typeof value}`);
9
- }
10
- if (value.length !== this.type.length) {
11
- throw new Error(`Union length should be ${this.type.length}, received ${value.length}`);
12
- }
13
- let match = false;
14
- for (const t of this.type) {
15
- try {
16
- value = t.parse(value);
17
- match = true;
18
- break; // If one type matches, we can stop checking
19
- }
20
- catch (e) {
21
- // Ignore the error and continue checking other types
22
- }
23
- }
24
- if (!match) {
25
- throw new Error(`Value does not match any of the union types: ${this.type.map(t => t.constructor.name).join(', ')}`);
26
- }
27
- }
28
- }exports.default=XVUnion;//# sourceMappingURL=Union.js.map
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
@@ -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 = any> extends XanvType<T> {\n private type: XVInstanceType[];\n\n constructor(type: XVInstanceType[]) {\n super();\n this.type = type;\n }\n\n protected check(value: any): void {\n if (!Array.isArray(value)) {\n throw new Error(`Value should be an array, received ${typeof value}`);\n }\n\n if (value.length !== this.type.length) {\n throw new Error(`Union length should be ${this.type.length}, received ${value.length}`);\n }\n\n let match = false;\n\n for (const t of this.type) {\n try {\n value = t.parse(value);\n match = true;\n break; // If one type matches, we can stop checking\n } catch (e) {\n // Ignore the error and continue checking other types\n }\n }\n\n if (!match) {\n throw new Error(`Value does not match any of the union types: ${this.type.map(t => t.constructor.name).join(', ')}`);\n }\n }\n\n}\n\nexport default XVUnion;"],"names":["XanvType"],"mappings":"6GAGA,MAAM,OAAiB,SAAQA,gBAAW,CAAA;AAGvC,IAAA,WAAA,CAAY,IAAsB,EAAA;AAC/B,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;IACnB;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,CAAA,mCAAA,EAAsC,OAAO,KAAK,CAAA,CAAE,CAAC;AACvE,QAAA;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACpC,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,IAAI,CAAC,IAAI,CAAC,MAAM,cAAc,KAAK,CAAC,MAAM,CAAA,CAAE,CAAC;AACzF,QAAA;QAED,IAAI,KAAK,GAAG,KAAK;AAEjB,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YACxB,IAAI;AACD,gBAAA,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;gBACtB,KAAK,GAAG,IAAI;AACZ,gBAAA,MAAM;AACR,YAAA;AAAC,YAAA,OAAO,CAAC,EAAE;;AAEX,YAAA;AACH,QAAA;QAED,IAAI,CAAC,KAAK,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,CAAA,6CAAA,EAAgD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;AACtH,QAAA;IACJ;AAEF"}
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 = XanvType | XVAny | XVArray | XVBoolean | XVDate | XVEnum | XVFile | XVMap | XVNumber | XVObject | XVRecord | XVSet | XVString | XVTuple | XVUnion;
18
- type XanvTransformCallback<T> = (value: T) => T;
19
- type XVCheckCallback<T> = (value: T) => void;
20
- type XVEnumValues = ((string | number)[]) | Record<string, string | number>;
21
- type XVObjectKeyType = string | number | symbol;
22
- type XVObjectValueType = XVInstanceType;
23
- type XVObjectType = Record<XVObjectKeyType, XVObjectValueType>;
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 { XVCheckCallback, XVEnumValues, XVInstanceType, XVObjectKeyType, XVObjectType, XVObjectValueType, XanvTransformCallback };
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
@@ -1,6 +0,0 @@
1
- import XanvType from'../XanvType.mjs';class XVAny extends XanvType {
2
- check() { }
3
- parse(value) {
4
- return super.parse(value);
5
- }
6
- }export{XVAny as default};//# sourceMappingURL=Any.mjs.map
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
@@ -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
@@ -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"}
@@ -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