@desaubv/quik 0.1.3 → 0.1.5

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.
@@ -20,6 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/http/index.ts
21
21
  var http_exports = {};
22
22
  __export(http_exports, {
23
+ MimeTypes: () => MimeTypes,
23
24
  Status: () => Status,
24
25
  Types: () => Types,
25
26
  ValidationException: () => ValidationException,
@@ -115,7 +116,6 @@ var RequiredFieldException = class extends ValidationException {
115
116
  this.field = field;
116
117
  this.name = "RequiredFieldException";
117
118
  }
118
- field;
119
119
  };
120
120
  var InvalidTypeException = class extends ValidationException {
121
121
  constructor(field, expected, received) {
@@ -127,9 +127,6 @@ var InvalidTypeException = class extends ValidationException {
127
127
  this.received = received;
128
128
  this.name = "InvalidTypeException";
129
129
  }
130
- field;
131
- expected;
132
- received;
133
130
  };
134
131
  var EmptyArrayException = class extends ValidationException {
135
132
  constructor(field) {
@@ -137,7 +134,6 @@ var EmptyArrayException = class extends ValidationException {
137
134
  this.field = field;
138
135
  this.name = "EmptyArrayException";
139
136
  }
140
- field;
141
137
  };
142
138
 
143
139
  // src/http/validador.ts
@@ -181,8 +177,104 @@ var Validator = {
181
177
  value = result;
182
178
  }
183
179
  return value;
180
+ },
181
+ file: (file, options = {}) => {
182
+ const {
183
+ canBeEmpty = false,
184
+ maxNumberOfFiles,
185
+ minNumberOfFiles
186
+ } = options;
187
+ if (!file) {
188
+ if (canBeEmpty) {
189
+ return null;
190
+ }
191
+ throw new ValidationException(
192
+ "File is required but not provided."
193
+ );
194
+ }
195
+ if (Array.isArray(file)) {
196
+ if (file.length === 0) {
197
+ if (canBeEmpty) {
198
+ return null;
199
+ }
200
+ throw new ValidationException(
201
+ "At least one file is required."
202
+ );
203
+ }
204
+ if (maxNumberOfFiles !== void 0 && file.length > maxNumberOfFiles) {
205
+ throw new ValidationException(
206
+ `Maximum number of files allowed is ${maxNumberOfFiles}.`
207
+ );
208
+ }
209
+ if (minNumberOfFiles !== void 0 && file.length < minNumberOfFiles) {
210
+ throw new ValidationException(
211
+ `Minimum number of files required is ${minNumberOfFiles}.`
212
+ );
213
+ }
214
+ return file.map((f) => validateFile(f, options));
215
+ }
216
+ return validateFile(file, options);
184
217
  }
185
218
  };
219
+ function validateFile(file, options = {}) {
220
+ const {
221
+ maxSizeMb,
222
+ minSizeMb,
223
+ mimeTypes,
224
+ extensions,
225
+ fileNamePattern
226
+ } = options;
227
+ if (typeof file !== "object" || file === null) {
228
+ throw new ValidationException(
229
+ "Invalid file."
230
+ );
231
+ }
232
+ if (typeof file.size !== "number" || file.size < 0) {
233
+ throw new ValidationException(
234
+ "Invalid file size."
235
+ );
236
+ }
237
+ if (maxSizeMb !== void 0 && file.size > maxSizeMb * 1024 * 1024) {
238
+ throw new ValidationException(
239
+ `File size exceeds the maximum limit of ${maxSizeMb} MB.`
240
+ );
241
+ }
242
+ if (minSizeMb !== void 0 && file.size < minSizeMb * 1024 * 1024) {
243
+ throw new ValidationException(
244
+ `File size is below the minimum limit of ${minSizeMb} MB.`
245
+ );
246
+ }
247
+ if (mimeTypes !== void 0) {
248
+ const allowedMimeTypes = Array.isArray(mimeTypes) ? mimeTypes : [mimeTypes];
249
+ if (typeof file.mimetype !== "string" || !allowedMimeTypes.includes(file.mimetype)) {
250
+ throw new ValidationException(
251
+ `File type is not allowed. Allowed types are: ${allowedMimeTypes.join(", ")}`
252
+ );
253
+ }
254
+ }
255
+ if (extensions !== void 0) {
256
+ const allowedExtensions = (Array.isArray(extensions) ? extensions : [extensions]).map(
257
+ (extension2) => extension2.replace(/^\./, "").toLowerCase()
258
+ );
259
+ if (typeof file.originalname !== "string") {
260
+ throw new ValidationException(
261
+ "Invalid file name."
262
+ );
263
+ }
264
+ const extension = file.originalname.split(".").pop()?.toLowerCase();
265
+ if (!extension || !allowedExtensions.includes(extension)) {
266
+ throw new ValidationException(
267
+ `File extension is not allowed. Allowed extensions are: ${allowedExtensions.join(", ")}`
268
+ );
269
+ }
270
+ }
271
+ if (fileNamePattern !== void 0 && !fileNamePattern.test(file.originalname)) {
272
+ throw new ValidationException(
273
+ "File name does not match the required pattern."
274
+ );
275
+ }
276
+ return file;
277
+ }
186
278
  function validateObject(body, fields, parentPath = "") {
187
279
  if (typeof body !== "object" || body === null || Array.isArray(body)) {
188
280
  throw new InvalidBodyException();
@@ -358,8 +450,175 @@ var Status = {
358
450
  NOT_EXTENDED: 510,
359
451
  NETWORK_AUTHENTICATION_REQUIRED: 511
360
452
  };
453
+
454
+ // src/http/file.ts
455
+ var MimeTypes = {
456
+ // Documents
457
+ "pdf": "application/pdf",
458
+ "doc": "application/msword",
459
+ "docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
460
+ "odt": "application/vnd.oasis.opendocument.text",
461
+ "rtf": "application/rtf",
462
+ "tex": "application/x-tex",
463
+ "txt": "text/plain",
464
+ "md": "text/markdown",
465
+ // Spreadsheets
466
+ "xls": "application/vnd.ms-excel",
467
+ "xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
468
+ "ods": "application/vnd.oasis.opendocument.spreadsheet",
469
+ "csv": "text/csv",
470
+ "tsv": "text/tab-separated-values",
471
+ // Presentations
472
+ "ppt": "application/vnd.ms-powerpoint",
473
+ "pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
474
+ "odp": "application/vnd.oasis.opendocument.presentation",
475
+ // Images
476
+ "jpg": "image/jpeg",
477
+ "jpeg": "image/jpeg",
478
+ "png": "image/png",
479
+ "gif": "image/gif",
480
+ "bmp": "image/bmp",
481
+ "webp": "image/webp",
482
+ "svg": "image/svg+xml",
483
+ "ico": "image/x-icon",
484
+ "tif": "image/tiff",
485
+ "tiff": "image/tiff",
486
+ "avif": "image/avif",
487
+ "heic": "image/heic",
488
+ "heif": "image/heif",
489
+ "apng": "image/apng",
490
+ "jxl": "image/jxl",
491
+ "psd": "image/vnd.adobe.photoshop",
492
+ "ai": "application/postscript",
493
+ "eps": "application/postscript",
494
+ // Video
495
+ "mp4": "video/mp4",
496
+ "avi": "video/x-msvideo",
497
+ "mov": "video/quicktime",
498
+ "wmv": "video/x-ms-wmv",
499
+ "flv": "video/x-flv",
500
+ "mkv": "video/x-matroska",
501
+ "webm": "video/webm",
502
+ "mpeg": "video/mpeg",
503
+ "mpg": "video/mpeg",
504
+ "m4v": "video/x-m4v",
505
+ "3gp": "video/3gpp",
506
+ "3g2": "video/3gpp2",
507
+ "ts": "video/mp2t",
508
+ // Audio
509
+ "mp3": "audio/mpeg",
510
+ "wav": "audio/wav",
511
+ "ogg": "audio/ogg",
512
+ "oga": "audio/ogg",
513
+ "opus": "audio/opus",
514
+ "aac": "audio/aac",
515
+ "m4a": "audio/mp4",
516
+ "flac": "audio/flac",
517
+ "weba": "audio/webm",
518
+ "mid": "audio/midi",
519
+ "midi": "audio/midi",
520
+ // Web
521
+ "html": "text/html",
522
+ "htm": "text/html",
523
+ "css": "text/css",
524
+ "js": "text/javascript",
525
+ "mjs": "text/javascript",
526
+ "cjs": "text/javascript",
527
+ "jsx": "text/jsx",
528
+ "tsx": "video/mp2t",
529
+ // Data / Configuration
530
+ "json": "application/json",
531
+ "xml": "application/xml",
532
+ "yaml": "application/yaml",
533
+ "yml": "application/yaml",
534
+ "toml": "application/toml",
535
+ "ini": "text/plain",
536
+ "env": "text/plain",
537
+ // Programming
538
+ "c": "text/x-c",
539
+ "h": "text/x-c",
540
+ "cpp": "text/x-c++",
541
+ "cc": "text/x-c++",
542
+ "cxx": "text/x-c++",
543
+ "hpp": "text/x-c++",
544
+ "java": "text/x-java-source",
545
+ "py": "text/x-python",
546
+ "pyw": "text/x-python",
547
+ "rb": "text/x-ruby",
548
+ "go": "text/x-go",
549
+ "rs": "text/rust",
550
+ "php": "application/x-httpd-php",
551
+ "sql": "application/sql",
552
+ "sh": "application/x-sh",
553
+ "bash": "application/x-sh",
554
+ "bat": "application/x-msdos-program",
555
+ "ps1": "application/x-powershell",
556
+ "lua": "text/x-lua",
557
+ "swift": "text/x-swift",
558
+ "kt": "text/x-kotlin",
559
+ "kts": "text/x-kotlin",
560
+ "dart": "application/vnd.dart",
561
+ // Archives / Compression
562
+ "zip": "application/zip",
563
+ "rar": "application/vnd.rar",
564
+ "7z": "application/x-7z-compressed",
565
+ "tar": "application/x-tar",
566
+ "gz": "application/gzip",
567
+ "gzip": "application/gzip",
568
+ "bz": "application/x-bzip",
569
+ "bz2": "application/x-bzip2",
570
+ "xz": "application/x-xz",
571
+ "zst": "application/zstd",
572
+ "tgz": "application/gzip",
573
+ "tar.gz": "application/gzip",
574
+ "tar.bz2": "application/x-bzip2",
575
+ "tar.xz": "application/x-xz",
576
+ // Executables / Applications
577
+ "exe": "application/vnd.microsoft.portable-executable",
578
+ "msi": "application/x-msi",
579
+ "dll": "application/vnd.microsoft.portable-executable",
580
+ "appimage": "application/x-iso9660-appimage",
581
+ "deb": "application/vnd.debian.binary-package",
582
+ "rpm": "application/x-rpm",
583
+ "apk": "application/vnd.android.package-archive",
584
+ "ipa": "application/octet-stream",
585
+ // Disk / Binary
586
+ "iso": "application/x-iso9660-image",
587
+ "img": "application/octet-stream",
588
+ "bin": "application/octet-stream",
589
+ "dmg": "application/x-apple-diskimage",
590
+ // Fonts
591
+ "ttf": "font/ttf",
592
+ "otf": "font/otf",
593
+ "woff": "font/woff",
594
+ "woff2": "font/woff2",
595
+ // E-books
596
+ "epub": "application/epub+zip",
597
+ "mobi": "application/x-mobipocket-ebook",
598
+ "azw": "application/vnd.amazon.ebook",
599
+ "azw3": "application/vnd.amazon.ebook",
600
+ // 3D / CAD
601
+ "stl": "model/stl",
602
+ "obj": "model/obj",
603
+ "gltf": "model/gltf+json",
604
+ "glb": "model/gltf-binary",
605
+ "3ds": "image/x-3ds",
606
+ "dae": "model/vnd.collada+xml",
607
+ "step": "model/step",
608
+ "stp": "model/step",
609
+ "iges": "model/iges",
610
+ "igs": "model/iges",
611
+ // Flash / Legacy
612
+ "swf": "application/x-shockwave-flash",
613
+ // Other common formats
614
+ "ics": "text/calendar",
615
+ "vcf": "text/vcard",
616
+ "vtt": "text/vtt",
617
+ "srt": "application/x-subrip"
618
+ };
361
619
  // Annotate the CommonJS export names for ESM import in node:
362
620
  0 && (module.exports = {
621
+ MimeTypes,
363
622
  Status,
364
623
  Types,
365
624
  ValidationException,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/http/index.ts","../../src/http/validatorTypes.ts","../../src/http/exceptions.ts","../../src/http/validador.ts","../../src/http/status.ts"],"sourcesContent":["export { Types } from \"./validatorTypes.js\";\r\n\r\nexport { ValidationException } from \"./exceptions.js\";\r\nexport { Validator } from \"./validador.js\";\r\nexport { Status } from \"./status.js\";\r\n","import type { ValidationException } from \"./exceptions.js\";\r\n\r\nexport class ArrayType {\r\n type: PrimitiveType[];\r\n description = \"array\";\r\n empty: boolean = false;\r\n\r\n constructor(...type: PrimitiveType[]) {\r\n this.type = [...type];\r\n this.empty = false;\r\n\r\n const types = type.map((t) => t.description);\r\n this.description = `array(${types.join(\" | \")})`;\r\n }\r\n\r\n canBeEmpty() {\r\n this.empty = true;\r\n return this;\r\n }\r\n}\r\n\r\nexport type FieldDefinition = {\r\n type: ValidatorType;\r\n required?: boolean;\r\n validator?: (value: unknown) => unknown | ValidationException;\r\n};\r\n\r\nexport type ObjectFields = {\r\n [name: string]: FieldDefinition;\r\n};\r\n\r\nexport class ObjectType {\r\n fields: ObjectFields;\r\n description = \"object\";\r\n\r\n constructor(fields: ObjectFields) {\r\n this.fields = fields;\r\n\r\n const names = Object.keys(fields);\r\n\r\n this.description = `object{${names.join(\", \")}}`;\r\n }\r\n}\r\n\r\nfunction Array(...type: PrimitiveType[]) {\r\n return new ArrayType(...type);\r\n}\r\n\r\nfunction Struct(fields: ObjectFields) {\r\n return new ObjectType(fields);\r\n}\r\n\r\nexport const Types = {\r\n String: Symbol(\"string\"),\r\n Number: Symbol(\"number\"),\r\n Int: Symbol(\"int\"),\r\n Float: Symbol(\"float\"),\r\n Boolean: Symbol(\"boolean\"),\r\n Object: Symbol(\"object\"),\r\n Null: Symbol(\"null\"),\r\n Any: Symbol(\"any\"),\r\n \r\n Array,\r\n Struct,\r\n};\r\n\r\nexport type PrimitiveType =\r\n | typeof Types.String\r\n | typeof Types.Number\r\n | typeof Types.Int\r\n | typeof Types.Float\r\n | typeof Types.Boolean\r\n | typeof Types.Object\r\n | typeof Types.Null;\r\n\r\nexport type MultiType = PrimitiveType[];\r\n\r\nexport type ValidatorType =\r\n | PrimitiveType\r\n | MultiType\r\n | ArrayType\r\n | ObjectType;","class ValidationException extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n\r\n this.name = \"ValidationException\";\r\n }\r\n}\r\n\r\nclass RequestBodyUndefinedException extends ValidationException {\r\n constructor() {\r\n super(\"Request body is undefined\");\r\n\r\n this.name = \"RequestBodyUndefinedException\";\r\n }\r\n}\r\n\r\nclass InvalidBodyException extends ValidationException {\r\n constructor() {\r\n super(\"Request body must be an object\");\r\n\r\n this.name = \"InvalidBodyException\";\r\n }\r\n}\r\n\r\nclass EmptyBodyException extends ValidationException {\r\n constructor() {\r\n super(\"Body must not be empty\");\r\n\r\n this.name = \"EmptyBodyException\";\r\n }\r\n}\r\n\r\nclass InvalidBodyLengthException extends ValidationException {\r\n constructor(length: number, type: \"min\" | \"max\") {\r\n const message =\r\n type === \"min\"\r\n ? `The body length must be at least ${length} characters`\r\n : `The body length must not exceed ${length} characters`;\r\n\r\n super(message);\r\n\r\n this.name = \"InvalidBodyLengthException\";\r\n }\r\n}\r\n\r\nclass InvalidBodyPatternException extends ValidationException {\r\n constructor(pattern: RegExp) {\r\n super(`The body does not match the required pattern: ${pattern}`);\r\n\r\n this.name = 'InvalidBodyPatternException';\r\n }\r\n}\r\n\r\nclass RequiredFieldException extends ValidationException {\r\n constructor(\r\n public readonly field: string,\r\n ) {\r\n super(`Field \"${field}\" is required`);\r\n\r\n this.name = \"RequiredFieldException\";\r\n }\r\n}\r\n\r\nclass InvalidTypeException extends ValidationException {\r\n constructor(\r\n public readonly field: string,\r\n public readonly expected: string | undefined,\r\n public readonly received: string,\r\n ) {\r\n super(\r\n `Field \"${field}\" must be of type ${expected}, received ${received}`,\r\n );\r\n\r\n this.name = \"InvalidTypeException\";\r\n }\r\n}\r\n\r\nclass CustomValidationException extends ValidationException {\r\n constructor(\r\n public readonly field: string,\r\n ) {\r\n super(`Field \"${field}\" failed custom validation`);\r\n\r\n this.name = \"CustomValidationException\";\r\n }\r\n}\r\n\r\nclass EmptyArrayException extends ValidationException {\r\n constructor(\r\n public readonly field: string,\r\n ) {\r\n super(`Field \"${field}\" must not be an empty array`);\r\n\r\n this.name = \"EmptyArrayException\";\r\n }\r\n}\r\n\r\nexport {\r\n ValidationException,\r\n RequestBodyUndefinedException,\r\n InvalidBodyException,\r\n EmptyBodyException,\r\n InvalidBodyLengthException,\r\n InvalidBodyPatternException,\r\n RequiredFieldException,\r\n InvalidTypeException,\r\n CustomValidationException,\r\n EmptyArrayException\r\n}","import {\r\n ValidationException,\r\n RequestBodyUndefinedException,\r\n InvalidBodyException,\r\n RequiredFieldException,\r\n InvalidTypeException,\r\n EmptyArrayException,\r\n InvalidBodyLengthException,\r\n InvalidBodyPatternException,\r\n EmptyBodyException\r\n} from \"./exceptions.js\";\r\n\r\nimport {\r\n ArrayType,\r\n ObjectType,\r\n Types\r\n} from \"./validatorTypes.js\";\r\n\r\nimport type {\r\n ValidatorType,\r\n ObjectFields\r\n} from \"./validatorTypes.js\";\r\n\r\ntype FieldDefinition = {\r\n type: ValidatorType;\r\n required?: boolean;\r\n validator?: (\r\n value: unknown\r\n ) => unknown | ValidationException;\r\n};\r\n\r\ninterface BodyFields {\r\n [name: string]: FieldDefinition;\r\n}\r\n\r\ninterface Body {\r\n [name: string]: unknown;\r\n}\r\n\r\ntype TextValidationOptions = {\r\n minLength?: number;\r\n maxLength?: number;\r\n pattern?: RegExp;\r\n allowEmpty?: boolean;\r\n trim?: boolean;\r\n validator?: (\r\n value: string\r\n ) => string | ValidationException;\r\n};\r\n\r\nconst Validator = {\r\n body(body: Body, fields: BodyFields) {\r\n if (body === undefined) {\r\n throw new RequestBodyUndefinedException();\r\n }\r\n\r\n if (\r\n typeof body !== \"object\" ||\r\n body === null ||\r\n Array.isArray(body)\r\n ) {\r\n throw new InvalidBodyException();\r\n }\r\n\r\n return validateObject(body, fields);\r\n },\r\n\r\n text(body: string, options: TextValidationOptions = {}) {\r\n const {\r\n minLength,\r\n maxLength,\r\n pattern,\r\n allowEmpty = true,\r\n trim = false,\r\n validator = undefined\r\n } = options;\r\n\r\n let value = trim ? body.trim() : body;\r\n\r\n if (!allowEmpty && value.length === 0) {\r\n throw new EmptyBodyException();\r\n }\r\n\r\n if (minLength !== undefined && value.length < minLength) {\r\n throw new InvalidBodyLengthException(minLength, \"min\");\r\n }\r\n\r\n if (maxLength !== undefined && value.length > maxLength) {\r\n throw new InvalidBodyLengthException(maxLength, \"max\");\r\n }\r\n\r\n if (pattern !== undefined && !pattern.test(value)) {\r\n throw new InvalidBodyPatternException(pattern);\r\n }\r\n\r\n if (validator) {\r\n const result = validator(value);\r\n if (result instanceof ValidationException) {\r\n throw result;\r\n }\r\n\r\n value = result;\r\n }\r\n\r\n return value;\r\n },\r\n\r\n};\r\n\r\nfunction validateObject(\r\n body: unknown,\r\n fields: ObjectFields,\r\n parentPath = \"\"\r\n): Record<string, unknown> {\r\n\r\n if (\r\n typeof body !== \"object\" ||\r\n body === null ||\r\n Array.isArray(body)\r\n ) {\r\n throw new InvalidBodyException();\r\n }\r\n\r\n const bodyData = body as Record<string, unknown>;\r\n const data: Record<string, unknown> = {};\r\n\r\n for (const name in fields) {\r\n const field = fields[name];\r\n\r\n if (!field) {\r\n continue;\r\n }\r\n\r\n const fieldPath = parentPath\r\n ? `${parentPath}.${name}`\r\n : name;\r\n\r\n let value = bodyData[name];\r\n\r\n // Required field\r\n if (field.required && value === undefined) {\r\n throw new RequiredFieldException(fieldPath);\r\n }\r\n\r\n // Optional field not provided\r\n if (value === undefined) {\r\n continue;\r\n }\r\n\r\n // Validate type\r\n if (!validateType(field.type, value, fieldPath)) {\r\n const type = getTypeDescription(field.type);\r\n\r\n throw new InvalidTypeException(\r\n fieldPath,\r\n type,\r\n whatTypeIs(value)\r\n );\r\n }\r\n\r\n // Custom validator\r\n if (field.validator) {\r\n const result = field.validator(value);\r\n\r\n if (result instanceof ValidationException) {\r\n throw result;\r\n }\r\n\r\n value = result;\r\n }\r\n\r\n data[name] = value;\r\n }\r\n\r\n return data;\r\n}\r\n\r\nfunction validateType(\r\n type: ValidatorType | undefined,\r\n value: unknown,\r\n fieldName = \"\"\r\n): boolean {\r\n\r\n // Multiple types\r\n if (Array.isArray(type)) {\r\n return type.some((t) =>\r\n validateType(t, value, fieldName)\r\n );\r\n }\r\n\r\n // Array\r\n if (type instanceof ArrayType) {\r\n\r\n if (!Array.isArray(value)) {\r\n return false;\r\n }\r\n\r\n if (!type.empty && value.length === 0) {\r\n throw new EmptyArrayException(fieldName);\r\n }\r\n\r\n for (const item of value) {\r\n if (!validateType(type.type, item, fieldName)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n // Object structure\r\n if (type instanceof ObjectType) {\r\n\r\n if (\r\n typeof value !== \"object\" ||\r\n value === null ||\r\n Array.isArray(value)\r\n ) {\r\n return false;\r\n }\r\n\r\n validateObject(\r\n value,\r\n type.fields,\r\n fieldName\r\n );\r\n\r\n return true;\r\n }\r\n\r\n // Primitive types\r\n switch (type?.description) {\r\n case \"any\":\r\n return true;\r\n\r\n case \"null\":\r\n return value === null;\r\n\r\n case \"string\":\r\n return typeof value === \"string\";\r\n\r\n case \"number\":\r\n case \"float\":\r\n return typeof value === \"number\";\r\n\r\n case \"int\":\r\n return (\r\n typeof value === \"number\" &&\r\n Number.isInteger(value)\r\n );\r\n\r\n case \"boolean\":\r\n return typeof value === \"boolean\";\r\n\r\n case \"object\":\r\n return (\r\n typeof value === \"object\" &&\r\n value !== null &&\r\n !Array.isArray(value)\r\n );\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction getTypeDescription(\r\n type: ValidatorType\r\n): string {\r\n\r\n if (Array.isArray(type)) {\r\n return type\r\n .map((t) => getTypeDescription(t))\r\n .join(\" | \");\r\n }\r\n\r\n return type.description || \"\";\r\n}\r\n\r\nfunction whatTypeIs(value: unknown): string {\r\n\r\n if (\r\n typeof value === \"number\" &&\r\n Number.isInteger(value)\r\n ) {\r\n return \"int\";\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return \"array\";\r\n }\r\n\r\n if (value === null) {\r\n return \"null\";\r\n }\r\n\r\n return typeof value;\r\n}\r\n\r\nexport {\r\n Validator\r\n};","const Status = {\r\n // 1xx Informational\r\n CONTINUE: 100,\r\n SWITCHING_PROTOCOLS: 101,\r\n PROCESSING: 102,\r\n EARLY_HINTS: 103,\r\n\r\n // 2xx Success\r\n OK: 200,\r\n CREATED: 201,\r\n ACCEPTED: 202,\r\n NON_AUTHORITATIVE_INFORMATION: 203,\r\n NO_CONTENT: 204,\r\n RESET_CONTENT: 205,\r\n PARTIAL_CONTENT: 206,\r\n MULTI_STATUS: 207,\r\n ALREADY_REPORTED: 208,\r\n IM_USED: 226,\r\n\r\n // 3xx Redirection\r\n MULTIPLE_CHOICES: 300,\r\n MOVED_PERMANENTLY: 301,\r\n FOUND: 302,\r\n SEE_OTHER: 303,\r\n NOT_MODIFIED: 304,\r\n TEMPORARY_REDIRECT: 307,\r\n PERMANENT_REDIRECT: 308,\r\n\r\n // 4xx Client Errors\r\n BAD_REQUEST: 400,\r\n UNAUTHORIZED: 401,\r\n PAYMENT_REQUIRED: 402,\r\n FORBIDDEN: 403,\r\n NOT_FOUND: 404,\r\n METHOD_NOT_ALLOWED: 405,\r\n NOT_ACCEPTABLE: 406,\r\n PROXY_AUTHENTICATION_REQUIRED: 407,\r\n REQUEST_TIMEOUT: 408,\r\n CONFLICT: 409,\r\n GONE: 410,\r\n LENGTH_REQUIRED: 411,\r\n PRECONDITION_FAILED: 412,\r\n PAYLOAD_TOO_LARGE: 413,\r\n URI_TOO_LONG: 414,\r\n UNSUPPORTED_MEDIA_TYPE: 415,\r\n RANGE_NOT_SATISFIABLE: 416,\r\n EXPECTATION_FAILED: 417,\r\n IM_A_TEAPOT: 418,\r\n MISDIRECTED_REQUEST: 421,\r\n UNPROCESSABLE_CONTENT: 422,\r\n LOCKED: 423,\r\n FAILED_DEPENDENCY: 424,\r\n UPGRADE_REQUIRED: 426,\r\n PRECONDITION_REQUIRED: 428,\r\n TOO_MANY_REQUESTS: 429,\r\n REQUEST_HEADER_FIELDS_TOO_LARGE: 431,\r\n UNAVAILABLE_FOR_LEGAL_REASONS: 451,\r\n\r\n // 5xx Server Errors\r\n INTERNAL_SERVER_ERROR: 500,\r\n NOT_IMPLEMENTED: 501,\r\n BAD_GATEWAY: 502,\r\n SERVICE_UNAVAILABLE: 503,\r\n GATEWAY_TIMEOUT: 504,\r\n HTTP_VERSION_NOT_SUPPORTED: 505,\r\n VARIANT_ALSO_NEGOTIATES: 506,\r\n INSUFFICIENT_STORAGE: 507,\r\n LOOP_DETECTED: 508,\r\n NOT_EXTENDED: 510,\r\n NETWORK_AUTHENTICATION_REQUIRED: 511\r\n} as const;\r\n\r\nexport {\r\n Status\r\n};"],"mappings":"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","names":["Array"]}
1
+ {"version":3,"sources":["../../src/http/index.ts","../../src/http/validatorTypes.ts","../../src/http/exceptions.ts","../../src/http/validador.ts","../../src/http/status.ts","../../src/http/file.ts"],"sourcesContent":["export { Types, } from \"./validatorTypes.js\";\r\nexport type { FileFields } from \"./validatorTypes.js\";\r\n\r\nexport { ValidationException } from \"./exceptions.js\";\r\nexport { Validator } from \"./validador.js\";\r\nexport { Status } from \"./status.js\";\r\nexport { MimeTypes } from \"./file.js\";\r\n","import type { ValidationException } from \"./exceptions.js\";\r\n\r\nexport class ArrayType {\r\n type: PrimitiveType[];\r\n description = \"array\";\r\n empty: boolean = false;\r\n\r\n constructor(...type: PrimitiveType[]) {\r\n this.type = [...type];\r\n this.empty = false;\r\n\r\n const types = type.map((t) => t.description);\r\n this.description = `array(${types.join(\" | \")})`;\r\n }\r\n\r\n canBeEmpty() {\r\n this.empty = true;\r\n return this;\r\n }\r\n}\r\n\r\nexport type FieldDefinition = {\r\n type: ValidatorType;\r\n required?: boolean;\r\n validator?: (value: unknown) => unknown | ValidationException;\r\n};\r\n\r\nexport type ObjectFields = {\r\n [name: string]: FieldDefinition;\r\n};\r\n\r\nexport class ObjectType {\r\n fields: ObjectFields;\r\n description = \"object\";\r\n\r\n constructor(fields: ObjectFields) {\r\n this.fields = fields;\r\n\r\n const names = Object.keys(fields);\r\n\r\n this.description = `object{${names.join(\", \")}}`;\r\n }\r\n}\r\n\r\nfunction Array(...type: PrimitiveType[]) {\r\n return new ArrayType(...type);\r\n}\r\n\r\nfunction Struct(fields: ObjectFields) {\r\n return new ObjectType(fields);\r\n}\r\n\r\nexport const Types = {\r\n String: Symbol(\"string\"),\r\n Number: Symbol(\"number\"),\r\n Int: Symbol(\"int\"),\r\n Float: Symbol(\"float\"),\r\n Boolean: Symbol(\"boolean\"),\r\n Object: Symbol(\"object\"),\r\n Null: Symbol(\"null\"),\r\n Any: Symbol(\"any\"),\r\n \r\n Array,\r\n Struct,\r\n};\r\n\r\nexport type FileFields = {\r\n maxSizeMb?: number;\r\n minSizeMb?: number;\r\n\r\n mimeTypes?: string | string[];\r\n extensions?: string | string[];\r\n\r\n canBeEmpty?: boolean;\r\n\r\n maxNumberOfFiles?: number;\r\n minNumberOfFiles?: number;\r\n\r\n fileNamePattern?: RegExp;\r\n}\r\n\r\nexport type PrimitiveType =\r\n | typeof Types.String\r\n | typeof Types.Number\r\n | typeof Types.Int\r\n | typeof Types.Float\r\n | typeof Types.Boolean\r\n | typeof Types.Object\r\n | typeof Types.Null;\r\n\r\nexport type MultiType = PrimitiveType[];\r\n\r\nexport type ValidatorType =\r\n | PrimitiveType\r\n | MultiType\r\n | ArrayType\r\n | ObjectType;","class ValidationException extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n\r\n this.name = \"ValidationException\";\r\n }\r\n}\r\n\r\nclass RequestBodyUndefinedException extends ValidationException {\r\n constructor() {\r\n super(\"Request body is undefined\");\r\n\r\n this.name = \"RequestBodyUndefinedException\";\r\n }\r\n}\r\n\r\nclass InvalidBodyException extends ValidationException {\r\n constructor() {\r\n super(\"Request body must be an object\");\r\n\r\n this.name = \"InvalidBodyException\";\r\n }\r\n}\r\n\r\nclass EmptyBodyException extends ValidationException {\r\n constructor() {\r\n super(\"Body must not be empty\");\r\n\r\n this.name = \"EmptyBodyException\";\r\n }\r\n}\r\n\r\nclass InvalidBodyLengthException extends ValidationException {\r\n constructor(length: number, type: \"min\" | \"max\") {\r\n const message =\r\n type === \"min\"\r\n ? `The body length must be at least ${length} characters`\r\n : `The body length must not exceed ${length} characters`;\r\n\r\n super(message);\r\n\r\n this.name = \"InvalidBodyLengthException\";\r\n }\r\n}\r\n\r\nclass InvalidBodyPatternException extends ValidationException {\r\n constructor(pattern: RegExp) {\r\n super(`The body does not match the required pattern: ${pattern}`);\r\n\r\n this.name = 'InvalidBodyPatternException';\r\n }\r\n}\r\n\r\nclass RequiredFieldException extends ValidationException {\r\n constructor(\r\n public readonly field: string,\r\n ) {\r\n super(`Field \"${field}\" is required`);\r\n\r\n this.name = \"RequiredFieldException\";\r\n }\r\n}\r\n\r\nclass InvalidTypeException extends ValidationException {\r\n constructor(\r\n public readonly field: string,\r\n public readonly expected: string | undefined,\r\n public readonly received: string,\r\n ) {\r\n super(\r\n `Field \"${field}\" must be of type ${expected}, received ${received}`,\r\n );\r\n\r\n this.name = \"InvalidTypeException\";\r\n }\r\n}\r\n\r\nclass CustomValidationException extends ValidationException {\r\n constructor(\r\n public readonly field: string,\r\n ) {\r\n super(`Field \"${field}\" failed custom validation`);\r\n\r\n this.name = \"CustomValidationException\";\r\n }\r\n}\r\n\r\nclass EmptyArrayException extends ValidationException {\r\n constructor(\r\n public readonly field: string,\r\n ) {\r\n super(`Field \"${field}\" must not be an empty array`);\r\n\r\n this.name = \"EmptyArrayException\";\r\n }\r\n}\r\n\r\nexport {\r\n ValidationException,\r\n RequestBodyUndefinedException,\r\n InvalidBodyException,\r\n EmptyBodyException,\r\n InvalidBodyLengthException,\r\n InvalidBodyPatternException,\r\n RequiredFieldException,\r\n InvalidTypeException,\r\n CustomValidationException,\r\n EmptyArrayException\r\n}","import {\r\n ValidationException,\r\n RequestBodyUndefinedException,\r\n InvalidBodyException,\r\n RequiredFieldException,\r\n InvalidTypeException,\r\n EmptyArrayException,\r\n InvalidBodyLengthException,\r\n InvalidBodyPatternException,\r\n EmptyBodyException\r\n} from \"./exceptions.js\";\r\n\r\nimport {\r\n ArrayType,\r\n ObjectType,\r\n Types,\r\n} from \"./validatorTypes.js\";\r\n\r\nimport type {\r\n FileFields,\r\n ValidatorType,\r\n ObjectFields,\r\n} from \"./validatorTypes.js\";\r\n\r\ntype FieldDefinition = {\r\n type: ValidatorType;\r\n required?: boolean;\r\n validator?: (\r\n value: unknown\r\n ) => unknown | ValidationException;\r\n};\r\n\r\ninterface BodyFields {\r\n [name: string]: FieldDefinition;\r\n}\r\n\r\ninterface Body {\r\n [name: string]: unknown;\r\n}\r\n\r\ntype TextValidationOptions = {\r\n minLength?: number;\r\n maxLength?: number;\r\n pattern?: RegExp;\r\n allowEmpty?: boolean;\r\n trim?: boolean;\r\n validator?: (\r\n value: string\r\n ) => string | ValidationException;\r\n};\r\n\r\nconst Validator = {\r\n body(body: Body, fields: BodyFields) {\r\n if (body === undefined) {\r\n throw new RequestBodyUndefinedException();\r\n }\r\n\r\n if (\r\n typeof body !== \"object\" ||\r\n body === null ||\r\n Array.isArray(body)\r\n ) {\r\n throw new InvalidBodyException();\r\n }\r\n\r\n return validateObject(body, fields);\r\n },\r\n\r\n text(body: string, options: TextValidationOptions = {}) {\r\n const {\r\n minLength,\r\n maxLength,\r\n pattern,\r\n allowEmpty = true,\r\n trim = false,\r\n validator = undefined\r\n } = options;\r\n\r\n let value = trim ? body.trim() : body;\r\n\r\n if (!allowEmpty && value.length === 0) {\r\n throw new EmptyBodyException();\r\n }\r\n\r\n if (minLength !== undefined && value.length < minLength) {\r\n throw new InvalidBodyLengthException(minLength, \"min\");\r\n }\r\n\r\n if (maxLength !== undefined && value.length > maxLength) {\r\n throw new InvalidBodyLengthException(maxLength, \"max\");\r\n }\r\n\r\n if (pattern !== undefined && !pattern.test(value)) {\r\n throw new InvalidBodyPatternException(pattern);\r\n }\r\n\r\n if (validator) {\r\n const result = validator(value);\r\n if (result instanceof ValidationException) {\r\n throw result;\r\n }\r\n\r\n value = result;\r\n }\r\n\r\n return value;\r\n },\r\n\r\n file: (file: any, options: FileFields = {}) => {\r\n const {\r\n canBeEmpty = false,\r\n maxNumberOfFiles,\r\n minNumberOfFiles\r\n } = options;\r\n\r\n /*\r\n * No file\r\n */\r\n if (!file) {\r\n if (canBeEmpty) {\r\n return null;\r\n }\r\n\r\n throw new ValidationException(\r\n \"File is required but not provided.\"\r\n );\r\n }\r\n\r\n /*\r\n * Multiple files\r\n */\r\n if (Array.isArray(file)) {\r\n\r\n if (file.length === 0) {\r\n if (canBeEmpty) {\r\n return null;\r\n }\r\n\r\n throw new ValidationException(\r\n \"At least one file is required.\"\r\n );\r\n }\r\n\r\n if (\r\n maxNumberOfFiles !== undefined &&\r\n file.length > maxNumberOfFiles\r\n ) {\r\n throw new ValidationException(\r\n `Maximum number of files allowed is ${maxNumberOfFiles}.`\r\n );\r\n }\r\n\r\n if (\r\n minNumberOfFiles !== undefined &&\r\n file.length < minNumberOfFiles\r\n ) {\r\n throw new ValidationException(\r\n `Minimum number of files required is ${minNumberOfFiles}.`\r\n );\r\n }\r\n\r\n return file.map((f) => validateFile(f, options));\r\n }\r\n\r\n /*\r\n * Single file\r\n */\r\n return validateFile(file, options);\r\n }\r\n};\r\n\r\n\r\nfunction validateFile(\r\n file: any,\r\n options: FileFields = {}\r\n) {\r\n const {\r\n maxSizeMb,\r\n minSizeMb,\r\n mimeTypes,\r\n extensions,\r\n fileNamePattern\r\n } = options;\r\n\r\n\r\n /*\r\n * Validate object\r\n */\r\n if (\r\n typeof file !== \"object\" ||\r\n file === null\r\n ) {\r\n throw new ValidationException(\r\n \"Invalid file.\"\r\n );\r\n }\r\n\r\n\r\n /*\r\n * Validate size\r\n */\r\n if (\r\n typeof file.size !== \"number\" ||\r\n file.size < 0\r\n ) {\r\n throw new ValidationException(\r\n \"Invalid file size.\"\r\n );\r\n }\r\n\r\n\r\n /*\r\n * Maximum size\r\n */\r\n if (\r\n maxSizeMb !== undefined &&\r\n file.size > maxSizeMb * 1024 * 1024\r\n ) {\r\n throw new ValidationException(\r\n `File size exceeds the maximum limit of ${maxSizeMb} MB.`\r\n );\r\n }\r\n\r\n\r\n /*\r\n * Minimum size\r\n */\r\n if (\r\n minSizeMb !== undefined &&\r\n file.size < minSizeMb * 1024 * 1024\r\n ) {\r\n throw new ValidationException(\r\n `File size is below the minimum limit of ${minSizeMb} MB.`\r\n );\r\n }\r\n\r\n\r\n /*\r\n * MIME type\r\n */\r\n if (mimeTypes !== undefined) {\r\n\r\n const allowedMimeTypes = Array.isArray(mimeTypes)\r\n ? mimeTypes\r\n : [mimeTypes];\r\n\r\n if (\r\n typeof file.mimetype !== \"string\" ||\r\n !allowedMimeTypes.includes(file.mimetype)\r\n ) {\r\n throw new ValidationException(\r\n `File type is not allowed. Allowed types are: ${allowedMimeTypes.join(\", \")}`\r\n );\r\n }\r\n }\r\n\r\n\r\n /*\r\n * File extension\r\n */\r\n if (extensions !== undefined) {\r\n\r\n const allowedExtensions = (\r\n Array.isArray(extensions)\r\n ? extensions\r\n : [extensions]\r\n ).map(\r\n extension =>\r\n extension\r\n .replace(/^\\./, \"\")\r\n .toLowerCase()\r\n );\r\n\r\n if (typeof file.originalname !== \"string\") {\r\n throw new ValidationException(\r\n \"Invalid file name.\"\r\n );\r\n }\r\n\r\n const extension = file.originalname\r\n .split(\".\")\r\n .pop()\r\n ?.toLowerCase();\r\n\r\n if (\r\n !extension ||\r\n !allowedExtensions.includes(extension)\r\n ) {\r\n throw new ValidationException(\r\n `File extension is not allowed. Allowed extensions are: ${allowedExtensions.join(\", \")}`\r\n );\r\n }\r\n }\r\n\r\n /*\r\n * File name pattern\r\n */\r\n if (\r\n fileNamePattern !== undefined &&\r\n !fileNamePattern.test(file.originalname)\r\n ) {\r\n throw new ValidationException(\r\n \"File name does not match the required pattern.\"\r\n );\r\n }\r\n\r\n\r\n return file;\r\n}\r\n\r\nfunction validateObject(\r\n body: unknown,\r\n fields: ObjectFields,\r\n parentPath = \"\"\r\n): Record<string, unknown> {\r\n\r\n if (\r\n typeof body !== \"object\" ||\r\n body === null ||\r\n Array.isArray(body)\r\n ) {\r\n throw new InvalidBodyException();\r\n }\r\n\r\n const bodyData = body as Record<string, unknown>;\r\n const data: Record<string, unknown> = {};\r\n\r\n for (const name in fields) {\r\n const field = fields[name];\r\n\r\n if (!field) {\r\n continue;\r\n }\r\n\r\n const fieldPath = parentPath\r\n ? `${parentPath}.${name}`\r\n : name;\r\n\r\n let value = bodyData[name];\r\n\r\n // Required field\r\n if (field.required && value === undefined) {\r\n throw new RequiredFieldException(fieldPath);\r\n }\r\n\r\n // Optional field not provided\r\n if (value === undefined) {\r\n continue;\r\n }\r\n\r\n // Validate type\r\n if (!validateType(field.type, value, fieldPath)) {\r\n const type = getTypeDescription(field.type);\r\n\r\n throw new InvalidTypeException(\r\n fieldPath,\r\n type,\r\n whatTypeIs(value)\r\n );\r\n }\r\n\r\n // Custom validator\r\n if (field.validator) {\r\n const result = field.validator(value);\r\n\r\n if (result instanceof ValidationException) {\r\n throw result;\r\n }\r\n\r\n value = result;\r\n }\r\n\r\n data[name] = value;\r\n }\r\n\r\n return data;\r\n}\r\n\r\nfunction validateType(\r\n type: ValidatorType | undefined,\r\n value: unknown,\r\n fieldName = \"\"\r\n): boolean {\r\n\r\n // Multiple types\r\n if (Array.isArray(type)) {\r\n return type.some((t) =>\r\n validateType(t, value, fieldName)\r\n );\r\n }\r\n\r\n // Array\r\n if (type instanceof ArrayType) {\r\n\r\n if (!Array.isArray(value)) {\r\n return false;\r\n }\r\n\r\n if (!type.empty && value.length === 0) {\r\n throw new EmptyArrayException(fieldName);\r\n }\r\n\r\n for (const item of value) {\r\n if (!validateType(type.type, item, fieldName)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n // Object structure\r\n if (type instanceof ObjectType) {\r\n\r\n if (\r\n typeof value !== \"object\" ||\r\n value === null ||\r\n Array.isArray(value)\r\n ) {\r\n return false;\r\n }\r\n\r\n validateObject(\r\n value,\r\n type.fields,\r\n fieldName\r\n );\r\n\r\n return true;\r\n }\r\n\r\n // Primitive types\r\n switch (type?.description) {\r\n case \"any\":\r\n return true;\r\n\r\n case \"null\":\r\n return value === null;\r\n\r\n case \"string\":\r\n return typeof value === \"string\";\r\n\r\n case \"number\":\r\n case \"float\":\r\n return typeof value === \"number\";\r\n\r\n case \"int\":\r\n return (\r\n typeof value === \"number\" &&\r\n Number.isInteger(value)\r\n );\r\n\r\n case \"boolean\":\r\n return typeof value === \"boolean\";\r\n\r\n case \"object\":\r\n return (\r\n typeof value === \"object\" &&\r\n value !== null &&\r\n !Array.isArray(value)\r\n );\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction getTypeDescription(\r\n type: ValidatorType\r\n): string {\r\n\r\n if (Array.isArray(type)) {\r\n return type\r\n .map((t) => getTypeDescription(t))\r\n .join(\" | \");\r\n }\r\n\r\n return type.description || \"\";\r\n}\r\n\r\nfunction whatTypeIs(value: unknown): string {\r\n\r\n if (\r\n typeof value === \"number\" &&\r\n Number.isInteger(value)\r\n ) {\r\n return \"int\";\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return \"array\";\r\n }\r\n\r\n if (value === null) {\r\n return \"null\";\r\n }\r\n\r\n return typeof value;\r\n}\r\n\r\nexport {\r\n Validator\r\n};","const Status = {\r\n // 1xx Informational\r\n CONTINUE: 100,\r\n SWITCHING_PROTOCOLS: 101,\r\n PROCESSING: 102,\r\n EARLY_HINTS: 103,\r\n\r\n // 2xx Success\r\n OK: 200,\r\n CREATED: 201,\r\n ACCEPTED: 202,\r\n NON_AUTHORITATIVE_INFORMATION: 203,\r\n NO_CONTENT: 204,\r\n RESET_CONTENT: 205,\r\n PARTIAL_CONTENT: 206,\r\n MULTI_STATUS: 207,\r\n ALREADY_REPORTED: 208,\r\n IM_USED: 226,\r\n\r\n // 3xx Redirection\r\n MULTIPLE_CHOICES: 300,\r\n MOVED_PERMANENTLY: 301,\r\n FOUND: 302,\r\n SEE_OTHER: 303,\r\n NOT_MODIFIED: 304,\r\n TEMPORARY_REDIRECT: 307,\r\n PERMANENT_REDIRECT: 308,\r\n\r\n // 4xx Client Errors\r\n BAD_REQUEST: 400,\r\n UNAUTHORIZED: 401,\r\n PAYMENT_REQUIRED: 402,\r\n FORBIDDEN: 403,\r\n NOT_FOUND: 404,\r\n METHOD_NOT_ALLOWED: 405,\r\n NOT_ACCEPTABLE: 406,\r\n PROXY_AUTHENTICATION_REQUIRED: 407,\r\n REQUEST_TIMEOUT: 408,\r\n CONFLICT: 409,\r\n GONE: 410,\r\n LENGTH_REQUIRED: 411,\r\n PRECONDITION_FAILED: 412,\r\n PAYLOAD_TOO_LARGE: 413,\r\n URI_TOO_LONG: 414,\r\n UNSUPPORTED_MEDIA_TYPE: 415,\r\n RANGE_NOT_SATISFIABLE: 416,\r\n EXPECTATION_FAILED: 417,\r\n IM_A_TEAPOT: 418,\r\n MISDIRECTED_REQUEST: 421,\r\n UNPROCESSABLE_CONTENT: 422,\r\n LOCKED: 423,\r\n FAILED_DEPENDENCY: 424,\r\n UPGRADE_REQUIRED: 426,\r\n PRECONDITION_REQUIRED: 428,\r\n TOO_MANY_REQUESTS: 429,\r\n REQUEST_HEADER_FIELDS_TOO_LARGE: 431,\r\n UNAVAILABLE_FOR_LEGAL_REASONS: 451,\r\n\r\n // 5xx Server Errors\r\n INTERNAL_SERVER_ERROR: 500,\r\n NOT_IMPLEMENTED: 501,\r\n BAD_GATEWAY: 502,\r\n SERVICE_UNAVAILABLE: 503,\r\n GATEWAY_TIMEOUT: 504,\r\n HTTP_VERSION_NOT_SUPPORTED: 505,\r\n VARIANT_ALSO_NEGOTIATES: 506,\r\n INSUFFICIENT_STORAGE: 507,\r\n LOOP_DETECTED: 508,\r\n NOT_EXTENDED: 510,\r\n NETWORK_AUTHENTICATION_REQUIRED: 511\r\n} as const;\r\n\r\nexport {\r\n Status\r\n};","const MimeTypes = {\r\n // Documents\r\n \"pdf\": \"application/pdf\",\r\n \"doc\": \"application/msword\",\r\n \"docx\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\r\n \"odt\": \"application/vnd.oasis.opendocument.text\",\r\n \"rtf\": \"application/rtf\",\r\n \"tex\": \"application/x-tex\",\r\n \"txt\": \"text/plain\",\r\n \"md\": \"text/markdown\",\r\n\r\n // Spreadsheets\r\n \"xls\": \"application/vnd.ms-excel\",\r\n \"xlsx\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n \"ods\": \"application/vnd.oasis.opendocument.spreadsheet\",\r\n \"csv\": \"text/csv\",\r\n \"tsv\": \"text/tab-separated-values\",\r\n\r\n // Presentations\r\n \"ppt\": \"application/vnd.ms-powerpoint\",\r\n \"pptx\": \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\r\n \"odp\": \"application/vnd.oasis.opendocument.presentation\",\r\n\r\n // Images\r\n \"jpg\": \"image/jpeg\",\r\n \"jpeg\": \"image/jpeg\",\r\n \"png\": \"image/png\",\r\n \"gif\": \"image/gif\",\r\n \"bmp\": \"image/bmp\",\r\n \"webp\": \"image/webp\",\r\n \"svg\": \"image/svg+xml\",\r\n \"ico\": \"image/x-icon\",\r\n \"tif\": \"image/tiff\",\r\n \"tiff\": \"image/tiff\",\r\n \"avif\": \"image/avif\",\r\n \"heic\": \"image/heic\",\r\n \"heif\": \"image/heif\",\r\n \"apng\": \"image/apng\",\r\n \"jxl\": \"image/jxl\",\r\n \"psd\": \"image/vnd.adobe.photoshop\",\r\n \"ai\": \"application/postscript\",\r\n \"eps\": \"application/postscript\",\r\n\r\n // Video\r\n \"mp4\": \"video/mp4\",\r\n \"avi\": \"video/x-msvideo\",\r\n \"mov\": \"video/quicktime\",\r\n \"wmv\": \"video/x-ms-wmv\",\r\n \"flv\": \"video/x-flv\",\r\n \"mkv\": \"video/x-matroska\",\r\n \"webm\": \"video/webm\",\r\n \"mpeg\": \"video/mpeg\",\r\n \"mpg\": \"video/mpeg\",\r\n \"m4v\": \"video/x-m4v\",\r\n \"3gp\": \"video/3gpp\",\r\n \"3g2\": \"video/3gpp2\",\r\n \"ts\": \"video/mp2t\",\r\n\r\n // Audio\r\n \"mp3\": \"audio/mpeg\",\r\n \"wav\": \"audio/wav\",\r\n \"ogg\": \"audio/ogg\",\r\n \"oga\": \"audio/ogg\",\r\n \"opus\": \"audio/opus\",\r\n \"aac\": \"audio/aac\",\r\n \"m4a\": \"audio/mp4\",\r\n \"flac\": \"audio/flac\",\r\n \"weba\": \"audio/webm\",\r\n \"mid\": \"audio/midi\",\r\n \"midi\": \"audio/midi\",\r\n\r\n // Web\r\n \"html\": \"text/html\",\r\n \"htm\": \"text/html\",\r\n \"css\": \"text/css\",\r\n \"js\": \"text/javascript\",\r\n \"mjs\": \"text/javascript\",\r\n \"cjs\": \"text/javascript\",\r\n \"jsx\": \"text/jsx\",\r\n \"tsx\": \"video/mp2t\",\r\n\r\n // Data / Configuration\r\n \"json\": \"application/json\",\r\n \"xml\": \"application/xml\",\r\n \"yaml\": \"application/yaml\",\r\n \"yml\": \"application/yaml\",\r\n \"toml\": \"application/toml\",\r\n \"ini\": \"text/plain\",\r\n \"env\": \"text/plain\",\r\n\r\n // Programming\r\n \"c\": \"text/x-c\",\r\n \"h\": \"text/x-c\",\r\n \"cpp\": \"text/x-c++\",\r\n \"cc\": \"text/x-c++\",\r\n \"cxx\": \"text/x-c++\",\r\n \"hpp\": \"text/x-c++\",\r\n \"java\": \"text/x-java-source\",\r\n \"py\": \"text/x-python\",\r\n \"pyw\": \"text/x-python\",\r\n \"rb\": \"text/x-ruby\",\r\n \"go\": \"text/x-go\",\r\n \"rs\": \"text/rust\",\r\n \"php\": \"application/x-httpd-php\",\r\n \"sql\": \"application/sql\",\r\n \"sh\": \"application/x-sh\",\r\n \"bash\": \"application/x-sh\",\r\n \"bat\": \"application/x-msdos-program\",\r\n \"ps1\": \"application/x-powershell\",\r\n \"lua\": \"text/x-lua\",\r\n \"swift\": \"text/x-swift\",\r\n \"kt\": \"text/x-kotlin\",\r\n \"kts\": \"text/x-kotlin\",\r\n \"dart\": \"application/vnd.dart\",\r\n\r\n // Archives / Compression\r\n \"zip\": \"application/zip\",\r\n \"rar\": \"application/vnd.rar\",\r\n \"7z\": \"application/x-7z-compressed\",\r\n \"tar\": \"application/x-tar\",\r\n \"gz\": \"application/gzip\",\r\n \"gzip\": \"application/gzip\",\r\n \"bz\": \"application/x-bzip\",\r\n \"bz2\": \"application/x-bzip2\",\r\n \"xz\": \"application/x-xz\",\r\n \"zst\": \"application/zstd\",\r\n \"tgz\": \"application/gzip\",\r\n \"tar.gz\": \"application/gzip\",\r\n \"tar.bz2\": \"application/x-bzip2\",\r\n \"tar.xz\": \"application/x-xz\",\r\n\r\n // Executables / Applications\r\n \"exe\": \"application/vnd.microsoft.portable-executable\",\r\n \"msi\": \"application/x-msi\",\r\n \"dll\": \"application/vnd.microsoft.portable-executable\",\r\n \"appimage\": \"application/x-iso9660-appimage\",\r\n \"deb\": \"application/vnd.debian.binary-package\",\r\n \"rpm\": \"application/x-rpm\",\r\n \"apk\": \"application/vnd.android.package-archive\",\r\n \"ipa\": \"application/octet-stream\",\r\n\r\n // Disk / Binary\r\n \"iso\": \"application/x-iso9660-image\",\r\n \"img\": \"application/octet-stream\",\r\n \"bin\": \"application/octet-stream\",\r\n \"dmg\": \"application/x-apple-diskimage\",\r\n\r\n // Fonts\r\n \"ttf\": \"font/ttf\",\r\n \"otf\": \"font/otf\",\r\n \"woff\": \"font/woff\",\r\n \"woff2\": \"font/woff2\",\r\n\r\n // E-books\r\n \"epub\": \"application/epub+zip\",\r\n \"mobi\": \"application/x-mobipocket-ebook\",\r\n \"azw\": \"application/vnd.amazon.ebook\",\r\n \"azw3\": \"application/vnd.amazon.ebook\",\r\n\r\n // 3D / CAD\r\n \"stl\": \"model/stl\",\r\n \"obj\": \"model/obj\",\r\n \"gltf\": \"model/gltf+json\",\r\n \"glb\": \"model/gltf-binary\",\r\n \"3ds\": \"image/x-3ds\",\r\n \"dae\": \"model/vnd.collada+xml\",\r\n \"step\": \"model/step\",\r\n \"stp\": \"model/step\",\r\n \"iges\": \"model/iges\",\r\n \"igs\": \"model/iges\",\r\n\r\n // Flash / Legacy\r\n \"swf\": \"application/x-shockwave-flash\",\r\n\r\n // Other common formats\r\n \"ics\": \"text/calendar\",\r\n \"vcf\": \"text/vcard\",\r\n \"vtt\": \"text/vtt\",\r\n \"srt\": \"application/x-subrip\",\r\n};\r\n\r\nexport { MimeTypes };"],"mappings":"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","names":["Array","extension"]}
@@ -36,6 +36,16 @@ declare const Types: {
36
36
  Array: typeof Array;
37
37
  Struct: typeof Struct;
38
38
  };
39
+ type FileFields = {
40
+ maxSizeMb?: number;
41
+ minSizeMb?: number;
42
+ mimeTypes?: string | string[];
43
+ extensions?: string | string[];
44
+ canBeEmpty?: boolean;
45
+ maxNumberOfFiles?: number;
46
+ minNumberOfFiles?: number;
47
+ fileNamePattern?: RegExp;
48
+ };
39
49
  type PrimitiveType = typeof Types.String | typeof Types.Number | typeof Types.Int | typeof Types.Float | typeof Types.Boolean | typeof Types.Object | typeof Types.Null;
40
50
  type MultiType = PrimitiveType[];
41
51
  type ValidatorType = PrimitiveType | MultiType | ArrayType | ObjectType;
@@ -62,6 +72,7 @@ type TextValidationOptions = {
62
72
  declare const Validator: {
63
73
  body(body: Body, fields: BodyFields): Record<string, unknown>;
64
74
  text(body: string, options?: TextValidationOptions): string;
75
+ file: (file: any, options?: FileFields) => any;
65
76
  };
66
77
 
67
78
  declare const Status: {
@@ -127,4 +138,152 @@ declare const Status: {
127
138
  readonly NETWORK_AUTHENTICATION_REQUIRED: 511;
128
139
  };
129
140
 
130
- export { Status, Types, ValidationException, Validator };
141
+ declare const MimeTypes: {
142
+ pdf: string;
143
+ doc: string;
144
+ docx: string;
145
+ odt: string;
146
+ rtf: string;
147
+ tex: string;
148
+ txt: string;
149
+ md: string;
150
+ xls: string;
151
+ xlsx: string;
152
+ ods: string;
153
+ csv: string;
154
+ tsv: string;
155
+ ppt: string;
156
+ pptx: string;
157
+ odp: string;
158
+ jpg: string;
159
+ jpeg: string;
160
+ png: string;
161
+ gif: string;
162
+ bmp: string;
163
+ webp: string;
164
+ svg: string;
165
+ ico: string;
166
+ tif: string;
167
+ tiff: string;
168
+ avif: string;
169
+ heic: string;
170
+ heif: string;
171
+ apng: string;
172
+ jxl: string;
173
+ psd: string;
174
+ ai: string;
175
+ eps: string;
176
+ mp4: string;
177
+ avi: string;
178
+ mov: string;
179
+ wmv: string;
180
+ flv: string;
181
+ mkv: string;
182
+ webm: string;
183
+ mpeg: string;
184
+ mpg: string;
185
+ m4v: string;
186
+ "3gp": string;
187
+ "3g2": string;
188
+ ts: string;
189
+ mp3: string;
190
+ wav: string;
191
+ ogg: string;
192
+ oga: string;
193
+ opus: string;
194
+ aac: string;
195
+ m4a: string;
196
+ flac: string;
197
+ weba: string;
198
+ mid: string;
199
+ midi: string;
200
+ html: string;
201
+ htm: string;
202
+ css: string;
203
+ js: string;
204
+ mjs: string;
205
+ cjs: string;
206
+ jsx: string;
207
+ tsx: string;
208
+ json: string;
209
+ xml: string;
210
+ yaml: string;
211
+ yml: string;
212
+ toml: string;
213
+ ini: string;
214
+ env: string;
215
+ c: string;
216
+ h: string;
217
+ cpp: string;
218
+ cc: string;
219
+ cxx: string;
220
+ hpp: string;
221
+ java: string;
222
+ py: string;
223
+ pyw: string;
224
+ rb: string;
225
+ go: string;
226
+ rs: string;
227
+ php: string;
228
+ sql: string;
229
+ sh: string;
230
+ bash: string;
231
+ bat: string;
232
+ ps1: string;
233
+ lua: string;
234
+ swift: string;
235
+ kt: string;
236
+ kts: string;
237
+ dart: string;
238
+ zip: string;
239
+ rar: string;
240
+ "7z": string;
241
+ tar: string;
242
+ gz: string;
243
+ gzip: string;
244
+ bz: string;
245
+ bz2: string;
246
+ xz: string;
247
+ zst: string;
248
+ tgz: string;
249
+ "tar.gz": string;
250
+ "tar.bz2": string;
251
+ "tar.xz": string;
252
+ exe: string;
253
+ msi: string;
254
+ dll: string;
255
+ appimage: string;
256
+ deb: string;
257
+ rpm: string;
258
+ apk: string;
259
+ ipa: string;
260
+ iso: string;
261
+ img: string;
262
+ bin: string;
263
+ dmg: string;
264
+ ttf: string;
265
+ otf: string;
266
+ woff: string;
267
+ woff2: string;
268
+ epub: string;
269
+ mobi: string;
270
+ azw: string;
271
+ azw3: string;
272
+ stl: string;
273
+ obj: string;
274
+ gltf: string;
275
+ glb: string;
276
+ "3ds": string;
277
+ dae: string;
278
+ step: string;
279
+ stp: string;
280
+ iges: string;
281
+ igs: string;
282
+ swf: string;
283
+ ics: string;
284
+ vcf: string;
285
+ vtt: string;
286
+ srt: string;
287
+ };
288
+
289
+ export { type FileFields, MimeTypes, Status, Types, ValidationException, Validator };