xanv 1.1.25 → 1.1.26

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/index.cjs CHANGED
@@ -17,6 +17,7 @@ var Tuple = require('./types/Tuple.cjs');
17
17
  var Union = require('./types/Union.cjs');
18
18
  var Function = require('./types/Function.cjs');
19
19
  var Promise$1 = require('./types/Promise.cjs');
20
+ var FunctionComponent = require('./types/FunctionComponent.cjs');
20
21
 
21
22
  const xv = {
22
23
  any: () => new Any(),
@@ -33,8 +34,9 @@ const xv = {
33
34
  string: (length) => new String(length),
34
35
  tuple: (type) => new Tuple(type),
35
36
  union: (types) => new Union(types),
36
- function: (args, ret) => new Function(args, ret),
37
+ function: (options) => new Function(options),
37
38
  promise: (type) => new Promise$1(type),
39
+ functionComponent: (props, async) => new FunctionComponent(props, async),
38
40
  };
39
41
 
40
42
  exports.XVType = XVType;
@@ -54,5 +56,6 @@ exports.XVTuple = Tuple;
54
56
  exports.XVUnion = Union;
55
57
  exports.XVFunction = Function;
56
58
  exports.XVPromise = Promise$1;
59
+ exports.XVFunctionComponent = FunctionComponent;
57
60
  exports.xv = xv;
58
61
  //# sourceMappingURL=index.cjs.map
package/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import XVType from \"./XVType\";\r\nimport XVAny from \"./types/Any\";\r\nimport XVArray from \"./types/Array\";\r\nimport XVBoolean from \"./types/Boolean\";\r\nimport XVDate from \"./types/Date\";\r\nimport XVEnum from \"./types/Enum\";\r\nimport XVFile from \"./types/File\";\r\nimport XVMap from \"./types/Map\";\r\nimport XVNumber from \"./types/Number\";\r\nimport XVObject from \"./types/Object\";\r\nimport XVRecord from \"./types/Record\";\r\nimport XVSet from \"./types/Set\";\r\nimport XVString from \"./types/String\";\r\nimport XVTuple from \"./types/Tuple\";\r\nimport XVUnion from \"./types/Union\";\r\nimport XVFunction from \"./types/Function\";\r\nimport XVPromise from \"./types/Promise\";\r\n\r\nexport * from \"./types\";\r\n\r\nexport {\r\n XVType,\r\n XVAny,\r\n XVArray,\r\n XVBoolean,\r\n XVFunction,\r\n XVPromise,\r\n XVDate,\r\n XVEnum,\r\n XVFile,\r\n XVMap,\r\n XVNumber,\r\n XVObject,\r\n XVRecord,\r\n XVSet,\r\n XVString,\r\n XVTuple,\r\n XVUnion,\r\n};\r\n\r\nexport const xv = {\r\n any: () => new XVAny(),\r\n array: <T extends XVType<any>>(type: T) => new XVArray<T>(type),\r\n boolean: () => new XVBoolean(),\r\n date: () => new XVDate(),\r\n enum: <const T extends string | number>(input: readonly T[] | Record<string, T>): XVEnum<T> => new XVEnum<T>(input),\r\n file: () => new XVFile(),\r\n number: (length?: number) => new XVNumber(length),\r\n object: <T extends Record<string, XVType<any>>>(shape: T) => new XVObject(shape),\r\n record: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) => new XVRecord<K, V>(key, value),\r\n map: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) => new XVMap<K, V>(key, value),\r\n set: <T extends XVType<any>>(type: T) => new XVSet(type),\r\n string: (length?: number) => new XVString(length),\r\n tuple: <T extends XVType<any>[]>(type: T) => new XVTuple<T>(type),\r\n union: <T extends XVType<any>[]>(types: T) => new XVUnion<T>(types),\r\n function: <const A extends XVType<any>[], R extends XVType<any>>(args: A, ret: R) => new XVFunction<A, R>(args, ret),\r\n promise: <T extends XVType<any>>(type: T) => new XVPromise(type),\r\n};\r\n\r\n"],"names":["XVAny","XVArray","XVBoolean","XVDate","XVEnum","XVFile","XVNumber","XVObject","XVRecord","XVMap","XVSet","XVString","XVTuple","XVUnion","XVFunction","XVPromise"],"mappings":";;;;;;;;;;;;;;;;;;;;AAwCO,MAAM,EAAE,GAAG;AACf,IAAA,GAAG,EAAE,MAAM,IAAIA,GAAK,EAAE;IACtB,KAAK,EAAE,CAAwB,IAAO,KAAK,IAAIC,KAAO,CAAI,IAAI,CAAC;AAC/D,IAAA,OAAO,EAAE,MAAM,IAAIC,OAAS,EAAE;AAC9B,IAAA,IAAI,EAAE,MAAM,IAAIC,IAAM,EAAE;IACxB,IAAI,EAAE,CAAkC,KAAuC,KAAgB,IAAIC,IAAM,CAAI,KAAK,CAAC;AACnH,IAAA,IAAI,EAAE,MAAM,IAAIC,IAAM,EAAE;IACxB,MAAM,EAAE,CAAC,MAAe,KAAK,IAAIC,MAAQ,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAwC,KAAQ,KAAK,IAAIC,QAAQ,CAAC,KAAK,CAAC;AAChF,IAAA,MAAM,EAAE,CAA+C,GAAM,EAAE,KAAQ,KAAK,IAAIC,MAAQ,CAAO,GAAG,EAAE,KAAK,CAAC;AAC1G,IAAA,GAAG,EAAE,CAA+C,GAAM,EAAE,KAAQ,KAAK,IAAIC,GAAK,CAAO,GAAG,EAAE,KAAK,CAAC;IACpG,GAAG,EAAE,CAAwB,IAAO,KAAK,IAAIC,GAAK,CAAC,IAAI,CAAC;IACxD,MAAM,EAAE,CAAC,MAAe,KAAK,IAAIC,MAAQ,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAA0B,IAAO,KAAK,IAAIC,KAAO,CAAI,IAAI,CAAC;IACjE,KAAK,EAAE,CAA0B,KAAQ,KAAK,IAAIC,KAAO,CAAI,KAAK,CAAC;AACnE,IAAA,QAAQ,EAAE,CAAuD,IAAO,EAAE,GAAM,KAAK,IAAIC,QAAU,CAAO,IAAI,EAAE,GAAG,CAAC;IACpH,OAAO,EAAE,CAAwB,IAAO,KAAK,IAAIC,SAAS,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import XVType from \"./XVType\";\r\nimport XVAny from \"./types/Any\";\r\nimport XVArray from \"./types/Array\";\r\nimport XVBoolean from \"./types/Boolean\";\r\nimport XVDate from \"./types/Date\";\r\nimport XVEnum from \"./types/Enum\";\r\nimport XVFile from \"./types/File\";\r\nimport XVMap from \"./types/Map\";\r\nimport XVNumber from \"./types/Number\";\r\nimport XVObject from \"./types/Object\";\r\nimport XVRecord from \"./types/Record\";\r\nimport XVSet from \"./types/Set\";\r\nimport XVString from \"./types/String\";\r\nimport XVTuple from \"./types/Tuple\";\r\nimport XVUnion from \"./types/Union\";\r\nimport XVFunction, { XVFunctionOptions } from \"./types/Function\";\r\nimport XVPromise from \"./types/Promise\";\r\nimport XVFunctionComponent from \"./types/FunctionComponent\";\r\nexport * from \"./types\";\r\n\r\nexport {\r\n XVType,\r\n XVAny,\r\n XVArray,\r\n XVBoolean,\r\n XVFunction,\r\n XVPromise,\r\n XVDate,\r\n XVEnum,\r\n XVFile,\r\n XVMap,\r\n XVNumber,\r\n XVObject,\r\n XVRecord,\r\n XVSet,\r\n XVString,\r\n XVTuple,\r\n XVUnion,\r\n XVFunctionComponent,\r\n};\r\n\r\nexport const xv = {\r\n any: <T = any>() => new XVAny<T>(),\r\n array: <T extends XVType<any>>(type: T) => new XVArray<T>(type),\r\n boolean: () => new XVBoolean(),\r\n date: () => new XVDate(),\r\n enum: <const T extends string | number>(\r\n input: readonly T[] | Record<string, T>,\r\n ): XVEnum<T> => new XVEnum<T>(input),\r\n file: () => new XVFile(),\r\n number: (length?: number) => new XVNumber(length),\r\n object: <T extends Record<string | number, XVType<any>>>(shape: T) =>\r\n new XVObject(shape),\r\n record: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) =>\r\n new XVRecord<K, V>(key, value),\r\n map: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) =>\r\n new XVMap<K, V>(key, value),\r\n set: <T extends XVType<any>>(type: T) => new XVSet(type),\r\n string: (length?: number) => new XVString(length),\r\n tuple: <T extends XVType<any>[]>(type: T) => new XVTuple<T>(type),\r\n union: <T extends XVType<any>[]>(types: T) => new XVUnion<T>(types),\r\n function: <const A extends XVType<any>[], R extends XVType<any>>(\r\n options: XVFunctionOptions<A, R>,\r\n ) => new XVFunction<A, R>(options),\r\n promise: <T extends XVType<any>>(type: T) => new XVPromise(type),\r\n\r\n functionComponent: <\r\n P extends Record<string, XVType<any>>,\r\n Async extends boolean = false,\r\n >(\r\n props: P,\r\n async?: Async,\r\n ) => new XVFunctionComponent<P, Async>(props, async),\r\n};\r\n"],"names":["XVAny","XVArray","XVBoolean","XVDate","XVEnum","XVFile","XVNumber","XVObject","XVRecord","XVMap","XVSet","XVString","XVTuple","XVUnion","XVFunction","XVPromise","XVFunctionComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAyCO,MAAM,EAAE,GAAG;AAChB,IAAA,GAAG,EAAE,MAAe,IAAIA,GAAK,EAAK;IAClC,KAAK,EAAE,CAAwB,IAAO,KAAK,IAAIC,KAAO,CAAI,IAAI,CAAC;AAC/D,IAAA,OAAO,EAAE,MAAM,IAAIC,OAAS,EAAE;AAC9B,IAAA,IAAI,EAAE,MAAM,IAAIC,IAAM,EAAE;IACxB,IAAI,EAAE,CACJ,KAAuC,KACzB,IAAIC,IAAM,CAAI,KAAK,CAAC;AACpC,IAAA,IAAI,EAAE,MAAM,IAAIC,IAAM,EAAE;IACxB,MAAM,EAAE,CAAC,MAAe,KAAK,IAAIC,MAAQ,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAiD,KAAQ,KAC/D,IAAIC,QAAQ,CAAC,KAAK,CAAC;AACrB,IAAA,MAAM,EAAE,CAA+C,GAAM,EAAE,KAAQ,KACrE,IAAIC,MAAQ,CAAO,GAAG,EAAE,KAAK,CAAC;AAChC,IAAA,GAAG,EAAE,CAA+C,GAAM,EAAE,KAAQ,KAClE,IAAIC,GAAK,CAAO,GAAG,EAAE,KAAK,CAAC;IAC7B,GAAG,EAAE,CAAwB,IAAO,KAAK,IAAIC,GAAK,CAAC,IAAI,CAAC;IACxD,MAAM,EAAE,CAAC,MAAe,KAAK,IAAIC,MAAQ,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAA0B,IAAO,KAAK,IAAIC,KAAO,CAAI,IAAI,CAAC;IACjE,KAAK,EAAE,CAA0B,KAAQ,KAAK,IAAIC,KAAO,CAAI,KAAK,CAAC;IACnE,QAAQ,EAAE,CACR,OAAgC,KAC7B,IAAIC,QAAU,CAAO,OAAO,CAAC;IAClC,OAAO,EAAE,CAAwB,IAAO,KAAK,IAAIC,SAAS,CAAC,IAAI,CAAC;AAEhE,IAAA,iBAAiB,EAAE,CAIjB,KAAQ,EACR,KAAa,KACV,IAAIC,iBAAmB,CAAW,KAAK,EAAE,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;"}
package/index.d.ts CHANGED
@@ -13,27 +13,29 @@ import XVSet from './types/Set.js';
13
13
  import XVString from './types/String.js';
14
14
  import XVTuple from './types/Tuple.js';
15
15
  import XVUnion from './types/Union.js';
16
- import XVFunction from './types/Function.js';
16
+ import XVFunction, { XVFunctionOptions } from './types/Function.js';
17
17
  import XVPromise from './types/Promise.js';
18
+ import XVFunctionComponent from './types/FunctionComponent.js';
18
19
  export { Infer, InferObject, InferValue, IsOptional, XVCheckCallback, XVDefault, XVDefaultValue, XVMeta, XVNullable, XVOptional, XVTransformCallback } from './types.js';
19
20
 
20
21
  declare const xv: {
21
- any: () => XVAny<any>;
22
+ any: <T = any>() => XVAny<T>;
22
23
  array: <T extends XVType<any>>(type: T) => XVArray<T>;
23
24
  boolean: () => XVBoolean;
24
25
  date: () => XVDate;
25
26
  enum: <const T extends string | number>(input: readonly T[] | Record<string, T>) => XVEnum<T>;
26
27
  file: () => XVFile;
27
28
  number: (length?: number) => XVNumber<number>;
28
- object: <T extends Record<string, XVType<any>>>(shape: T) => XVObject<T>;
29
+ object: <T extends Record<string | number, XVType<any>>>(shape: T) => XVObject<T>;
29
30
  record: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) => XVRecord<K, V>;
30
31
  map: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) => XVMap<K, V>;
31
32
  set: <T extends XVType<any>>(type: T) => XVSet<T>;
32
33
  string: (length?: number) => XVString;
33
34
  tuple: <T extends XVType<any>[]>(type: T) => XVTuple<T>;
34
35
  union: <T extends XVType<any>[]>(types: T) => XVUnion<T>;
35
- function: <const A extends XVType<any>[], R extends XVType<any>>(args: A, ret: R) => XVFunction<A, R>;
36
+ function: <const A extends XVType<any>[], R extends XVType<any>>(options: XVFunctionOptions<A, R>) => XVFunction<A, R, false>;
36
37
  promise: <T extends XVType<any>>(type: T) => XVPromise<T>;
38
+ functionComponent: <P extends Record<string, XVType<any>>, Async extends boolean = false>(props: P, async?: Async) => XVFunctionComponent<P, Async>;
37
39
  };
38
40
 
39
- export { XVAny, XVArray, XVBoolean, XVDate, XVEnum, XVFile, XVFunction, XVMap, XVNumber, XVObject, XVPromise, XVRecord, XVSet, XVString, XVTuple, XVType, XVUnion, xv };
41
+ export { XVAny, XVArray, XVBoolean, XVDate, XVEnum, XVFile, XVFunction, XVFunctionComponent, XVMap, XVNumber, XVObject, XVPromise, XVRecord, XVSet, XVString, XVTuple, XVType, XVUnion, xv };
package/index.js CHANGED
@@ -15,6 +15,7 @@ import XVTuple from './types/Tuple.js';
15
15
  import XVUnion from './types/Union.js';
16
16
  import XVFunction from './types/Function.js';
17
17
  import XVPromise from './types/Promise.js';
18
+ import XVFunctionComponent from './types/FunctionComponent.js';
18
19
 
