xanv 1.1.23 → 1.1.25
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/XVType.cjs.map +1 -1
- package/XVType.js.map +1 -1
- package/index.cjs.map +1 -1
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/readme.md +199 -199
- package/types/Any.cjs.map +1 -1
- package/types/Any.js.map +1 -1
- package/types/Array.cjs +3 -3
- package/types/Array.cjs.map +1 -1
- package/types/Array.d.ts +2 -2
- package/types/Array.js +3 -3
- package/types/Array.js.map +1 -1
- package/types/Boolean.cjs.map +1 -1
- package/types/Boolean.js.map +1 -1
- package/types/Date.cjs.map +1 -1
- package/types/Date.js.map +1 -1
- package/types/Enum.cjs +4 -4
- package/types/Enum.cjs.map +1 -1
- package/types/Enum.d.ts +1 -1
- package/types/Enum.js +4 -4
- package/types/Enum.js.map +1 -1
- package/types/File.cjs.map +1 -1
- package/types/File.js.map +1 -1
- package/types/Function.cjs +11 -9
- package/types/Function.cjs.map +1 -1
- package/types/Function.d.ts +3 -3
- package/types/Function.js +11 -9
- package/types/Function.js.map +1 -1
- package/types/Map.cjs +6 -6
- package/types/Map.cjs.map +1 -1
- package/types/Map.d.ts +3 -3
- package/types/Map.js +6 -6
- package/types/Map.js.map +1 -1
- package/types/Number.cjs.map +1 -1
- package/types/Number.js.map +1 -1
- package/types/Object.cjs +4 -4
- package/types/Object.cjs.map +1 -1
- package/types/Object.d.ts +2 -2
- package/types/Object.js +4 -4
- package/types/Object.js.map +1 -1
- package/types/Promise.cjs +4 -4
- package/types/Promise.cjs.map +1 -1
- package/types/Promise.d.ts +2 -2
- package/types/Promise.js +4 -4
- package/types/Promise.js.map +1 -1
- package/types/Record.cjs +6 -7
- package/types/Record.cjs.map +1 -1
- package/types/Record.d.ts +3 -3
- package/types/Record.js +6 -7
- package/types/Record.js.map +1 -1
- package/types/Set.cjs +4 -4
- package/types/Set.cjs.map +1 -1
- package/types/Set.d.ts +2 -2
- package/types/Set.js +4 -4
- package/types/Set.js.map +1 -1
- package/types/String.cjs.map +1 -1
- package/types/String.js.map +1 -1
- package/types/Tuple.cjs +6 -6
- package/types/Tuple.cjs.map +1 -1
- package/types/Tuple.d.ts +2 -2
- package/types/Tuple.js +6 -6
- package/types/Tuple.js.map +1 -1
- package/types/Union.cjs +5 -5
- package/types/Union.cjs.map +1 -1
- package/types/Union.d.ts +2 -2
- package/types/Union.js +5 -5
- package/types/Union.js.map +1 -1
package/XVType.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XVType.cjs","sources":["../src/XVType.ts"],"sourcesContent":["import { XVCheckCallback, XVDefault, XVDefaultValue, XVMeta, XVNullable, XVOptional, XVTransformCallback } from \"./types\";\n\nabstract class XVType<T> {\n readonly _type!: T\n protected checks: XVCheckCallback<T>[] = [];\n protected transforms: XVTransformCallback<T>[] = [];\n readonly meta: XVMeta<T> = {};\n protected abstract check(value: unknown): T;\n\n protected set(method: string, check: XVCheckCallback<T>, args: any = true): this {\n if (!(method in this)) {\n throw new Error(`Method ${method} does not exist on ${this.constructor.name}`);\n }\n this.checks.push(check);\n this.meta[method] = args;\n return this;\n }\n\n clone(): this {\n return Object.assign(\n Object.create(Object.getPrototypeOf(this)),\n this\n )\n }\n\n optional(): XVOptional<this> {\n return this.set(\"optional\", () => { }) as any\n }\n\n nullable(): XVNullable<this> {\n return this.set(\"nullable\", () => { }) as any\n }\n\n default(value: XVDefaultValue<T>): XVDefault<this, T> {\n return this.set(\"default\", () => { }, value) as any\n }\n\n transform(cb: XVTransformCallback<T>) {\n this.transforms.push(cb);\n return this\n }\n\n parse(value: unknown): T | undefined | null {\n // default\n if (this.meta.default !== undefined && (value === undefined || value === null)) {\n value = typeof this.meta.default === \"function\" ? (this.meta.default as () => T)() : this.meta.default;\n }\n\n // optional / nullable\n if (this.meta.optional && value === undefined) return undefined;\n if (this.meta.nullable && value === null) return null;\n\n // run internal check\n let result = this.check(value)\n\n // run user checks\n for (const check of this.checks) {\n check(result);\n }\n\n // run transforms\n for (const transform of this.transforms) {\n result = transform(result);\n }\n\n return result;\n }\n}\n\nexport default XVType;\n"],"names":[],"mappings":";;AAEA,MAAe,MAAM,CAAA;AAArB,IAAA,WAAA,GAAA;QAEa,IAAA,CAAA,MAAM,GAAyB,EAAE;QACjC,IAAA,CAAA,UAAU,GAA6B,EAAE;QAC1C,IAAA,CAAA,IAAI,GAAc,EAAE;IA6DhC;AA1Da,IAAA,GAAG,CAAC,MAAc,EAAE,KAAyB,EAAE,OAAY,IAAI,EAAA;AACtE,QAAA,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,MAAM,CAAA,mBAAA,EAAsB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA,CAAE,CAAC;QACjF;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI;AACxB,QAAA,OAAO,IAAI;IACd;IAEA,KAAK,GAAA;AACF,QAAA,OAAO,MAAM,CAAC,MAAM,CACjB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAC1C,IAAI,CACN;IACJ;IAEA,QAAQ,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAK,EAAG,CAAC,CAAQ;IAChD;IAEA,QAAQ,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAK,EAAG,CAAC,CAAQ;IAChD;AAEA,IAAA,OAAO,CAAC,KAAwB,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAK,EAAG,CAAC,EAAE,KAAK,CAAQ;IACtD;AAEA,IAAA,SAAS,CAAC,EAA0B,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;AACxB,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,KAAK,CAAC,KAAc,EAAA;;AAEjB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE;YAC7E,KAAK,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,UAAU,GAAI,IAAI,CAAC,IAAI,CAAC,OAAmB,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;QACzG;;QAGA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,SAAS;QAC/D,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;;QAGrD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;;AAG9B,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAC9B,KAAK,CAAC,MAAM,CAAC;QAChB;;AAGA,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAC7B;AAEA,QAAA,OAAO,MAAM;IAChB;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"XVType.cjs","sources":["../src/XVType.ts"],"sourcesContent":["import { XVCheckCallback, XVDefault, XVDefaultValue, XVMeta, XVNullable, XVOptional, XVTransformCallback } from \"./types\";\r\n\r\nabstract class XVType<T> {\r\n readonly _type!: T\r\n protected checks: XVCheckCallback<T>[] = [];\r\n protected transforms: XVTransformCallback<T>[] = [];\r\n readonly meta: XVMeta<T> = {};\r\n protected abstract check(value: unknown): T;\r\n\r\n protected set(method: string, check: XVCheckCallback<T>, args: any = true): this {\r\n if (!(method in this)) {\r\n throw new Error(`Method ${method} does not exist on ${this.constructor.name}`);\r\n }\r\n this.checks.push(check);\r\n this.meta[method] = args;\r\n return this;\r\n }\r\n\r\n clone(): this {\r\n return Object.assign(\r\n Object.create(Object.getPrototypeOf(this)),\r\n this\r\n )\r\n }\r\n\r\n optional(): XVOptional<this> {\r\n return this.set(\"optional\", () => { }) as any\r\n }\r\n\r\n nullable(): XVNullable<this> {\r\n return this.set(\"nullable\", () => { }) as any\r\n }\r\n\r\n default(value: XVDefaultValue<T>): XVDefault<this, T> {\r\n return this.set(\"default\", () => { }, value) as any\r\n }\r\n\r\n transform(cb: XVTransformCallback<T>) {\r\n this.transforms.push(cb);\r\n return this\r\n }\r\n\r\n parse(value: unknown): T | undefined | null {\r\n // default\r\n if (this.meta.default !== undefined && (value === undefined || value === null)) {\r\n value = typeof this.meta.default === \"function\" ? (this.meta.default as () => T)() : this.meta.default;\r\n }\r\n\r\n // optional / nullable\r\n if (this.meta.optional && value === undefined) return undefined;\r\n if (this.meta.nullable && value === null) return null;\r\n\r\n // run internal check\r\n let result = this.check(value)\r\n\r\n // run user checks\r\n for (const check of this.checks) {\r\n check(result);\r\n }\r\n\r\n // run transforms\r\n for (const transform of this.transforms) {\r\n result = transform(result);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVType;\r\n"],"names":[],"mappings":";;AAEA,MAAe,MAAM,CAAA;AAArB,IAAA,WAAA,GAAA;QAEa,IAAA,CAAA,MAAM,GAAyB,EAAE;QACjC,IAAA,CAAA,UAAU,GAA6B,EAAE;QAC1C,IAAA,CAAA,IAAI,GAAc,EAAE;IA6DhC;AA1Da,IAAA,GAAG,CAAC,MAAc,EAAE,KAAyB,EAAE,OAAY,IAAI,EAAA;AACtE,QAAA,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,MAAM,CAAA,mBAAA,EAAsB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA,CAAE,CAAC;QACjF;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI;AACxB,QAAA,OAAO,IAAI;IACd;IAEA,KAAK,GAAA;AACF,QAAA,OAAO,MAAM,CAAC,MAAM,CACjB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAC1C,IAAI,CACN;IACJ;IAEA,QAAQ,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAK,EAAG,CAAC,CAAQ;IAChD;IAEA,QAAQ,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAK,EAAG,CAAC,CAAQ;IAChD;AAEA,IAAA,OAAO,CAAC,KAAwB,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAK,EAAG,CAAC,EAAE,KAAK,CAAQ;IACtD;AAEA,IAAA,SAAS,CAAC,EAA0B,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;AACxB,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,KAAK,CAAC,KAAc,EAAA;;AAEjB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE;YAC7E,KAAK,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,UAAU,GAAI,IAAI,CAAC,IAAI,CAAC,OAAmB,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;QACzG;;QAGA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,SAAS;QAC/D,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;;QAGrD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;;AAG9B,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAC9B,KAAK,CAAC,MAAM,CAAC;QAChB;;AAGA,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAC7B;AAEA,QAAA,OAAO,MAAM;IAChB;AACF;;;;"}
|
package/XVType.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XVType.js","sources":["../src/XVType.ts"],"sourcesContent":["import { XVCheckCallback, XVDefault, XVDefaultValue, XVMeta, XVNullable, XVOptional, XVTransformCallback } from \"./types\";\n\nabstract class XVType<T> {\n readonly _type!: T\n protected checks: XVCheckCallback<T>[] = [];\n protected transforms: XVTransformCallback<T>[] = [];\n readonly meta: XVMeta<T> = {};\n protected abstract check(value: unknown): T;\n\n protected set(method: string, check: XVCheckCallback<T>, args: any = true): this {\n if (!(method in this)) {\n throw new Error(`Method ${method} does not exist on ${this.constructor.name}`);\n }\n this.checks.push(check);\n this.meta[method] = args;\n return this;\n }\n\n clone(): this {\n return Object.assign(\n Object.create(Object.getPrototypeOf(this)),\n this\n )\n }\n\n optional(): XVOptional<this> {\n return this.set(\"optional\", () => { }) as any\n }\n\n nullable(): XVNullable<this> {\n return this.set(\"nullable\", () => { }) as any\n }\n\n default(value: XVDefaultValue<T>): XVDefault<this, T> {\n return this.set(\"default\", () => { }, value) as any\n }\n\n transform(cb: XVTransformCallback<T>) {\n this.transforms.push(cb);\n return this\n }\n\n parse(value: unknown): T | undefined | null {\n // default\n if (this.meta.default !== undefined && (value === undefined || value === null)) {\n value = typeof this.meta.default === \"function\" ? (this.meta.default as () => T)() : this.meta.default;\n }\n\n // optional / nullable\n if (this.meta.optional && value === undefined) return undefined;\n if (this.meta.nullable && value === null) return null;\n\n // run internal check\n let result = this.check(value)\n\n // run user checks\n for (const check of this.checks) {\n check(result);\n }\n\n // run transforms\n for (const transform of this.transforms) {\n result = transform(result);\n }\n\n return result;\n }\n}\n\nexport default XVType;\n"],"names":[],"mappings":"AAEA,MAAe,MAAM,CAAA;AAArB,IAAA,WAAA,GAAA;QAEa,IAAA,CAAA,MAAM,GAAyB,EAAE;QACjC,IAAA,CAAA,UAAU,GAA6B,EAAE;QAC1C,IAAA,CAAA,IAAI,GAAc,EAAE;IA6DhC;AA1Da,IAAA,GAAG,CAAC,MAAc,EAAE,KAAyB,EAAE,OAAY,IAAI,EAAA;AACtE,QAAA,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,MAAM,CAAA,mBAAA,EAAsB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA,CAAE,CAAC;QACjF;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI;AACxB,QAAA,OAAO,IAAI;IACd;IAEA,KAAK,GAAA;AACF,QAAA,OAAO,MAAM,CAAC,MAAM,CACjB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAC1C,IAAI,CACN;IACJ;IAEA,QAAQ,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAK,EAAG,CAAC,CAAQ;IAChD;IAEA,QAAQ,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAK,EAAG,CAAC,CAAQ;IAChD;AAEA,IAAA,OAAO,CAAC,KAAwB,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAK,EAAG,CAAC,EAAE,KAAK,CAAQ;IACtD;AAEA,IAAA,SAAS,CAAC,EAA0B,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;AACxB,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,KAAK,CAAC,KAAc,EAAA;;AAEjB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE;YAC7E,KAAK,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,UAAU,GAAI,IAAI,CAAC,IAAI,CAAC,OAAmB,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;QACzG;;QAGA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,SAAS;QAC/D,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;;QAGrD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;;AAG9B,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAC9B,KAAK,CAAC,MAAM,CAAC;QAChB;;AAGA,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAC7B;AAEA,QAAA,OAAO,MAAM;IAChB;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"XVType.js","sources":["../src/XVType.ts"],"sourcesContent":["import { XVCheckCallback, XVDefault, XVDefaultValue, XVMeta, XVNullable, XVOptional, XVTransformCallback } from \"./types\";\r\n\r\nabstract class XVType<T> {\r\n readonly _type!: T\r\n protected checks: XVCheckCallback<T>[] = [];\r\n protected transforms: XVTransformCallback<T>[] = [];\r\n readonly meta: XVMeta<T> = {};\r\n protected abstract check(value: unknown): T;\r\n\r\n protected set(method: string, check: XVCheckCallback<T>, args: any = true): this {\r\n if (!(method in this)) {\r\n throw new Error(`Method ${method} does not exist on ${this.constructor.name}`);\r\n }\r\n this.checks.push(check);\r\n this.meta[method] = args;\r\n return this;\r\n }\r\n\r\n clone(): this {\r\n return Object.assign(\r\n Object.create(Object.getPrototypeOf(this)),\r\n this\r\n )\r\n }\r\n\r\n optional(): XVOptional<this> {\r\n return this.set(\"optional\", () => { }) as any\r\n }\r\n\r\n nullable(): XVNullable<this> {\r\n return this.set(\"nullable\", () => { }) as any\r\n }\r\n\r\n default(value: XVDefaultValue<T>): XVDefault<this, T> {\r\n return this.set(\"default\", () => { }, value) as any\r\n }\r\n\r\n transform(cb: XVTransformCallback<T>) {\r\n this.transforms.push(cb);\r\n return this\r\n }\r\n\r\n parse(value: unknown): T | undefined | null {\r\n // default\r\n if (this.meta.default !== undefined && (value === undefined || value === null)) {\r\n value = typeof this.meta.default === \"function\" ? (this.meta.default as () => T)() : this.meta.default;\r\n }\r\n\r\n // optional / nullable\r\n if (this.meta.optional && value === undefined) return undefined;\r\n if (this.meta.nullable && value === null) return null;\r\n\r\n // run internal check\r\n let result = this.check(value)\r\n\r\n // run user checks\r\n for (const check of this.checks) {\r\n check(result);\r\n }\r\n\r\n // run transforms\r\n for (const transform of this.transforms) {\r\n result = transform(result);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVType;\r\n"],"names":[],"mappings":"AAEA,MAAe,MAAM,CAAA;AAArB,IAAA,WAAA,GAAA;QAEa,IAAA,CAAA,MAAM,GAAyB,EAAE;QACjC,IAAA,CAAA,UAAU,GAA6B,EAAE;QAC1C,IAAA,CAAA,IAAI,GAAc,EAAE;IA6DhC;AA1Da,IAAA,GAAG,CAAC,MAAc,EAAE,KAAyB,EAAE,OAAY,IAAI,EAAA;AACtE,QAAA,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,OAAA,EAAU,MAAM,CAAA,mBAAA,EAAsB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA,CAAE,CAAC;QACjF;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI;AACxB,QAAA,OAAO,IAAI;IACd;IAEA,KAAK,GAAA;AACF,QAAA,OAAO,MAAM,CAAC,MAAM,CACjB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAC1C,IAAI,CACN;IACJ;IAEA,QAAQ,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAK,EAAG,CAAC,CAAQ;IAChD;IAEA,QAAQ,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAK,EAAG,CAAC,CAAQ;IAChD;AAEA,IAAA,OAAO,CAAC,KAAwB,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAK,EAAG,CAAC,EAAE,KAAK,CAAQ;IACtD;AAEA,IAAA,SAAS,CAAC,EAA0B,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;AACxB,QAAA,OAAO,IAAI;IACd;AAEA,IAAA,KAAK,CAAC,KAAc,EAAA;;AAEjB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE;YAC7E,KAAK,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,UAAU,GAAI,IAAI,CAAC,IAAI,CAAC,OAAmB,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;QACzG;;QAGA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,SAAS;QAC/D,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;;QAGrD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;;AAG9B,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAC9B,KAAK,CAAC,MAAM,CAAC;QAChB;;AAGA,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAC7B;AAEA,QAAA,OAAO,MAAM;IAChB;AACF;;;;"}
|
package/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import XVType from \"./XVType\";\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 XVFunction from \"./types/Function\";\nimport XVPromise from \"./types/Promise\";\n\nexport * from \"./types\";\n\nexport {\n XVType,\n XVAny,\n XVArray,\n XVBoolean,\n XVFunction,\n XVPromise,\n XVDate,\n XVEnum,\n XVFile,\n XVMap,\n XVNumber,\n XVObject,\n XVRecord,\n XVSet,\n XVString,\n XVTuple,\n XVUnion,\n};\n\nexport const xv = {\n any: () => new XVAny(),\n array: <T extends XVType<any>>(type: T) => new XVArray<T>(type),\n boolean: () => new XVBoolean(),\n date: () => new XVDate(),\n enum: <const T extends string | number>(input: readonly T[] | Record<string, T>): XVEnum<T> => new XVEnum<T>(input),\n file: () => new XVFile(),\n number: (length?: number) => new XVNumber(length),\n object: <T extends Record<string, XVType<any>>>(shape: T) => new XVObject(shape),\n record: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) => new XVRecord<K, V>(key, value),\n map: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) => new XVMap<K, V>(key, value),\n set: <T extends XVType<any>>(type: T) => new XVSet(type),\n string: (length?: number) => new XVString(length),\n tuple: <T extends XVType<any>[]>(type: T) => new XVTuple<T>(type),\n union: <T extends XVType<any>[]>(types: T) => new XVUnion<T>(types),\n function: <const A extends XVType<any>[], R extends XVType<any>>(args: A, ret: R) => new XVFunction<A, R>(args, ret),\n promise: <T extends XVType<any>>(type: T) => new XVPromise(type),\n};\n\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 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;;;;;;;;;;;;;;;;;;;;;;"}
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import XVType from \"./XVType\";\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 XVFunction from \"./types/Function\";\nimport XVPromise from \"./types/Promise\";\n\nexport * from \"./types\";\n\nexport {\n XVType,\n XVAny,\n XVArray,\n XVBoolean,\n XVFunction,\n XVPromise,\n XVDate,\n XVEnum,\n XVFile,\n XVMap,\n XVNumber,\n XVObject,\n XVRecord,\n XVSet,\n XVString,\n XVTuple,\n XVUnion,\n};\n\nexport const xv = {\n any: () => new XVAny(),\n array: <T extends XVType<any>>(type: T) => new XVArray<T>(type),\n boolean: () => new XVBoolean(),\n date: () => new XVDate(),\n enum: <const T extends string | number>(input: readonly T[] | Record<string, T>): XVEnum<T> => new XVEnum<T>(input),\n file: () => new XVFile(),\n number: (length?: number) => new XVNumber(length),\n object: <T extends Record<string, XVType<any>>>(shape: T) => new XVObject(shape),\n record: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) => new XVRecord<K, V>(key, value),\n map: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) => new XVMap<K, V>(key, value),\n set: <T extends XVType<any>>(type: T) => new XVSet(type),\n string: (length?: number) => new XVString(length),\n tuple: <T extends XVType<any>[]>(type: T) => new XVTuple<T>(type),\n union: <T extends XVType<any>[]>(types: T) => new XVUnion<T>(types),\n function: <const A extends XVType<any>[], R extends XVType<any>>(args: A, ret: R) => new XVFunction<A, R>(args, ret),\n promise: <T extends XVType<any>>(type: T) => new XVPromise(type),\n};\n\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 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;;;;;"}
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -1,199 +1,199 @@
|
|
|
1
|
-
# Xanv — Lightweight Runtime Validation with TypeScript Inference
|
|
2
|
-
|
|
3
|
-
[](#)
|
|
4
|
-
[](LICENSE)
|
|
5
|
-
|
|
6
|
-
**Xanv** is a minimal runtime validation library that pairs elegantly with TypeScript. It provides a fluent API for building runtime-safe schemas that retain full static typing at compile time. With generic class-based validators, you get the best of both worlds — reliable runtime checks and precise type inference.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Table of Contents
|
|
11
|
-
|
|
12
|
-
* Features
|
|
13
|
-
* Installation
|
|
14
|
-
* Quick Start
|
|
15
|
-
* Type Inference & TypeScript Integration
|
|
16
|
-
* API Reference
|
|
17
|
-
* Advanced Examples
|
|
18
|
-
* Migration Notes
|
|
19
|
-
* Development & Testing
|
|
20
|
-
* Contributing
|
|
21
|
-
* Changelog
|
|
22
|
-
* License
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## Features
|
|
27
|
-
|
|
28
|
-
* 🚀 **Lightweight & dependency-free** — zero external dependencies.
|
|
29
|
-
* 🔗 **Fluent API** — chainable constraints and transformations.
|
|
30
|
-
* 🧩 **Generic XV classes** — `XVArray<T>`, `XVObject<S>`, `XVMap<K, V>`, and more, for perfect type inference.
|
|
31
|
-
* 🧠 **Type inference helper** — `xv.infer<T>` extracts TypeScript types directly from schema definitions.
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## Installation
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
npm install xanv
|
|
39
|
-
# or
|
|
40
|
-
yarn add xanv
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## Quick Start
|
|
46
|
-
|
|
47
|
-
Validate and parse data with type safety:
|
|
48
|
-
|
|
49
|
-
```ts
|
|
50
|
-
import { xv } from 'xanv';
|
|
51
|
-
|
|
52
|
-
const schema = xv.object({
|
|
53
|
-
id: xv.string().min(3),
|
|
54
|
-
age: xv.number().min(0),
|
|
55
|
-
tags: xv.array(xv.string()),
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
const parsed = schema.parse({ id: 'abc', age: 30, tags: ['x'] });
|
|
59
|
-
console.log(parsed.id);
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
The `parse()` method returns a validated value or throws on failure.
|
|
63
|
-
Control missing or nullable values with `.optional()`, `.nullable()`, and `.default()`.
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## Type Inference & TypeScript Integration
|
|
68
|
-
|
|
69
|
-
Because each factory returns a **generic class instance**, Xanv retains full type information across schema definitions.
|
|
70
|
-
|
|
71
|
-
```ts
|
|
72
|
-
import { xv } from 'xanv';
|
|
73
|
-
|
|
74
|
-
const schema = {
|
|
75
|
-
id: xv.string(),
|
|
76
|
-
age: xv.number(),
|
|
77
|
-
tags: xv.array(xv.string()),
|
|
78
|
-
} as const;
|
|
79
|
-
|
|
80
|
-
type SchemaT = xv.infer<typeof schema>;
|
|
81
|
-
// { id: string; age: number; tags: string[] }
|
|
82
|
-
|
|
83
|
-
const obj = xv.object(schema);
|
|
84
|
-
type ObjT = xv.infer<typeof schema>; // same as SchemaT
|
|
85
|
-
|
|
86
|
-
const maybe: ObjT | undefined | null = obj.parse({ id: 'a', age: 1, tags: ['x'] });
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### How Inference Works
|
|
90
|
-
|
|
91
|
-
* Each `XV` class is generic, e.g. `XVObject<S>`, `XVArray<T>`, `XVRecord<K, V>`, `XVTuple<Ts>`.
|
|
92
|
-
* The `xv.infer<typeof schema>` utility traverses schema literals and extracts TypeScript equivalents.
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## API Reference
|
|
97
|
-
|
|
98
|
-
Each top-level factory method on the `xv` export returns a typed validator class.
|
|
99
|
-
|
|
100
|
-
| Method | Returns | Description |
|
|
101
|
-
| ------------------------- | -------------------- | ---------------------------- |
|
|
102
|
-
| `xv.string(length?)` | `XVString<string>` | String validator |
|
|
103
|
-
| `xv.number()` | `XVNumber<number>` | Number validator |
|
|
104
|
-
| `xv.boolean()` | `XVBoolean<boolean>` | Boolean validator |
|
|
105
|
-
| `xv.date()` | `XVDate<Date>` | Date validator |
|
|
106
|
-
| `xv.array(type, length?)` | `XVArray<T>` | Array of a specific type |
|
|
107
|
-
| `xv.tuple(types)` | `XVTuple<T>` | Tuple with precise types |
|
|
108
|
-
| `xv.union(types)` | `XVUnion<T>` | Union of multiple validators |
|
|
109
|
-
| `xv.object(schema?)` | `XVObject<S>` | Object validator |
|
|
110
|
-
| `xv.map(key, value)` | `XVMap<K, V>` | Map validator |
|
|
111
|
-
| `xv.set(type)` | `XVSet<T>` | Set validator |
|
|
112
|
-
| `xv.record(key, value)` | `XVRecord<K, V>` | Record validator |
|
|
113
|
-
| `xv.enum(values)` | `XVEnum<T>` | Enum validator |
|
|
114
|
-
|
|
115
|
-
### Common Instance Methods
|
|
116
|
-
|
|
117
|
-
* `parse(value: any): T | undefined | null`
|
|
118
|
-
* `optional(): this`
|
|
119
|
-
* `nullable(): this`
|
|
120
|
-
* `default(value: T | (() => T)): this`
|
|
121
|
-
* `transform(cb: (value: T) => T): this`
|
|
122
|
-
|
|
123
|
-
Additional constraint methods are available in `src/types` (e.g., `.min`, `.max`, `.email`, `.unique`, `.float`, `.integer`, etc.).
|
|
124
|
-
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## Advanced Examples
|
|
128
|
-
|
|
129
|
-
### Tuple with Exact Types
|
|
130
|
-
|
|
131
|
-
```ts
|
|
132
|
-
const tpl = xv.tuple([xv.string(), xv.number()]);
|
|
133
|
-
type Tpl = xv.infer<typeof ({ a: tpl })['a']>;
|
|
134
|
-
// [string, number]
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### Nested Objects and Arrays
|
|
138
|
-
|
|
139
|
-
```ts
|
|
140
|
-
const user = xv.object({ name: xv.string(), id: xv.number() });
|
|
141
|
-
const schema = xv.object({ users: xv.array(user) });
|
|
142
|
-
|
|
143
|
-
type SchemaT = xv.infer<typeof schema['arg']>;
|
|
144
|
-
// { users: { name: string; id: number }[] }
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
### Validation with Transform and Default
|
|
148
|
-
|
|
149
|
-
```ts
|
|
150
|
-
const s = xv.string().transform(v => v.trim()).default('n/a');
|
|
151
|
-
const parsed = s.parse(undefined); // "n/a"
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## Migration Notes
|
|
157
|
-
|
|
158
|
-
If you’re upgrading from a pre-generic version of Xanv:
|
|
159
|
-
|
|
160
|
-
* Factories now return **generic class types** — remove legacy wrappers.
|
|
161
|
-
* Use `as const` on schema literals for optimal `xv.infer` inference.
|
|
162
|
-
|
|
163
|
-
---
|
|
164
|
-
|
|
165
|
-
## Development & Testing
|
|
166
|
-
|
|
167
|
-
Run TypeScript checks and tests:
|
|
168
|
-
|
|
169
|
-
```bash
|
|
170
|
-
npx tsc --noEmit
|
|
171
|
-
npm test
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
### Adding New Types
|
|
175
|
-
|
|
176
|
-
1. Create a new generic class under `src/types`.
|
|
177
|
-
2. Add its factory signature in `src/index.ts`.
|
|
178
|
-
3. Write unit tests and update documentation examples.
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
## Contributing
|
|
183
|
-
|
|
184
|
-
* Open issues before large changes.
|
|
185
|
-
* Keep PRs focused and include relevant tests.
|
|
186
|
-
* Update public type definitions and README when altering APIs.
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
## Changelog
|
|
191
|
-
|
|
192
|
-
Refer to `CHANGELOG.md` for updates.
|
|
193
|
-
Include short migration notes for any breaking changes.
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
## License
|
|
198
|
-
|
|
199
|
-
MIT © 2025
|
|
1
|
+
# Xanv — Lightweight Runtime Validation with TypeScript Inference
|
|
2
|
+
|
|
3
|
+
[](#)
|
|
4
|
+
[](LICENSE)
|
|
5
|
+
|
|
6
|
+
**Xanv** is a minimal runtime validation library that pairs elegantly with TypeScript. It provides a fluent API for building runtime-safe schemas that retain full static typing at compile time. With generic class-based validators, you get the best of both worlds — reliable runtime checks and precise type inference.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Table of Contents
|
|
11
|
+
|
|
12
|
+
* Features
|
|
13
|
+
* Installation
|
|
14
|
+
* Quick Start
|
|
15
|
+
* Type Inference & TypeScript Integration
|
|
16
|
+
* API Reference
|
|
17
|
+
* Advanced Examples
|
|
18
|
+
* Migration Notes
|
|
19
|
+
* Development & Testing
|
|
20
|
+
* Contributing
|
|
21
|
+
* Changelog
|
|
22
|
+
* License
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Features
|
|
27
|
+
|
|
28
|
+
* 🚀 **Lightweight & dependency-free** — zero external dependencies.
|
|
29
|
+
* 🔗 **Fluent API** — chainable constraints and transformations.
|
|
30
|
+
* 🧩 **Generic XV classes** — `XVArray<T>`, `XVObject<S>`, `XVMap<K, V>`, and more, for perfect type inference.
|
|
31
|
+
* 🧠 **Type inference helper** — `xv.infer<T>` extracts TypeScript types directly from schema definitions.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Installation
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npm install xanv
|
|
39
|
+
# or
|
|
40
|
+
yarn add xanv
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Quick Start
|
|
46
|
+
|
|
47
|
+
Validate and parse data with type safety:
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
import { xv } from 'xanv';
|
|
51
|
+
|
|
52
|
+
const schema = xv.object({
|
|
53
|
+
id: xv.string().min(3),
|
|
54
|
+
age: xv.number().min(0),
|
|
55
|
+
tags: xv.array(xv.string()),
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
const parsed = schema.parse({ id: 'abc', age: 30, tags: ['x'] });
|
|
59
|
+
console.log(parsed.id);
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The `parse()` method returns a validated value or throws on failure.
|
|
63
|
+
Control missing or nullable values with `.optional()`, `.nullable()`, and `.default()`.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Type Inference & TypeScript Integration
|
|
68
|
+
|
|
69
|
+
Because each factory returns a **generic class instance**, Xanv retains full type information across schema definitions.
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
import { xv } from 'xanv';
|
|
73
|
+
|
|
74
|
+
const schema = {
|
|
75
|
+
id: xv.string(),
|
|
76
|
+
age: xv.number(),
|
|
77
|
+
tags: xv.array(xv.string()),
|
|
78
|
+
} as const;
|
|
79
|
+
|
|
80
|
+
type SchemaT = xv.infer<typeof schema>;
|
|
81
|
+
// { id: string; age: number; tags: string[] }
|
|
82
|
+
|
|
83
|
+
const obj = xv.object(schema);
|
|
84
|
+
type ObjT = xv.infer<typeof schema>; // same as SchemaT
|
|
85
|
+
|
|
86
|
+
const maybe: ObjT | undefined | null = obj.parse({ id: 'a', age: 1, tags: ['x'] });
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### How Inference Works
|
|
90
|
+
|
|
91
|
+
* Each `XV` class is generic, e.g. `XVObject<S>`, `XVArray<T>`, `XVRecord<K, V>`, `XVTuple<Ts>`.
|
|
92
|
+
* The `xv.infer<typeof schema>` utility traverses schema literals and extracts TypeScript equivalents.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## API Reference
|
|
97
|
+
|
|
98
|
+
Each top-level factory method on the `xv` export returns a typed validator class.
|
|
99
|
+
|
|
100
|
+
| Method | Returns | Description |
|
|
101
|
+
| ------------------------- | -------------------- | ---------------------------- |
|
|
102
|
+
| `xv.string(length?)` | `XVString<string>` | String validator |
|
|
103
|
+
| `xv.number()` | `XVNumber<number>` | Number validator |
|
|
104
|
+
| `xv.boolean()` | `XVBoolean<boolean>` | Boolean validator |
|
|
105
|
+
| `xv.date()` | `XVDate<Date>` | Date validator |
|
|
106
|
+
| `xv.array(type, length?)` | `XVArray<T>` | Array of a specific type |
|
|
107
|
+
| `xv.tuple(types)` | `XVTuple<T>` | Tuple with precise types |
|
|
108
|
+
| `xv.union(types)` | `XVUnion<T>` | Union of multiple validators |
|
|
109
|
+
| `xv.object(schema?)` | `XVObject<S>` | Object validator |
|
|
110
|
+
| `xv.map(key, value)` | `XVMap<K, V>` | Map validator |
|
|
111
|
+
| `xv.set(type)` | `XVSet<T>` | Set validator |
|
|
112
|
+
| `xv.record(key, value)` | `XVRecord<K, V>` | Record validator |
|
|
113
|
+
| `xv.enum(values)` | `XVEnum<T>` | Enum validator |
|
|
114
|
+
|
|
115
|
+
### Common Instance Methods
|
|
116
|
+
|
|
117
|
+
* `parse(value: any): T | undefined | null`
|
|
118
|
+
* `optional(): this`
|
|
119
|
+
* `nullable(): this`
|
|
120
|
+
* `default(value: T | (() => T)): this`
|
|
121
|
+
* `transform(cb: (value: T) => T): this`
|
|
122
|
+
|
|
123
|
+
Additional constraint methods are available in `src/types` (e.g., `.min`, `.max`, `.email`, `.unique`, `.float`, `.integer`, etc.).
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Advanced Examples
|
|
128
|
+
|
|
129
|
+
### Tuple with Exact Types
|
|
130
|
+
|
|
131
|
+
```ts
|
|
132
|
+
const tpl = xv.tuple([xv.string(), xv.number()]);
|
|
133
|
+
type Tpl = xv.infer<typeof ({ a: tpl })['a']>;
|
|
134
|
+
// [string, number]
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Nested Objects and Arrays
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
const user = xv.object({ name: xv.string(), id: xv.number() });
|
|
141
|
+
const schema = xv.object({ users: xv.array(user) });
|
|
142
|
+
|
|
143
|
+
type SchemaT = xv.infer<typeof schema['arg']>;
|
|
144
|
+
// { users: { name: string; id: number }[] }
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Validation with Transform and Default
|
|
148
|
+
|
|
149
|
+
```ts
|
|
150
|
+
const s = xv.string().transform(v => v.trim()).default('n/a');
|
|
151
|
+
const parsed = s.parse(undefined); // "n/a"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Migration Notes
|
|
157
|
+
|
|
158
|
+
If you’re upgrading from a pre-generic version of Xanv:
|
|
159
|
+
|
|
160
|
+
* Factories now return **generic class types** — remove legacy wrappers.
|
|
161
|
+
* Use `as const` on schema literals for optimal `xv.infer` inference.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Development & Testing
|
|
166
|
+
|
|
167
|
+
Run TypeScript checks and tests:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
npx tsc --noEmit
|
|
171
|
+
npm test
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Adding New Types
|
|
175
|
+
|
|
176
|
+
1. Create a new generic class under `src/types`.
|
|
177
|
+
2. Add its factory signature in `src/index.ts`.
|
|
178
|
+
3. Write unit tests and update documentation examples.
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Contributing
|
|
183
|
+
|
|
184
|
+
* Open issues before large changes.
|
|
185
|
+
* Keep PRs focused and include relevant tests.
|
|
186
|
+
* Update public type definitions and README when altering APIs.
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Changelog
|
|
191
|
+
|
|
192
|
+
Refer to `CHANGELOG.md` for updates.
|
|
193
|
+
Include short migration notes for any breaking changes.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## License
|
|
198
|
+
|
|
199
|
+
MIT © 2025
|
package/types/Any.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Any.cjs","sources":["../../src/types/Any.ts"],"sourcesContent":["import XVType from \"../XVType\";\n\nclass XVAny<T = any> extends XVType<T> {\n protected check(value: any): any {\n return value;\n }\n}\n\nexport default XVAny;\n"],"names":[],"mappings":";;;;AAEA,MAAM,KAAe,SAAQ,MAAS,CAAA;AACzB,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,OAAO,KAAK;IACf;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"Any.cjs","sources":["../../src/types/Any.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\n\r\nclass XVAny<T = any> extends XVType<T> {\r\n protected check(value: any): any {\r\n return value;\r\n }\r\n}\r\n\r\nexport default XVAny;\r\n"],"names":[],"mappings":";;;;AAEA,MAAM,KAAe,SAAQ,MAAS,CAAA;AACzB,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,OAAO,KAAK;IACf;AACF;;;;"}
|
package/types/Any.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Any.js","sources":["../../src/types/Any.ts"],"sourcesContent":["import XVType from \"../XVType\";\n\nclass XVAny<T = any> extends XVType<T> {\n protected check(value: any): any {\n return value;\n }\n}\n\nexport default XVAny;\n"],"names":[],"mappings":";;AAEA,MAAM,KAAe,SAAQ,MAAS,CAAA;AACzB,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,OAAO,KAAK;IACf;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"Any.js","sources":["../../src/types/Any.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\n\r\nclass XVAny<T = any> extends XVType<T> {\r\n protected check(value: any): any {\r\n return value;\r\n }\r\n}\r\n\r\nexport default XVAny;\r\n"],"names":[],"mappings":";;AAEA,MAAM,KAAe,SAAQ,MAAS,CAAA;AACzB,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,OAAO,KAAK;IACf;AACF;;;;"}
|
package/types/Array.cjs
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
var XVType = require('../XVType.cjs');
|
|
4
4
|
|
|
5
5
|
class XVArray extends XVType {
|
|
6
|
-
constructor(
|
|
6
|
+
constructor(Arraytype) {
|
|
7
7
|
super();
|
|
8
|
-
this.
|
|
8
|
+
this.Arraytype = Arraytype;
|
|
9
9
|
}
|
|
10
10
|
check(input) {
|
|
11
11
|
if (!Array.isArray(input))
|
|
12
12
|
throw new Error("Expected array");
|
|
13
|
-
const arr = input.map(v => this.
|
|
13
|
+
const arr = input.map(v => this.Arraytype.parse(v));
|
|
14
14
|
return arr;
|
|
15
15
|
}
|
|
16
16
|
min(length) {
|
package/types/Array.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Array.cjs","sources":["../../src/types/Array.ts"],"sourcesContent":["import XVType from \"../XVType\";\nimport { Infer } from \"../types\";\n\nclass XVArray<T extends XVType<any>> extends XVType<Infer<T>[]> {\n constructor(readonly
|
|
1
|
+
{"version":3,"file":"Array.cjs","sources":["../../src/types/Array.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nclass XVArray<T extends XVType<any>> extends XVType<Infer<T>[]> {\r\n constructor(readonly Arraytype: T) {\r\n super()\r\n }\r\n\r\n protected check(input: unknown): Infer<T>[] {\r\n if (!Array.isArray(input)) throw new Error(\"Expected array\")\r\n const arr = input.map(v => this.Arraytype.parse(v))\r\n return arr as Infer<T>[]\r\n }\r\n\r\n min(length: number) {\r\n return this.set(\"min\", (v: unknown) => {\r\n const arr = v as Infer<T>[];\r\n if (arr.length < length) {\r\n throw new Error(`Array length should be at least ${length} items, received ${arr.length}`);\r\n }\r\n }, length);\r\n }\r\n\r\n\r\n max(length: number) {\r\n return this.set(\"max\", (v: unknown) => {\r\n const arr = v as Infer<T>[];\r\n if (arr.length > length) {\r\n throw new Error(`Array length should not exceed ${length} items, received ${arr.length}`);\r\n }\r\n }, length);\r\n }\r\n\r\n unique() {\r\n return this.set(\"unique\", (v: unknown) => {\r\n const arr = v as Infer<T>[];\r\n const seen = new Set<string>();\r\n\r\n for (const item of arr) {\r\n const key = JSON.stringify(item);\r\n if (seen.has(key)) {\r\n throw new Error(`Array items should be unique, found duplicate: ${key}`);\r\n }\r\n seen.add(key);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default XVArray;\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,OAA+B,SAAQ,MAAkB,CAAA;AAC5D,IAAA,WAAA,CAAqB,SAAY,EAAA;AAC9B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,SAAS,GAAT,SAAS;IAE9B;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;AAC5D,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnD,QAAA,OAAO,GAAiB;IAC3B;AAEA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAU,KAAI;YACnC,MAAM,GAAG,GAAG,CAAe;AAC3B,YAAA,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,MAAM,CAAA,iBAAA,EAAoB,GAAG,CAAC,MAAM,CAAA,CAAE,CAAC;YAC7F;QACH,CAAC,EAAE,MAAM,CAAC;IACb;AAGA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAU,KAAI;YACnC,MAAM,GAAG,GAAG,CAAe;AAC3B,YAAA,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,CAAA,+BAAA,EAAkC,MAAM,CAAA,iBAAA,EAAoB,GAAG,CAAC,MAAM,CAAA,CAAE,CAAC;YAC5F;QACH,CAAC,EAAE,MAAM,CAAC;IACb;IAEA,MAAM,GAAA;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAU,KAAI;YACtC,MAAM,GAAG,GAAG,CAAe;AAC3B,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAE9B,YAAA,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;gBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAChC,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAChB,oBAAA,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,CAAA,CAAE,CAAC;gBAC3E;AACA,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAChB;AACH,QAAA,CAAC,CAAC;IACL;AACF;;;;"}
|
package/types/Array.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ import XVType from '../XVType.js';
|
|
|
2
2
|
import { Infer } from '../types.js';
|
|
3
3
|
|
|
4
4
|
declare class XVArray<T extends XVType<any>> extends XVType<Infer<T>[]> {
|
|
5
|
-
readonly
|
|
6
|
-
constructor(
|
|
5
|
+
readonly Arraytype: T;
|
|
6
|
+
constructor(Arraytype: T);
|
|
7
7
|
protected check(input: unknown): Infer<T>[];
|
|
8
8
|
min(length: number): this;
|
|
9
9
|
max(length: number): this;
|
package/types/Array.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import XVType from '../XVType.js';
|
|
2
2
|
|
|
3
3
|
class XVArray extends XVType {
|
|
4
|
-
constructor(
|
|
4
|
+
constructor(Arraytype) {
|
|
5
5
|
super();
|
|
6
|
-
this.
|
|
6
|
+
this.Arraytype = Arraytype;
|
|
7
7
|
}
|
|
8
8
|
check(input) {
|
|
9
9
|
if (!Array.isArray(input))
|
|
10
10
|
throw new Error("Expected array");
|
|
11
|
-
const arr = input.map(v => this.
|
|
11
|
+
const arr = input.map(v => this.Arraytype.parse(v));
|
|
12
12
|
return arr;
|
|
13
13
|
}
|
|
14
14
|
min(length) {
|
package/types/Array.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Array.js","sources":["../../src/types/Array.ts"],"sourcesContent":["import XVType from \"../XVType\";\nimport { Infer } from \"../types\";\n\nclass XVArray<T extends XVType<any>> extends XVType<Infer<T>[]> {\n constructor(readonly
|
|
1
|
+
{"version":3,"file":"Array.js","sources":["../../src/types/Array.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nclass XVArray<T extends XVType<any>> extends XVType<Infer<T>[]> {\r\n constructor(readonly Arraytype: T) {\r\n super()\r\n }\r\n\r\n protected check(input: unknown): Infer<T>[] {\r\n if (!Array.isArray(input)) throw new Error(\"Expected array\")\r\n const arr = input.map(v => this.Arraytype.parse(v))\r\n return arr as Infer<T>[]\r\n }\r\n\r\n min(length: number) {\r\n return this.set(\"min\", (v: unknown) => {\r\n const arr = v as Infer<T>[];\r\n if (arr.length < length) {\r\n throw new Error(`Array length should be at least ${length} items, received ${arr.length}`);\r\n }\r\n }, length);\r\n }\r\n\r\n\r\n max(length: number) {\r\n return this.set(\"max\", (v: unknown) => {\r\n const arr = v as Infer<T>[];\r\n if (arr.length > length) {\r\n throw new Error(`Array length should not exceed ${length} items, received ${arr.length}`);\r\n }\r\n }, length);\r\n }\r\n\r\n unique() {\r\n return this.set(\"unique\", (v: unknown) => {\r\n const arr = v as Infer<T>[];\r\n const seen = new Set<string>();\r\n\r\n for (const item of arr) {\r\n const key = JSON.stringify(item);\r\n if (seen.has(key)) {\r\n throw new Error(`Array items should be unique, found duplicate: ${key}`);\r\n }\r\n seen.add(key);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default XVArray;\r\n"],"names":[],"mappings":";;AAGA,MAAM,OAA+B,SAAQ,MAAkB,CAAA;AAC5D,IAAA,WAAA,CAAqB,SAAY,EAAA;AAC9B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,SAAS,GAAT,SAAS;IAE9B;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;AAC5D,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnD,QAAA,OAAO,GAAiB;IAC3B;AAEA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAU,KAAI;YACnC,MAAM,GAAG,GAAG,CAAe;AAC3B,YAAA,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,MAAM,CAAA,iBAAA,EAAoB,GAAG,CAAC,MAAM,CAAA,CAAE,CAAC;YAC7F;QACH,CAAC,EAAE,MAAM,CAAC;IACb;AAGA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAU,KAAI;YACnC,MAAM,GAAG,GAAG,CAAe;AAC3B,YAAA,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,CAAA,+BAAA,EAAkC,MAAM,CAAA,iBAAA,EAAoB,GAAG,CAAC,MAAM,CAAA,CAAE,CAAC;YAC5F;QACH,CAAC,EAAE,MAAM,CAAC;IACb;IAEA,MAAM,GAAA;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAU,KAAI;YACtC,MAAM,GAAG,GAAG,CAAe;AAC3B,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAE9B,YAAA,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;gBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAChC,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAChB,oBAAA,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,CAAA,CAAE,CAAC;gBAC3E;AACA,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAChB;AACH,QAAA,CAAC,CAAC;IACL;AACF;;;;"}
|
package/types/Boolean.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Boolean.cjs","sources":["../../src/types/Boolean.ts"],"sourcesContent":["import XVType from \"../XVType\";\n\nclass XVBoolean extends XVType<boolean> {\n protected check(value: unknown): boolean {\n if (typeof value !== \"boolean\") {\n throw new Error(`Value should be a boolean, received ${typeof value}`);\n }\n return value;\n }\n}\n\nexport default XVBoolean;\n"],"names":[],"mappings":";;;;AAEA,MAAM,SAAU,SAAQ,MAAe,CAAA;AAC1B,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,KAAK,CAAA,CAAE,CAAC;QACzE;AACA,QAAA,OAAO,KAAK;IACf;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"Boolean.cjs","sources":["../../src/types/Boolean.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\n\r\nclass XVBoolean extends XVType<boolean> {\r\n protected check(value: unknown): boolean {\r\n if (typeof value !== \"boolean\") {\r\n throw new Error(`Value should be a boolean, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n}\r\n\r\nexport default XVBoolean;\r\n"],"names":[],"mappings":";;;;AAEA,MAAM,SAAU,SAAQ,MAAe,CAAA;AAC1B,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,KAAK,CAAA,CAAE,CAAC;QACzE;AACA,QAAA,OAAO,KAAK;IACf;AACF;;;;"}
|
package/types/Boolean.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Boolean.js","sources":["../../src/types/Boolean.ts"],"sourcesContent":["import XVType from \"../XVType\";\n\nclass XVBoolean extends XVType<boolean> {\n protected check(value: unknown): boolean {\n if (typeof value !== \"boolean\") {\n throw new Error(`Value should be a boolean, received ${typeof value}`);\n }\n return value;\n }\n}\n\nexport default XVBoolean;\n"],"names":[],"mappings":";;AAEA,MAAM,SAAU,SAAQ,MAAe,CAAA;AAC1B,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,KAAK,CAAA,CAAE,CAAC;QACzE;AACA,QAAA,OAAO,KAAK;IACf;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"Boolean.js","sources":["../../src/types/Boolean.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\n\r\nclass XVBoolean extends XVType<boolean> {\r\n protected check(value: unknown): boolean {\r\n if (typeof value !== \"boolean\") {\r\n throw new Error(`Value should be a boolean, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n}\r\n\r\nexport default XVBoolean;\r\n"],"names":[],"mappings":";;AAEA,MAAM,SAAU,SAAQ,MAAe,CAAA;AAC1B,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,KAAK,CAAA,CAAE,CAAC;QACzE;AACA,QAAA,OAAO,KAAK;IACf;AACF;;;;"}
|
package/types/Date.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Date.cjs","sources":["../../src/types/Date.ts"],"sourcesContent":["import XVType from \"../XVType\";\n\nclass XVDate extends XVType<Date> {\n protected check(value: unknown): Date {\n if (!(value instanceof Date) || isNaN(value.getTime())) {\n throw new Error(`Value should be a valid Date object, received ${typeof value}`);\n }\n return value;\n }\n}\n\nexport default XVDate;\n"],"names":[],"mappings":";;;;AAEA,MAAM,MAAO,SAAQ,MAAY,CAAA;AACpB,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,CAAA,8CAAA,EAAiD,OAAO,KAAK,CAAA,CAAE,CAAC;QACnF;AACA,QAAA,OAAO,KAAK;IACf;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"Date.cjs","sources":["../../src/types/Date.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\n\r\nclass XVDate extends XVType<Date> {\r\n protected check(value: unknown): Date {\r\n if (!(value instanceof Date) || isNaN(value.getTime())) {\r\n throw new Error(`Value should be a valid Date object, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n}\r\n\r\nexport default XVDate;\r\n"],"names":[],"mappings":";;;;AAEA,MAAM,MAAO,SAAQ,MAAY,CAAA;AACpB,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,CAAA,8CAAA,EAAiD,OAAO,KAAK,CAAA,CAAE,CAAC;QACnF;AACA,QAAA,OAAO,KAAK;IACf;AACF;;;;"}
|
package/types/Date.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Date.js","sources":["../../src/types/Date.ts"],"sourcesContent":["import XVType from \"../XVType\";\n\nclass XVDate extends XVType<Date> {\n protected check(value: unknown): Date {\n if (!(value instanceof Date) || isNaN(value.getTime())) {\n throw new Error(`Value should be a valid Date object, received ${typeof value}`);\n }\n return value;\n }\n}\n\nexport default XVDate;\n"],"names":[],"mappings":";;AAEA,MAAM,MAAO,SAAQ,MAAY,CAAA;AACpB,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,CAAA,8CAAA,EAAiD,OAAO,KAAK,CAAA,CAAE,CAAC;QACnF;AACA,QAAA,OAAO,KAAK;IACf;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"Date.js","sources":["../../src/types/Date.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\n\r\nclass XVDate extends XVType<Date> {\r\n protected check(value: unknown): Date {\r\n if (!(value instanceof Date) || isNaN(value.getTime())) {\r\n throw new Error(`Value should be a valid Date object, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n}\r\n\r\nexport default XVDate;\r\n"],"names":[],"mappings":";;AAEA,MAAM,MAAO,SAAQ,MAAY,CAAA;AACpB,IAAA,KAAK,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,CAAA,8CAAA,EAAiD,OAAO,KAAK,CAAA,CAAE,CAAC;QACnF;AACA,QAAA,OAAO,KAAK;IACf;AACF;;;;"}
|