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
package/types/Array.js CHANGED
@@ -1,80 +1,64 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var Map=require('./Map.js'),Object$1=require('./Object.js'),Record=require('./Record.js'),XanvType=require('../XanvType.js');class XVArray extends XanvType.default {
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 Object$1.default || this.type instanceof Record.default) {
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 Map.default) {
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
- }exports.default=XVArray;//# sourceMappingURL=Array.js.map
1
+ import XanvType from '../XanvType.js';
2
+
3
+ class XVArray extends XanvType {
4
+ constructor(type, length) {
5
+ super();
6
+ this.type = type;
7
+ this.length = length;
8
+ }
9
+ check(value) {
10
+ if (!Array.isArray(value)) {
11
+ throw new Error(`Value should be an array, received ${typeof value}`);
12
+ }
13
+ if (this.length !== undefined && value.length !== this.length) {
14
+ throw new Error(`Array length should be ${this.length}, received ${value.length}`);
15
+ }
16
+ const result = [];
17
+ if (this.type) {
18
+ for (let i = 0; i < value.length; i++) {
19
+ try {
20
+ result[i] = this.type.parse(value[i]);
21
+ }
22
+ catch (err) {
23
+ throw new Error(`Array item at index ${i} should be of type ${this.type.constructor.name}, received ${typeof value[i]}: ${err.message}`);
24
+ }
25
+ }
26
+ }
27
+ else {
28
+ result.push(...value);
29
+ }
30
+ return result;
31
+ }
32
+ min(length) {
33
+ return this.set("min", (v) => {
34
+ const arr = v;
35
+ if (arr.length < length) {
36
+ throw new Error(`Array length should be at least ${length} items, received ${arr.length}`);
37
+ }
38
+ }, length);
39
+ }
40
+ max(length) {
41
+ return this.set("max", (v) => {
42
+ const arr = v;
43
+ if (arr.length > length) {
44
+ throw new Error(`Array length should not exceed ${length} items, received ${arr.length}`);
45
+ }
46
+ }, length);
47
+ }
48
+ unique() {
49
+ return this.set("unique", (v) => {
50
+ const arr = v;
51
+ const seen = new Set();
52
+ for (const item of arr) {
53
+ const key = JSON.stringify(item);
54
+ if (seen.has(key)) {
55
+ throw new Error(`Array items should be unique, found duplicate: ${key}`);
56
+ }
57
+ seen.add(key);
58
+ }
59
+ });
60
+ }
61
+ }
62
+
63
+ export { XVArray as default };
64
+ //# sourceMappingURL=Array.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Array.js","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":["XanvType","XVObject","XVRecord","XVMap"],"mappings":"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"}
1
+ {"version":3,"file":"Array.js","sources":["../../src/types/Array.ts"],"sourcesContent":["import XVMap from \"./Map\";\r\nimport XVObject from \"./Object\";\r\nimport XVRecord from \"./Record\";\r\nimport XanvType from \"../XanvType\";\r\nimport { XVInstanceType, Infer } from \"../types\";\r\n\r\nclass XVArray<T extends XVInstanceType = XVInstanceType> extends XanvType<Infer<T>[]> {\r\n private type?: T;\r\n private length?: number;\r\n\r\n constructor(type?: T, length?: number) {\r\n super();\r\n this.type = type;\r\n this.length = length;\r\n }\r\n\r\n protected check(value: unknown): Infer<T>[] {\r\n if (!Array.isArray(value)) {\r\n throw new Error(`Value should be an array, received ${typeof value}`);\r\n }\r\n\r\n if (this.length !== undefined && value.length !== this.length) {\r\n throw new Error(`Array length should be ${this.length}, received ${value.length}`);\r\n }\r\n\r\n const result: Infer<T>[] = [];\r\n\r\n if (this.type) {\r\n for (let i = 0; i < value.length; i++) {\r\n try {\r\n result[i] = this.type.parse(value[i]) as Infer<T>;\r\n } catch (err: any) {\r\n throw new Error(\r\n `Array item at index ${i} should be of type ${this.type.constructor.name}, received ${typeof value[i]}: ${err.message}`\r\n );\r\n }\r\n }\r\n } else {\r\n result.push(...(value as any[]));\r\n }\r\n\r\n return result;\r\n }\r\n\r\n min(length: number) {\r\n return this.set(\"min\", (v: unknown) => {\r\n const arr = v as Infer<T>[];\r\n if (arr.length < length) {\r\n throw new Error(`Array length should be at least ${length} items, received ${arr.length}`);\r\n }\r\n }, length);\r\n }\r\n\r\n\r\n max(length: number) {\r\n return this.set(\"max\", (v: unknown) => {\r\n const arr = v as Infer<T>[];\r\n if (arr.length > length) {\r\n throw new Error(`Array length should not exceed ${length} items, received ${arr.length}`);\r\n }\r\n }, length);\r\n }\r\n\r\n unique() {\r\n return this.set(\"unique\", (v: unknown) => {\r\n const arr = v as Infer<T>[];\r\n const seen = new Set<string>();\r\n\r\n for (const item of arr) {\r\n const key = JSON.stringify(item);\r\n if (seen.has(key)) {\r\n throw new Error(`Array items should be unique, found duplicate: ${key}`);\r\n }\r\n seen.add(key);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default XVArray;\r\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ var XanvType = require('../XanvType.cjs');
4
+
5
+ class XVBoolean extends XanvType {
6
+ check(value) {
7
+ if (typeof value !== "boolean") {
8
+ throw new Error(`Value should be a boolean, received ${typeof value}`);
9
+ }
10
+ return value;
11
+ }
12
+ }
13
+
14
+ module.exports = XVBoolean;
15
+ //# sourceMappingURL=Boolean.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Boolean.cjs","sources":["../../src/types/Boolean.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\r\n\r\nclass XVBoolean extends XanvType<boolean, unknown> {\r\n protected check(value: unknown): boolean {\r\n if (typeof value !== \"boolean\") {\r\n throw new Error(`Value should be a boolean, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n}\r\n\r\nexport default XVBoolean;\r\n"],"names":[],"mappings":";;;;AAEA,MAAM,SAAU,SAAQ,QAA0B,CAAA;AACrC,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,KAAK,CAAA,CAAE,CAAC,CAAC;AACzE,QAAA,CAAA;AACD,QAAA,OAAO,KAAK,CAAC;IAChB,CAAC;AACH;;;;"}
@@ -1,7 +1,7 @@
1
1
  import XanvType from '../XanvType.js';
2
2
 
3
- declare class XVBoolean extends XanvType<boolean> {
4
- protected check(value: any): void;
3
+ declare class XVBoolean extends XanvType<boolean, unknown> {
4
+ protected check(value: unknown): boolean;
5
5
  }
6
6
 
7
7
  export { XVBoolean as default };
package/types/Boolean.js CHANGED
@@ -1,7 +1,13 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var XanvType=require('../XanvType.js');class XVBoolean extends XanvType.default {
2
- check(value) {
3
- if (typeof value !== 'boolean') {
4
- throw new Error(`Value should be a boolean, received ${typeof value}`);
5
- }
6
- }
7
- }exports.default=XVBoolean;//# sourceMappingURL=Boolean.js.map
1
+ import XanvType from '../XanvType.js';
2
+
3
+ class XVBoolean extends XanvType {
4
+ check(value) {
5
+ if (typeof value !== "boolean") {
6
+ throw new Error(`Value should be a boolean, received ${typeof value}`);
7
+ }
8
+ return value;
9
+ }
10
+ }
11
+
12
+ export { XVBoolean as default };
13
+ //# sourceMappingURL=Boolean.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Boolean.js","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":["XanvType"],"mappings":"6GAEA,MAAM,SAAU,SAAQA,gBAAiB,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
+ {"version":3,"file":"Boolean.js","sources":["../../src/types/Boolean.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\r\n\r\nclass XVBoolean extends XanvType<boolean, unknown> {\r\n protected check(value: unknown): boolean {\r\n if (typeof value !== \"boolean\") {\r\n throw new Error(`Value should be a boolean, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n}\r\n\r\nexport default XVBoolean;\r\n"],"names":[],"mappings":";;AAEA,MAAM,SAAU,SAAQ,QAA0B,CAAA;AACrC,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,KAAK,CAAA,CAAE,CAAC,CAAC;AACzE,QAAA,CAAA;AACD,QAAA,OAAO,KAAK,CAAC;IAChB,CAAC;AACH;;;;"}
@@ -1,7 +1,15 @@
1
- import XanvType from'../XanvType.mjs';class XVDate extends XanvType {
2
- check(value) {
3
- if (!(value instanceof Date) || isNaN(value.getTime())) {
4
- throw new Error(`Value should be a valid Date object, received ${typeof value}`);
5
- }
6
- }
7
- }export{XVDate as default};//# sourceMappingURL=Date.mjs.map
1
+ 'use strict';
2
+
3
+ var XanvType = require('../XanvType.cjs');
4
+
5
+ class XVDate extends XanvType {
6
+ check(value) {
7
+ if (!(value instanceof Date) || isNaN(value.getTime())) {
8
+ throw new Error(`Value should be a valid Date object, received ${typeof value}`);
9
+ }
10
+ return value;
11
+ }
12
+ }
13
+
14
+ module.exports = XVDate;
15
+ //# sourceMappingURL=Date.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Date.cjs","sources":["../../src/types/Date.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\r\n\r\nclass XVDate extends XanvType<Date, unknown> {\r\n protected check(value: unknown): Date {\r\n if (!(value instanceof Date) || isNaN(value.getTime())) {\r\n throw new Error(`Value should be a valid Date object, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n}\r\n\r\nexport default XVDate;\r\n"],"names":[],"mappings":";;;;AAEA,MAAM,MAAO,SAAQ,QAAuB,CAAA;AAC/B,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,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,CAAC;AACnF,QAAA,CAAA;AACD,QAAA,OAAO,KAAK,CAAC;IAChB,CAAC;AACH;;;;"}
package/types/Date.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import XanvType from '../XanvType.js';
2
2
 
3
- declare class XVDate<T extends Date = Date> extends XanvType<T> {
4
- protected check(value: any): void;
3
+ declare class XVDate extends XanvType<Date, unknown> {
4
+ protected check(value: unknown): Date;
5
5
  }
6
6
 
7
7
  export { XVDate as default };
package/types/Date.js CHANGED
@@ -1,7 +1,13 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var XanvType=require('../XanvType.js');class XVDate extends XanvType.default {
2
- check(value) {
3
- if (!(value instanceof Date) || isNaN(value.getTime())) {
4
- throw new Error(`Value should be a valid Date object, received ${typeof value}`);
5
- }
6
- }
7
- }exports.default=XVDate;//# sourceMappingURL=Date.js.map
1
+ import XanvType from '../XanvType.js';
2
+
3
+ class XVDate extends XanvType {
4
+ check(value) {
5
+ if (!(value instanceof Date) || isNaN(value.getTime())) {
6
+ throw new Error(`Value should be a valid Date object, received ${typeof value}`);
7
+ }
8
+ return value;
9
+ }
10
+ }
11
+
12
+ export { XVDate as default };
13
+ //# sourceMappingURL=Date.js.map
package/types/Date.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Date.js","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":["XanvType"],"mappings":"6GAEA,MAAM,MAA8B,SAAQA,gBAAW,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"}
1
+ {"version":3,"file":"Date.js","sources":["../../src/types/Date.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\r\n\r\nclass XVDate extends XanvType<Date, unknown> {\r\n protected check(value: unknown): Date {\r\n if (!(value instanceof Date) || isNaN(value.getTime())) {\r\n throw new Error(`Value should be a valid Date object, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n}\r\n\r\nexport default XVDate;\r\n"],"names":[],"mappings":";;AAEA,MAAM,MAAO,SAAQ,QAAuB,CAAA;AAC/B,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,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,CAAC;AACnF,QAAA,CAAA;AACD,QAAA,OAAO,KAAK,CAAC;IAChB,CAAC;AACH;;;;"}
package/types/Enum.cjs ADDED
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ var XanvType = require('../XanvType.cjs');
4
+
5
+ class XVEnum extends XanvType // ⚡ Use union of array elements
6
+ {
7
+ constructor(values) {
8
+ super();
9
+ if (!Array.isArray(values) || values.length === 0) {
10
+ throw new Error("Enum values must be a non-empty array");
11
+ }
12
+ for (const v of values) {
13
+ if (typeof v !== "string" && typeof v !== "number") {
14
+ throw new Error("Enum values must be strings or numbers");
15
+ }
16
+ }
17
+ this.values = values;
18
+ }
19
+ check(value) {
20
+ if (!this.values.includes(value)) {
21
+ throw new Error(`Value should be one of: ${this.values.join(", ")}`);
22
+ }
23
+ return value;
24
+ }
25
+ }
26
+
27
+ module.exports = XVEnum;
28
+ //# sourceMappingURL=Enum.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Enum.cjs","sources":["../../src/types/Enum.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\r\n\r\nclass XVEnum<T extends readonly (string | number)[]>\r\n extends XanvType<T[number]> // ⚡ Use union of array elements\r\n{\r\n private readonly values: T;\r\n\r\n constructor(values: T) {\r\n super();\r\n\r\n if (!Array.isArray(values) || values.length === 0) {\r\n throw new Error(\"Enum values must be a non-empty array\");\r\n }\r\n\r\n for (const v of values) {\r\n if (typeof v !== \"string\" && typeof v !== \"number\") {\r\n throw new Error(\"Enum values must be strings or numbers\");\r\n }\r\n }\r\n\r\n this.values = values;\r\n }\r\n\r\n protected check(value: any): T[number] {\r\n if (!this.values.includes(value)) {\r\n throw new Error(\r\n `Value should be one of: ${this.values.join(\", \")}`\r\n );\r\n }\r\n return value as T[number];\r\n }\r\n}\r\n\r\nexport default XVEnum;\r\n"],"names":[],"mappings":";;;;AAEA,MAAM,MACH,SAAQ,QAAmB;;AAI3B,IAAA,WAAA,CAAY,MAAS,EAAA;AAClB,QAAA,KAAK,EAAE,CAAC;AAER,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAChD,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC3D,QAAA,CAAA;AAED,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;YACrB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACjD,gBAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAC5D,YAAA,CAAA;AACH,QAAA,CAAA;AAED,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACxB,CAAC;AAES,IAAA,KAAK,CAAC,KAAU,EAAA;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CACZ,CAAA,wBAAA,EAA2B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CACrD,CAAC;AACJ,QAAA,CAAA;AACD,QAAA,OAAO,KAAkB,CAAC;IAC7B,CAAC;AACH;;;;"}
package/types/Enum.d.ts CHANGED
@@ -1,10 +1,9 @@
1
1
  import XanvType from '../XanvType.js';
2
- import { XVEnumValues } from '../types.js';
3
2
 
4
- declare class XVEnum<T extends string | number = string | number> extends XanvType<T> {
5
- private values;
6
- constructor(values: XVEnumValues);
7
- protected check(value: any): void;
3
+ declare class XVEnum<T extends readonly (string | number)[]> extends XanvType<T[number]> {
4
+ private readonly values;
5
+ constructor(values: T);
6
+ protected check(value: any): T[number];
8
7
  }
9
8
 
10
9
  export { XVEnum as default };
package/types/Enum.js CHANGED
@@ -1,25 +1,26 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var XanvType=require('../XanvType.js');class XVEnum extends XanvType.default {
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
- }exports.default=XVEnum;//# sourceMappingURL=Enum.js.map
1
+ import XanvType from '../XanvType.js';
2
+
3
+ class XVEnum extends XanvType // ⚡ Use union of array elements
4
+ {
5
+ constructor(values) {
6
+ super();
7
+ if (!Array.isArray(values) || values.length === 0) {
8
+ throw new Error("Enum values must be a non-empty array");
9
+ }
10
+ for (const v of values) {
11
+ if (typeof v !== "string" && typeof v !== "number") {
12
+ throw new Error("Enum values must be strings or numbers");
13
+ }
14
+ }
15
+ this.values = values;
16
+ }
17
+ check(value) {
18
+ if (!this.values.includes(value)) {
19
+ throw new Error(`Value should be one of: ${this.values.join(", ")}`);
20
+ }
21
+ return value;
22
+ }
23
+ }
24
+
25
+ export { XVEnum as default };
26
+ //# sourceMappingURL=Enum.js.map
package/types/Enum.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Enum.js","sources":["../../src/types/Enum.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\nimport { XVEnumValues } from \"../types\";\n\nclass XVEnum<T extends string | number = string | number> extends XanvType<T> {\n private values: (string | number)[];\n\n constructor(values: XVEnumValues) {\n super();\n if (typeof values === 'object' && !Array.isArray(values) && values !== null) {\n values = Object.values(values).map(v => {\n if (typeof v !== 'string' && typeof v !== 'number') {\n throw new Error(\"Enum values must be strings or numbers\");\n }\n return v;\n });\n }\n if (!Array.isArray(values) || values.length === 0) {\n throw new Error(\"Enum values must be a non-empty array\");\n }\n this.values = values;\n }\n\n protected check(value: any): void {\n if (typeof value !== 'string' && typeof value !== 'number') {\n throw new Error(`Value should be a string or number, received ${typeof value}`);\n }\n\n if (!this.values.includes(value)) {\n throw new Error(`Value should be one of the enum values: ${this.values.join(', ')}`);\n }\n }\n\n}\n\nexport default XVEnum;"],"names":["XanvType"],"mappings":"6GAGA,MAAM,MAAoD,SAAQA,gBAAW,CAAA;AAG1E,IAAA,WAAA,CAAY,MAAoB,EAAA;AAC7B,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,IAAI,EAAE;AAC1E,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG;gBACpC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACjD,oBAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;AAC3D,gBAAA;AACD,gBAAA,OAAO,CAAC;AACX,YAAA,CAAC,CAAC;AACJ,QAAA;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAChD,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;AAC1D,QAAA;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACvB;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACzD,MAAM,IAAI,KAAK,CAAC,CAAA,6CAAA,EAAgD,OAAO,KAAK,CAAA,CAAE,CAAC;AACjF,QAAA;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,wCAAA,EAA2C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;AACtF,QAAA;IACJ;AAEF"}
1
+ {"version":3,"file":"Enum.js","sources":["../../src/types/Enum.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\r\n\r\nclass XVEnum<T extends readonly (string | number)[]>\r\n extends XanvType<T[number]> // ⚡ Use union of array elements\r\n{\r\n private readonly values: T;\r\n\r\n constructor(values: T) {\r\n super();\r\n\r\n if (!Array.isArray(values) || values.length === 0) {\r\n throw new Error(\"Enum values must be a non-empty array\");\r\n }\r\n\r\n for (const v of values) {\r\n if (typeof v !== \"string\" && typeof v !== \"number\") {\r\n throw new Error(\"Enum values must be strings or numbers\");\r\n }\r\n }\r\n\r\n this.values = values;\r\n }\r\n\r\n protected check(value: any): T[number] {\r\n if (!this.values.includes(value)) {\r\n throw new Error(\r\n `Value should be one of: ${this.values.join(\", \")}`\r\n );\r\n }\r\n return value as T[number];\r\n }\r\n}\r\n\r\nexport default XVEnum;\r\n"],"names":[],"mappings":";;AAEA,MAAM,MACH,SAAQ,QAAmB;;AAI3B,IAAA,WAAA,CAAY,MAAS,EAAA;AAClB,QAAA,KAAK,EAAE,CAAC;AAER,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAChD,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC3D,QAAA,CAAA;AAED,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;YACrB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACjD,gBAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAC5D,YAAA,CAAA;AACH,QAAA,CAAA;AAED,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACxB,CAAC;AAES,IAAA,KAAK,CAAC,KAAU,EAAA;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CACZ,CAAA,wBAAA,EAA2B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CACrD,CAAC;AACJ,QAAA,CAAA;AACD,QAAA,OAAO,KAAkB,CAAC;IAC7B,CAAC;AACH;;;;"}
package/types/File.cjs ADDED
@@ -0,0 +1,62 @@
1
+ 'use strict';
2
+
3
+ var XanvType = require('../XanvType.cjs');
4
+
5
+ class XVFile extends XanvType {
6
+ constructor(size) {
7
+ super();
8
+ if (size !== undefined) {
9
+ this.size(size);
10
+ }
11
+ }
12
+ check(value) {
13
+ if (!(value instanceof File || value instanceof Blob)) {
14
+ throw new Error(`Value should be a File or Blob, received ${typeof value}`);
15
+ }
16
+ return value;
17
+ }
18
+ size(size) {
19
+ return this.set("size", (v) => {
20
+ const file = v;
21
+ if (file.size !== size) {
22
+ throw new Error(`File size should be exactly ${size} bytes, received ${file.size} bytes`);
23
+ }
24
+ }, size);
25
+ }
26
+ minsize(size) {
27
+ return this.set("minsize", (v) => {
28
+ const file = v;
29
+ if (file.size < size) {
30
+ throw new Error(`File size should be at least ${size} bytes, received ${file.size} bytes`);
31
+ }
32
+ }, size);
33
+ }
34
+ maxsize(size) {
35
+ return this.set("maxsize", (v) => {
36
+ const file = v;
37
+ if (file.size > size) {
38
+ throw new Error(`File size should not exceed ${size} bytes, received ${file.size} bytes`);
39
+ }
40
+ }, size);
41
+ }
42
+ type(allowedTypes) {
43
+ return this.set("type", (v) => {
44
+ const file = v;
45
+ if (!allowedTypes.includes(file.type)) {
46
+ throw new Error(`File type ${file.type} is not allowed. Allowed types: ${allowedTypes.join(", ")}`);
47
+ }
48
+ }, allowedTypes);
49
+ }
50
+ extension(allowedExtensions) {
51
+ return this.set("extension", (v) => {
52
+ const file = v;
53
+ const ext = file.name.split(".").pop();
54
+ if (!ext || !allowedExtensions.includes(ext)) {
55
+ throw new Error(`File extension ${ext} is not allowed. Allowed extensions: ${allowedExtensions.join(", ")}`);
56
+ }
57
+ }, allowedExtensions);
58
+ }
59
+ }
60
+
61
+ module.exports = XVFile;
62
+ //# sourceMappingURL=File.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"File.cjs","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":"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"}
package/types/File.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import XanvType from '../XanvType.js';
2
2
 
3
- declare class XVFile<T extends File | Blob = File | Blob> extends XanvType<T> {
4
- constructor(size?: number);
5
- protected check(value: any): void;
6
- size(size: number): this;
7
- minsize(size: number): this;
8
- maxsize(size: number): this;
9
- type(allowedTypes: string[]): this;
10
- extension(allowedExtensions: string[]): this;
3
+ declare class XVFile extends XanvType<File | Blob, unknown> {
4
+ constructor(size?: number);
5
+ protected check(value: unknown): File | Blob;
6
+ size(size: number): this;
7
+ minsize(size: number): this;
8
+ maxsize(size: number): this;
9
+ type(allowedTypes: string[]): this;
10
+ extension(allowedExtensions: string[]): this;
11
11
  }
12
12
 
13
13
  export { XVFile as default };