justus 0.0.1 → 0.0.2

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.
@@ -0,0 +1,156 @@
1
+ // src/dts-generator.ts
2
+ import ts from "typescript";
3
+ import {
4
+ AllOfValidator,
5
+ AnyArrayValidator,
6
+ AnyNumberValidator,
7
+ AnyObjectValidator,
8
+ AnyStringValidator,
9
+ AnyValidator,
10
+ ArrayValidator,
11
+ assertSchema,
12
+ BooleanValidator,
13
+ ConstantValidator,
14
+ DateValidator,
15
+ getValidator,
16
+ NumberValidator,
17
+ ObjectValidator,
18
+ OneOfValidator,
19
+ StringValidator,
20
+ TupleValidator,
21
+ Validator
22
+ } from "./index.mjs";
23
+ var generators = /* @__PURE__ */ new Map();
24
+ function registerTypeGenerator(validator, generator) {
25
+ assertSchema(validator.prototype instanceof Validator, "Not a `Validator` class");
26
+ generators.set(validator, generator);
27
+ }
28
+ function generateTypes(validations) {
29
+ const validators = /* @__PURE__ */ new Map();
30
+ const references = /* @__PURE__ */ new Map();
31
+ Object.entries(validations).forEach(([name, validation]) => {
32
+ const validator = getValidator(validation);
33
+ if (!references.has(validator))
34
+ references.set(validator, name);
35
+ validators.set(name, validator);
36
+ });
37
+ const types = [];
38
+ for (const [name, validator] of validators.entries()) {
39
+ const referenceable = new Map(references);
40
+ if (referenceable.get(validator) === name) {
41
+ referenceable.delete(validator);
42
+ }
43
+ const type = generateTypeNode(validator, referenceable);
44
+ const modifiers = [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)];
45
+ const decl = ts.factory.createTypeAliasDeclaration(void 0, modifiers, name, [], type);
46
+ types.push(decl);
47
+ }
48
+ return ts.createPrinter().printList(ts.ListFormat.SourceFileStatements, ts.factory.createNodeArray(types), ts.createSourceFile("types.d.ts", "", ts.ScriptTarget.Latest));
49
+ }
50
+ function generateTypeNode(validator, references) {
51
+ const reference = references.get(validator);
52
+ if (reference)
53
+ return ts.factory.createTypeReferenceNode(reference);
54
+ const generator = generators.get(validator.constructor);
55
+ assertSchema(!!generator, `Type generator for "${validator.constructor.name}" not found`);
56
+ return generator(validator, references);
57
+ }
58
+ var anyType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword);
59
+ var anyArrayType = ts.factory.createArrayTypeNode(anyType);
60
+ var booleanType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword);
61
+ var numberType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword);
62
+ var neverType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword);
63
+ var stringType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);
64
+ var recordType = ts.factory.createMappedTypeNode(void 0, ts.factory.createTypeParameterDeclaration("key", stringType), void 0, void 0, anyType, void 0);
65
+ var readonlyKeyword = [ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)];
66
+ var optionalKeyword = ts.factory.createToken(ts.SyntaxKind.QuestionToken);
67
+ registerTypeGenerator(AnyValidator, () => anyType);
68
+ registerTypeGenerator(AnyArrayValidator, () => anyArrayType);
69
+ registerTypeGenerator(AnyNumberValidator, () => numberType);
70
+ registerTypeGenerator(AnyObjectValidator, () => recordType);
71
+ registerTypeGenerator(AnyStringValidator, () => stringType);
72
+ registerTypeGenerator(BooleanValidator, () => booleanType);
73
+ registerTypeGenerator(DateValidator, () => ts.factory.createTypeReferenceNode("Date"));
74
+ registerTypeGenerator(ArrayValidator, (validator, references) => {
75
+ const itemType = generateTypeNode(validator.items, references);
76
+ return ts.factory.createArrayTypeNode(itemType);
77
+ });
78
+ registerTypeGenerator(ConstantValidator, (validator) => {
79
+ const literal = typeof validator.constant === "number" ? ts.factory.createNumericLiteral(validator.constant) : typeof validator.constant === "string" ? ts.factory.createStringLiteral(validator.constant) : validator.constant === false ? ts.factory.createFalse() : validator.constant === true ? ts.factory.createTrue() : validator.constant === null ? ts.factory.createNull() : void 0;
80
+ assertSchema(!!literal, `Invalid constant "${validator.constant}"`);
81
+ return ts.factory.createLiteralTypeNode(literal);
82
+ });
83
+ registerTypeGenerator(NumberValidator, (validator) => {
84
+ if (!validator.brand)
85
+ return numberType;
86
+ const signature = ts.factory.createPropertySignature(void 0, `__brand_${validator.brand}`, void 0, neverType);
87
+ const literal = ts.factory.createTypeLiteralNode([signature]);
88
+ return ts.factory.createIntersectionTypeNode([numberType, literal]);
89
+ });
90
+ registerTypeGenerator(StringValidator, (validator) => {
91
+ if (!validator.brand)
92
+ return stringType;
93
+ const signature = ts.factory.createPropertySignature(void 0, `__brand_${validator.brand}`, void 0, neverType);
94
+ const literal = ts.factory.createTypeLiteralNode([signature]);
95
+ return ts.factory.createIntersectionTypeNode([stringType, literal]);
96
+ });
97
+ registerTypeGenerator(TupleValidator, (validator, references) => {
98
+ const members = validator.members;
99
+ const { count, first, next } = members.reduce(({ count: count2, first: first2, next: next2 }, { single }, i) => {
100
+ if (!single) {
101
+ if (i < first2)
102
+ first2 = i;
103
+ next2 = i + 1;
104
+ count2 += 1;
105
+ }
106
+ return { count: count2, first: first2, next: next2 };
107
+ }, { count: 0, first: members.length, next: -1 });
108
+ if (count < 2) {
109
+ const types2 = members.map(({ single, validator: validator2 }) => {
110
+ const memberType = generateTypeNode(validator2, references);
111
+ if (single)
112
+ return generateTypeNode(validator2, references);
113
+ const arrayType = ts.factory.createArrayTypeNode(memberType);
114
+ return ts.factory.createRestTypeNode(arrayType);
115
+ });
116
+ return ts.factory.createTupleTypeNode(types2);
117
+ }
118
+ const before = members.slice(0, first).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
119
+ const types = members.slice(first, next).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
120
+ const after = members.slice(next).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
121
+ const union = ts.factory.createUnionTypeNode(types);
122
+ const array = ts.factory.createArrayTypeNode(union);
123
+ const rest = ts.factory.createRestTypeNode(array);
124
+ return ts.factory.createTupleTypeNode([...before, rest, ...after]);
125
+ });
126
+ registerTypeGenerator(AllOfValidator, (validator, references) => {
127
+ const members = validator.validators.map((validator2) => generateTypeNode(validator2, references));
128
+ return ts.factory.createIntersectionTypeNode(members);
129
+ });
130
+ registerTypeGenerator(OneOfValidator, (validator, references) => {
131
+ const members = validator.validators.map((validator2) => generateTypeNode(validator2, references));
132
+ return ts.factory.createUnionTypeNode(members);
133
+ });
134
+ registerTypeGenerator(ObjectValidator, (validator, references) => {
135
+ const properties = [];
136
+ for (const [key, property] of validator.properties.entries()) {
137
+ const { validator: validator2, readonly, optional } = property || { optional: true };
138
+ const type = validator2 ? generateTypeNode(validator2, references) : neverType;
139
+ const signature = ts.factory.createPropertySignature(readonly ? readonlyKeyword : void 0, key, optional ? optionalKeyword : void 0, type);
140
+ properties.push(signature);
141
+ }
142
+ if (validator.additionalProperties) {
143
+ const extra = ts.factory.createMappedTypeNode(void 0, ts.factory.createTypeParameterDeclaration("key", stringType), void 0, void 0, generateTypeNode(validator.additionalProperties, references), void 0);
144
+ if (properties.length == 0)
145
+ return extra;
146
+ const type = ts.factory.createTypeLiteralNode(properties);
147
+ return ts.factory.createIntersectionTypeNode([type, extra]);
148
+ } else {
149
+ return ts.factory.createTypeLiteralNode(properties);
150
+ }
151
+ });
152
+ export {
153
+ generateTypes,
154
+ registerTypeGenerator
155
+ };
156
+ //# sourceMappingURL=dts-generator.mjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/dts-generator.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -36,32 +36,14 @@ var __export = (target, all) => {
36
36
  for (var name in all)
