xanv 1.1.26 → 1.1.27

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 CHANGED
@@ -1 +1 @@
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;;;;"}
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;;;;"}
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\";\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;;;;"}
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;;;;"}
package/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import XVType from \"./XVType\";\r\nimport XVAny from \"./types/Any\";\r\nimport XVArray from \"./types/Array\";\r\nimport XVBoolean from \"./types/Boolean\";\r\nimport XVDate from \"./types/Date\";\r\nimport XVEnum from \"./types/Enum\";\r\nimport XVFile from \"./types/File\";\r\nimport XVMap from \"./types/Map\";\r\nimport XVNumber from \"./types/Number\";\r\nimport XVObject from \"./types/Object\";\r\nimport XVRecord from \"./types/Record\";\r\nimport XVSet from \"./types/Set\";\r\nimport XVString from \"./types/String\";\r\nimport XVTuple from \"./types/Tuple\";\r\nimport XVUnion from \"./types/Union\";\r\nimport XVFunction, { XVFunctionOptions } from \"./types/Function\";\r\nimport XVPromise from \"./types/Promise\";\r\nimport XVFunctionComponent from \"./types/FunctionComponent\";\r\nexport * from \"./types\";\r\n\r\nexport {\r\n XVType,\r\n XVAny,\r\n XVArray,\r\n XVBoolean,\r\n XVFunction,\r\n XVPromise,\r\n XVDate,\r\n XVEnum,\r\n XVFile,\r\n XVMap,\r\n XVNumber,\r\n XVObject,\r\n XVRecord,\r\n XVSet,\r\n XVString,\r\n XVTuple,\r\n XVUnion,\r\n XVFunctionComponent,\r\n};\r\n\r\nexport const xv = {\r\n any: <T = any>() => new XVAny<T>(),\r\n array: <T extends XVType<any>>(type: T) => new XVArray<T>(type),\r\n boolean: () => new XVBoolean(),\r\n date: () => new XVDate(),\r\n enum: <const T extends string | number>(\r\n input: readonly T[] | Record<string, T>,\r\n ): XVEnum<T> => new XVEnum<T>(input),\r\n file: () => new XVFile(),\r\n number: (length?: number) => new XVNumber(length),\r\n object: <T extends Record<string | number, XVType<any>>>(shape: T) =>\r\n new XVObject(shape),\r\n record: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) =>\r\n new XVRecord<K, V>(key, value),\r\n map: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) =>\r\n new XVMap<K, V>(key, value),\r\n set: <T extends XVType<any>>(type: T) => new XVSet(type),\r\n string: (length?: number) => new XVString(length),\r\n tuple: <T extends XVType<any>[]>(type: T) => new XVTuple<T>(type),\r\n union: <T extends XVType<any>[]>(types: T) => new XVUnion<T>(types),\r\n function: <const A extends XVType<any>[], R extends XVType<any>>(\r\n options: XVFunctionOptions<A, R>,\r\n ) => new XVFunction<A, R>(options),\r\n promise: <T extends XVType<any>>(type: T) => new XVPromise(type),\r\n\r\n functionComponent: <\r\n P extends Record<string, XVType<any>>,\r\n Async extends boolean = false,\r\n >(\r\n props: P,\r\n async?: Async,\r\n ) => new XVFunctionComponent<P, Async>(props, async),\r\n};\r\n"],"names":["XVAny","XVArray","XVBoolean","XVDate","XVEnum","XVFile","XVNumber","XVObject","XVRecord","XVMap","XVSet","XVString","XVTuple","XVUnion","XVFunction","XVPromise","XVFunctionComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAyCO,MAAM,EAAE,GAAG;AAChB,IAAA,GAAG,EAAE,MAAe,IAAIA,GAAK,EAAK;IAClC,KAAK,EAAE,CAAwB,IAAO,KAAK,IAAIC,KAAO,CAAI,IAAI,CAAC;AAC/D,IAAA,OAAO,EAAE,MAAM,IAAIC,OAAS,EAAE;AAC9B,IAAA,IAAI,EAAE,MAAM,IAAIC,IAAM,EAAE;IACxB,IAAI,EAAE,CACJ,KAAuC,KACzB,IAAIC,IAAM,CAAI,KAAK,CAAC;AACpC,IAAA,IAAI,EAAE,MAAM,IAAIC,IAAM,EAAE;IACxB,MAAM,EAAE,CAAC,MAAe,KAAK,IAAIC,MAAQ,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAiD,KAAQ,KAC/D,IAAIC,QAAQ,CAAC,KAAK,CAAC;AACrB,IAAA,MAAM,EAAE,CAA+C,GAAM,EAAE,KAAQ,KACrE,IAAIC,MAAQ,CAAO,GAAG,EAAE,KAAK,CAAC;AAChC,IAAA,GAAG,EAAE,CAA+C,GAAM,EAAE,KAAQ,KAClE,IAAIC,GAAK,CAAO,GAAG,EAAE,KAAK,CAAC;IAC7B,GAAG,EAAE,CAAwB,IAAO,KAAK,IAAIC,GAAK,CAAC,IAAI,CAAC;IACxD,MAAM,EAAE,CAAC,MAAe,KAAK,IAAIC,MAAQ,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAA0B,IAAO,KAAK,IAAIC,KAAO,CAAI,IAAI,CAAC;IACjE,KAAK,EAAE,CAA0B,KAAQ,KAAK,IAAIC,KAAO,CAAI,KAAK,CAAC;IACnE,QAAQ,EAAE,CACR,OAAgC,KAC7B,IAAIC,QAAU,CAAO,OAAO,CAAC;IAClC,OAAO,EAAE,CAAwB,IAAO,KAAK,IAAIC,SAAS,CAAC,IAAI,CAAC;AAEhE,IAAA,iBAAiB,EAAE,CAIjB,KAAQ,EACR,KAAa,KACV,IAAIC,iBAAmB,CAAW,KAAK,EAAE,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;"}
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, { XVFunctionOptions } from \"./types/Function\";\nimport XVPromise from \"./types/Promise\";\nimport XVFunctionComponent from \"./types/FunctionComponent\";\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 XVFunctionComponent,\n};\n\nexport const xv = {\n any: <T = any>() => new XVAny<T>(),\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>(\n input: readonly T[] | Record<string, T>,\n ): XVEnum<T> => new XVEnum<T>(input),\n file: () => new XVFile(),\n number: (length?: number) => new XVNumber(length),\n object: <T extends Record<string | number, XVType<any>>>(shape: T) =>\n new XVObject(shape),\n record: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) =>\n new XVRecord<K, V>(key, value),\n map: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) =>\n 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>>(\n options: XVFunctionOptions<A, R>,\n ) => new XVFunction<A, R>(options),\n promise: <T extends XVType<any>>(type: T) => new XVPromise(type),\n\n functionComponent: <\n P extends Record<string, XVType<any>>,\n Async extends boolean = false,\n >(\n props: P,\n async?: Async,\n ) => new XVFunctionComponent<P, Async>(props, async),\n};\n"],"names":["XVAny","XVArray","XVBoolean","XVDate","XVEnum","XVFile","XVNumber","XVObject","XVRecord","XVMap","XVSet","XVString","XVTuple","XVUnion","XVFunction","XVPromise","XVFunctionComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAyCO,MAAM,EAAE,GAAG;AAChB,IAAA,GAAG,EAAE,MAAe,IAAIA,GAAK,EAAK;IAClC,KAAK,EAAE,CAAwB,IAAO,KAAK,IAAIC,KAAO,CAAI,IAAI,CAAC;AAC/D,IAAA,OAAO,EAAE,MAAM,IAAIC,OAAS,EAAE;AAC9B,IAAA,IAAI,EAAE,MAAM,IAAIC,IAAM,EAAE;IACxB,IAAI,EAAE,CACJ,KAAuC,KACzB,IAAIC,IAAM,CAAI,KAAK,CAAC;AACpC,IAAA,IAAI,EAAE,MAAM,IAAIC,IAAM,EAAE;IACxB,MAAM,EAAE,CAAC,MAAe,KAAK,IAAIC,MAAQ,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAiD,KAAQ,KAC/D,IAAIC,QAAQ,CAAC,KAAK,CAAC;AACrB,IAAA,MAAM,EAAE,CAA+C,GAAM,EAAE,KAAQ,KACrE,IAAIC,MAAQ,CAAO,GAAG,EAAE,KAAK,CAAC;AAChC,IAAA,GAAG,EAAE,CAA+C,GAAM,EAAE,KAAQ,KAClE,IAAIC,GAAK,CAAO,GAAG,EAAE,KAAK,CAAC;IAC7B,GAAG,EAAE,CAAwB,IAAO,KAAK,IAAIC,GAAK,CAAC,IAAI,CAAC;IACxD,MAAM,EAAE,CAAC,MAAe,KAAK,IAAIC,MAAQ,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAA0B,IAAO,KAAK,IAAIC,KAAO,CAAI,IAAI,CAAC;IACjE,KAAK,EAAE,CAA0B,KAAQ,KAAK,IAAIC,KAAO,CAAI,KAAK,CAAC;IACnE,QAAQ,EAAE,CACR,OAAgC,KAC7B,IAAIC,QAAU,CAAO,OAAO,CAAC;IAClC,OAAO,EAAE,CAAwB,IAAO,KAAK,IAAIC,SAAS,CAAC,IAAI,CAAC;AAEhE,IAAA,iBAAiB,EAAE,CAIjB,KAAQ,EACR,KAAa,KACV,IAAIC,iBAAmB,CAAW,KAAK,EAAE,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;"}
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import XVType from \"./XVType\";\r\nimport XVAny from \"./types/Any\";\r\nimport XVArray from \"./types/Array\";\r\nimport XVBoolean from \"./types/Boolean\";\r\nimport XVDate from \"./types/Date\";\r\nimport XVEnum from \"./types/Enum\";\r\nimport XVFile from \"./types/File\";\r\nimport XVMap from \"./types/Map\";\r\nimport XVNumber from \"./types/Number\";\r\nimport XVObject from \"./types/Object\";\r\nimport XVRecord from \"./types/Record\";\r\nimport XVSet from \"./types/Set\";\r\nimport XVString from \"./types/String\";\r\nimport XVTuple from \"./types/Tuple\";\r\nimport XVUnion from \"./types/Union\";\r\nimport XVFunction, { XVFunctionOptions } from \"./types/Function\";\r\nimport XVPromise from \"./types/Promise\";\r\nimport XVFunctionComponent from \"./types/FunctionComponent\";\r\nexport * from \"./types\";\r\n\r\nexport {\r\n XVType,\r\n XVAny,\r\n XVArray,\r\n XVBoolean,\r\n XVFunction,\r\n XVPromise,\r\n XVDate,\r\n XVEnum,\r\n XVFile,\r\n XVMap,\r\n XVNumber,\r\n XVObject,\r\n XVRecord,\r\n XVSet,\r\n XVString,\r\n XVTuple,\r\n XVUnion,\r\n XVFunctionComponent,\r\n};\r\n\r\nexport const xv = {\r\n any: <T = any>() => new XVAny<T>(),\r\n array: <T extends XVType<any>>(type: T) => new XVArray<T>(type),\r\n boolean: () => new XVBoolean(),\r\n date: () => new XVDate(),\r\n enum: <const T extends string | number>(\r\n input: readonly T[] | Record<string, T>,\r\n ): XVEnum<T> => new XVEnum<T>(input),\r\n file: () => new XVFile(),\r\n number: (length?: number) => new XVNumber(length),\r\n object: <T extends Record<string | number, XVType<any>>>(shape: T) =>\r\n new XVObject(shape),\r\n record: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) =>\r\n new XVRecord<K, V>(key, value),\r\n map: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) =>\r\n new XVMap<K, V>(key, value),\r\n set: <T extends XVType<any>>(type: T) => new XVSet(type),\r\n string: (length?: number) => new XVString(length),\r\n tuple: <T extends XVType<any>[]>(type: T) => new XVTuple<T>(type),\r\n union: <T extends XVType<any>[]>(types: T) => new XVUnion<T>(types),\r\n function: <const A extends XVType<any>[], R extends XVType<any>>(\r\n options: XVFunctionOptions<A, R>,\r\n ) => new XVFunction<A, R>(options),\r\n promise: <T extends XVType<any>>(type: T) => new XVPromise(type),\r\n\r\n functionComponent: <\r\n P extends Record<string, XVType<any>>,\r\n Async extends boolean = false,\r\n >(\r\n props: P,\r\n async?: Async,\r\n ) => new XVFunctionComponent<P, Async>(props, async),\r\n};\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAyCO,MAAM,EAAE,GAAG;AAChB,IAAA,GAAG,EAAE,MAAe,IAAI,KAAK,EAAK;IAClC,KAAK,EAAE,CAAwB,IAAO,KAAK,IAAI,OAAO,CAAI,IAAI,CAAC;AAC/D,IAAA,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE;AAC9B,IAAA,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE;IACxB,IAAI,EAAE,CACJ,KAAuC,KACzB,IAAI,MAAM,CAAI,KAAK,CAAC;AACpC,IAAA,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE;IACxB,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAiD,KAAQ,KAC/D,IAAI,QAAQ,CAAC,KAAK,CAAC;AACrB,IAAA,MAAM,EAAE,CAA+C,GAAM,EAAE,KAAQ,KACrE,IAAI,QAAQ,CAAO,GAAG,EAAE,KAAK,CAAC;AAChC,IAAA,GAAG,EAAE,CAA+C,GAAM,EAAE,KAAQ,KAClE,IAAI,KAAK,CAAO,GAAG,EAAE,KAAK,CAAC;IAC7B,GAAG,EAAE,CAAwB,IAAO,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;IACxD,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAA0B,IAAO,KAAK,IAAI,OAAO,CAAI,IAAI,CAAC;IACjE,KAAK,EAAE,CAA0B,KAAQ,KAAK,IAAI,OAAO,CAAI,KAAK,CAAC;IACnE,QAAQ,EAAE,CACR,OAAgC,KAC7B,IAAI,UAAU,CAAO,OAAO,CAAC;IAClC,OAAO,EAAE,CAAwB,IAAO,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC;AAEhE,IAAA,iBAAiB,EAAE,CAIjB,KAAQ,EACR,KAAa,KACV,IAAI,mBAAmB,CAAW,KAAK,EAAE,KAAK,CAAC;;;;;"}
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, { XVFunctionOptions } from \"./types/Function\";\nimport XVPromise from \"./types/Promise\";\nimport XVFunctionComponent from \"./types/FunctionComponent\";\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 XVFunctionComponent,\n};\n\nexport const xv = {\n any: <T = any>() => new XVAny<T>(),\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>(\n input: readonly T[] | Record<string, T>,\n ): XVEnum<T> => new XVEnum<T>(input),\n file: () => new XVFile(),\n number: (length?: number) => new XVNumber(length),\n object: <T extends Record<string | number, XVType<any>>>(shape: T) =>\n new XVObject(shape),\n record: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) =>\n new XVRecord<K, V>(key, value),\n map: <K extends XVType<any>, V extends XVType<any>>(key: K, value: V) =>\n 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>>(\n options: XVFunctionOptions<A, R>,\n ) => new XVFunction<A, R>(options),\n promise: <T extends XVType<any>>(type: T) => new XVPromise(type),\n\n functionComponent: <\n P extends Record<string, XVType<any>>,\n Async extends boolean = false,\n >(\n props: P,\n async?: Async,\n ) => new XVFunctionComponent<P, Async>(props, async),\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAyCO,MAAM,EAAE,GAAG;AAChB,IAAA,GAAG,EAAE,MAAe,IAAI,KAAK,EAAK;IAClC,KAAK,EAAE,CAAwB,IAAO,KAAK,IAAI,OAAO,CAAI,IAAI,CAAC;AAC/D,IAAA,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE;AAC9B,IAAA,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE;IACxB,IAAI,EAAE,CACJ,KAAuC,KACzB,IAAI,MAAM,CAAI,KAAK,CAAC;AACpC,IAAA,IAAI,EAAE,MAAM,IAAI,MAAM,EAAE;IACxB,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAiD,KAAQ,KAC/D,IAAI,QAAQ,CAAC,KAAK,CAAC;AACrB,IAAA,MAAM,EAAE,CAA+C,GAAM,EAAE,KAAQ,KACrE,IAAI,QAAQ,CAAO,GAAG,EAAE,KAAK,CAAC;AAChC,IAAA,GAAG,EAAE,CAA+C,GAAM,EAAE,KAAQ,KAClE,IAAI,KAAK,CAAO,GAAG,EAAE,KAAK,CAAC;IAC7B,GAAG,EAAE,CAAwB,IAAO,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;IACxD,MAAM,EAAE,CAAC,MAAe,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IACjD,KAAK,EAAE,CAA0B,IAAO,KAAK,IAAI,OAAO,CAAI,IAAI,CAAC;IACjE,KAAK,EAAE,CAA0B,KAAQ,KAAK,IAAI,OAAO,CAAI,KAAK,CAAC;IACnE,QAAQ,EAAE,CACR,OAAgC,KAC7B,IAAI,UAAU,CAAO,OAAO,CAAC;IAClC,OAAO,EAAE,CAAwB,IAAO,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC;AAEhE,IAAA,iBAAiB,EAAE,CAIjB,KAAQ,EACR,KAAa,KACV,IAAI,mBAAmB,CAAW,KAAK,EAAE,KAAK,CAAC;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xanv",
3
- "version": "1.1.26",
3
+ "version": "1.1.27",
4
4
  "types": "./index.d.ts",
5
5
  "main": "./index.cjs",
6
6
  "module": "./index.js",
