@darraghor/eslint-plugin-nestjs-typed 6.7.3 → 6.8.1
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
CHANGED
|
@@ -22,7 +22,7 @@ declare const classicPlugin: {
|
|
|
22
22
|
"no-duplicate-decorators": TSESLint.RuleModule<"noDuplicateDecorators", import("./rules/noDuplicateDecorators/noDuplicateDecorators.js").NoDuplicateDecoratorsOptions, unknown, TSESLint.RuleListener>;
|
|
23
23
|
"provided-injected-should-match-factory-parameters": TSESLint.RuleModule<"mainMessage", [], unknown, TSESLint.RuleListener>;
|
|
24
24
|
"controllers-should-supply-api-tags": TSESLint.RuleModule<"shouldUseApiTagDecorator", [], unknown, TSESLint.RuleListener>;
|
|
25
|
-
"api-method-should-specify-api-response": TSESLint.RuleModule<"shouldSpecifyApiResponse",
|
|
25
|
+
"api-method-should-specify-api-response": TSESLint.RuleModule<"shouldSpecifyApiResponse", import("./rules/apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.js").ApiMethodShouldSpecifyApiResponseOptions, unknown, TSESLint.RuleListener>;
|
|
26
26
|
"api-method-should-specify-api-operation": TSESLint.RuleModule<"shouldSpecifyApiOperation", [], unknown, TSESLint.RuleListener>;
|
|
27
27
|
"api-enum-property-best-practices": TSESLint.RuleModule<"needsEnumNameAdded" | "needsTypeRemoved" | "enumNameShouldMatchType", [], unknown, TSESLint.RuleListener>;
|
|
28
28
|
"api-property-returning-array-should-set-array": TSESLint.RuleModule<"shouldSetArrayPropertyTrue" | "shouldSetArrayPropertyFalse", [], unknown, TSESLint.RuleListener>;
|
package/dist/rules/apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { TSESTree } from "@typescript-eslint/utils";
|
|
2
|
-
export
|
|
3
|
-
|
|
2
|
+
export type ApiMethodShouldSpecifyApiResponseOptions = [
|
|
3
|
+
{
|
|
4
|
+
additionalCustomApiResponseDecorators: string[];
|
|
5
|
+
}
|
|
6
|
+
];
|
|
7
|
+
export declare const shouldUseApiResponseDecorator: (node: TSESTree.MethodDefinition, options: ApiMethodShouldSpecifyApiResponseOptions[0]) => boolean;
|
|
8
|
+
declare const rule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSpecifyApiResponse", ApiMethodShouldSpecifyApiResponseOptions, unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
4
9
|
export default rule;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRule } from "../../utils/createRule.js";
|
|
2
2
|
import { typedTokenHelpers } from "../../utils/typedTokenHelpers.js";
|
|
3
|
-
export const shouldUseApiResponseDecorator = (node) => {
|
|
3
|
+
export const shouldUseApiResponseDecorator = (node, options) => {
|
|
4
4
|
const hasApiMethodDecorator = typedTokenHelpers.nodeHasDecoratorsNamed(node, ["Get", "Post", "Put", "Delete", "Patch", "Options", "Head", "All"]);
|
|
5
5
|
const hasApiResponseDecorator = typedTokenHelpers.nodeHasDecoratorsNamed(node, [
|
|
6
6
|
"ApiResponse",
|
|
@@ -31,6 +31,7 @@ export const shouldUseApiResponseDecorator = (node) => {
|
|
|
31
31
|
"ApiUnsupportedMediaTypeResponse",
|
|
32
32
|
"ApiDefaultResponse",
|
|
33
33
|
]);
|
|
34
|
+
const hasCustomApiResponseDecorator = typedTokenHelpers.nodeHasDecoratorsNamed(node, options.additionalCustomApiResponseDecorators);
|
|
34
35
|
// check if the containing class has ApiExcludeController decorator
|
|
35
36
|
const containingClass = node.parent?.parent;
|
|
36
37
|
const hasApiExcludeControllerDecorator = typedTokenHelpers.nodeHasDecoratorsNamed(containingClass, [
|
|
@@ -38,7 +39,8 @@ export const shouldUseApiResponseDecorator = (node) => {
|
|
|
38
39
|
]);
|
|
39
40
|
return (hasApiMethodDecorator &&
|
|
40
41
|
!hasApiResponseDecorator &&
|
|
41
|
-
!hasApiExcludeControllerDecorator
|
|
42
|
+
!hasApiExcludeControllerDecorator &&
|
|
43
|
+
!hasCustomApiResponseDecorator);
|
|
42
44
|
};
|
|
43
45
|
const rule = createRule({
|
|
44
46
|
name: "api-method-should-specify-api-response",
|
|
@@ -49,15 +51,38 @@ const rule = createRule({
|
|
|
49
51
|
messages: {
|
|
50
52
|
shouldSpecifyApiResponse: `A method decorated with @Get, @Post etc. should specify the expected ApiResponse e.g. @ApiOkResponse(type: MyType). These decorators are in the @nestjs/swagger npm package.`,
|
|
51
53
|
},
|
|
52
|
-
schema: [
|
|
54
|
+
schema: [
|
|
55
|
+
{
|
|
56
|
+
type: "object",
|
|
57
|
+
properties: {
|
|
58
|
+
additionalCustomApiResponseDecorators: {
|
|
59
|
+
description: "A list of custom api response decorators that this rule will use to validate",
|
|
60
|
+
type: "array",
|
|
61
|
+
minItems: 0,
|
|
62
|
+
items: {
|
|
63
|
+
type: "string",
|
|
64
|
+
minLength: 1,
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
],
|
|
53
70
|
hasSuggestions: false,
|
|
54
71
|
type: "suggestion",
|
|
55
72
|
},
|
|
56
|
-
defaultOptions: [
|
|
73
|
+
defaultOptions: [
|
|
74
|
+
{ additionalCustomApiResponseDecorators: new Array() },
|
|
75
|
+
],
|
|
57
76
|
create(context) {
|
|
77
|
+
const { additionalCustomApiResponseDecorators } = context.options[0] ||
|
|
78
|
+
{
|
|
79
|
+
additionalCustomApiResponseDecorators: [],
|
|
80
|
+
};
|
|
58
81
|
return {
|
|
59
82
|
MethodDefinition(node) {
|
|
60
|
-
if (shouldUseApiResponseDecorator(node
|
|
83
|
+
if (shouldUseApiResponseDecorator(node, {
|
|
84
|
+
additionalCustomApiResponseDecorators,
|
|
85
|
+
})) {
|
|
61
86
|
context.report({
|
|
62
87
|
node: node,
|
|
63
88
|
messageId: "shouldSpecifyApiResponse",
|
|
@@ -68,4 +93,4 @@ const rule = createRule({
|
|
|
68
93
|
},
|
|
69
94
|
});
|
|
70
95
|
export default rule;
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpTWV0aG9kc1Nob3VsZFNwZWNpZnlBcGlSZXNwb25zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlNZXRob2RzU2hvdWxkU3BlY2lmeUFwaVJlc3BvbnNlL2FwaU1ldGhvZHNTaG91bGRTcGVjaWZ5QXBpUmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBUW5FLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQ3pDLElBQStCLEVBQy9CLE9BQW9ELEVBQzdDLEVBQUU7SUFDVCxNQUFNLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDLHNCQUFzQixDQUNsRSxJQUFJLEVBQ0osQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQ3RFLENBQUM7SUFFRixNQUFNLHVCQUF1QixHQUFHLGlCQUFpQixDQUFDLHNCQUFzQixDQUNwRSxJQUFJLEVBQ0o7UUFDSSxhQUFhO1FBQ2IsZUFBZTtRQUNmLG9CQUFvQjtRQUNwQixxQkFBcUI7UUFDckIsc0JBQXNCO1FBQ3RCLDZCQUE2QjtRQUM3QixrQkFBa0I7UUFDbEIsdUJBQXVCO1FBQ3ZCLHlCQUF5QjtRQUN6Qiw0QkFBNEI7UUFDNUIscUJBQXFCO1FBQ3JCLGdDQUFnQztRQUNoQyx1QkFBdUI7UUFDdkIscUJBQXFCO1FBQ3JCLHNCQUFzQjtRQUN0QiwyQkFBMkI7UUFDM0IsaUJBQWlCO1FBQ2pCLDZCQUE2QjtRQUM3QiwwQkFBMEI7UUFDMUIsMkJBQTJCO1FBQzNCLCtCQUErQjtRQUMvQiw0QkFBNEI7UUFDNUIsMkJBQTJCO1FBQzNCLCtCQUErQjtRQUMvQixnQ0FBZ0M7UUFDaEMsaUNBQWlDO1FBQ2pDLG9CQUFvQjtLQUN2QixDQUNKLENBQUM7SUFFRixNQUFNLDZCQUE2QixHQUMvQixpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FDcEMsSUFBSSxFQUNKLE9BQU8sQ0FBQyxxQ0FBcUMsQ0FDaEQsQ0FBQztJQUVOLG1FQUFtRTtJQUNuRSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQW1DLENBQUM7SUFDekUsTUFBTSxnQ0FBZ0MsR0FDbEMsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsZUFBZSxFQUFFO1FBQ3RELHNCQUFzQjtLQUN6QixDQUFDLENBQUM7SUFFUCxPQUFPLENBQ0gscUJBQXFCO1FBQ3JCLENBQUMsdUJBQXVCO1FBQ3hCLENBQUMsZ0NBQWdDO1FBQ2pDLENBQUMsNkJBQTZCLENBQ2pDLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRixNQUFNLElBQUksR0FBRyxVQUFVLENBR3JCO0lBQ0UsSUFBSSxFQUFFLHdDQUF3QztJQUM5QyxJQUFJLEVBQUU7UUFDRixJQUFJLEVBQUU7WUFDRixXQUFXLEVBQ1AsMEpBQTBKO1NBQ2pLO1FBQ0QsUUFBUSxFQUFFO1lBQ04sd0JBQXdCLEVBQUUsOEtBQThLO1NBQzNNO1FBQ0QsTUFBTSxFQUFFO1lBQ0o7Z0JBQ0ksSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsVUFBVSxFQUFFO29CQUNSLHFDQUFxQyxFQUFFO3dCQUNuQyxXQUFXLEVBQ1AsOEVBQThFO3dCQUNsRixJQUFJLEVBQUUsT0FBTzt3QkFDYixRQUFRLEVBQUUsQ0FBQzt3QkFDWCxLQUFLLEVBQUU7NEJBQ0gsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsU0FBUyxFQUFFLENBQUM7eUJBQ2Y7cUJBQ0o7aUJBQ0o7YUFDSjtTQUNKO1FBQ0QsY0FBYyxFQUFFLEtBQUs7UUFDckIsSUFBSSxFQUFFLFlBQVk7S0FDckI7SUFDRCxjQUFjLEVBQUU7UUFDWixFQUFDLHFDQUFxQyxFQUFFLElBQUksS0FBSyxFQUFVLEVBQUM7S0FDL0Q7SUFFRCxNQUFNLENBQUMsT0FBTztRQUNWLE1BQU0sRUFBQyxxQ0FBcUMsRUFBQyxHQUN6QyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNqQjtnQkFDRyxxQ0FBcUMsRUFBRSxFQUFFO2FBQ1csQ0FBQztRQUU3RCxPQUFPO1lBQ0gsZ0JBQWdCLENBQUMsSUFBK0I7Z0JBQzVDLElBQ0ksNkJBQTZCLENBQUMsSUFBSSxFQUFFO29CQUNoQyxxQ0FBcUM7aUJBQ3hDLENBQUMsRUFDSixDQUFDO29CQUNDLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ1gsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLDBCQUEwQjtxQkFDeEMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxlQUFlLElBQUksQ0FBQyJ9
|
package/dist/rules/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ declare const allRules: {
|
|
|
8
8
|
"no-duplicate-decorators": import("@typescript-eslint/utils/ts-eslint").RuleModule<"noDuplicateDecorators", import("./noDuplicateDecorators/noDuplicateDecorators.js").NoDuplicateDecoratorsOptions, unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
9
9
|
"provided-injected-should-match-factory-parameters": import("@typescript-eslint/utils/ts-eslint").RuleModule<"mainMessage", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
10
10
|
"controllers-should-supply-api-tags": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldUseApiTagDecorator", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
11
|
-
"api-method-should-specify-api-response": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSpecifyApiResponse",
|
|
11
|
+
"api-method-should-specify-api-response": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSpecifyApiResponse", import("./apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.js").ApiMethodShouldSpecifyApiResponseOptions, unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
12
12
|
"api-method-should-specify-api-operation": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSpecifyApiOperation", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
13
13
|
"api-enum-property-best-practices": import("@typescript-eslint/utils/ts-eslint").RuleModule<"needsEnumNameAdded" | "needsTypeRemoved" | "enumNameShouldMatchType", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
14
14
|
"api-property-returning-array-should-set-array": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSetArrayPropertyTrue" | "shouldSetArrayPropertyFalse", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@darraghor/eslint-plugin-nestjs-typed",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.8.1",
|
|
4
4
|
"description": "Eslint rules for nestjs projects",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"clean": "rm -Rf ./dist/",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"@semantic-release/exec": "7.1.0",
|
|
75
75
|
"@types/eslint": "9.6.1",
|
|
76
76
|
"@types/jest": "29.5.14",
|
|
77
|
-
"@types/node": "22.
|
|
77
|
+
"@types/node": "22.18.0",
|
|
78
78
|
"@typescript-eslint/eslint-plugin": "8.41.0",
|
|
79
79
|
"@typescript-eslint/parser": "8.41.0",
|
|
80
80
|
"@typescript-eslint/rule-tester": "8.41.0",
|