justus 0.5.3 → 0.5.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.
Files changed (89) hide show
  1. package/dist/dts-generator.cjs +21 -3
  2. package/dist/dts-generator.cjs.map +1 -1
  3. package/dist/dts-generator.mjs +21 -3
  4. package/dist/dts-generator.mjs.map +1 -1
  5. package/dist/extra/arn.cjs +1 -1
  6. package/dist/extra/arn.cjs.map +1 -1
  7. package/dist/extra/arn.mjs +1 -1
  8. package/dist/extra/arn.mjs.map +1 -1
  9. package/dist/index.cjs +13 -2
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.d.ts +18 -6
  12. package/dist/index.mjs +9 -2
  13. package/dist/index.mjs.map +1 -1
  14. package/dist/types.cjs +0 -7
  15. package/dist/types.cjs.map +1 -1
  16. package/dist/types.d.ts +7 -9
  17. package/dist/types.mjs +0 -6
  18. package/dist/types.mjs.map +1 -1
  19. package/dist/utilities.cjs +1 -0
  20. package/dist/utilities.cjs.map +1 -1
  21. package/dist/utilities.d.ts +2 -2
  22. package/dist/utilities.mjs +1 -0
  23. package/dist/utilities.mjs.map +1 -1
  24. package/dist/validators/array.cjs +6 -6
  25. package/dist/validators/array.cjs.map +1 -1
  26. package/dist/validators/array.d.ts +6 -6
  27. package/dist/validators/array.mjs +4 -4
  28. package/dist/validators/array.mjs.map +1 -1
  29. package/dist/validators/bigint.cjs +146 -0
  30. package/dist/validators/bigint.cjs.map +6 -0
  31. package/dist/validators/bigint.d.ts +46 -0
  32. package/dist/validators/bigint.mjs +118 -0
  33. package/dist/validators/bigint.mjs.map +6 -0
  34. package/dist/validators/boolean.cjs +5 -5
  35. package/dist/validators/boolean.cjs.map +1 -1
  36. package/dist/validators/boolean.d.ts +2 -2
  37. package/dist/validators/boolean.mjs +4 -4
  38. package/dist/validators/boolean.mjs.map +1 -1
  39. package/dist/validators/constant.cjs +2 -1
  40. package/dist/validators/constant.cjs.map +1 -1
  41. package/dist/validators/constant.d.ts +2 -2
  42. package/dist/validators/constant.mjs +2 -1
  43. package/dist/validators/constant.mjs.map +1 -1
  44. package/dist/validators/date.cjs +4 -4
  45. package/dist/validators/date.cjs.map +1 -1
  46. package/dist/validators/date.d.ts +2 -2
  47. package/dist/validators/date.mjs +3 -3
  48. package/dist/validators/date.mjs.map +1 -1
  49. package/dist/validators/never.cjs +1 -1
  50. package/dist/validators/never.cjs.map +1 -1
  51. package/dist/validators/never.mjs +2 -2
  52. package/dist/validators/never.mjs.map +1 -1
  53. package/dist/validators/number.cjs +9 -9
  54. package/dist/validators/number.cjs.map +1 -1
  55. package/dist/validators/number.d.ts +4 -4
  56. package/dist/validators/number.mjs +8 -8
  57. package/dist/validators/number.mjs.map +1 -1
  58. package/dist/validators/object.cjs +13 -11
  59. package/dist/validators/object.cjs.map +1 -1
  60. package/dist/validators/object.d.ts +2 -2
  61. package/dist/validators/object.mjs +12 -10
  62. package/dist/validators/object.mjs.map +1 -1
  63. package/dist/validators/optional.cjs +1 -1
  64. package/dist/validators/optional.cjs.map +1 -1
  65. package/dist/validators/optional.mjs +2 -2
  66. package/dist/validators/optional.mjs.map +1 -1
  67. package/dist/validators/string.cjs +6 -6
  68. package/dist/validators/string.cjs.map +1 -1
  69. package/dist/validators/string.d.ts +4 -4
  70. package/dist/validators/string.mjs +5 -5
  71. package/dist/validators/string.mjs.map +1 -1
  72. package/dist/validators/union.d.ts +2 -2
  73. package/package.json +3 -5
  74. package/src/dts-generator.ts +22 -3
  75. package/src/extra/arn.ts +1 -1
  76. package/src/index.ts +26 -8
  77. package/src/types.ts +7 -12
  78. package/src/utilities.ts +3 -1
  79. package/src/validators/array.ts +9 -7
  80. package/src/validators/bigint.ts +147 -0
  81. package/src/validators/boolean.ts +3 -3
  82. package/src/validators/constant.ts +4 -3
  83. package/src/validators/date.ts +2 -2
  84. package/src/validators/never.ts +2 -2
  85. package/src/validators/number.ts +10 -10
  86. package/src/validators/object.ts +11 -10
  87. package/src/validators/optional.ts +2 -2
  88. package/src/validators/string.ts +7 -7
  89. package/src/validators/union.ts +2 -2
