safesafar-common 1.0.21 → 1.0.22

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/index.d.mts CHANGED
@@ -76,4 +76,30 @@ declare class GqlExceptionFilter implements ExceptionFilter {
76
76
  catch(exception: HttpException, host: ArgumentsHost): IResponse;
77
77
  }
78
78
 
79
- export { CurrentUser, DecimalGraphQLScalar, GqlExceptionFilter, HttpExceptionFilter, IsDecimal, IsDecimalConstraint, JwtAuthGuard, LoggerModule, NATS_SERVICE, NatsClientModule, RetryInterceptor, type TCustomLogger, TransformToDecimal, convertToDecimal, createLogger };
79
+ interface IValidationValue {
80
+ MIN_LENGTH?: number;
81
+ MAX_LENGTH?: number;
82
+ MIN_VALUE?: number;
83
+ MAX_VALUE?: number;
84
+ }
85
+ declare const ValidationValues: Record<string, IValidationValue>;
86
+
87
+ declare const ValidationMessages: {
88
+ MIN_LENGTH: (field: string, minLength: number) => string;
89
+ MAX_LENGTH: (field: string, maxLength: number) => string;
90
+ REQUIRED: (field: string) => string;
91
+ STRING: (field: string) => string;
92
+ UUID: (field: string) => string;
93
+ NUMBER: (field: string) => string;
94
+ DECIMAL: (field: string) => string;
95
+ BOOLEAN: (field: string) => string;
96
+ URL: (field: string) => string;
97
+ ARRAY: (field: string) => string;
98
+ ARRAY_REQUIRED: (field: string) => string;
99
+ ARRAY_MIN_LENGTH: (field: string, minLength: number) => string;
100
+ ARRAY_MAX_LENGTH: (field: string, maxLength: number) => string;
101
+ LONGITUDE: (field: string) => string;
102
+ LATITUDE: (field: string) => string;
103
+ };
104
+
105
+ export { CurrentUser, DecimalGraphQLScalar, GqlExceptionFilter, HttpExceptionFilter, IsDecimal, IsDecimalConstraint, JwtAuthGuard, LoggerModule, NATS_SERVICE, NatsClientModule, RetryInterceptor, type TCustomLogger, TransformToDecimal, ValidationMessages, ValidationValues, convertToDecimal, createLogger };
package/dist/index.d.ts CHANGED
@@ -76,4 +76,30 @@ declare class GqlExceptionFilter implements ExceptionFilter {
76
76
  catch(exception: HttpException, host: ArgumentsHost): IResponse;
77
77
  }
78
78
 
79
- export { CurrentUser, DecimalGraphQLScalar, GqlExceptionFilter, HttpExceptionFilter, IsDecimal, IsDecimalConstraint, JwtAuthGuard, LoggerModule, NATS_SERVICE, NatsClientModule, RetryInterceptor, type TCustomLogger, TransformToDecimal, convertToDecimal, createLogger };
79
+ interface IValidationValue {
80
+ MIN_LENGTH?: number;
81
+ MAX_LENGTH?: number;
82
+ MIN_VALUE?: number;
83
+ MAX_VALUE?: number;
84
+ }
85
+ declare const ValidationValues: Record<string, IValidationValue>;
86
+
87
+ declare const ValidationMessages: {
88
+ MIN_LENGTH: (field: string, minLength: number) => string;
89
+ MAX_LENGTH: (field: string, maxLength: number) => string;
90
+ REQUIRED: (field: string) => string;
91
+ STRING: (field: string) => string;
92
+ UUID: (field: string) => string;
93
+ NUMBER: (field: string) => string;
94
+ DECIMAL: (field: string) => string;
95
+ BOOLEAN: (field: string) => string;
96
+ URL: (field: string) => string;
97
+ ARRAY: (field: string) => string;
98
+ ARRAY_REQUIRED: (field: string) => string;
99
+ ARRAY_MIN_LENGTH: (field: string, minLength: number) => string;
100
+ ARRAY_MAX_LENGTH: (field: string, maxLength: number) => string;
101
+ LONGITUDE: (field: string) => string;
102
+ LATITUDE: (field: string) => string;
103
+ };
104
+
105
+ export { CurrentUser, DecimalGraphQLScalar, GqlExceptionFilter, HttpExceptionFilter, IsDecimal, IsDecimalConstraint, JwtAuthGuard, LoggerModule, NATS_SERVICE, NatsClientModule, RetryInterceptor, type TCustomLogger, TransformToDecimal, ValidationMessages, ValidationValues, convertToDecimal, createLogger };
package/dist/index.js CHANGED
@@ -45,6 +45,8 @@ __export(index_exports, {
45
45
  NatsClientModule: () => NatsClientModule,
46
46
  RetryInterceptor: () => RetryInterceptor,
47
47
  TransformToDecimal: () => TransformToDecimal,
48
+ ValidationMessages: () => ValidationMessages,
49
+ ValidationValues: () => ValidationValues,
48
50
  convertToDecimal: () => convertToDecimal,
49
51
  createLogger: () => createLogger
50
52
  });
