@darraghor/eslint-plugin-nestjs-typed 4.4.3 → 4.6.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.
|
@@ -15,8 +15,11 @@ const rule = (0, createRule_1.createRule)({
|
|
|
15
15
|
},
|
|
16
16
|
messages: {
|
|
17
17
|
"missing-is-defined-decorator": "Non-optional properties must have a decorator that checks the value is defined (for example: @IsDefined())",
|
|
18
|
-
"missing-is-optional-decorator": "Optional properties must have @IsOptional() decorator",
|
|
19
|
-
"conflicting-defined-decorators": "Properties can have @IsDefined() or @IsOptional() but not both",
|
|
18
|
+
"missing-is-optional-decorator": "Optional properties must have @IsOptional() or @ValidateIf() decorator",
|
|
19
|
+
"conflicting-defined-decorators-defined-optional": "Properties can have @IsDefined() or @IsOptional() but not both",
|
|
20
|
+
"conflicting-defined-decorators-defined-validate-if": "Properties can have @IsDefined() or @ValidateIf() but not both",
|
|
21
|
+
"conflicting-defined-decorators-optional-validate-if": "Properties can have @IsOptional() or @ValidateIf() but not both",
|
|
22
|
+
"conflicting-defined-decorators-all": "Properties can have one of @IsDefined() or @IsOptional() or @ValidateIf()",
|
|
20
23
|
},
|
|
21
24
|
type: "problem",
|
|
22
25
|
schema: [],
|
|
@@ -39,17 +42,40 @@ const rule = (0, createRule_1.createRule)({
|
|
|
39
42
|
propertyDefinition,
|
|
40
43
|
decoratorsStatus,
|
|
41
44
|
]);
|
|
42
|
-
// It doesn't make sense to have
|
|
45
|
+
// It doesn't make sense to have all three decorators on the same property
|
|
43
46
|
if (decoratorsStatus.hasIsDefinedDecorator &&
|
|
47
|
+
decoratorsStatus.hasIsOptionalDecorator &&
|
|
48
|
+
decoratorsStatus.hasValidateIfDecorator) {
|
|
49
|
+
context.report({
|
|
50
|
+
node: propertyDefinition,
|
|
51
|
+
messageId: "conflicting-defined-decorators-all",
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
else if (decoratorsStatus.hasIsDefinedDecorator &&
|
|
44
55
|
decoratorsStatus.hasIsOptionalDecorator) {
|
|
45
56
|
context.report({
|
|
46
57
|
node: propertyDefinition,
|
|
47
|
-
messageId: "conflicting-defined-decorators",
|
|
58
|
+
messageId: "conflicting-defined-decorators-defined-optional",
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else if (decoratorsStatus.hasIsDefinedDecorator &&
|
|
62
|
+
decoratorsStatus.hasValidateIfDecorator) {
|
|
63
|
+
context.report({
|
|
64
|
+
node: propertyDefinition,
|
|
65
|
+
messageId: "conflicting-defined-decorators-defined-validate-if",
|
|
48
66
|
});
|
|
49
67
|
}
|
|
50
|
-
if (decoratorsStatus.
|
|
68
|
+
else if (decoratorsStatus.hasIsOptionalDecorator &&
|
|
69
|
+
decoratorsStatus.hasValidateIfDecorator) {
|
|
70
|
+
context.report({
|
|
71
|
+
node: propertyDefinition,
|
|
72
|
+
messageId: "conflicting-defined-decorators-optional-validate-if",
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
else if (decoratorsStatus.hasIsDefinedDecorator ||
|
|
51
76
|
decoratorsStatus.hasTypeCheckingDecorator ||
|
|
52
|
-
decoratorsStatus.hasIsOptionalDecorator
|
|
77
|
+
decoratorsStatus.hasIsOptionalDecorator ||
|
|
78
|
+
decoratorsStatus.hasValidateIfDecorator) {
|
|
53
79
|
withDecoratorCount++;
|
|
54
80
|
}
|
|
55
81
|
}
|
|
@@ -64,7 +90,8 @@ const rule = (0, createRule_1.createRule)({
|
|
|
64
90
|
// if the type is nullable, it should be optional
|
|
65
91
|
if (propertyDefinition.optional ||
|
|
66
92
|
(0, type_utils_1.isNullableType)(type)) {
|
|
67
|
-
if (!decoratorsStatus.hasIsOptionalDecorator
|
|
93
|
+
if (!decoratorsStatus.hasIsOptionalDecorator &&
|
|
94
|
+
!decoratorsStatus.hasValidateIfDecorator) {
|
|
68
95
|
context.report({
|
|
69
96
|
node: propertyDefinition,
|
|
70
97
|
messageId: "missing-is-optional-decorator",
|
|
@@ -96,6 +123,7 @@ function getDecoratorsStatus(propertyDefinition) {
|
|
|
96
123
|
let hasIsDefinedDecorator = false;
|
|
97
124
|
let hasTypeCheckingDecorator = false;
|
|
98
125
|
let hasIsOptionalDecorator = false;
|
|
126
|
+
let hasValidateIfDecorator = false;
|
|
99
127
|
const program = typedTokenHelpers_1.typedTokenHelpers.getRootProgram(propertyDefinition);
|
|
100
128
|
if (propertyDefinition.decorators) {
|
|
101
129
|
for (const decorator of propertyDefinition.decorators) {
|
|
@@ -107,7 +135,8 @@ function getDecoratorsStatus(propertyDefinition) {
|
|
|
107
135
|
}
|
|
108
136
|
// We care if the decorator is a validation decorator like IsString etc for checks later
|
|
109
137
|
if (decorator.expression.callee.name !== "IsDefined" &&
|
|
110
|
-
decorator.expression.callee.name !== "IsOptional"
|
|
138
|
+
decorator.expression.callee.name !== "IsOptional" &&
|
|
139
|
+
decorator.expression.callee.name !== "ValidateIf") {
|
|
111
140
|
hasTypeCheckingDecorator = true;
|
|
112
141
|
}
|
|
113
142
|
// otherwise check if it is isDefined or isOptional, we will use this later
|
|
@@ -117,6 +146,9 @@ function getDecoratorsStatus(propertyDefinition) {
|
|
|
117
146
|
if (decorator.expression.callee.name === "IsOptional") {
|
|
118
147
|
hasIsOptionalDecorator = true;
|
|
119
148
|
}
|
|
149
|
+
if (decorator.expression.callee.name === "ValidateIf") {
|
|
150
|
+
hasValidateIfDecorator = true;
|
|
151
|
+
}
|
|
120
152
|
}
|
|
121
153
|
}
|
|
122
154
|
}
|
|
@@ -124,6 +156,7 @@ function getDecoratorsStatus(propertyDefinition) {
|
|
|
124
156
|
hasIsDefinedDecorator,
|
|
125
157
|
hasTypeCheckingDecorator,
|
|
126
158
|
hasIsOptionalDecorator,
|
|
159
|
+
hasValidateIfDecorator,
|
|
127
160
|
};
|
|
128
161
|
}
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsUHJvcGVydGllc0hhdmVFeHBsaWNpdERlZmluZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvYWxsUHJvcGVydGllc0hhdmVFeHBsaWNpdERlZmluZWQvYWxsUHJvcGVydGllc0hhdmVFeHBsaWNpdERlZmluZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxvREFLa0M7QUFDbEMsOERBQTZEO0FBQzdELHlDQUF5RDtBQUN6RCx1REFBa0Q7QUFFbEQscUVBQWdFO0FBR2hFLE1BQU0sSUFBSSxHQUFHLElBQUEsdUJBQVUsRUFRckI7SUFDRSxJQUFJLEVBQUUsc0NBQXNDO0lBQzVDLElBQUksRUFBRTtRQUNGLElBQUksRUFBRTtZQUNGLFdBQVcsRUFDUCxrRUFBa0U7WUFDdEUsV0FBVyxFQUFFLE9BQTZCO1lBQzFDLG9CQUFvQixFQUFFLElBQUk7U0FDN0I7UUFDRCxRQUFRLEVBQUU7WUFDTiw4QkFBOEIsRUFDMUIsNEdBQTRHO1lBQ2hILCtCQUErQixFQUMzQix3RUFBd0U7WUFDNUUsaURBQWlELEVBQzdDLGdFQUFnRTtZQUNwRSxvREFBb0QsRUFDaEQsZ0VBQWdFO1lBQ3BFLHFEQUFxRCxFQUNqRCxpRUFBaUU7WUFDckUsb0NBQW9DLEVBQ2hDLDJFQUEyRTtTQUNsRjtRQUNELElBQUksRUFBRSxTQUFTO1FBQ2YsTUFBTSxFQUFFLEVBQUU7S0FDYjtJQUNELGNBQWMsRUFBRSxFQUFFO0lBQ2xCLE1BQU0sRUFBRSxVQUFVLE9BQU87UUFDckIsTUFBTSxPQUFPLEdBQUcsbUJBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2pELE9BQU87WUFDSCxnRUFBZ0U7WUFDaEUsZ0JBQWdCLENBQUMsSUFBK0I7Z0JBQzVDLE1BQU0sdUNBQXVDLEdBR3ZDLEVBQUUsQ0FBQztnQkFDVCxJ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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@darraghor/eslint-plugin-nestjs-typed",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.6.0",
|
|
4
4
|
"description": "Eslint rules for nestjs projects",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"clean": "rm -Rf ./dist/",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"test": "export NODE_OPTIONS=\"--max-old-space-size=8192\" && npx jest --runInBand --colors --reporters=default --no-cache --coverage=false --silent=false -c jest.config.ts",
|
|
11
11
|
"pre-commit": "npx lint-staged",
|
|
12
12
|
"prettier": "prettier --write src/*",
|
|
13
|
-
"prepare": "husky
|
|
13
|
+
"prepare": "husky",
|
|
14
14
|
"release": "npx semantic-release",
|
|
15
15
|
"semantic-release": "semantic-release"
|
|
16
16
|
},
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"main": "dist/index.js",
|
|
44
44
|
"types": "index.d.ts",
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@typescript-eslint/scope-manager": "6.
|
|
47
|
-
"@typescript-eslint/utils": "6.
|
|
46
|
+
"@typescript-eslint/scope-manager": "6.21.0",
|
|
47
|
+
"@typescript-eslint/utils": "6.21.0",
|
|
48
48
|
"eslint-module-utils": "2.8.0",
|
|
49
49
|
"reflect-metadata": "0.2.1"
|
|
50
50
|
},
|
|
@@ -54,23 +54,23 @@
|
|
|
54
54
|
"@semantic-release/changelog": "6.0.3",
|
|
55
55
|
"@semantic-release/exec": "6.0.3",
|
|
56
56
|
"@types/eslint": "8.56.2",
|
|
57
|
-
"@types/jest": "29.5.
|
|
58
|
-
"@types/node": "20.11.
|
|
59
|
-
"@typescript-eslint/eslint-plugin": "6.
|
|
60
|
-
"@typescript-eslint/parser": "6.
|
|
61
|
-
"@typescript-eslint/rule-tester": "6.
|
|
57
|
+
"@types/jest": "29.5.12",
|
|
58
|
+
"@types/node": "20.11.16",
|
|
59
|
+
"@typescript-eslint/eslint-plugin": "6.21.0",
|
|
60
|
+
"@typescript-eslint/parser": "6.21.0",
|
|
61
|
+
"@typescript-eslint/rule-tester": "6.21.0",
|
|
62
62
|
"class-validator": "^0.14.1",
|
|
63
63
|
"eslint": "8.56.0",
|
|
64
64
|
"eslint-config-prettier": "9.1.0",
|
|
65
65
|
"eslint-plugin-prefer-arrow": "1.2.3",
|
|
66
|
-
"eslint-plugin-unicorn": "
|
|
67
|
-
"husky": "
|
|
66
|
+
"eslint-plugin-unicorn": "51.0.1",
|
|
67
|
+
"husky": "9.0.10",
|
|
68
68
|
"jest": "29.7.0",
|
|
69
69
|
"jest-create-mock-instance": "2.0.0",
|
|
70
70
|
"jest-junit": "16.0.0",
|
|
71
|
-
"lint-staged": "15.2.
|
|
72
|
-
"prettier": "3.2.
|
|
73
|
-
"semantic-release": "
|
|
71
|
+
"lint-staged": "15.2.2",
|
|
72
|
+
"prettier": "3.2.5",
|
|
73
|
+
"semantic-release": "23.0.2",
|
|
74
74
|
"ts-jest": "29.1.2",
|
|
75
75
|
"ts-node": "10.9.2",
|
|
76
76
|
"typescript": "5.3.3"
|