xanv 1.1.0 → 1.1.2

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.d.ts CHANGED
@@ -13,6 +13,7 @@ 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 XVJson from './types/Json.js';
16
17
  import { XVEnumValues } from './types.js';
17
18
  export { XVCheckCallback, XVInstanceType, XVObjectType, XVObjectValueType } from './types.js';
18
19
 
@@ -39,6 +40,7 @@ interface XVStatic {
39
40
  string(): XVString<string> & XVInstanceOf<string>;
40
41
  string(length: number): XVString<string> & XVInstanceOf<string>;
41
42
  any(): XVAny<any> & XVInstanceOf<any>;
43
+ json(): XVJson & XVInstanceOf<object>;
42
44
  }
43
45
  type XVInstanceOf<T = any> = XanvType<any, T> & {
44
46
  meta: {
@@ -48,7 +50,7 @@ type XVInstanceOf<T = any> = XanvType<any, T> & {
48
50
  transform: ((value: T) => T) | undefined;
49
51
  };
50
52
  };
51
- type Infer<T> = T extends XVInstanceOf<infer U> ? U : T extends XVString ? string : T extends XVNumber ? number : T extends XVBoolean ? boolean : T extends XVDate ? Date : T extends XVAny ? any : T extends XVFile ? File | Blob : T extends XVEnum ? (string | number) : T extends XVArray ? any[] : T extends XVTuple ? any[] : T extends XVUnion ? any : T extends XVMap ? Map<any, any> : T extends XVSet ? Set<any> : T extends XVRecord ? Record<string, any> : T extends XVObject ? (T extends {
53
+ type Infer<T> = T extends XVInstanceOf<infer U> ? U : T extends XVString ? string : T extends XVNumber ? number : T extends XVBoolean ? boolean : T extends XVDate ? Date : T extends XVAny ? any : T extends XVFile ? File | Blob : T extends XVEnum ? (string | number) : T extends XVArray ? any[] : T extends XVTuple ? any[] : T extends XVUnion ? any : T extends XVMap ? Map<any, any> : T extends XVSet ? Set<any> : T extends XVRecord ? Record<string, any> : T extends XVJson ? object : T extends XVObject ? (T extends {
52
54
  arg?: infer O;
53
55
  } ? {
54
56
  [K in keyof O]: Infer<O[K]>;
@@ -60,5 +62,5 @@ declare namespace xv {
60
62
  type infer<T> = Infer<T>;
61
63
  }
62
64
 
63
- export { XVAny, XVArray, XVBoolean, XVDate, XVEnum, XVEnumValues, XVFile, XVMap, XVNumber, XVObject, XVRecord, XVSet, XVString, XVTuple, XVUnion, XanvType, xv };
65
+ export { XVAny, XVArray, XVBoolean, XVDate, XVEnum, XVEnumValues, XVFile, XVJson, XVMap, XVNumber, XVObject, XVRecord, XVSet, XVString, XVTuple, XVUnion, XanvType, xv };
64
66
  export type { Infer, XVInstanceOf, XVStatic };
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var XanvType=require('./XanvType.js'),Any=require('./types/Any.js'),Array=require('./types/Array.js'),Boolean=require('./types/Boolean.js'),Date=require('./types/Date.js'),Enum=require('./types/Enum.js'),File=require('./types/File.js'),Map=require('./types/Map.js'),Number=require('./types/Number.js'),Object$1=require('./types/Object.js'),Record=require('./types/Record.js'),Set=require('./types/Set.js'),String=require('./types/String.js'),Tuple=require('./types/Tuple.js'),Union=require('./types/Union.js');const _xv = {
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var XanvType=require('./XanvType.js'),Any=require('./types/Any.js'),Array=require('./types/Array.js'),Boolean=require('./types/Boolean.js'),Date=require('./types/Date.js'),Enum=require('./types/Enum.js'),File=require('./types/File.js'),Map=require('./types/Map.js'),Number=require('./types/Number.js'),Object$1=require('./types/Object.js'),Record=require('./types/Record.js'),Set=require('./types/Set.js'),String=require('./types/String.js'),Tuple=require('./types/Tuple.js'),Union=require('./types/Union.js'),Json=require('./types/Json.js');const _xv = {
2
2
  array: (type, length) => new Array.default(type, length),
3
3
  boolean: () => new Boolean.default(),
4
4
  date: () => new Date.default(),
@@ -11,5 +11,7 @@
11
11
  string: (length) => new String.default(length),
12
12
  tuple: (type) => new Tuple.default(type),
13
13
  union: (type) => new Union.default(type),
14
+ any: () => new Any.default(),
15
+ json: () => new Json.default(),
14
16
  };
15
- const xv = _xv;exports.XanvType=XanvType.default;exports.XVAny=Any.default;exports.XVArray=Array.default;exports.XVBoolean=Boolean.default;exports.XVDate=Date.default;exports.XVEnum=Enum.default;exports.XVFile=File.default;exports.XVMap=Map.default;exports.XVNumber=Number.default;exports.XVObject=Object$1.default;exports.XVRecord=Record.default;exports.XVSet=Set.default;exports.XVString=String.default;exports.XVTuple=Tuple.default;exports.XVUnion=Union.default;exports.xv=xv;//# sourceMappingURL=index.js.map
17
+ const xv = _xv;exports.XanvType=XanvType.default;exports.XVAny=Any.default;exports.XVArray=Array.default;exports.XVBoolean=Boolean.default;exports.XVDate=Date.default;exports.XVEnum=Enum.default;exports.XVFile=File.default;exports.XVMap=Map.default;exports.XVNumber=Number.default;exports.XVObject=Object$1.default;exports.XVRecord=Record.default;exports.XVSet=Set.default;exports.XVString=String.default;exports.XVTuple=Tuple.default;exports.XVUnion=Union.default;exports.XVJson=Json.default;exports.xv=xv;//# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import XanvType from \"./XanvType\";\nimport XVAny from \"./types/Any\";\nimport XVArray from \"./types/Array\";\nimport XVBoolean from \"./types/Boolean\";\nimport XVDate from \"./types/Date\";\nimport XVEnum from \"./types/Enum\";\nimport XVFile from \"./types/File\";\nimport XVMap from \"./types/Map\";\nimport XVNumber from \"./types/Number\";\nimport XVObject from \"./types/Object\";\nimport XVRecord from \"./types/Record\";\nimport XVSet from \"./types/Set\";\nimport XVString from \"./types/String\";\nimport XVTuple from \"./types/Tuple\";\nimport XVUnion from \"./types/Union\";\n\nimport {\n XVEnumValues,\n XVInstanceType,\n XVObjectType,\n XVCheckCallback,\n XVObjectValueType,\n} from \"./types\";\n\nexport type {\n XVEnumValues,\n XVInstanceType,\n XVObjectType,\n XVCheckCallback,\n XVObjectValueType,\n};\n\nexport {\n XanvType,\n XVAny,\n XVArray,\n XVBoolean,\n XVDate,\n XVEnum,\n XVFile,\n XVMap,\n XVNumber,\n XVObject,\n XVRecord,\n XVSet,\n XVString,\n XVTuple,\n XVUnion,\n};\n\nconst _xv = {\n array: (type: XVInstanceType, length?: number) => new XVArray(type, length),\n boolean: () => new XVBoolean(),\n date: () => new XVDate(),\n enum: (values: XVEnumValues) => new XVEnum(values),\n map: (key: XVInstanceType, value: XVInstanceType) => new XVMap(key, value),\n number: (length?: number) => new XVNumber(length),\n object: (arg?: XVObjectType) => new XVObject(arg),\n record: (key: XVInstanceType, value: XVInstanceType) => new XVRecord(key, value),\n set: (type: XVInstanceType) => new XVSet(type),\n string: (length?: number) => new XVString(length),\n tuple: (type: XVInstanceType[]) => new XVTuple(type),\n union: (type: XVInstanceType[]) => new XVUnion(type),\n}\n\n// Strongly-typed factory signatures for compile-time only usage\nexport interface XVStatic {\n array<T>(type: XVInstanceOf<T>, length?: number): XVArray<T> & XVInstanceOf<T[]>;\n tuple<T extends any[]>(types: { [K in keyof T]: XVInstanceOf<T[K]> }): XVTuple<T> & XVInstanceOf<T>;\n union<T extends any[]>(types: { [K in keyof T]: XVInstanceOf<T[K]> }): XVUnion<T> & XVInstanceOf<T>;\n boolean(): XVBoolean<boolean> & XVInstanceOf<boolean>;\n date(): XVDate<Date> & XVInstanceOf<Date>;\n enum<T extends string | number = string | number>(values: XVEnumValues): XVEnum<T> & XVInstanceOf<T>;\n map<K, V>(key: XVInstanceOf<K>, value: XVInstanceOf<V>): XVMap<K, V> & XVInstanceOf<Map<K, V>>;\n number(): XVNumber<number> & XVInstanceOf<number>;\n object<S extends Record<string, any> = Record<string, any>>(arg?: { [K in keyof S]: XVInstanceOf<S[K]> }): XVObject<S> & XVInstanceOf<{ [K in keyof S]: S[K] }>;\n record<K extends string = string, V = any>(key: XVInstanceOf<K>, value: XVInstanceOf<V>): XVRecord<K, V> & XVInstanceOf<Record<K, V>>;\n set<T>(type: XVInstanceOf<T>): XVSet<T> & XVInstanceOf<Set<T>>;\n string(): XVString<string> & XVInstanceOf<string>;\n string(length: number): XVString<string> & XVInstanceOf<string>;\n any(): XVAny<any> & XVInstanceOf<any>;\n}\n\nexport const xv = _xv as unknown as XVStatic;\n\n// Type-level inference utility\n// Use: type T = Infer<typeof schema>\n// Phantom generic wrapper type for compile-time inference.\n// Factory helpers will annotate returned instances with this to carry type information.\nexport type XVInstanceOf<T = any> = XanvType<any, T> & {\n meta: {\n optional: T extends undefined ? true : false,\n nullable: T extends null ? true : false,\n default: T | (() => T) | undefined,\n transform: ((value: T) => T) | undefined,\n }\n};\n\nexport type Infer<T> =\n // If the value is an XVInstanceOf carrying a compile-time type, extract it\n T extends XVInstanceOf<infer U> ? U :\n // direct XV class instances without phantom info (fallbacks)\n T extends XVString ? string :\n T extends XVNumber ? number :\n T extends XVBoolean ? boolean :\n T extends XVDate ? Date :\n T extends XVAny ? any :\n T extends XVFile ? File | Blob :\n T extends XVEnum ? (string | number) :\n T extends XVArray ? any[] :\n T extends XVTuple ? any[] :\n T extends XVUnion ? any :\n T extends XVMap ? Map<any, any> :\n T extends XVSet ? Set<any> :\n T extends XVRecord ? Record<string, any> :\n // XVObject with an `arg` schema\n T extends XVObject ? (T extends { arg?: infer O } ? { [K in keyof O]: Infer<O[K]> } : any) :\n // Plain schema object (e.g. { a: xv.string(), b: xv.number() }) — recurse\n T extends object ? { [K in keyof T]: Infer<T[K]> } :\n any;\n\n// Merge types onto the runtime `xv` export so users can write `type T = xv.infer<typeof schema>`\nexport namespace xv {\n export type infer<T> = Infer<T>;\n}\n\n"],"names":["XVArray","XVBoolean","XVDate","XVEnum","XVMap","XVNumber","XVObject","XVRecord","XVSet","XVString","XVTuple","XVUnion"],"mappings":"okBAkDA,MAAM,GAAG,GAAG;AACT,IAAA,KAAK,EAAE,CAAC,IAAoB,EAAE,MAAe,KAAK,IAAIA,aAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AAC3E,IAAA,OAAO,EAAE,MAAM,IAAIC,eAAS,EAAE;AAC9B,IAAA,IAAI,EAAE,MAAM,IAAIC,YAAM,EAAE;IACxB,IAAI,EAAE,CAAC,MAAoB,KAAK,IAAIC,YAAM,CAAC,MAAM,CAAC;AAClD,IAAA,GAAG,EAAE,CAAC,GAAmB,EAAE,KAAqB,KAAK,IAAIC,WAAK,CAAC,GAAG,EAAE,KAAK,CAAC;IAC1E,MAAM,EAAE,CAAC,MAAe,KAAK,IAAIC,cAAQ,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAC,GAAkB,KAAK,IAAIC,gBAAQ,CAAC,GAAG,CAAC;AACjD,IAAA,MAAM,EAAE,CAAC,GAAmB,EAAE,KAAqB,KAAK,IAAIC,cAAQ,CAAC,GAAG,EAAE,KAAK,CAAC;IAChF,GAAG,EAAE,CAAC,IAAoB,KAAK,IAAIC,WAAK,CAAC,IAAI,CAAC;IAC9C,MAAM,EAAE,CAAC,MAAe,KAAK,IAAIC,cAAQ,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAAC,IAAsB,KAAK,IAAIC,aAAO,CAAC,IAAI,CAAC;IACpD,KAAK,EAAE,CAAC,IAAsB,KAAK,IAAIC,aAAO,CAAC,IAAI,CAAC;CACtD;AAoBM,MAAM,EAAE,GAAG"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import XanvType from \"./XanvType\";\nimport XVAny from \"./types/Any\";\nimport XVArray from \"./types/Array\";\nimport XVBoolean from \"./types/Boolean\";\nimport XVDate from \"./types/Date\";\nimport XVEnum from \"./types/Enum\";\nimport XVFile from \"./types/File\";\nimport XVMap from \"./types/Map\";\nimport XVNumber from \"./types/Number\";\nimport XVObject from \"./types/Object\";\nimport XVRecord from \"./types/Record\";\nimport XVSet from \"./types/Set\";\nimport XVString from \"./types/String\";\nimport XVTuple from \"./types/Tuple\";\nimport XVUnion from \"./types/Union\";\nimport XVJson from \"./types/Json\";\n\nimport {\n XVEnumValues,\n XVInstanceType,\n XVObjectType,\n XVCheckCallback,\n XVObjectValueType,\n} from \"./types\";\n\nexport type {\n XVEnumValues,\n XVInstanceType,\n XVObjectType,\n XVCheckCallback,\n XVObjectValueType,\n};\n\nexport {\n XanvType,\n XVAny,\n XVArray,\n XVBoolean,\n XVDate,\n XVEnum,\n XVFile,\n XVMap,\n XVNumber,\n XVObject,\n XVRecord,\n XVSet,\n XVString,\n XVTuple,\n XVUnion,\n XVJson,\n};\n\nconst _xv = {\n array: (type: XVInstanceType, length?: number) => new XVArray(type, length),\n boolean: () => new XVBoolean(),\n date: () => new XVDate(),\n enum: (values: XVEnumValues) => new XVEnum(values),\n map: (key: XVInstanceType, value: XVInstanceType) => new XVMap(key, value),\n number: (length?: number) => new XVNumber(length),\n object: (arg?: XVObjectType) => new XVObject(arg),\n record: (key: XVInstanceType, value: XVInstanceType) => new XVRecord(key, value),\n set: (type: XVInstanceType) => new XVSet(type),\n string: (length?: number) => new XVString(length),\n tuple: (type: XVInstanceType[]) => new XVTuple(type),\n union: (type: XVInstanceType[]) => new XVUnion(type),\n any: () => new XVAny(),\n json: () => new XVJson(),\n}\n\n// Strongly-typed factory signatures for compile-time only usage\nexport interface XVStatic {\n array<T>(type: XVInstanceOf<T>, length?: number): XVArray<T> & XVInstanceOf<T[]>;\n tuple<T extends any[]>(types: { [K in keyof T]: XVInstanceOf<T[K]> }): XVTuple<T> & XVInstanceOf<T>;\n union<T extends any[]>(types: { [K in keyof T]: XVInstanceOf<T[K]> }): XVUnion<T> & XVInstanceOf<T>;\n boolean(): XVBoolean<boolean> & XVInstanceOf<boolean>;\n date(): XVDate<Date> & XVInstanceOf<Date>;\n enum<T extends string | number = string | number>(values: XVEnumValues): XVEnum<T> & XVInstanceOf<T>;\n map<K, V>(key: XVInstanceOf<K>, value: XVInstanceOf<V>): XVMap<K, V> & XVInstanceOf<Map<K, V>>;\n number(): XVNumber<number> & XVInstanceOf<number>;\n object<S extends Record<string, any> = Record<string, any>>(arg?: { [K in keyof S]: XVInstanceOf<S[K]> }): XVObject<S> & XVInstanceOf<{ [K in keyof S]: S[K] }>;\n record<K extends string = string, V = any>(key: XVInstanceOf<K>, value: XVInstanceOf<V>): XVRecord<K, V> & XVInstanceOf<Record<K, V>>;\n set<T>(type: XVInstanceOf<T>): XVSet<T> & XVInstanceOf<Set<T>>;\n string(): XVString<string> & XVInstanceOf<string>;\n string(length: number): XVString<string> & XVInstanceOf<string>;\n any(): XVAny<any> & XVInstanceOf<any>;\n json(): XVJson & XVInstanceOf<object>;\n}\n\nexport const xv = _xv as unknown as XVStatic;\n\n// Type-level inference utility\n// Use: type T = Infer<typeof schema>\n// Phantom generic wrapper type for compile-time inference.\n// Factory helpers will annotate returned instances with this to carry type information.\nexport type XVInstanceOf<T = any> = XanvType<any, T> & {\n meta: {\n optional: T extends undefined ? true : false,\n nullable: T extends null ? true : false,\n default: T | (() => T) | undefined,\n transform: ((value: T) => T) | undefined,\n }\n};\n\nexport type Infer<T> =\n // If the value is an XVInstanceOf carrying a compile-time type, extract it\n T extends XVInstanceOf<infer U> ? U :\n // direct XV class instances without phantom info (fallbacks)\n T extends XVString ? string :\n T extends XVNumber ? number :\n T extends XVBoolean ? boolean :\n T extends XVDate ? Date :\n T extends XVAny ? any :\n T extends XVFile ? File | Blob :\n T extends XVEnum ? (string | number) :\n T extends XVArray ? any[] :\n T extends XVTuple ? any[] :\n T extends XVUnion ? any :\n T extends XVMap ? Map<any, any> :\n T extends XVSet ? Set<any> :\n T extends XVRecord ? Record<string, any> :\n T extends XVJson ? object :\n // XVObject with an `arg` schema\n T extends XVObject ? (T extends { arg?: infer O } ? { [K in keyof O]: Infer<O[K]> } : any) :\n // Plain schema object (e.g. { a: xv.string(), b: xv.number() }) — recurse\n T extends object ? { [K in keyof T]: Infer<T[K]> } :\n any;\n\n// Merge types onto the runtime `xv` export so users can write `type T = xv.infer<typeof schema>`\nexport namespace xv {\n export type infer<T> = Infer<T>;\n}\n\n"],"names":["XVArray","XVBoolean","XVDate","XVEnum","XVMap","XVNumber","XVObject","XVRecord","XVSet","XVString","XVTuple","XVUnion","XVAny","XVJson"],"mappings":"omBAoDA,MAAM,GAAG,GAAG;AACT,IAAA,KAAK,EAAE,CAAC,IAAoB,EAAE,MAAe,KAAK,IAAIA,aAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AAC3E,IAAA,OAAO,EAAE,MAAM,IAAIC,eAAS,EAAE;AAC9B,IAAA,IAAI,EAAE,MAAM,IAAIC,YAAM,EAAE;IACxB,IAAI,EAAE,CAAC,MAAoB,KAAK,IAAIC,YAAM,CAAC,MAAM,CAAC;AAClD,IAAA,GAAG,EAAE,CAAC,GAAmB,EAAE,KAAqB,KAAK,IAAIC,WAAK,CAAC,GAAG,EAAE,KAAK,CAAC;IAC1E,MAAM,EAAE,CAAC,MAAe,KAAK,IAAIC,cAAQ,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAC,GAAkB,KAAK,IAAIC,gBAAQ,CAAC,GAAG,CAAC;AACjD,IAAA,MAAM,EAAE,CAAC,GAAmB,EAAE,KAAqB,KAAK,IAAIC,cAAQ,CAAC,GAAG,EAAE,KAAK,CAAC;IAChF,GAAG,EAAE,CAAC,IAAoB,KAAK,IAAIC,WAAK,CAAC,IAAI,CAAC;IAC9C,MAAM,EAAE,CAAC,MAAe,KAAK,IAAIC,cAAQ,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAAC,IAAsB,KAAK,IAAIC,aAAO,CAAC,IAAI,CAAC;IACpD,KAAK,EAAE,CAAC,IAAsB,KAAK,IAAIC,aAAO,CAAC,IAAI,CAAC;AACpD,IAAA,GAAG,EAAE,MAAM,IAAIC,WAAK,EAAE;AACtB,IAAA,IAAI,EAAE,MAAM,IAAIC,YAAM,EAAE;CAC1B;AAqBM,MAAM,EAAE,GAAG"}
package/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export{default as XanvType}from'./XanvType.mjs';export{default as XVAny}from'./types/Any.mjs';import XVArray from'./types/Array.mjs';import XVBoolean from'./types/Boolean.mjs';import XVDate from'./types/Date.mjs';import XVEnum from'./types/Enum.mjs';export{default as XVFile}from'./types/File.mjs';import XVMap from'./types/Map.mjs';import XVNumber from'./types/Number.mjs';import XVObject from'./types/Object.mjs';import XVRecord from'./types/Record.mjs';import XVSet from'./types/Set.mjs';import XVString from'./types/String.mjs';import XVTuple from'./types/Tuple.mjs';import XVUnion from'./types/Union.mjs';const _xv = {
1
+ export{default as XanvType}from'./XanvType.mjs';import XVAny from'./types/Any.mjs';import XVArray from'./types/Array.mjs';import XVBoolean from'./types/Boolean.mjs';import XVDate from'./types/Date.mjs';import XVEnum from'./types/Enum.mjs';export{default as XVFile}from'./types/File.mjs';import XVMap from'./types/Map.mjs';import XVNumber from'./types/Number.mjs';import XVObject from'./types/Object.mjs';import XVRecord from'./types/Record.mjs';import XVSet from'./types/Set.mjs';import XVString from'./types/String.mjs';import XVTuple from'./types/Tuple.mjs';import XVUnion from'./types/Union.mjs';import XVJson from'./types/Json.mjs';const _xv = {
2
2
  array: (type, length) => new XVArray(type, length),
3
3
  boolean: () => new XVBoolean(),
4
4
  date: () => new XVDate(),
@@ -11,5 +11,7 @@ export{default as XanvType}from'./XanvType.mjs';export{default as XVAny}from'./t
11
11
  string: (length) => new XVString(length),
12
12
  tuple: (type) => new XVTuple(type),
13
13
  union: (type) => new XVUnion(type),
14
+ any: () => new XVAny(),
15
+ json: () => new XVJson(),
14
16
  };
15
- const xv = _xv;export{XVArray,XVBoolean,XVDate,XVEnum,XVMap,XVNumber,XVObject,XVRecord,XVSet,XVString,XVTuple,XVUnion,xv};//# sourceMappingURL=index.mjs.map
17
+ const xv = _xv;export{XVAny,XVArray,XVBoolean,XVDate,XVEnum,XVJson,XVMap,XVNumber,XVObject,XVRecord,XVSet,XVString,XVTuple,XVUnion,xv};//# sourceMappingURL=index.mjs.map
package/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import XanvType from \"./XanvType\";\nimport XVAny from \"./types/Any\";\nimport XVArray from \"./types/Array\";\nimport XVBoolean from \"./types/Boolean\";\nimport XVDate from \"./types/Date\";\nimport XVEnum from \"./types/Enum\";\nimport XVFile from \"./types/File\";\nimport XVMap from \"./types/Map\";\nimport XVNumber from \"./types/Number\";\nimport XVObject from \"./types/Object\";\nimport XVRecord from \"./types/Record\";\nimport XVSet from \"./types/Set\";\nimport XVString from \"./types/String\";\nimport XVTuple from \"./types/Tuple\";\nimport XVUnion from \"./types/Union\";\n\nimport {\n XVEnumValues,\n XVInstanceType,\n XVObjectType,\n XVCheckCallback,\n XVObjectValueType,\n} from \"./types\";\n\nexport type {\n XVEnumValues,\n XVInstanceType,\n XVObjectType,\n XVCheckCallback,\n XVObjectValueType,\n};\n\nexport {\n XanvType,\n XVAny,\n XVArray,\n XVBoolean,\n XVDate,\n XVEnum,\n XVFile,\n XVMap,\n XVNumber,\n XVObject,\n XVRecord,\n XVSet,\n XVString,\n XVTuple,\n XVUnion,\n};\n\nconst _xv = {\n array: (type: XVInstanceType, length?: number) => new XVArray(type, length),\n boolean: () => new XVBoolean(),\n date: () => new XVDate(),\n enum: (values: XVEnumValues) => new XVEnum(values),\n map: (key: XVInstanceType, value: XVInstanceType) => new XVMap(key, value),\n number: (length?: number) => new XVNumber(length),\n object: (arg?: XVObjectType) => new XVObject(arg),\n record: (key: XVInstanceType, value: XVInstanceType) => new XVRecord(key, value),\n set: (type: XVInstanceType) => new XVSet(type),\n string: (length?: number) => new XVString(length),\n tuple: (type: XVInstanceType[]) => new XVTuple(type),\n union: (type: XVInstanceType[]) => new XVUnion(type),\n}\n\n// Strongly-typed factory signatures for compile-time only usage\nexport interface XVStatic {\n array<T>(type: XVInstanceOf<T>, length?: number): XVArray<T> & XVInstanceOf<T[]>;\n tuple<T extends any[]>(types: { [K in keyof T]: XVInstanceOf<T[K]> }): XVTuple<T> & XVInstanceOf<T>;\n union<T extends any[]>(types: { [K in keyof T]: XVInstanceOf<T[K]> }): XVUnion<T> & XVInstanceOf<T>;\n boolean(): XVBoolean<boolean> & XVInstanceOf<boolean>;\n date(): XVDate<Date> & XVInstanceOf<Date>;\n enum<T extends string | number = string | number>(values: XVEnumValues): XVEnum<T> & XVInstanceOf<T>;\n map<K, V>(key: XVInstanceOf<K>, value: XVInstanceOf<V>): XVMap<K, V> & XVInstanceOf<Map<K, V>>;\n number(): XVNumber<number> & XVInstanceOf<number>;\n object<S extends Record<string, any> = Record<string, any>>(arg?: { [K in keyof S]: XVInstanceOf<S[K]> }): XVObject<S> & XVInstanceOf<{ [K in keyof S]: S[K] }>;\n record<K extends string = string, V = any>(key: XVInstanceOf<K>, value: XVInstanceOf<V>): XVRecord<K, V> & XVInstanceOf<Record<K, V>>;\n set<T>(type: XVInstanceOf<T>): XVSet<T> & XVInstanceOf<Set<T>>;\n string(): XVString<string> & XVInstanceOf<string>;\n string(length: number): XVString<string> & XVInstanceOf<string>;\n any(): XVAny<any> & XVInstanceOf<any>;\n}\n\nexport const xv = _xv as unknown as XVStatic;\n\n// Type-level inference utility\n// Use: type T = Infer<typeof schema>\n// Phantom generic wrapper type for compile-time inference.\n// Factory helpers will annotate returned instances with this to carry type information.\nexport type XVInstanceOf<T = any> = XanvType<any, T> & {\n meta: {\n optional: T extends undefined ? true : false,\n nullable: T extends null ? true : false,\n default: T | (() => T) | undefined,\n transform: ((value: T) => T) | undefined,\n }\n};\n\nexport type Infer<T> =\n // If the value is an XVInstanceOf carrying a compile-time type, extract it\n T extends XVInstanceOf<infer U> ? U :\n // direct XV class instances without phantom info (fallbacks)\n T extends XVString ? string :\n T extends XVNumber ? number :\n T extends XVBoolean ? boolean :\n T extends XVDate ? Date :\n T extends XVAny ? any :\n T extends XVFile ? File | Blob :\n T extends XVEnum ? (string | number) :\n T extends XVArray ? any[] :\n T extends XVTuple ? any[] :\n T extends XVUnion ? any :\n T extends XVMap ? Map<any, any> :\n T extends XVSet ? Set<any> :\n T extends XVRecord ? Record<string, any> :\n // XVObject with an `arg` schema\n T extends XVObject ? (T extends { arg?: infer O } ? { [K in keyof O]: Infer<O[K]> } : any) :\n // Plain schema object (e.g. { a: xv.string(), b: xv.number() }) — recurse\n T extends object ? { [K in keyof T]: Infer<T[K]> } :\n any;\n\n// Merge types onto the runtime `xv` export so users can write `type T = xv.infer<typeof schema>`\nexport namespace xv {\n export type infer<T> = Infer<T>;\n}\n\n"],"names":[],"mappings":"kmBAkDA,MAAM,GAAG,GAAG;AACT,IAAA,KAAK,EAAE,CAAC,IAAoB,EAAE,MAAe,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AAC3E,IAAA,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE;AAC9B,IAAA,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE;IACxB,IAAI,EAAE,CAAC,MAAoB,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC;AAClD,IAAA,GAAG,EAAE,CAAC,GAAmB,EAAE,KAAqB,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;IAC1E,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAC,GAAkB,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC;AACjD,IAAA,MAAM,EAAE,CAAC,GAAmB,EAAE,KAAqB,KAAK,IAAI,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC;IAChF,GAAG,EAAE,CAAC,IAAoB,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;IAC9C,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAAC,IAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IACpD,KAAK,EAAE,CAAC,IAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CACtD;AAoBM,MAAM,EAAE,GAAG"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import XanvType from \"./XanvType\";\nimport XVAny from \"./types/Any\";\nimport XVArray from \"./types/Array\";\nimport XVBoolean from \"./types/Boolean\";\nimport XVDate from \"./types/Date\";\nimport XVEnum from \"./types/Enum\";\nimport XVFile from \"./types/File\";\nimport XVMap from \"./types/Map\";\nimport XVNumber from \"./types/Number\";\nimport XVObject from \"./types/Object\";\nimport XVRecord from \"./types/Record\";\nimport XVSet from \"./types/Set\";\nimport XVString from \"./types/String\";\nimport XVTuple from \"./types/Tuple\";\nimport XVUnion from \"./types/Union\";\nimport XVJson from \"./types/Json\";\n\nimport {\n XVEnumValues,\n XVInstanceType,\n XVObjectType,\n XVCheckCallback,\n XVObjectValueType,\n} from \"./types\";\n\nexport type {\n XVEnumValues,\n XVInstanceType,\n XVObjectType,\n XVCheckCallback,\n XVObjectValueType,\n};\n\nexport {\n XanvType,\n XVAny,\n XVArray,\n XVBoolean,\n XVDate,\n XVEnum,\n XVFile,\n XVMap,\n XVNumber,\n XVObject,\n XVRecord,\n XVSet,\n XVString,\n XVTuple,\n XVUnion,\n XVJson,\n};\n\nconst _xv = {\n array: (type: XVInstanceType, length?: number) => new XVArray(type, length),\n boolean: () => new XVBoolean(),\n date: () => new XVDate(),\n enum: (values: XVEnumValues) => new XVEnum(values),\n map: (key: XVInstanceType, value: XVInstanceType) => new XVMap(key, value),\n number: (length?: number) => new XVNumber(length),\n object: (arg?: XVObjectType) => new XVObject(arg),\n record: (key: XVInstanceType, value: XVInstanceType) => new XVRecord(key, value),\n set: (type: XVInstanceType) => new XVSet(type),\n string: (length?: number) => new XVString(length),\n tuple: (type: XVInstanceType[]) => new XVTuple(type),\n union: (type: XVInstanceType[]) => new XVUnion(type),\n any: () => new XVAny(),\n json: () => new XVJson(),\n}\n\n// Strongly-typed factory signatures for compile-time only usage\nexport interface XVStatic {\n array<T>(type: XVInstanceOf<T>, length?: number): XVArray<T> & XVInstanceOf<T[]>;\n tuple<T extends any[]>(types: { [K in keyof T]: XVInstanceOf<T[K]> }): XVTuple<T> & XVInstanceOf<T>;\n union<T extends any[]>(types: { [K in keyof T]: XVInstanceOf<T[K]> }): XVUnion<T> & XVInstanceOf<T>;\n boolean(): XVBoolean<boolean> & XVInstanceOf<boolean>;\n date(): XVDate<Date> & XVInstanceOf<Date>;\n enum<T extends string | number = string | number>(values: XVEnumValues): XVEnum<T> & XVInstanceOf<T>;\n map<K, V>(key: XVInstanceOf<K>, value: XVInstanceOf<V>): XVMap<K, V> & XVInstanceOf<Map<K, V>>;\n number(): XVNumber<number> & XVInstanceOf<number>;\n object<S extends Record<string, any> = Record<string, any>>(arg?: { [K in keyof S]: XVInstanceOf<S[K]> }): XVObject<S> & XVInstanceOf<{ [K in keyof S]: S[K] }>;\n record<K extends string = string, V = any>(key: XVInstanceOf<K>, value: XVInstanceOf<V>): XVRecord<K, V> & XVInstanceOf<Record<K, V>>;\n set<T>(type: XVInstanceOf<T>): XVSet<T> & XVInstanceOf<Set<T>>;\n string(): XVString<string> & XVInstanceOf<string>;\n string(length: number): XVString<string> & XVInstanceOf<string>;\n any(): XVAny<any> & XVInstanceOf<any>;\n json(): XVJson & XVInstanceOf<object>;\n}\n\nexport const xv = _xv as unknown as XVStatic;\n\n// Type-level inference utility\n// Use: type T = Infer<typeof schema>\n// Phantom generic wrapper type for compile-time inference.\n// Factory helpers will annotate returned instances with this to carry type information.\nexport type XVInstanceOf<T = any> = XanvType<any, T> & {\n meta: {\n optional: T extends undefined ? true : false,\n nullable: T extends null ? true : false,\n default: T | (() => T) | undefined,\n transform: ((value: T) => T) | undefined,\n }\n};\n\nexport type Infer<T> =\n // If the value is an XVInstanceOf carrying a compile-time type, extract it\n T extends XVInstanceOf<infer U> ? U :\n // direct XV class instances without phantom info (fallbacks)\n T extends XVString ? string :\n T extends XVNumber ? number :\n T extends XVBoolean ? boolean :\n T extends XVDate ? Date :\n T extends XVAny ? any :\n T extends XVFile ? File | Blob :\n T extends XVEnum ? (string | number) :\n T extends XVArray ? any[] :\n T extends XVTuple ? any[] :\n T extends XVUnion ? any :\n T extends XVMap ? Map<any, any> :\n T extends XVSet ? Set<any> :\n T extends XVRecord ? Record<string, any> :\n T extends XVJson ? object :\n // XVObject with an `arg` schema\n T extends XVObject ? (T extends { arg?: infer O } ? { [K in keyof O]: Infer<O[K]> } : any) :\n // Plain schema object (e.g. { a: xv.string(), b: xv.number() }) — recurse\n T extends object ? { [K in keyof T]: Infer<T[K]> } :\n any;\n\n// Merge types onto the runtime `xv` export so users can write `type T = xv.infer<typeof schema>`\nexport namespace xv {\n export type infer<T> = Infer<T>;\n}\n\n"],"names":[],"mappings":"4nBAoDA,MAAM,GAAG,GAAG;AACT,IAAA,KAAK,EAAE,CAAC,IAAoB,EAAE,MAAe,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AAC3E,IAAA,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE;AAC9B,IAAA,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE;IACxB,IAAI,EAAE,CAAC,MAAoB,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC;AAClD,IAAA,GAAG,EAAE,CAAC,GAAmB,EAAE,KAAqB,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;IAC1E,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAC,GAAkB,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC;AACjD,IAAA,MAAM,EAAE,CAAC,GAAmB,EAAE,KAAqB,KAAK,IAAI,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC;IAChF,GAAG,EAAE,CAAC,IAAoB,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;IAC9C,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAAC,IAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IACpD,KAAK,EAAE,CAAC,IAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;AACpD,IAAA,GAAG,EAAE,MAAM,IAAI,KAAK,EAAE;AACtB,IAAA,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE;CAC1B;AAqBM,MAAM,EAAE,GAAG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xanv",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "types": "./index.d.ts",
5
5
  "main": "./index.js",
6
6
  "module": "./index.mjs",
@@ -8,7 +8,7 @@
8
8
  "devDependencies": {
9
9
  "@types/react": "^19.0.2",
10
10
  "@types/react-dom": "^19.0.2",
11
- "makepack": "^1.7.12",
11
+ "makepack": "^1.7.15",
12
12
  "react": "^19.0.0",
13
13
  "react-dom": "^19.0.0",
14
14
  "typescript": "^4.4.2"
package/types/File.js CHANGED
@@ -6,6 +6,9 @@
6
6
  if (!(v instanceof File) && !(v instanceof Blob)) {
7
7
  throw new Error(`Value should be a File or Blob, received ${typeof v}`);
8
8
  }
9
+ if (v.size !== size) {
10
+ throw new Error(`File size should be exactly ${size} bytes, received ${v.size} bytes`);
11
+ }
9
12
  });
10
13
  }
11
14
  }
package/types/File.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"File.js","sources":["../../src/types/File.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\nexport type XVFileInfo = \"size\" | \"minsize\" | \"maxsize\" | \"type\" | \"extension\";\nclass XVFile<T extends File | Blob = File | Blob> extends XanvType<XVFileInfo, T> {\n constructor(size?: number) {\n super();\n if (size) {\n this.set('size', (v: any) => {\n if (!(v instanceof File) && !(v instanceof Blob)) {\n throw new Error(`Value should be a File or Blob, received ${typeof v}`);\n }\n });\n }\n }\n\n protected check(value: any) {\n if (!(value instanceof File) || !(value instanceof Blob)) {\n throw new Error(`Value should be a File or Blob, received ${typeof value}`);\n }\n }\n\n minSize(size: number): this {\n this.set('minsize', (v: any) => {\n if (v.size < size) {\n throw new Error(`File size should be at least ${size} bytes, received ${v.size} bytes`);\n }\n }, size);\n return this;\n }\n\n maxSize(size: number): this {\n this.set('maxsize', (v: any) => {\n if (v.size > size) {\n throw new Error(`File size should not exceed ${size} bytes, received ${v.size} bytes`);\n }\n }, size);\n return this;\n }\n\n type(allowedTypes: string[]): this {\n this.set('type', (v: any) => {\n if (!allowedTypes.includes(v.type)) {\n throw new Error(`File type ${v.type} is not allowed. Allowed types are: ${allowedTypes.join(', ')}`);\n }\n }, allowedTypes);\n return this;\n }\n\n extension(allowedExtensions: string[]): this {\n this.set('extension', (v: any) => {\n const ext = v.name.split('.').pop();\n if (!ext || !allowedExtensions.includes(ext)) {\n throw new Error(`File extension ${ext} is not allowed. Allowed extensions are: ${allowedExtensions.join(', ')}`);\n }\n }, allowedExtensions);\n return this;\n }\n}\n\nexport default XVFile;\n\ninterface XVFileProto<T extends File | Blob = File | Blob> {\n parse(value: any): T | undefined | null;\n default(def: T | (() => T)): this;\n transform(cb: import(\"../types\").XanvTransformCallback<T>): this;\n}\nObject.assign(XVFile.prototype as any, {} as XVFileProto);\n\n"],"names":["XanvType"],"mappings":"6GAEA,MAAM,MAA4C,SAAQA,gBAAuB,CAAA;AAC9E,IAAA,WAAA,CAAY,IAAa,EAAA;AACtB,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,IAAI,EAAE;YACP,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAM,KAAI;AACzB,gBAAA,IAAI,EAAE,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,IAAI,CAAC,EAAE;oBAC/C,MAAM,IAAI,KAAK,CAAC,CAAA,yCAAA,EAA4C,OAAO,CAAC,CAAA,CAAE,CAAC;AACzE,gBAAA;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA;IACJ;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;YACvD,MAAM,IAAI,KAAK,CAAC,CAAA,yCAAA,EAA4C,OAAO,KAAK,CAAA,CAAE,CAAC;AAC7E,QAAA;IACJ;AAEA,IAAA,OAAO,CAAC,IAAY,EAAA;QACjB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAM,KAAI;AAC5B,YAAA,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,CAAA,6BAAA,EAAgC,IAAI,CAAA,iBAAA,EAAoB,CAAC,CAAC,IAAI,CAAA,MAAA,CAAQ,CAAC;AACzF,YAAA;QACJ,CAAC,EAAE,IAAI,CAAC;AACR,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,OAAO,CAAC,IAAY,EAAA;QACjB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAM,KAAI;AAC5B,YAAA,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,CAAA,4BAAA,EAA+B,IAAI,CAAA,iBAAA,EAAoB,CAAC,CAAC,IAAI,CAAA,MAAA,CAAQ,CAAC;AACxF,YAAA;QACJ,CAAC,EAAE,IAAI,CAAC;AACR,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,IAAI,CAAC,YAAsB,EAAA;QACxB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAM,KAAI;YACzB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACjC,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,UAAA,EAAa,CAAC,CAAC,IAAI,CAAA,oCAAA,EAAuC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;AACtG,YAAA;QACJ,CAAC,EAAE,YAAY,CAAC;AAChB,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,SAAS,CAAC,iBAA2B,EAAA;QAClC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAM,KAAI;AAC9B,YAAA,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC3C,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,yCAAA,EAA4C,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;AAClH,YAAA;QACJ,CAAC,EAAE,iBAAiB,CAAC;AACrB,QAAA,OAAO,IAAI;IACd;AACF;AASD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAgB,EAAE,EAAiB,CAAC"}
1
+ {"version":3,"file":"File.js","sources":["../../src/types/File.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\nexport type XVFileInfo = \"size\" | \"minsize\" | \"maxsize\" | \"type\" | \"extension\";\nclass XVFile<T extends File | Blob = File | Blob> extends XanvType<XVFileInfo, T> {\n constructor(size?: number) {\n super();\n if (size) {\n this.set('size', (v: any) => {\n if (!(v instanceof File) && !(v instanceof Blob)) {\n throw new Error(`Value should be a File or Blob, received ${typeof v}`);\n }\n if (v.size !== size) {\n throw new Error(`File size should be exactly ${size} bytes, received ${v.size} bytes`);\n }\n });\n }\n }\n\n protected check(value: any) {\n if (!(value instanceof File) || !(value instanceof Blob)) {\n throw new Error(`Value should be a File or Blob, received ${typeof value}`);\n }\n }\n\n minSize(size: number): this {\n this.set('minsize', (v: any) => {\n if (v.size < size) {\n throw new Error(`File size should be at least ${size} bytes, received ${v.size} bytes`);\n }\n }, size);\n return this;\n }\n\n maxSize(size: number): this {\n this.set('maxsize', (v: any) => {\n if (v.size > size) {\n throw new Error(`File size should not exceed ${size} bytes, received ${v.size} bytes`);\n }\n }, size);\n return this;\n }\n\n type(allowedTypes: string[]): this {\n this.set('type', (v: any) => {\n if (!allowedTypes.includes(v.type)) {\n throw new Error(`File type ${v.type} is not allowed. Allowed types are: ${allowedTypes.join(', ')}`);\n }\n }, allowedTypes);\n return this;\n }\n\n extension(allowedExtensions: string[]): this {\n this.set('extension', (v: any) => {\n const ext = v.name.split('.').pop();\n if (!ext || !allowedExtensions.includes(ext)) {\n throw new Error(`File extension ${ext} is not allowed. Allowed extensions are: ${allowedExtensions.join(', ')}`);\n }\n }, allowedExtensions);\n return this;\n }\n}\n\nexport default XVFile;\n\ninterface XVFileProto<T extends File | Blob = File | Blob> {\n parse(value: any): T | undefined | null;\n default(def: T | (() => T)): this;\n transform(cb: import(\"../types\").XanvTransformCallback<T>): this;\n}\nObject.assign(XVFile.prototype as any, {} as XVFileProto);\n\n"],"names":["XanvType"],"mappings":"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"}
package/types/File.mjs CHANGED
@@ -6,6 +6,9 @@ import XanvType from'../XanvType.mjs';class XVFile extends XanvType {
6
6
  if (!(v instanceof File) && !(v instanceof Blob)) {
7
7
  throw new Error(`Value should be a File or Blob, received ${typeof v}`);
8
8
  }
9
+ if (v.size !== size) {
10
+ throw new Error(`File size should be exactly ${size} bytes, received ${v.size} bytes`);
11
+ }
9
12
  });