37
37
  __defProp(target, name, { get: all[name], enumerable: true });
38
38
  };
39
- var __publicField = (obj, key, value) => {
40
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
41
- return value;
42
- };
43
- var __accessCheck = (obj, member, msg) => {
44
- if (!member.has(obj))
45
- throw TypeError("Cannot " + msg);
46
- };
47
- var __privateGet = (obj, member, getter) => {
48
- __accessCheck(obj, member, "read from private field");
49
- return getter ? getter.call(obj) : member.get(obj);
50
- };
51
- var __privateAdd = (obj, member, value) => {
52
- if (member.has(obj))
53
- throw TypeError("Cannot add the same private member more than once");
54
- member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
55
- };
56
- var __privateSet = (obj, member, value, setter) => {
57
- __accessCheck(obj, member, "write to private field");
58
- setter ? setter.call(obj, value) : member.set(obj, value);
59
- return value;
60
- };
61
39
 
62
40
  // src/index.ts
63
41
  __export(exports, {
64
42
  AllOfValidator: () => AllOfValidator,
43
+ AnyArrayValidator: () => AnyArrayValidator,
44
+ AnyNumberValidator: () => AnyNumberValidator,
45
+ AnyObjectValidator: () => AnyObjectValidator,
46
+ AnyStringValidator: () => AnyStringValidator,
65
47
  AnyValidator: () => AnyValidator,
66
48
  ArrayValidator: () => ArrayValidator,
67
49
  BooleanValidator: () => BooleanValidator,
@@ -203,24 +185,26 @@ var nullValidator = new ConstantValidator(null);
203
185
 
204
186
  // src/validators/tuple.ts
205
187
  var TupleValidator = class extends Validator {
188
+ members;
206
189
  tuple;
207
- #validators = [];
208
190
  constructor(tuple2) {
209
191
  super();
210
- this.tuple = tuple2;
192
+ const members = [];
211
193
  for (const item of tuple2) {
212
194
  if (item === null) {
213
- this.#validators.push({ single: true, validator: nullValidator });
195
+ members.push({ single: true, validator: nullValidator });
214
196
  } else if (typeof item === "object" && restValidator in item) {
215
- this.#validators.push({ single: false, validator: item[restValidator] });
197
+ members.push({ single: false, validator: item[restValidator] });
216
198
  } else {
217
- this.#validators.push({ single: true, validator: getValidator(item) });
199
+ members.push({ single: true, validator: getValidator(item) });
218
200
  }
219
201
  }
202
+ this.members = members;
203
+ this.tuple = tuple2;
220
204
  }
221
205
  validate(value, options) {
222
206
  assertValidation(Array.isArray(value), 'Value is not an "array"');
223
- if (this.#validators.length === 0) {
207
+ if (this.members.length === 0) {
224
208
  const size = value.length;
225
209
  assertValidation(size === 0, `Found ${size} element${size === 1 ? "" : "s"} validating empty tuple`);
226
210
  return value;
@@ -228,24 +212,24 @@ var TupleValidator = class extends Validator {
228
212
  const clone = new Array(value.length);
229
213
  let needle = 0;
230
214
  let haystack = 0;
231
- let { single, validator } = this.#validators[needle];
232
- while (needle < this.#validators.length && haystack < value.length) {
215
+ let { single, validator } = this.members[needle];
216
+ while (needle < this.members.length && haystack < value.length) {
233
217
  try {
234
218
  clone[haystack] = validator.validate(value[haystack], options);
235
219
  if (single)
236
- ({ single, validator } = this.#validators[++needle] || {});
220
+ ({ single, validator } = this.members[++needle] || {});
237
221
  haystack++;
238
222
  } catch (error) {
239
223
  if (single)
240
224
  throw new ValidationError(error, [haystack]);
241
225
  else
242
- ({ single, validator } = this.#validators[++needle] || {});
226
+ ({ single, validator } = this.members[++needle] || {});
243
227
  }
244
228
  }
245
- while (needle < this.#validators.length && this.#validators[needle].single === false) {
229
+ while (needle < this.members.length && this.members[needle].single === false) {
246
230
  needle++;
247
231
  }
248
- const missing = this.#validators.length - needle;
232
+ const missing = this.members.length - needle;
249
233
  if (missing === 1 && single) {
250
234
  throw new ValidationError("Tuple defines 1 missing validation");
251
235
  } else if (missing > 1) {
@@ -268,26 +252,35 @@ function makeTupleRestIterable(create) {
268
252
  }
269
253
 
270
254
  // src/validators/object.ts
255
+ var AnyObjectValidator = class extends Validator {
256
+ validate(value) {
257
+ assertValidation(typeof value == "object", 'Value is not an "object"');
258
+ assertValidation(value !== null, 'Value is "null"');
259
+ return value;
260
+ }
261
+ };
271
262
  var ObjectValidator = class extends Validator {
272
263
  schema;
273
- #additionalProperties;
274
- #requiredProperties = {};
275
- #optionalProperties = {};
276
- #neverProperties = /* @__PURE__ */ new Set();
264
+ properties = /* @__PURE__ */ new Map();
265
+ additionalProperties;
277
266
  constructor(schema) {
278
267
  super();
279
268
  var _a;
280
269
  const _b = schema, { [_a = additionalValidator]: additional } = _b, properties = __objRest(_b, [__restKey(_a)]);
281
270
  if (additional)
282
- this.#additionalProperties = getValidator(additional);
271
+ this.additionalProperties = getValidator(additional);
283
272
  for (const key of Object.keys(properties)) {
284
273
  const definition = properties[key];
285
274
  if (definition === never) {
286
- this.#neverProperties.add(key);
275
+ this.properties.set(key, void 0);
287
276
  } else if (isModifier(definition)) {
288
- (definition.optional ? this.#optionalProperties : this.#requiredProperties)[key] = definition[modifierValidator];
277
+ this.properties.set(key, {
278
+ validator: definition[modifierValidator],
279
+ readonly: definition.readonly,
280
+ optional: definition.optional
281
+ });
289
282
  } else {
290
- this.#requiredProperties[key] = getValidator(definition);
283
+ this.properties.set(key, { validator: getValidator(definition) });
291
284
  }
292
285
  }
293
286
  this.schema = schema;
@@ -298,43 +291,29 @@ var ObjectValidator = class extends Validator {
298
291
  const record = value;
299
292
  const builder = new ValidationErrorBuilder();
300
293
  const clone = {};
301
- for (const [key, validator] of Object.entries(this.#requiredProperties)) {
302
- if (record[key] === void 0) {
303
- builder.record("Required property missing", key);
294
+ for (const [key, property] of this.properties.entries()) {
295
+ const { validator, optional: optional2 } = property || {};
296
+ if (!validator) {
297
+ if (record[key] === void 0)
298
+ continue;
299
+ if (options.stripForbiddenProperties)
300
+ continue;
301
+ builder.record("Forbidden property", key);
304
302
  continue;
305
303
  }
306
- try {
307
- clone[key] = validator.validate(record[key], options);
308
- } catch (error) {
309
- builder.record(error, key);
310
- }
311
- }
312
- for (const [key, validator] of Object.entries(this.#optionalProperties)) {
313
- if (record[key] === void 0)
304
+ if (record[key] === void 0) {
305
+ if (!optional2)
306
+ builder.record("Required property missing", key);
314
307
  continue;
308
+ }
315
309
  try {
316
310
  clone[key] = validator.validate(record[key], options);
317
311
  } catch (error) {
318
312
  builder.record(error, key);
319
313
  }
320
314
  }
321
- for (const key of this.#neverProperties) {
322
- if (record[key] === void 0)
323
- continue;
324
- if (options.stripForbiddenProperties)
325
- continue;
326
- builder.record("Forbidden property", key);
327
- }
328
- const additional = this.#additionalProperties;
329
- const additionalKeys = Object.keys(record).filter((k) => {
330
- if (k in this.#requiredProperties)
331
- return false;
332
- if (k in this.#optionalProperties)
333
- return false;
334
- if (this.#neverProperties.has(k))
335
- return false;
336
- return true;
337
- });
315
+ const additionalKeys = Object.keys(record).filter((k) => !this.properties.has(k));
316
+ const additional = this.additionalProperties;
338
317
  if (additional) {
339
318
  additionalKeys.forEach((key) => {
340
319
  if (record[key] === void 0)
@@ -354,19 +333,17 @@ var ObjectValidator = class extends Validator {
354
333
  return builder.assert(clone);
355
334
  }
356
335
  };
357
- var anyObjectValidator = new class extends Validator {
358
- validate(value) {
359
- assertValidation(typeof value == "object", 'Value is not an "object"');
360
- assertValidation(value !== null, 'Value is "null"');
361
- return value;
362
- }
363
- }();
336
+ var anyObjectValidator = new AnyObjectValidator();
364
337
  function _object(schema) {
365
338
  if (!schema)
366
339
  return anyObjectValidator;
367
- return Object.defineProperty(schema, schemaValidator, {
368
- value: new ObjectValidator(schema),
369
- enumerable: false
340
+ const validator = new ObjectValidator(schema);
341
+ function* iterator() {
342
+ yield { [restValidator]: validator };
343
+ }
344
+ return Object.defineProperties(schema, {
345
+ [schemaValidator]: { value: validator, enumerable: false },
346
+ [Symbol.iterator]: { value: iterator, enumerable: false }
370
347
  });
371
348
  }
372
349
  var object = makeTupleRestIterable(_object);
@@ -461,6 +438,13 @@ function allOf(...args) {
461
438
  }
462
439
 
463
440
  // src/validators/array.ts
441
+ var AnyArrayValidator = class extends Validator {
442
+ validate(value, options) {
443
+ void 0;
444
+ assertValidation(Array.isArray(value), 'Value is not an "array"');
445
+ return [...value];
446
+ }
447
+ };
464
448
  var ArrayValidator = class extends Validator {
465
449
  maxItems;
466
450
  minItems;
@@ -505,12 +489,7 @@ var ArrayValidator = class extends Validator {
505
489
  return builder.assert(clone);
506
490
  }
507
491
  };
508
- var anyArrayValidator = new class extends Validator {
509
- validate(value) {
510
- assertValidation(Array.isArray(value), 'Value is not an "array"');
511
- return value;
512
- }
513
- }();
492
+ var anyArrayValidator = new AnyArrayValidator();
514
493
  function _array(options) {
515
494
  if (!options)
516
495
  return anyArrayValidator;
@@ -578,17 +557,33 @@ function _date(constraints) {
578
557
  var date = makeTupleRestIterable(_date);
579
558
 
580
559
  // src/validators/number.ts
581
- var _isMultipleOf;
582
- var _NumberValidator = class extends Validator {
560
+ var PRECISION = 6;
561
+ var MULTIPLIER = Math.pow(10, PRECISION);
562
+ function countDecimals(n) {
563
+ const match = n.toExponential().match(/^\d+(\.\d+)?e([+-]\d+)$/);
564
+ if (!match)
565
+ throw new RangeError(`Can't calculate digits for number "${n}"`);
566
+ const digits = (match[1] || ".").length - 1 - parseInt(match[2]);
567
+ return digits < 0 ? 0 : digits;
568
+ }
569
+ var AnyNumberValidator = class extends Validator {
570
+ validate(value) {
571
+ assertValidation(typeof value == "number", 'Value is not a "number"');
572
+ assertValidation(!isNaN(value), 'Number is "NaN"');
573
+ return value;
574
+ }
575
+ };
576
+ var NumberValidator = class extends Validator {
577
+ #isMultipleOf;
578
+ allowNaN;
579
+ exclusiveMaximum;
580
+ exclusiveMinimum;
581
+ maximum;
582
+ minimum;
583
+ multipleOf;
584
+ brand;
583
585
  constructor(constraints = {}) {
584
586
  super();
585
- __privateAdd(this, _isMultipleOf, void 0);
586
- __publicField(this, "allowNaN");
587
- __publicField(this, "exclusiveMaximum");
588
- __publicField(this, "exclusiveMinimum");
589
- __publicField(this, "maximum");
590
- __publicField(this, "minimum");
591
- __publicField(this, "multipleOf");
592
587
  const {
593
588
  allowNaN = false,
594
589
  exclusiveMaximum,
@@ -597,6 +592,8 @@ var _NumberValidator = class extends Validator {
597
592
  minimum = Number.NEGATIVE_INFINITY,
598
593
  multipleOf
599
594
  } = constraints;
595
+ if ("brand" in constraints)
596
+ this.brand = constraints.brand;
600
597
  assertSchema(maximum >= minimum, `Constraint "minimum" (${minimum}) is greater than "maximum" (${maximum})`);
601
598
  if (exclusiveMaximum !== void 0) {
602
599
  assertSchema(exclusiveMaximum > minimum, `Constraint "exclusiveMaximum" (${exclusiveMaximum}) must be greater than "minimum" (${minimum})`);
@@ -609,13 +606,19 @@ var _NumberValidator = class extends Validator {
609
606
  }
610
607
  if (multipleOf !== void 0) {
611
608
  assertSchema(multipleOf > 0, `Constraint "multipleOf" (${multipleOf}) must be greater than zero`);
612
- const bigMultipleOf = multipleOf * _NumberValidator.PRECISION;
613
- const bigInteger = bigMultipleOf % _NumberValidator.PRECISION;
614
- const bigDecimal = bigMultipleOf - Math.trunc(bigMultipleOf);
615
- if (bigInteger === 0) {
616
- __privateSet(this, _isMultipleOf, (value) => !(value % multipleOf));
617
- } else if (bigDecimal === 0) {
618
- __privateSet(this, _isMultipleOf, (value) => !(value * _NumberValidator.PRECISION % bigMultipleOf));
609
+ const decimals = countDecimals(multipleOf);
610
+ if (decimals === 0) {
611
+ this.#isMultipleOf = (value) => !(value % multipleOf);
612
+ } else if (decimals <= PRECISION) {
613
+ this.#isMultipleOf = (value) => {
614
+ try {
615
+ if (countDecimals(value) > PRECISION)
616
+ return false;
617
+ return !(value * MULTIPLIER % (multipleOf * MULTIPLIER));
618
+ } catch (error) {
619
+ throw new ValidationError(error.message);
620
+ }
621
+ };
619
622
  } else {
620
623
  assertSchema(false, `Constraint "multipleOf" (${multipleOf}) requires too much precision`);
621
624
  }
@@ -637,30 +640,28 @@ var _NumberValidator = class extends Validator {
637
640
  assertValidation(value <= this.maximum, `Number is greater than ${this.maximum}`);
638
641
  assertValidation(this.exclusiveMinimum == void 0 || value > this.exclusiveMinimum, `Number is less than or equal to ${this.exclusiveMinimum}`);
639
642
  assertValidation(this.exclusiveMaximum == void 0 || value < this.exclusiveMaximum, `Number is greater than or equal to ${this.exclusiveMaximum}`);
640
- assertValidation(__privateGet(this, _isMultipleOf) ? __privateGet(this, _isMultipleOf).call(this, value) : true, `Number is not a multiple of ${this.multipleOf}`);
643
+ assertValidation(this.#isMultipleOf ? this.#isMultipleOf(value) : true, `Number is not a multiple of ${this.multipleOf}`);
641
644
  return value;
642
645
  }
643
646
  };
644
- var NumberValidator = _NumberValidator;
645
- _isMultipleOf = new WeakMap();
646
- __publicField(NumberValidator, "PRECISION", 1e6);
647
- var anyNumberValidator = new class extends Validator {
648
- validate(value) {
649
- assertValidation(typeof value == "number", 'Value is not a "number"');
650
- assertValidation(!isNaN(value), 'Number is "NaN"');
651
- return value;
652
- }
653
- }();
647
+ var anyNumberValidator = new AnyNumberValidator();
654
648
  function _number(constraints) {
655
649
  return constraints ? new NumberValidator(constraints) : anyNumberValidator;
656
650
  }
657
651
  var number = makeTupleRestIterable(_number);
658
652
 
659
653
  // src/validators/string.ts
654
+ var AnyStringValidator = class extends Validator {
655
+ validate(value) {
656
+ assertValidation(typeof value == "string", 'Value is not a "string"');
657
+ return value;
658
+ }
659
+ };
660
660
  var StringValidator = class extends Validator {
661
661
  maxLength;
662
662
  minLength;
663
663
  pattern;
664
+ brand;
664
665
  constructor(constraints = {}) {
665
666
  super();
666
667
  const {
@@ -668,6 +669,8 @@ var StringValidator = class extends Validator {
668
669
  maxLength = Number.MAX_SAFE_INTEGER,
669
670
  pattern
670
671
  } = constraints;
672
+ if ("brand" in constraints)
673
+ this.brand = constraints.brand;
671
674
  assertSchema(minLength >= 0, `Constraint "minLength" (${minLength}) must be non-negative`);
672
675
  assertSchema(maxLength >= 0, `Constraint "maxLength" (${maxLength}) must be non-negative`);
673
676
  assertSchema(minLength <= maxLength, `Constraint "minLength" (${minLength}) is greater than "maxLength" (${maxLength})`);
@@ -683,12 +686,7 @@ var StringValidator = class extends Validator {
683
686
  return value;
684
687
  }
685
688
  };
686
- var anyStringValidator = new class extends Validator {
687
- validate(value) {
688
- assertValidation(typeof value == "string", 'Value is not a "string"');
689
- return value;
690
- }
691
- }();
689
+ var anyStringValidator = new AnyStringValidator();
692
690
  function _string(constraints) {
693
691
  return constraints ? new StringValidator(constraints) : anyStringValidator;
694
692
  }
@@ -705,6 +703,10 @@ function validate(validation, value, options = {}) {
705
703
  // Annotate the CommonJS export names for ESM import in node:
706
704
  0 && (module.exports = {
707
705
  AllOfValidator,
706
+ AnyArrayValidator,
707
+ AnyNumberValidator,
708
+ AnyObjectValidator,
709
+ AnyStringValidator,
708
710
  AnyValidator,
709
711
  ArrayValidator,
710
712
  BooleanValidator,
@@ -744,4 +746,4 @@ function validate(validation, value, options = {}) {
744
746
  tuple,
745
747
  validate
746
748
  });
747
- //# sourceMappingURL=index.cjs.map
749
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/errors.ts", "../src/types.ts", "../src/validators/any.ts", "../src/validators/constant.ts", "../src/validators/tuple.ts", "../src/validators/object.ts", "../src/utilities.ts", "../src/schema.ts", "../src/validators/union.ts", "../src/validators/array.ts", "../src/validators/boolean.ts", "../src/validators/date.ts", "../src/validators/number.ts", "../src/validators/string.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }