valgen 5.14.0 → 5.15.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/CHANGELOG.md +31 -1
- package/cjs/constants.js +3 -1
- package/cjs/rules/index.js +3 -1
- package/cjs/rules/logical-rules/is-equal.js +32 -0
- package/cjs/rules/logical-rules/range.js +3 -2
- package/cjs/rules/type-rules/is-object.js +1 -3
- package/cjs/rules/utility-rules/all-of.js +20 -0
- package/cjs/rules/utility-rules/one-of.js +59 -0
- package/cjs/rules/utility-rules/pipe.js +0 -17
- package/cjs/tsconfig-build-cjs.tsbuildinfo +1 -1
- package/esm/constants.js +2 -0
- package/esm/rules/index.js +3 -1
- package/esm/rules/logical-rules/is-equal.js +28 -0
- package/esm/rules/logical-rules/range.js +2 -1
- package/esm/rules/type-rules/is-object.js +1 -3
- package/esm/rules/utility-rules/all-of.js +17 -0
- package/esm/rules/utility-rules/one-of.js +56 -0
- package/esm/rules/utility-rules/pipe.js +0 -16
- package/esm/tsconfig-build-esm.tsbuildinfo +1 -1
- package/package.json +2 -1
- package/types/constants.d.ts +2 -0
- package/types/rules/index.d.ts +3 -1
- package/types/rules/logical-rules/is-equal.d.ts +11 -0
- package/types/rules/utility-rules/all-of.d.ts +6 -0
- package/types/rules/utility-rules/one-of.d.ts +7 -0
- package/types/rules/utility-rules/pipe.d.ts +0 -5
- package/cjs/rules/utility-rules/union.js +0 -35
- package/esm/rules/utility-rules/union.js +0 -32
- package/types/rules/utility-rules/union.d.ts +0 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,36 @@
|
|
|
1
1
|
## Changelog
|
|
2
2
|
|
|
3
|
-
### [v5.
|
|
3
|
+
### [v5.15.0](https://github.com/panates/valgen/compare/v5.14.1...v5.15.0) -
|
|
4
|
+
|
|
5
|
+
#### 🚀 New Features
|
|
6
|
+
|
|
7
|
+
- feat: Added discriminator validation to oneOf rule @Eray Hanoğlu
|
|
8
|
+
- feat: Added isEqual, isNotEqual rules @Eray Hanoğlu
|
|
9
|
+
|
|
10
|
+
#### 🛠 Refactoring and Updates
|
|
11
|
+
|
|
12
|
+
- refactor: Fixes and improvements @Eray Hanoğlu
|
|
13
|
+
- refactor: Removed union rule. Use oneOf rule instead @Eray Hanoğlu
|
|
14
|
+
|
|
15
|
+
### [v5.14.1](https://github.com/panates/valgen/compare/v5.14.0...v5.14.1) - 21 April 2025
|
|
16
|
+
|
|
17
|
+
#### 🪲 Fixes
|
|
18
|
+
|
|
19
|
+
- fix: Fixed validation issue while using silent mode @Eray Hanoğlu
|
|
20
|
+
|
|
21
|
+
#### 💬 General Changes
|
|
22
|
+
|
|
23
|
+
- dev: Moved from nyc to c8 @Eray Hanoğlu
|
|
24
|
+
- ci: Added workflows @Eray Hanoğlu
|
|
25
|
+
- dev: Fixed nycrc file @Eray Hanoğlu
|
|
26
|
+
- dev: Added publishConfig @Eray Hanoğlu
|
|
27
|
+
- dev: Fixed nycrc file @Eray Hanoğlu
|
|
28
|
+
- dev: Fixed paths @Eray Hanoğlu
|
|
29
|
+
- dev: Fixed nycrc file @Eray Hanoğlu
|
|
30
|
+
- dev: Fixed nycrc file @Eray Hanoğlu
|
|
31
|
+
- dev: Added qc script @Eray Hanoğlu
|
|
32
|
+
|
|
33
|
+
### [v5.14.0](https://github.com/panates/valgen/compare/v5.13.4...v5.14.0) - 30 March 2025
|
|
4
34
|
|
|
5
35
|
#### 🛠 Refactoring and Updates
|
|
6
36
|
|
package/cjs/constants.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.preValidation = exports.postValidation = void 0;
|
|
3
|
+
exports.VALIDATE_NESTED_METADATA = exports.VALIDATE_METADATA = exports.preValidation = exports.postValidation = void 0;
|
|
4
4
|
exports.postValidation = Symbol('postValidation');
|
|
5
5
|
exports.preValidation = Symbol('preValidation');
|
|
6
|
+
exports.VALIDATE_METADATA = Symbol('VALIDATE_METADATA');
|
|
7
|
+
exports.VALIDATE_NESTED_METADATA = Symbol('VALIDATE_NESTED_METADATA');
|
package/cjs/rules/index.js
CHANGED
|
@@ -30,6 +30,7 @@ tslib_1.__exportStar(require("./format-rules/is-vat-number.js"), exports);
|
|
|
30
30
|
tslib_1.__exportStar(require("./format-rules/matches.js"), exports);
|
|
31
31
|
tslib_1.__exportStar(require("./logical-rules/is-defined.js"), exports);
|
|
32
32
|
tslib_1.__exportStar(require("./logical-rules/is-empty.js"), exports);
|
|
33
|
+
tslib_1.__exportStar(require("./logical-rules/is-equal.js"), exports);
|
|
33
34
|
tslib_1.__exportStar(require("./logical-rules/range.js"), exports);
|
|
34
35
|
tslib_1.__exportStar(require("./type-rules/is-any.js"), exports);
|
|
35
36
|
tslib_1.__exportStar(require("./type-rules/is-array.js"), exports);
|
|
@@ -45,9 +46,10 @@ tslib_1.__exportStar(require("./type-rules/is-record.js"), exports);
|
|
|
45
46
|
tslib_1.__exportStar(require("./type-rules/is-string.js"), exports);
|
|
46
47
|
tslib_1.__exportStar(require("./type-rules/is-tuple.js"), exports);
|
|
47
48
|
tslib_1.__exportStar(require("./type-rules/is-undefined.js"), exports);
|
|
49
|
+
tslib_1.__exportStar(require("./utility-rules/all-of.js"), exports);
|
|
48
50
|
tslib_1.__exportStar(require("./utility-rules/exists.js"), exports);
|
|
49
51
|
tslib_1.__exportStar(require("./utility-rules/get-length.js"), exports);
|
|
52
|
+
tslib_1.__exportStar(require("./utility-rules/one-of.js"), exports);
|
|
50
53
|
tslib_1.__exportStar(require("./utility-rules/optional.js"), exports);
|
|
51
54
|
tslib_1.__exportStar(require("./utility-rules/pipe.js"), exports);
|
|
52
55
|
tslib_1.__exportStar(require("./utility-rules/required.js"), exports);
|
|
53
|
-
tslib_1.__exportStar(require("./utility-rules/union.js"), exports);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isEqual = isEqual;
|
|
4
|
+
exports.isNotEqual = isNotEqual;
|
|
5
|
+
const index_js_1 = require("../../core/index.js");
|
|
6
|
+
/**
|
|
7
|
+
*
|
|
8
|
+
* @validator isEqual
|
|
9
|
+
*/
|
|
10
|
+
function isEqual(compare, options) {
|
|
11
|
+
return (0, index_js_1.validator)('isEqual', (input, context, _this) => {
|
|
12
|
+
if (input == null)
|
|
13
|
+
return input;
|
|
14
|
+
if (input !== compare)
|
|
15
|
+
context.fail(_this, `Value must be equal to "${compare}"`, input);
|
|
16
|
+
return input;
|
|
17
|
+
}, options);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
*
|
|
21
|
+
* @validator isNotEqual
|
|
22
|
+
*/
|
|
23
|
+
function isNotEqual(compare, options) {
|
|
24
|
+
return (0, index_js_1.validator)('isNotEqual', (input, context, _this) => {
|
|
25
|
+
if (input == null)
|
|
26
|
+
return input;
|
|
27
|
+
if (input === compare) {
|
|
28
|
+
context.fail(_this, `Value must not be equal to "${compare}"`, input);
|
|
29
|
+
}
|
|
30
|
+
return input;
|
|
31
|
+
}, options);
|
|
32
|
+
}
|
|
@@ -7,6 +7,7 @@ exports.isGte = isGte;
|
|
|
7
7
|
exports.isLt = isLt;
|
|
8
8
|
exports.isLte = isLte;
|
|
9
9
|
const index_js_1 = require("../../core/index.js");
|
|
10
|
+
const all_of_js_1 = require("../utility-rules/all-of.js");
|
|
10
11
|
const get_length_js_1 = require("../utility-rules/get-length.js");
|
|
11
12
|
const pipe_js_1 = require("../utility-rules/pipe.js");
|
|
12
13
|
/**
|
|
@@ -131,7 +132,7 @@ function isLte(maxValue, options) {
|
|
|
131
132
|
* Checks the length is at least "minValue"
|
|
132
133
|
* @validator lengthMin
|
|
133
134
|
*/
|
|
134
|
-
const lengthMin = (minValue) => (0,
|
|
135
|
+
const lengthMin = (minValue) => (0, all_of_js_1.allOf)([
|
|
135
136
|
(0, pipe_js_1.pipe)([
|
|
136
137
|
(0, get_length_js_1.getLength)(),
|
|
137
138
|
isGte(minValue, {
|
|
@@ -144,7 +145,7 @@ exports.lengthMin = lengthMin;
|
|
|
144
145
|
* Checks if the length is at most "maxValue"
|
|
145
146
|
* @validator lengthMax
|
|
146
147
|
*/
|
|
147
|
-
const lengthMax = (maxValue) => (0,
|
|
148
|
+
const lengthMax = (maxValue) => (0, all_of_js_1.allOf)([
|
|
148
149
|
(0, pipe_js_1.pipe)([
|
|
149
150
|
(0, get_length_js_1.getLength)(),
|
|
150
151
|
isLte(maxValue, {
|
|
@@ -48,7 +48,7 @@ function isObject(schema, options) {
|
|
|
48
48
|
context.fail(_this, `Value must be an object`, input);
|
|
49
49
|
return;
|
|
50
50
|
}
|
|
51
|
-
const keys = [...Object.keys(output), ...schemaKeys];
|
|
51
|
+
const keys = Array.from(new Set([...Object.keys(output), ...schemaKeys]));
|
|
52
52
|
const l = keys.length;
|
|
53
53
|
let i = 0;
|
|
54
54
|
let inputKey;
|
|
@@ -102,8 +102,6 @@ function isObject(schema, options) {
|
|
|
102
102
|
out[propertyOptions[schemaKey]?.as || schemaKey] = v;
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
|
-
if (context.errors.length)
|
|
106
|
-
return undefined;
|
|
107
105
|
if (ctor && ctor[constants_js_1.postValidation]) {
|
|
108
106
|
ctor[constants_js_1.postValidation](out, context, _this);
|
|
109
107
|
return out;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.allOf = allOf;
|
|
4
|
+
const index_js_1 = require("../../core/index.js");
|
|
5
|
+
/**
|
|
6
|
+
* Test given value against to all codecs and returns original input
|
|
7
|
+
* @validator allOf
|
|
8
|
+
*/
|
|
9
|
+
function allOf(rules) {
|
|
10
|
+
return (0, index_js_1.validator)('allOf', (input, context) => {
|
|
11
|
+
let i;
|
|
12
|
+
let c;
|
|
13
|
+
const l = rules.length;
|
|
14
|
+
for (i = 0; i < l; i++) {
|
|
15
|
+
c = rules[i];
|
|
16
|
+
c(input, context);
|
|
17
|
+
}
|
|
18
|
+
return input;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.oneOf = oneOf;
|
|
4
|
+
const index_js_1 = require("../../core/index.js");
|
|
5
|
+
/**
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
function oneOf(rules) {
|
|
9
|
+
const l = rules.length;
|
|
10
|
+
return (0, index_js_1.validator)('union', (input, context, _this) => {
|
|
11
|
+
let i;
|
|
12
|
+
let c;
|
|
13
|
+
let discriminator;
|
|
14
|
+
let v;
|
|
15
|
+
let passed = false;
|
|
16
|
+
// Mock fail method to prevent errors
|
|
17
|
+
context.fail = () => (passed = false);
|
|
18
|
+
for (i = 0; i < l; i++) {
|
|
19
|
+
passed = true;
|
|
20
|
+
if (Array.isArray(rules[i])) {
|
|
21
|
+
c = rules[i][0];
|
|
22
|
+
discriminator = rules[i][1];
|
|
23
|
+
if (!(input &&
|
|
24
|
+
typeof input === 'object' &&
|
|
25
|
+
typeof discriminator === 'object')) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
for (const k of Object.keys(discriminator)) {
|
|
30
|
+
discriminator[k](input[k], context);
|
|
31
|
+
if (!passed)
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
if (!passed)
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else
|
|
42
|
+
c = rules[i];
|
|
43
|
+
if (passed)
|
|
44
|
+
try {
|
|
45
|
+
v = c(input, context);
|
|
46
|
+
if (passed)
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
//
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Restore fail method
|
|
54
|
+
delete context.fail;
|
|
55
|
+
if (passed)
|
|
56
|
+
return v;
|
|
57
|
+
context.fail(_this, `Value didn't match one of required rules`, input);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.pipe = pipe;
|
|
4
|
-
exports.allOf = allOf;
|
|
5
4
|
const index_js_1 = require("../../core/index.js");
|
|
6
5
|
/**
|
|
7
6
|
*
|
|
@@ -27,19 +26,3 @@ function pipe(rules, options) {
|
|
|
27
26
|
return returnValue;
|
|
28
27
|
}, options);
|
|
29
28
|
}
|
|
30
|
-
/**
|
|
31
|
-
* Test given value against to all codecs and returns original input
|
|
32
|
-
* @validator allOf
|
|
33
|
-
*/
|
|
34
|
-
function allOf(rules) {
|
|
35
|
-
return (0, index_js_1.validator)('allOf', (input, context) => {
|
|
36
|
-
let i;
|
|
37
|
-
let c;
|
|
38
|
-
const l = rules.length;
|
|
39
|
-
for (i = 0; i < l; i++) {
|
|
40
|
-
c = rules[i];
|
|
41
|
-
c(input, context);
|
|
42
|
-
}
|
|
43
|
-
return input;
|
|
44
|
-
});
|
|
45
|
-
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../../src/constants.ts","../../src/factories.ts","../../src/index.ts","../../src/core/constants.ts","../../src/core/context.ts","../../src/core/index.ts","../../src/core/types.ts","../../src/core/utilities.ts","../../src/core/validation-error.ts","../../src/core/validator.ts","../../src/helpers/object.utils.ts","../../src/helpers/omit-undefined.ts","../../src/helpers/string.utils.ts","../../src/rules/index.ts","../../src/rules/format-rules/is-alpha.ts","../../src/rules/format-rules/is-ascii.ts","../../src/rules/format-rules/is-base64.ts","../../src/rules/format-rules/is-btc-address.ts","../../src/rules/format-rules/is-credit-card.ts","../../src/rules/format-rules/is-decimal.ts","../../src/rules/format-rules/is-ean.ts","../../src/rules/format-rules/is-email.ts","../../src/rules/format-rules/is-eth-address.ts","../../src/rules/format-rules/is-fqdn.ts","../../src/rules/format-rules/is-hash.ts","../../src/rules/format-rules/is-hex-color.ts","../../src/rules/format-rules/is-hex.ts","../../src/rules/format-rules/is-iban.ts","../../src/rules/format-rules/is-ip.ts","../../src/rules/format-rules/is-issn.ts","../../src/rules/format-rules/is-jwt.ts","../../src/rules/format-rules/is-lowercase.ts","../../src/rules/format-rules/is-mac-address.ts","../../src/rules/format-rules/is-mobile-phone.ts","../../src/rules/format-rules/is-object-id.ts","../../src/rules/format-rules/is-passport-number.ts","../../src/rules/format-rules/is-port.ts","../../src/rules/format-rules/is-url.ts","../../src/rules/format-rules/is-uuid.ts","../../src/rules/format-rules/is-vat-number.ts","../../src/rules/format-rules/matches.ts","../../src/rules/logical-rules/is-defined.ts","../../src/rules/logical-rules/is-empty.ts","../../src/rules/logical-rules/range.ts","../../src/rules/type-rules/is-any.ts","../../src/rules/type-rules/is-array.ts","../../src/rules/type-rules/is-bigint.ts","../../src/rules/type-rules/is-boolean.ts","../../src/rules/type-rules/is-date.ts","../../src/rules/type-rules/is-enum.ts","../../src/rules/type-rules/is-integer.ts","../../src/rules/type-rules/is-null.ts","../../src/rules/type-rules/is-number.ts","../../src/rules/type-rules/is-object.ts","../../src/rules/type-rules/is-record.ts","../../src/rules/type-rules/is-string.ts","../../src/rules/type-rules/is-tuple.ts","../../src/rules/type-rules/is-undefined.ts","../../src/rules/utility-rules/exists.ts","../../src/rules/utility-rules/get-length.ts","../../src/rules/utility-rules/
|
|
1
|
+
{"root":["../../src/constants.ts","../../src/factories.ts","../../src/index.ts","../../src/core/constants.ts","../../src/core/context.ts","../../src/core/index.ts","../../src/core/types.ts","../../src/core/utilities.ts","../../src/core/validation-error.ts","../../src/core/validator.ts","../../src/helpers/object.utils.ts","../../src/helpers/omit-undefined.ts","../../src/helpers/string.utils.ts","../../src/rules/index.ts","../../src/rules/format-rules/is-alpha.ts","../../src/rules/format-rules/is-ascii.ts","../../src/rules/format-rules/is-base64.ts","../../src/rules/format-rules/is-btc-address.ts","../../src/rules/format-rules/is-credit-card.ts","../../src/rules/format-rules/is-decimal.ts","../../src/rules/format-rules/is-ean.ts","../../src/rules/format-rules/is-email.ts","../../src/rules/format-rules/is-eth-address.ts","../../src/rules/format-rules/is-fqdn.ts","../../src/rules/format-rules/is-hash.ts","../../src/rules/format-rules/is-hex-color.ts","../../src/rules/format-rules/is-hex.ts","../../src/rules/format-rules/is-iban.ts","../../src/rules/format-rules/is-ip.ts","../../src/rules/format-rules/is-issn.ts","../../src/rules/format-rules/is-jwt.ts","../../src/rules/format-rules/is-lowercase.ts","../../src/rules/format-rules/is-mac-address.ts","../../src/rules/format-rules/is-mobile-phone.ts","../../src/rules/format-rules/is-object-id.ts","../../src/rules/format-rules/is-passport-number.ts","../../src/rules/format-rules/is-port.ts","../../src/rules/format-rules/is-url.ts","../../src/rules/format-rules/is-uuid.ts","../../src/rules/format-rules/is-vat-number.ts","../../src/rules/format-rules/matches.ts","../../src/rules/logical-rules/is-defined.ts","../../src/rules/logical-rules/is-empty.ts","../../src/rules/logical-rules/is-equal.ts","../../src/rules/logical-rules/range.ts","../../src/rules/type-rules/is-any.ts","../../src/rules/type-rules/is-array.ts","../../src/rules/type-rules/is-bigint.ts","../../src/rules/type-rules/is-boolean.ts","../../src/rules/type-rules/is-date.ts","../../src/rules/type-rules/is-enum.ts","../../src/rules/type-rules/is-integer.ts","../../src/rules/type-rules/is-null.ts","../../src/rules/type-rules/is-number.ts","../../src/rules/type-rules/is-object.ts","../../src/rules/type-rules/is-record.ts","../../src/rules/type-rules/is-string.ts","../../src/rules/type-rules/is-tuple.ts","../../src/rules/type-rules/is-undefined.ts","../../src/rules/utility-rules/all-of.ts","../../src/rules/utility-rules/exists.ts","../../src/rules/utility-rules/get-length.ts","../../src/rules/utility-rules/one-of.ts","../../src/rules/utility-rules/optional.ts","../../src/rules/utility-rules/pipe.ts","../../src/rules/utility-rules/required.ts"],"version":"5.8.3"}
|
package/esm/constants.js
CHANGED
package/esm/rules/index.js
CHANGED
|
@@ -27,6 +27,7 @@ export * from './format-rules/is-vat-number.js';
|
|
|
27
27
|
export * from './format-rules/matches.js';
|
|
28
28
|
export * from './logical-rules/is-defined.js';
|
|
29
29
|
export * from './logical-rules/is-empty.js';
|
|
30
|
+
export * from './logical-rules/is-equal.js';
|
|
30
31
|
export * from './logical-rules/range.js';
|
|
31
32
|
export * from './type-rules/is-any.js';
|
|
32
33
|
export * from './type-rules/is-array.js';
|
|
@@ -42,9 +43,10 @@ export * from './type-rules/is-record.js';
|
|
|
42
43
|
export * from './type-rules/is-string.js';
|
|
43
44
|
export * from './type-rules/is-tuple.js';
|
|
44
45
|
export * from './type-rules/is-undefined.js';
|
|
46
|
+
export * from './utility-rules/all-of.js';
|
|
45
47
|
export * from './utility-rules/exists.js';
|
|
46
48
|
export * from './utility-rules/get-length.js';
|
|
49
|
+
export * from './utility-rules/one-of.js';
|
|
47
50
|
export * from './utility-rules/optional.js';
|
|
48
51
|
export * from './utility-rules/pipe.js';
|
|
49
52
|
export * from './utility-rules/required.js';
|
|
50
|
-
export * from './utility-rules/union.js';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { validator, } from '../../core/index.js';
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* @validator isEqual
|
|
5
|
+
*/
|
|
6
|
+
export function isEqual(compare, options) {
|
|
7
|
+
return validator('isEqual', (input, context, _this) => {
|
|
8
|
+
if (input == null)
|
|
9
|
+
return input;
|
|
10
|
+
if (input !== compare)
|
|
11
|
+
context.fail(_this, `Value must be equal to "${compare}"`, input);
|
|
12
|
+
return input;
|
|
13
|
+
}, options);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
*
|
|
17
|
+
* @validator isNotEqual
|
|
18
|
+
*/
|
|
19
|
+
export function isNotEqual(compare, options) {
|
|
20
|
+
return validator('isNotEqual', (input, context, _this) => {
|
|
21
|
+
if (input == null)
|
|
22
|
+
return input;
|
|
23
|
+
if (input === compare) {
|
|
24
|
+
context.fail(_this, `Value must not be equal to "${compare}"`, input);
|
|
25
|
+
}
|
|
26
|
+
return input;
|
|
27
|
+
}, options);
|
|
28
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { validator, } from '../../core/index.js';
|
|
2
|
+
import { allOf } from '../utility-rules/all-of.js';
|
|
2
3
|
import { getLength } from '../utility-rules/get-length.js';
|
|
3
|
-
import {
|
|
4
|
+
import { pipe } from '../utility-rules/pipe.js';
|
|
4
5
|
/**
|
|
5
6
|
* Checks if value is between minValue and maxValue
|
|
6
7
|
* @validator range
|
|
@@ -45,7 +45,7 @@ export function isObject(schema, options) {
|
|
|
45
45
|
context.fail(_this, `Value must be an object`, input);
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
|
-
const keys = [...Object.keys(output), ...schemaKeys];
|
|
48
|
+
const keys = Array.from(new Set([...Object.keys(output), ...schemaKeys]));
|
|
49
49
|
const l = keys.length;
|
|
50
50
|
let i = 0;
|
|
51
51
|
let inputKey;
|
|
@@ -99,8 +99,6 @@ export function isObject(schema, options) {
|
|
|
99
99
|
out[propertyOptions[schemaKey]?.as || schemaKey] = v;
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
|
-
if (context.errors.length)
|
|
103
|
-
return undefined;
|
|
104
102
|
if (ctor && ctor[postValidation]) {
|
|
105
103
|
ctor[postValidation](out, context, _this);
|
|
106
104
|
return out;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { validator } from '../../core/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Test given value against to all codecs and returns original input
|
|
4
|
+
* @validator allOf
|
|
5
|
+
*/
|
|
6
|
+
export function allOf(rules) {
|
|
7
|
+
return validator('allOf', (input, context) => {
|
|
8
|
+
let i;
|
|
9
|
+
let c;
|
|
10
|
+
const l = rules.length;
|
|
11
|
+
for (i = 0; i < l; i++) {
|
|
12
|
+
c = rules[i];
|
|
13
|
+
c(input, context);
|
|
14
|
+
}
|
|
15
|
+
return input;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { validator } from '../../core/index.js';
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
*/
|
|
5
|
+
export function oneOf(rules) {
|
|
6
|
+
const l = rules.length;
|
|
7
|
+
return validator('union', (input, context, _this) => {
|
|
8
|
+
let i;
|
|
9
|
+
let c;
|
|
10
|
+
let discriminator;
|
|
11
|
+
let v;
|
|
12
|
+
let passed = false;
|
|
13
|
+
// Mock fail method to prevent errors
|
|
14
|
+
context.fail = () => (passed = false);
|
|
15
|
+
for (i = 0; i < l; i++) {
|
|
16
|
+
passed = true;
|
|
17
|
+
if (Array.isArray(rules[i])) {
|
|
18
|
+
c = rules[i][0];
|
|
19
|
+
discriminator = rules[i][1];
|
|
20
|
+
if (!(input &&
|
|
21
|
+
typeof input === 'object' &&
|
|
22
|
+
typeof discriminator === 'object')) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
for (const k of Object.keys(discriminator)) {
|
|
27
|
+
discriminator[k](input[k], context);
|
|
28
|
+
if (!passed)
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
if (!passed)
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else
|
|
39
|
+
c = rules[i];
|
|
40
|
+
if (passed)
|
|
41
|
+
try {
|
|
42
|
+
v = c(input, context);
|
|
43
|
+
if (passed)
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
//
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Restore fail method
|
|
51
|
+
delete context.fail;
|
|
52
|
+
if (passed)
|
|
53
|
+
return v;
|
|
54
|
+
context.fail(_this, `Value didn't match one of required rules`, input);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
@@ -23,19 +23,3 @@ export function pipe(rules, options) {
|
|
|
23
23
|
return returnValue;
|
|
24
24
|
}, options);
|
|
25
25
|
}
|
|
26
|
-
/**
|
|
27
|
-
* Test given value against to all codecs and returns original input
|
|
28
|
-
* @validator allOf
|
|
29
|
-
*/
|
|
30
|
-
export function allOf(rules) {
|
|
31
|
-
return validator('allOf', (input, context) => {
|
|
32
|
-
let i;
|
|
33
|
-
let c;
|
|
34
|
-
const l = rules.length;
|
|
35
|
-
for (i = 0; i < l; i++) {
|
|
36
|
-
c = rules[i];
|
|
37
|
-
c(input, context);
|
|
38
|
-
}
|
|
39
|
-
return input;
|
|
40
|
-
});
|
|
41
|
-
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../../src/constants.ts","../../src/factories.ts","../../src/index.ts","../../src/core/constants.ts","../../src/core/context.ts","../../src/core/index.ts","../../src/core/types.ts","../../src/core/utilities.ts","../../src/core/validation-error.ts","../../src/core/validator.ts","../../src/helpers/object.utils.ts","../../src/helpers/omit-undefined.ts","../../src/helpers/string.utils.ts","../../src/rules/index.ts","../../src/rules/format-rules/is-alpha.ts","../../src/rules/format-rules/is-ascii.ts","../../src/rules/format-rules/is-base64.ts","../../src/rules/format-rules/is-btc-address.ts","../../src/rules/format-rules/is-credit-card.ts","../../src/rules/format-rules/is-decimal.ts","../../src/rules/format-rules/is-ean.ts","../../src/rules/format-rules/is-email.ts","../../src/rules/format-rules/is-eth-address.ts","../../src/rules/format-rules/is-fqdn.ts","../../src/rules/format-rules/is-hash.ts","../../src/rules/format-rules/is-hex-color.ts","../../src/rules/format-rules/is-hex.ts","../../src/rules/format-rules/is-iban.ts","../../src/rules/format-rules/is-ip.ts","../../src/rules/format-rules/is-issn.ts","../../src/rules/format-rules/is-jwt.ts","../../src/rules/format-rules/is-lowercase.ts","../../src/rules/format-rules/is-mac-address.ts","../../src/rules/format-rules/is-mobile-phone.ts","../../src/rules/format-rules/is-object-id.ts","../../src/rules/format-rules/is-passport-number.ts","../../src/rules/format-rules/is-port.ts","../../src/rules/format-rules/is-url.ts","../../src/rules/format-rules/is-uuid.ts","../../src/rules/format-rules/is-vat-number.ts","../../src/rules/format-rules/matches.ts","../../src/rules/logical-rules/is-defined.ts","../../src/rules/logical-rules/is-empty.ts","../../src/rules/logical-rules/range.ts","../../src/rules/type-rules/is-any.ts","../../src/rules/type-rules/is-array.ts","../../src/rules/type-rules/is-bigint.ts","../../src/rules/type-rules/is-boolean.ts","../../src/rules/type-rules/is-date.ts","../../src/rules/type-rules/is-enum.ts","../../src/rules/type-rules/is-integer.ts","../../src/rules/type-rules/is-null.ts","../../src/rules/type-rules/is-number.ts","../../src/rules/type-rules/is-object.ts","../../src/rules/type-rules/is-record.ts","../../src/rules/type-rules/is-string.ts","../../src/rules/type-rules/is-tuple.ts","../../src/rules/type-rules/is-undefined.ts","../../src/rules/utility-rules/exists.ts","../../src/rules/utility-rules/get-length.ts","../../src/rules/utility-rules/
|
|
1
|
+
{"root":["../../src/constants.ts","../../src/factories.ts","../../src/index.ts","../../src/core/constants.ts","../../src/core/context.ts","../../src/core/index.ts","../../src/core/types.ts","../../src/core/utilities.ts","../../src/core/validation-error.ts","../../src/core/validator.ts","../../src/helpers/object.utils.ts","../../src/helpers/omit-undefined.ts","../../src/helpers/string.utils.ts","../../src/rules/index.ts","../../src/rules/format-rules/is-alpha.ts","../../src/rules/format-rules/is-ascii.ts","../../src/rules/format-rules/is-base64.ts","../../src/rules/format-rules/is-btc-address.ts","../../src/rules/format-rules/is-credit-card.ts","../../src/rules/format-rules/is-decimal.ts","../../src/rules/format-rules/is-ean.ts","../../src/rules/format-rules/is-email.ts","../../src/rules/format-rules/is-eth-address.ts","../../src/rules/format-rules/is-fqdn.ts","../../src/rules/format-rules/is-hash.ts","../../src/rules/format-rules/is-hex-color.ts","../../src/rules/format-rules/is-hex.ts","../../src/rules/format-rules/is-iban.ts","../../src/rules/format-rules/is-ip.ts","../../src/rules/format-rules/is-issn.ts","../../src/rules/format-rules/is-jwt.ts","../../src/rules/format-rules/is-lowercase.ts","../../src/rules/format-rules/is-mac-address.ts","../../src/rules/format-rules/is-mobile-phone.ts","../../src/rules/format-rules/is-object-id.ts","../../src/rules/format-rules/is-passport-number.ts","../../src/rules/format-rules/is-port.ts","../../src/rules/format-rules/is-url.ts","../../src/rules/format-rules/is-uuid.ts","../../src/rules/format-rules/is-vat-number.ts","../../src/rules/format-rules/matches.ts","../../src/rules/logical-rules/is-defined.ts","../../src/rules/logical-rules/is-empty.ts","../../src/rules/logical-rules/is-equal.ts","../../src/rules/logical-rules/range.ts","../../src/rules/type-rules/is-any.ts","../../src/rules/type-rules/is-array.ts","../../src/rules/type-rules/is-bigint.ts","../../src/rules/type-rules/is-boolean.ts","../../src/rules/type-rules/is-date.ts","../../src/rules/type-rules/is-enum.ts","../../src/rules/type-rules/is-integer.ts","../../src/rules/type-rules/is-null.ts","../../src/rules/type-rules/is-number.ts","../../src/rules/type-rules/is-object.ts","../../src/rules/type-rules/is-record.ts","../../src/rules/type-rules/is-string.ts","../../src/rules/type-rules/is-tuple.ts","../../src/rules/type-rules/is-undefined.ts","../../src/rules/utility-rules/all-of.ts","../../src/rules/utility-rules/exists.ts","../../src/rules/utility-rules/get-length.ts","../../src/rules/utility-rules/one-of.ts","../../src/rules/utility-rules/optional.ts","../../src/rules/utility-rules/pipe.ts","../../src/rules/utility-rules/required.ts"],"version":"5.8.3"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "valgen",
|
|
3
3
|
"description": "Fast runtime type validator, converter and io (encoding/decoding) library",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.15.0",
|
|
5
5
|
"author": "Panates",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@browsery/validator": "^13.12.0-r3",
|
|
9
9
|
"date-fns": "^4.1.0",
|
|
10
|
+
"reflect-metadata": "^0.2.2",
|
|
10
11
|
"ts-gems": "^3.11.3",
|
|
11
12
|
"tslib": "^2.8.1"
|
|
12
13
|
},
|
package/types/constants.d.ts
CHANGED
package/types/rules/index.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export * from './format-rules/is-vat-number.js';
|
|
|
27
27
|
export * from './format-rules/matches.js';
|
|
28
28
|
export * from './logical-rules/is-defined.js';
|
|
29
29
|
export * from './logical-rules/is-empty.js';
|
|
30
|
+
export * from './logical-rules/is-equal.js';
|
|
30
31
|
export * from './logical-rules/range.js';
|
|
31
32
|
export * from './type-rules/is-any.js';
|
|
32
33
|
export * from './type-rules/is-array.js';
|
|
@@ -42,9 +43,10 @@ export * from './type-rules/is-record.js';
|
|
|
42
43
|
export * from './type-rules/is-string.js';
|
|
43
44
|
export * from './type-rules/is-tuple.js';
|
|
44
45
|
export * from './type-rules/is-undefined.js';
|
|
46
|
+
export * from './utility-rules/all-of.js';
|
|
45
47
|
export * from './utility-rules/exists.js';
|
|
46
48
|
export * from './utility-rules/get-length.js';
|
|
49
|
+
export * from './utility-rules/one-of.js';
|
|
47
50
|
export * from './utility-rules/optional.js';
|
|
48
51
|
export * from './utility-rules/pipe.js';
|
|
49
52
|
export * from './utility-rules/required.js';
|
|
50
|
-
export * from './utility-rules/union.js';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type ValidationOptions } from '../../core/index.js';
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* @validator isEqual
|
|
5
|
+
*/
|
|
6
|
+
export declare function isEqual<T>(compare: T, options?: ValidationOptions): import("../../core/validator.js").Validator<any, any, import("../../core/types.js").ExecutionOptions>;
|
|
7
|
+
/**
|
|
8
|
+
*
|
|
9
|
+
* @validator isNotEqual
|
|
10
|
+
*/
|
|
11
|
+
export declare function isNotEqual(compare: any, options?: ValidationOptions): import("../../core/validator.js").Validator<any, any, import("../../core/types.js").ExecutionOptions>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Validator } from '../../core/index.js';
|
|
2
|
+
type DiscriminatorRecord = Record<string, Validator>;
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
export declare function oneOf(rules: (Validator | [Validator, DiscriminatorRecord])[]): Validator<unknown, any, import("../../core/types.js").ExecutionOptions>;
|
|
7
|
+
export {};
|
|
@@ -7,8 +7,3 @@ export interface PipeOptions extends ValidationOptions {
|
|
|
7
7
|
* @validator pipe
|
|
8
8
|
*/
|
|
9
9
|
export declare function pipe<T>(rules: Validator[], options?: PipeOptions): Validator<T>;
|
|
10
|
-
/**
|
|
11
|
-
* Test given value against to all codecs and returns original input
|
|
12
|
-
* @validator allOf
|
|
13
|
-
*/
|
|
14
|
-
export declare function allOf<T = any>(rules: Validator[]): Validator<T>;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.union = union;
|
|
4
|
-
const index_js_1 = require("../../core/index.js");
|
|
5
|
-
/**
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
function union(codecs) {
|
|
9
|
-
const l = codecs.length;
|
|
10
|
-
return (0, index_js_1.validator)('union', (input, context, _this) => {
|
|
11
|
-
let i;
|
|
12
|
-
let c;
|
|
13
|
-
let v;
|
|
14
|
-
let passed = false;
|
|
15
|
-
// Mock fail method to prevent errors
|
|
16
|
-
context.fail = () => (passed = false);
|
|
17
|
-
for (i = 0; i < l; i++) {
|
|
18
|
-
c = codecs[i];
|
|
19
|
-
try {
|
|
20
|
-
passed = true;
|
|
21
|
-
v = c(input, context);
|
|
22
|
-
if (passed)
|
|
23
|
-
break;
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
//
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
// Restore fail method
|
|
30
|
-
delete context.fail;
|
|
31
|
-
if (passed)
|
|
32
|
-
return v;
|
|
33
|
-
context.fail(_this, `Value didn't match any on union rules`, input);
|
|
34
|
-
});
|
|
35
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { validator, } from '../../core/index.js';
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
4
|
-
*/
|
|
5
|
-
export function union(codecs) {
|
|
6
|
-
const l = codecs.length;
|
|
7
|
-
return validator('union', (input, context, _this) => {
|
|
8
|
-
let i;
|
|
9
|
-
let c;
|
|
10
|
-
let v;
|
|
11
|
-
let passed = false;
|
|
12
|
-
// Mock fail method to prevent errors
|
|
13
|
-
context.fail = () => (passed = false);
|
|
14
|
-
for (i = 0; i < l; i++) {
|
|
15
|
-
c = codecs[i];
|
|
16
|
-
try {
|
|
17
|
-
passed = true;
|
|
18
|
-
v = c(input, context);
|
|
19
|
-
if (passed)
|
|
20
|
-
break;
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
//
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
// Restore fail method
|
|
27
|
-
delete context.fail;
|
|
28
|
-
if (passed)
|
|
29
|
-
return v;
|
|
30
|
-
context.fail(_this, `Value didn't match any on union rules`, input);
|
|
31
|
-
});
|
|
32
|
-
}
|