@darraghor/eslint-plugin-nestjs-typed 6.18.0 → 7.0.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/README.md
CHANGED
|
@@ -68,9 +68,10 @@ Awesome! [Click here](https://github.com/darraghoriordan/eslint-plugin-nestjs-ty
|
|
|
68
68
|
| Nest Swagger | [`api-property-matches-property-optionality`](./src/docs/rules/api-property-matches-property-optionality.md) | ✅ |
|
|
69
69
|
| | [`controllers-should-supply-api-tags`](./src/docs/rules/controllers-should-supply-api-tags.md) | ✅ |
|
|
70
70
|
| | [`api-method-should-specify-api-response`](./src/docs/rules/api-method-should-specify-api-response.md) | ✅ |
|
|
71
|
-
| | [`api-method-should-specify-api-operation`](./src/docs/rules/api-method-should-specify-api-operation.md) |
|
|
71
|
+
| | [`api-method-should-specify-api-operation`](./src/docs/rules/api-method-should-specify-api-operation.md) | ❌ |
|
|
72
72
|
| | [`api-enum-property-best-practices`](./src/docs/rules/api-enum-property-best-practices.md) | ✅ |
|
|
73
73
|
| | [`api-property-returning-array-should-set-array`](./src/docs/rules/api-property-returning-array-should-set-array.md) | ✅ |
|
|
74
|
+
| | [`api-property-should-have-api-extra-models`](./src/docs/rules/api-property-should-have-api-extra-models.md) | ✅ |
|
|
74
75
|
| | [`api-operation-summary-description-capitalized`](./src/docs/rules/api-operation-summary-description-capitalized.md) | ✅ |
|
|
75
76
|
| | | |
|
|
76
77
|
| Preventing bugs | [`param-decorator-name-matches-route-param`](./src/docs/rules/param-decorator-name-matches-route-param.md) | ✅ |
|
|
@@ -84,6 +85,7 @@ Awesome! [Click here](https://github.com/darraghoriordan/eslint-plugin-nestjs-ty
|
|
|
84
85
|
| Security | [`api-methods-should-be-guarded`](./src/docs/rules/api-methods-should-be-guarded.md) | ❌ |
|
|
85
86
|
| | | |
|
|
86
87
|
| Code Consistency | [`sort-module-metadata-arrays`](./src/docs/rules/sort-module-metadata-arrays.md) | ❌ |
|
|
88
|
+
| | [`use-correct-endpoint-naming-convention`](./src/docs/rules/use-correct-endpoint-naming-convention.md) | ❌ |
|
|
87
89
|
|
|
88
90
|
The "recommended" ruleset are the default rules that are turned on when you configure the plugin as described in this document.
|
|
89
91
|
|
|
@@ -12,7 +12,7 @@ export const rules = {
|
|
|
12
12
|
"@darraghor/nestjs-typed/controllers-should-supply-api-tags": "error",
|
|
13
13
|
"@darraghor/nestjs-typed/api-enum-property-best-practices": "error",
|
|
14
14
|
"@darraghor/nestjs-typed/api-property-returning-array-should-set-array": "error",
|
|
15
|
-
"@darraghor/nestjs-typed/should-
|
|
15
|
+
"@darraghor/nestjs-typed/validation-pipe-should-use-forbid-unknown": "error",
|
|
16
16
|
"@darraghor/nestjs-typed/param-decorator-name-matches-route-param": "error",
|
|
17
17
|
"@darraghor/nestjs-typed/validated-non-primitive-property-needs-type-decorator": "error",
|
|
18
18
|
"@darraghor/nestjs-typed/validate-nested-of-array-should-set-each": "error",
|
|
@@ -26,9 +26,10 @@ export const rules = {
|
|
|
26
26
|
"@darraghor/nestjs-typed/api-property-should-have-api-extra-models": "error",
|
|
27
27
|
"@darraghor/nestjs-typed/api-operation-summary-description-capitalized": "error",
|
|
28
28
|
"@darraghor/nestjs-typed/use-dependency-injection": "off",
|
|
29
|
+
"@darraghor/nestjs-typed/use-correct-endpoint-naming-convention": "off",
|
|
29
30
|
};
|
|
30
31
|
export default {
|
|
31
32
|
extends: ["./configs/base"],
|
|
32
33
|
rules,
|
|
33
34
|
};
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb21tZW5kZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlncy9yZWNvbW1lbmRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQWdDO0lBQzlDLDJFQUEyRSxFQUN2RSxPQUFPO0lBQ1gsdURBQXVELEVBQUU7UUFDckQsT0FBTztRQUNQO1lBQ0ksR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ3BCLGVBQWUsRUFBRSxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO1NBQ3hEO0tBQ0o7SUFDRCxtRUFBbUUsRUFDL0QsT0FBTztJQUNYLGdFQUFnRSxFQUFFLE9BQU87SUFDekUsNERBQTRELEVBQUUsT0FBTztJQUNyRSwwREFBMEQsRUFBRSxPQUFPO0lBQ25FLHVFQUF1RSxFQUNuRSxPQUFPO0lBQ1gsbUVBQW1FLEVBQy9ELE9BQU87SUFDWCxrRUFBa0UsRUFBRSxPQUFPO0lBQzNFLCtFQUErRSxFQUMzRSxPQUFPO0lBQ1gsa0VBQWtFLEVBQUUsT0FBTztJQUMzRSx3REFBd0QsRUFBRSxPQUFPO0lBQ2pFLDhEQUE4RCxFQUFFLE9BQU87SUFDdkUsdURBQXVELEVBQUUsS0FBSztJQUM5RCxpRUFBaUUsRUFBRSxLQUFLO0lBQ3hFLHFEQUFxRCxFQUFFLEtBQUs7SUFDNUQsaURBQWlELEVBQUUsT0FBTztJQUMxRCx1REFBdUQsRUFBRSxPQUFPO0lBQ2hFLG1FQUFtRSxFQUMvRCxPQUFPO0lBQ1gsdUVBQXVFLEVBQ25FLE9BQU87SUFDWCxrREFBa0QsRUFBRSxLQUFLO0lBQ3pELGdFQUFnRSxFQUFFLEtBQUs7Q0FDMUUsQ0FBQztBQUNGLGVBQWU7SUFDWCxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMzQixLQUFLO0NBQ1IsQ0FBQyJ9
|
package/dist/rules/index.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ declare const allRules: {
|
|
|
16
16
|
"api-method-should-specify-api-operation": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSpecifyApiOperation", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
17
17
|
"api-enum-property-best-practices": import("@typescript-eslint/utils/ts-eslint").RuleModule<"needsEnumNameAdded" | "needsTypeRemoved" | "enumNameShouldMatchType", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
18
18
|
"api-property-returning-array-should-set-array": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSetArrayPropertyTrue" | "shouldSetArrayPropertyFalse", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
19
|
-
"should-
|
|
19
|
+
"validation-pipe-should-use-forbid-unknown": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSpecifyForbidUnknownValues", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
20
20
|
"param-decorator-name-matches-route-param": import("@typescript-eslint/utils/ts-eslint").RuleModule<"paramIdentifierDoesntNeedColon" | "paramIdentifierShouldMatchRouteOrController" | "paramIdentifierShouldMatchRouteOnly", [{
|
|
21
21
|
shouldCheckController: boolean;
|
|
22
22
|
}], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
package/dist/rules/index.js
CHANGED
|
@@ -31,7 +31,7 @@ const allRules = {
|
|
|
31
31
|
"api-method-should-specify-api-operation": apiMethodsShouldSpecifyApiOperation,
|
|
32
32
|
"api-enum-property-best-practices": apiEnumPropertyBestPractices,
|
|
33
33
|
"api-property-returning-array-should-set-array": apiPropertyReturningArrayShouldSetArray,
|
|
34
|
-
"should-
|
|
34
|
+
"validation-pipe-should-use-forbid-unknown": shouldSpecifyForbidUnknownValues,
|
|
35
35
|
"param-decorator-name-matches-route-param": parameterDecoratorNameMatchesRouteParam,
|
|
36
36
|
"validated-non-primitive-property-needs-type-decorator": validateNonPrimitiveNeedsDecorators,
|
|
37
37
|
"validate-nested-of-array-should-set-each": validateNestedOfArrayShouldSetEach,
|
|
@@ -45,4 +45,4 @@ const allRules = {
|
|
|
45
45
|
"use-dependency-injection": useDependencyInjection,
|
|
46
46
|
};
|
|
47
47
|
export default allRules;
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTywwQkFBMEIsTUFBTSw2REFBNkQsQ0FBQztBQUNyRyxPQUFPLDRDQUE0QyxNQUFNLDRFQUE0RSxDQUFDO0FBQ3RJLE9BQU8scUNBQXFDLE1BQU0sa0ZBQWtGLENBQUM7QUFDckksT0FBTyw2QkFBNkIsTUFBTSxrRUFBa0UsQ0FBQztBQUM3RyxPQUFPLGtDQUFrQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzVILE9BQU8sNEJBQTRCLE1BQU0sZ0VBQWdFLENBQUM7QUFDMUcsT0FBTyx1Q0FBdUMsTUFBTSxzRkFBc0YsQ0FBQztBQUMzSSxPQUFPLGdDQUFnQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzFILE9BQU8sdUNBQXVDLE1BQU0sOEVBQThFLENBQUM7QUFDbkksT0FBTyxtQ0FBbUMsTUFBTSxpRkFBaUYsQ0FBQztBQUNsSSxPQUFPLGtDQUFrQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzVILE9BQU8sMkJBQTJCLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxnQ0FBZ0MsTUFBTSx3RUFBd0UsQ0FBQztBQUN0SCxPQUFPLHlCQUF5QixNQUFNLDBEQUEwRCxDQUFDO0FBQ2pHLE9BQU8sbUNBQW1DLE1BQU0sOEVBQThFLENBQUM7QUFDL0gsT0FBTyx3QkFBd0IsTUFBTSx3REFBd0QsQ0FBQztBQUM5RixPQUFPLHFCQUFxQixNQUFNLGtEQUFrRCxDQUFDO0FBQ3JGLE9BQU8sa0NBQWtDLE1BQU0sNEVBQTRFLENBQUM7QUFDNUgsT0FBTywwQkFBMEIsTUFBTSw0REFBNEQsQ0FBQztBQUNwRyxPQUFPLG1DQUFtQyxNQUFNLDhFQUE4RSxDQUFDO0FBQy9ILE9BQU8seUNBQXlDLE1BQU0sMEZBQTBGLENBQUM7QUFDakosT0FBTyxzQkFBc0IsTUFBTSxvREFBb0QsQ0FBQztBQUN4RixNQUFNLFFBQVEsR0FBRztJQUNiLHNDQUFzQyxFQUFFLGdDQUFnQztJQUN4RSwyQ0FBMkMsRUFDdkMscUNBQXFDO0lBQ3pDLCtCQUErQixFQUFFLDBCQUEwQjtJQUMzRCx5QkFBeUIsRUFBRSxxQkFBcUI7SUFDaEQsbURBQW1ELEVBQy9DLDRDQUE0QztJQUNoRCxvQ0FBb0MsRUFBRSw2QkFBNkI7SUFDbkUsd0NBQXdDLEVBQ3BDLGtDQUFrQztJQUN0Qyx5Q0FBeUMsRUFDckMsbUNBQW1DO0lBQ3ZDLGtDQUFrQyxFQUFFLDRCQUE0QjtJQUNoRSwrQ0FBK0MsRUFDM0MsdUNBQXVDO0lBQzNDLDJDQUEyQyxFQUN2QyxnQ0FBZ0M7SUFDcEMsMENBQTBDLEVBQ3RDLHVDQUF1QztJQUMzQyx1REFBdUQsRUFDbkQsbUNBQW1DO0lBQ3ZDLDBDQUEwQyxFQUN0QyxrQ0FBa0M7SUFDdEMsZ0NBQWdDLEVBQUUsMkJBQTJCO0lBQzdELCtCQUErQixFQUFFLHlCQUF5QjtJQUMxRCw2QkFBNkIsRUFBRSx3QkFBd0I7SUFDdkQsd0NBQXdDLEVBQ3BDLGtDQUFrQztJQUN0QywrQkFBK0IsRUFBRSwwQkFBMEI7SUFDM0QsMkNBQTJDLEVBQ3ZDLG1DQUFtQztJQUN2QywrQ0FBK0MsRUFDM0MseUNBQXlDO0lBQzdDLDBCQUEwQixFQUFFLHNCQUFzQjtDQUNyRCxDQUFDO0FBRUYsZUFBZSxRQUFRLENBQUMifQ==
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import { TSESTree } from "@typescript-eslint/utils";
|
|
1
|
+
import { TSESTree, AST_NODE_TYPES } from "@typescript-eslint/utils";
|
|
2
2
|
import { createRule } from "../../utils/createRule.js";
|
|
3
3
|
import { ASTUtils } from "@typescript-eslint/utils";
|
|
4
4
|
export const isValidationPipeNewExpression = (node) => {
|
|
5
5
|
const newExpression = node;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return true;
|
|
6
|
+
if (newExpression.callee.type !== AST_NODE_TYPES.Identifier) {
|
|
7
|
+
return false;
|
|
9
8
|
}
|
|
10
|
-
return
|
|
9
|
+
return newExpression.callee.name === "ValidationPipe";
|
|
11
10
|
};
|
|
12
11
|
export const checkObjectExpression = (os) => {
|
|
13
12
|
if (!os) {
|
|
@@ -52,8 +51,8 @@ export const shouldTriggerForVariableDeclaratorExpression = (node) => {
|
|
|
52
51
|
const variableDeclarator = node;
|
|
53
52
|
const asExpression = variableDeclarator.init;
|
|
54
53
|
const typeAnnotation = asExpression?.typeAnnotation;
|
|
55
|
-
const typeName = typeAnnotation
|
|
56
|
-
if (typeName
|
|
54
|
+
const typeName = typeAnnotation?.typeName;
|
|
55
|
+
if (typeName?.name !== "ValidationPipeOptions") {
|
|
57
56
|
return false;
|
|
58
57
|
}
|
|
59
58
|
// otherwise check the object expression is what we want
|
|
@@ -99,4 +98,4 @@ const rule = createRule({
|
|
|
99
98
|
},
|
|
100
99
|
});
|
|
101
100
|
export default rule;
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdWxkU3BlY2lmeUZvcmJpZFVua25vd25WYWx1ZXNSdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL3Nob3VsZFNwZWNpZnlGb3JiaWRVbmtub3duVmFsdWVzL3Nob3VsZFNwZWNpZnlGb3JiaWRVbmtub3duVmFsdWVzUnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFbEQsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxJQUFtQixFQUFXLEVBQUU7SUFDMUUsTUFBTSxhQUFhLEdBQUcsSUFBOEIsQ0FBQztJQUNyRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMxRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0QsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQztBQUMxRCxDQUFDLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUNqQyxFQUE2QixFQUN0QixFQUFFO0lBQ1QsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ04sT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELGdGQUFnRjtJQUNoRixNQUFNLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyxVQUFVO1NBQzVDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0QsSUFBSSxDQUNELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFDLENBQUMsR0FBMkIsQ0FBQyxJQUFJ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
|