19
20
  const xv = {
20
21
  any: () => new XVAny(),
@@ -31,9 +32,10 @@ const xv = {
31
32
  string: (length) => new XVString(length),
32
33
  tuple: (type) => new XVTuple(type),
33
34
  union: (types) => new XVUnion(types),
34
- function: (args, ret) => new XVFunction(args, ret),
35
+ function: (options) => new XVFunction(options),
35
36
  promise: (type) => new XVPromise(type),
37
+ functionComponent: (props, async) => new XVFunctionComponent(props, async),
36
38
  };
37
39
 
38
- export { XVAny, XVArray, XVBoolean, XVDate, XVEnum, XVFile, XVFunction, XVMap, XVNumber, XVObject, XVPromise, XVRecord, XVSet, XVString, XVTuple, XVUnion, xv };
40
+ export { XVAny, XVArray, XVBoolean, XVDate, XVEnum, XVFile, XVFunction, XVFunctionComponent, XVMap, XVNumber, XVObject, XVPromise, XVRecord, XVSet, XVString, XVTuple, XVUnion, xv };
39
41
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import XVType from \"./XVType\";\r\nimport XVAny from \"./types/Any\";\r\nimport XVArray from \"./types/Array\";\r\nimport XVBoolean from \"./types/Boolean\";\r\nimport XVDate from \"./types/Date\";\r\nimport XVEnum from \"./types/Enum\";\r\nimport XVFile from \"./types/File\";\r\nimport XVMap from \"./types/Map\";\r\nimport XVNumber from \"./types/Number\";\r\nimport XVObject from \"./types/Object\";\r\nimport XVRecord from \"./types/Record\";\r\nimport XVSet from \"./types/Set\";\r\nimport XVString from \"./types/String\";\r\nimport XVTuple from \"./types/Tuple\";\r\nimport XVUnion from \"./types/Union\";\r\nimport XVFunction from \"./types/Function\";\r\nimport XVPromise from \"./types/Promise\";\r\n\r\nexport * from \"./types\";\r\n\r\nexport {\r\n XVType,\r\n XVAny,\r\n XVArray,\r\n XVBoolean,\r\n XVFunction,\r\n XVPromise,\r\n XVDate,\r\n XVEnum,\r\n XVFile,\r\n XVMap,\r\n XVNumber,\r\n XVObject,\r\n XVRecord,\r\n XVSet,\r\n XVString,\r\n XVTuple,\r\n XVUnion,\r\n};\r\n\r\nexport const xv = {\r\n any: () => new XVAny(),\r\n array: <T extends XVType<any>>(type: T) => new XVArray<T>(type),\r\n boolean: () => new XVBoolean(),\r\n date: () => new XVDate(),\r\n enum: <const T extends string | number>(input: readonly T[] | Record<string, T>): XVEnum<T> => new XVEnum<T>(input),\r\n file: () => new XVFile(),\r\n number: (length?: number) => new XVNumber(length),\r\n object: <T extends Record<string, XVType<any>>>(shape: T) => new XVObject(shape),\r\n record: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) => new XVRecord<K, V>(key, value),\r\n map: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) => new XVMap<K, V>(key, value),\r\n set: <T extends XVType<any>>(type: T) => new XVSet(type),\r\n string: (length?: number) => new XVString(length),\r\n tuple: <T extends XVType<any>[]>(type: T) => new XVTuple<T>(type),\r\n union: <T extends XVType<any>[]>(types: T) => new XVUnion<T>(types),\r\n function: <const A extends XVType<any>[], R extends XVType<any>>(args: A, ret: R) => new XVFunction<A, R>(args, ret),\r\n promise: <T extends XVType<any>>(type: T) => new XVPromise(type),\r\n};\r\n\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAwCO,MAAM,EAAE,GAAG;AACf,IAAA,GAAG,EAAE,MAAM,IAAI,KAAK,EAAE;IACtB,KAAK,EAAE,CAAwB,IAAO,KAAK,IAAI,OAAO,CAAI,IAAI,CAAC;AAC/D,IAAA,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE;AAC9B,IAAA,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE;IACxB,IAAI,EAAE,CAAkC,KAAuC,KAAgB,IAAI,MAAM,CAAI,KAAK,CAAC;AACnH,IAAA,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE;IACxB,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAwC,KAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;AAChF,IAAA,MAAM,EAAE,CAA+C,GAAM,EAAE,KAAQ,KAAK,IAAI,QAAQ,CAAO,GAAG,EAAE,KAAK,CAAC;AAC1G,IAAA,GAAG,EAAE,CAA+C,GAAM,EAAE,KAAQ,KAAK,IAAI,KAAK,CAAO,GAAG,EAAE,KAAK,CAAC;IACpG,GAAG,EAAE,CAAwB,IAAO,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;IACxD,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAA0B,IAAO,KAAK,IAAI,OAAO,CAAI,IAAI,CAAC;IACjE,KAAK,EAAE,CAA0B,KAAQ,KAAK,IAAI,OAAO,CAAI,KAAK,CAAC;AACnE,IAAA,QAAQ,EAAE,CAAuD,IAAO,EAAE,GAAM,KAAK,IAAI,UAAU,CAAO,IAAI,EAAE,GAAG,CAAC;IACpH,OAAO,EAAE,CAAwB,IAAO,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import XVType from \"./XVType\";\r\nimport XVAny from \"./types/Any\";\r\nimport XVArray from \"./types/Array\";\r\nimport XVBoolean from \"./types/Boolean\";\r\nimport XVDate from \"./types/Date\";\r\nimport XVEnum from \"./types/Enum\";\r\nimport XVFile from \"./types/File\";\r\nimport XVMap from \"./types/Map\";\r\nimport XVNumber from \"./types/Number\";\r\nimport XVObject from \"./types/Object\";\r\nimport XVRecord from \"./types/Record\";\r\nimport XVSet from \"./types/Set\";\r\nimport XVString from \"./types/String\";\r\nimport XVTuple from \"./types/Tuple\";\r\nimport XVUnion from \"./types/Union\";\r\nimport XVFunction, { XVFunctionOptions } from \"./types/Function\";\r\nimport XVPromise from \"./types/Promise\";\r\nimport XVFunctionComponent from \"./types/FunctionComponent\";\r\nexport * from \"./types\";\r\n\r\nexport {\r\n XVType,\r\n XVAny,\r\n XVArray,\r\n XVBoolean,\r\n XVFunction,\r\n XVPromise,\r\n XVDate,\r\n XVEnum,\r\n XVFile,\r\n XVMap,\r\n XVNumber,\r\n XVObject,\r\n XVRecord,\r\n XVSet,\r\n XVString,\r\n XVTuple,\r\n XVUnion,\r\n XVFunctionComponent,\r\n};\r\n\r\nexport const xv = {\r\n any: <T = any>() => new XVAny<T>(),\r\n array: <T extends XVType<any>>(type: T) => new XVArray<T>(type),\r\n boolean: () => new XVBoolean(),\r\n date: () => new XVDate(),\r\n enum: <const T extends string | number>(\r\n input: readonly T[] | Record<string, T>,\r\n ): XVEnum<T> => new XVEnum<T>(input),\r\n file: () => new XVFile(),\r\n number: (length?: number) => new XVNumber(length),\r\n object: <T extends Record<string | number, XVType<any>>>(shape: T) =>\r\n new XVObject(shape),\r\n record: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) =>\r\n new XVRecord<K, V>(key, value),\r\n map: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) =>\r\n new XVMap<K, V>(key, value),\r\n set: <T extends XVType<any>>(type: T) => new XVSet(type),\r\n string: (length?: number) => new XVString(length),\r\n tuple: <T extends XVType<any>[]>(type: T) => new XVTuple<T>(type),\r\n union: <T extends XVType<any>[]>(types: T) => new XVUnion<T>(types),\r\n function: <const A extends XVType<any>[], R extends XVType<any>>(\r\n options: XVFunctionOptions<A, R>,\r\n ) => new XVFunction<A, R>(options),\r\n promise: <T extends XVType<any>>(type: T) => new XVPromise(type),\r\n\r\n functionComponent: <\r\n P extends Record<string, XVType<any>>,\r\n Async extends boolean = false,\r\n >(\r\n props: P,\r\n async?: Async,\r\n ) => new XVFunctionComponent<P, Async>(props, async),\r\n};\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAyCO,MAAM,EAAE,GAAG;AAChB,IAAA,GAAG,EAAE,MAAe,IAAI,KAAK,EAAK;IAClC,KAAK,EAAE,CAAwB,IAAO,KAAK,IAAI,OAAO,CAAI,IAAI,CAAC;AAC/D,IAAA,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE;AAC9B,IAAA,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE;IACxB,IAAI,EAAE,CACJ,KAAuC,KACzB,IAAI,MAAM,CAAI,KAAK,CAAC;AACpC,IAAA,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE;IACxB,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAiD,KAAQ,KAC/D,IAAI,QAAQ,CAAC,KAAK,CAAC;AACrB,IAAA,MAAM,EAAE,CAA+C,GAAM,EAAE,KAAQ,KACrE,IAAI,QAAQ,CAAO,GAAG,EAAE,KAAK,CAAC;AAChC,IAAA,GAAG,EAAE,CAA+C,GAAM,EAAE,KAAQ,KAClE,IAAI,KAAK,CAAO,GAAG,EAAE,KAAK,CAAC;IAC7B,GAAG,EAAE,CAAwB,IAAO,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;IACxD,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAA0B,IAAO,KAAK,IAAI,OAAO,CAAI,IAAI,CAAC;IACjE,KAAK,EAAE,CAA0B,KAAQ,KAAK,IAAI,OAAO,CAAI,KAAK,CAAC;IACnE,QAAQ,EAAE,CACR,OAAgC,KAC7B,IAAI,UAAU,CAAO,OAAO,CAAC;IAClC,OAAO,EAAE,CAAwB,IAAO,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC;AAEhE,IAAA,iBAAiB,EAAE,CAIjB,KAAQ,EACR,KAAa,KACV,IAAI,mBAAmB,CAAW,KAAK,EAAE,KAAK,CAAC;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xanv",
3
- "version": "1.1.25",
3
+ "version": "1.1.26",
4
4
  "types": "./index.d.ts",
5
5
  "main": "./index.cjs",
6
6
  "module": "./index.js",
@@ -3,10 +3,12 @@
3
3
  var XVType = require('../XVType.cjs');
4
4
 
5
5
  class XVFunction extends XVType {
6
- constructor(func_args, func_return) {
6
+ constructor(options) {
7
+ var _a;
7
8
  super();
8
- this.func_args = func_args;
9
- this.func_return = func_return;
9
+ this.func_args = options.args;
10
+ this.func_return = options.returns;
11
+ this.is_async = ((_a = options.async) !== null && _a !== void 0 ? _a : false);
10
12
  }
11
13
  check(value) {
12
14
  if (typeof value !== "function") {
@@ -17,16 +19,24 @@ class XVFunction extends XVType {
17
19
  parse(fn) {
18
20
  const checked = super.parse(fn);
19
21
  return ((...args) => {
20
- if (args.length !== this.func_args.length) {
21
- throw new Error(`Expected ${this.func_args.length} arguments, received ${args.length}`);
22
+ try {
23
+ const parsedArgs = this.func_args.map((validator, i) => validator.parse(args[i]));
24
+ const result = checked(...parsedArgs);
25
+ if (this.is_async) {
26
+ if (!(result instanceof Promise)) {
27
+ throw new Error(`Expected async function to return Promise`);
28
+ }
29
+ return result.then((res) => this.func_return.parse(res));
30
+ }
31
+ try {
32
+ return this.func_return.parse(result);
33
+ }
34
+ catch (error) {
35
+ throw new Error(`Function return value ${error}`);
36
+ }
22
37
  }
23
- this.func_args.forEach((validator, i) => {
24
- validator.parse(args[i]);
25
- });
26
- if (typeof checked === 'function') {
27
- const result = checked(...args);
28
- this.func_return.parse(result);
29
- return result;
38
+ catch (error) {
39
+ throw new Error(`Function args ${error}`);
30
40
  }
31
41
  });
32
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Function.cjs","sources":["../../src/types/Function.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\ntype Func<A extends XVType<any>[], R extends XVType<any>> = (...args: { [K in keyof A]: Infer<A[K]> }) => Infer<R>;\r\n\r\nclass XVFunction<A extends XVType<any>[], R extends XVType<any>> extends XVType<(...args: { [K in keyof A]: Infer<A[K]> }) => Infer<R>> {\r\n\r\n constructor(readonly func_args: A, readonly func_return: R) {\r\n super();\r\n }\r\n\r\n protected check(value: unknown): 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 as Func<A, R>;\r\n }\r\n\r\n parse(fn: unknown): Func<A, R> {\r\n const checked = super.parse(fn) as Func<A, R>\r\n\r\n return ((...args: unknown[]) => {\r\n if (args.length !== this.func_args.length) {\r\n throw new Error(\r\n `Expected ${this.func_args.length} arguments, received ${args.length}`\r\n );\r\n }\r\n\r\n this.func_args.forEach((validator, i) => {\r\n validator.parse(args[i]);\r\n });\r\n\r\n if (typeof checked === 'function') {\r\n const result = checked(...args as any);\r\n this.func_return.parse(result);\r\n return result;\r\n }\r\n }) as Func<A, R>;\r\n }\r\n}\r\n\r\nexport default XVFunction;\r\n"],"names":[],"mappings":";;;;AAKA,MAAM,UAA2D,SAAQ,MAA8D,CAAA;IAEpI,WAAA,CAAqB,SAAY,EAAW,WAAc,EAAA;AACvD,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,SAAS,GAAT,SAAS;QAAc,IAAA,CAAA,WAAW,GAAX,WAAW;IAEvD;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,OAAO,KAAK,CAAA,CAAE,CAAC;QAC1E;AACA,QAAA,OAAO,KAAmB;IAC7B;AAEA,IAAA,KAAK,CAAC,EAAW,EAAA;QACd,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAe;AAE7C,QAAA,QAAQ,CAAC,GAAG,IAAe,KAAI;YAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACxC,gBAAA,MAAM,IAAI,KAAK,CACZ,CAAA,SAAA,EAAY,IAAI,CAAC,SAAS,CAAC,MAAM,wBAAwB,IAAI,CAAC,MAAM,CAAA,CAAE,CACxE;YACJ;YAEA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,KAAI;gBACrC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3B,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AAChC,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,IAAW,CAAC;AACtC,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;AAC9B,gBAAA,OAAO,MAAM;YAChB;AACH,QAAA,CAAC;IACJ;AACF;;;;"}
1
+ {"version":3,"file":"Function.cjs","sources":["../../src/types/Function.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\ntype Func<\r\n A extends XVType<any>[],\r\n R extends XVType<any>,\r\n Async extends boolean = false,\r\n> = Async extends true\r\n ? (...args: { [K in keyof A]: Infer<A[K]> }) => Promise<Infer<R>>\r\n : (...args: { [K in keyof A]: Infer<A[K]> }) => Infer<R>;\r\n\r\nexport type XVFunctionOptions<\r\n A extends XVType<any>[],\r\n R extends XVType<any>,\r\n> = {\r\n args: A;\r\n returns: R;\r\n async?: boolean;\r\n};\r\n\r\nclass XVFunction<\r\n A extends XVType<any>[],\r\n R extends XVType<any>,\r\n Async extends boolean = false,\r\n> extends XVType<Func<A, R, Async>> {\r\n readonly func_args: A;\r\n readonly func_return: R;\r\n readonly is_async: Async;\r\n\r\n constructor(options: XVFunctionOptions<A, R>) {\r\n super();\r\n\r\n this.func_args = options.args;\r\n this.func_return = options.returns;\r\n this.is_async = (options.async ?? false) as Async;\r\n }\r\n\r\n protected check(value: unknown): Func<A, R, Async> {\r\n if (typeof value !== \"function\") {\r\n throw new Error(`Value should be a function, received ${typeof value}`);\r\n }\r\n\r\n return value as Func<A, R, Async>;\r\n }\r\n\r\n parse(fn: unknown): Func<A, R, Async> {\r\n const checked = super.parse(fn);\r\n\r\n return ((...args: unknown[]) => {\r\n try {\r\n const parsedArgs = this.func_args.map((validator, i) =>\r\n validator.parse(args[i]),\r\n ) as { [K in keyof A]: Infer<A[K]> };\r\n\r\n const result = checked!(...parsedArgs);\r\n\r\n if (this.is_async) {\r\n if (!(result instanceof Promise)) {\r\n throw new Error(`Expected async function to return Promise`);\r\n }\r\n\r\n return result.then((res) => this.func_return.parse(res));\r\n }\r\n\r\n try {\r\n return this.func_return.parse(result);\r\n } catch (error) {\r\n throw new Error(`Function return value ${error}`);\r\n }\r\n } catch (error) {\r\n throw new Error(`Function args ${error}`);\r\n }\r\n }) as Func<A, R, Async>;\r\n }\r\n}\r\n\r\nexport default XVFunction;\r\n"],"names":[],"mappings":";;;;AAoBA,MAAM,UAIJ,SAAQ,MAAyB,CAAA;AAKjC,IAAA,WAAA,CAAY,OAAgC,EAAA;;AAC1C,QAAA,KAAK,EAAE;AAEP,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO;QAClC,IAAI,CAAC,QAAQ,IAAI,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK,CAAU;IACnD;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,OAAO,KAAK,CAAA,CAAE,CAAC;QACzE;AAEA,QAAA,OAAO,KAA0B;IACnC;AAEA,IAAA,KAAK,CAAC,EAAW,EAAA;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAE/B,QAAA,QAAQ,CAAC,GAAG,IAAe,KAAI;AAC7B,YAAA,IAAI;gBACF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KACjD,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACU;AAEpC,gBAAA,MAAM,MAAM,GAAG,OAAQ,CAAC,GAAG,UAAU,CAAC;AAEtC,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,EAAE,MAAM,YAAY,OAAO,CAAC,EAAE;AAChC,wBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,yCAAA,CAA2C,CAAC;oBAC9D;AAEA,oBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1D;AAEA,gBAAA,IAAI;oBACF,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvC;gBAAE,OAAO,KAAK,EAAE;AACd,oBAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAA,CAAE,CAAC;gBACnD;YACF;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAA,CAAE,CAAC;YAC3C;AACF,QAAA,CAAC;IACH;AACD;;;;"}
@@ -1,17 +1,24 @@
1
1
  import { Infer } from '../types.js';
2
2
  import XVType from '../XVType.js';
3
3
 
4
- type Func<A extends XVType<any>[], R extends XVType<any>> = (...args: {
4
+ type Func<A extends XVType<any>[], R extends XVType<any>, Async extends boolean = false> = Async extends true ? (...args: {
5
5
  [K in keyof A]: Infer<A[K]>;
6
- }) => Infer<R>;
7
- declare class XVFunction<A extends XVType<any>[], R extends XVType<any>> extends XVType<(...args: {
6
+ }) => Promise<Infer<R>> : (...args: {
8
7
  [K in keyof A]: Infer<A[K]>;
9
- }) => Infer<R>> {
8
+ }) => Infer<R>;
9
+ type XVFunctionOptions<A extends XVType<any>[], R extends XVType<any>> = {
10
+ args: A;
11
+ returns: R;
12
+ async?: boolean;
13
+ };
14
+ declare class XVFunction<A extends XVType<any>[], R extends XVType<any>, Async extends boolean = false> extends XVType<Func<A, R, Async>> {
10
15
  readonly func_args: A;
11
16
  readonly func_return: R;
12
- constructor(func_args: A, func_return: R);
13
- protected check(value: unknown): Func<A, R>;
14
- parse(fn: unknown): Func<A, R>;
17
+ readonly is_async: Async;
18
+ constructor(options: XVFunctionOptions<A, R>);
19
+ protected check(value: unknown): Func<A, R, Async>;
20
+ parse(fn: unknown): Func<A, R, Async>;
15
21
  }
16
22
 
17
23
  export { XVFunction as default };
24
+ export type { XVFunctionOptions };
package/types/Function.js CHANGED
@@ -1,10 +1,12 @@
1
1
  import XVType from '../XVType.js';
2
2
 
3
3
  class XVFunction extends XVType {
4
- constructor(func_args, func_return) {
4
+ constructor(options) {
5
+ var _a;
5
6
  super();
6
- this.func_args = func_args;
7
- this.func_return = func_return;
7
+ this.func_args = options.args;
8
+ this.func_return = options.returns;
9
+ this.is_async = ((_a = options.async) !== null && _a !== void 0 ? _a : false);
8
10
  }
9
11
  check(value) {
10
12
  if (typeof value !== "function") {
@@ -15,16 +17,24 @@ class XVFunction extends XVType {
15
17
  parse(fn) {
16
18
  const checked = super.parse(fn);
17
19
  return ((...args) => {
18
- if (args.length !== this.func_args.length) {
19
- throw new Error(`Expected ${this.func_args.length} arguments, received ${args.length}`);
20
+ try {
21
+ const parsedArgs = this.func_args.map((validator, i) => validator.parse(args[i]));
22
+ const result = checked(...parsedArgs);
23
+ if (this.is_async) {
24
+ if (!(result instanceof Promise)) {
25
+ throw new Error(`Expected async function to return Promise`);
26
+ }
27
+ return result.then((res) => this.func_return.parse(res));
28
+ }
29
+ try {
30
+ return this.func_return.parse(result);
31
+ }
32
+ catch (error) {
33
+ throw new Error(`Function return value ${error}`);
34
+ }
20
35
  }
21
- this.func_args.forEach((validator, i) => {
22
- validator.parse(args[i]);
23
- });
24
- if (typeof checked === 'function') {
25
- const result = checked(...args);
26
- this.func_return.parse(result);
27
- return result;
36
+ catch (error) {
37
+ throw new Error(`Function args ${error}`);
28
38
  }
29
39
  });
30
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Function.js","sources":["../../src/types/Function.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\ntype Func<A extends XVType<any>[], R extends XVType<any>> = (...args: { [K in keyof A]: Infer<A[K]> }) => Infer<R>;\r\n\r\nclass XVFunction<A extends XVType<any>[], R extends XVType<any>> extends XVType<(...args: { [K in keyof A]: Infer<A[K]> }) => Infer<R>> {\r\n\r\n constructor(readonly func_args: A, readonly func_return: R) {\r\n super();\r\n }\r\n\r\n protected check(value: unknown): 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 as Func<A, R>;\r\n }\r\n\r\n parse(fn: unknown): Func<A, R> {\r\n const checked = super.parse(fn) as Func<A, R>\r\n\r\n return ((...args: unknown[]) => {\r\n if (args.length !== this.func_args.length) {\r\n throw new Error(\r\n `Expected ${this.func_args.length} arguments, received ${args.length}`\r\n );\r\n }\r\n\r\n this.func_args.forEach((validator, i) => {\r\n validator.parse(args[i]);\r\n });\r\n\r\n if (typeof checked === 'function') {\r\n const result = checked(...args as any);\r\n this.func_return.parse(result);\r\n return result;\r\n }\r\n }) as Func<A, R>;\r\n }\r\n}\r\n\r\nexport default XVFunction;\r\n"],"names":[],"mappings":";;AAKA,MAAM,UAA2D,SAAQ,MAA8D,CAAA;IAEpI,WAAA,CAAqB,SAAY,EAAW,WAAc,EAAA;AACvD,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,SAAS,GAAT,SAAS;QAAc,IAAA,CAAA,WAAW,GAAX,WAAW;IAEvD;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,OAAO,KAAK,CAAA,CAAE,CAAC;QAC1E;AACA,QAAA,OAAO,KAAmB;IAC7B;AAEA,IAAA,KAAK,CAAC,EAAW,EAAA;QACd,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAe;AAE7C,QAAA,QAAQ,CAAC,GAAG,IAAe,KAAI;YAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACxC,gBAAA,MAAM,IAAI,KAAK,CACZ,CAAA,SAAA,EAAY,IAAI,CAAC,SAAS,CAAC,MAAM,wBAAwB,IAAI,CAAC,MAAM,CAAA,CAAE,CACxE;YACJ;YAEA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,KAAI;gBACrC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3B,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AAChC,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,IAAW,CAAC;AACtC,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;AAC9B,gBAAA,OAAO,MAAM;YAChB;AACH,QAAA,CAAC;IACJ;AACF;;;;"}
1
+ {"version":3,"file":"Function.js","sources":["../../src/types/Function.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\ntype Func<\r\n A extends XVType<any>[],\r\n R extends XVType<any>,\r\n Async extends boolean = false,\r\n> = Async extends true\r\n ? (...args: { [K in keyof A]: Infer<A[K]> }) => Promise<Infer<R>>\r\n : (...args: { [K in keyof A]: Infer<A[K]> }) => Infer<R>;\r\n\r\nexport type XVFunctionOptions<\r\n A extends XVType<any>[],\r\n R extends XVType<any>,\r\n> = {\r\n args: A;\r\n returns: R;\r\n async?: boolean;\r\n};\r\n\r\nclass XVFunction<\r\n A extends XVType<any>[],\r\n R extends XVType<any>,\r\n Async extends boolean = false,\r\n> extends XVType<Func<A, R, Async>> {\r\n readonly func_args: A;\r\n readonly func_return: R;\r\n readonly is_async: Async;\r\n\r\n constructor(options: XVFunctionOptions<A, R>) {\r\n super();\r\n\r\n this.func_args = options.args;\r\n this.func_return = options.returns;\r\n this.is_async = (options.async ?? false) as Async;\r\n }\r\n\r\n protected check(value: unknown): Func<A, R, Async> {\r\n if (typeof value !== \"function\") {\r\n throw new Error(`Value should be a function, received ${typeof value}`);\r\n }\r\n\r\n return value as Func<A, R, Async>;\r\n }\r\n\r\n parse(fn: unknown): Func<A, R, Async> {\r\n const checked = super.parse(fn);\r\n\r\n return ((...args: unknown[]) => {\r\n try {\r\n const parsedArgs = this.func_args.map((validator, i) =>\r\n validator.parse(args[i]),\r\n ) as { [K in keyof A]: Infer<A[K]> };\r\n\r\n const result = checked!(...parsedArgs);\r\n\r\n if (this.is_async) {\r\n if (!(result instanceof Promise)) {\r\n throw new Error(`Expected async function to return Promise`);\r\n }\r\n\r\n return result.then((res) => this.func_return.parse(res));\r\n }\r\n\r\n try {\r\n return this.func_return.parse(result);\r\n } catch (error) {\r\n throw new Error(`Function return value ${error}`);\r\n }\r\n } catch (error) {\r\n throw new Error(`Function args ${error}`);\r\n }\r\n }) as Func<A, R, Async>;\r\n }\r\n}\r\n\r\nexport default XVFunction;\r\n"],"names":[],"mappings":";;AAoBA,MAAM,UAIJ,SAAQ,MAAyB,CAAA;AAKjC,IAAA,WAAA,CAAY,OAAgC,EAAA;;AAC1C,QAAA,KAAK,EAAE;AAEP,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO;QAClC,IAAI,CAAC,QAAQ,IAAI,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK,CAAU;IACnD;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,OAAO,KAAK,CAAA,CAAE,CAAC;QACzE;AAEA,QAAA,OAAO,KAA0B;IACnC;AAEA,IAAA,KAAK,CAAC,EAAW,EAAA;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAE/B,QAAA,QAAQ,CAAC,GAAG,IAAe,KAAI;AAC7B,YAAA,IAAI;gBACF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KACjD,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACU;AAEpC,gBAAA,MAAM,MAAM,GAAG,OAAQ,CAAC,GAAG,UAAU,CAAC;AAEtC,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,EAAE,MAAM,YAAY,OAAO,CAAC,EAAE;AAChC,wBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,yCAAA,CAA2C,CAAC;oBAC9D;AAEA,oBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1D;AAEA,gBAAA,IAAI;oBACF,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvC;gBAAE,OAAO,KAAK,EAAE;AACd,oBAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAA,CAAE,CAAC;gBACnD;YACF;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAA,CAAE,CAAC;YAC3C;AACF,QAAA,CAAC;IACH;AACD;;;;"}
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ var XVType = require('../XVType.cjs');
4
+
5
+ class XVFunctionComponent extends XVType {
6
+ constructor(props, async) {
7
+ super();
8
+ this.props = props;
9
+ this.is_async = (async !== null && async !== void 0 ? async : false);
10
+ }
11
+ check(value) {
12
+ if (typeof value !== "function") {
13
+ throw new Error("Component must be a function");
14
+ }
15
+ return value;
16
+ }
17
+ parse(fn) {
18
+ const checked = super.parse(fn);
19
+ return ((inputProps) => {
20
+ const parsed = {};
21
+ for (const key in this.props) {
22
+ parsed[key] = this.props[key].parse(inputProps[key]);
23
+ }
24
+ const result = checked(parsed);
25
+ if (this.is_async) {
26
+ return Promise.resolve(result);
27
+ }
28
+ return result;
29
+ });
30
+ }
31
+ }
32
+
33
+ module.exports = XVFunctionComponent;
34
+ //# sourceMappingURL=FunctionComponent.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FunctionComponent.cjs","sources":["../../src/types/FunctionComponent.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\n/**\r\n * Function component type (sync + async)\r\n */\r\ntype FuncComponent<P, Async extends boolean = false> = Async extends true\r\n ? (props: P) => Promise<any>\r\n : (props: P) => any;\r\n\r\n/**\r\n * Convert schema props → runtime props\r\n */\r\ntype InferProps<P extends Record<string, XVType<any>>> = {\r\n [K in keyof P]: Infer<P[K]>;\r\n};\r\n\r\nclass XVFunctionComponent<\r\n P extends Record<string, XVType<any>>,\r\n Async extends boolean = false,\r\n> extends XVType<FuncComponent<InferProps<P>, Async>> {\r\n readonly props: P;\r\n readonly is_async: Async;\r\n\r\n constructor(props: P, async?: Async) {\r\n super();\r\n this.props = props;\r\n this.is_async = (async ?? false) as Async;\r\n }\r\n\r\n protected check(value: unknown): any {\r\n if (typeof value !== \"function\") {\r\n throw new Error(\"Component must be a function\");\r\n }\r\n return value;\r\n }\r\n\r\n parse(fn: unknown) {\r\n const checked = super.parse(fn);\r\n\r\n return ((inputProps: InferProps<P>) => {\r\n const parsed: InferProps<P> = {} as InferProps<P>;\r\n\r\n for (const key in this.props) {\r\n parsed[key] = this.props[key].parse((inputProps as any)[key]);\r\n }\r\n\r\n const result = (checked as any)(parsed);\r\n\r\n if (this.is_async) {\r\n return Promise.resolve(result);\r\n }\r\n\r\n return result;\r\n }) as FuncComponent<InferProps<P>, Async>;\r\n }\r\n}\r\n\r\nexport default XVFunctionComponent;\r\n"],"names":[],"mappings":";;;;AAiBA,MAAM,mBAGJ,SAAQ,MAA2C,CAAA;IAInD,WAAA,CAAY,KAAQ,EAAE,KAAa,EAAA;AACjC,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAL,KAAK,GAAI,KAAK,CAAU;IAC3C;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;QACjD;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,KAAK,CAAC,EAAW,EAAA;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAE/B,QAAA,QAAQ,CAAC,UAAyB,KAAI;YACpC,MAAM,MAAM,GAAkB,EAAmB;AAEjD,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;AAC5B,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAE,UAAkB,CAAC,GAAG,CAAC,CAAC;YAC/D;AAEA,YAAA,MAAM,MAAM,GAAI,OAAe,CAAC,MAAM,CAAC;AAEvC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAChC;AAEA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC;IACH;AACD;;;;"}
@@ -0,0 +1,22 @@
1
+ import { Infer } from '../types.js';
2
+ import XVType from '../XVType.js';
3
+
4
+ /**
5
+ * Function component type (sync + async)
6
+ */
7
+ type FuncComponent<P, Async extends boolean = false> = Async extends true ? (props: P) => Promise<any> : (props: P) => any;
8
+ /**
9
+ * Convert schema props → runtime props
10
+ */
11
+ type InferProps<P extends Record<string, XVType<any>>> = {
12
+ [K in keyof P]: Infer<P[K]>;
13
+ };
14
+ declare class XVFunctionComponent<P extends Record<string, XVType<any>>, Async extends boolean = false> extends XVType<FuncComponent<InferProps<P>, Async>> {
15
+ readonly props: P;
16
+ readonly is_async: Async;
17
+ constructor(props: P, async?: Async);
18
+ protected check(value: unknown): any;
19
+ parse(fn: unknown): FuncComponent<InferProps<P>, Async>;
20
+ }
21
+
22
+ export { XVFunctionComponent as default };
@@ -0,0 +1,32 @@
1
+ import XVType from '../XVType.js';
2
+
3
+ class XVFunctionComponent extends XVType {
4
+ constructor(props, async) {
5
+ super();
6
+ this.props = props;
7
+ this.is_async = (async !== null && async !== void 0 ? async : false);
8
+ }
9
+ check(value) {
10
+ if (typeof value !== "function") {
11
+ throw new Error("Component must be a function");
12
+ }
13
+ return value;
14
+ }
15
+ parse(fn) {
16
+ const checked = super.parse(fn);
17
+ return ((inputProps) => {
18
+ const parsed = {};
19
+ for (const key in this.props) {
20
+ parsed[key] = this.props[key].parse(inputProps[key]);
21
+ }
22
+ const result = checked(parsed);
23
+ if (this.is_async) {
24
+ return Promise.resolve(result);
25
+ }
26
+ return result;
27
+ });
28
+ }
29
+ }
30
+
31
+ export { XVFunctionComponent as default };
32
+ //# sourceMappingURL=FunctionComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FunctionComponent.js","sources":["../../src/types/FunctionComponent.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\n/**\r\n * Function component type (sync + async)\r\n */\r\ntype FuncComponent<P, Async extends boolean = false> = Async extends true\r\n ? (props: P) => Promise<any>\r\n : (props: P) => any;\r\n\r\n/**\r\n * Convert schema props → runtime props\r\n */\r\ntype InferProps<P extends Record<string, XVType<any>>> = {\r\n [K in keyof P]: Infer<P[K]>;\r\n};\r\n\r\nclass XVFunctionComponent<\r\n P extends Record<string, XVType<any>>,\r\n Async extends boolean = false,\r\n> extends XVType<FuncComponent<InferProps<P>, Async>> {\r\n readonly props: P;\r\n readonly is_async: Async;\r\n\r\n constructor(props: P, async?: Async) {\r\n super();\r\n this.props = props;\r\n this.is_async = (async ?? false) as Async;\r\n }\r\n\r\n protected check(value: unknown): any {\r\n if (typeof value !== \"function\") {\r\n throw new Error(\"Component must be a function\");\r\n }\r\n return value;\r\n }\r\n\r\n parse(fn: unknown) {\r\n const checked = super.parse(fn);\r\n\r\n return ((inputProps: InferProps<P>) => {\r\n const parsed: InferProps<P> = {} as InferProps<P>;\r\n\r\n for (const key in this.props) {\r\n parsed[key] = this.props[key].parse((inputProps as any)[key]);\r\n }\r\n\r\n const result = (checked as any)(parsed);\r\n\r\n if (this.is_async) {\r\n return Promise.resolve(result);\r\n }\r\n\r\n return result;\r\n }) as FuncComponent<InferProps<P>, Async>;\r\n }\r\n}\r\n\r\nexport default XVFunctionComponent;\r\n"],"names":[],"mappings":";;AAiBA,MAAM,mBAGJ,SAAQ,MAA2C,CAAA;IAInD,WAAA,CAAY,KAAQ,EAAE,KAAa,EAAA;AACjC,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAL,KAAK,GAAI,KAAK,CAAU;IAC3C;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;QACjD;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,KAAK,CAAC,EAAW,EAAA;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAE/B,QAAA,QAAQ,CAAC,UAAyB,KAAI;YACpC,MAAM,MAAM,GAAkB,EAAmB;AAEjD,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;AAC5B,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAE,UAAkB,CAAC,GAAG,CAAC,CAAC;YAC/D;AAEA,YAAA,MAAM,MAAM,GAAI,OAAe,CAAC,MAAM,CAAC;AAEvC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAChC;AAEA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC;IACH;AACD;;;;"}
package/types/Map.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Map.cjs","sources":["../../src/types/Map.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVMap<K extends XVType<any> = any, V extends XVType<any> = any> extends XVType<Map<Infer<K>, Infer<V>>> {\r\n constructor(readonly Mapkey: K, readonly Mapvalue: V) {\r\n super();\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.Mapkey.parse(k) as Infer<K>;\r\n const parsedValue = this.Mapvalue.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.Mapkey.constructor.name} and value of type ${this.Mapvalue.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,KAAgE,SAAQ,MAA+B,CAAA;IAC1G,WAAA,CAAqB,MAAS,EAAW,QAAW,EAAA;AACjD,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,MAAM,GAAN,MAAM;QAAc,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAEjD;AAEU,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;QACrE;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB;AAE5C,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAK,KAAa,CAAC,OAAO,EAAE,EAAE;AAC5C,YAAA,IAAI;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAa;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAa;AACtD,gBAAA,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC;YACrC;YAAE,OAAO,GAAG,EAAE;gBACX,MAAM,IAAI,KAAK,CACZ,CAAA,kCAAA,EAAqC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAA,mBAAA,EAAsB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAA,gBAAA,EAAmB,OAAO,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,CAAA,CAAE,CACxK;YACJ;QACH;AAEA,QAAA,OAAO,MAAM;IAChB;AACF;;;;"}
1
+ {"version":3,"file":"Map.cjs","sources":["../../src/types/Map.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVMap<\r\n K extends XVType<any> = any,\r\n V extends XVType<any> = any,\r\n> extends XVType<Map<Infer<K>, Infer<V>>> {\r\n constructor(\r\n readonly Mapkey: K,\r\n readonly Mapvalue: V,\r\n ) {\r\n super();\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.Mapkey.parse(k) as Infer<K>;\r\n const parsedValue = this.Mapvalue.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.Mapkey.constructor.name} and value of type ${this.Mapvalue.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,KAGJ,SAAQ,MAA+B,CAAA;IACvC,WAAA,CACW,MAAS,EACT,QAAW,EAAA;AAEpB,QAAA,KAAK,EAAE;QAHE,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAGnB;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,EAAE,KAAK,YAAY,GAAG,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,OAAO,KAAK,CAAA,CAAE,CAAC;QACpE;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB;AAE5C,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAK,KAAa,CAAC,OAAO,EAAE,EAAE;AAC7C,YAAA,IAAI;gBACF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAa;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAa;AACtD,gBAAA,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC;YACpC;YAAE,OAAO,GAAG,EAAE;gBACZ,MAAM,IAAI,KAAK,CACb,CAAA,kCAAA,EAAqC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAA,mBAAA,EAAsB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAA,gBAAA,EAAmB,OAAO,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,CAAA,CAAE,CACvK;YACH;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AACD;;;;"}
package/types/Map.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Map.js","sources":["../../src/types/Map.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVMap<K extends XVType<any> = any, V extends XVType<any> = any> extends XVType<Map<Infer<K>, Infer<V>>> {\r\n constructor(readonly Mapkey: K, readonly Mapvalue: V) {\r\n super();\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.Mapkey.parse(k) as Infer<K>;\r\n const parsedValue = this.Mapvalue.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.Mapkey.constructor.name} and value of type ${this.Mapvalue.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,KAAgE,SAAQ,MAA+B,CAAA;IAC1G,WAAA,CAAqB,MAAS,EAAW,QAAW,EAAA;AACjD,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,MAAM,GAAN,MAAM;QAAc,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAEjD;AAEU,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;QACrE;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB;AAE5C,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAK,KAAa,CAAC,OAAO,EAAE,EAAE;AAC5C,YAAA,IAAI;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAa;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAa;AACtD,gBAAA,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC;YACrC;YAAE,OAAO,GAAG,EAAE;gBACX,MAAM,IAAI,KAAK,CACZ,CAAA,kCAAA,EAAqC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAA,mBAAA,EAAsB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAA,gBAAA,EAAmB,OAAO,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,CAAA,CAAE,CACxK;YACJ;QACH;AAEA,QAAA,OAAO,MAAM;IAChB;AACF;;;;"}
1
+ {"version":3,"file":"Map.js","sources":["../../src/types/Map.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVMap<\r\n K extends XVType<any> = any,\r\n V extends XVType<any> = any,\r\n> extends XVType<Map<Infer<K>, Infer<V>>> {\r\n constructor(\r\n readonly Mapkey: K,\r\n readonly Mapvalue: V,\r\n ) {\r\n super();\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.Mapkey.parse(k) as Infer<K>;\r\n const parsedValue = this.Mapvalue.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.Mapkey.constructor.name} and value of type ${this.Mapvalue.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,KAGJ,SAAQ,MAA+B,CAAA;IACvC,WAAA,CACW,MAAS,EACT,QAAW,EAAA;AAEpB,QAAA,KAAK,EAAE;QAHE,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAGnB;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,EAAE,KAAK,YAAY,GAAG,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,OAAO,KAAK,CAAA,CAAE,CAAC;QACpE;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB;AAE5C,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAK,KAAa,CAAC,OAAO,EAAE,EAAE;AAC7C,YAAA,IAAI;gBACF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAa;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAa;AACtD,gBAAA,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC;YACpC;YAAE,OAAO,GAAG,EAAE;gBACZ,MAAM,IAAI,KAAK,CACb,CAAA,kCAAA,EAAqC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAA,mBAAA,EAAsB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAA,gBAAA,EAAmB,OAAO,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,CAAA,CAAE,CACvK;YACH;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Object.cjs","sources":["../../src/types/Object.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nexport type XVObjectShape = Record<string, XVType<any>>;\r\n\r\nclass XVObject<const T extends XVObjectShape> extends XVType<Infer<T>> {\r\n constructor(readonly objectArg: T) {\r\n super();\r\n }\r\n\r\n protected check(value: unknown): Infer<T> {\r\n if (typeof value !== \"object\" || value === null) {\r\n throw new Error(\"Value must be an object\");\r\n }\r\n\r\n const result = {} as Infer<T>;\r\n\r\n for (const key in this.objectArg) {\r\n const itemType = this.objectArg[key];\r\n result[key] = itemType.parse((value as any)[key]);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVObject;\r\n"],"names":[],"mappings":";;;;AAKA,MAAM,QAAwC,SAAQ,MAAgB,CAAA;AACnE,IAAA,WAAA,CAAqB,SAAY,EAAA;AAC9B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,SAAS,GAAT,SAAS;IAE9B;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC9C,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;QAC7C;QAEA,MAAM,MAAM,GAAG,EAAc;AAE7B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACpC,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAE,KAAa,CAAC,GAAG,CAAC,CAAC;QACpD;AAEA,QAAA,OAAO,MAAM;IAChB;AACF;;;;"}
1
+ {"version":3,"file":"Object.cjs","sources":["../../src/types/Object.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nexport type XVObjectShape = Record<string | number, XVType<any>>;\r\n\r\nclass XVObject<const T extends XVObjectShape> extends XVType<Infer<T>> {\r\n constructor(readonly objectArg: T) {\r\n super();\r\n }\r\n\r\n protected check(value: unknown): Infer<T> {\r\n if (typeof value !== \"object\" || value === null) {\r\n throw new Error(\"Value must be an object\");\r\n }\r\n\r\n const result = {} as Infer<T>;\r\n\r\n for (const key in this.objectArg) {\r\n const itemType = this.objectArg[key];\r\n result[key] = itemType.parse((value as any)[key]);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVObject;\r\n"],"names":[],"mappings":";;;;AAKA,MAAM,QAAwC,SAAQ,MAAgB,CAAA;AACpE,IAAA,WAAA,CAAqB,SAAY,EAAA;AAC/B,QAAA,KAAK,EAAE;QADY,IAAA,CAAA,SAAS,GAAT,SAAS;IAE9B;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC/C,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;QAC5C;QAEA,MAAM,MAAM,GAAG,EAAc;AAE7B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACpC,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAE,KAAa,CAAC,GAAG,CAAC,CAAC;QACnD;AAEA,QAAA,OAAO,MAAM;IACf;AACD;;;;"}
package/types/Object.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import XVType from '../XVType.js';
2
2
  import { Infer } from '../types.js';
3
3
 
4
- type XVObjectShape = Record<string, XVType<any>>;
4
+ type XVObjectShape = Record<string | number, XVType<any>>;
5
5
  declare class XVObject<const T extends XVObjectShape> extends XVType<Infer<T>> {
6
6
  readonly objectArg: T;
7
7
  constructor(objectArg: T);
@@ -1 +1 @@
1
- {"version":3,"file":"Object.js","sources":["../../src/types/Object.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nexport type XVObjectShape = Record<string, XVType<any>>;\r\n\r\nclass XVObject<const T extends XVObjectShape> extends XVType<Infer<T>> {\r\n constructor(readonly objectArg: T) {\r\n super();\r\n }\r\n\r\n protected check(value: unknown): Infer<T> {\r\n if (typeof value !== \"object\" || value === null) {\r\n throw new Error(\"Value must be an object\");\r\n }\r\n\r\n const result = {} as Infer<T>;\r\n\r\n for (const key in this.objectArg) {\r\n const itemType = this.objectArg[key];\r\n result[key] = itemType.parse((value as any)[key]);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVObject;\r\n"],"names":[],"mappings":";;AAKA,MAAM,QAAwC,SAAQ,MAAgB,CAAA;AACnE,IAAA,WAAA,CAAqB,SAAY,EAAA;AAC9B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,SAAS,GAAT,SAAS;IAE9B;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC9C,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;QAC7C;QAEA,MAAM,MAAM,GAAG,EAAc;AAE7B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACpC,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAE,KAAa,CAAC,GAAG,CAAC,CAAC;QACpD;AAEA,QAAA,OAAO,MAAM;IAChB;AACF;;;;"}
1
+ {"version":3,"file":"Object.js","sources":["../../src/types/Object.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nexport type XVObjectShape = Record<string | number, XVType<any>>;\r\n\r\nclass XVObject<const T extends XVObjectShape> extends XVType<Infer<T>> {\r\n constructor(readonly objectArg: T) {\r\n super();\r\n }\r\n\r\n protected check(value: unknown): Infer<T> {\r\n if (typeof value !== \"object\" || value === null) {\r\n throw new Error(\"Value must be an object\");\r\n }\r\n\r\n const result = {} as Infer<T>;\r\n\r\n for (const key in this.objectArg) {\r\n const itemType = this.objectArg[key];\r\n result[key] = itemType.parse((value as any)[key]);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVObject;\r\n"],"names":[],"mappings":";;AAKA,MAAM,QAAwC,SAAQ,MAAgB,CAAA;AACpE,IAAA,WAAA,CAAqB,SAAY,EAAA;AAC/B,QAAA,KAAK,EAAE;QADY,IAAA,CAAA,SAAS,GAAT,SAAS;IAE9B;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC/C,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;QAC5C;QAEA,MAAM,MAAM,GAAG,EAAc;AAE7B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACpC,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAE,KAAa,CAAC,GAAG,CAAC,CAAC;QACnD;AAEA,QAAA,OAAO,MAAM;IACf;AACD;;;;"}
package/types/Promise.cjs CHANGED
@@ -15,7 +15,6 @@ class XVPromise extends XVType {
15
15
  }
16
16
  parse(value) {
17
17
  super.parse(value);
18
- // Wrap the promise so the resolved value is validated
19
18
  return value.then((res) => {
20
19
  if (this.PromiseInner) {
21
20
  this.PromiseInner.parse(res);
@@ -1 +1 @@
1
- {"version":3,"file":"Promise.cjs","sources":["../../src/types/Promise.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nclass XVPromise<T extends XVType<any>> extends XVType<Promise<Infer<T>>> {\r\n constructor(readonly PromiseInner: T) {\r\n super();\r\n }\r\n\r\n protected check(value: any): Promise<Infer<T>> {\r\n if (!(value instanceof Promise)) {\r\n throw new Error(`Value should be a Promise, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n\r\n parse(value: any): Promise<Infer<T>> {\r\n super.parse(value);\r\n\r\n // Wrap the promise so the resolved value is validated\r\n return (value as Promise<any>).then((res) => {\r\n if (this.PromiseInner) {\r\n this.PromiseInner.parse(res);\r\n }\r\n return res;\r\n });\r\n }\r\n}\r\n\r\nexport default XVPromise;\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,SAAiC,SAAQ,MAAyB,CAAA;AACrE,IAAA,WAAA,CAAqB,YAAe,EAAA;AACjC,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,YAAY,GAAZ,YAAY;IAEjC;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,EAAE,KAAK,YAAY,OAAO,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,KAAK,CAAA,CAAE,CAAC;QACzE;AACA,QAAA,OAAO,KAAK;IACf;AAEA,IAAA,KAAK,CAAC,KAAU,EAAA;AACb,QAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;;AAGlB,QAAA,OAAQ,KAAsB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AACzC,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACpB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;YAC/B;AACA,YAAA,OAAO,GAAG;AACb,QAAA,CAAC,CAAC;IACL;AACF;;;;"}
1
+ {"version":3,"file":"Promise.cjs","sources":["../../src/types/Promise.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nclass XVPromise<T extends XVType<any>> extends XVType<Promise<Infer<T>>> {\r\n constructor(readonly PromiseInner: T) {\r\n super();\r\n }\r\n\r\n protected check(value: any): Promise<Infer<T>> {\r\n if (!(value instanceof Promise)) {\r\n throw new Error(`Value should be a Promise, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n\r\n parse(value: any): Promise<Infer<T>> {\r\n super.parse(value);\r\n return (value as Promise<any>).then((res) => {\r\n if (this.PromiseInner) {\r\n this.PromiseInner.parse(res);\r\n }\r\n return res;\r\n });\r\n }\r\n}\r\n\r\nexport default XVPromise;\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,SAAiC,SAAQ,MAAyB,CAAA;AACtE,IAAA,WAAA,CAAqB,YAAe,EAAA;AAClC,QAAA,KAAK,EAAE;QADY,IAAA,CAAA,YAAY,GAAZ,YAAY;IAEjC;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,EAAE,KAAK,YAAY,OAAO,CAAC,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,KAAK,CAAA,CAAE,CAAC;QACxE;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,KAAK,CAAC,KAAU,EAAA;AACd,QAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAClB,QAAA,OAAQ,KAAsB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AAC1C,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;YAC9B;AACA,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
package/types/Promise.js CHANGED
@@ -13,7 +13,6 @@ class XVPromise extends XVType {
13
13
  }
14
14
  parse(value) {
15
15
  super.parse(value);
16
- // Wrap the promise so the resolved value is validated
17
16
  return value.then((res) => {
18
17
  if (this.PromiseInner) {
19
18
  this.PromiseInner.parse(res);
@@ -1 +1 @@
1
- {"version":3,"file":"Promise.js","sources":["../../src/types/Promise.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nclass XVPromise<T extends XVType<any>> extends XVType<Promise<Infer<T>>> {\r\n constructor(readonly PromiseInner: T) {\r\n super();\r\n }\r\n\r\n protected check(value: any): Promise<Infer<T>> {\r\n if (!(value instanceof Promise)) {\r\n throw new Error(`Value should be a Promise, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n\r\n parse(value: any): Promise<Infer<T>> {\r\n super.parse(value);\r\n\r\n // Wrap the promise so the resolved value is validated\r\n return (value as Promise<any>).then((res) => {\r\n if (this.PromiseInner) {\r\n this.PromiseInner.parse(res);\r\n }\r\n return res;\r\n });\r\n }\r\n}\r\n\r\nexport default XVPromise;\r\n"],"names":[],"mappings":";;AAGA,MAAM,SAAiC,SAAQ,MAAyB,CAAA;AACrE,IAAA,WAAA,CAAqB,YAAe,EAAA;AACjC,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,YAAY,GAAZ,YAAY;IAEjC;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,EAAE,KAAK,YAAY,OAAO,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,KAAK,CAAA,CAAE,CAAC;QACzE;AACA,QAAA,OAAO,KAAK;IACf;AAEA,IAAA,KAAK,CAAC,KAAU,EAAA;AACb,QAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;;AAGlB,QAAA,OAAQ,KAAsB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AACzC,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACpB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;YAC/B;AACA,YAAA,OAAO,GAAG;AACb,QAAA,CAAC,CAAC;IACL;AACF;;;;"}
1
+ {"version":3,"file":"Promise.js","sources":["../../src/types/Promise.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nclass XVPromise<T extends XVType<any>> extends XVType<Promise<Infer<T>>> {\r\n constructor(readonly PromiseInner: T) {\r\n super();\r\n }\r\n\r\n protected check(value: any): Promise<Infer<T>> {\r\n if (!(value instanceof Promise)) {\r\n throw new Error(`Value should be a Promise, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n\r\n parse(value: any): Promise<Infer<T>> {\r\n super.parse(value);\r\n return (value as Promise<any>).then((res) => {\r\n if (this.PromiseInner) {\r\n this.PromiseInner.parse(res);\r\n }\r\n return res;\r\n });\r\n }\r\n}\r\n\r\nexport default XVPromise;\r\n"],"names":[],"mappings":";;AAGA,MAAM,SAAiC,SAAQ,MAAyB,CAAA;AACtE,IAAA,WAAA,CAAqB,YAAe,EAAA;AAClC,QAAA,KAAK,EAAE;QADY,IAAA,CAAA,YAAY,GAAZ,YAAY;IAEjC;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,EAAE,KAAK,YAAY,OAAO,CAAC,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,KAAK,CAAA,CAAE,CAAC;QACxE;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,KAAK,CAAC,KAAU,EAAA;AACd,QAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAClB,QAAA,OAAQ,KAAsB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AAC1C,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;YAC9B;AACA,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
package/types/Record.cjs CHANGED
@@ -9,7 +9,7 @@ class XVRecord extends XVType {
9
9
  this.recordValue = recordValue;
10
10
  }
11
11
  check(value) {
12
- if (typeof value !== 'object' || value === null || Array.isArray(value)) {
12
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
13
13
  throw new Error(`Value should be a record, received ${typeof value}`);
14
14
  }
15
15
  for (const [k, v] of Object.entries(value)) {
@@ -1 +1 @@
1
- {"version":3,"file":"Record.cjs","sources":["../../src/types/Record.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVRecord<K extends XVType<any>, V extends XVType<any>> extends XVType<Record<Infer<K>, Infer<V>>> {\r\n constructor(readonly recordKey: K, readonly recordValue: V) {\r\n super();\r\n }\r\n\r\n protected check(value: any): Record<Infer<K>, Infer<V>> {\r\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\r\n throw new Error(`Value should be a record, received ${typeof value}`);\r\n }\r\n\r\n for (const [k, v] of Object.entries(value)) {\r\n try {\r\n this.recordKey.parse(k);\r\n value[k] = this.recordValue.parse(v);\r\n } catch (error) {\r\n throw new Error(`Record entry '${k}' should have key of type ${this.recordKey.constructor.name} and value of type ${this.recordValue.constructor.name}, received key: ${typeof k}, value: ${typeof v}`);\r\n }\r\n }\r\n return value;\r\n }\r\n\r\n}\r\n\r\nexport default XVRecord;"],"names":[],"mappings":";;;;AAGA,MAAM,QAAuD,SAAQ,MAAkC,CAAA;IACpG,WAAA,CAAqB,SAAY,EAAW,WAAc,EAAA;AACvD,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,SAAS,GAAT,SAAS;QAAc,IAAA,CAAA,WAAW,GAAX,WAAW;IAEvD;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtE,MAAM,IAAI,KAAK,CAAC,CAAA,mCAAA,EAAsC,OAAO,KAAK,CAAA,CAAE,CAAC;QACxE;AAEA,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzC,YAAA,IAAI;AACD,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACvC;YAAE,OAAO,KAAK,EAAE;AACb,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,cAAA,EAAiB,CAAC,CAAA,0BAAA,EAA6B,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,CAAC;YAC1M;QACH;AACA,QAAA,OAAO,KAAK;IACf;AAEF;;;;"}
1
+ {"version":3,"file":"Record.cjs","sources":["../../src/types/Record.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVRecord<K extends XVType<any>, V extends XVType<any>> extends XVType<\r\n Partial<Record<Infer<K>, Infer<V>>>\r\n> {\r\n constructor(\r\n readonly recordKey: K,\r\n readonly recordValue: V,\r\n ) {\r\n super();\r\n }\r\n\r\n protected check(value: any): Record<Infer<K>, Infer<V>> {\r\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\r\n throw new Error(`Value should be a record, received ${typeof value}`);\r\n }\r\n\r\n for (const [k, v] of Object.entries(value)) {\r\n try {\r\n this.recordKey.parse(k);\r\n value[k] = this.recordValue.parse(v);\r\n } catch (error) {\r\n throw new Error(\r\n `Record entry '${k}' should have key of type ${this.recordKey.constructor.name} and value of type ${this.recordValue.constructor.name}, received key: ${typeof k}, value: ${typeof v}`,\r\n );\r\n }\r\n }\r\n return value;\r\n }\r\n}\r\n\r\nexport default XVRecord;\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,QAAuD,SAAQ,MAEpE,CAAA;IACC,WAAA,CACW,SAAY,EACZ,WAAc,EAAA;AAEvB,QAAA,KAAK,EAAE;QAHE,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,WAAW,GAAX,WAAW;IAGtB;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvE,MAAM,IAAI,KAAK,CAAC,CAAA,mCAAA,EAAsC,OAAO,KAAK,CAAA,CAAE,CAAC;QACvE;AAEA,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC1C,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CACb,CAAA,cAAA,EAAiB,CAAC,CAAA,0BAAA,EAA6B,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,CACvL;YACH;QACF;AACA,QAAA,OAAO,KAAK;IACd;AACD;;;;"}
package/types/Record.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Infer } from '../types.js';
2
2
  import XVType from '../XVType.js';
3
3
 
4
- declare class XVRecord<K extends XVType<any>, V extends XVType<any>> extends XVType<Record<Infer<K>, Infer<V>>> {
4
+ declare class XVRecord<K extends XVType<any>, V extends XVType<any>> extends XVType<Partial<Record<Infer<K>, Infer<V>>>> {
5
5
  readonly recordKey: K;
6
6
  readonly recordValue: V;
7
7
  constructor(recordKey: K, recordValue: V);
package/types/Record.js CHANGED
@@ -7,7 +7,7 @@ class XVRecord extends XVType {
7
7
  this.recordValue = recordValue;
8
8
  }
9
9
  check(value) {
10
- if (typeof value !== 'object' || value === null || Array.isArray(value)) {
10
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
11
11
  throw new Error(`Value should be a record, received ${typeof value}`);
12
12
  }
13
13
  for (const [k, v] of Object.entries(value)) {
@@ -1 +1 @@
1
- {"version":3,"file":"Record.js","sources":["../../src/types/Record.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVRecord<K extends XVType<any>, V extends XVType<any>> extends XVType<Record<Infer<K>, Infer<V>>> {\r\n constructor(readonly recordKey: K, readonly recordValue: V) {\r\n super();\r\n }\r\n\r\n protected check(value: any): Record<Infer<K>, Infer<V>> {\r\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\r\n throw new Error(`Value should be a record, received ${typeof value}`);\r\n }\r\n\r\n for (const [k, v] of Object.entries(value)) {\r\n try {\r\n this.recordKey.parse(k);\r\n value[k] = this.recordValue.parse(v);\r\n } catch (error) {\r\n throw new Error(`Record entry '${k}' should have key of type ${this.recordKey.constructor.name} and value of type ${this.recordValue.constructor.name}, received key: ${typeof k}, value: ${typeof v}`);\r\n }\r\n }\r\n return value;\r\n }\r\n\r\n}\r\n\r\nexport default XVRecord;"],"names":[],"mappings":";;AAGA,MAAM,QAAuD,SAAQ,MAAkC,CAAA;IACpG,WAAA,CAAqB,SAAY,EAAW,WAAc,EAAA;AACvD,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,SAAS,GAAT,SAAS;QAAc,IAAA,CAAA,WAAW,GAAX,WAAW;IAEvD;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtE,MAAM,IAAI,KAAK,CAAC,CAAA,mCAAA,EAAsC,OAAO,KAAK,CAAA,CAAE,CAAC;QACxE;AAEA,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzC,YAAA,IAAI;AACD,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACvC;YAAE,OAAO,KAAK,EAAE;AACb,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,cAAA,EAAiB,CAAC,CAAA,0BAAA,EAA6B,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,CAAC;YAC1M;QACH;AACA,QAAA,OAAO,KAAK;IACf;AAEF;;;;"}
1
+ {"version":3,"file":"Record.js","sources":["../../src/types/Record.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVRecord<K extends XVType<any>, V extends XVType<any>> extends XVType<\r\n Partial<Record<Infer<K>, Infer<V>>>\r\n> {\r\n constructor(\r\n readonly recordKey: K,\r\n readonly recordValue: V,\r\n ) {\r\n super();\r\n }\r\n\r\n protected check(value: any): Record<Infer<K>, Infer<V>> {\r\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\r\n throw new Error(`Value should be a record, received ${typeof value}`);\r\n }\r\n\r\n for (const [k, v] of Object.entries(value)) {\r\n try {\r\n this.recordKey.parse(k);\r\n value[k] = this.recordValue.parse(v);\r\n } catch (error) {\r\n throw new Error(\r\n `Record entry '${k}' should have key of type ${this.recordKey.constructor.name} and value of type ${this.recordValue.constructor.name}, received key: ${typeof k}, value: ${typeof v}`,\r\n );\r\n }\r\n }\r\n return value;\r\n }\r\n}\r\n\r\nexport default XVRecord;\r\n"],"names":[],"mappings":";;AAGA,MAAM,QAAuD,SAAQ,MAEpE,CAAA;IACC,WAAA,CACW,SAAY,EACZ,WAAc,EAAA;AAEvB,QAAA,KAAK,EAAE;QAHE,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,WAAW,GAAX,WAAW;IAGtB;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvE,MAAM,IAAI,KAAK,CAAC,CAAA,mCAAA,EAAsC,OAAO,KAAK,CAAA,CAAE,CAAC;QACvE;AAEA,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC1C,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CACb,CAAA,cAAA,EAAiB,CAAC,CAAA,0BAAA,EAA6B,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,CACvL;YACH;QACF;AACA,QAAA,OAAO,KAAK;IACd;AACD;;;;"}