@@ -454,6 +456,157 @@ var GqlExceptionFilter = _GqlExceptionFilter;
454
456
  GqlExceptionFilter = _ts_decorate7([
455
457
  (0, import_common7.Catch)(import_common7.HttpException)
456
458
  ], GqlExceptionFilter);
459
+
460
+ // validation/constraints.ts
461
+ var ValidationValues = {
462
+ NAME: {
463
+ MIN_LENGTH: 1,
464
+ MAX_LENGTH: 100
465
+ },
466
+ USERNAME: {
467
+ MIN_LENGTH: 1,
468
+ MAX_LENGTH: 30
469
+ },
470
+ EMAIL: {
471
+ MIN_LENGTH: 1,
472
+ MAX_LENGTH: 320
473
+ },
474
+ FIRST_NAME: {
475
+ MIN_LENGTH: 1,
476
+ MAX_LENGTH: 50
477
+ },
478
+ LAST_NAME: {
479
+ MIN_LENGTH: 1,
480
+ MAX_LENGTH: 50
481
+ },
482
+ SUFFIX: {
483
+ MIN_LENGTH: 1,
484
+ MAX_LENGTH: 10
485
+ },
486
+ GENDER: {
487
+ MIN_LENGTH: 1,
488
+ MAX_LENGTH: 10
489
+ },
490
+ PHONE: {
491
+ MIN_LENGTH: 1,
492
+ MAX_LENGTH: 15
493
+ },
494
+ ADDRESS: {
495
+ MIN_LENGTH: 1,
496
+ MAX_LENGTH: 255
497
+ },
498
+ ZIP: {
499
+ MIN_LENGTH: 1,
500
+ MAX_LENGTH: 10
501
+ },
502
+ CITY: {
503
+ MIN_LENGTH: 1,
504
+ MAX_LENGTH: 100
505
+ },
506
+ STATE: {
507
+ MIN_LENGTH: 1,
508
+ MAX_LENGTH: 100
509
+ },
510
+ COUNTRY: {
511
+ MIN_LENGTH: 1,
512
+ MAX_LENGTH: 100
513
+ },
514
+ LABEL: {
515
+ MIN_LENGTH: 1,
516
+ MAX_LENGTH: 100
517
+ },
518
+ ACTION: {
519
+ MIN_LENGTH: 1,
520
+ MAX_LENGTH: 50
521
+ },
522
+ RESOURCE: {
523
+ MIN_LENGTH: 1,
524
+ MAX_LENGTH: 100
525
+ },
526
+ SUB_RESOURCE: {
527
+ MIN_LENGTH: 1,
528
+ MAX_LENGTH: 100
529
+ },
530
+ KEY: {
531
+ MIN_LENGTH: 1,
532
+ MAX_LENGTH: 100
533
+ },
534
+ VALUE: {
535
+ MIN_LENGTH: 1,
536
+ MAX_LENGTH: 500
537
+ },
538
+ INTEGRATION_NAME: {
539
+ MIN_LENGTH: 1,
540
+ MAX_LENGTH: 100
541
+ },
542
+ ENVIRONMENT: {
543
+ MIN_LENGTH: 1,
544
+ MAX_LENGTH: 50
545
+ },
546
+ CODE: {
547
+ MIN_LENGTH: 1,
548
+ MAX_LENGTH: 20
549
+ },
550
+ URL_KEY: {
551
+ MIN_LENGTH: 1,
552
+ MAX_LENGTH: 255
553
+ },
554
+ WEB_PATH: {
555
+ MIN_LENGTH: 1,
556
+ MAX_LENGTH: 255
557
+ },
558
+ PRODUCT_CLASS_NAME: {
559
+ MIN_LENGTH: 1,
560
+ MAX_LENGTH: 100
561
+ },
562
+ PRODUCT_TITLE: {
563
+ MIN_LENGTH: 1,
564
+ MAX_LENGTH: 100
565
+ },
566
+ PRODUCT_THUMBNAIL_URL: {
567
+ MIN_LENGTH: 1,
568
+ MAX_LENGTH: 255
569
+ },
570
+ PRODUCT_BANNER_URL: {
571
+ MIN_LENGTH: 1,
572
+ MAX_LENGTH: 255
573
+ },
574
+ ITEM_CUSTOMIZATION_GROUP_TITLE: {
575
+ MIN_LENGTH: 1,
576
+ MAX_LENGTH: 100
577
+ },
578
+ ITEM_CUSTOMIZATION_GROUP_OPTION_TITLE: {
579
+ MIN_LENGTH: 1,
580
+ MAX_LENGTH: 100
581
+ },
582
+ ADDON_TITLE: {
583
+ MIN_LENGTH: 1,
584
+ MAX_LENGTH: 100
585
+ },
586
+ DESCRIPTION: {
587
+ MIN_LENGTH: 1,
588
+ MAX_LENGTH: 500
589
+ }
590
+ };
591
+
592
+ // validation/messages.ts
593
+ var ValidationMessages = {
594
+ MIN_LENGTH: /* @__PURE__ */ __name((field, minLength) => `${field} must be at least ${minLength} characters long`, "MIN_LENGTH"),
595
+ MAX_LENGTH: /* @__PURE__ */ __name((field, maxLength) => `${field} must be at most ${maxLength} characters long`, "MAX_LENGTH"),
596
+ REQUIRED: /* @__PURE__ */ __name((field) => `${field} is required`, "REQUIRED"),
597
+ STRING: /* @__PURE__ */ __name((field) => `${field} must be a string`, "STRING"),
598
+ UUID: /* @__PURE__ */ __name((field) => `${field} must be a uuid`, "UUID"),
599
+ NUMBER: /* @__PURE__ */ __name((field) => `${field} must be a number`, "NUMBER"),
600
+ DECIMAL: /* @__PURE__ */ __name((field) => `${field} must be a decimal`, "DECIMAL"),
601
+ BOOLEAN: /* @__PURE__ */ __name((field) => `${field} must be a boolean`, "BOOLEAN"),
602
+ URL: /* @__PURE__ */ __name((field) => `${field} must be a url`, "URL"),
603
+ ARRAY: /* @__PURE__ */ __name((field) => `${field} must be an array`, "ARRAY"),
604
+ ARRAY_REQUIRED: /* @__PURE__ */ __name((field) => `${field} cannot be empty.`, "ARRAY_REQUIRED"),
605
+ ARRAY_MIN_LENGTH: /* @__PURE__ */ __name((field, minLength) => `${field} must contain at least ${minLength} items`, "ARRAY_MIN_LENGTH"),
606
+ ARRAY_MAX_LENGTH: /* @__PURE__ */ __name((field, maxLength) => `${field} must contain at most ${maxLength} items`, "ARRAY_MAX_LENGTH"),
607
+ LONGITUDE: /* @__PURE__ */ __name((field) => `${field} must be a longtitude`, "LONGITUDE"),
608
+ LATITUDE: /* @__PURE__ */ __name((field) => `${field} must be a latitude`, "LATITUDE")
609
+ };
457
610
  // Annotate the CommonJS export names for ESM import in node:
