custom-class-validator-tools 1.0.12
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/index.d.ts +43 -0
- package/dist/index.js +60 -0
- package/dist/src/decorator/transform/any-to-bigint.decorator.d.ts +2 -0
- package/dist/src/decorator/transform/any-to-bigint.decorator.js +40 -0
- package/dist/src/decorator/transform/any-to-number.decorator.d.ts +2 -0
- package/dist/src/decorator/transform/any-to-number.decorator.js +43 -0
- package/dist/src/decorator/transform/any-to-string.decorator.d.ts +2 -0
- package/dist/src/decorator/transform/any-to-string.decorator.js +15 -0
- package/dist/src/decorator/transform/number-to-boolean.decorator.d.ts +2 -0
- package/dist/src/decorator/transform/number-to-boolean.decorator.js +22 -0
- package/dist/src/decorator/transform/string-to-boolean.decorator.d.ts +2 -0
- package/dist/src/decorator/transform/string-to-boolean.decorator.js +24 -0
- package/dist/src/decorator/validate/function/string-validator.function.d.ts +1 -0
- package/dist/src/decorator/validate/function/string-validator.function.js +13 -0
- package/dist/src/decorator/validate/is-not-empty-bigint-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-not-empty-bigint-string.decorator.js +49 -0
- package/dist/src/decorator/validate/is-not-empty-bigint.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-not-empty-bigint.decorator.js +23 -0
- package/dist/src/decorator/validate/is-not-empty-boolean-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-not-empty-boolean-string.decorator.js +23 -0
- package/dist/src/decorator/validate/is-not-empty-boolean.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-not-empty-boolean.decorator.js +23 -0
- package/dist/src/decorator/validate/is-not-empty-number-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-not-empty-number-string.decorator.js +24 -0
- package/dist/src/decorator/validate/is-not-empty-number.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-not-empty-number.decorator.js +24 -0
- package/dist/src/decorator/validate/is-not-empty-sql-date-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-not-empty-sql-date-string.decorator.js +30 -0
- package/dist/src/decorator/validate/is-not-empty-sql-date-time-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-not-empty-sql-date-time-string.decorator.js +30 -0
- package/dist/src/decorator/validate/is-not-empty-sql-time-string.decorator.d.ts +4 -0
- package/dist/src/decorator/validate/is-not-empty-sql-time-string.decorator.js +51 -0
- package/dist/src/decorator/validate/is-not-empty-string.decorator.d.ts +4 -0
- package/dist/src/decorator/validate/is-not-empty-string.decorator.js +24 -0
- package/dist/src/decorator/validate/is-nullable-bigint.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-nullable-bigint.decorator.js +24 -0
- package/dist/src/decorator/validate/is-nullable-boolean-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-nullable-boolean-string.decorator.js +24 -0
- package/dist/src/decorator/validate/is-nullable-boolean.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-nullable-boolean.decorator.js +24 -0
- package/dist/src/decorator/validate/is-nullable-number-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-nullable-number-string.decorator.js +25 -0
- package/dist/src/decorator/validate/is-nullable-number.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-nullable-number.decorator.js +25 -0
- package/dist/src/decorator/validate/is-nullable-sql-date-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-nullable-sql-date-string.decorator.js +30 -0
- package/dist/src/decorator/validate/is-nullable-sql-date-time-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-nullable-sql-date-time-string.decorator.js +30 -0
- package/dist/src/decorator/validate/is-nullable-sql-time-string.decorator.d.ts +4 -0
- package/dist/src/decorator/validate/is-nullable-sql-time-string.decorator.js +53 -0
- package/dist/src/decorator/validate/is-nullable-string.decorator.d.ts +4 -0
- package/dist/src/decorator/validate/is-nullable-string.decorator.js +26 -0
- package/dist/src/decorator/validate/is-nullable.decorator.d.ts +1 -0
- package/dist/src/decorator/validate/is-nullable.decorator.js +11 -0
- package/dist/src/decorator/validate/is-optional-bigint.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-optional-bigint.decorator.js +24 -0
- package/dist/src/decorator/validate/is-optional-boolean-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-optional-boolean-string.decorator.js +24 -0
- package/dist/src/decorator/validate/is-optional-boolean.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-optional-boolean.decorator.js +24 -0
- package/dist/src/decorator/validate/is-optional-number-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-optional-number-string.decorator.js +25 -0
- package/dist/src/decorator/validate/is-optional-number.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-optional-number.decorator.js +25 -0
- package/dist/src/decorator/validate/is-optional-sql-date-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-optional-sql-date-string.decorator.js +30 -0
- package/dist/src/decorator/validate/is-optional-sql-date-time-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-optional-sql-date-time-string.decorator.js +30 -0
- package/dist/src/decorator/validate/is-optional-sql-time-string.decorator.d.ts +4 -0
- package/dist/src/decorator/validate/is-optional-sql-time-string.decorator.js +56 -0
- package/dist/src/decorator/validate/is-optional-string.decorator.d.ts +4 -0
- package/dist/src/decorator/validate/is-optional-string.decorator.js +26 -0
- package/dist/src/decorator/validate/is-undefinable-bigint.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-undefinable-bigint.decorator.js +24 -0
- package/dist/src/decorator/validate/is-undefinable-boolean-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-undefinable-boolean-string.decorator.js +24 -0
- package/dist/src/decorator/validate/is-undefinable-boolean.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-undefinable-boolean.decorator.js +24 -0
- package/dist/src/decorator/validate/is-undefinable-number-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-undefinable-number-string.decorator.js +25 -0
- package/dist/src/decorator/validate/is-undefinable-number.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-undefinable-number.decorator.js +25 -0
- package/dist/src/decorator/validate/is-undefinable-sql-date-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-undefinable-sql-date-string.decorator.js +30 -0
- package/dist/src/decorator/validate/is-undefinable-sql-date-time-string.decorator.d.ts +2 -0
- package/dist/src/decorator/validate/is-undefinable-sql-date-time-string.decorator.js +30 -0
- package/dist/src/decorator/validate/is-undefinable-sql-time.decorator.d.ts +4 -0
- package/dist/src/decorator/validate/is-undefinable-sql-time.decorator.js +57 -0
- package/dist/src/decorator/validate/is-undefinable-string.decorator.d.ts +4 -0
- package/dist/src/decorator/validate/is-undefinable-string.decorator.js +26 -0
- package/dist/src/decorator/validate/is-undefinable.decorator.d.ts +1 -0
- package/dist/src/decorator/validate/is-undefinable.decorator.js +11 -0
- package/dist/src/function/validate-with-header.decorators.d.ts +2 -0
- package/dist/src/function/validate-with-header.decorators.js +33 -0
- package/dist/src/util/is-boolean.d.ts +2 -0
- package/dist/src/util/is-boolean.js +11 -0
- package/dist/src/util/is-empty.d.ts +12 -0
- package/dist/src/util/is-empty.js +80 -0
- package/package.json +42 -0
- package/readme.md +71 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IsOptionalString = void 0;
|
|
4
|
+
const is_boolean_1 = require("../../util/is-boolean");
|
|
5
|
+
const is_empty_1 = require("../../util/is-empty");
|
|
6
|
+
const class_validator_1 = require("class-validator");
|
|
7
|
+
const string_validator_function_1 = require("./function/string-validator.function");
|
|
8
|
+
function IsOptionalString(validationOptions) {
|
|
9
|
+
return function (object, propertyName) {
|
|
10
|
+
(0, class_validator_1.registerDecorator)({
|
|
11
|
+
name: 'IsOptionalString',
|
|
12
|
+
target: object.constructor,
|
|
13
|
+
propertyName: propertyName,
|
|
14
|
+
options: validationOptions,
|
|
15
|
+
validator: {
|
|
16
|
+
validate(value) {
|
|
17
|
+
return (0, is_boolean_1.isTrue)((0, string_validator_function_1.stringValidator)(value, validationOptions?.blank)) || (0, is_empty_1.isEmptySimple)(value);
|
|
18
|
+
},
|
|
19
|
+
defaultMessage(validationArguments) {
|
|
20
|
+
return `${validationArguments?.property} should be string or null or undefined`;
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
exports.IsOptionalString = IsOptionalString;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IsUndefinableBigInt = void 0;
|
|
4
|
+
const is_empty_1 = require("../../util/is-empty");
|
|
5
|
+
const class_validator_1 = require("class-validator");
|
|
6
|
+
function IsUndefinableBigInt(validationOptions) {
|
|
7
|
+
return function (object, propertyName) {
|
|
8
|
+
(0, class_validator_1.registerDecorator)({
|
|
9
|
+
name: 'IsUndefinableBigInt',
|
|
10
|
+
target: object.constructor,
|
|
11
|
+
propertyName: propertyName,
|
|
12
|
+
options: validationOptions,
|
|
13
|
+
validator: {
|
|
14
|
+
validate(value) {
|
|
15
|
+
return typeof value === 'bigint' || (0, is_empty_1.isUndefined)(value);
|
|
16
|
+
},
|
|
17
|
+
defaultMessage(validationArguments) {
|
|
18
|
+
return `${validationArguments?.property} should be string or undefined`;
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
exports.IsUndefinableBigInt = IsUndefinableBigInt;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IsUndefinableBooleanString = void 0;
|
|
4
|
+
const is_empty_1 = require("../../util/is-empty");
|
|
5
|
+
const class_validator_1 = require("class-validator");
|
|
6
|
+
function IsUndefinableBooleanString(validationOptions) {
|
|
7
|
+
return function (object, propertyName) {
|
|
8
|
+
(0, class_validator_1.registerDecorator)({
|
|
9
|
+
name: 'IsUndefinableBooleanString',
|
|
10
|
+
target: object.constructor,
|
|
11
|
+
propertyName: propertyName,
|
|
12
|
+
options: validationOptions,
|
|
13
|
+
validator: {
|
|
14
|
+
validate(value) {
|
|
15
|
+
return (typeof value === 'string' && value.length > 0 && ['true', 'false'].includes(value)) || (0, is_empty_1.isUndefined)(value);
|
|
16
|
+
},
|
|
17
|
+
defaultMessage(validationArguments) {
|
|
18
|
+
return `${validationArguments?.property} should be boolean or null or undefined`;
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
exports.IsUndefinableBooleanString = IsUndefinableBooleanString;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IsUndefinableBoolean = void 0;
|
|
4
|
+
const is_empty_1 = require("../../util/is-empty");
|
|
5
|
+
const class_validator_1 = require("class-validator");
|
|
6
|
+
function IsUndefinableBoolean(validationOptions) {
|
|
7
|
+
return function (object, propertyName) {
|
|
8
|
+
(0, class_validator_1.registerDecorator)({
|
|
9
|
+
name: 'IsUndefinableBoolean',
|
|
10
|
+
target: object.constructor,
|
|
11
|
+
propertyName: propertyName,
|
|
12
|
+
options: validationOptions,
|
|
13
|
+
validator: {
|
|
14
|
+
validate(value) {
|
|
15
|
+
return typeof value === 'boolean' || (0, is_empty_1.isUndefined)(value);
|
|
16
|
+
},
|
|
17
|
+
defaultMessage(validationArguments) {
|
|
18
|
+
return `${validationArguments?.property} should be boolean or undefined`;
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
exports.IsUndefinableBoolean = IsUndefinableBoolean;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IsUndefinableNumberString = void 0;
|
|
4
|
+
const is_boolean_1 = require("../../util/is-boolean");
|
|
5
|
+
const is_empty_1 = require("../../util/is-empty");
|
|
6
|
+
const class_validator_1 = require("class-validator");
|
|
7
|
+
function IsUndefinableNumberString(validationOptions) {
|
|
8
|
+
return function (object, propertyName) {
|
|
9
|
+
(0, class_validator_1.registerDecorator)({
|
|
10
|
+
name: 'IsUndefinableNumberString',
|
|
11
|
+
target: object.constructor,
|
|
12
|
+
propertyName: propertyName,
|
|
13
|
+
options: validationOptions,
|
|
14
|
+
validator: {
|
|
15
|
+
validate(value) {
|
|
16
|
+
return (typeof value === 'string' && value.length > 0 && (0, is_boolean_1.isFalse)(isNaN(Number(value)))) || (0, is_empty_1.isUndefined)(value);
|
|
17
|
+
},
|
|
18
|
+
defaultMessage(validationArguments) {
|
|
19
|
+
return `${validationArguments?.property} should be number`;
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
exports.IsUndefinableNumberString = IsUndefinableNumberString;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IsUndefinableNumber = void 0;
|
|
4
|
+
const is_boolean_1 = require("../../util/is-boolean");
|
|
5
|
+
const is_empty_1 = require("../../util/is-empty");
|
|
6
|
+
const class_validator_1 = require("class-validator");
|
|
7
|
+
function IsUndefinableNumber(validationOptions) {
|
|
8
|
+
return function (object, propertyName) {
|
|
9
|
+
(0, class_validator_1.registerDecorator)({
|
|
10
|
+
name: 'IsUndefinableNumber',
|
|
11
|
+
target: object.constructor,
|
|
12
|
+
propertyName: propertyName,
|
|
13
|
+
options: validationOptions,
|
|
14
|
+
validator: {
|
|
15
|
+
validate(value) {
|
|
16
|
+
return (typeof value === 'number' && (0, is_boolean_1.isFalse)(isNaN(value))) || (0, is_empty_1.isUndefined)(value);
|
|
17
|
+
},
|
|
18
|
+
defaultMessage(validationArguments) {
|
|
19
|
+
return `${validationArguments?.property} should be number or undefined`;
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
exports.IsUndefinableNumber = IsUndefinableNumber;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.IsUndefinableSQLDateString = void 0;
|
|
7
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
8
|
+
const customParseFormat_1 = __importDefault(require("dayjs/plugin/customParseFormat"));
|
|
9
|
+
const is_empty_1 = require("../../util/is-empty");
|
|
10
|
+
const class_validator_1 = require("class-validator");
|
|
11
|
+
dayjs_1.default.extend(customParseFormat_1.default);
|
|
12
|
+
function IsUndefinableSQLDateString(validationOptions) {
|
|
13
|
+
return function (object, propertyName) {
|
|
14
|
+
(0, class_validator_1.registerDecorator)({
|
|
15
|
+
name: 'IsUndefinableSQLDateString',
|
|
16
|
+
target: object.constructor,
|
|
17
|
+
propertyName: propertyName,
|
|
18
|
+
options: validationOptions,
|
|
19
|
+
validator: {
|
|
20
|
+
validate(value) {
|
|
21
|
+
return (0, is_empty_1.isUndefined)(value) || (typeof value === 'string' && (0, dayjs_1.default)(value, 'YYYY-MM-DD', true).isValid());
|
|
22
|
+
},
|
|
23
|
+
defaultMessage(validationArguments) {
|
|
24
|
+
return `${validationArguments?.property} should be YYYY-MM-DD`;
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
exports.IsUndefinableSQLDateString = IsUndefinableSQLDateString;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.IsUndefinableSQLDateTimeString = void 0;
|
|
7
|
+
const is_empty_1 = require("../../util/is-empty");
|
|
8
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
9
|
+
const customParseFormat_1 = __importDefault(require("dayjs/plugin/customParseFormat"));
|
|
10
|
+
const class_validator_1 = require("class-validator");
|
|
11
|
+
dayjs_1.default.extend(customParseFormat_1.default);
|
|
12
|
+
function IsUndefinableSQLDateTimeString(validationOptions) {
|
|
13
|
+
return function (object, propertyName) {
|
|
14
|
+
(0, class_validator_1.registerDecorator)({
|
|
15
|
+
name: 'IsUndefinableSQLDateTimeString',
|
|
16
|
+
target: object.constructor,
|
|
17
|
+
propertyName: propertyName,
|
|
18
|
+
options: validationOptions,
|
|
19
|
+
validator: {
|
|
20
|
+
validate(value) {
|
|
21
|
+
return (0, is_empty_1.isUndefined)(value) || (typeof value === 'string' && (0, dayjs_1.default)(value, 'YYYY-MM-DD HH:mm:ss', true).isValid());
|
|
22
|
+
},
|
|
23
|
+
defaultMessage(validationArguments) {
|
|
24
|
+
return `${validationArguments?.property} should be YYYY-MM-DD hh:mm:ss`;
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
exports.IsUndefinableSQLDateTimeString = IsUndefinableSQLDateTimeString;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.IsUndefinableSQLTimeString = void 0;
|
|
27
|
+
const is_empty_1 = require("../../util/is-empty");
|
|
28
|
+
const FF = __importStar(require("fp-ts/function"));
|
|
29
|
+
const FO = __importStar(require("fp-ts/Option"));
|
|
30
|
+
const class_validator_1 = require("class-validator");
|
|
31
|
+
function IsUndefinableSQLTimeString(validationOptions) {
|
|
32
|
+
return function (object, propertyName) {
|
|
33
|
+
(0, class_validator_1.registerDecorator)({
|
|
34
|
+
name: 'IsUndefinableSQLTimeString',
|
|
35
|
+
target: object.constructor,
|
|
36
|
+
propertyName: propertyName,
|
|
37
|
+
options: validationOptions,
|
|
38
|
+
validator: {
|
|
39
|
+
validate(value) {
|
|
40
|
+
return FF.pipe(value, FO.fromPredicate(refinement => (0, is_empty_1.isUndefined)(refinement)), FO.fold(() => {
|
|
41
|
+
return FF.pipe(value, FO.fromPredicate(refinement => typeof refinement === 'string'), FO.fold(() => false, () => {
|
|
42
|
+
return FF.pipe(validationOptions?.format, FO.fromPredicate(refinement => refinement === 'hh:mm'), FO.fold(() => {
|
|
43
|
+
return RegExp(/^(?:(?:([01]\d|2[0-3]):)?([0-5]\d):)?([0-5]\d)$/).test(value);
|
|
44
|
+
}, () => {
|
|
45
|
+
return RegExp(/^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/).test(value);
|
|
46
|
+
}));
|
|
47
|
+
}));
|
|
48
|
+
}, () => true));
|
|
49
|
+
},
|
|
50
|
+
defaultMessage(validationArguments) {
|
|
51
|
+
return `${validationArguments?.property} should be YYYY-MM-DD hh:mm:ss`;
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
exports.IsUndefinableSQLTimeString = IsUndefinableSQLTimeString;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IsUndefinableString = void 0;
|
|
4
|
+
const is_boolean_1 = require("../../util/is-boolean");
|
|
5
|
+
const is_empty_1 = require("../../util/is-empty");
|
|
6
|
+
const class_validator_1 = require("class-validator");
|
|
7
|
+
const string_validator_function_1 = require("./function/string-validator.function");
|
|
8
|
+
function IsUndefinableString(validationOptions) {
|
|
9
|
+
return function (object, propertyName) {
|
|
10
|
+
(0, class_validator_1.registerDecorator)({
|
|
11
|
+
name: 'IsUndefinableString',
|
|
12
|
+
target: object.constructor,
|
|
13
|
+
propertyName: propertyName,
|
|
14
|
+
options: validationOptions,
|
|
15
|
+
validator: {
|
|
16
|
+
validate(value) {
|
|
17
|
+
return (0, is_boolean_1.isTrue)((0, string_validator_function_1.stringValidator)(value, validationOptions?.blank)) || (0, is_empty_1.isUndefined)(value);
|
|
18
|
+
},
|
|
19
|
+
defaultMessage(validationArguments) {
|
|
20
|
+
return `${validationArguments?.property} should be string or undefined`;
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
exports.IsUndefinableString = IsUndefinableString;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function IsUndefinable(): PropertyDecorator;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IsUndefinable = void 0;
|
|
4
|
+
const class_validator_1 = require("class-validator");
|
|
5
|
+
const is_empty_1 = require("../../util/is-empty");
|
|
6
|
+
function IsUndefinable() {
|
|
7
|
+
return (0, class_validator_1.ValidateIf)((_, value) => {
|
|
8
|
+
return (0, is_empty_1.isNotUndefined)(value);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
exports.IsUndefinable = IsUndefinable;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.validateWithHeaders = void 0;
|
|
27
|
+
const class_validator_1 = require("class-validator");
|
|
28
|
+
const FE = __importStar(require("fp-ts/Either"));
|
|
29
|
+
const FF = __importStar(require("fp-ts/function"));
|
|
30
|
+
function validateWithHeaders(dto) {
|
|
31
|
+
return FF.pipe(FE.tryCatch(() => (0, class_validator_1.validateSync)(dto, { skipUndefinedProperties: true }), FE.toError), FE.fold(() => [], right => right));
|
|
32
|
+
}
|
|
33
|
+
exports.validateWithHeaders = validateWithHeaders;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isFalse = exports.isTrue = void 0;
|
|
4
|
+
function isTrue(value) {
|
|
5
|
+
return value;
|
|
6
|
+
}
|
|
7
|
+
exports.isTrue = isTrue;
|
|
8
|
+
function isFalse(value) {
|
|
9
|
+
return !value;
|
|
10
|
+
}
|
|
11
|
+
exports.isFalse = isFalse;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function isUndefined<T>(value: T | undefined): value is undefined;
|
|
2
|
+
export declare function isNotUndefined<T>(value?: T | undefined): value is T;
|
|
3
|
+
export declare function isNull<T>(value?: T | null): value is null;
|
|
4
|
+
export declare function isNotNull<T>(value?: T | null): value is T;
|
|
5
|
+
declare type TSimpleValue<T> = T | null | undefined;
|
|
6
|
+
export declare function isEmptySimple<T>(value: TSimpleValue<T>): value is null | undefined;
|
|
7
|
+
export declare function isNotEmptySimple<T>(value: TSimpleValue<T>): value is T;
|
|
8
|
+
export declare function isEmptyString(value?: string | null | undefined): value is null | undefined;
|
|
9
|
+
export declare function isNotEmptyString(value?: string | null | undefined): value is string;
|
|
10
|
+
export declare function isEmpty<T>(value?: T | null | undefined): value is null | undefined;
|
|
11
|
+
export declare function isNotEmpty<T>(value?: T | null | undefined): value is T;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.isNotEmpty = exports.isEmpty = exports.isNotEmptyString = exports.isEmptyString = exports.isNotEmptySimple = exports.isEmptySimple = exports.isNotNull = exports.isNull = exports.isNotUndefined = exports.isUndefined = void 0;
|
|
27
|
+
const FE = __importStar(require("fp-ts/Either"));
|
|
28
|
+
const FF = __importStar(require("fp-ts/function"));
|
|
29
|
+
function isUndefined(value) {
|
|
30
|
+
return value === undefined;
|
|
31
|
+
}
|
|
32
|
+
exports.isUndefined = isUndefined;
|
|
33
|
+
function isNotUndefined(value) {
|
|
34
|
+
return !isUndefined(value);
|
|
35
|
+
}
|
|
36
|
+
exports.isNotUndefined = isNotUndefined;
|
|
37
|
+
function isNull(value) {
|
|
38
|
+
return value === null;
|
|
39
|
+
}
|
|
40
|
+
exports.isNull = isNull;
|
|
41
|
+
function isNotNull(value) {
|
|
42
|
+
return !isNull(value);
|
|
43
|
+
}
|
|
44
|
+
exports.isNotNull = isNotNull;
|
|
45
|
+
function isEmptySimple(value) {
|
|
46
|
+
return isUndefined(value) || isNull(value);
|
|
47
|
+
}
|
|
48
|
+
exports.isEmptySimple = isEmptySimple;
|
|
49
|
+
function isNotEmptySimple(value) {
|
|
50
|
+
return !isEmptySimple(value);
|
|
51
|
+
}
|
|
52
|
+
exports.isNotEmptySimple = isNotEmptySimple;
|
|
53
|
+
function isEmptyString(value) {
|
|
54
|
+
return FF.pipe(value, FE.fromNullable(true), FE.map(notNull => notNull === ''), FE.fold(left => left, right => right));
|
|
55
|
+
}
|
|
56
|
+
exports.isEmptyString = isEmptyString;
|
|
57
|
+
function isNotEmptyString(value) {
|
|
58
|
+
return !isEmptyString(value);
|
|
59
|
+
}
|
|
60
|
+
exports.isNotEmptyString = isNotEmptyString;
|
|
61
|
+
function isEmpty(value) {
|
|
62
|
+
return FF.pipe(value, FE.fromNullable(true), FE.chain(notNull => {
|
|
63
|
+
return typeof notNull === 'string' && notNull === '' ? FE.left(true) : FE.right(notNull);
|
|
64
|
+
}), FE.chain(notString => {
|
|
65
|
+
return typeof notString === 'number' && isNaN(notString) ? FE.left(true) : FE.right(notString);
|
|
66
|
+
}), FE.chain(notNumber => {
|
|
67
|
+
return typeof notNumber === 'object' && Array.isArray(notNumber) && notNumber.length < 1
|
|
68
|
+
? FE.left(true)
|
|
69
|
+
: FE.right(notNumber);
|
|
70
|
+
}), FE.chain(notArray => {
|
|
71
|
+
return typeof notArray === 'object' && !(notArray instanceof Date) && Object.keys(notArray).length < 1
|
|
72
|
+
? FE.left(true)
|
|
73
|
+
: FE.right(notArray);
|
|
74
|
+
}), FE.fold(left => left, () => false));
|
|
75
|
+
}
|
|
76
|
+
exports.isEmpty = isEmpty;
|
|
77
|
+
function isNotEmpty(value) {
|
|
78
|
+
return !isEmpty(value);
|
|
79
|
+
}
|
|
80
|
+
exports.isNotEmpty = isNotEmpty;
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "custom-class-validator-tools",
|
|
3
|
+
"version": "1.0.12",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"typings": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist/**/*"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"test": "jest",
|
|
12
|
+
"test:coverage": "jest --coverage",
|
|
13
|
+
"create:index": "just create:index",
|
|
14
|
+
"build": "just build",
|
|
15
|
+
"pub:npm": "just pub-npm"
|
|
16
|
+
},
|
|
17
|
+
"author": "internalservererror",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"class-transformer": "^0.5.1",
|
|
21
|
+
"class-validator": "^0.13.2",
|
|
22
|
+
"dayjs": "^1.11.2",
|
|
23
|
+
"fp-ts": "^2.11.9"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/jest": "^27.4.1",
|
|
27
|
+
"@typescript-eslint/eslint-plugin": "^5.16.0",
|
|
28
|
+
"@typescript-eslint/parser": "^5.16.0",
|
|
29
|
+
"ctix": "^0.6.0",
|
|
30
|
+
"eslint": "^8.11.0",
|
|
31
|
+
"eslint-config-prettier": "^8.5.0",
|
|
32
|
+
"eslint-plugin-import": "^2.25.4",
|
|
33
|
+
"jest": "^28.1.0",
|
|
34
|
+
"just-scripts": "^2.0.0",
|
|
35
|
+
"prettier": "^2.6.0",
|
|
36
|
+
"reflect-metadata": "^0.1.13",
|
|
37
|
+
"ts-jest": "^28.0.3",
|
|
38
|
+
"ts-node": "^10.7.0",
|
|
39
|
+
"tsc-alias": "^1.6.7",
|
|
40
|
+
"typescript": "^4.6.2"
|
|
41
|
+
}
|
|
42
|
+
}
|
package/readme.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
## String type decorator
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
| Decorator | Type | Description|
|
|
5
|
+
| --- | --- | --- |
|
|
6
|
+
| @IsNullableString | string | null | If want to ignore value ≠= ‘’, @IsNullableString({ blank: true }) |
|
|
7
|
+
| @IsUndefinableString | string | undefined | If want to ignore value ≠= ‘’, @IsUndefinableString({ blank: true }) |
|
|
8
|
+
| @IsOptionalString | string | null | undefined | If want to ignore value ≠= ‘’, @IsOptionalString({ blank: true }) |
|
|
9
|
+
| @IsNotEmptyNumberString | string | Checks a string is a number |
|
|
10
|
+
| @IsNotEmptyBooleanString | string | Checks a string is a boolean |
|
|
11
|
+
| @IsNullableNumberString | string | null | Checks a string is a number or null |
|
|
12
|
+
| @IsNullableBooleanString | string | null | Checks a string is a boolean or null |
|
|
13
|
+
| @IsUndefinableNumberString | string | undefined | Checks a string is a number or undefined |
|
|
14
|
+
| @IsUndefinableBooleanString | string | undefined | Checks a string is a boolean or null |
|
|
15
|
+
| @IsOptionalNumberString | string | null | undefined | Checks a string is a number or null or undefined |
|
|
16
|
+
| @IsOptionalBooleanString | string | null | undefined | Checks a string is a boolean or null or undefined |
|
|
17
|
+
|
|
18
|
+
## Number type decorator
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
| Decorator | Type |
|
|
22
|
+
|----------------------|--------|
|
|
23
|
+
| @IsNotEmptyNumber | number |
|
|
24
|
+
| @IsNullableNumber | nubmer | null |
|
|
25
|
+
| @IsUndefinableNumber | number | undefined |
|
|
26
|
+
| @IsOptionalNumber | number | null | undefined |
|
|
27
|
+
| | |
|
|
28
|
+
|
|
29
|
+
## Boolean type decorator
|
|
30
|
+
|
|
31
|
+
| Decorator | Type |
|
|
32
|
+
| --- | --- |
|
|
33
|
+
| @IsNotEmptyBoolean | boolean |
|
|
34
|
+
| @IsNullableBoolean | boolean | null |
|
|
35
|
+
| @IsUndefinalbeBoolean | boolean | undefined |
|
|
36
|
+
| @IsOptionalBoolean | boolean | null | undefined |
|
|
37
|
+
|
|
38
|
+
## ValidateNested usage case
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
import { isNotEmptyString, IsNotEmptyBoolean, isNullable, IsUndefinable } from 'custom-class-validator-tools';
|
|
42
|
+
import { IsInstance, ArrayNotEmpty, ValidateNested } from 'class-validator';
|
|
43
|
+
import { Type } from 'class-transformer';
|
|
44
|
+
|
|
45
|
+
class Tag {
|
|
46
|
+
@IsNotEmptyString()
|
|
47
|
+
tag1: string;
|
|
48
|
+
@IsNotEmptyString()
|
|
49
|
+
tag2: string;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
class Result {
|
|
53
|
+
@IsNotEmptyBoolean()
|
|
54
|
+
failed: boolean;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
class Post {
|
|
58
|
+
@IsNullable()
|
|
59
|
+
@ArrayNotEmpty()
|
|
60
|
+
@IsInstance(Tag, { each: true })
|
|
61
|
+
@ValidateNested({ each: true })
|
|
62
|
+
@Type(() => Tag)
|
|
63
|
+
tags: Tag[] | null;
|
|
64
|
+
|
|
65
|
+
@IsUndefinable()
|
|
66
|
+
@IsInstance(Result)
|
|
67
|
+
@ValidateNested()
|
|
68
|
+
@Type(() => Result)
|
|
69
|
+
result?: Result;
|
|
70
|
+
}
|
|
71
|
+
```
|