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