package/readme.md CHANGED
@@ -1,199 +1,199 @@
1
- # Xanv — Lightweight Runtime Validation with TypeScript Inference
2
-
3
- [![npm version](https://img.shields.io/badge/npm-v0.0.0-blue.svg)](#)
4
- [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](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
+ [![npm version](https://img.shields.io/badge/npm-v0.0.0-blue.svg)](#)
4
+ [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](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\";\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;;;;"}
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;;;;"}
package/types/Any.js.map CHANGED
@@ -1 +1 @@
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;;;;"}
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 +1 @@
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;;;;"}
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 Arraytype: T) {\n super()\n }\n\n protected check(input: unknown): Infer<T>[] {\n if (!Array.isArray(input)) throw new Error(\"Expected array\")\n const arr = input.map(v => this.Arraytype.parse(v))\n return arr as Infer<T>[]\n }\n\n min(length: number) {\n return this.set(\"min\", (v: unknown) => {\n const arr = v as Infer<T>[];\n if (arr.length < length) {\n throw new Error(`Array length should be at least ${length} items, received ${arr.length}`);\n }\n }, length);\n }\n\n\n max(length: number) {\n return this.set(\"max\", (v: unknown) => {\n const arr = v as Infer<T>[];\n if (arr.length > length) {\n throw new Error(`Array length should not exceed ${length} items, received ${arr.length}`);\n }\n }, length);\n }\n\n unique() {\n return this.set(\"unique\", (v: unknown) => {\n const arr = v as Infer<T>[];\n const seen = new Set<string>();\n\n for (const item of arr) {\n const key = JSON.stringify(item);\n if (seen.has(key)) {\n throw new Error(`Array items should be unique, found duplicate: ${key}`);\n }\n seen.add(key);\n }\n });\n }\n}\n\nexport default XVArray;\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;;;;"}
@@ -1 +1 @@
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;;;;"}
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 Arraytype: T) {\n super()\n }\n\n protected check(input: unknown): Infer<T>[] {\n if (!Array.isArray(input)) throw new Error(\"Expected array\")\n const arr = input.map(v => this.Arraytype.parse(v))\n return arr as Infer<T>[]\n }\n\n min(length: number) {\n return this.set(\"min\", (v: unknown) => {\n const arr = v as Infer<T>[];\n if (arr.length < length) {\n throw new Error(`Array length should be at least ${length} items, received ${arr.length}`);\n }\n }, length);\n }\n\n\n max(length: number) {\n return this.set(\"max\", (v: unknown) => {\n const arr = v as Infer<T>[];\n if (arr.length > length) {\n throw new Error(`Array length should not exceed ${length} items, received ${arr.length}`);\n }\n }, length);\n }\n\n unique() {\n return this.set(\"unique\", (v: unknown) => {\n const arr = v as Infer<T>[];\n const seen = new Set<string>();\n\n for (const item of arr) {\n const key = JSON.stringify(item);\n if (seen.has(key)) {\n throw new Error(`Array items should be unique, found duplicate: ${key}`);\n }\n seen.add(key);\n }\n });\n }\n}\n\nexport default XVArray;\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;;;;"}
@@ -1 +1 @@
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;;;;"}
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 +1 @@
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;;;;"}
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 +1 @@
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;;;;"}
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;;;;"}
package/types/Date.js.map CHANGED
@@ -1 +1 @@
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;;;;"}
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 +1 @@
1
- {"version":3,"file":"Enum.cjs","sources":["../../src/types/Enum.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\n\r\nexport type EnumLike<T extends string | number> = Record<string, T>;\r\n\r\nclass XVEnum<T extends string | number> extends XVType<T> {\r\n readonly enum_options: T[];\r\n\r\n constructor(input: readonly T[] | EnumLike<T>) {\r\n super();\r\n\r\n this.enum_options = Array.isArray(input)\r\n ? [...input]\r\n : Object.values(input);\r\n\r\n if (this.enum_options.length === 0) {\r\n throw new Error(\"Enum options must be non-empty\");\r\n }\r\n }\r\n\r\n protected check(value: unknown): T {\r\n if (!this.enum_options.includes(value as T)) {\r\n throw new Error(`Value should be one of: ${this.enum_options.join(\", \")}`);\r\n }\r\n return value as T;\r\n }\r\n}\r\n\r\nexport default XVEnum;\r\n"],"names":[],"mappings":";;;;AAIA,MAAM,MAAkC,SAAQ,MAAS,CAAA;AAGtD,IAAA,WAAA,CAAY,KAAiC,EAAA;AAC1C,QAAA,KAAK,EAAE;QAEP,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK;AACpC,cAAE,CAAC,GAAG,KAAK;AACX,cAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAEzB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;QACpD;IACH;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAU,CAAC,EAAE;AAC1C,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;QAC7E;AACA,QAAA,OAAO,KAAU;IACpB;AACF;;;;"}
1
+ {"version":3,"file":"Enum.cjs","sources":["../../src/types/Enum.ts"],"sourcesContent":["import XVType from \"../XVType\";\n\nexport type EnumLike<T extends string | number> = Record<string, T>;\n\nclass XVEnum<T extends string | number> extends XVType<T> {\n readonly enum_options: T[];\n\n constructor(input: readonly T[] | EnumLike<T>) {\n super();\n\n this.enum_options = Array.isArray(input)\n ? [...input]\n : Object.values(input);\n\n if (this.enum_options.length === 0) {\n throw new Error(\"Enum options must be non-empty\");\n }\n }\n\n protected check(value: unknown): T {\n if (!this.enum_options.includes(value as T)) {\n throw new Error(`Value should be one of: ${this.enum_options.join(\", \")}`);\n }\n return value as T;\n }\n}\n\nexport default XVEnum;\n"],"names":[],"mappings":";;;;AAIA,MAAM,MAAkC,SAAQ,MAAS,CAAA;AAGtD,IAAA,WAAA,CAAY,KAAiC,EAAA;AAC1C,QAAA,KAAK,EAAE;QAEP,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK;AACpC,cAAE,CAAC,GAAG,KAAK;AACX,cAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAEzB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;QACpD;IACH;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAU,CAAC,EAAE;AAC1C,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;QAC7E;AACA,QAAA,OAAO,KAAU;IACpB;AACF;;;;"}
package/types/Enum.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Enum.js","sources":["../../src/types/Enum.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\n\r\nexport type EnumLike<T extends string | number> = Record<string, T>;\r\n\r\nclass XVEnum<T extends string | number> extends XVType<T> {\r\n readonly enum_options: T[];\r\n\r\n constructor(input: readonly T[] | EnumLike<T>) {\r\n super();\r\n\r\n this.enum_options = Array.isArray(input)\r\n ? [...input]\r\n : Object.values(input);\r\n\r\n if (this.enum_options.length === 0) {\r\n throw new Error(\"Enum options must be non-empty\");\r\n }\r\n }\r\n\r\n protected check(value: unknown): T {\r\n if (!this.enum_options.includes(value as T)) {\r\n throw new Error(`Value should be one of: ${this.enum_options.join(\", \")}`);\r\n }\r\n return value as T;\r\n }\r\n}\r\n\r\nexport default XVEnum;\r\n"],"names":[],"mappings":";;AAIA,MAAM,MAAkC,SAAQ,MAAS,CAAA;AAGtD,IAAA,WAAA,CAAY,KAAiC,EAAA;AAC1C,QAAA,KAAK,EAAE;QAEP,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK;AACpC,cAAE,CAAC,GAAG,KAAK;AACX,cAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAEzB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;QACpD;IACH;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAU,CAAC,EAAE;AAC1C,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;QAC7E;AACA,QAAA,OAAO,KAAU;IACpB;AACF;;;;"}
1
+ {"version":3,"file":"Enum.js","sources":["../../src/types/Enum.ts"],"sourcesContent":["import XVType from \"../XVType\";\n\nexport type EnumLike<T extends string | number> = Record<string, T>;\n\nclass XVEnum<T extends string | number> extends XVType<T> {\n readonly enum_options: T[];\n\n constructor(input: readonly T[] | EnumLike<T>) {\n super();\n\n this.enum_options = Array.isArray(input)\n ? [...input]\n : Object.values(input);\n\n if (this.enum_options.length === 0) {\n throw new Error(\"Enum options must be non-empty\");\n }\n }\n\n protected check(value: unknown): T {\n if (!this.enum_options.includes(value as T)) {\n throw new Error(`Value should be one of: ${this.enum_options.join(\", \")}`);\n }\n return value as T;\n }\n}\n\nexport default XVEnum;\n"],"names":[],"mappings":";;AAIA,MAAM,MAAkC,SAAQ,MAAS,CAAA;AAGtD,IAAA,WAAA,CAAY,KAAiC,EAAA;AAC1C,QAAA,KAAK,EAAE;QAEP,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK;AACpC,cAAE,CAAC,GAAG,KAAK;AACX,cAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAEzB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;QACpD;IACH;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAU,CAAC,EAAE;AAC1C,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;QAC7E;AACA,QAAA,OAAO,KAAU;IACpB;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"File.cjs","sources":["../../src/types/File.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\n\r\nclass XVFile extends XVType<File | Blob> {\r\n constructor(size?: number) {\r\n super();\r\n if (size !== undefined) {\r\n this.size(size);\r\n }\r\n }\r\n\r\n protected check(input: unknown): File | Blob {\r\n if (\r\n !(\r\n (typeof File !== \"undefined\" && input instanceof File) ||\r\n (typeof input === \"object\" && input !== null && \"name\" in input && \"size\" in input && \"type\" in input)\r\n )\r\n ) {\r\n throw new Error(\"Expected File or File-like object\")\r\n }\r\n return input as File | Blob\r\n }\r\n\r\n size(size: number) {\r\n return this.set(\r\n \"size\",\r\n (v: unknown) => {\r\n const file = v as File | Blob;\r\n if (file.size !== size) {\r\n throw new Error(\r\n `File size should be exactly ${size} bytes, received ${file.size} bytes`\r\n );\r\n }\r\n },\r\n size\r\n );\r\n }\r\n\r\n minsize(size: number) {\r\n return this.set(\r\n \"minsize\",\r\n (v: unknown) => {\r\n const file = v as File | Blob;\r\n if (file.size < size) {\r\n throw new Error(\r\n `File size should be at least ${size} bytes, received ${file.size} bytes`\r\n );\r\n }\r\n },\r\n size\r\n );\r\n }\r\n\r\n maxsize(size: number) {\r\n return this.set(\r\n \"maxsize\",\r\n (v: unknown) => {\r\n const file = v as File | Blob;\r\n if (file.size > size) {\r\n throw new Error(\r\n `File size should not exceed ${size} bytes, received ${file.size} bytes`\r\n );\r\n }\r\n },\r\n size\r\n );\r\n }\r\n\r\n type(allowedTypes: string[]) {\r\n return this.set(\r\n \"type\",\r\n (v: unknown) => {\r\n const file = v as File | Blob;\r\n if (!allowedTypes.includes(file.type)) {\r\n throw new Error(\r\n `File type ${file.type} is not allowed. Allowed types: ${allowedTypes.join(\r\n \", \"\r\n )}`\r\n );\r\n }\r\n },\r\n allowedTypes\r\n );\r\n }\r\n\r\n extension(allowedExtensions: string[]) {\r\n return this.set(\r\n \"extension\",\r\n (v: unknown) => {\r\n const file: any = v as File | Blob;\r\n const ext = file.name.split(\".\").pop();\r\n if (!ext || !allowedExtensions.includes(ext)) {\r\n throw new Error(\r\n `File extension ${ext} is not allowed. Allowed extensions: ${allowedExtensions.join(\r\n \", \"\r\n )}`\r\n );\r\n }\r\n },\r\n allowedExtensions\r\n );\r\n }\r\n}\r\n\r\nexport default XVFile;\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"File.cjs","sources":["../../src/types/File.ts"],"sourcesContent":["import XVType from \"../XVType\";\n\nclass XVFile extends XVType<File | Blob> {\n constructor(size?: number) {\n super();\n if (size !== undefined) {\n this.size(size);\n }\n }\n\n protected check(input: unknown): File | Blob {\n if (\n !(\n (typeof File !== \"undefined\" && input instanceof File) ||\n (typeof input === \"object\" && input !== null && \"name\" in input && \"size\" in input && \"type\" in input)\n )\n ) {\n throw new Error(\"Expected File or File-like object\")\n }\n return input as File | Blob\n }\n\n size(size: number) {\n return this.set(\n \"size\",\n (v: unknown) => {\n const file = v as File | Blob;\n if (file.size !== size) {\n throw new Error(\n `File size should be exactly ${size} bytes, received ${file.size} bytes`\n );\n }\n },\n size\n );\n }\n\n minsize(size: number) {\n return this.set(\n \"minsize\",\n (v: unknown) => {\n const file = v as File | Blob;\n if (file.size < size) {\n throw new Error(\n `File size should be at least ${size} bytes, received ${file.size} bytes`\n );\n }\n },\n size\n );\n }\n\n maxsize(size: number) {\n return this.set(\n \"maxsize\",\n (v: unknown) => {\n const file = v as File | Blob;\n if (file.size > size) {\n throw new Error(\n `File size should not exceed ${size} bytes, received ${file.size} bytes`\n );\n }\n },\n size\n );\n }\n\n type(allowedTypes: string[]) {\n return this.set(\n \"type\",\n (v: unknown) => {\n const file = v as File | Blob;\n if (!allowedTypes.includes(file.type)) {\n throw new Error(\n `File type ${file.type} is not allowed. Allowed types: ${allowedTypes.join(\n \", \"\n )}`\n );\n }\n },\n allowedTypes\n );\n }\n\n extension(allowedExtensions: string[]) {\n return this.set(\n \"extension\",\n (v: unknown) => {\n const file: any = v as File | Blob;\n const ext = file.name.split(\".\").pop();\n if (!ext || !allowedExtensions.includes(ext)) {\n throw new Error(\n `File extension ${ext} is not allowed. Allowed extensions: ${allowedExtensions.join(\n \", \"\n )}`\n );\n }\n },\n allowedExtensions\n );\n }\n}\n\nexport default XVFile;\n"],"names":[],"mappings":"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"}
package/types/File.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"File.js","sources":["../../src/types/File.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\n\r\nclass XVFile extends XVType<File | Blob> {\r\n constructor(size?: number) {\r\n super();\r\n if (size !== undefined) {\r\n this.size(size);\r\n }\r\n }\r\n\r\n protected check(input: unknown): File | Blob {\r\n if (\r\n !(\r\n (typeof File !== \"undefined\" && input instanceof File) ||\r\n (typeof input === \"object\" && input !== null && \"name\" in input && \"size\" in input && \"type\" in input)\r\n )\r\n ) {\r\n throw new Error(\"Expected File or File-like object\")\r\n }\r\n return input as File | Blob\r\n }\r\n\r\n size(size: number) {\r\n return this.set(\r\n \"size\",\r\n (v: unknown) => {\r\n const file = v as File | Blob;\r\n if (file.size !== size) {\r\n throw new Error(\r\n `File size should be exactly ${size} bytes, received ${file.size} bytes`\r\n );\r\n }\r\n },\r\n size\r\n );\r\n }\r\n\r\n minsize(size: number) {\r\n return this.set(\r\n \"minsize\",\r\n (v: unknown) => {\r\n const file = v as File | Blob;\r\n if (file.size < size) {\r\n throw new Error(\r\n `File size should be at least ${size} bytes, received ${file.size} bytes`\r\n );\r\n }\r\n },\r\n size\r\n );\r\n }\r\n\r\n maxsize(size: number) {\r\n return this.set(\r\n \"maxsize\",\r\n (v: unknown) => {\r\n const file = v as File | Blob;\r\n if (file.size > size) {\r\n throw new Error(\r\n `File size should not exceed ${size} bytes, received ${file.size} bytes`\r\n );\r\n }\r\n },\r\n size\r\n );\r\n }\r\n\r\n type(allowedTypes: string[]) {\r\n return this.set(\r\n \"type\",\r\n (v: unknown) => {\r\n const file = v as File | Blob;\r\n if (!allowedTypes.includes(file.type)) {\r\n throw new Error(\r\n `File type ${file.type} is not allowed. Allowed types: ${allowedTypes.join(\r\n \", \"\r\n )}`\r\n );\r\n }\r\n },\r\n allowedTypes\r\n );\r\n }\r\n\r\n extension(allowedExtensions: string[]) {\r\n return this.set(\r\n \"extension\",\r\n (v: unknown) => {\r\n const file: any = v as File | Blob;\r\n const ext = file.name.split(\".\").pop();\r\n if (!ext || !allowedExtensions.includes(ext)) {\r\n throw new Error(\r\n `File extension ${ext} is not allowed. Allowed extensions: ${allowedExtensions.join(\r\n \", \"\r\n )}`\r\n );\r\n }\r\n },\r\n allowedExtensions\r\n );\r\n }\r\n}\r\n\r\nexport default XVFile;\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"File.js","sources":["../../src/types/File.ts"],"sourcesContent":["import XVType from \"../XVType\";\n\nclass XVFile extends XVType<File | Blob> {\n constructor(size?: number) {\n super();\n if (size !== undefined) {\n this.size(size);\n }\n }\n\n protected check(input: unknown): File | Blob {\n if (\n !(\n (typeof File !== \"undefined\" && input instanceof File) ||\n (typeof input === \"object\" && input !== null && \"name\" in input && \"size\" in input && \"type\" in input)\n )\n ) {\n throw new Error(\"Expected File or File-like object\")\n }\n return input as File | Blob\n }\n\n size(size: number) {\n return this.set(\n \"size\",\n (v: unknown) => {\n const file = v as File | Blob;\n if (file.size !== size) {\n throw new Error(\n `File size should be exactly ${size} bytes, received ${file.size} bytes`\n );\n }\n },\n size\n );\n }\n\n minsize(size: number) {\n return this.set(\n \"minsize\",\n (v: unknown) => {\n const file = v as File | Blob;\n if (file.size < size) {\n throw new Error(\n `File size should be at least ${size} bytes, received ${file.size} bytes`\n );\n }\n },\n size\n );\n }\n\n maxsize(size: number) {\n return this.set(\n \"maxsize\",\n (v: unknown) => {\n const file = v as File | Blob;\n if (file.size > size) {\n throw new Error(\n `File size should not exceed ${size} bytes, received ${file.size} bytes`\n );\n }\n },\n size\n );\n }\n\n type(allowedTypes: string[]) {\n return this.set(\n \"type\",\n (v: unknown) => {\n const file = v as File | Blob;\n if (!allowedTypes.includes(file.type)) {\n throw new Error(\n `File type ${file.type} is not allowed. Allowed types: ${allowedTypes.join(\n \", \"\n )}`\n );\n }\n },\n allowedTypes\n );\n }\n\n extension(allowedExtensions: string[]) {\n return this.set(\n \"extension\",\n (v: unknown) => {\n const file: any = v as File | Blob;\n const ext = file.name.split(\".\").pop();\n if (!ext || !allowedExtensions.includes(ext)) {\n throw new Error(\n `File extension ${ext} is not allowed. Allowed extensions: ${allowedExtensions.join(\n \", \"\n )}`\n );\n }\n },\n allowedExtensions\n );\n }\n}\n\nexport default XVFile;\n"],"names":[],"mappings":"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"}
@@ -18,6 +18,12 @@ class XVFunction extends XVType {
18
18
  }
19
19
  parse(fn) {
20
20
  const checked = super.parse(fn);
21
+ if (this.meta.optional && !checked) {
22
+ return;
23
+ }
24
+ if (this.meta.nullable && !checked) {
25
+ return null;
26
+ }
21
27
  return ((...args) => {
22
28
  try {
23
29
  const parsedArgs = this.func_args.map((validator, i) => validator.parse(args[i]));
@@ -1 +1 @@
1
- {"version":3,"file":"Function.cjs","sources":["../../src/types/Function.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\ntype Func<\r\n A extends XVType<any>[],\r\n R extends XVType<any>,\r\n Async extends boolean = false,\r\n> = Async extends true\r\n ? (...args: { [K in keyof A]: Infer<A[K]> }) => Promise<Infer<R>>\r\n : (...args: { [K in keyof A]: Infer<A[K]> }) => Infer<R>;\r\n\r\nexport type XVFunctionOptions<\r\n A extends XVType<any>[],\r\n R extends XVType<any>,\r\n> = {\r\n args: A;\r\n returns: R;\r\n async?: boolean;\r\n};\r\n\r\nclass XVFunction<\r\n A extends XVType<any>[],\r\n R extends XVType<any>,\r\n Async extends boolean = false,\r\n> extends XVType<Func<A, R, Async>> {\r\n readonly func_args: A;\r\n readonly func_return: R;\r\n readonly is_async: Async;\r\n\r\n constructor(options: XVFunctionOptions<A, R>) {\r\n super();\r\n\r\n this.func_args = options.args;\r\n this.func_return = options.returns;\r\n this.is_async = (options.async ?? false) as Async;\r\n }\r\n\r\n protected check(value: unknown): Func<A, R, Async> {\r\n if (typeof value !== \"function\") {\r\n throw new Error(`Value should be a function, received ${typeof value}`);\r\n }\r\n\r\n return value as Func<A, R, Async>;\r\n }\r\n\r\n parse(fn: unknown): Func<A, R, Async> {\r\n const checked = super.parse(fn);\r\n\r\n return ((...args: unknown[]) => {\r\n try {\r\n const parsedArgs = this.func_args.map((validator, i) =>\r\n validator.parse(args[i]),\r\n ) as { [K in keyof A]: Infer<A[K]> };\r\n\r\n const result = checked!(...parsedArgs);\r\n\r\n if (this.is_async) {\r\n if (!(result instanceof Promise)) {\r\n throw new Error(`Expected async function to return Promise`);\r\n }\r\n\r\n return result.then((res) => this.func_return.parse(res));\r\n }\r\n\r\n try {\r\n return this.func_return.parse(result);\r\n } catch (error) {\r\n throw new Error(`Function return value ${error}`);\r\n }\r\n } catch (error) {\r\n throw new Error(`Function args ${error}`);\r\n }\r\n }) as Func<A, R, Async>;\r\n }\r\n}\r\n\r\nexport default XVFunction;\r\n"],"names":[],"mappings":";;;;AAoBA,MAAM,UAIJ,SAAQ,MAAyB,CAAA;AAKjC,IAAA,WAAA,CAAY,OAAgC,EAAA;;AAC1C,QAAA,KAAK,EAAE;AAEP,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO;QAClC,IAAI,CAAC,QAAQ,IAAI,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK,CAAU;IACnD;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,OAAO,KAAK,CAAA,CAAE,CAAC;QACzE;AAEA,QAAA,OAAO,KAA0B;IACnC;AAEA,IAAA,KAAK,CAAC,EAAW,EAAA;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAE/B,QAAA,QAAQ,CAAC,GAAG,IAAe,KAAI;AAC7B,YAAA,IAAI;gBACF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KACjD,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACU;AAEpC,gBAAA,MAAM,MAAM,GAAG,OAAQ,CAAC,GAAG,UAAU,CAAC;AAEtC,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,EAAE,MAAM,YAAY,OAAO,CAAC,EAAE;AAChC,wBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,yCAAA,CAA2C,CAAC;oBAC9D;AAEA,oBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1D;AAEA,gBAAA,IAAI;oBACF,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvC;gBAAE,OAAO,KAAK,EAAE;AACd,oBAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAA,CAAE,CAAC;gBACnD;YACF;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAA,CAAE,CAAC;YAC3C;AACF,QAAA,CAAC;IACH;AACD;;;;"}
1
+ {"version":3,"file":"Function.cjs","sources":["../../src/types/Function.ts"],"sourcesContent":["import { Infer } from \"../types\";\nimport XVType from \"../XVType\";\n\ntype Func<\n A extends XVType<any>[],\n R extends XVType<any>,\n Async extends boolean = false,\n> = Async extends true\n ? (...args: { [K in keyof A]: Infer<A[K]> }) => Promise<Infer<R>>\n : (...args: { [K in keyof A]: Infer<A[K]> }) => Infer<R>;\n\nexport type XVFunctionOptions<\n A extends XVType<any>[],\n R extends XVType<any>,\n> = {\n args: A;\n returns: R;\n async?: boolean;\n};\n\nclass XVFunction<\n A extends XVType<any>[],\n R extends XVType<any>,\n Async extends boolean = false,\n> extends XVType<Func<A, R, Async>> {\n readonly func_args: A;\n readonly func_return: R;\n readonly is_async: Async;\n\n constructor(options: XVFunctionOptions<A, R>) {\n super();\n\n this.func_args = options.args;\n this.func_return = options.returns;\n this.is_async = (options.async ?? false) as Async;\n }\n\n protected check(value: unknown): Func<A, R, Async> {\n if (typeof value !== \"function\") {\n throw new Error(`Value should be a function, received ${typeof value}`);\n }\n\n return value as Func<A, R, Async>;\n }\n\n parse(fn: unknown): Func<A, R, Async> | undefined | null {\n const checked = super.parse(fn);\n if (this.meta.optional && !checked) {\n return;\n }\n if (this.meta.nullable && !checked) {\n return null;\n }\n\n return ((...args: unknown[]) => {\n try {\n const parsedArgs = this.func_args.map((validator, i) =>\n validator.parse(args[i]),\n ) as { [K in keyof A]: Infer<A[K]> };\n\n const result = checked!(...parsedArgs);\n\n if (this.is_async) {\n if (!(result instanceof Promise)) {\n throw new Error(`Expected async function to return Promise`);\n }\n\n return result.then((res) => this.func_return.parse(res));\n }\n\n try {\n return this.func_return.parse(result);\n } catch (error) {\n throw new Error(`Function return value ${error}`);\n }\n } catch (error) {\n throw new Error(`Function args ${error}`);\n }\n }) as Func<A, R, Async>;\n }\n}\n\nexport default XVFunction;\n"],"names":[],"mappings":";;;;AAoBA,MAAM,UAIJ,SAAQ,MAAyB,CAAA;AAKjC,IAAA,WAAA,CAAY,OAAgC,EAAA;;AAC1C,QAAA,KAAK,EAAE;AAEP,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO;QAClC,IAAI,CAAC,QAAQ,IAAI,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK,CAAU;IACnD;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,OAAO,KAAK,CAAA,CAAE,CAAC;QACzE;AAEA,QAAA,OAAO,KAA0B;IACnC;AAEA,IAAA,KAAK,CAAC,EAAW,EAAA;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;YAClC;QACF;QACA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;AAClC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,QAAQ,CAAC,GAAG,IAAe,KAAI;AAC7B,YAAA,IAAI;gBACF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KACjD,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACU;AAEpC,gBAAA,MAAM,MAAM,GAAG,OAAQ,CAAC,GAAG,UAAU,CAAC;AAEtC,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,EAAE,MAAM,YAAY,OAAO,CAAC,EAAE;AAChC,wBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,yCAAA,CAA2C,CAAC;oBAC9D;AAEA,oBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1D;AAEA,gBAAA,IAAI;oBACF,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvC;gBAAE,OAAO,KAAK,EAAE;AACd,oBAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAA,CAAE,CAAC;gBACnD;YACF;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAA,CAAE,CAAC;YAC3C;AACF,QAAA,CAAC;IACH;AACD;;;;"}
@@ -17,7 +17,7 @@ declare class XVFunction<A extends XVType<any>[], R extends XVType<any>, Async e
17
17
  readonly is_async: Async;
18
18
  constructor(options: XVFunctionOptions<A, R>);
19
19
  protected check(value: unknown): Func<A, R, Async>;
20
- parse(fn: unknown): Func<A, R, Async>;
20
+ parse(fn: unknown): Func<A, R, Async> | undefined | null;
21
21
  }
22
22
 
23
23
  export { XVFunction as default };
package/types/Function.js CHANGED
@@ -16,6 +16,12 @@ class XVFunction extends XVType {
16
16
  }
17
17
  parse(fn) {
18
18
  const checked = super.parse(fn);
19
+ if (this.meta.optional && !checked) {
20
+ return;
21
+ }
22
+ if (this.meta.nullable && !checked) {
23
+ return null;
24
+ }
19
25
  return ((...args) => {
20
26
  try {
21
27
  const parsedArgs = this.func_args.map((validator, i) => validator.parse(args[i]));
@@ -1 +1 @@
1
- {"version":3,"file":"Function.js","sources":["../../src/types/Function.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\ntype Func<\r\n A extends XVType<any>[],\r\n R extends XVType<any>,\r\n Async extends boolean = false,\r\n> = Async extends true\r\n ? (...args: { [K in keyof A]: Infer<A[K]> }) => Promise<Infer<R>>\r\n : (...args: { [K in keyof A]: Infer<A[K]> }) => Infer<R>;\r\n\r\nexport type XVFunctionOptions<\r\n A extends XVType<any>[],\r\n R extends XVType<any>,\r\n> = {\r\n args: A;\r\n returns: R;\r\n async?: boolean;\r\n};\r\n\r\nclass XVFunction<\r\n A extends XVType<any>[],\r\n R extends XVType<any>,\r\n Async extends boolean = false,\r\n> extends XVType<Func<A, R, Async>> {\r\n readonly func_args: A;\r\n readonly func_return: R;\r\n readonly is_async: Async;\r\n\r\n constructor(options: XVFunctionOptions<A, R>) {\r\n super();\r\n\r\n this.func_args = options.args;\r\n this.func_return = options.returns;\r\n this.is_async = (options.async ?? false) as Async;\r\n }\r\n\r\n protected check(value: unknown): Func<A, R, Async> {\r\n if (typeof value !== \"function\") {\r\n throw new Error(`Value should be a function, received ${typeof value}`);\r\n }\r\n\r\n return value as Func<A, R, Async>;\r\n }\r\n\r\n parse(fn: unknown): Func<A, R, Async> {\r\n const checked = super.parse(fn);\r\n\r\n return ((...args: unknown[]) => {\r\n try {\r\n const parsedArgs = this.func_args.map((validator, i) =>\r\n validator.parse(args[i]),\r\n ) as { [K in keyof A]: Infer<A[K]> };\r\n\r\n const result = checked!(...parsedArgs);\r\n\r\n if (this.is_async) {\r\n if (!(result instanceof Promise)) {\r\n throw new Error(`Expected async function to return Promise`);\r\n }\r\n\r\n return result.then((res) => this.func_return.parse(res));\r\n }\r\n\r\n try {\r\n return this.func_return.parse(result);\r\n } catch (error) {\r\n throw new Error(`Function return value ${error}`);\r\n }\r\n } catch (error) {\r\n throw new Error(`Function args ${error}`);\r\n }\r\n }) as Func<A, R, Async>;\r\n }\r\n}\r\n\r\nexport default XVFunction;\r\n"],"names":[],"mappings":";;AAoBA,MAAM,UAIJ,SAAQ,MAAyB,CAAA;AAKjC,IAAA,WAAA,CAAY,OAAgC,EAAA;;AAC1C,QAAA,KAAK,EAAE;AAEP,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO;QAClC,IAAI,CAAC,QAAQ,IAAI,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK,CAAU;IACnD;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,OAAO,KAAK,CAAA,CAAE,CAAC;QACzE;AAEA,QAAA,OAAO,KAA0B;IACnC;AAEA,IAAA,KAAK,CAAC,EAAW,EAAA;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAE/B,QAAA,QAAQ,CAAC,GAAG,IAAe,KAAI;AAC7B,YAAA,IAAI;gBACF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KACjD,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACU;AAEpC,gBAAA,MAAM,MAAM,GAAG,OAAQ,CAAC,GAAG,UAAU,CAAC;AAEtC,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,EAAE,MAAM,YAAY,OAAO,CAAC,EAAE;AAChC,wBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,yCAAA,CAA2C,CAAC;oBAC9D;AAEA,oBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1D;AAEA,gBAAA,IAAI;oBACF,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvC;gBAAE,OAAO,KAAK,EAAE;AACd,oBAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAA,CAAE,CAAC;gBACnD;YACF;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAA,CAAE,CAAC;YAC3C;AACF,QAAA,CAAC;IACH;AACD;;;;"}
1
+ {"version":3,"file":"Function.js","sources":["../../src/types/Function.ts"],"sourcesContent":["import { Infer } from \"../types\";\nimport XVType from \"../XVType\";\n\ntype Func<\n A extends XVType<any>[],\n R extends XVType<any>,\n Async extends boolean = false,\n> = Async extends true\n ? (...args: { [K in keyof A]: Infer<A[K]> }) => Promise<Infer<R>>\n : (...args: { [K in keyof A]: Infer<A[K]> }) => Infer<R>;\n\nexport type XVFunctionOptions<\n A extends XVType<any>[],\n R extends XVType<any>,\n> = {\n args: A;\n returns: R;\n async?: boolean;\n};\n\nclass XVFunction<\n A extends XVType<any>[],\n R extends XVType<any>,\n Async extends boolean = false,\n> extends XVType<Func<A, R, Async>> {\n readonly func_args: A;\n readonly func_return: R;\n readonly is_async: Async;\n\n constructor(options: XVFunctionOptions<A, R>) {\n super();\n\n this.func_args = options.args;\n this.func_return = options.returns;\n this.is_async = (options.async ?? false) as Async;\n }\n\n protected check(value: unknown): Func<A, R, Async> {\n if (typeof value !== \"function\") {\n throw new Error(`Value should be a function, received ${typeof value}`);\n }\n\n return value as Func<A, R, Async>;\n }\n\n parse(fn: unknown): Func<A, R, Async> | undefined | null {\n const checked = super.parse(fn);\n if (this.meta.optional && !checked) {\n return;\n }\n if (this.meta.nullable && !checked) {\n return null;\n }\n\n return ((...args: unknown[]) => {\n try {\n const parsedArgs = this.func_args.map((validator, i) =>\n validator.parse(args[i]),\n ) as { [K in keyof A]: Infer<A[K]> };\n\n const result = checked!(...parsedArgs);\n\n if (this.is_async) {\n if (!(result instanceof Promise)) {\n throw new Error(`Expected async function to return Promise`);\n }\n\n return result.then((res) => this.func_return.parse(res));\n }\n\n try {\n return this.func_return.parse(result);\n } catch (error) {\n throw new Error(`Function return value ${error}`);\n }\n } catch (error) {\n throw new Error(`Function args ${error}`);\n }\n }) as Func<A, R, Async>;\n }\n}\n\nexport default XVFunction;\n"],"names":[],"mappings":";;AAoBA,MAAM,UAIJ,SAAQ,MAAyB,CAAA;AAKjC,IAAA,WAAA,CAAY,OAAgC,EAAA;;AAC1C,QAAA,KAAK,EAAE;AAEP,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO;QAClC,IAAI,CAAC,QAAQ,IAAI,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK,CAAU;IACnD;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,OAAO,KAAK,CAAA,CAAE,CAAC;QACzE;AAEA,QAAA,OAAO,KAA0B;IACnC;AAEA,IAAA,KAAK,CAAC,EAAW,EAAA;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;YAClC;QACF;QACA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;AAClC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,QAAQ,CAAC,GAAG,IAAe,KAAI;AAC7B,YAAA,IAAI;gBACF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KACjD,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACU;AAEpC,gBAAA,MAAM,MAAM,GAAG,OAAQ,CAAC,GAAG,UAAU,CAAC;AAEtC,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,EAAE,MAAM,YAAY,OAAO,CAAC,EAAE;AAChC,wBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,yCAAA,CAA2C,CAAC;oBAC9D;AAEA,oBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1D;AAEA,gBAAA,IAAI;oBACF,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;gBACvC;gBAAE,OAAO,KAAK,EAAE;AACd,oBAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAA,CAAE,CAAC;gBACnD;YACF;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAA,CAAE,CAAC;YAC3C;AACF,QAAA,CAAC;IACH;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionComponent.cjs","sources":["../../src/types/FunctionComponent.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\n/**\r\n * Function component type (sync + async)\r\n */\r\ntype FuncComponent<P, Async extends boolean = false> = Async extends true\r\n ? (props: P) => Promise<any>\r\n : (props: P) => any;\r\n\r\n/**\r\n * Convert schema props → runtime props\r\n */\r\ntype InferProps<P extends Record<string, XVType<any>>> = {\r\n [K in keyof P]: Infer<P[K]>;\r\n};\r\n\r\nclass XVFunctionComponent<\r\n P extends Record<string, XVType<any>>,\r\n Async extends boolean = false,\r\n> extends XVType<FuncComponent<InferProps<P>, Async>> {\r\n readonly props: P;\r\n readonly is_async: Async;\r\n\r\n constructor(props: P, async?: Async) {\r\n super();\r\n this.props = props;\r\n this.is_async = (async ?? false) as Async;\r\n }\r\n\r\n protected check(value: unknown): any {\r\n if (typeof value !== \"function\") {\r\n throw new Error(\"Component must be a function\");\r\n }\r\n return value;\r\n }\r\n\r\n parse(fn: unknown) {\r\n const checked = super.parse(fn);\r\n\r\n return ((inputProps: InferProps<P>) => {\r\n const parsed: InferProps<P> = {} as InferProps<P>;\r\n\r\n for (const key in this.props) {\r\n parsed[key] = this.props[key].parse((inputProps as any)[key]);\r\n }\r\n\r\n const result = (checked as any)(parsed);\r\n\r\n if (this.is_async) {\r\n return Promise.resolve(result);\r\n }\r\n\r\n return result;\r\n }) as FuncComponent<InferProps<P>, Async>;\r\n }\r\n}\r\n\r\nexport default XVFunctionComponent;\r\n"],"names":[],"mappings":";;;;AAiBA,MAAM,mBAGJ,SAAQ,MAA2C,CAAA;IAInD,WAAA,CAAY,KAAQ,EAAE,KAAa,EAAA;AACjC,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAL,KAAK,GAAI,KAAK,CAAU;IAC3C;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;QACjD;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,KAAK,CAAC,EAAW,EAAA;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAE/B,QAAA,QAAQ,CAAC,UAAyB,KAAI;YACpC,MAAM,MAAM,GAAkB,EAAmB;AAEjD,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;AAC5B,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAE,UAAkB,CAAC,GAAG,CAAC,CAAC;YAC/D;AAEA,YAAA,MAAM,MAAM,GAAI,OAAe,CAAC,MAAM,CAAC;AAEvC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAChC;AAEA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC;IACH;AACD;;;;"}
1
+ {"version":3,"file":"FunctionComponent.cjs","sources":["../../src/types/FunctionComponent.ts"],"sourcesContent":["import { Infer } from \"../types\";\nimport XVType from \"../XVType\";\n\n/**\n * Function component type (sync + async)\n */\ntype FuncComponent<P, Async extends boolean = false> = Async extends true\n ? (props: P) => Promise<any>\n : (props: P) => any;\n\n/**\n * Convert schema props → runtime props\n */\ntype InferProps<P extends Record<string, XVType<any>>> = {\n [K in keyof P]: Infer<P[K]>;\n};\n\nclass XVFunctionComponent<\n P extends Record<string, XVType<any>>,\n Async extends boolean = false,\n> extends XVType<FuncComponent<InferProps<P>, Async>> {\n readonly props: P;\n readonly is_async: Async;\n\n constructor(props: P, async?: Async) {\n super();\n this.props = props;\n this.is_async = (async ?? false) as Async;\n }\n\n protected check(value: unknown): any {\n if (typeof value !== \"function\") {\n throw new Error(\"Component must be a function\");\n }\n return value;\n }\n\n parse(fn: unknown) {\n const checked = super.parse(fn);\n\n return ((inputProps: InferProps<P>) => {\n const parsed: InferProps<P> = {} as InferProps<P>;\n\n for (const key in this.props) {\n parsed[key] = this.props[key].parse((inputProps as any)[key]);\n }\n\n const result = (checked as any)(parsed);\n\n if (this.is_async) {\n return Promise.resolve(result);\n }\n\n return result;\n }) as FuncComponent<InferProps<P>, Async>;\n }\n}\n\nexport default XVFunctionComponent;\n"],"names":[],"mappings":";;;;AAiBA,MAAM,mBAGJ,SAAQ,MAA2C,CAAA;IAInD,WAAA,CAAY,KAAQ,EAAE,KAAa,EAAA;AACjC,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAL,KAAK,GAAI,KAAK,CAAU;IAC3C;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;QACjD;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,KAAK,CAAC,EAAW,EAAA;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAE/B,QAAA,QAAQ,CAAC,UAAyB,KAAI;YACpC,MAAM,MAAM,GAAkB,EAAmB;AAEjD,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;AAC5B,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAE,UAAkB,CAAC,GAAG,CAAC,CAAC;YAC/D;AAEA,YAAA,MAAM,MAAM,GAAI,OAAe,CAAC,MAAM,CAAC;AAEvC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAChC;AAEA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC;IACH;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionComponent.js","sources":["../../src/types/FunctionComponent.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\n/**\r\n * Function component type (sync + async)\r\n */\r\ntype FuncComponent<P, Async extends boolean = false> = Async extends true\r\n ? (props: P) => Promise<any>\r\n : (props: P) => any;\r\n\r\n/**\r\n * Convert schema props → runtime props\r\n */\r\ntype InferProps<P extends Record<string, XVType<any>>> = {\r\n [K in keyof P]: Infer<P[K]>;\r\n};\r\n\r\nclass XVFunctionComponent<\r\n P extends Record<string, XVType<any>>,\r\n Async extends boolean = false,\r\n> extends XVType<FuncComponent<InferProps<P>, Async>> {\r\n readonly props: P;\r\n readonly is_async: Async;\r\n\r\n constructor(props: P, async?: Async) {\r\n super();\r\n this.props = props;\r\n this.is_async = (async ?? false) as Async;\r\n }\r\n\r\n protected check(value: unknown): any {\r\n if (typeof value !== \"function\") {\r\n throw new Error(\"Component must be a function\");\r\n }\r\n return value;\r\n }\r\n\r\n parse(fn: unknown) {\r\n const checked = super.parse(fn);\r\n\r\n return ((inputProps: InferProps<P>) => {\r\n const parsed: InferProps<P> = {} as InferProps<P>;\r\n\r\n for (const key in this.props) {\r\n parsed[key] = this.props[key].parse((inputProps as any)[key]);\r\n }\r\n\r\n const result = (checked as any)(parsed);\r\n\r\n if (this.is_async) {\r\n return Promise.resolve(result);\r\n }\r\n\r\n return result;\r\n }) as FuncComponent<InferProps<P>, Async>;\r\n }\r\n}\r\n\r\nexport default XVFunctionComponent;\r\n"],"names":[],"mappings":";;AAiBA,MAAM,mBAGJ,SAAQ,MAA2C,CAAA;IAInD,WAAA,CAAY,KAAQ,EAAE,KAAa,EAAA;AACjC,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAL,KAAK,GAAI,KAAK,CAAU;IAC3C;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;QACjD;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,KAAK,CAAC,EAAW,EAAA;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAE/B,QAAA,QAAQ,CAAC,UAAyB,KAAI;YACpC,MAAM,MAAM,GAAkB,EAAmB;AAEjD,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;AAC5B,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAE,UAAkB,CAAC,GAAG,CAAC,CAAC;YAC/D;AAEA,YAAA,MAAM,MAAM,GAAI,OAAe,CAAC,MAAM,CAAC;AAEvC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAChC;AAEA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC;IACH;AACD;;;;"}
1
+ {"version":3,"file":"FunctionComponent.js","sources":["../../src/types/FunctionComponent.ts"],"sourcesContent":["import { Infer } from \"../types\";\nimport XVType from \"../XVType\";\n\n/**\n * Function component type (sync + async)\n */\ntype FuncComponent<P, Async extends boolean = false> = Async extends true\n ? (props: P) => Promise<any>\n : (props: P) => any;\n\n/**\n * Convert schema props → runtime props\n */\ntype InferProps<P extends Record<string, XVType<any>>> = {\n [K in keyof P]: Infer<P[K]>;\n};\n\nclass XVFunctionComponent<\n P extends Record<string, XVType<any>>,\n Async extends boolean = false,\n> extends XVType<FuncComponent<InferProps<P>, Async>> {\n readonly props: P;\n readonly is_async: Async;\n\n constructor(props: P, async?: Async) {\n super();\n this.props = props;\n this.is_async = (async ?? false) as Async;\n }\n\n protected check(value: unknown): any {\n if (typeof value !== \"function\") {\n throw new Error(\"Component must be a function\");\n }\n return value;\n }\n\n parse(fn: unknown) {\n const checked = super.parse(fn);\n\n return ((inputProps: InferProps<P>) => {\n const parsed: InferProps<P> = {} as InferProps<P>;\n\n for (const key in this.props) {\n parsed[key] = this.props[key].parse((inputProps as any)[key]);\n }\n\n const result = (checked as any)(parsed);\n\n if (this.is_async) {\n return Promise.resolve(result);\n }\n\n return result;\n }) as FuncComponent<InferProps<P>, Async>;\n }\n}\n\nexport default XVFunctionComponent;\n"],"names":[],"mappings":";;AAiBA,MAAM,mBAGJ,SAAQ,MAA2C,CAAA;IAInD,WAAA,CAAY,KAAQ,EAAE,KAAa,EAAA;AACjC,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAL,KAAK,GAAI,KAAK,CAAU;IAC3C;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;QACjD;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,KAAK,CAAC,EAAW,EAAA;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAE/B,QAAA,QAAQ,CAAC,UAAyB,KAAI;YACpC,MAAM,MAAM,GAAkB,EAAmB;AAEjD,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;AAC5B,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAE,UAAkB,CAAC,GAAG,CAAC,CAAC;YAC/D;AAEA,YAAA,MAAM,MAAM,GAAI,OAAe,CAAC,MAAM,CAAC;AAEvC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAChC;AAEA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC;IACH;AACD;;;;"}
package/types/Map.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Map.cjs","sources":["../../src/types/Map.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVMap<\r\n K extends XVType<any> = any,\r\n V extends XVType<any> = any,\r\n> extends XVType<Map<Infer<K>, Infer<V>>> {\r\n constructor(\r\n readonly Mapkey: K,\r\n readonly Mapvalue: V,\r\n ) {\r\n super();\r\n }\r\n\r\n protected check(value: unknown): Map<Infer<K>, Infer<V>> {\r\n if (!(value instanceof Map)) {\r\n throw new Error(`Value should be a Map, received ${typeof value}`);\r\n }\r\n\r\n const result = new Map<Infer<K>, Infer<V>>();\r\n\r\n for (const [k, v] of (value as any).entries()) {\r\n try {\r\n const parsedKey = this.Mapkey.parse(k) as Infer<K>;\r\n const parsedValue = this.Mapvalue.parse(v) as Infer<V>;\r\n result.set(parsedKey, parsedValue);\r\n } catch (err) {\r\n throw new Error(\r\n `Map entry should have key of type ${this.Mapkey.constructor.name} and value of type ${this.Mapvalue.constructor.name}, received key: ${typeof k}, value: ${typeof v}`,\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVMap;\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,KAGJ,SAAQ,MAA+B,CAAA;IACvC,WAAA,CACW,MAAS,EACT,QAAW,EAAA;AAEpB,QAAA,KAAK,EAAE;QAHE,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAGnB;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,EAAE,KAAK,YAAY,GAAG,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,OAAO,KAAK,CAAA,CAAE,CAAC;QACpE;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB;AAE5C,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAK,KAAa,CAAC,OAAO,EAAE,EAAE;AAC7C,YAAA,IAAI;gBACF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAa;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAa;AACtD,gBAAA,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC;YACpC;YAAE,OAAO,GAAG,EAAE;gBACZ,MAAM,IAAI,KAAK,CACb,CAAA,kCAAA,EAAqC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAA,mBAAA,EAAsB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAA,gBAAA,EAAmB,OAAO,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,CAAA,CAAE,CACvK;YACH;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AACD;;;;"}
1
+ {"version":3,"file":"Map.cjs","sources":["../../src/types/Map.ts"],"sourcesContent":["import { Infer } from \"../types\";\nimport XVType from \"../XVType\";\n\nclass XVMap<\n K extends XVType<any> = any,\n V extends XVType<any> = any,\n> extends XVType<Map<Infer<K>, Infer<V>>> {\n constructor(\n readonly Mapkey: K,\n readonly Mapvalue: V,\n ) {\n super();\n }\n\n protected check(value: unknown): Map<Infer<K>, Infer<V>> {\n if (!(value instanceof Map)) {\n throw new Error(`Value should be a Map, received ${typeof value}`);\n }\n\n const result = new Map<Infer<K>, Infer<V>>();\n\n for (const [k, v] of (value as any).entries()) {\n try {\n const parsedKey = this.Mapkey.parse(k) as Infer<K>;\n const parsedValue = this.Mapvalue.parse(v) as Infer<V>;\n result.set(parsedKey, parsedValue);\n } catch (err) {\n throw new Error(\n `Map entry should have key of type ${this.Mapkey.constructor.name} and value of type ${this.Mapvalue.constructor.name}, received key: ${typeof k}, value: ${typeof v}`,\n );\n }\n }\n\n return result;\n }\n}\n\nexport default XVMap;\n"],"names":[],"mappings":";;;;AAGA,MAAM,KAGJ,SAAQ,MAA+B,CAAA;IACvC,WAAA,CACW,MAAS,EACT,QAAW,EAAA;AAEpB,QAAA,KAAK,EAAE;QAHE,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAGnB;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,EAAE,KAAK,YAAY,GAAG,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,OAAO,KAAK,CAAA,CAAE,CAAC;QACpE;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB;AAE5C,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAK,KAAa,CAAC,OAAO,EAAE,EAAE;AAC7C,YAAA,IAAI;gBACF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAa;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAa;AACtD,gBAAA,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC;YACpC;YAAE,OAAO,GAAG,EAAE;gBACZ,MAAM,IAAI,KAAK,CACb,CAAA,kCAAA,EAAqC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAA,mBAAA,EAAsB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAA,gBAAA,EAAmB,OAAO,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,CAAA,CAAE,CACvK;YACH;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AACD;;;;"}
package/types/Map.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Map.js","sources":["../../src/types/Map.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVMap<\r\n K extends XVType<any> = any,\r\n V extends XVType<any> = any,\r\n> extends XVType<Map<Infer<K>, Infer<V>>> {\r\n constructor(\r\n readonly Mapkey: K,\r\n readonly Mapvalue: V,\r\n ) {\r\n super();\r\n }\r\n\r\n protected check(value: unknown): Map<Infer<K>, Infer<V>> {\r\n if (!(value instanceof Map)) {\r\n throw new Error(`Value should be a Map, received ${typeof value}`);\r\n }\r\n\r\n const result = new Map<Infer<K>, Infer<V>>();\r\n\r\n for (const [k, v] of (value as any).entries()) {\r\n try {\r\n const parsedKey = this.Mapkey.parse(k) as Infer<K>;\r\n const parsedValue = this.Mapvalue.parse(v) as Infer<V>;\r\n result.set(parsedKey, parsedValue);\r\n } catch (err) {\r\n throw new Error(\r\n `Map entry should have key of type ${this.Mapkey.constructor.name} and value of type ${this.Mapvalue.constructor.name}, received key: ${typeof k}, value: ${typeof v}`,\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVMap;\r\n"],"names":[],"mappings":";;AAGA,MAAM,KAGJ,SAAQ,MAA+B,CAAA;IACvC,WAAA,CACW,MAAS,EACT,QAAW,EAAA;AAEpB,QAAA,KAAK,EAAE;QAHE,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAGnB;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,EAAE,KAAK,YAAY,GAAG,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,OAAO,KAAK,CAAA,CAAE,CAAC;QACpE;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB;AAE5C,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAK,KAAa,CAAC,OAAO,EAAE,EAAE;AAC7C,YAAA,IAAI;gBACF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAa;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAa;AACtD,gBAAA,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC;YACpC;YAAE,OAAO,GAAG,EAAE;gBACZ,MAAM,IAAI,KAAK,CACb,CAAA,kCAAA,EAAqC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAA,mBAAA,EAAsB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAA,gBAAA,EAAmB,OAAO,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,CAAA,CAAE,CACvK;YACH;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AACD;;;;"}
1
+ {"version":3,"file":"Map.js","sources":["../../src/types/Map.ts"],"sourcesContent":["import { Infer } from \"../types\";\nimport XVType from \"../XVType\";\n\nclass XVMap<\n K extends XVType<any> = any,\n V extends XVType<any> = any,\n> extends XVType<Map<Infer<K>, Infer<V>>> {\n constructor(\n readonly Mapkey: K,\n readonly Mapvalue: V,\n ) {\n super();\n }\n\n protected check(value: unknown): Map<Infer<K>, Infer<V>> {\n if (!(value instanceof Map)) {\n throw new Error(`Value should be a Map, received ${typeof value}`);\n }\n\n const result = new Map<Infer<K>, Infer<V>>();\n\n for (const [k, v] of (value as any).entries()) {\n try {\n const parsedKey = this.Mapkey.parse(k) as Infer<K>;\n const parsedValue = this.Mapvalue.parse(v) as Infer<V>;\n result.set(parsedKey, parsedValue);\n } catch (err) {\n throw new Error(\n `Map entry should have key of type ${this.Mapkey.constructor.name} and value of type ${this.Mapvalue.constructor.name}, received key: ${typeof k}, value: ${typeof v}`,\n );\n }\n }\n\n return result;\n }\n}\n\nexport default XVMap;\n"],"names":[],"mappings":";;AAGA,MAAM,KAGJ,SAAQ,MAA+B,CAAA;IACvC,WAAA,CACW,MAAS,EACT,QAAW,EAAA;AAEpB,QAAA,KAAK,EAAE;QAHE,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAGnB;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,EAAE,KAAK,YAAY,GAAG,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,OAAO,KAAK,CAAA,CAAE,CAAC;QACpE;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB;AAE5C,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAK,KAAa,CAAC,OAAO,EAAE,EAAE;AAC7C,YAAA,IAAI;gBACF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAa;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAa;AACtD,gBAAA,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC;YACpC;YAAE,OAAO,GAAG,EAAE;gBACZ,MAAM,IAAI,KAAK,CACb,CAAA,kCAAA,EAAqC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAA,mBAAA,EAAsB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAA,gBAAA,EAAmB,OAAO,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,CAAA,CAAE,CACvK;YACH;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Number.cjs","sources":["../../src/types/Number.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\n\r\nclass XVNumber<T extends number = number> extends XVType<T> {\r\n constructor(length?: number) {\r\n super();\r\n if (length !== undefined) {\r\n this.length(length);\r\n }\r\n }\r\n\r\n protected check(value: any): T {\r\n if (typeof value !== \"number\") {\r\n throw new Error(`Value should be a number, received ${typeof value}`);\r\n }\r\n return value as T\r\n }\r\n\r\n length(value: number) {\r\n return this.set(\"length\", (v: unknown) => {\r\n const n = v as number;\r\n if (n.toString().length !== value) {\r\n throw new Error(\r\n `Number length should be ${value} digits, received ${n.toString().length}`\r\n );\r\n }\r\n }, value);\r\n }\r\n\r\n min(value: number) {\r\n return this.set(\"min\", (v: unknown) => {\r\n const n = v as number;\r\n if (n < value) {\r\n throw new Error(`Minimum value should be ${value}, received ${n}`);\r\n }\r\n }, value);\r\n }\r\n\r\n max(value: number) {\r\n return this.set(\"max\", (v: unknown) => {\r\n const n = v as number;\r\n if (n > value) {\r\n throw new Error(`Maximum value should be ${value}, received ${n}`);\r\n }\r\n }, value);\r\n }\r\n\r\n positive() {\r\n return this.set(\"positive\", (v: unknown) => {\r\n const n = v as number;\r\n if (n < 0) {\r\n throw new Error(`Value should be positive, received ${n}`);\r\n }\r\n });\r\n }\r\n\r\n negative() {\r\n return this.set(\"negative\", (v: unknown) => {\r\n const n = v as number;\r\n if (!Number.isInteger(n) || n > 0) {\r\n throw new Error(`Value should be negative, received ${n}`);\r\n }\r\n });\r\n }\r\n\r\n integer() {\r\n return this.set(\"integer\", (v: unknown) => {\r\n const n = v as number;\r\n if (!Number.isInteger(n)) {\r\n throw new Error(`Value should be an integer, received ${n}`);\r\n }\r\n });\r\n }\r\n\r\n float() {\r\n return this.set(\"float\", (v: unknown) => {\r\n const n = v as number;\r\n if (!Number.isFinite(n)) {\r\n throw new Error(`Value should be a float, received ${n}`);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default XVNumber;\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Number.cjs","sources":["../../src/types/Number.ts"],"sourcesContent":["import XVType from \"../XVType\";\n\nclass XVNumber<T extends number = number> extends XVType<T> {\n constructor(length?: number) {\n super();\n if (length !== undefined) {\n this.length(length);\n }\n }\n\n protected check(value: any): T {\n if (typeof value !== \"number\") {\n throw new Error(`Value should be a number, received ${typeof value}`);\n }\n return value as T\n }\n\n length(value: number) {\n return this.set(\"length\", (v: unknown) => {\n const n = v as number;\n if (n.toString().length !== value) {\n throw new Error(\n `Number length should be ${value} digits, received ${n.toString().length}`\n );\n }\n }, value);\n }\n\n min(value: number) {\n return this.set(\"min\", (v: unknown) => {\n const n = v as number;\n if (n < value) {\n throw new Error(`Minimum value should be ${value}, received ${n}`);\n }\n }, value);\n }\n\n max(value: number) {\n return this.set(\"max\", (v: unknown) => {\n const n = v as number;\n if (n > value) {\n throw new Error(`Maximum value should be ${value}, received ${n}`);\n }\n }, value);\n }\n\n positive() {\n return this.set(\"positive\", (v: unknown) => {\n const n = v as number;\n if (n < 0) {\n throw new Error(`Value should be positive, received ${n}`);\n }\n });\n }\n\n negative() {\n return this.set(\"negative\", (v: unknown) => {\n const n = v as number;\n if (!Number.isInteger(n) || n > 0) {\n throw new Error(`Value should be negative, received ${n}`);\n }\n });\n }\n\n integer() {\n return this.set(\"integer\", (v: unknown) => {\n const n = v as number;\n if (!Number.isInteger(n)) {\n throw new Error(`Value should be an integer, received ${n}`);\n }\n });\n }\n\n float() {\n return this.set(\"float\", (v: unknown) => {\n const n = v as number;\n if (!Number.isFinite(n)) {\n throw new Error(`Value should be a float, received ${n}`);\n }\n });\n }\n}\n\nexport default XVNumber;\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Number.js","sources":["../../src/types/Number.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\n\r\nclass XVNumber<T extends number = number> extends XVType<T> {\r\n constructor(length?: number) {\r\n super();\r\n if (length !== undefined) {\r\n this.length(length);\r\n }\r\n }\r\n\r\n protected check(value: any): T {\r\n if (typeof value !== \"number\") {\r\n throw new Error(`Value should be a number, received ${typeof value}`);\r\n }\r\n return value as T\r\n }\r\n\r\n length(value: number) {\r\n return this.set(\"length\", (v: unknown) => {\r\n const n = v as number;\r\n if (n.toString().length !== value) {\r\n throw new Error(\r\n `Number length should be ${value} digits, received ${n.toString().length}`\r\n );\r\n }\r\n }, value);\r\n }\r\n\r\n min(value: number) {\r\n return this.set(\"min\", (v: unknown) => {\r\n const n = v as number;\r\n if (n < value) {\r\n throw new Error(`Minimum value should be ${value}, received ${n}`);\r\n }\r\n }, value);\r\n }\r\n\r\n max(value: number) {\r\n return this.set(\"max\", (v: unknown) => {\r\n const n = v as number;\r\n if (n > value) {\r\n throw new Error(`Maximum value should be ${value}, received ${n}`);\r\n }\r\n }, value);\r\n }\r\n\r\n positive() {\r\n return this.set(\"positive\", (v: unknown) => {\r\n const n = v as number;\r\n if (n < 0) {\r\n throw new Error(`Value should be positive, received ${n}`);\r\n }\r\n });\r\n }\r\n\r\n negative() {\r\n return this.set(\"negative\", (v: unknown) => {\r\n const n = v as number;\r\n if (!Number.isInteger(n) || n > 0) {\r\n throw new Error(`Value should be negative, received ${n}`);\r\n }\r\n });\r\n }\r\n\r\n integer() {\r\n return this.set(\"integer\", (v: unknown) => {\r\n const n = v as number;\r\n if (!Number.isInteger(n)) {\r\n throw new Error(`Value should be an integer, received ${n}`);\r\n }\r\n });\r\n }\r\n\r\n float() {\r\n return this.set(\"float\", (v: unknown) => {\r\n const n = v as number;\r\n if (!Number.isFinite(n)) {\r\n throw new Error(`Value should be a float, received ${n}`);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default XVNumber;\r\n"],"names":[],"mappings":";;AAEA,MAAM,QAAoC,SAAQ,MAAS,CAAA;AACxD,IAAA,WAAA,CAAY,MAAe,EAAA;AACxB,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACtB;IACH;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,CAAA,mCAAA,EAAsC,OAAO,KAAK,CAAA,CAAE,CAAC;QACxE;AACA,QAAA,OAAO,KAAU;IACpB;AAEA,IAAA,MAAM,CAAC,KAAa,EAAA;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAU,KAAI;YACtC,MAAM,CAAC,GAAG,CAAW;YACrB,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,KAAK,EAAE;AAChC,gBAAA,MAAM,IAAI,KAAK,CACZ,CAAA,wBAAA,EAA2B,KAAK,CAAA,kBAAA,EAAqB,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAA,CAAE,CAC5E;YACJ;QACH,CAAC,EAAE,KAAK,CAAC;IACZ;AAEA,IAAA,GAAG,CAAC,KAAa,EAAA;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAU,KAAI;YACnC,MAAM,CAAC,GAAG,CAAW;AACrB,YAAA,IAAI,CAAC,GAAG,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,KAAK,CAAA,WAAA,EAAc,CAAC,CAAA,CAAE,CAAC;YACrE;QACH,CAAC,EAAE,KAAK,CAAC;IACZ;AAEA,IAAA,GAAG,CAAC,KAAa,EAAA;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAU,KAAI;YACnC,MAAM,CAAC,GAAG,CAAW;AACrB,YAAA,IAAI,CAAC,GAAG,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,KAAK,CAAA,WAAA,EAAc,CAAC,CAAA,CAAE,CAAC;YACrE;QACH,CAAC,EAAE,KAAK,CAAC;IACZ;IAEA,QAAQ,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAU,KAAI;YACxC,MAAM,CAAC,GAAG,CAAW;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACR,gBAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA,CAAE,CAAC;YAC7D;AACH,QAAA,CAAC,CAAC;IACL;IAEA,QAAQ,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAU,KAAI;YACxC,MAAM,CAAC,GAAG,CAAW;AACrB,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAChC,gBAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA,CAAE,CAAC;YAC7D;AACH,QAAA,CAAC,CAAC;IACL;IAEA,OAAO,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAU,KAAI;YACvC,MAAM,CAAC,GAAG,CAAW;YACrB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;AACvB,gBAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA,CAAE,CAAC;YAC/D;AACH,QAAA,CAAC,CAAC;IACL;IAEA,KAAK,GAAA;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAU,KAAI;YACrC,MAAM,CAAC,GAAG,CAAW;YACrB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AACtB,gBAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA,CAAE,CAAC;YAC5D;AACH,QAAA,CAAC,CAAC;IACL;AACF;;;;"}
1
+ {"version":3,"file":"Number.js","sources":["../../src/types/Number.ts"],"sourcesContent":["import XVType from \"../XVType\";\n\nclass XVNumber<T extends number = number> extends XVType<T> {\n constructor(length?: number) {\n super();\n if (length !== undefined) {\n this.length(length);\n }\n }\n\n protected check(value: any): T {\n if (typeof value !== \"number\") {\n throw new Error(`Value should be a number, received ${typeof value}`);\n }\n return value as T\n }\n\n length(value: number) {\n return this.set(\"length\", (v: unknown) => {\n const n = v as number;\n if (n.toString().length !== value) {\n throw new Error(\n `Number length should be ${value} digits, received ${n.toString().length}`\n );\n }\n }, value);\n }\n\n min(value: number) {\n return this.set(\"min\", (v: unknown) => {\n const n = v as number;\n if (n < value) {\n throw new Error(`Minimum value should be ${value}, received ${n}`);\n }\n }, value);\n }\n\n max(value: number) {\n return this.set(\"max\", (v: unknown) => {\n const n = v as number;\n if (n > value) {\n throw new Error(`Maximum value should be ${value}, received ${n}`);\n }\n }, value);\n }\n\n positive() {\n return this.set(\"positive\", (v: unknown) => {\n const n = v as number;\n if (n < 0) {\n throw new Error(`Value should be positive, received ${n}`);\n }\n });\n }\n\n negative() {\n return this.set(\"negative\", (v: unknown) => {\n const n = v as number;\n if (!Number.isInteger(n) || n > 0) {\n throw new Error(`Value should be negative, received ${n}`);\n }\n });\n }\n\n integer() {\n return this.set(\"integer\", (v: unknown) => {\n const n = v as number;\n if (!Number.isInteger(n)) {\n throw new Error(`Value should be an integer, received ${n}`);\n }\n });\n }\n\n float() {\n return this.set(\"float\", (v: unknown) => {\n const n = v as number;\n if (!Number.isFinite(n)) {\n throw new Error(`Value should be a float, received ${n}`);\n }\n });\n }\n}\n\nexport default XVNumber;\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Object.cjs","sources":["../../src/types/Object.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nexport type XVObjectShape = Record<string | number, XVType<any>>;\r\n\r\nclass XVObject<const T extends XVObjectShape> extends XVType<Infer<T>> {\r\n constructor(readonly objectArg: T) {\r\n super();\r\n }\r\n\r\n protected check(value: unknown): Infer<T> {\r\n if (typeof value !== \"object\" || value === null) {\r\n throw new Error(\"Value must be an object\");\r\n }\r\n\r\n const result = {} as Infer<T>;\r\n\r\n for (const key in this.objectArg) {\r\n const itemType = this.objectArg[key];\r\n result[key] = itemType.parse((value as any)[key]);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVObject;\r\n"],"names":[],"mappings":";;;;AAKA,MAAM,QAAwC,SAAQ,MAAgB,CAAA;AACpE,IAAA,WAAA,CAAqB,SAAY,EAAA;AAC/B,QAAA,KAAK,EAAE;QADY,IAAA,CAAA,SAAS,GAAT,SAAS;IAE9B;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC/C,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;QAC5C;QAEA,MAAM,MAAM,GAAG,EAAc;AAE7B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACpC,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAE,KAAa,CAAC,GAAG,CAAC,CAAC;QACnD;AAEA,QAAA,OAAO,MAAM;IACf;AACD;;;;"}
1
+ {"version":3,"file":"Object.cjs","sources":["../../src/types/Object.ts"],"sourcesContent":["import XVType from \"../XVType\";\nimport { Infer } from \"../types\";\n\nexport type XVObjectShape = Record<string | number, XVType<any>>;\n\nclass XVObject<const T extends XVObjectShape> extends XVType<Infer<T>> {\n constructor(readonly objectArg: T) {\n super();\n }\n\n protected check(value: unknown): Infer<T> {\n if (typeof value !== \"object\" || value === null) {\n throw new Error(\"Value must be an object\");\n }\n\n const result = {} as Infer<T>;\n\n for (const key in this.objectArg) {\n const itemType = this.objectArg[key];\n result[key] = itemType.parse((value as any)[key]);\n }\n\n return result;\n }\n}\n\nexport default XVObject;\n"],"names":[],"mappings":";;;;AAKA,MAAM,QAAwC,SAAQ,MAAgB,CAAA;AACpE,IAAA,WAAA,CAAqB,SAAY,EAAA;AAC/B,QAAA,KAAK,EAAE;QADY,IAAA,CAAA,SAAS,GAAT,SAAS;IAE9B;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC/C,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;QAC5C;QAEA,MAAM,MAAM,GAAG,EAAc;AAE7B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACpC,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAE,KAAa,CAAC,GAAG,CAAC,CAAC;QACnD;AAEA,QAAA,OAAO,MAAM;IACf;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Object.js","sources":["../../src/types/Object.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nexport type XVObjectShape = Record<string | number, XVType<any>>;\r\n\r\nclass XVObject<const T extends XVObjectShape> extends XVType<Infer<T>> {\r\n constructor(readonly objectArg: T) {\r\n super();\r\n }\r\n\r\n protected check(value: unknown): Infer<T> {\r\n if (typeof value !== \"object\" || value === null) {\r\n throw new Error(\"Value must be an object\");\r\n }\r\n\r\n const result = {} as Infer<T>;\r\n\r\n for (const key in this.objectArg) {\r\n const itemType = this.objectArg[key];\r\n result[key] = itemType.parse((value as any)[key]);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVObject;\r\n"],"names":[],"mappings":";;AAKA,MAAM,QAAwC,SAAQ,MAAgB,CAAA;AACpE,IAAA,WAAA,CAAqB,SAAY,EAAA;AAC/B,QAAA,KAAK,EAAE;QADY,IAAA,CAAA,SAAS,GAAT,SAAS;IAE9B;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC/C,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;QAC5C;QAEA,MAAM,MAAM,GAAG,EAAc;AAE7B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACpC,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAE,KAAa,CAAC,GAAG,CAAC,CAAC;QACnD;AAEA,QAAA,OAAO,MAAM;IACf;AACD;;;;"}
1
+ {"version":3,"file":"Object.js","sources":["../../src/types/Object.ts"],"sourcesContent":["import XVType from \"../XVType\";\nimport { Infer } from \"../types\";\n\nexport type XVObjectShape = Record<string | number, XVType<any>>;\n\nclass XVObject<const T extends XVObjectShape> extends XVType<Infer<T>> {\n constructor(readonly objectArg: T) {\n super();\n }\n\n protected check(value: unknown): Infer<T> {\n if (typeof value !== \"object\" || value === null) {\n throw new Error(\"Value must be an object\");\n }\n\n const result = {} as Infer<T>;\n\n for (const key in this.objectArg) {\n const itemType = this.objectArg[key];\n result[key] = itemType.parse((value as any)[key]);\n }\n\n return result;\n }\n}\n\nexport default XVObject;\n"],"names":[],"mappings":";;AAKA,MAAM,QAAwC,SAAQ,MAAgB,CAAA;AACpE,IAAA,WAAA,CAAqB,SAAY,EAAA;AAC/B,QAAA,KAAK,EAAE;QADY,IAAA,CAAA,SAAS,GAAT,SAAS;IAE9B;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC/C,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;QAC5C;QAEA,MAAM,MAAM,GAAG,EAAc;AAE7B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACpC,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAE,KAAa,CAAC,GAAG,CAAC,CAAC;QACnD;AAEA,QAAA,OAAO,MAAM;IACf;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Promise.cjs","sources":["../../src/types/Promise.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nclass XVPromise<T extends XVType<any>> extends XVType<Promise<Infer<T>>> {\r\n constructor(readonly PromiseInner: T) {\r\n super();\r\n }\r\n\r\n protected check(value: any): Promise<Infer<T>> {\r\n if (!(value instanceof Promise)) {\r\n throw new Error(`Value should be a Promise, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n\r\n parse(value: any): Promise<Infer<T>> {\r\n super.parse(value);\r\n return (value as Promise<any>).then((res) => {\r\n if (this.PromiseInner) {\r\n this.PromiseInner.parse(res);\r\n }\r\n return res;\r\n });\r\n }\r\n}\r\n\r\nexport default XVPromise;\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,SAAiC,SAAQ,MAAyB,CAAA;AACtE,IAAA,WAAA,CAAqB,YAAe,EAAA;AAClC,QAAA,KAAK,EAAE;QADY,IAAA,CAAA,YAAY,GAAZ,YAAY;IAEjC;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,EAAE,KAAK,YAAY,OAAO,CAAC,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,KAAK,CAAA,CAAE,CAAC;QACxE;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,KAAK,CAAC,KAAU,EAAA;AACd,QAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAClB,QAAA,OAAQ,KAAsB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AAC1C,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;YAC9B;AACA,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
1
+ {"version":3,"file":"Promise.cjs","sources":["../../src/types/Promise.ts"],"sourcesContent":["import XVType from \"../XVType\";\nimport { Infer } from \"../types\";\n\nclass XVPromise<T extends XVType<any>> extends XVType<Promise<Infer<T>>> {\n constructor(readonly PromiseInner: T) {\n super();\n }\n\n protected check(value: any): Promise<Infer<T>> {\n if (!(value instanceof Promise)) {\n throw new Error(`Value should be a Promise, received ${typeof value}`);\n }\n return value;\n }\n\n parse(value: any): Promise<Infer<T>> {\n super.parse(value);\n return (value as Promise<any>).then((res) => {\n if (this.PromiseInner) {\n this.PromiseInner.parse(res);\n }\n return res;\n });\n }\n}\n\nexport default XVPromise;\n"],"names":[],"mappings":";;;;AAGA,MAAM,SAAiC,SAAQ,MAAyB,CAAA;AACtE,IAAA,WAAA,CAAqB,YAAe,EAAA;AAClC,QAAA,KAAK,EAAE;QADY,IAAA,CAAA,YAAY,GAAZ,YAAY;IAEjC;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,EAAE,KAAK,YAAY,OAAO,CAAC,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,KAAK,CAAA,CAAE,CAAC;QACxE;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,KAAK,CAAC,KAAU,EAAA;AACd,QAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAClB,QAAA,OAAQ,KAAsB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AAC1C,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;YAC9B;AACA,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Promise.js","sources":["../../src/types/Promise.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\nimport { Infer } from \"../types\";\r\n\r\nclass XVPromise<T extends XVType<any>> extends XVType<Promise<Infer<T>>> {\r\n constructor(readonly PromiseInner: T) {\r\n super();\r\n }\r\n\r\n protected check(value: any): Promise<Infer<T>> {\r\n if (!(value instanceof Promise)) {\r\n throw new Error(`Value should be a Promise, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n\r\n parse(value: any): Promise<Infer<T>> {\r\n super.parse(value);\r\n return (value as Promise<any>).then((res) => {\r\n if (this.PromiseInner) {\r\n this.PromiseInner.parse(res);\r\n }\r\n return res;\r\n });\r\n }\r\n}\r\n\r\nexport default XVPromise;\r\n"],"names":[],"mappings":";;AAGA,MAAM,SAAiC,SAAQ,MAAyB,CAAA;AACtE,IAAA,WAAA,CAAqB,YAAe,EAAA;AAClC,QAAA,KAAK,EAAE;QADY,IAAA,CAAA,YAAY,GAAZ,YAAY;IAEjC;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,EAAE,KAAK,YAAY,OAAO,CAAC,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,KAAK,CAAA,CAAE,CAAC;QACxE;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,KAAK,CAAC,KAAU,EAAA;AACd,QAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAClB,QAAA,OAAQ,KAAsB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AAC1C,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;YAC9B;AACA,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
1
+ {"version":3,"file":"Promise.js","sources":["../../src/types/Promise.ts"],"sourcesContent":["import XVType from \"../XVType\";\nimport { Infer } from \"../types\";\n\nclass XVPromise<T extends XVType<any>> extends XVType<Promise<Infer<T>>> {\n constructor(readonly PromiseInner: T) {\n super();\n }\n\n protected check(value: any): Promise<Infer<T>> {\n if (!(value instanceof Promise)) {\n throw new Error(`Value should be a Promise, received ${typeof value}`);\n }\n return value;\n }\n\n parse(value: any): Promise<Infer<T>> {\n super.parse(value);\n return (value as Promise<any>).then((res) => {\n if (this.PromiseInner) {\n this.PromiseInner.parse(res);\n }\n return res;\n });\n }\n}\n\nexport default XVPromise;\n"],"names":[],"mappings":";;AAGA,MAAM,SAAiC,SAAQ,MAAyB,CAAA;AACtE,IAAA,WAAA,CAAqB,YAAe,EAAA;AAClC,QAAA,KAAK,EAAE;QADY,IAAA,CAAA,YAAY,GAAZ,YAAY;IAEjC;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,EAAE,KAAK,YAAY,OAAO,CAAC,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,KAAK,CAAA,CAAE,CAAC;QACxE;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,KAAK,CAAC,KAAU,EAAA;AACd,QAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAClB,QAAA,OAAQ,KAAsB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AAC1C,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;YAC9B;AACA,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC,CAAC;IACJ;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Record.cjs","sources":["../../src/types/Record.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVRecord<K extends XVType<any>, V extends XVType<any>> extends XVType<\r\n Partial<Record<Infer<K>, Infer<V>>>\r\n> {\r\n constructor(\r\n readonly recordKey: K,\r\n readonly recordValue: V,\r\n ) {\r\n super();\r\n }\r\n\r\n protected check(value: any): Record<Infer<K>, Infer<V>> {\r\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\r\n throw new Error(`Value should be a record, received ${typeof value}`);\r\n }\r\n\r\n for (const [k, v] of Object.entries(value)) {\r\n try {\r\n this.recordKey.parse(k);\r\n value[k] = this.recordValue.parse(v);\r\n } catch (error) {\r\n throw new Error(\r\n `Record entry '${k}' should have key of type ${this.recordKey.constructor.name} and value of type ${this.recordValue.constructor.name}, received key: ${typeof k}, value: ${typeof v}`,\r\n );\r\n }\r\n }\r\n return value;\r\n }\r\n}\r\n\r\nexport default XVRecord;\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,QAAuD,SAAQ,MAEpE,CAAA;IACC,WAAA,CACW,SAAY,EACZ,WAAc,EAAA;AAEvB,QAAA,KAAK,EAAE;QAHE,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,WAAW,GAAX,WAAW;IAGtB;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvE,MAAM,IAAI,KAAK,CAAC,CAAA,mCAAA,EAAsC,OAAO,KAAK,CAAA,CAAE,CAAC;QACvE;AAEA,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC1C,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CACb,CAAA,cAAA,EAAiB,CAAC,CAAA,0BAAA,EAA6B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAA,mBAAA,EAAsB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAA,gBAAA,EAAmB,OAAO,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,CAAA,CAAE,CACvL;YACH;QACF;AACA,QAAA,OAAO,KAAK;IACd;AACD;;;;"}
1
+ {"version":3,"file":"Record.cjs","sources":["../../src/types/Record.ts"],"sourcesContent":["import { Infer } from \"../types\";\nimport XVType from \"../XVType\";\n\nclass XVRecord<K extends XVType<any>, V extends XVType<any>> extends XVType<\n Partial<Record<Infer<K>, Infer<V>>>\n> {\n constructor(\n readonly recordKey: K,\n readonly recordValue: V,\n ) {\n super();\n }\n\n protected check(value: any): Record<Infer<K>, Infer<V>> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(`Value should be a record, received ${typeof value}`);\n }\n\n for (const [k, v] of Object.entries(value)) {\n try {\n this.recordKey.parse(k);\n value[k] = this.recordValue.parse(v);\n } catch (error) {\n throw new Error(\n `Record entry '${k}' should have key of type ${this.recordKey.constructor.name} and value of type ${this.recordValue.constructor.name}, received key: ${typeof k}, value: ${typeof v}`,\n );\n }\n }\n return value;\n }\n}\n\nexport default XVRecord;\n"],"names":[],"mappings":";;;;AAGA,MAAM,QAAuD,SAAQ,MAEpE,CAAA;IACC,WAAA,CACW,SAAY,EACZ,WAAc,EAAA;AAEvB,QAAA,KAAK,EAAE;QAHE,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,WAAW,GAAX,WAAW;IAGtB;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvE,MAAM,IAAI,KAAK,CAAC,CAAA,mCAAA,EAAsC,OAAO,KAAK,CAAA,CAAE,CAAC;QACvE;AAEA,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC1C,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CACb,CAAA,cAAA,EAAiB,CAAC,CAAA,0BAAA,EAA6B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAA,mBAAA,EAAsB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAA,gBAAA,EAAmB,OAAO,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,CAAA,CAAE,CACvL;YACH;QACF;AACA,QAAA,OAAO,KAAK;IACd;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Record.js","sources":["../../src/types/Record.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVRecord<K extends XVType<any>, V extends XVType<any>> extends XVType<\r\n Partial<Record<Infer<K>, Infer<V>>>\r\n> {\r\n constructor(\r\n readonly recordKey: K,\r\n readonly recordValue: V,\r\n ) {\r\n super();\r\n }\r\n\r\n protected check(value: any): Record<Infer<K>, Infer<V>> {\r\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\r\n throw new Error(`Value should be a record, received ${typeof value}`);\r\n }\r\n\r\n for (const [k, v] of Object.entries(value)) {\r\n try {\r\n this.recordKey.parse(k);\r\n value[k] = this.recordValue.parse(v);\r\n } catch (error) {\r\n throw new Error(\r\n `Record entry '${k}' should have key of type ${this.recordKey.constructor.name} and value of type ${this.recordValue.constructor.name}, received key: ${typeof k}, value: ${typeof v}`,\r\n );\r\n }\r\n }\r\n return value;\r\n }\r\n}\r\n\r\nexport default XVRecord;\r\n"],"names":[],"mappings":";;AAGA,MAAM,QAAuD,SAAQ,MAEpE,CAAA;IACC,WAAA,CACW,SAAY,EACZ,WAAc,EAAA;AAEvB,QAAA,KAAK,EAAE;QAHE,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,WAAW,GAAX,WAAW;IAGtB;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvE,MAAM,IAAI,KAAK,CAAC,CAAA,mCAAA,EAAsC,OAAO,KAAK,CAAA,CAAE,CAAC;QACvE;AAEA,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC1C,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CACb,CAAA,cAAA,EAAiB,CAAC,CAAA,0BAAA,EAA6B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAA,mBAAA,EAAsB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAA,gBAAA,EAAmB,OAAO,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,CAAA,CAAE,CACvL;YACH;QACF;AACA,QAAA,OAAO,KAAK;IACd;AACD;;;;"}
1
+ {"version":3,"file":"Record.js","sources":["../../src/types/Record.ts"],"sourcesContent":["import { Infer } from \"../types\";\nimport XVType from \"../XVType\";\n\nclass XVRecord<K extends XVType<any>, V extends XVType<any>> extends XVType<\n Partial<Record<Infer<K>, Infer<V>>>\n> {\n constructor(\n readonly recordKey: K,\n readonly recordValue: V,\n ) {\n super();\n }\n\n protected check(value: any): Record<Infer<K>, Infer<V>> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(`Value should be a record, received ${typeof value}`);\n }\n\n for (const [k, v] of Object.entries(value)) {\n try {\n this.recordKey.parse(k);\n value[k] = this.recordValue.parse(v);\n } catch (error) {\n throw new Error(\n `Record entry '${k}' should have key of type ${this.recordKey.constructor.name} and value of type ${this.recordValue.constructor.name}, received key: ${typeof k}, value: ${typeof v}`,\n );\n }\n }\n return value;\n }\n}\n\nexport default XVRecord;\n"],"names":[],"mappings":";;AAGA,MAAM,QAAuD,SAAQ,MAEpE,CAAA;IACC,WAAA,CACW,SAAY,EACZ,WAAc,EAAA;AAEvB,QAAA,KAAK,EAAE;QAHE,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,WAAW,GAAX,WAAW;IAGtB;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvE,MAAM,IAAI,KAAK,CAAC,CAAA,mCAAA,EAAsC,OAAO,KAAK,CAAA,CAAE,CAAC;QACvE;AAEA,QAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC1C,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACvB,gBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,MAAM,IAAI,KAAK,CACb,CAAA,cAAA,EAAiB,CAAC,CAAA,0BAAA,EAA6B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAA,mBAAA,EAAsB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAA,gBAAA,EAAmB,OAAO,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,CAAA,CAAE,CACvL;YACH;QACF;AACA,QAAA,OAAO,KAAK;IACd;AACD;;;;"}
package/types/Set.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Set.cjs","sources":["../../src/types/Set.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVSet<T extends XVType<any> = any> extends XVType<Set<Infer<T>>> {\r\n\r\n constructor(readonly SetType: T) {\r\n super();\r\n }\r\n\r\n protected check(value: any): Set<Infer<T>> {\r\n if (!(value instanceof Set)) {\r\n throw new Error(`Value should be a Set, received ${typeof value}`);\r\n }\r\n\r\n for (const item of Array.from(value)) {\r\n try {\r\n this.SetType.parse(item);\r\n } catch (error) {\r\n throw new Error(`Set item should be of type ${this.SetType.constructor.name}, received ${typeof item}`);\r\n }\r\n }\r\n return value as any\r\n }\r\n\r\n min(length: number) {\r\n return this.set(\"min\", (v: any) => {\r\n if (v.size < length) {\r\n throw new Error(`Set size should be at least ${length} items, received ${v.size}`);\r\n }\r\n }, length);\r\n }\r\n\r\n max(length: number) {\r\n return this.set(\"max\", (v: any) => {\r\n if (v.size > length) {\r\n throw new Error(`Set size should not exceed ${length} items, received ${v.size}`);\r\n }\r\n }, length);\r\n }\r\n\r\n\r\n}\r\n\r\nexport default XVSet;"],"names":[],"mappings":";;;;AAGA,MAAM,KAAmC,SAAQ,MAAqB,CAAA;AAEnE,IAAA,WAAA,CAAqB,OAAU,EAAA;AAC5B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,OAAO,GAAP,OAAO;IAE5B;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,EAAE,KAAK,YAAY,GAAG,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,OAAO,KAAK,CAAA,CAAE,CAAC;QACrE;QAEA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI;AACD,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YAC3B;YAAE,OAAO,KAAK,EAAE;AACb,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,2BAAA,EAA8B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAA,WAAA,EAAc,OAAO,IAAI,CAAA,CAAE,CAAC;YAC1G;QACH;AACA,QAAA,OAAO,KAAY;IACtB;AAEA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAM,KAAI;AAC/B,YAAA,IAAI,CAAC,CAAC,IAAI,GAAG,MAAM,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,CAAA,4BAAA,EAA+B,MAAM,CAAA,iBAAA,EAAoB,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC;YACrF;QACH,CAAC,EAAE,MAAM,CAAC;IACb;AAEA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAM,KAAI;AAC/B,YAAA,IAAI,CAAC,CAAC,IAAI,GAAG,MAAM,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,CAAA,2BAAA,EAA8B,MAAM,CAAA,iBAAA,EAAoB,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC;YACpF;QACH,CAAC,EAAE,MAAM,CAAC;IACb;AAGF;;;;"}
1
+ {"version":3,"file":"Set.cjs","sources":["../../src/types/Set.ts"],"sourcesContent":["import { Infer } from \"../types\";\nimport XVType from \"../XVType\";\n\nclass XVSet<T extends XVType<any> = any> extends XVType<Set<Infer<T>>> {\n\n constructor(readonly SetType: T) {\n super();\n }\n\n protected check(value: any): Set<Infer<T>> {\n if (!(value instanceof Set)) {\n throw new Error(`Value should be a Set, received ${typeof value}`);\n }\n\n for (const item of Array.from(value)) {\n try {\n this.SetType.parse(item);\n } catch (error) {\n throw new Error(`Set item should be of type ${this.SetType.constructor.name}, received ${typeof item}`);\n }\n }\n return value as any\n }\n\n min(length: number) {\n return this.set(\"min\", (v: any) => {\n if (v.size < length) {\n throw new Error(`Set size should be at least ${length} items, received ${v.size}`);\n }\n }, length);\n }\n\n max(length: number) {\n return this.set(\"max\", (v: any) => {\n if (v.size > length) {\n throw new Error(`Set size should not exceed ${length} items, received ${v.size}`);\n }\n }, length);\n }\n\n\n}\n\nexport default XVSet;"],"names":[],"mappings":";;;;AAGA,MAAM,KAAmC,SAAQ,MAAqB,CAAA;AAEnE,IAAA,WAAA,CAAqB,OAAU,EAAA;AAC5B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,OAAO,GAAP,OAAO;IAE5B;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,EAAE,KAAK,YAAY,GAAG,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,OAAO,KAAK,CAAA,CAAE,CAAC;QACrE;QAEA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI;AACD,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YAC3B;YAAE,OAAO,KAAK,EAAE;AACb,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,2BAAA,EAA8B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAA,WAAA,EAAc,OAAO,IAAI,CAAA,CAAE,CAAC;YAC1G;QACH;AACA,QAAA,OAAO,KAAY;IACtB;AAEA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAM,KAAI;AAC/B,YAAA,IAAI,CAAC,CAAC,IAAI,GAAG,MAAM,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,CAAA,4BAAA,EAA+B,MAAM,CAAA,iBAAA,EAAoB,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC;YACrF;QACH,CAAC,EAAE,MAAM,CAAC;IACb;AAEA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAM,KAAI;AAC/B,YAAA,IAAI,CAAC,CAAC,IAAI,GAAG,MAAM,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,CAAA,2BAAA,EAA8B,MAAM,CAAA,iBAAA,EAAoB,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC;YACpF;QACH,CAAC,EAAE,MAAM,CAAC;IACb;AAGF;;;;"}
package/types/Set.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Set.js","sources":["../../src/types/Set.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVSet<T extends XVType<any> = any> extends XVType<Set<Infer<T>>> {\r\n\r\n constructor(readonly SetType: T) {\r\n super();\r\n }\r\n\r\n protected check(value: any): Set<Infer<T>> {\r\n if (!(value instanceof Set)) {\r\n throw new Error(`Value should be a Set, received ${typeof value}`);\r\n }\r\n\r\n for (const item of Array.from(value)) {\r\n try {\r\n this.SetType.parse(item);\r\n } catch (error) {\r\n throw new Error(`Set item should be of type ${this.SetType.constructor.name}, received ${typeof item}`);\r\n }\r\n }\r\n return value as any\r\n }\r\n\r\n min(length: number) {\r\n return this.set(\"min\", (v: any) => {\r\n if (v.size < length) {\r\n throw new Error(`Set size should be at least ${length} items, received ${v.size}`);\r\n }\r\n }, length);\r\n }\r\n\r\n max(length: number) {\r\n return this.set(\"max\", (v: any) => {\r\n if (v.size > length) {\r\n throw new Error(`Set size should not exceed ${length} items, received ${v.size}`);\r\n }\r\n }, length);\r\n }\r\n\r\n\r\n}\r\n\r\nexport default XVSet;"],"names":[],"mappings":";;AAGA,MAAM,KAAmC,SAAQ,MAAqB,CAAA;AAEnE,IAAA,WAAA,CAAqB,OAAU,EAAA;AAC5B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,OAAO,GAAP,OAAO;IAE5B;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,EAAE,KAAK,YAAY,GAAG,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,OAAO,KAAK,CAAA,CAAE,CAAC;QACrE;QAEA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI;AACD,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YAC3B;YAAE,OAAO,KAAK,EAAE;AACb,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,2BAAA,EAA8B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAA,WAAA,EAAc,OAAO,IAAI,CAAA,CAAE,CAAC;YAC1G;QACH;AACA,QAAA,OAAO,KAAY;IACtB;AAEA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAM,KAAI;AAC/B,YAAA,IAAI,CAAC,CAAC,IAAI,GAAG,MAAM,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,CAAA,4BAAA,EAA+B,MAAM,CAAA,iBAAA,EAAoB,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC;YACrF;QACH,CAAC,EAAE,MAAM,CAAC;IACb;AAEA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAM,KAAI;AAC/B,YAAA,IAAI,CAAC,CAAC,IAAI,GAAG,MAAM,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,CAAA,2BAAA,EAA8B,MAAM,CAAA,iBAAA,EAAoB,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC;YACpF;QACH,CAAC,EAAE,MAAM,CAAC;IACb;AAGF;;;;"}
1
+ {"version":3,"file":"Set.js","sources":["../../src/types/Set.ts"],"sourcesContent":["import { Infer } from \"../types\";\nimport XVType from \"../XVType\";\n\nclass XVSet<T extends XVType<any> = any> extends XVType<Set<Infer<T>>> {\n\n constructor(readonly SetType: T) {\n super();\n }\n\n protected check(value: any): Set<Infer<T>> {\n if (!(value instanceof Set)) {\n throw new Error(`Value should be a Set, received ${typeof value}`);\n }\n\n for (const item of Array.from(value)) {\n try {\n this.SetType.parse(item);\n } catch (error) {\n throw new Error(`Set item should be of type ${this.SetType.constructor.name}, received ${typeof item}`);\n }\n }\n return value as any\n }\n\n min(length: number) {\n return this.set(\"min\", (v: any) => {\n if (v.size < length) {\n throw new Error(`Set size should be at least ${length} items, received ${v.size}`);\n }\n }, length);\n }\n\n max(length: number) {\n return this.set(\"max\", (v: any) => {\n if (v.size > length) {\n throw new Error(`Set size should not exceed ${length} items, received ${v.size}`);\n }\n }, length);\n }\n\n\n}\n\nexport default XVSet;"],"names":[],"mappings":";;AAGA,MAAM,KAAmC,SAAQ,MAAqB,CAAA;AAEnE,IAAA,WAAA,CAAqB,OAAU,EAAA;AAC5B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,OAAO,GAAP,OAAO;IAE5B;AAEU,IAAA,KAAK,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,EAAE,KAAK,YAAY,GAAG,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,OAAO,KAAK,CAAA,CAAE,CAAC;QACrE;QAEA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI;AACD,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YAC3B;YAAE,OAAO,KAAK,EAAE;AACb,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,2BAAA,EAA8B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAA,WAAA,EAAc,OAAO,IAAI,CAAA,CAAE,CAAC;YAC1G;QACH;AACA,QAAA,OAAO,KAAY;IACtB;AAEA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAM,KAAI;AAC/B,YAAA,IAAI,CAAC,CAAC,IAAI,GAAG,MAAM,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,CAAA,4BAAA,EAA+B,MAAM,CAAA,iBAAA,EAAoB,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC;YACrF;QACH,CAAC,EAAE,MAAM,CAAC;IACb;AAEA,IAAA,GAAG,CAAC,MAAc,EAAA;QACf,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAM,KAAI;AAC/B,YAAA,IAAI,CAAC,CAAC,IAAI,GAAG,MAAM,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,CAAA,2BAAA,EAA8B,MAAM,CAAA,iBAAA,EAAoB,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC;YACpF;QACH,CAAC,EAAE,MAAM,CAAC;IACb;AAGF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"String.cjs","sources":["../../src/types/String.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\n\r\nclass XVString extends XVType<string> {\r\n constructor(length?: number) {\r\n super();\r\n if (length !== undefined) {\r\n this.length(length);\r\n }\r\n }\r\n\r\n protected check(value: unknown): string {\r\n if (typeof value !== \"string\") {\r\n throw new Error(`Value should be a string, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n\r\n length(length: number) {\r\n return this.set(\r\n \"length\",\r\n (v: unknown) => {\r\n const s = String(v);\r\n if (s.length !== length) {\r\n throw new Error(\r\n `String length should be ${length} characters, received ${s.length}`\r\n );\r\n }\r\n },\r\n length\r\n );\r\n }\r\n\r\n min(length: number) {\r\n return this.set(\r\n \"min\",\r\n (v: unknown) => {\r\n const s = String(v);\r\n if (s.length < length) {\r\n throw new Error(\r\n `Minimum length should be ${length} characters, received ${s.length}`\r\n );\r\n }\r\n },\r\n length\r\n );\r\n }\r\n\r\n max(length: number) {\r\n return this.set(\r\n \"max\",\r\n (v: unknown) => {\r\n const s = String(v);\r\n if (s.length > length) {\r\n throw new Error(\r\n `Maximum length should be ${length} characters, received ${s.length}`\r\n );\r\n }\r\n },\r\n length\r\n );\r\n }\r\n\r\n email() {\r\n return this.set(\"email\", (v: unknown) => {\r\n const s = String(v);\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n if (!emailRegex.test(s)) {\r\n throw new Error(`String should be a valid email address`);\r\n }\r\n });\r\n }\r\n\r\n uppercase() {\r\n return this.set(\"uppercase\", (v: unknown) => {\r\n const s = String(v);\r\n if (s !== s.toUpperCase()) {\r\n throw new Error(`String should be in uppercase`);\r\n }\r\n });\r\n }\r\n\r\n lowercase() {\r\n return this.set(\"lowercase\", (v: unknown) => {\r\n const s = String(v);\r\n if (s !== s.toLowerCase()) {\r\n throw new Error(`String should be in lowercase`);\r\n }\r\n });\r\n }\r\n\r\n number() {\r\n return this.set(\"number\", (v: unknown) => {\r\n const s = String(v);\r\n if (isNaN(Number(s))) {\r\n throw new Error(`String should be a valid number`);\r\n }\r\n });\r\n }\r\n\r\n date() {\r\n return this.set(\"date\", (v: unknown) => {\r\n const s = String(v);\r\n const d = new Date(s);\r\n if (isNaN(d.getTime())) {\r\n throw new Error(`String should be a valid date`);\r\n }\r\n });\r\n }\r\n\r\n base64() {\r\n return this.set(\"base64\", (v: unknown) => {\r\n const s = String(v);\r\n if (!/^[A-Za-z0-9+/]+={0,2}$/.test(s)) {\r\n throw new Error(`String should be a valid Base64 encoded string`);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default XVString;\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"String.cjs","sources":["../../src/types/String.ts"],"sourcesContent":["import XVType from \"../XVType\";\n\nclass XVString extends XVType<string> {\n constructor(length?: number) {\n super();\n if (length !== undefined) {\n this.length(length);\n }\n }\n\n protected check(value: unknown): string {\n if (typeof value !== \"string\") {\n throw new Error(`Value should be a string, received ${typeof value}`);\n }\n return value;\n }\n\n length(length: number) {\n return this.set(\n \"length\",\n (v: unknown) => {\n const s = String(v);\n if (s.length !== length) {\n throw new Error(\n `String length should be ${length} characters, received ${s.length}`\n );\n }\n },\n length\n );\n }\n\n min(length: number) {\n return this.set(\n \"min\",\n (v: unknown) => {\n const s = String(v);\n if (s.length < length) {\n throw new Error(\n `Minimum length should be ${length} characters, received ${s.length}`\n );\n }\n },\n length\n );\n }\n\n max(length: number) {\n return this.set(\n \"max\",\n (v: unknown) => {\n const s = String(v);\n if (s.length > length) {\n throw new Error(\n `Maximum length should be ${length} characters, received ${s.length}`\n );\n }\n },\n length\n );\n }\n\n email() {\n return this.set(\"email\", (v: unknown) => {\n const s = String(v);\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(s)) {\n throw new Error(`String should be a valid email address`);\n }\n });\n }\n\n uppercase() {\n return this.set(\"uppercase\", (v: unknown) => {\n const s = String(v);\n if (s !== s.toUpperCase()) {\n throw new Error(`String should be in uppercase`);\n }\n });\n }\n\n lowercase() {\n return this.set(\"lowercase\", (v: unknown) => {\n const s = String(v);\n if (s !== s.toLowerCase()) {\n throw new Error(`String should be in lowercase`);\n }\n });\n }\n\n number() {\n return this.set(\"number\", (v: unknown) => {\n const s = String(v);\n if (isNaN(Number(s))) {\n throw new Error(`String should be a valid number`);\n }\n });\n }\n\n date() {\n return this.set(\"date\", (v: unknown) => {\n const s = String(v);\n const d = new Date(s);\n if (isNaN(d.getTime())) {\n throw new Error(`String should be a valid date`);\n }\n });\n }\n\n base64() {\n return this.set(\"base64\", (v: unknown) => {\n const s = String(v);\n if (!/^[A-Za-z0-9+/]+={0,2}$/.test(s)) {\n throw new Error(`String should be a valid Base64 encoded string`);\n }\n });\n }\n}\n\nexport default XVString;\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"String.js","sources":["../../src/types/String.ts"],"sourcesContent":["import XVType from \"../XVType\";\r\n\r\nclass XVString extends XVType<string> {\r\n constructor(length?: number) {\r\n super();\r\n if (length !== undefined) {\r\n this.length(length);\r\n }\r\n }\r\n\r\n protected check(value: unknown): string {\r\n if (typeof value !== \"string\") {\r\n throw new Error(`Value should be a string, received ${typeof value}`);\r\n }\r\n return value;\r\n }\r\n\r\n length(length: number) {\r\n return this.set(\r\n \"length\",\r\n (v: unknown) => {\r\n const s = String(v);\r\n if (s.length !== length) {\r\n throw new Error(\r\n `String length should be ${length} characters, received ${s.length}`\r\n );\r\n }\r\n },\r\n length\r\n );\r\n }\r\n\r\n min(length: number) {\r\n return this.set(\r\n \"min\",\r\n (v: unknown) => {\r\n const s = String(v);\r\n if (s.length < length) {\r\n throw new Error(\r\n `Minimum length should be ${length} characters, received ${s.length}`\r\n );\r\n }\r\n },\r\n length\r\n );\r\n }\r\n\r\n max(length: number) {\r\n return this.set(\r\n \"max\",\r\n (v: unknown) => {\r\n const s = String(v);\r\n if (s.length > length) {\r\n throw new Error(\r\n `Maximum length should be ${length} characters, received ${s.length}`\r\n );\r\n }\r\n },\r\n length\r\n );\r\n }\r\n\r\n email() {\r\n return this.set(\"email\", (v: unknown) => {\r\n const s = String(v);\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n if (!emailRegex.test(s)) {\r\n throw new Error(`String should be a valid email address`);\r\n }\r\n });\r\n }\r\n\r\n uppercase() {\r\n return this.set(\"uppercase\", (v: unknown) => {\r\n const s = String(v);\r\n if (s !== s.toUpperCase()) {\r\n throw new Error(`String should be in uppercase`);\r\n }\r\n });\r\n }\r\n\r\n lowercase() {\r\n return this.set(\"lowercase\", (v: unknown) => {\r\n const s = String(v);\r\n if (s !== s.toLowerCase()) {\r\n throw new Error(`String should be in lowercase`);\r\n }\r\n });\r\n }\r\n\r\n number() {\r\n return this.set(\"number\", (v: unknown) => {\r\n const s = String(v);\r\n if (isNaN(Number(s))) {\r\n throw new Error(`String should be a valid number`);\r\n }\r\n });\r\n }\r\n\r\n date() {\r\n return this.set(\"date\", (v: unknown) => {\r\n const s = String(v);\r\n const d = new Date(s);\r\n if (isNaN(d.getTime())) {\r\n throw new Error(`String should be a valid date`);\r\n }\r\n });\r\n }\r\n\r\n base64() {\r\n return this.set(\"base64\", (v: unknown) => {\r\n const s = String(v);\r\n if (!/^[A-Za-z0-9+/]+={0,2}$/.test(s)) {\r\n throw new Error(`String should be a valid Base64 encoded string`);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default XVString;\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"String.js","sources":["../../src/types/String.ts"],"sourcesContent":["import XVType from \"../XVType\";\n\nclass XVString extends XVType<string> {\n constructor(length?: number) {\n super();\n if (length !== undefined) {\n this.length(length);\n }\n }\n\n protected check(value: unknown): string {\n if (typeof value !== \"string\") {\n throw new Error(`Value should be a string, received ${typeof value}`);\n }\n return value;\n }\n\n length(length: number) {\n return this.set(\n \"length\",\n (v: unknown) => {\n const s = String(v);\n if (s.length !== length) {\n throw new Error(\n `String length should be ${length} characters, received ${s.length}`\n );\n }\n },\n length\n );\n }\n\n min(length: number) {\n return this.set(\n \"min\",\n (v: unknown) => {\n const s = String(v);\n if (s.length < length) {\n throw new Error(\n `Minimum length should be ${length} characters, received ${s.length}`\n );\n }\n },\n length\n );\n }\n\n max(length: number) {\n return this.set(\n \"max\",\n (v: unknown) => {\n const s = String(v);\n if (s.length > length) {\n throw new Error(\n `Maximum length should be ${length} characters, received ${s.length}`\n );\n }\n },\n length\n );\n }\n\n email() {\n return this.set(\"email\", (v: unknown) => {\n const s = String(v);\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(s)) {\n throw new Error(`String should be a valid email address`);\n }\n });\n }\n\n uppercase() {\n return this.set(\"uppercase\", (v: unknown) => {\n const s = String(v);\n if (s !== s.toUpperCase()) {\n throw new Error(`String should be in uppercase`);\n }\n });\n }\n\n lowercase() {\n return this.set(\"lowercase\", (v: unknown) => {\n const s = String(v);\n if (s !== s.toLowerCase()) {\n throw new Error(`String should be in lowercase`);\n }\n });\n }\n\n number() {\n return this.set(\"number\", (v: unknown) => {\n const s = String(v);\n if (isNaN(Number(s))) {\n throw new Error(`String should be a valid number`);\n }\n });\n }\n\n date() {\n return this.set(\"date\", (v: unknown) => {\n const s = String(v);\n const d = new Date(s);\n if (isNaN(d.getTime())) {\n throw new Error(`String should be a valid date`);\n }\n });\n }\n\n base64() {\n return this.set(\"base64\", (v: unknown) => {\n const s = String(v);\n if (!/^[A-Za-z0-9+/]+={0,2}$/.test(s)) {\n throw new Error(`String should be a valid Base64 encoded string`);\n }\n });\n }\n}\n\nexport default XVString;\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tuple.cjs","sources":["../../src/types/Tuple.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVTuple<T extends XVType<any>[] = any> extends XVType<{ [K in keyof T]: Infer<T[K]> }> {\r\n\r\n constructor(readonly TupleTypes: T) {\r\n super();\r\n }\r\n\r\n protected check(value: unknown): { [K in keyof T]: Infer<T[K]> } {\r\n if (!Array.isArray(value)) {\r\n throw new Error(`Value should be a tuple, received ${typeof value}`);\r\n }\r\n\r\n if (value.length !== this.TupleTypes.length) {\r\n throw new Error(`Tuple length should be ${this.TupleTypes.length}, received ${value.length}`);\r\n }\r\n\r\n const result = [] as unknown as { [K in keyof T]: Infer<T[K]> };\r\n\r\n for (let i = 0; i < value.length; i++) {\r\n try {\r\n result[i] = this.TupleTypes[i].parse(value[i]) as Infer<T[typeof i]>;\r\n } catch (err: any) {\r\n throw new Error(\r\n `Tuple item at index ${i} should be of type ${this.TupleTypes[i].constructor.name}, received ${typeof value[i]}`\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVTuple;\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,OAAuC,SAAQ,MAAuC,CAAA;AAEzF,IAAA,WAAA,CAAqB,UAAa,EAAA;AAC/B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,UAAU,GAAV,UAAU;IAE/B;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,CAAA,kCAAA,EAAqC,OAAO,KAAK,CAAA,CAAE,CAAC;QACvE;QAEA,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AAC1C,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,IAAI,CAAC,UAAU,CAAC,MAAM,cAAc,KAAK,CAAC,MAAM,CAAA,CAAE,CAAC;QAChG;QAEA,MAAM,MAAM,GAAG,EAAgD;AAE/D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,IAAI;AACD,gBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAuB;YACvE;YAAE,OAAO,GAAQ,EAAE;gBAChB,MAAM,IAAI,KAAK,CACZ,CAAA,oBAAA,EAAuB,CAAC,sBAAsB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAA,WAAA,EAAc,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE,CAClH;YACJ;QACH;AAEA,QAAA,OAAO,MAAM;IAChB;AACF;;;;"}
1
+ {"version":3,"file":"Tuple.cjs","sources":["../../src/types/Tuple.ts"],"sourcesContent":["import { Infer } from \"../types\";\nimport XVType from \"../XVType\";\n\nclass XVTuple<T extends XVType<any>[] = any> extends XVType<{ [K in keyof T]: Infer<T[K]> }> {\n\n constructor(readonly TupleTypes: T) {\n super();\n }\n\n protected check(value: unknown): { [K in keyof T]: Infer<T[K]> } {\n if (!Array.isArray(value)) {\n throw new Error(`Value should be a tuple, received ${typeof value}`);\n }\n\n if (value.length !== this.TupleTypes.length) {\n throw new Error(`Tuple length should be ${this.TupleTypes.length}, received ${value.length}`);\n }\n\n const result = [] as unknown as { [K in keyof T]: Infer<T[K]> };\n\n for (let i = 0; i < value.length; i++) {\n try {\n result[i] = this.TupleTypes[i].parse(value[i]) as Infer<T[typeof i]>;\n } catch (err: any) {\n throw new Error(\n `Tuple item at index ${i} should be of type ${this.TupleTypes[i].constructor.name}, received ${typeof value[i]}`\n );\n }\n }\n\n return result;\n }\n}\n\nexport default XVTuple;\n"],"names":[],"mappings":";;;;AAGA,MAAM,OAAuC,SAAQ,MAAuC,CAAA;AAEzF,IAAA,WAAA,CAAqB,UAAa,EAAA;AAC/B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,UAAU,GAAV,UAAU;IAE/B;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,CAAA,kCAAA,EAAqC,OAAO,KAAK,CAAA,CAAE,CAAC;QACvE;QAEA,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AAC1C,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,IAAI,CAAC,UAAU,CAAC,MAAM,cAAc,KAAK,CAAC,MAAM,CAAA,CAAE,CAAC;QAChG;QAEA,MAAM,MAAM,GAAG,EAAgD;AAE/D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,IAAI;AACD,gBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAuB;YACvE;YAAE,OAAO,GAAQ,EAAE;gBAChB,MAAM,IAAI,KAAK,CACZ,CAAA,oBAAA,EAAuB,CAAC,sBAAsB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAA,WAAA,EAAc,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE,CAClH;YACJ;QACH;AAEA,QAAA,OAAO,MAAM;IAChB;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tuple.js","sources":["../../src/types/Tuple.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVTuple<T extends XVType<any>[] = any> extends XVType<{ [K in keyof T]: Infer<T[K]> }> {\r\n\r\n constructor(readonly TupleTypes: T) {\r\n super();\r\n }\r\n\r\n protected check(value: unknown): { [K in keyof T]: Infer<T[K]> } {\r\n if (!Array.isArray(value)) {\r\n throw new Error(`Value should be a tuple, received ${typeof value}`);\r\n }\r\n\r\n if (value.length !== this.TupleTypes.length) {\r\n throw new Error(`Tuple length should be ${this.TupleTypes.length}, received ${value.length}`);\r\n }\r\n\r\n const result = [] as unknown as { [K in keyof T]: Infer<T[K]> };\r\n\r\n for (let i = 0; i < value.length; i++) {\r\n try {\r\n result[i] = this.TupleTypes[i].parse(value[i]) as Infer<T[typeof i]>;\r\n } catch (err: any) {\r\n throw new Error(\r\n `Tuple item at index ${i} should be of type ${this.TupleTypes[i].constructor.name}, received ${typeof value[i]}`\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport default XVTuple;\r\n"],"names":[],"mappings":";;AAGA,MAAM,OAAuC,SAAQ,MAAuC,CAAA;AAEzF,IAAA,WAAA,CAAqB,UAAa,EAAA;AAC/B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,UAAU,GAAV,UAAU;IAE/B;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,CAAA,kCAAA,EAAqC,OAAO,KAAK,CAAA,CAAE,CAAC;QACvE;QAEA,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AAC1C,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,IAAI,CAAC,UAAU,CAAC,MAAM,cAAc,KAAK,CAAC,MAAM,CAAA,CAAE,CAAC;QAChG;QAEA,MAAM,MAAM,GAAG,EAAgD;AAE/D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,IAAI;AACD,gBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAuB;YACvE;YAAE,OAAO,GAAQ,EAAE;gBAChB,MAAM,IAAI,KAAK,CACZ,CAAA,oBAAA,EAAuB,CAAC,sBAAsB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAA,WAAA,EAAc,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE,CAClH;YACJ;QACH;AAEA,QAAA,OAAO,MAAM;IAChB;AACF;;;;"}
1
+ {"version":3,"file":"Tuple.js","sources":["../../src/types/Tuple.ts"],"sourcesContent":["import { Infer } from \"../types\";\nimport XVType from \"../XVType\";\n\nclass XVTuple<T extends XVType<any>[] = any> extends XVType<{ [K in keyof T]: Infer<T[K]> }> {\n\n constructor(readonly TupleTypes: T) {\n super();\n }\n\n protected check(value: unknown): { [K in keyof T]: Infer<T[K]> } {\n if (!Array.isArray(value)) {\n throw new Error(`Value should be a tuple, received ${typeof value}`);\n }\n\n if (value.length !== this.TupleTypes.length) {\n throw new Error(`Tuple length should be ${this.TupleTypes.length}, received ${value.length}`);\n }\n\n const result = [] as unknown as { [K in keyof T]: Infer<T[K]> };\n\n for (let i = 0; i < value.length; i++) {\n try {\n result[i] = this.TupleTypes[i].parse(value[i]) as Infer<T[typeof i]>;\n } catch (err: any) {\n throw new Error(\n `Tuple item at index ${i} should be of type ${this.TupleTypes[i].constructor.name}, received ${typeof value[i]}`\n );\n }\n }\n\n return result;\n }\n}\n\nexport default XVTuple;\n"],"names":[],"mappings":";;AAGA,MAAM,OAAuC,SAAQ,MAAuC,CAAA;AAEzF,IAAA,WAAA,CAAqB,UAAa,EAAA;AAC/B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,UAAU,GAAV,UAAU;IAE/B;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,CAAA,kCAAA,EAAqC,OAAO,KAAK,CAAA,CAAE,CAAC;QACvE;QAEA,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AAC1C,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,IAAI,CAAC,UAAU,CAAC,MAAM,cAAc,KAAK,CAAC,MAAM,CAAA,CAAE,CAAC;QAChG;QAEA,MAAM,MAAM,GAAG,EAAgD;AAE/D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,IAAI;AACD,gBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAuB;YACvE;YAAE,OAAO,GAAQ,EAAE;gBAChB,MAAM,IAAI,KAAK,CACZ,CAAA,oBAAA,EAAuB,CAAC,sBAAsB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAA,WAAA,EAAc,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE,CAClH;YACJ;QACH;AAEA,QAAA,OAAO,MAAM;IAChB;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Union.cjs","sources":["../../src/types/Union.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVUnion<T extends XVType<any>[] = XVType<any>[]> extends XVType<Infer<T[number]>> {\r\n\r\n constructor(readonly UnionTypes: T) {\r\n super();\r\n if (!Array.isArray(UnionTypes) || UnionTypes.length === 0) {\r\n throw new Error(\"Union types must be a non-empty array\");\r\n }\r\n }\r\n\r\n protected check(value: unknown): Infer<T[number]> {\r\n let lastError: any = null;\r\n\r\n for (const type of this.UnionTypes) {\r\n try {\r\n return type.parse(value); // parse each type\r\n } catch (err) {\r\n lastError = err;\r\n }\r\n }\r\n\r\n throw new Error(\r\n `Value does not match any of the union types: ${this.UnionTypes\r\n .map((t) => t.constructor.name)\r\n .join(\", \")}. Last error: ${lastError?.message || lastError}`\r\n );\r\n }\r\n}\r\n\r\nexport default XVUnion;\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,OAAiD,SAAQ,MAAwB,CAAA;AAEpF,IAAA,WAAA,CAAqB,UAAa,EAAA;AAC/B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,UAAU,GAAV,UAAU;AAE5B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACxD,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;QAC3D;IACH;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,SAAS,GAAQ,IAAI;AAEzB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACjC,YAAA,IAAI;gBACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5B;YAAE,OAAO,GAAG,EAAE;gBACX,SAAS,GAAG,GAAG;YAClB;QACH;AAEA,QAAA,MAAM,IAAI,KAAK,CACZ,CAAA,6CAAA,EAAgD,IAAI,CAAC;aACjD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI;AAC7B,aAAA,IAAI,CAAC,IAAI,CAAC,CAAA,cAAA,EAAiB,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,OAAO,KAAI,SAAS,CAAA,CAAE,CAClE;IACJ;AACF;;;;"}
1
+ {"version":3,"file":"Union.cjs","sources":["../../src/types/Union.ts"],"sourcesContent":["import { Infer } from \"../types\";\nimport XVType from \"../XVType\";\n\nclass XVUnion<T extends XVType<any>[] = XVType<any>[]> extends XVType<Infer<T[number]>> {\n\n constructor(readonly UnionTypes: T) {\n super();\n if (!Array.isArray(UnionTypes) || UnionTypes.length === 0) {\n throw new Error(\"Union types must be a non-empty array\");\n }\n }\n\n protected check(value: unknown): Infer<T[number]> {\n let lastError: any = null;\n\n for (const type of this.UnionTypes) {\n try {\n return type.parse(value); // parse each type\n } catch (err) {\n lastError = err;\n }\n }\n\n throw new Error(\n `Value does not match any of the union types: ${this.UnionTypes\n .map((t) => t.constructor.name)\n .join(\", \")}. Last error: ${lastError?.message || lastError}`\n );\n }\n}\n\nexport default XVUnion;\n"],"names":[],"mappings":";;;;AAGA,MAAM,OAAiD,SAAQ,MAAwB,CAAA;AAEpF,IAAA,WAAA,CAAqB,UAAa,EAAA;AAC/B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,UAAU,GAAV,UAAU;AAE5B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACxD,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;QAC3D;IACH;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,SAAS,GAAQ,IAAI;AAEzB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACjC,YAAA,IAAI;gBACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5B;YAAE,OAAO,GAAG,EAAE;gBACX,SAAS,GAAG,GAAG;YAClB;QACH;AAEA,QAAA,MAAM,IAAI,KAAK,CACZ,CAAA,6CAAA,EAAgD,IAAI,CAAC;aACjD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI;AAC7B,aAAA,IAAI,CAAC,IAAI,CAAC,CAAA,cAAA,EAAiB,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,OAAO,KAAI,SAAS,CAAA,CAAE,CAClE;IACJ;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Union.js","sources":["../../src/types/Union.ts"],"sourcesContent":["import { Infer } from \"../types\";\r\nimport XVType from \"../XVType\";\r\n\r\nclass XVUnion<T extends XVType<any>[] = XVType<any>[]> extends XVType<Infer<T[number]>> {\r\n\r\n constructor(readonly UnionTypes: T) {\r\n super();\r\n if (!Array.isArray(UnionTypes) || UnionTypes.length === 0) {\r\n throw new Error(\"Union types must be a non-empty array\");\r\n }\r\n }\r\n\r\n protected check(value: unknown): Infer<T[number]> {\r\n let lastError: any = null;\r\n\r\n for (const type of this.UnionTypes) {\r\n try {\r\n return type.parse(value); // parse each type\r\n } catch (err) {\r\n lastError = err;\r\n }\r\n }\r\n\r\n throw new Error(\r\n `Value does not match any of the union types: ${this.UnionTypes\r\n .map((t) => t.constructor.name)\r\n .join(\", \")}. Last error: ${lastError?.message || lastError}`\r\n );\r\n }\r\n}\r\n\r\nexport default XVUnion;\r\n"],"names":[],"mappings":";;AAGA,MAAM,OAAiD,SAAQ,MAAwB,CAAA;AAEpF,IAAA,WAAA,CAAqB,UAAa,EAAA;AAC/B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,UAAU,GAAV,UAAU;AAE5B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACxD,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;QAC3D;IACH;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,SAAS,GAAQ,IAAI;AAEzB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACjC,YAAA,IAAI;gBACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5B;YAAE,OAAO,GAAG,EAAE;gBACX,SAAS,GAAG,GAAG;YAClB;QACH;AAEA,QAAA,MAAM,IAAI,KAAK,CACZ,CAAA,6CAAA,EAAgD,IAAI,CAAC;aACjD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI;AAC7B,aAAA,IAAI,CAAC,IAAI,CAAC,CAAA,cAAA,EAAiB,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,OAAO,KAAI,SAAS,CAAA,CAAE,CAClE;IACJ;AACF;;;;"}
1
+ {"version":3,"file":"Union.js","sources":["../../src/types/Union.ts"],"sourcesContent":["import { Infer } from \"../types\";\nimport XVType from \"../XVType\";\n\nclass XVUnion<T extends XVType<any>[] = XVType<any>[]> extends XVType<Infer<T[number]>> {\n\n constructor(readonly UnionTypes: T) {\n super();\n if (!Array.isArray(UnionTypes) || UnionTypes.length === 0) {\n throw new Error(\"Union types must be a non-empty array\");\n }\n }\n\n protected check(value: unknown): Infer<T[number]> {\n let lastError: any = null;\n\n for (const type of this.UnionTypes) {\n try {\n return type.parse(value); // parse each type\n } catch (err) {\n lastError = err;\n }\n }\n\n throw new Error(\n `Value does not match any of the union types: ${this.UnionTypes\n .map((t) => t.constructor.name)\n .join(\", \")}. Last error: ${lastError?.message || lastError}`\n );\n }\n}\n\nexport default XVUnion;\n"],"names":[],"mappings":";;AAGA,MAAM,OAAiD,SAAQ,MAAwB,CAAA;AAEpF,IAAA,WAAA,CAAqB,UAAa,EAAA;AAC/B,QAAA,KAAK,EAAE;QADW,IAAA,CAAA,UAAU,GAAV,UAAU;AAE5B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACxD,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;QAC3D;IACH;AAEU,IAAA,KAAK,CAAC,KAAc,EAAA;QAC3B,IAAI,SAAS,GAAQ,IAAI;AAEzB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACjC,YAAA,IAAI;gBACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5B;YAAE,OAAO,GAAG,EAAE;gBACX,SAAS,GAAG,GAAG;YAClB;QACH;AAEA,QAAA,MAAM,IAAI,KAAK,CACZ,CAAA,6CAAA,EAAgD,IAAI,CAAC;aACjD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI;AAC7B,aAAA,IAAI,CAAC,IAAI,CAAC,CAAA,cAAA,EAAiB,CAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,OAAO,KAAI,SAAS,CAAA,CAAE,CAClE;IACJ;AACF;;;;"}