458
611
  0 && (module.exports = {
459
612
  CurrentUser,
@@ -468,6 +621,8 @@ GqlExceptionFilter = _ts_decorate7([
468
621
  NatsClientModule,
469
622
  RetryInterceptor,
470
623
  TransformToDecimal,
624
+ ValidationMessages,
625
+ ValidationValues,
471
626
  convertToDecimal,
472
627
  createLogger
473
628
  });
package/dist/index.mjs CHANGED
@@ -407,6 +407,157 @@ var GqlExceptionFilter = _GqlExceptionFilter;
407
407
  GqlExceptionFilter = _ts_decorate7([
408
408
  Catch(HttpException)
409
409
  ], GqlExceptionFilter);
410
+
411
+ // validation/constraints.ts
412
+ var ValidationValues = {
413
+ NAME: {
414
+ MIN_LENGTH: 1,
415
+ MAX_LENGTH: 100
416
+ },
417
+ USERNAME: {
418
+ MIN_LENGTH: 1,
419
+ MAX_LENGTH: 30
420
+ },
421
+ EMAIL: {
422
+ MIN_LENGTH: 1,
423
+ MAX_LENGTH: 320
424
+ },
425
+ FIRST_NAME: {
426
+ MIN_LENGTH: 1,
427
+ MAX_LENGTH: 50
428
+ },
429
+ LAST_NAME: {
430
+ MIN_LENGTH: 1,
431
+ MAX_LENGTH: 50
432
+ },
433
+ SUFFIX: {
434
+ MIN_LENGTH: 1,
435
+ MAX_LENGTH: 10
436
+ },
437
+ GENDER: {
438
+ MIN_LENGTH: 1,
439
+ MAX_LENGTH: 10
440
+ },
441
+ PHONE: {
442
+ MIN_LENGTH: 1,
443
+ MAX_LENGTH: 15
444
+ },
445
+ ADDRESS: {
446
+ MIN_LENGTH: 1,
447
+ MAX_LENGTH: 255
448
+ },
449
+ ZIP: {
450
+ MIN_LENGTH: 1,
451
+ MAX_LENGTH: 10
452
+ },
453
+ CITY: {
454
+ MIN_LENGTH: 1,
455
+ MAX_LENGTH: 100
456
+ },
457
+ STATE: {
458
+ MIN_LENGTH: 1,
459
+ MAX_LENGTH: 100
460
+ },
461
+ COUNTRY: {
462
+ MIN_LENGTH: 1,
463
+ MAX_LENGTH: 100
464
+ },
465
+ LABEL: {
466
+ MIN_LENGTH: 1,
467
+ MAX_LENGTH: 100
468
+ },
469
+ ACTION: {
470
+ MIN_LENGTH: 1,
471
+ MAX_LENGTH: 50
472
+ },
473
+ RESOURCE: {
474
+ MIN_LENGTH: 1,
475
+ MAX_LENGTH: 100
476
+ },
477
+ SUB_RESOURCE: {
478
+ MIN_LENGTH: 1,
479
+ MAX_LENGTH: 100
480
+ },
481
+ KEY: {
482
+ MIN_LENGTH: 1,
483
+ MAX_LENGTH: 100
484
+ },
485
+ VALUE: {
486
+ MIN_LENGTH: 1,
487
+ MAX_LENGTH: 500
488
+ },
489
+ INTEGRATION_NAME: {
490
+ MIN_LENGTH: 1,
491
+ MAX_LENGTH: 100
492
+ },
493
+ ENVIRONMENT: {
494
+ MIN_LENGTH: 1,
495
+ MAX_LENGTH: 50
496
+ },
497
+ CODE: {
498
+ MIN_LENGTH: 1,
499
+ MAX_LENGTH: 20
500
+ },
501
+ URL_KEY: {
502
+ MIN_LENGTH: 1,
503
+ MAX_LENGTH: 255
504
+ },
505
+ WEB_PATH: {
506
+ MIN_LENGTH: 1,
507
+ MAX_LENGTH: 255
508
+ },
509
+ PRODUCT_CLASS_NAME: {
510
+ MIN_LENGTH: 1,
511
+ MAX_LENGTH: 100
512
+ },
513
+ PRODUCT_TITLE: {
514
+ MIN_LENGTH: 1,
515
+ MAX_LENGTH: 100
516
+ },
517
+ PRODUCT_THUMBNAIL_URL: {
518
+ MIN_LENGTH: 1,
519
+ MAX_LENGTH: 255
520
+ },
521
+ PRODUCT_BANNER_URL: {
522
+ MIN_LENGTH: 1,
523
+ MAX_LENGTH: 255
524
+ },
525
+ ITEM_CUSTOMIZATION_GROUP_TITLE: {
526
+ MIN_LENGTH: 1,
527
+ MAX_LENGTH: 100
528
+ },
529
+ ITEM_CUSTOMIZATION_GROUP_OPTION_TITLE: {
530
+ MIN_LENGTH: 1,
531
+ MAX_LENGTH: 100
532
+ },
533
+ ADDON_TITLE: {
534
+ MIN_LENGTH: 1,
535
+ MAX_LENGTH: 100
536
+ },
537
+ DESCRIPTION: {
538
+ MIN_LENGTH: 1,
539
+ MAX_LENGTH: 500
540
+ }
541
+ };
542
+
543
+ // validation/messages.ts
544
+ var ValidationMessages = {
545
+ MIN_LENGTH: /* @__PURE__ */ __name((field, minLength) => `${field} must be at least ${minLength} characters long`, "MIN_LENGTH"),
546
+ MAX_LENGTH: /* @__PURE__ */ __name((field, maxLength) => `${field} must be at most ${maxLength} characters long`, "MAX_LENGTH"),
547
+ REQUIRED: /* @__PURE__ */ __name((field) => `${field} is required`, "REQUIRED"),
548
+ STRING: /* @__PURE__ */ __name((field) => `${field} must be a string`, "STRING"),
549
+ UUID: /* @__PURE__ */ __name((field) => `${field} must be a uuid`, "UUID"),
550
+ NUMBER: /* @__PURE__ */ __name((field) => `${field} must be a number`, "NUMBER"),
551
+ DECIMAL: /* @__PURE__ */ __name((field) => `${field} must be a decimal`, "DECIMAL"),
552
+ BOOLEAN: /* @__PURE__ */ __name((field) => `${field} must be a boolean`, "BOOLEAN"),
553
+ URL: /* @__PURE__ */ __name((field) => `${field} must be a url`, "URL"),
554
+ ARRAY: /* @__PURE__ */ __name((field) => `${field} must be an array`, "ARRAY"),
555
+ ARRAY_REQUIRED: /* @__PURE__ */ __name((field) => `${field} cannot be empty.`, "ARRAY_REQUIRED"),
556
+ ARRAY_MIN_LENGTH: /* @__PURE__ */ __name((field, minLength) => `${field} must contain at least ${minLength} items`, "ARRAY_MIN_LENGTH"),
557
+ ARRAY_MAX_LENGTH: /* @__PURE__ */ __name((field, maxLength) => `${field} must contain at most ${maxLength} items`, "ARRAY_MAX_LENGTH"),
558
+ LONGITUDE: /* @__PURE__ */ __name((field) => `${field} must be a longtitude`, "LONGITUDE"),
559
+ LATITUDE: /* @__PURE__ */ __name((field) => `${field} must be a latitude`, "LATITUDE")
560
+ };
410
561
  export {
411
562
  CurrentUser,
412
563
  DecimalGraphQLScalar,
@@ -420,6 +571,8 @@ export {
420
571
  NatsClientModule,
421
572
  RetryInterceptor,
422
573
  TransformToDecimal,
574
+ ValidationMessages,
575
+ ValidationValues,
423
576
  convertToDecimal,
424
577
  createLogger
425
578
  };
package/index.ts CHANGED
@@ -6,3 +6,4 @@ export * from "./decorators";
6
6
  export * from "./interceptors";
7
7
  export * from "./method";
8
8
  export * from "./filters";
9
+ export * from "./validation";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "safesafar-common",
3
- "version": "1.0.21",
3
+ "version": "1.0.22",
4
4
  "description": "Common library for SafeSafar",
5
5
  "keywords": [],
6
6
  "author": "SafeSafar",
@@ -0,0 +1,41 @@
1
+ interface IValidationValue {
2
+ MIN_LENGTH?: number;
3
+ MAX_LENGTH?: number;
4
+ MIN_VALUE?: number;
5
+ MAX_VALUE?: number;
6
+ }
7
+
8
+ export const ValidationValues: Record<string, IValidationValue> = {
9
+ NAME: { MIN_LENGTH: 1, MAX_LENGTH: 100 }, // Standard for full names
10
+ USERNAME: { MIN_LENGTH: 1, MAX_LENGTH: 30 }, // Common username limit
11
+ EMAIL: { MIN_LENGTH: 1, MAX_LENGTH: 320 }, // Per RFC 5321
12
+ FIRST_NAME: { MIN_LENGTH: 1, MAX_LENGTH: 50 },
13
+ LAST_NAME: { MIN_LENGTH: 1, MAX_LENGTH: 50 },
14
+ SUFFIX: { MIN_LENGTH: 1, MAX_LENGTH: 10 }, // Typically short (e.g., Jr., Sr.)
15
+ GENDER: { MIN_LENGTH: 1, MAX_LENGTH: 10 }, // "Male", "Female", "Other", etc.
16
+ PHONE: { MIN_LENGTH: 1, MAX_LENGTH: 15 }, // International E.164 standard
17
+ ADDRESS: { MIN_LENGTH: 1, MAX_LENGTH: 255 }, // Typical address length
18
+ ZIP: { MIN_LENGTH: 1, MAX_LENGTH: 10 }, // Covers most postal codes
19
+ CITY: { MIN_LENGTH: 1, MAX_LENGTH: 100 }, // Covers long city names
20
+ STATE: { MIN_LENGTH: 1, MAX_LENGTH: 100 },
21
+ COUNTRY: { MIN_LENGTH: 1, MAX_LENGTH: 100 },
22
+ LABEL: { MIN_LENGTH: 1, MAX_LENGTH: 100 },
23
+ ACTION: { MIN_LENGTH: 1, MAX_LENGTH: 50 },
24
+ RESOURCE: { MIN_LENGTH: 1, MAX_LENGTH: 100 },
25
+ SUB_RESOURCE: { MIN_LENGTH: 1, MAX_LENGTH: 100 },
26
+ KEY: { MIN_LENGTH: 1, MAX_LENGTH: 100 },
27
+ VALUE: { MIN_LENGTH: 1, MAX_LENGTH: 500 }, // Values might be longer
28
+ INTEGRATION_NAME: { MIN_LENGTH: 1, MAX_LENGTH: 100 },
29
+ ENVIRONMENT: { MIN_LENGTH: 1, MAX_LENGTH: 50 },
30
+ CODE: { MIN_LENGTH: 1, MAX_LENGTH: 20 }, // Short codes
31
+ URL_KEY: { MIN_LENGTH: 1, MAX_LENGTH: 255 }, // Standard URL slug length
32
+ WEB_PATH: { MIN_LENGTH: 1, MAX_LENGTH: 255 },
33
+ PRODUCT_CLASS_NAME: { MIN_LENGTH: 1, MAX_LENGTH: 100 },
34
+ PRODUCT_TITLE: { MIN_LENGTH: 1, MAX_LENGTH: 100 },
35
+ PRODUCT_THUMBNAIL_URL: { MIN_LENGTH: 1, MAX_LENGTH: 255 },
36
+ PRODUCT_BANNER_URL: { MIN_LENGTH: 1, MAX_LENGTH: 255 },
37
+ ITEM_CUSTOMIZATION_GROUP_TITLE: { MIN_LENGTH: 1, MAX_LENGTH: 100 },
38
+ ITEM_CUSTOMIZATION_GROUP_OPTION_TITLE: { MIN_LENGTH: 1, MAX_LENGTH: 100 },
39
+ ADDON_TITLE: { MIN_LENGTH: 1, MAX_LENGTH: 100 },
40
+ DESCRIPTION: { MIN_LENGTH: 1, MAX_LENGTH: 500 }, // More room for descriptions
41
+ };
@@ -0,0 +1,2 @@
1
+ export * from "./constraints";
2
+ export * from "./messages";
@@ -0,0 +1,21 @@
1
+ export const ValidationMessages = {
2
+ MIN_LENGTH: (field: string, minLength: number) =>
3
+ `${field} must be at least ${minLength} characters long`,
4
+ MAX_LENGTH: (field: string, maxLength: number) =>
5
+ `${field} must be at most ${maxLength} characters long`,
6
+ REQUIRED: (field: string) => `${field} is required`,
7
+ STRING: (field: string) => `${field} must be a string`,
8
+ UUID: (field: string) => `${field} must be a uuid`,
9
+ NUMBER: (field: string) => `${field} must be a number`,
10
+ DECIMAL: (field: string) => `${field} must be a decimal`,
11
+ BOOLEAN: (field: string) => `${field} must be a boolean`,
12
+ URL: (field: string) => `${field} must be a url`,
13
+ ARRAY: (field: string) => `${field} must be an array`,
14
+ ARRAY_REQUIRED: (field: string) => `${field} cannot be empty.`,
15
+ ARRAY_MIN_LENGTH: (field: string, minLength: number) =>
16
+ `${field} must contain at least ${minLength} items`,
17
+ ARRAY_MAX_LENGTH: (field: string, maxLength: number) =>
18
+ `${field} must contain at most ${maxLength} items`,
19
+ LONGITUDE: (field: string) => `${field} must be a longtitude`,
20
+ LATITUDE: (field: string) => `${field} must be a latitude`,
21
+ };