@theshelf/validation-driver-zod 0.5.0 → 0.6.0

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/Zod.d.ts CHANGED
@@ -4,5 +4,5 @@ export default class Zod implements Driver {
4
4
  #private;
5
5
  constructor();
6
6
  get name(): string;
7
- validate(data: unknown, schema: ValidationSchema): ValidationResult;
7
+ validate<T>(data: T, schema: ValidationSchema<T>): ValidationResult;
8
8
  }
package/dist/Zod.js CHANGED
@@ -1,20 +1,23 @@
1
1
  import { z } from 'zod';
2
- import { ValidationResult, MAX_EMAIL_LENGTH, MAX_URL_LENGTH } from '@theshelf/validation';
2
+ import { ValidationResult, FieldTypes, MAX_EMAIL_LENGTH, MAX_URL_LENGTH } from '@theshelf/validation';
3
3
  // Zod is so type heavy that we've chosen for inferred types to be used.
4
4
  // This is a trade-off between readability and verbosity.
5
5
  export default class Zod {
6
6
  #validators = new Map();
7
7
  constructor() {
8
- this.#validators.set('string', (constraints, required) => this.#validateString(constraints, required));
9
- this.#validators.set('number', (constraints, required) => this.#validateNumber(constraints, required));
10
- this.#validators.set('boolean', (constraints, required) => this.#validateBoolean(constraints, required));
11
- this.#validators.set('date', (constraints, required) => this.#validateDate(constraints, required));
12
- this.#validators.set('datetime', (constraints, required) => this.#validateDateTime(constraints, required));
13
- this.#validators.set('uuid', (constraints, required) => this.#validateUuid(constraints, required));
14
- this.#validators.set('email', (constraints, required) => this.#validateEmail(constraints, required));
15
- this.#validators.set('array', (constraints, required) => this.#validateArray(constraints, required));
16
- this.#validators.set('url', (constraints, required) => this.#validateUrl(constraints, required));
17
- this.#validators.set('enum', (constraints, required) => this.#validateEnum(constraints, required));
8
+ this.#validators.set(FieldTypes.STRING, (constraints, required) => this.#validateString(constraints, required));
9
+ this.#validators.set(FieldTypes.NUMBER, (constraints, required) => this.#validateNumber(constraints, required));
10
+ this.#validators.set(FieldTypes.BOOLEAN, (constraints, required) => this.#validateBoolean(constraints, required));
11
+ this.#validators.set(FieldTypes.DATE, (constraints, required) => this.#validateDate(constraints, required));
12
+ this.#validators.set(FieldTypes.DATE_STRING, (constraints, required) => this.#validateDateString(constraints, required));
13
+ this.#validators.set(FieldTypes.DATE_TIME_STRING, (constraints, required) => this.#validateDateTimeString(constraints, required));
14
+ this.#validators.set(FieldTypes.TIME_STRING, (constraints, required) => this.#validateTimeString(constraints, required));
15
+ this.#validators.set(FieldTypes.UUID, (constraints, required) => this.#validateUuid(constraints, required));
16
+ this.#validators.set(FieldTypes.EMAIL, (constraints, required) => this.#validateEmail(constraints, required));
17
+ this.#validators.set(FieldTypes.ARRAY, (constraints, required) => this.#validateArray(constraints, required));
18
+ this.#validators.set(FieldTypes.URL, (constraints, required) => this.#validateUrl(constraints, required));
19
+ this.#validators.set(FieldTypes.URL_STRING, (constraints, required) => this.#validateUrlString(constraints, required));
20
+ this.#validators.set(FieldTypes.ENUM, (constraints, required) => this.#validateEnum(constraints, required));
18
21
  }
19
22
  get name() { return Zod.name; }
20
23
  validate(data, schema) {
@@ -69,15 +72,23 @@ export default class Zod {
69
72
  return this.#checkRequired(validation, required);
70
73
  }
71
74
  #validateDate(constraints, required) {
75
+ const validation = z.date();
76
+ return this.#checkRequired(validation, required);
77
+ }
78
+ #validateDateString(constraints, required) {
72
79
  const validation = z.iso.date();
73
80
  return this.#checkRequired(validation, required);
74
81
  }
75
- #validateDateTime(constraints, required) {
82
+ #validateDateTimeString(constraints, required) {
76
83
  const validation = z.iso.datetime();
77
84
  return this.#checkRequired(validation, required);
78
85
  }
86
+ #validateTimeString(constraints, required) {
87
+ const validation = z.iso.time();
88
+ return this.#checkRequired(validation, required);
89
+ }
79
90
  #validateUuid(constraints, required) {
80
- const validation = z.uuid();
91
+ const validation = z.uuid(); // String or UUID object?
81
92
  return this.#checkRequired(validation, required);
82
93
  }
83
94
  #validateEmail(constraints, required) {
@@ -94,6 +105,10 @@ export default class Zod {
94
105
  return this.#checkRequired(validation, required);
95
106
  }
96
107
  #validateUrl(constraints, required) {
108
+ const validation = z.instanceof(URL);
109
+ return this.#checkRequired(validation, required);
110
+ }
111
+ #validateUrlString(constraints, required) {
97
112
  let validation = z.url().max(MAX_URL_LENGTH);
98
113
  if (constraints.protocols !== undefined) {
99
114
  const escapedProtocols = constraints.protocols.map((p) => p.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@theshelf/validation-driver-zod",
3
3
  "private": false,
4
- "version": "0.5.0",
4
+ "version": "0.6.0",
5
5
  "type": "module",
6
6
  "repository": {
7
7
  "url": "git+https://github.com/MaskingTechnology/theshelf.git"
@@ -27,6 +27,6 @@
27
27
  "zod": "^4.5.4"
28
28
  },
29
29
  "peerDependencies": {
30
- "@theshelf/validation": "^0.5.0"
30
+ "@theshelf/validation": "^0.6.0"
31
31
  }
32
32
  }