10
13
  }
11
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"File.mjs","sources":["../../src/types/File.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\nexport type XVFileInfo = \"size\" | \"minsize\" | \"maxsize\" | \"type\" | \"extension\";\nclass XVFile<T extends File | Blob = File | Blob> extends XanvType<XVFileInfo, T> {\n constructor(size?: number) {\n super();\n if (size) {\n this.set('size', (v: any) => {\n if (!(v instanceof File) && !(v instanceof Blob)) {\n throw new Error(`Value should be a File or Blob, received ${typeof v}`);\n }\n });\n }\n }\n\n protected check(value: any) {\n if (!(value instanceof File) || !(value instanceof Blob)) {\n throw new Error(`Value should be a File or Blob, received ${typeof value}`);\n }\n }\n\n minSize(size: number): this {\n this.set('minsize', (v: any) => {\n if (v.size < size) {\n throw new Error(`File size should be at least ${size} bytes, received ${v.size} bytes`);\n }\n }, size);\n return this;\n }\n\n maxSize(size: number): this {\n this.set('maxsize', (v: any) => {\n if (v.size > size) {\n throw new Error(`File size should not exceed ${size} bytes, received ${v.size} bytes`);\n }\n }, size);\n return this;\n }\n\n type(allowedTypes: string[]): this {\n this.set('type', (v: any) => {\n if (!allowedTypes.includes(v.type)) {\n throw new Error(`File type ${v.type} is not allowed. Allowed types are: ${allowedTypes.join(', ')}`);\n }\n }, allowedTypes);\n return this;\n }\n\n extension(allowedExtensions: string[]): this {\n this.set('extension', (v: any) => {\n const ext = v.name.split('.').pop();\n if (!ext || !allowedExtensions.includes(ext)) {\n throw new Error(`File extension ${ext} is not allowed. Allowed extensions are: ${allowedExtensions.join(', ')}`);\n }\n }, allowedExtensions);\n return this;\n }\n}\n\nexport default XVFile;\n\ninterface XVFileProto<T extends File | Blob = File | Blob> {\n parse(value: any): T | undefined | null;\n default(def: T | (() => T)): this;\n transform(cb: import(\"../types\").XanvTransformCallback<T>): this;\n}\nObject.assign(XVFile.prototype as any, {} as XVFileProto);\n\n"],"names":[],"mappings":"sCAEA,MAAM,MAA4C,SAAQ,QAAuB,CAAA;AAC9E,IAAA,WAAA,CAAY,IAAa,EAAA;AACtB,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,IAAI,EAAE;YACP,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAM,KAAI;AACzB,gBAAA,IAAI,EAAE,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,IAAI,CAAC,EAAE;oBAC/C,MAAM,IAAI,KAAK,CAAC,CAAA,yCAAA,EAA4C,OAAO,CAAC,CAAA,CAAE,CAAC;AACzE,gBAAA;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA;IACJ;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;YACvD,MAAM,IAAI,KAAK,CAAC,CAAA,yCAAA,EAA4C,OAAO,KAAK,CAAA,CAAE,CAAC;AAC7E,QAAA;IACJ;AAEA,IAAA,OAAO,CAAC,IAAY,EAAA;QACjB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAM,KAAI;AAC5B,YAAA,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,CAAA,6BAAA,EAAgC,IAAI,CAAA,iBAAA,EAAoB,CAAC,CAAC,IAAI,CAAA,MAAA,CAAQ,CAAC;AACzF,YAAA;QACJ,CAAC,EAAE,IAAI,CAAC;AACR,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,OAAO,CAAC,IAAY,EAAA;QACjB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAM,KAAI;AAC5B,YAAA,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,CAAA,4BAAA,EAA+B,IAAI,CAAA,iBAAA,EAAoB,CAAC,CAAC,IAAI,CAAA,MAAA,CAAQ,CAAC;AACxF,YAAA;QACJ,CAAC,EAAE,IAAI,CAAC;AACR,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,IAAI,CAAC,YAAsB,EAAA;QACxB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAM,KAAI;YACzB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACjC,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,UAAA,EAAa,CAAC,CAAC,IAAI,CAAA,oCAAA,EAAuC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;AACtG,YAAA;QACJ,CAAC,EAAE,YAAY,CAAC;AAChB,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,SAAS,CAAC,iBAA2B,EAAA;QAClC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAM,KAAI;AAC9B,YAAA,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC3C,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,yCAAA,EAA4C,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;AAClH,YAAA;QACJ,CAAC,EAAE,iBAAiB,CAAC;AACrB,QAAA,OAAO,IAAI;IACd;AACF;AASD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAgB,EAAE,EAAiB,CAAC"}
1
+ {"version":3,"file":"File.mjs","sources":["../../src/types/File.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\nexport type XVFileInfo = \"size\" | \"minsize\" | \"maxsize\" | \"type\" | \"extension\";\nclass XVFile<T extends File | Blob = File | Blob> extends XanvType<XVFileInfo, T> {\n constructor(size?: number) {\n super();\n if (size) {\n this.set('size', (v: any) => {\n if (!(v instanceof File) && !(v instanceof Blob)) {\n throw new Error(`Value should be a File or Blob, received ${typeof v}`);\n }\n if (v.size !== size) {\n throw new Error(`File size should be exactly ${size} bytes, received ${v.size} bytes`);\n }\n });\n }\n }\n\n protected check(value: any) {\n if (!(value instanceof File) || !(value instanceof Blob)) {\n throw new Error(`Value should be a File or Blob, received ${typeof value}`);\n }\n }\n\n minSize(size: number): this {\n this.set('minsize', (v: any) => {\n if (v.size < size) {\n throw new Error(`File size should be at least ${size} bytes, received ${v.size} bytes`);\n }\n }, size);\n return this;\n }\n\n maxSize(size: number): this {\n this.set('maxsize', (v: any) => {\n if (v.size > size) {\n throw new Error(`File size should not exceed ${size} bytes, received ${v.size} bytes`);\n }\n }, size);\n return this;\n }\n\n type(allowedTypes: string[]): this {\n this.set('type', (v: any) => {\n if (!allowedTypes.includes(v.type)) {\n throw new Error(`File type ${v.type} is not allowed. Allowed types are: ${allowedTypes.join(', ')}`);\n }\n }, allowedTypes);\n return this;\n }\n\n extension(allowedExtensions: string[]): this {\n this.set('extension', (v: any) => {\n const ext = v.name.split('.').pop();\n if (!ext || !allowedExtensions.includes(ext)) {\n throw new Error(`File extension ${ext} is not allowed. Allowed extensions are: ${allowedExtensions.join(', ')}`);\n }\n }, allowedExtensions);\n return this;\n }\n}\n\nexport default XVFile;\n\ninterface XVFileProto<T extends File | Blob = File | Blob> {\n parse(value: any): T | undefined | null;\n default(def: T | (() => T)): this;\n transform(cb: import(\"../types\").XanvTransformCallback<T>): this;\n}\nObject.assign(XVFile.prototype as any, {} as XVFileProto);\n\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import XanvType from '../XanvType.js';
2
+
3
+ declare class XVJson extends XanvType<any, object> {
4
+ name: string;
5
+ check(value: any): void;
6
+ }
7
+
8
+ export { XVJson as default };
package/types/Json.js ADDED
@@ -0,0 +1,12 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var XanvType=require('../XanvType.js');class XVJson extends XanvType.default {
2
+ constructor() {
3
+ super(...arguments);
4
+ this.name = 'XanvJson';
5
+ }
6
+ check(value) {
7
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
8
+ throw new Error("Value is not a valid JSON object");
9
+ }
10
+ }
11
+ }
12
+ Object.assign(XVJson.prototype, {});exports.default=XVJson;//# sourceMappingURL=Json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Json.js","sources":["../../src/types/Json.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\n\nclass XVJson extends XanvType<any, object> {\n name: string = 'XanvJson';\n check(value: any): void {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new Error(\"Value is not a valid JSON object\");\n }\n }\n}\n\nexport default XVJson;\n\ninterface XVJsonProto<K extends string = string, V = any> {\n parse(value: any): Record<K, V> | undefined | null;\n default(def: Record<K, V> | (() => Record<K, V>)): this;\n transform(cb: import(\"../types\").XanvTransformCallback<Record<K, V>>): this;\n}\nObject.assign(XVJson.prototype as any, {} as XVJsonProto);"],"names":["XanvType"],"mappings":"6GAEA,MAAM,MAAO,SAAQA,gBAAqB,CAAA;AAA1C,IAAA,WAAA,GAAA;;QACG,IAAA,CAAA,IAAI,GAAW,UAAU;IAM5B;AALG,IAAA,KAAK,CAAC,KAAU,EAAA;AACb,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtE,YAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC;AACrD,QAAA;IACJ;AACF;AASD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAgB,EAAE,EAAiB,CAAC"}
package/types/Json.mjs ADDED
@@ -0,0 +1,12 @@
1
+ import XanvType from'../XanvType.mjs';class XVJson extends XanvType {
2
+ constructor() {
3
+ super(...arguments);
4
+ this.name = 'XanvJson';
5
+ }
6
+ check(value) {
7
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
8
+ throw new Error("Value is not a valid JSON object");
9
+ }
10
+ }
11
+ }
12
+ Object.assign(XVJson.prototype, {});export{XVJson as default};//# sourceMappingURL=Json.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Json.mjs","sources":["../../src/types/Json.ts"],"sourcesContent":["import XanvType from \"../XanvType\";\n\nclass XVJson extends XanvType<any, object> {\n name: string = 'XanvJson';\n check(value: any): void {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new Error(\"Value is not a valid JSON object\");\n }\n }\n}\n\nexport default XVJson;\n\ninterface XVJsonProto<K extends string = string, V = any> {\n parse(value: any): Record<K, V> | undefined | null;\n default(def: Record<K, V> | (() => Record<K, V>)): this;\n transform(cb: import(\"../types\").XanvTransformCallback<Record<K, V>>): this;\n}\nObject.assign(XVJson.prototype as any, {} as XVJsonProto);"],"names":[],"mappings":"sCAEA,MAAM,MAAO,SAAQ,QAAqB,CAAA;AAA1C,IAAA,WAAA,GAAA;;QACG,IAAA,CAAA,IAAI,GAAW,UAAU;IAM5B;AALG,IAAA,KAAK,CAAC,KAAU,EAAA;AACb,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtE,YAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC;AACrD,QAAA;IACJ;AACF;AASD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAgB,EAAE,EAAiB,CAAC"}