{"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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"}