@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.
- package/dist/http/index.cjs +264 -5
- package/dist/http/index.cjs.map +1 -1
- package/dist/http/index.d.cts +160 -1
- package/dist/http/index.d.ts +160 -1
- package/dist/http/index.js +263 -5
- package/dist/http/index.js.map +1 -1
- package/dist/index.cjs +42 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +25 -1
- package/dist/index.d.ts +25 -1
- package/dist/index.js +40 -1
- package/dist/index.js.map +1 -1
- package/dist/ws/index.cjs +8 -0
- package/dist/ws/index.cjs.map +1 -1
- package/dist/ws/index.d.cts +2 -1
- package/dist/ws/index.d.ts +2 -1
- package/dist/ws/index.js +8 -0
- package/dist/ws/index.js.map +1 -1
- package/package.json +79 -78
package/dist/http/index.cjs
CHANGED
|
@@ -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,
|
package/dist/http/index.cjs.map
CHANGED
|
@@ -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"]}
|
package/dist/http/index.d.cts
CHANGED
|
@@ -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
|
-
|
|
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 };
|