@darraghor/eslint-plugin-nestjs-typed 6.13.0 → 6.14.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/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.d.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { TSESTree } from "@typescript-eslint/utils";
|
|
2
2
|
export declare const shouldUseRequiredDecorator: (node: TSESTree.PropertyDefinition) => boolean;
|
|
3
3
|
export declare const shouldUseOptionalDecorator: (node: TSESTree.PropertyDefinition) => boolean;
|
|
4
|
-
declare const
|
|
4
|
+
export declare const hasRedundantRequired: (node: TSESTree.PropertyDefinition) => boolean;
|
|
5
|
+
type Options = [
|
|
6
|
+
{
|
|
7
|
+
checkRedundantRequired?: boolean;
|
|
8
|
+
}
|
|
9
|
+
];
|
|
10
|
+
declare const rule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldUseOptionalDecorator" | "shouldUseRequiredDecorator" | "redundantRequired", Options, unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
5
11
|
export default rule;
|
package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TSESTree } from "@typescript-eslint/utils";
|
|
1
2
|
import { createRule } from "../../utils/createRule.js";
|
|
2
3
|
import { typedTokenHelpers } from "../../utils/typedTokenHelpers.js";
|
|
3
4
|
export const shouldUseRequiredDecorator = (node) => {
|
|
@@ -10,6 +11,24 @@ export const shouldUseOptionalDecorator = (node) => {
|
|
|
10
11
|
const isOptionalPropertyValue = typedTokenHelpers.isOptionalPropertyValue(node);
|
|
11
12
|
return hasRequiredDecorator && isOptionalPropertyValue;
|
|
12
13
|
};
|
|
14
|
+
export const hasRedundantRequired = (node) => {
|
|
15
|
+
const apiPropertyDecorators = typedTokenHelpers.getDecoratorsNamed(node, [
|
|
16
|
+
"ApiProperty",
|
|
17
|
+
]);
|
|
18
|
+
for (const decorator of apiPropertyDecorators) {
|
|
19
|
+
if (decorator.expression.type === TSESTree.AST_NODE_TYPES.CallExpression) {
|
|
20
|
+
const firstArgument = decorator.expression.arguments[0];
|
|
21
|
+
if (firstArgument &&
|
|
22
|
+
firstArgument.type === TSESTree.AST_NODE_TYPES.ObjectExpression) {
|
|
23
|
+
const hasRequiredTrue = typedTokenHelpers.getPropertyValueEqualsExpected(firstArgument, "required", true);
|
|
24
|
+
if (hasRequiredTrue) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
};
|
|
13
32
|
const rule = createRule({
|
|
14
33
|
name: "api-property-matches-property-optionality",
|
|
15
34
|
meta: {
|
|
@@ -19,13 +38,31 @@ const rule = createRule({
|
|
|
19
38
|
messages: {
|
|
20
39
|
shouldUseOptionalDecorator: `Property marked as optional should use @ApiPropertyOptional decorator`,
|
|
21
40
|
shouldUseRequiredDecorator: `Property marked as required should use @ApiProperty decorator`,
|
|
41
|
+
redundantRequired: `Redundant 'required: true' in @ApiProperty. Properties are required by default.`,
|
|
22
42
|
},
|
|
23
|
-
schema: [
|
|
43
|
+
schema: [
|
|
44
|
+
{
|
|
45
|
+
type: "object",
|
|
46
|
+
additionalProperties: false,
|
|
47
|
+
properties: {
|
|
48
|
+
checkRedundantRequired: {
|
|
49
|
+
description: "Check for redundant 'required: true' in @ApiProperty (default: true)",
|
|
50
|
+
type: "boolean",
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
],
|
|
24
55
|
hasSuggestions: false,
|
|
25
56
|
type: "suggestion",
|
|
26
57
|
},
|
|
27
|
-
defaultOptions: [
|
|
58
|
+
defaultOptions: [
|
|
59
|
+
{
|
|
60
|
+
checkRedundantRequired: true,
|
|
61
|
+
},
|
|
62
|
+
],
|
|
28
63
|
create(context) {
|
|
64
|
+
const options = context.options[0] || {};
|
|
65
|
+
const shouldCheckRedundantRequired = options.checkRedundantRequired ?? true;
|
|
29
66
|
return {
|
|
30
67
|
PropertyDefinition(node) {
|
|
31
68
|
if (shouldUseOptionalDecorator(node)) {
|
|
@@ -40,9 +77,16 @@ const rule = createRule({
|
|
|
40
77
|
messageId: "shouldUseRequiredDecorator",
|
|
41
78
|
});
|
|
42
79
|
}
|
|
80
|
+
if (shouldCheckRedundantRequired &&
|
|
81
|
+
hasRedundantRequired(node)) {
|
|
82
|
+
context.report({
|
|
83
|
+
node: node,
|
|
84
|
+
messageId: "redundantRequired",
|
|
85
|
+
});
|
|
86
|
+
}
|
|
43
87
|
},
|
|
44
88
|
};
|
|
45
89
|
},
|
|
46
90
|
});
|
|
47
91
|
export default rule;
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUHJvcGVydHlNYXRjaGVzUHJvcGVydHlPcHRpb25hbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlQcm9wZXJ0eU1hdGNoZXNQcm9wZXJ0eU9wdGlvbmFsaXR5L2FwaVByb3BlcnR5TWF0Y2hlc1Byb3BlcnR5T3B0aW9uYWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUVuRSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUN0QyxJQUFpQyxFQUMxQixFQUFFO0lBQ1QsTUFBTSxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FDakUsSUFBSSxFQUNKLENBQUMscUJBQXFCLENBQUMsQ0FDMUIsQ0FBQztJQUVGLE1BQU0sdUJBQXVCLEdBQ3pCLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXBELE9BQU8sb0JBQW9CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztBQUM1RCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUN0QyxJQUFpQyxFQUMxQixFQUFFO0lBQ1QsTUFBTSxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FDakUsSUFBSSxFQUNKLENBQUMsYUFBYSxDQUFDLENBQ2xCLENBQUM7SUFFRixNQUFNLHVCQUF1QixHQUN6QixpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVwRCxPQUFPLG9CQUFvQixJQUFJLHVCQUF1QixDQUFDO0FBQzNELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQ2hDLElBQWlDLEVB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
|
package/dist/rules/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
declare const allRules: {
|
|
2
2
|
"all-properties-have-explicit-defined": import("@typescript-eslint/utils/ts-eslint").RuleModule<"missing-is-defined-decorator" | "missing-is-optional-decorator" | "conflicting-defined-decorators-defined-optional" | "conflicting-defined-decorators-optional-validate-if" | "conflicting-defined-decorators-all", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
3
|
-
"api-property-matches-property-optionality": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldUseOptionalDecorator" | "shouldUseRequiredDecorator"
|
|
3
|
+
"api-property-matches-property-optionality": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldUseOptionalDecorator" | "shouldUseRequiredDecorator" | "redundantRequired", [{
|
|
4
|
+
checkRedundantRequired?: boolean;
|
|
5
|
+
}], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
4
6
|
"injectable-should-be-provided": import("@typescript-eslint/utils/ts-eslint").RuleModule<"injectableInModule" | "controllersInModule", [{
|
|
5
7
|
src: string[];
|
|
6
8
|
filterFromPaths: string[];
|