justus 0.5.2 → 0.5.4
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/dts-generator.cjs +22 -7
- package/dist/dts-generator.cjs.map +1 -1
- package/dist/dts-generator.mjs +22 -7
- package/dist/dts-generator.mjs.map +1 -1
- package/dist/extra/arn.cjs +1 -1
- package/dist/extra/arn.cjs.map +1 -1
- package/dist/extra/arn.mjs +1 -1
- package/dist/extra/arn.mjs.map +1 -1
- package/dist/index.cjs +13 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.mjs +9 -2
- package/dist/index.mjs.map +1 -1
- package/dist/types.cjs +0 -7
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.ts +11 -13
- package/dist/types.mjs +0 -6
- package/dist/types.mjs.map +1 -1
- package/dist/utilities.cjs +1 -0
- package/dist/utilities.cjs.map +1 -1
- package/dist/utilities.mjs +1 -0
- package/dist/utilities.mjs.map +1 -1
- package/dist/validators/bigint.cjs +146 -0
- package/dist/validators/bigint.cjs.map +6 -0
- package/dist/validators/bigint.d.ts +46 -0
- package/dist/validators/bigint.mjs +118 -0
- package/dist/validators/bigint.mjs.map +6 -0
- package/dist/validators/boolean.cjs +1 -1
- package/dist/validators/boolean.cjs.map +1 -1
- package/dist/validators/boolean.mjs +1 -1
- package/dist/validators/boolean.mjs.map +1 -1
- package/dist/validators/constant.cjs +2 -1
- package/dist/validators/constant.cjs.map +1 -1
- package/dist/validators/constant.d.ts +2 -2
- package/dist/validators/constant.mjs +2 -1
- package/dist/validators/constant.mjs.map +1 -1
- package/dist/validators/never.cjs +1 -1
- package/dist/validators/never.cjs.map +1 -1
- package/dist/validators/never.mjs +2 -2
- package/dist/validators/never.mjs.map +1 -1
- package/dist/validators/number.cjs +5 -5
- package/dist/validators/number.cjs.map +1 -1
- package/dist/validators/number.mjs +5 -5
- package/dist/validators/number.mjs.map +1 -1
- package/dist/validators/object.cjs +7 -5
- package/dist/validators/object.cjs.map +1 -1
- package/dist/validators/object.mjs +8 -6
- package/dist/validators/object.mjs.map +1 -1
- package/dist/validators/optional.cjs +1 -1
- package/dist/validators/optional.cjs.map +1 -1
- package/dist/validators/optional.mjs +2 -2
- package/dist/validators/optional.mjs.map +1 -1
- package/dist/validators/string.cjs +2 -2
- package/dist/validators/string.cjs.map +1 -1
- package/dist/validators/string.mjs +2 -2
- package/dist/validators/string.mjs.map +1 -1
- package/package.json +3 -8
- package/src/dts-generator.ts +23 -6
- package/src/extra/arn.ts +1 -1
- package/src/index.ts +20 -2
- package/src/types.ts +11 -16
- package/src/utilities.ts +1 -0
- package/src/validators/bigint.ts +147 -0
- package/src/validators/boolean.ts +1 -1
- package/src/validators/constant.ts +4 -3
- package/src/validators/never.ts +2 -2
- package/src/validators/number.ts +5 -5
- package/src/validators/object.ts +8 -7
- package/src/validators/optional.ts +2 -2
- package/src/validators/string.ts +2 -2
|
@@ -39,7 +39,7 @@ function countDecimals(n) {
|
|
|
39
39
|
}
|
|
40
40
|
var AnyNumberValidator = class extends import_types.AbstractValidator {
|
|
41
41
|
validate(value) {
|
|
42
|
-
(0, import_errors.assertValidation)(typeof value
|
|
42
|
+
(0, import_errors.assertValidation)(typeof value === "number", 'Value is not a "number"');
|
|
43
43
|
(0, import_errors.assertValidation)(!isNaN(value), 'Number is "NaN"');
|
|
44
44
|
return value;
|
|
45
45
|
}
|
|
@@ -114,12 +114,12 @@ var NumberValidator = class extends import_types.AbstractValidator {
|
|
|
114
114
|
this.multipleOf = multipleOf;
|
|
115
115
|
}
|
|
116
116
|
validate(value) {
|
|
117
|
-
if (typeof value
|
|
117
|
+
if (typeof value === "string" && this.fromString) {
|
|
118
118
|
const parsed = +`${value}`;
|
|
119
119
|
(0, import_errors.assertValidation)(!isNaN(parsed), "Number can not be parsed from string");
|
|
120
120
|
value = parsed;
|
|
121
121
|
}
|
|
122
|
-
(0, import_errors.assertValidation)(typeof value
|
|
122
|
+
(0, import_errors.assertValidation)(typeof value === "number", 'Value is not a "number"');
|
|
123
123
|
if (isNaN(value)) {
|
|
124
124
|
(0, import_errors.assertValidation)(this.allowNaN, 'Number is "NaN"');
|
|
125
125
|
return value;
|
|
@@ -127,11 +127,11 @@ var NumberValidator = class extends import_types.AbstractValidator {
|
|
|
127
127
|
(0, import_errors.assertValidation)(value >= this.minimum, `Number is less than ${this.minimum}`);
|
|
128
128
|
(0, import_errors.assertValidation)(value <= this.maximum, `Number is greater than ${this.maximum}`);
|
|
129
129
|
(0, import_errors.assertValidation)(
|
|
130
|
-
this.exclusiveMinimum
|
|
130
|
+
this.exclusiveMinimum === void 0 || value > this.exclusiveMinimum,
|
|
131
131
|
`Number is less than or equal to ${this.exclusiveMinimum}`
|
|
132
132
|
);
|
|
133
133
|
(0, import_errors.assertValidation)(
|
|
134
|
-
this.exclusiveMaximum
|
|
134
|
+
this.exclusiveMaximum === void 0 || value < this.exclusiveMaximum,
|
|
135
135
|
`Number is greater than or equal to ${this.exclusiveMaximum}`
|
|
136
136
|
);
|
|
137
137
|
(0, import_errors.assertValidation)(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/validators/number.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAgE;AAChE,mBAAwD;AAMxD,IAAM,YAAY;AAClB,IAAM,aAAa,KAAK,IAAI,IAAI,SAAS;AAEzC,SAAS,cAAc,GAAmB;AAExC,QAAM,QAAQ,EAAE,cAAc,EAAE,MAAM,yBAAyB;AAC/D,MAAI,CAAE;AAAO,UAAM,IAAI,WAAW,sCAAsC,CAAC,GAAG;AAE5E,QAAM,UAAW,MAAM,CAAC,KAAK,KAAK,SAAS,IAAM,SAAS,MAAM,CAAC,CAAC;AAClE,SAAO,SAAS,IAAI,IAAI;AAC1B;AA6BO,IAAM,qBAAN,cAAiC,+BAA0B;AAAA,EAChE,SAAS,OAAwB;AAC/B,wCAAiB,OAAO,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -12,7 +12,7 @@ function countDecimals(n) {
|
|
|
12
12
|
}
|
|
13
13
|
var AnyNumberValidator = class extends AbstractValidator {
|
|
14
14
|
validate(value) {
|
|
15
|
-
assertValidation(typeof value
|
|
15
|
+
assertValidation(typeof value === "number", 'Value is not a "number"');
|
|
16
16
|
assertValidation(!isNaN(value), 'Number is "NaN"');
|
|
17
17
|
return value;
|
|
18
18
|
}
|
|
@@ -87,12 +87,12 @@ var NumberValidator = class extends AbstractValidator {
|
|
|
87
87
|
this.multipleOf = multipleOf;
|
|
88
88
|
}
|
|
89
89
|
validate(value) {
|
|
90
|
-
if (typeof value
|
|
90
|
+
if (typeof value === "string" && this.fromString) {
|
|
91
91
|
const parsed = +`${value}`;
|
|
92
92
|
assertValidation(!isNaN(parsed), "Number can not be parsed from string");
|
|
93
93
|
value = parsed;
|
|
94
94
|
}
|
|
95
|
-
assertValidation(typeof value
|
|
95
|
+
assertValidation(typeof value === "number", 'Value is not a "number"');
|
|
96
96
|
if (isNaN(value)) {
|
|
97
97
|
assertValidation(this.allowNaN, 'Number is "NaN"');
|
|
98
98
|
return value;
|
|
@@ -100,11 +100,11 @@ var NumberValidator = class extends AbstractValidator {
|
|
|
100
100
|
assertValidation(value >= this.minimum, `Number is less than ${this.minimum}`);
|
|
101
101
|
assertValidation(value <= this.maximum, `Number is greater than ${this.maximum}`);
|
|
102
102
|
assertValidation(
|
|
103
|
-
this.exclusiveMinimum
|
|
103
|
+
this.exclusiveMinimum === void 0 || value > this.exclusiveMinimum,
|
|
104
104
|
`Number is less than or equal to ${this.exclusiveMinimum}`
|
|
105
105
|
);
|
|
106
106
|
assertValidation(
|
|
107
|
-
this.exclusiveMaximum
|
|
107
|
+
this.exclusiveMaximum === void 0 || value < this.exclusiveMaximum,
|
|
108
108
|
`Number is greater than or equal to ${this.exclusiveMaximum}`
|
|
109
109
|
);
|
|
110
110
|
assertValidation(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/validators/number.ts"],
|
|
4
|
-
"mappings": ";AAAA,SAAS,cAAc,kBAAkB,uBAAuB;AAChE,SAAS,mBAAmB,4BAA4B;AAMxD,IAAM,YAAY;AAClB,IAAM,aAAa,KAAK,IAAI,IAAI,SAAS;AAEzC,SAAS,cAAc,GAAmB;AAExC,QAAM,QAAQ,EAAE,cAAc,EAAE,MAAM,yBAAyB;AAC/D,MAAI,CAAE;AAAO,UAAM,IAAI,WAAW,sCAAsC,CAAC,GAAG;AAE5E,QAAM,UAAW,MAAM,CAAC,KAAK,KAAK,SAAS,IAAM,SAAS,MAAM,CAAC,CAAC;AAClE,SAAO,SAAS,IAAI,IAAI;AAC1B;AA6BO,IAAM,qBAAN,cAAiC,kBAA0B;AAAA,EAChE,SAAS,OAAwB;AAC/B,qBAAiB,OAAO,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -33,7 +33,7 @@ var import_types = require("../types.cjs");
|
|
|
33
33
|
var import_utilities = require("../utilities.cjs");
|
|
34
34
|
var AnyObjectValidator = class extends import_types.AbstractValidator {
|
|
35
35
|
validate(value) {
|
|
36
|
-
(0, import_errors.assertValidation)(typeof value
|
|
36
|
+
(0, import_errors.assertValidation)(typeof value === "object", 'Value is not an "object"');
|
|
37
37
|
(0, import_errors.assertValidation)(value !== null, 'Value is "null"');
|
|
38
38
|
return value;
|
|
39
39
|
}
|
|
@@ -52,10 +52,10 @@ var ObjectValidator = class extends import_types.AbstractValidator {
|
|
|
52
52
|
}
|
|
53
53
|
this.schema = schema;
|
|
54
54
|
}
|
|
55
|
-
validate(value, options =
|
|
55
|
+
validate(value, options = {}) {
|
|
56
56
|
(0, import_errors.assertValidation)(typeof value === "object", 'Value is not an "object"');
|
|
57
57
|
(0, import_errors.assertValidation)(value !== null, 'Value is "null"');
|
|
58
|
-
const { stripAdditionalProperties, stripOptionalNulls } = options;
|
|
58
|
+
const { stripAdditionalProperties, stripOptionalNulls, partialValidation } = options;
|
|
59
59
|
const record = value;
|
|
60
60
|
const builder = new import_errors.ValidationErrorBuilder();
|
|
61
61
|
const clone = {};
|
|
@@ -66,9 +66,11 @@ var ObjectValidator = class extends import_types.AbstractValidator {
|
|
|
66
66
|
continue;
|
|
67
67
|
}
|
|
68
68
|
if (original === void 0) {
|
|
69
|
+
if (partialValidation)
|
|
70
|
+
continue;
|
|
69
71
|
try {
|
|
70
72
|
const validated = validator.validate(original, options);
|
|
71
|
-
if (!(optional && validated
|
|
73
|
+
if (!(optional && validated === void 0))
|
|
72
74
|
clone[key] = validated;
|
|
73
75
|
} catch (error) {
|
|
74
76
|
if (optional)
|
|
@@ -79,7 +81,7 @@ var ObjectValidator = class extends import_types.AbstractValidator {
|
|
|
79
81
|
}
|
|
80
82
|
try {
|
|
81
83
|
const validated = validator.validate(original, options);
|
|
82
|
-
if (!(optional && validated
|
|
84
|
+
if (!(optional && validated === void 0))
|
|
83
85
|
clone[key] = validated;
|
|
84
86
|
} catch (error) {
|
|
85
87
|
builder.record(error, key);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/validators/object.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAyD;AACzD,sBAAyB;AACzB,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// validators/object.ts
|
|
2
2
|
import { assertValidation, ValidationErrorBuilder } from "../errors.mjs";
|
|
3
3
|
import { registry } from "../registry.mjs";
|
|
4
|
-
import { AbstractValidator,
|
|
4
|
+
import { AbstractValidator, makeValidatorFactory } from "../types.mjs";
|
|
5
5
|
import { getValidator } from "../utilities.mjs";
|
|
6
6
|
var AnyObjectValidator = class extends AbstractValidator {
|
|
7
7
|
validate(value) {
|
|
8
|
-
assertValidation(typeof value
|
|
8
|
+
assertValidation(typeof value === "object", 'Value is not an "object"');
|
|
9
9
|
assertValidation(value !== null, 'Value is "null"');
|
|
10
10
|
return value;
|
|
11
11
|
}
|
|
@@ -24,10 +24,10 @@ var ObjectValidator = class extends AbstractValidator {
|
|
|
24
24
|
}
|
|
25
25
|
this.schema = schema;
|
|
26
26
|
}
|
|
27
|
-
validate(value, options =
|
|
27
|
+
validate(value, options = {}) {
|
|
28
28
|
assertValidation(typeof value === "object", 'Value is not an "object"');
|
|
29
29
|
assertValidation(value !== null, 'Value is "null"');
|
|
30
|
-
const { stripAdditionalProperties, stripOptionalNulls } = options;
|
|
30
|
+
const { stripAdditionalProperties, stripOptionalNulls, partialValidation } = options;
|
|
31
31
|
const record = value;
|
|
32
32
|
const builder = new ValidationErrorBuilder();
|
|
33
33
|
const clone = {};
|
|
@@ -38,9 +38,11 @@ var ObjectValidator = class extends AbstractValidator {
|
|
|
38
38
|
continue;
|
|
39
39
|
}
|
|
40
40
|
if (original === void 0) {
|
|
41
|
+
if (partialValidation)
|
|
42
|
+
continue;
|
|
41
43
|
try {
|
|
42
44
|
const validated = validator.validate(original, options);
|
|
43
|
-
if (!(optional && validated
|
|
45
|
+
if (!(optional && validated === void 0))
|
|
44
46
|
clone[key] = validated;
|
|
45
47
|
} catch (error) {
|
|
46
48
|
if (optional)
|
|
@@ -51,7 +53,7 @@ var ObjectValidator = class extends AbstractValidator {
|
|
|
51
53
|
}
|
|
52
54
|
try {
|
|
53
55
|
const validated = validator.validate(original, options);
|
|
54
|
-
if (!(optional && validated
|
|
56
|
+
if (!(optional && validated === void 0))
|
|
55
57
|
clone[key] = validated;
|
|
56
58
|
} catch (error) {
|
|
57
59
|
builder.record(error, key);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/validators/object.ts"],
|
|
4
|
-
"mappings": ";AAAA,SAAS,kBAAkB,8BAA8B;AACzD,SAAS,gBAAgB;AACzB,SAAS,mBAAmB,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -38,7 +38,7 @@ var OptionalValidator = class extends import_types.AbstractValidator {
|
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
40
|
try {
|
|
41
|
-
this.defaultValue = validator.validate(defaultValue,
|
|
41
|
+
this.defaultValue = validator.validate(defaultValue, {});
|
|
42
42
|
} catch (cause) {
|
|
43
43
|
throw new TypeError("Default value does not match validator", { cause });
|
|
44
44
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/validators/optional.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkC;AAClC,uBAA6B;AAOtB,IAAM,oBAAN,cAIG,+BAA0E;AAAA,EAClF;AAAA,EACA;AAAA,EAKA,YAAY,WAAyB,cAAkB;AACrD,UAAM;AACN,SAAK,YAAY;AACjB,SAAK,WAAY,iBAAiB;AAClC,QAAI,KAAK,UAAU;AACjB,WAAK,eAAe;AACpB;AAAA,IACF;AAEA,QAAI;AACF,WAAK,eAAe,UAAU,SAAS,cAAc,CAAC,CAAC;AAAA,IACzD,SAAS,OAAO;AACd,YAAM,IAAI,UAAU,0CAA0C,EAAE,MAAM,CAAC;AAAA,IACzE;AAAA,EACF;AAAA,EAGA,SAAS,OAAgB,SAA4C;AACnE,QAAI,UAAU;AAAW,aAAO,KAAK;AACrC,WAAO,KAAK,UAAU,SAAS,OAAO,OAAO;AAAA,EAC/C;AACF;AAeO,SAAS,SAEd,YAAe,cAA2E;AAC1F,QAAM,gBAAY,+BAAa,UAAU;AACzC,SAAO,IAAI,kBAAkB,WAAW,YAAY;AACtD;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// validators/optional.ts
|
|
2
|
-
import { AbstractValidator
|
|
2
|
+
import { AbstractValidator } from "../types.mjs";
|
|
3
3
|
import { getValidator } from "../utilities.mjs";
|
|
4
4
|
var OptionalValidator = class extends AbstractValidator {
|
|
5
5
|
validator;
|
|
@@ -13,7 +13,7 @@ var OptionalValidator = class extends AbstractValidator {
|
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
15
|
try {
|
|
16
|
-
this.defaultValue = validator.validate(defaultValue,
|
|
16
|
+
this.defaultValue = validator.validate(defaultValue, {});
|
|
17
17
|
} catch (cause) {
|
|
18
18
|
throw new TypeError("Default value does not match validator", { cause });
|
|
19
19
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/validators/optional.ts"],
|
|
4
|
-
"mappings": ";AAAA,SAAS,
|
|
4
|
+
"mappings": ";AAAA,SAAS,yBAAyB;AAClC,SAAS,oBAAoB;AAOtB,IAAM,oBAAN,cAIG,kBAA0E;AAAA,EAClF;AAAA,EACA;AAAA,EAKA,YAAY,WAAyB,cAAkB;AACrD,UAAM;AACN,SAAK,YAAY;AACjB,SAAK,WAAY,iBAAiB;AAClC,QAAI,KAAK,UAAU;AACjB,WAAK,eAAe;AACpB;AAAA,IACF;AAEA,QAAI;AACF,WAAK,eAAe,UAAU,SAAS,cAAc,CAAC,CAAC;AAAA,IACzD,SAAS,OAAO;AACd,YAAM,IAAI,UAAU,0CAA0C,EAAE,MAAM,CAAC;AAAA,IACzE;AAAA,EACF;AAAA,EAGA,SAAS,OAAgB,SAA4C;AACnE,QAAI,UAAU;AAAW,aAAO,KAAK;AACrC,WAAO,KAAK,UAAU,SAAS,OAAO,OAAO;AAAA,EAC/C;AACF;AAeO,SAAS,SAEd,YAAe,cAA2E;AAC1F,QAAM,YAAY,aAAa,UAAU;AACzC,SAAO,IAAI,kBAAkB,WAAW,YAAY;AACtD;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -30,7 +30,7 @@ var import_errors = require("../errors.cjs");
|
|
|
30
30
|
var import_types = require("../types.cjs");
|
|
31
31
|
var AnyStringValidator = class extends import_types.AbstractValidator {
|
|
32
32
|
validate(value) {
|
|
33
|
-
(0, import_errors.assertValidation)(typeof value
|
|
33
|
+
(0, import_errors.assertValidation)(typeof value === "string", 'Value is not a "string"');
|
|
34
34
|
return value;
|
|
35
35
|
}
|
|
36
36
|
};
|
|
@@ -56,7 +56,7 @@ var StringValidator = class extends import_types.AbstractValidator {
|
|
|
56
56
|
this.pattern = pattern;
|
|
57
57
|
}
|
|
58
58
|
validate(value) {
|
|
59
|
-
(0, import_errors.assertValidation)(typeof value
|
|
59
|
+
(0, import_errors.assertValidation)(typeof value === "string", 'Value is not a "string"');
|
|
60
60
|
(0, import_errors.assertValidation)(
|
|
61
61
|
value.length >= this.minLength,
|
|
62
62
|
`String must have a minimum length of ${this.minLength}`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/validators/string.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA+C;AAC/C,mBAAwD;AAqBjD,IAAM,qBAAN,cAAiC,+BAA0B;AAAA,EAChE,SAAS,OAAwB;AAC/B,wCAAiB,OAAO,
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA+C;AAC/C,mBAAwD;AAqBjD,IAAM,qBAAN,cAAiC,+BAA0B;AAAA,EAChE,SAAS,OAAwB;AAC/B,wCAAiB,OAAO,UAAU,UAAU,yBAAyB;AACrE,WAAO;AAAA,EACT;AACF;AAGO,IAAM,kBAAN,cAAqE,+BAAwB;AAAA,EACzF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,cAAiC,CAAC,GAAG;AAC/C,UAAM;AAEN,UAAM;AAAA,MACJ,YAAY;AAAA,MACZ,YAAY,OAAO;AAAA,MACnB;AAAA,IACF,IAAI;AAEJ,QAAI,WAAW;AAAa,WAAK,QAAe,YAAa;AAE7D,oCAAa,aAAa,GAAG,2BAA2B,SAAS,wBAAwB;AACzF,oCAAa,aAAa,GAAG,2BAA2B,SAAS,wBAAwB;AACzF,oCAAa,aAAa,WAAW,2BAA2B,SAAS,kCAAkC,SAAS,GAAG;AAEvH,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,SAAS,OAAmB;AAC1B,wCAAiB,OAAO,UAAU,UAAU,yBAAyB;AAErE;AAAA,MAAiB,MAAM,UAAU,KAAK;AAAA,MAClC,wCAAwC,KAAK,SAAS;AAAA,IAAE;AAE5D;AAAA,MAAiB,MAAM,UAAU,KAAK;AAAA,MAClC,wCAAwC,KAAK,SAAS;AAAA,IAAE;AAE5D;AAAA,MAAiB,KAAK,UAAU,KAAK,QAAQ,KAAK,KAAK,IAAI;AAAA,MACvD,0CAA0C,KAAK,OAAO;AAAA,IAAE;AAE5D,WAAO;AAAA,EACT;AACF;AAKO,SAAS,cAAc,aAAmD;AAC/E,SAAO,IAAI,gBAAgB,WAAW;AACxC;AAGO,IAAM,aAAS,mCAAqB,IAAI,mBAAmB,GAAG,aAAa;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -3,7 +3,7 @@ import { assertSchema, assertValidation } from "../errors.mjs";
|
|
|
3
3
|
import { AbstractValidator, makeValidatorFactory } from "../types.mjs";
|
|
4
4
|
var AnyStringValidator = class extends AbstractValidator {
|
|
5
5
|
validate(value) {
|
|
6
|
-
assertValidation(typeof value
|
|
6
|
+
assertValidation(typeof value === "string", 'Value is not a "string"');
|
|
7
7
|
return value;
|
|
8
8
|
}
|
|
9
9
|
};
|
|
@@ -29,7 +29,7 @@ var StringValidator = class extends AbstractValidator {
|
|
|
29
29
|
this.pattern = pattern;
|
|
30
30
|
}
|
|
31
31
|
validate(value) {
|
|
32
|
-
assertValidation(typeof value
|
|
32
|
+
assertValidation(typeof value === "string", 'Value is not a "string"');
|
|
33
33
|
assertValidation(
|
|
34
34
|
value.length >= this.minLength,
|
|
35
35
|
`String must have a minimum length of ${this.minLength}`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/validators/string.ts"],
|
|
4
|
-
"mappings": ";AAAA,SAAS,cAAc,wBAAwB;AAC/C,SAAS,mBAAmB,4BAA4B;AAqBjD,IAAM,qBAAN,cAAiC,kBAA0B;AAAA,EAChE,SAAS,OAAwB;AAC/B,qBAAiB,OAAO,
|
|
4
|
+
"mappings": ";AAAA,SAAS,cAAc,wBAAwB;AAC/C,SAAS,mBAAmB,4BAA4B;AAqBjD,IAAM,qBAAN,cAAiC,kBAA0B;AAAA,EAChE,SAAS,OAAwB;AAC/B,qBAAiB,OAAO,UAAU,UAAU,yBAAyB;AACrE,WAAO;AAAA,EACT;AACF;AAGO,IAAM,kBAAN,cAAqE,kBAAwB;AAAA,EACzF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,cAAiC,CAAC,GAAG;AAC/C,UAAM;AAEN,UAAM;AAAA,MACJ,YAAY;AAAA,MACZ,YAAY,OAAO;AAAA,MACnB;AAAA,IACF,IAAI;AAEJ,QAAI,WAAW;AAAa,WAAK,QAAe,YAAa;AAE7D,iBAAa,aAAa,GAAG,2BAA2B,SAAS,wBAAwB;AACzF,iBAAa,aAAa,GAAG,2BAA2B,SAAS,wBAAwB;AACzF,iBAAa,aAAa,WAAW,2BAA2B,SAAS,kCAAkC,SAAS,GAAG;AAEvH,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,SAAS,OAAmB;AAC1B,qBAAiB,OAAO,UAAU,UAAU,yBAAyB;AAErE;AAAA,MAAiB,MAAM,UAAU,KAAK;AAAA,MAClC,wCAAwC,KAAK,SAAS;AAAA,IAAE;AAE5D;AAAA,MAAiB,MAAM,UAAU,KAAK;AAAA,MAClC,wCAAwC,KAAK,SAAS;AAAA,IAAE;AAE5D;AAAA,MAAiB,KAAK,UAAU,KAAK,QAAQ,KAAK,KAAK,IAAI;AAAA,MACvD,0CAA0C,KAAK,OAAO;AAAA,IAAE;AAE5D,WAAO;AAAA,EACT;AACF;AAKO,SAAS,cAAc,aAAmD;AAC/E,SAAO,IAAI,gBAAgB,WAAW;AACxC;AAGO,IAAM,SAAS,qBAAqB,IAAI,mBAAmB,GAAG,aAAa;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "justus",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.4",
|
|
4
4
|
"description": "A JavaScript validation library, with types!",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -78,13 +78,8 @@
|
|
|
78
78
|
"author": "Juit Developers <developers@juit.com>",
|
|
79
79
|
"license": "Apache-2.0",
|
|
80
80
|
"devDependencies": {
|
|
81
|
-
"@plugjs/build": "^0.5.
|
|
82
|
-
"@plugjs/tsd": "^0.5.
|
|
83
|
-
"@types/chai": "^4.3.6",
|
|
84
|
-
"chai": "^4.3.8",
|
|
85
|
-
"typescript": "^5.2.2"
|
|
86
|
-
},
|
|
87
|
-
"optionalDependencies": {
|
|
81
|
+
"@plugjs/build": "^0.5.9",
|
|
82
|
+
"@plugjs/tsd": "^0.5.9",
|
|
88
83
|
"typescript": "^5.2.2"
|
|
89
84
|
},
|
|
90
85
|
"directories": {
|
package/src/dts-generator.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { UUIDValidator } from './extra/uuid'
|
|
|
7
7
|
import { getValidator } from './utilities'
|
|
8
8
|
import { AnyValidator } from './validators/any'
|
|
9
9
|
import { AnyArrayValidator, ArrayValidator } from './validators/array'
|
|
10
|
+
import { AnyBigIntValidator, BigIntValidator } from './validators/bigint'
|
|
10
11
|
import { BooleanValidator } from './validators/boolean'
|
|
11
12
|
import { ConstantValidator } from './validators/constant'
|
|
12
13
|
import { DateValidator } from './validators/date'
|
|
@@ -29,8 +30,8 @@ import type { Validation, Validator } from './types'
|
|
|
29
30
|
/** Check that two of our generated types are equal */
|
|
30
31
|
function typeEqual(a: TypeNode, b: TypeNode): boolean {
|
|
31
32
|
function eq(a: any, b: any): boolean {
|
|
32
|
-
if ((typeof a
|
|
33
|
-
(typeof b
|
|
33
|
+
if ((typeof a === 'object' && a != null) &&
|
|
34
|
+
(typeof b === 'object' && b != null) ) {
|
|
34
35
|
for (const key in a) {
|
|
35
36
|
if (! eq(a[key], b[key])) return false
|
|
36
37
|
}
|
|
@@ -255,12 +256,10 @@ export function generateDeclarations(validations: Record<string, Validation>): s
|
|
|
255
256
|
}
|
|
256
257
|
|
|
257
258
|
/* Pretty print our DTS */
|
|
258
|
-
|
|
259
|
+
return ts.createPrinter().printList(
|
|
259
260
|
ts.ListFormat.SourceFileStatements,
|
|
260
261
|
ts.factory.createNodeArray(statements),
|
|
261
262
|
ts.createSourceFile('types.d.ts', '', ts.ScriptTarget.Latest))
|
|
262
|
-
/* Include a leading comment with the generation date and return */
|
|
263
|
-
return `// Generated on ${new Date().toUTCString()}\n\n${dts}`
|
|
264
263
|
}
|
|
265
264
|
|
|
266
265
|
/* ========================================================================== *
|
|
@@ -428,6 +427,7 @@ function generateTypeNode(
|
|
|
428
427
|
|
|
429
428
|
const anyType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)
|
|
430
429
|
const anyArrayType = ts.factory.createArrayTypeNode(anyType)
|
|
430
|
+
const bigintType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.BigIntKeyword)
|
|
431
431
|
const booleanType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword)
|
|
432
432
|
const dateType = ts.factory.createTypeReferenceNode('Date')
|
|
433
433
|
const numberType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword)
|
|
@@ -455,6 +455,7 @@ const readonlyModifiers = [ ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyw
|
|
|
455
455
|
|
|
456
456
|
registerTypeGenerator(AnyValidator, () => anyType)
|
|
457
457
|
registerTypeGenerator(AnyArrayValidator, () => anyArrayType)
|
|
458
|
+
registerTypeGenerator(AnyBigIntValidator, () => bigintType)
|
|
458
459
|
registerTypeGenerator(AnyNumberValidator, () => numberType)
|
|
459
460
|
registerTypeGenerator(AnyObjectValidator, () => recordType)
|
|
460
461
|
registerTypeGenerator(AnyStringValidator, () => stringType)
|
|
@@ -469,6 +470,21 @@ registerTypeGenerator(ArrayValidator, (validator, references, isInput) => {
|
|
|
469
470
|
return ts.factory.createArrayTypeNode(itemType)
|
|
470
471
|
})
|
|
471
472
|
|
|
473
|
+
registerTypeGenerator(BigIntValidator, (validator: BigIntValidator, _references, isInput) => {
|
|
474
|
+
if (isInput) {
|
|
475
|
+
const types: ts.TypeNode[] = [ bigintType ]
|
|
476
|
+
if (validator.fromNumber) types.push(numberType)
|
|
477
|
+
if (validator.fromString) types.push(stringType)
|
|
478
|
+
return types.length === 1 ? types[0] : ts.factory.createUnionTypeNode(types)
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
if (! validator.brand) return bigintType
|
|
482
|
+
|
|
483
|
+
const signature = ts.factory.createPropertySignature(undefined, `__brand_${validator.brand}`, undefined, neverType)
|
|
484
|
+
const literal = ts.factory.createTypeLiteralNode([ signature ])
|
|
485
|
+
return ts.factory.createIntersectionTypeNode([ bigintType, literal ])
|
|
486
|
+
})
|
|
487
|
+
|
|
472
488
|
registerTypeGenerator(BooleanValidator, (validator, _references, isInput) => {
|
|
473
489
|
return (isInput && validator.fromString) ?
|
|
474
490
|
ts.factory.createUnionTypeNode([
|
|
@@ -483,6 +499,7 @@ registerTypeGenerator(ConstantValidator, (validator) => {
|
|
|
483
499
|
const literal =
|
|
484
500
|
typeof validator.constant === 'number' ? ts.factory.createNumericLiteral(validator.constant) :
|
|
485
501
|
typeof validator.constant === 'string' ? ts.factory.createStringLiteral(validator.constant) :
|
|
502
|
+
typeof validator.constant === 'bigint' ? ts.factory.createBigIntLiteral(`${validator.constant}n`) :
|
|
486
503
|
validator.constant === false ? ts.factory.createFalse() :
|
|
487
504
|
validator.constant === true ? ts.factory.createTrue() :
|
|
488
505
|
validator.constant === null ? ts.factory.createNull() :
|
|
@@ -613,7 +630,7 @@ registerTypeGenerator(ObjectValidator, (validator, references, isInput) => {
|
|
|
613
630
|
propertyType, // type
|
|
614
631
|
undefined) // members
|
|
615
632
|
|
|
616
|
-
if (properties.length
|
|
633
|
+
if (properties.length === 0) return extra
|
|
617
634
|
|
|
618
635
|
const type = ts.factory.createTypeLiteralNode(properties)
|
|
619
636
|
return ts.factory.createIntersectionTypeNode([ type, extra ])
|
package/src/extra/arn.ts
CHANGED
|
@@ -42,7 +42,7 @@ function parse<Service extends string, ResourceType extends string>(
|
|
|
42
42
|
service?: Service,
|
|
43
43
|
type?: ResourceType,
|
|
44
44
|
): ParsedArn<Service, ResourceType> {
|
|
45
|
-
assertValidation(typeof value
|
|
45
|
+
assertValidation(typeof value === 'string', 'Value is not a "string"')
|
|
46
46
|
|
|
47
47
|
const segments = value.split(':')
|
|
48
48
|
|
package/src/index.ts
CHANGED
|
@@ -11,6 +11,7 @@ export * from './utilities'
|
|
|
11
11
|
// Validators
|
|
12
12
|
export { AnyValidator, any } from './validators/any'
|
|
13
13
|
export { AnyArrayValidator, ArrayValidator, array, arrayOf } from './validators/array'
|
|
14
|
+
export { AnyBigIntValidator, BigIntValidator, bigint } from './validators/bigint'
|
|
14
15
|
export { BooleanValidator, boolean } from './validators/boolean'
|
|
15
16
|
export { ConstantValidator, constant } from './validators/constant'
|
|
16
17
|
export { DateValidator, date } from './validators/date'
|
|
@@ -24,6 +25,7 @@ export { AllOfValidator, OneOfValidator, allOf, oneOf } from './validators/union
|
|
|
24
25
|
|
|
25
26
|
// Validator Types
|
|
26
27
|
export type { ArrayConstraints, arrayFactory } from './validators/array'
|
|
28
|
+
export type { BrandedBigIntConstraints, bigintFactory } from './validators/bigint'
|
|
27
29
|
export type { BooleanConstraints, booleanFactory } from './validators/boolean'
|
|
28
30
|
export type { DateConstraints, dateFactory } from './validators/date'
|
|
29
31
|
export type { BrandedNumberConstraints, numberFactory } from './validators/number'
|
|
@@ -35,7 +37,6 @@ export type { TupleMember } from './validators/tuple'
|
|
|
35
37
|
* VALIDATE FUNCTION (our main entry point) *
|
|
36
38
|
* ========================================================================== */
|
|
37
39
|
|
|
38
|
-
import { defaultValidationOptions } from './types'
|
|
39
40
|
import { getValidator } from './utilities'
|
|
40
41
|
|
|
41
42
|
import type { InferValidation, Validation, ValidationOptions } from './types'
|
|
@@ -51,7 +52,7 @@ export function validate<V extends Validation>(
|
|
|
51
52
|
value: any,
|
|
52
53
|
options?: ValidationOptions,
|
|
53
54
|
): InferValidation<V> {
|
|
54
|
-
const opts: ValidationOptions = { ...
|
|
55
|
+
const opts: ValidationOptions = { ...options }
|
|
55
56
|
return getValidator(validation).validate(value, opts)
|
|
56
57
|
}
|
|
57
58
|
|
|
@@ -83,3 +84,20 @@ export function strip<V extends Validation>(
|
|
|
83
84
|
|
|
84
85
|
return getValidator(validation).validate(value, opts)
|
|
85
86
|
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Validate a _value_ using the specified `Validation`, automatically stripping
|
|
90
|
+
* additional properties and optional `null`s (but not forbidden ones), and
|
|
91
|
+
* treating all properties as optional.
|
|
92
|
+
*
|
|
93
|
+
* This is equivalent to setting the `partialValidation` option to `true` in
|
|
94
|
+
* `validate(...)`, but this function correctly represents the returned type as
|
|
95
|
+
* a `Partial<...>` type.
|
|
96
|
+
*/
|
|
97
|
+
export function partial<V extends Validation>(
|
|
98
|
+
validation: V,
|
|
99
|
+
value: any,
|
|
100
|
+
options?: ValidationOptions,
|
|
101
|
+
): Partial<InferValidation<V>> {
|
|
102
|
+
return getValidator(validation).validate(value, { ...options, partialValidation: true })
|
|
103
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -34,15 +34,8 @@ export interface ValidationOptions {
|
|
|
34
34
|
stripOptionalNulls?: boolean,
|
|
35
35
|
/** Ignore and strip forbidden (`never`) properties from objects (default: `false`) */
|
|
36
36
|
stripForbiddenProperties?: boolean,
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Default validation options.
|
|
41
|
-
*/
|
|
42
|
-
export const defaultValidationOptions: Readonly<Required<ValidationOptions>> = {
|
|
43
|
-
stripAdditionalProperties: false,
|
|
44
|
-
stripForbiddenProperties: false,
|
|
45
|
-
stripOptionalNulls: false,
|
|
37
|
+
/** Perform a _partial_ validation, treating all properties as optional (default: `false`) */
|
|
38
|
+
partialValidation?: boolean,
|
|
46
39
|
}
|
|
47
40
|
|
|
48
41
|
/**
|
|
@@ -117,13 +110,13 @@ implements Validator<T, I>, Iterable<TupleRestParameter<T, I>> {
|
|
|
117
110
|
* Those are:
|
|
118
111
|
*
|
|
119
112
|
* * A `Validator` instance or a _zero-arguments_ function returning one
|
|
120
|
-
* * A `Tuple` or a `Schema`, validated as arrays or
|
|
121
|
-
* * Either `null`, a `boolean`, a `number` or a `string` for constants
|
|
113
|
+
* * A `Tuple` or a `Schema`, validated as arrays or objects
|
|
114
|
+
* * Either `null`, a `boolean`, a `number`, a `bigint` or a `string` for constants
|
|
122
115
|
*/
|
|
123
116
|
export type Validation =
|
|
124
117
|
Validator | // Validator instances
|
|
125
118
|
Tuple | Schema | // Tuples or schemas (arrays, objects)
|
|
126
|
-
null | boolean | number | string // Primitives, mapped as constants
|
|
119
|
+
null | boolean | bigint | number | string // Primitives, mapped as constants
|
|
127
120
|
|
|
128
121
|
/**
|
|
129
122
|
* Infer the type returned by a `Validation` when validating.
|
|
@@ -135,6 +128,7 @@ export type InferValidation<V> =
|
|
|
135
128
|
// Primitives are returned as constants
|
|
136
129
|
V extends undefined ? V :
|
|
137
130
|
V extends boolean ? V :
|
|
131
|
+
V extends bigint ? V :
|
|
138
132
|
V extends number ? V :
|
|
139
133
|
V extends string ? V :
|
|
140
134
|
V extends null ? V :
|
|
@@ -155,6 +149,7 @@ export type InferInput<V> =
|
|
|
155
149
|
// Primitives are returned as constants
|
|
156
150
|
V extends undefined ? V :
|
|
157
151
|
V extends boolean ? V :
|
|
152
|
+
V extends bigint ? V :
|
|
158
153
|
V extends number ? V :
|
|
159
154
|
V extends string ? V :
|
|
160
155
|
V extends null ? V :
|
|
@@ -278,12 +273,12 @@ export type InferSchema<S> =
|
|
|
278
273
|
export type InferSchema2<S> = {
|
|
279
274
|
// this first part of the type infers all keys from the schema into their
|
|
280
275
|
// type, but makes *each* key optional... we'll restrict in the next part...
|
|
281
|
-
[ key in keyof S as key extends string ? key : never ] ? : InferValidation<S[key]>
|
|
276
|
+
-readonly [ key in keyof S as key extends string ? key : never ] ? : InferValidation<S[key]>
|
|
282
277
|
} & {
|
|
283
278
|
// this second part infers *only* keys that _do not_ contain a "undefined"
|
|
284
279
|
// in their unions, and associates them with the inferred value, basically
|
|
285
280
|
// making the key *non optional*
|
|
286
|
-
[ key in keyof S as
|
|
281
|
+
-readonly [ key in keyof S as
|
|
287
282
|
key extends string ?
|
|
288
283
|
undefined extends InferValidation<S[key]> ?
|
|
289
284
|
never :
|
|
@@ -302,12 +297,12 @@ export type InferInputSchema<S> =
|
|
|
302
297
|
export type InferInputSchema2<S> = {
|
|
303
298
|
// this first part of the type infers all keys from the schema into their
|
|
304
299
|
// type, but makes *each* key optional... we'll restrict in the next part...
|
|
305
|
-
[ key in keyof S as key extends string ? key : never ] ? : InferInput<S[key]>
|
|
300
|
+
-readonly [ key in keyof S as key extends string ? key : never ] ? : InferInput<S[key]>
|
|
306
301
|
} & {
|
|
307
302
|
// this second part infers *only* keys that _do not_ contain a "undefined"
|
|
308
303
|
// in their unions, and associates them with the inferred value, basically
|
|
309
304
|
// making the key *non optional*
|
|
310
|
-
[ key in keyof S as
|
|
305
|
+
-readonly [ key in keyof S as
|
|
311
306
|
key extends string ?
|
|
312
307
|
InferInput<S[key]> extends never ?
|
|
313
308
|
never :
|
package/src/utilities.ts
CHANGED