@@ -46,7 +46,7 @@ export interface BrandedNumberConstraints<B extends string> extends NumberConstr
46
46
  /** A `Validator` validating any `number`. */
47
47
  export class AnyNumberValidator extends AbstractValidator<number> {
48
48
  validate(value: unknown): number {
49
- assertValidation(typeof value == 'number', 'Value is not a "number"')
49
+ assertValidation(typeof value === 'number', 'Value is not a "number"')
50
50
  assertValidation(! isNaN(value), 'Number is "NaN"')
51
51
  return value
52
52
  }
@@ -131,13 +131,13 @@ export class NumberValidator<N extends number = number> extends AbstractValidato
131
131
 
132
132
  validate(value: unknown): N {
133
133
  // Allow parsing from strings
134
- if ((typeof value == 'string') && (this.fromString)) {
134
+ if ((typeof value === 'string') && (this.fromString)) {
135
135
  const parsed = +`${value}`
136
136
  assertValidation(! isNaN(parsed), 'Number can not be parsed from string')
137
137
  value = parsed
138
138
  }
139
139
 
140
- assertValidation(typeof value == 'number', 'Value is not a "number"')
140
+ assertValidation(typeof value === 'number', 'Value is not a "number"')
141
141
 
142
142
  if (isNaN(value)) {
143
143
  assertValidation(this.allowNaN, 'Number is "NaN"')
@@ -147,10 +147,10 @@ export class NumberValidator<N extends number = number> extends AbstractValidato
147
147
  assertValidation(value >= this.minimum, `Number is less than ${this.minimum}`)
148
148
  assertValidation(value <= this.maximum, `Number is greater than ${this.maximum}`)
149
149
 
150
- assertValidation((this.exclusiveMinimum == undefined) || (value > this.exclusiveMinimum),
150
+ assertValidation((this.exclusiveMinimum === undefined) || (value > this.exclusiveMinimum),
151
151
  `Number is less than or equal to ${this.exclusiveMinimum}`)
152
152
 
153
- assertValidation((this.exclusiveMaximum == undefined) || (value < this.exclusiveMaximum),
153
+ assertValidation((this.exclusiveMaximum === undefined) || (value < this.exclusiveMaximum),
154
154
  `Number is greater than or equal to ${this.exclusiveMaximum}`)
155
155
 
156
156
  assertValidation(this.#isMultipleOf ? this.#isMultipleOf(value) : true,
@@ -160,12 +160,12 @@ export class NumberValidator<N extends number = number> extends AbstractValidato
160
160
  }
161
161
  }
162
162
 
163
- export function numberFactory(constraints: NumberConstraints): NumberValidator<number>
164
- export function numberFactory<N extends number>(constraints: NumberConstraints): NumberValidator<N>
165
- export function numberFactory<B extends string>(constraints: BrandedNumberConstraints<B>): NumberValidator<number & Branding<B>>
166
- export function numberFactory(constraints: NumberConstraints): Validator<number> {
163
+ export function numberValidatorFactory(constraints: NumberConstraints): NumberValidator<number>
164
+ export function numberValidatorFactory<N extends number>(constraints: NumberConstraints): NumberValidator<N>
165
+ export function numberValidatorFactory<B extends string>(constraints: BrandedNumberConstraints<B>): NumberValidator<number & Branding<B>>
166
+ export function numberValidatorFactory(constraints: NumberConstraints): Validator<number> {
167
167
  return new NumberValidator(constraints)
168
168
  }
169
169
 
170
170
  /** Validate `number`s. */
171
- export const number = makeValidatorFactory(new AnyNumberValidator(), numberFactory)
171
+ export const number = makeValidatorFactory(new AnyNumberValidator(), numberValidatorFactory)
@@ -1,6 +1,6 @@
1
1
  import { assertValidation, ValidationErrorBuilder } from '../errors'
2
2
  import { registry } from '../registry'
3
- import { AbstractValidator, defaultValidationOptions, makeValidatorFactory } from '../types'
3
+ import { AbstractValidator, makeValidatorFactory } from '../types'
4
4
  import { getValidator } from '../utilities'
5
5
 
6
6
  import type {
@@ -17,7 +17,7 @@ import type {
17
17
  /** A `Validator` validating any `object`. */
18
18
  export class AnyObjectValidator extends AbstractValidator<Record<string, any>> {
19
19
  validate(value: unknown): Record<string, any> {
20
- assertValidation(typeof value == 'object', 'Value is not an "object"')
20
+ assertValidation(typeof value === 'object', 'Value is not an "object"')
21
21
  assertValidation(value !== null, 'Value is "null"')
22
22
  return value
23
23
  }
@@ -43,11 +43,11 @@ export class ObjectValidator<S extends Schema> extends AbstractValidator<InferSc
43
43
  this.schema = schema
44
44
  }
45
45
 
46
- validate(value: unknown, options: ValidationOptions = defaultValidationOptions): InferSchema<S> {
46
+ validate(value: unknown, options: ValidationOptions = {}): InferSchema<S> {
47
47
  assertValidation(typeof value === 'object', 'Value is not an "object"')
48
48
  assertValidation(value !== null, 'Value is "null"')
49
49
 
50
- const { stripAdditionalProperties, stripOptionalNulls } = options
50
+ const { stripAdditionalProperties, stripOptionalNulls, partialValidation } = options
51
51
 
52
52
  const record: { [ k in string | number | symbol ]?: unknown } = value
53
53
  const builder = new ValidationErrorBuilder()
@@ -63,19 +63,20 @@ export class ObjectValidator<S extends Schema> extends AbstractValidator<InferSc
63
63
  }
64
64
 
65
65
  // if we have no value, then we have few possibilities:
66
+ // - we are performing a partial validation, so we ignore
66
67
  // - the (optional) validator provides a valid value
67
68
  // - the validator is optional, so we can simply ignore
68
69
  // - the validator is not optional, so the property is missing
69
70
  if (original === undefined) {
71
+ if (partialValidation) continue
70
72
  try {
71
73
  // try to validate, the validator _might_ be giving us a value
72
74
  const validated = validator.validate(original, options)
73
75
  // put the validated value in the clone, unless optional and undefined
74
- if (! (optional && (validated == undefined))) clone[key] = validated
76
+ if (! (optional && (validated === undefined))) clone[key] = validated
75
77
  } catch (error) {
76
78
  if (optional) continue // original was undefined, so we can skip!
77
79
  builder.record('Required property missing', key)
78
- // builder.record(error, key) // double error!
79
80
  }
80
81
 
81
82
  continue
@@ -85,7 +86,7 @@ export class ObjectValidator<S extends Schema> extends AbstractValidator<InferSc
85
86
  try {
86
87
  const validated = validator.validate(original, options)
87
88
  // put the validated value in the clone, unless optional and undefined
88
- if (! (optional && (validated == undefined))) clone[key] = validated
89
+ if (! (optional && (validated === undefined))) clone[key] = validated
89
90
  } catch (error) {
90
91
  builder.record(error, key)
91
92
  }
@@ -114,7 +115,7 @@ export class ObjectValidator<S extends Schema> extends AbstractValidator<InferSc
114
115
  }
115
116
  }
116
117
 
117
- export function objectFactory<S extends Schema>(schema: S): S & {
118
+ export function objectValidatorFactory<S extends Schema>(schema: S): S & {
118
119
  [Symbol.iterator](): Generator<TupleRestParameter<InferSchema<S>, InferInputSchema<S>>>
119
120
  } {
120
121
  const validator = new ObjectValidator(schema)
@@ -130,11 +131,11 @@ export function objectFactory<S extends Schema>(schema: S): S & {
130
131
  }
131
132
 
132
133
  /** Validate `object`s. */
133
- export const object = makeValidatorFactory(new AnyObjectValidator(), objectFactory)
134
+ export const object = makeValidatorFactory(new AnyObjectValidator(), objectValidatorFactory)
134
135
 
135
136
  /** Validate `Object`s containing only the specified elements. */
136
137
  export function objectOf<V extends Validation>(validation: V): Validator<Record<string, InferValidation<V>>> {
137
- return new ObjectValidator({ [Symbol.justusAdditionalValidator]: getValidator(validation) })
138
+ return new ObjectValidator<any>({ [Symbol.justusAdditionalValidator]: getValidator(validation) })
138
139
  }
139
140
 
140
141
  // Register our "object" validator
@@ -1,4 +1,4 @@
1
- import { AbstractValidator, defaultValidationOptions } from '../types'
1
+ import { AbstractValidator } from '../types'
2
2
  import { getValidator } from '../utilities'
3
3
 
4
4
  import type { InferInput, InferValidation, Validation, ValidationOptions, Validator } from '../types'
@@ -27,7 +27,7 @@ export class OptionalValidator<
27
27
  }
28
28
 
29
29
  try {
30
- this.defaultValue = validator.validate(defaultValue, defaultValidationOptions)
30
+ this.defaultValue = validator.validate(defaultValue, {})
31
31
  } catch (cause) {
32
32
  throw new TypeError('Default value does not match validator', { cause })
33
33
  }
@@ -22,7 +22,7 @@ export interface BrandedStringConstraints<B extends string> extends StringConstr
22
22
  /** A `Validator` validating any `string`. */
23
23
  export class AnyStringValidator extends AbstractValidator<string> {
24
24
  validate(value: unknown): string {
25
- assertValidation(typeof value == 'string', 'Value is not a "string"')
25
+ assertValidation(typeof value === 'string', 'Value is not a "string"')
26
26
  return value
27
27
  }
28
28
  }
@@ -55,7 +55,7 @@ export class StringValidator<S extends string = string, I = string> extends Abst
55
55
  }
56
56
 
57
57
  validate(value: unknown): S {
58
- assertValidation(typeof value == 'string', 'Value is not a "string"')
58
+ assertValidation(typeof value === 'string', 'Value is not a "string"')
59
59
 
60
60
  assertValidation(value.length >= this.minLength,
61
61
  `String must have a minimum length of ${this.minLength}`)
@@ -70,12 +70,12 @@ export class StringValidator<S extends string = string, I = string> extends Abst
70
70
  }
71
71
  }
72
72
 
73
- export function stringFactory(constraints: StringConstraints): StringValidator<string>
74
- export function stringFactory<S extends string>(constraints: StringConstraints): StringValidator<S>
75
- export function stringFactory<B extends string>(constraints: BrandedStringConstraints<B>): StringValidator<string & Branding<B>>
76
- export function stringFactory(constraints: StringConstraints): Validator<string> {
73
+ export function stringValidatorFactory(constraints: StringConstraints): StringValidator<string>
74
+ export function stringValidatorFactory<S extends string>(constraints: StringConstraints): StringValidator<S>
75
+ export function stringValidatorFactory<B extends string>(constraints: BrandedStringConstraints<B>): StringValidator<string & Branding<B>>
76
+ export function stringValidatorFactory(constraints: StringConstraints): Validator<string> {
77
77
  return new StringValidator(constraints)
78
78
  }
79
79
 
80
80
  /** Validate `string`s. */
81
- export const string = makeValidatorFactory(new AnyStringValidator(), stringFactory)
81
+ export const string = makeValidatorFactory(new AnyStringValidator(), stringValidatorFactory)
@@ -31,7 +31,7 @@ export type InferOneOfInput<A extends OneOfArguments> =
31
31
  A extends readonly [ infer First, ...infer Rest ] ?
32
32
  First extends Validation ?
33
33
  Rest extends OneOfArguments ?
34
- InferInput<First> | InferOneOfValidation<Rest> :
34
+ InferInput<First> | InferOneOfInput<Rest> :
35
35
  InferInput<First> :
36
36
  never :
37
37
  A extends readonly (infer Type)[] ?
@@ -86,7 +86,7 @@ export type InferAllOfInput<A extends AllOfArguments> =
86
86
  A extends readonly [ infer First, ...infer Rest ] ?
87
87
  First extends Validation ?
88
88
  Rest extends AllOfArguments ?
89
- InferInput<First> & InferAllOfValidation<Rest> :
89
+ InferInput<First> & InferAllOfInput<Rest> :
90
90
  InferInput<First> :
91
91
  never :
92
92
  never