@darraghor/eslint-plugin-nestjs-typed 6.0.0-rc.17 → 6.0.0-rc.2
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/configs/base.js +4 -3
- package/dist/configs/index.js +13 -0
- package/dist/configs/noSwagger.js +4 -4
- package/dist/configs/recommended.js +4 -4
- package/dist/index.js +64 -57
- package/dist/rules/allPropertiesAreWhitelisted/allPropertiesAreWhitelisted.js +13 -11
- package/dist/rules/allPropertiesHaveExplicitDefined/allPropertiesHaveExplicitDefined.js +17 -15
- package/dist/rules/apiEnumPropertyBestPractices/apiEnumPropertyBestPractices.js +22 -17
- package/dist/rules/apiEnumPropertyBestPractices/enumTestResultModel.js +6 -2
- package/dist/rules/apiMethodsShouldBeGuarded/apiMethodsShouldBeGuarded.js +16 -12
- package/dist/rules/apiMethodsShouldSpecifyApiOperation/apiMethodsShouldSpecifyApiOperation.js +13 -9
- package/dist/rules/apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.js +13 -9
- package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.js +18 -13
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/apiPropertyReturningArrayShouldSetArray.js +24 -17
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/arraySetResultModel.js +5 -2
- package/dist/rules/controllerDecoratedHasApiTags/controllerDecoratedHasApiTags.js +13 -9
- package/dist/rules/index.js +41 -36
- package/dist/rules/injectablesShouldBeProvided/injectableShouldBeProvided.js +18 -13
- package/dist/rules/noDuplicateDecorators/noDuplicateDecorators.js +14 -10
- package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.js +26 -19
- package/dist/rules/paramDecoratorNameMatchesRouteParam/rule.testData.js +6 -3
- package/dist/rules/providerInjectedShouldMatchFactory/ProviderInjectedShouldMatchFactory.js +18 -12
- package/dist/rules/shouldSpecifyForbidUnknownValues/shouldSpecifyForbidUnknownValuesRule.js +26 -19
- package/dist/rules/sortModuleMetadataArrays/sortModuleMetadataArrays.js +23 -18
- package/dist/rules/validateNestedOfArrayShouldSetEach/arraySetResultModel.js +5 -2
- package/dist/rules/validateNestedOfArrayShouldSetEach/validateNestedOfArrayShouldSetEach.js +21 -14
- package/dist/rules/validateNonPrimitiveNeedsTypeDecorator/validateNonPrimitiveNeedsDecorators.js +33 -29
- package/dist/testing/fixtureSetup.js +10 -4
- package/dist/testing/preRun.js +4 -2
- package/dist/utils/ast.js +7 -4
- package/dist/utils/createRule.js +6 -3
- package/dist/utils/files/customFileEnumeratorWrapper.js +16 -9
- package/dist/utils/files/isFilteredPath.js +4 -2
- package/dist/utils/nestModules/models/NestProvidedInjectablesMap.js +6 -2
- package/dist/utils/nestModules/nestModuleAstParser.js +12 -9
- package/dist/utils/nestModules/nestProvidedInjectableMapper.js +52 -14
- package/dist/utils/nestModules/nestProvidedInjectableMapper.testData.js +12 -9
- package/dist/utils/nestModules/nestProviderAstParser.js +16 -13
- package/dist/utils/typedTokenHelpers.js +64 -25
- package/dist/utils/wellKnownSelectors.js +5 -2
- package/package.json +3 -12
- package/dist/configs/base.d.ts +0 -8
- package/dist/configs/noSwagger.d.ts +0 -7
- package/dist/configs/recommended.d.ts +0 -7
- package/dist/index.d.ts +0 -52
- package/dist/rules/allPropertiesAreWhitelisted/allPropertiesAreWhitelisted.d.ts +0 -2
- package/dist/rules/allPropertiesHaveExplicitDefined/allPropertiesHaveExplicitDefined.d.ts +0 -3
- package/dist/rules/apiEnumPropertyBestPractices/apiEnumPropertyBestPractices.d.ts +0 -6
- package/dist/rules/apiEnumPropertyBestPractices/enumTestResultModel.d.ts +0 -7
- package/dist/rules/apiMethodsShouldBeGuarded/apiMethodsShouldBeGuarded.d.ts +0 -4
- package/dist/rules/apiMethodsShouldSpecifyApiOperation/apiMethodsShouldSpecifyApiOperation.d.ts +0 -4
- package/dist/rules/apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.d.ts +0 -4
- package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.d.ts +0 -5
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/apiPropertyReturningArrayShouldSetArray.d.ts +0 -5
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/arraySetResultModel.d.ts +0 -5
- package/dist/rules/controllerDecoratedHasApiTags/controllerDecoratedHasApiTags.d.ts +0 -4
- package/dist/rules/index.d.ts +0 -23
- package/dist/rules/injectablesShouldBeProvided/injectableShouldBeProvided.d.ts +0 -9
- package/dist/rules/noDuplicateDecorators/noDuplicateDecorators.d.ts +0 -9
- package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.d.ts +0 -21
- package/dist/rules/paramDecoratorNameMatchesRouteParam/rule.testData.d.ts +0 -10
- package/dist/rules/providerInjectedShouldMatchFactory/ProviderInjectedShouldMatchFactory.d.ts +0 -4
- package/dist/rules/shouldSpecifyForbidUnknownValues/shouldSpecifyForbidUnknownValuesRule.d.ts +0 -7
- package/dist/rules/sortModuleMetadataArrays/sortModuleMetadataArrays.d.ts +0 -11
- package/dist/rules/validateNestedOfArrayShouldSetEach/arraySetResultModel.d.ts +0 -5
- package/dist/rules/validateNestedOfArrayShouldSetEach/validateNestedOfArrayShouldSetEach.d.ts +0 -5
- package/dist/rules/validateNonPrimitiveNeedsTypeDecorator/validateNonPrimitiveNeedsDecorators.d.ts +0 -10
- package/dist/testing/fixtureSetup.d.ts +0 -1
- package/dist/testing/preRun.d.ts +0 -1
- package/dist/utils/ast.d.ts +0 -2
- package/dist/utils/createRule.d.ts +0 -2
- package/dist/utils/files/customFileEnumeratorWrapper.d.ts +0 -8
- package/dist/utils/files/isFilteredPath.d.ts +0 -4
- package/dist/utils/nestModules/models/NestProvidedInjectablesMap.d.ts +0 -5
- package/dist/utils/nestModules/nestModuleAstParser.d.ts +0 -7
- package/dist/utils/nestModules/nestProvidedInjectableMapper.d.ts +0 -14
- package/dist/utils/nestModules/nestProvidedInjectableMapper.testData.d.ts +0 -7
- package/dist/utils/nestModules/nestProviderAstParser.d.ts +0 -7
- package/dist/utils/typedTokenHelpers.d.ts +0 -59
- package/dist/utils/wellKnownSelectors.d.ts +0 -1
package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shouldTrigger = exports.isParameterNameIncludedInAPathPart = exports.hasPathPartsAnyRegexParams = exports.parsePathParts = void 0;
|
|
1
4
|
/* eslint-disable unicorn/prevent-abbreviations */
|
|
2
|
-
|
|
3
|
-
|
|
5
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
6
|
+
const createRule_1 = require("../../utils/createRule");
|
|
4
7
|
const nestRequestMethodDecoratorNames = new Set([
|
|
5
8
|
"Get",
|
|
6
9
|
"Post",
|
|
@@ -11,20 +14,20 @@ const nestRequestMethodDecoratorNames = new Set([
|
|
|
11
14
|
"Head",
|
|
12
15
|
"All",
|
|
13
16
|
]);
|
|
14
|
-
|
|
17
|
+
const parsePathParts = (decorator) => {
|
|
15
18
|
const decoratorArgument = decorator?.expression
|
|
16
19
|
?.arguments[0];
|
|
17
|
-
if (decoratorArgument?.type === TSESTree.AST_NODE_TYPES.TemplateLiteral ||
|
|
18
|
-
decoratorArgument?.type === TSESTree.AST_NODE_TYPES.Identifier) {
|
|
20
|
+
if (decoratorArgument?.type === utils_1.TSESTree.AST_NODE_TYPES.TemplateLiteral ||
|
|
21
|
+
decoratorArgument?.type === utils_1.TSESTree.AST_NODE_TYPES.Identifier) {
|
|
19
22
|
return ["dareslint__skip"];
|
|
20
23
|
}
|
|
21
|
-
if (decoratorArgument?.type === TSESTree.AST_NODE_TYPES.Literal) {
|
|
24
|
+
if (decoratorArgument?.type === utils_1.TSESTree.AST_NODE_TYPES.Literal) {
|
|
22
25
|
return [decoratorArgument.raw];
|
|
23
26
|
}
|
|
24
|
-
if (decoratorArgument?.type === TSESTree.AST_NODE_TYPES.ArrayExpression) {
|
|
27
|
+
if (decoratorArgument?.type === utils_1.TSESTree.AST_NODE_TYPES.ArrayExpression) {
|
|
25
28
|
return decoratorArgument.elements.map((x) => x.raw);
|
|
26
29
|
}
|
|
27
|
-
if (decoratorArgument?.type === TSESTree.AST_NODE_TYPES.ObjectExpression) {
|
|
30
|
+
if (decoratorArgument?.type === utils_1.TSESTree.AST_NODE_TYPES.ObjectExpression) {
|
|
28
31
|
return decoratorArgument.properties
|
|
29
32
|
.filter((x) => x.key
|
|
30
33
|
.name === "path")
|
|
@@ -32,24 +35,26 @@ export const parsePathParts = (decorator) => {
|
|
|
32
35
|
}
|
|
33
36
|
return [];
|
|
34
37
|
};
|
|
38
|
+
exports.parsePathParts = parsePathParts;
|
|
35
39
|
/**
|
|
36
40
|
* nestjs allows for paths with _+?()*
|
|
37
41
|
* this rule doesn't support parsing those so we'll just pass
|
|
38
42
|
*/
|
|
39
|
-
|
|
43
|
+
const hasPathPartsAnyRegexParams = (pathPartsToCheck) => {
|
|
40
44
|
// prettier-ignore
|
|
41
45
|
const specialCharacterRegex = /(dareslint__skip|\*|\+|\?|\(|\)|_)/; //new RegExp("([\?\+\*\_\(\)])")
|
|
42
46
|
return pathPartsToCheck.some((pathPart) => {
|
|
43
47
|
return specialCharacterRegex.test(pathPart);
|
|
44
48
|
});
|
|
45
49
|
};
|
|
50
|
+
exports.hasPathPartsAnyRegexParams = hasPathPartsAnyRegexParams;
|
|
46
51
|
/**
|
|
47
52
|
* Checks if there is a matching path part for the paramName
|
|
48
53
|
* @param paramName
|
|
49
54
|
* @param pathPartsToCheck
|
|
50
55
|
* @returns
|
|
51
56
|
*/
|
|
52
|
-
|
|
57
|
+
const isParameterNameIncludedInAPathPart = (paramName, pathPartsToCheck) => {
|
|
53
58
|
return pathPartsToCheck.some((pathPart) => {
|
|
54
59
|
return (
|
|
55
60
|
// note to reader: this might be better as a regex. feel free to open a pr!
|
|
@@ -62,7 +67,8 @@ export const isParameterNameIncludedInAPathPart = (paramName, pathPartsToCheck)
|
|
|
62
67
|
pathPart.includes(`':${paramName}/`));
|
|
63
68
|
});
|
|
64
69
|
};
|
|
65
|
-
|
|
70
|
+
exports.isParameterNameIncludedInAPathPart = isParameterNameIncludedInAPathPart;
|
|
71
|
+
const shouldTrigger = (decorator) => {
|
|
66
72
|
if (!decorator) {
|
|
67
73
|
return {
|
|
68
74
|
hasColonInName: false,
|
|
@@ -94,7 +100,7 @@ export const shouldTrigger = (decorator) => {
|
|
|
94
100
|
return (d.expression
|
|
95
101
|
.callee.name === "Controller");
|
|
96
102
|
});
|
|
97
|
-
pathPartsToCheck = pathPartsToCheck.concat(parsePathParts(controllerDecorator));
|
|
103
|
+
pathPartsToCheck = pathPartsToCheck.concat((0, exports.parsePathParts)(controllerDecorator));
|
|
98
104
|
// grab any api method path parts from method decorator
|
|
99
105
|
const methodDefinition = decorator.parent.parent
|
|
100
106
|
?.parent;
|
|
@@ -103,11 +109,11 @@ export const shouldTrigger = (decorator) => {
|
|
|
103
109
|
return nestRequestMethodDecoratorNames.has(d.expression
|
|
104
110
|
.callee.name);
|
|
105
111
|
});
|
|
106
|
-
pathPartsToCheck = pathPartsToCheck.concat(parsePathParts(methodDecorator));
|
|
112
|
+
pathPartsToCheck = pathPartsToCheck.concat((0, exports.parsePathParts)(methodDecorator));
|
|
107
113
|
const shouldIgnoreThisSetOfRoutes =
|
|
108
114
|
// is a template literal argument
|
|
109
115
|
// is an identifier argument
|
|
110
|
-
hasPathPartsAnyRegexParams(pathPartsToCheck);
|
|
116
|
+
(0, exports.hasPathPartsAnyRegexParams)(pathPartsToCheck);
|
|
111
117
|
if (shouldIgnoreThisSetOfRoutes) {
|
|
112
118
|
return {
|
|
113
119
|
hasColonInName: false,
|
|
@@ -117,10 +123,11 @@ export const shouldTrigger = (decorator) => {
|
|
|
117
123
|
// check that the param name is in one path part
|
|
118
124
|
return {
|
|
119
125
|
hasColonInName: false,
|
|
120
|
-
paramNameNotMatchedInPath: !isParameterNameIncludedInAPathPart(paramName, pathPartsToCheck),
|
|
126
|
+
paramNameNotMatchedInPath: !(0, exports.isParameterNameIncludedInAPathPart)(paramName, pathPartsToCheck),
|
|
121
127
|
};
|
|
122
128
|
};
|
|
123
|
-
|
|
129
|
+
exports.shouldTrigger = shouldTrigger;
|
|
130
|
+
const rule = (0, createRule_1.createRule)({
|
|
124
131
|
name: "param-decorator-name-matches-route-param",
|
|
125
132
|
meta: {
|
|
126
133
|
docs: {
|
|
@@ -142,7 +149,7 @@ const rule = createRule({
|
|
|
142
149
|
.callee.name !== "Param") {
|
|
143
150
|
return;
|
|
144
151
|
}
|
|
145
|
-
const result = shouldTrigger(node);
|
|
152
|
+
const result = (0, exports.shouldTrigger)(node);
|
|
146
153
|
if (result.paramNameNotMatchedInPath) {
|
|
147
154
|
context.report({
|
|
148
155
|
node: node,
|
|
@@ -159,5 +166,5 @@ const rule = createRule({
|
|
|
159
166
|
};
|
|
160
167
|
},
|
|
161
168
|
});
|
|
162
|
-
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
169
|
+
exports.default = rule;
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvcGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0vcGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsa0RBQWtEO0FBQ2xELG9EQUFrRDtBQUNsRCx1REFBa0Q7QUFPbEQsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUM1QyxLQUFLO0lBQ0wsTUFBTTtJQUNOLEtBQUs7SUFDTCxRQUFRO0lBQ1IsT0FBTztJQUNQLFNBQVM7SUFDVCxNQUFNO0lBQ04sS0FBSztDQUNSLENBQUMsQ0FBQztBQUVJLE1BQU0sY0FBYyxHQUFHLENBQUMsU0FBNkIsRUFBWSxFQUFFO0lBQ3RFLE1BQU0saUJBQWlCLEdBQUksU0FBUyxFQUFFLFVBQXNDO1FBQ3hFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5CLElBQ0ksaUJBQWlCLEVBQUUsSUFBSSxLQUFLLGdCQUFRLENBQUMsY0FBYyxDQUFDLGVBQWU7UUFDbkUsaUJBQWlCLEVBQUUsSUFBSSxLQUFLLGdCQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFDaEUsQ0FBQztRQUNDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLGlCQUFpQixFQUFFLElBQUksS0FBSyxnQkFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5RCxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksaUJBQWlCLEVBQUUsSUFBSSxLQUFLLGdCQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3RFLE9BQU8saUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDakMs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
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.responseParsingTestCases = exports.pathPartTestCases = void 0;
|
|
4
|
+
exports.pathPartTestCases = [
|
|
2
5
|
{
|
|
3
6
|
moduleCode: `
|
|
4
7
|
@Get(":uuid")
|
|
@@ -51,7 +54,7 @@ export const pathPartTestCases = [
|
|
|
51
54
|
message: "handles controller options",
|
|
52
55
|
},
|
|
53
56
|
];
|
|
54
|
-
|
|
57
|
+
exports.responseParsingTestCases = [
|
|
55
58
|
{
|
|
56
59
|
pathToCheck: `uuid`,
|
|
57
60
|
paths: ['":uuid"'],
|
|
@@ -118,4 +121,4 @@ export const responseParsingTestCases = [
|
|
|
118
121
|
shouldResult: false,
|
|
119
122
|
},
|
|
120
123
|
];
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS50ZXN0RGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9wYXJhbURlY29yYXRvck5hbWVNYXRjaGVzUm91dGVQYXJhbS9ydWxlLnRlc3REYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsaUJBQWlCLEdBQUc7SUFDN0I7UUFDSSxVQUFVLEVBQUU7OztTQUdYO1FBQ0QsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ2xCLE9BQU8sRUFBRSw4QkFBOEI7S0FDMUM7SUFDRDtRQUNJLFVBQVUsRUFBRTs7O1NBR1g7UUFDRCxLQUFLLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztRQUMzQyxPQUFPLEVBQUUsa0NBQWtDO0tBQzlDO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7OztTQUdYO1FBQ0QsS0FBSyxFQUFFO1lBQ0gsa0NBQWtDO1lBQ2xDLGtDQUFrQztTQUNyQztRQUNELE9BQU8sRUFBRSxvQ0FBb0M7S0FDaEQ7SUFDRDtRQUNJLFVBQVUsRUFBRTs7O1NBR1g7UUFDRCxLQUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO1FBQzdCLE9BQU8sRUFBRSxnQ0FBZ0M7S0FDNUM7SUFDRDtRQUNJLFVBQVUsRUFBRTs7O1NBR1g7UUFDRCxLQUFLLEVBQUUsRUFBRTtRQUNULE9BQU8sRUFBRSxxQkFBcUI7S0FDakM7SUFDRDtRQUNJLFVBQVUsRUFBRTs7O1NBR1g7UUFDRCxLQUFLLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztRQUMzQyxPQUFPLEVBQUUsNEJBQTRCO0tBQ3hDO0NBQ0osQ0FBQztBQUVXLFFBQUEsd0JBQXdCLEdBQUc7SUFDcEM7UUFDSSxXQUFXLEVBQUUsTUFBTTtRQUNuQixLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDbEIsWUFBWSxFQUFFLElBQUk7S0FDckI7SUFDRDtRQUNJLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUNsQixZQUFZLEVBQUUsS0FBSztLQUN0QjtJQUNEO1FBQ0ksV0FBVyxFQUFFLE1BQU07UUFDbkIsS0FBSyxFQUFFLENBQUMsdUJBQXVCLENBQUM7UUFDaEMsWUFBWSxFQUFFLElBQUk7S0FDckI7SUFDRDtRQUNJLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLEtBQUssRUFBRSxDQUFDLHdCQUF3QixDQUFDO1FBQ2pDLFlBQVksRUFBRSxLQUFLO0tBQ3RCO0lBQ0Q7UUFDSSxXQUFXLEVBQUUsTUFBTTtRQUNuQixLQUFLLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztRQUNqQyxZQUFZLEVBQUUsSUFBSTtLQUNyQjtJQUNEO1FBQ0ksV0FBVyxFQUFFLE1BQU07UUFDbkIsS0FBSyxFQUFFLENBQUMsdUJBQXVCLENBQUM7UUFDaEMsWUFBWSxFQUFFLElBQUk7S0FDckI7SUFDRDtRQUNJLFdBQVcsRUFBRSxNQUFNO1FBQ25CLEtBQUssRUFBRSxDQUFDLHNCQUFzQixDQUFDO1FBQy9CLFlBQVksRUFBRSxJQUFJO0tBQ3JCO0lBQ0Q7UUFDSSxXQUFXLEVBQUUsTUFBTTtRQUNuQixLQUFLLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztRQUNoQyxZQUFZLEVBQUUsSUFBSTtLQUNyQjtJQUNEO1FBQ0ksV0FBVyxFQUFFLEtBQUs7UUFDbEIsS0FBSyxFQUFFLENBQUMsdUJBQXVCLENBQUM7UUFDaEMsWUFBWSxFQUFFLEtBQUs7S0FDdEI7SUFDRDtRQUNJLFdBQVcsRUFBRSxNQUFNO1FBQ25CLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUM7UUFDaEMsWUFBWSxFQUFFLElBQUk7S0FDckI7SUFDRDtRQUNJLFdBQVcsRUFBRSxNQUFNO1FBQ25CLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQztRQUNyQixZQUFZLEVBQUUsS0FBSztLQUN0QjtJQUNEO1FBQ0ksV0FBVyxFQUFFLE1BQU07UUFDbkIsS0FBSyxFQUFFLEVBQUU7UUFDVCxZQUFZLEVBQUUsS0FBSztLQUN0QjtJQUNEO1FBQ0ksV0FBVyxFQUFFLE1BQU07UUFDbkIsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNqQixZQUFZLEVBQUUsS0FBSztLQUN0QjtDQUNKLENBQUMifQ==
|
|
@@ -1,28 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasMismatchedInjected = void 0;
|
|
4
|
+
const createRule_1 = require("../../utils/createRule");
|
|
2
5
|
//import util from "util";
|
|
3
|
-
|
|
4
|
-
|
|
6
|
+
const nestProviderAstParser_1 = require("../../utils/nestModules/nestProviderAstParser");
|
|
7
|
+
const hasMismatchedInjected = (node) => {
|
|
5
8
|
// should be a nest provider - note this doesn't check the Provider used is an import actually from nest. Assumes nest Provider. Will change if this is annoying:)
|
|
6
9
|
// edit 03/06/2023 - it was annoying and someone complained on github so I added a check for a "useFactory" property on the Provider declaration
|
|
7
|
-
const isNestProvider = node.id.typeAnnotation
|
|
8
|
-
?.
|
|
10
|
+
const isNestProvider = (node.id.typeAnnotation
|
|
11
|
+
?.typeAnnotation
|
|
12
|
+
// prettier-ignore
|
|
13
|
+
).typeName.name === "Provider" &&
|
|
9
14
|
// and there is a useFactory property in the declaration
|
|
10
|
-
nestProviderAstParser.findProvideProperty(node, "useFactory");
|
|
15
|
+
nestProviderAstParser_1.nestProviderAstParser.findProvideProperty(node, "useFactory");
|
|
11
16
|
if (!isNestProvider) {
|
|
12
17
|
return false;
|
|
13
18
|
}
|
|
14
19
|
// count number of factory params
|
|
15
|
-
const factoryParameterCount = (nestProviderAstParser.findProvideProperty(node, "useFactory")
|
|
20
|
+
const factoryParameterCount = (nestProviderAstParser_1.nestProviderAstParser.findProvideProperty(node, "useFactory")
|
|
16
21
|
?.value).params.length;
|
|
17
22
|
// Count number of injected params
|
|
18
|
-
const injectedParameter = nestProviderAstParser.findProvideProperty(node, "inject")?.value;
|
|
23
|
+
const injectedParameter = nestProviderAstParser_1.nestProviderAstParser.findProvideProperty(node, "inject")?.value;
|
|
19
24
|
const injectedParameterCount = injectedParameter
|
|
20
25
|
? injectedParameter.elements.length
|
|
21
26
|
: 0;
|
|
22
27
|
// is there a mismatch?
|
|
23
28
|
return injectedParameterCount !== factoryParameterCount;
|
|
24
29
|
};
|
|
25
|
-
|
|
30
|
+
exports.hasMismatchedInjected = hasMismatchedInjected;
|
|
31
|
+
const rule = (0, createRule_1.createRule)({
|
|
26
32
|
name: "provided-injected-should-match-factory-parameters",
|
|
27
33
|
meta: {
|
|
28
34
|
docs: {
|
|
@@ -38,7 +44,7 @@ const rule = createRule({
|
|
|
38
44
|
create(context) {
|
|
39
45
|
return {
|
|
40
46
|
VariableDeclarator(node) {
|
|
41
|
-
if (hasMismatchedInjected(node)) {
|
|
47
|
+
if ((0, exports.hasMismatchedInjected)(node)) {
|
|
42
48
|
context.report({
|
|
43
49
|
node: node,
|
|
44
50
|
messageId: "mainMessage",
|
|
@@ -48,5 +54,5 @@ const rule = createRule({
|
|
|
48
54
|
};
|
|
49
55
|
},
|
|
50
56
|
});
|
|
51
|
-
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
exports.default = rule;
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvdmlkZXJJbmplY3RlZFNob3VsZE1hdGNoRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9wcm92aWRlckluamVjdGVkU2hvdWxkTWF0Y2hGYWN0b3J5L1Byb3ZpZGVySW5qZWN0ZWRTaG91bGRNYXRjaEZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdURBQWtEO0FBRWxELDBCQUEwQjtBQUMxQix5RkFBb0Y7QUFFN0UsTUFBTSxxQkFBcUIsR0FBRyxDQUNqQyxJQUFpQyxFQUMxQixFQUFFO0lBQ1Qsa0tBQWtLO0lBQ2xLLGdKQUFnSjtJQUNoSixNQUFNLGNBQWMsR0FFWixDQUNBLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYztRQUNsQixFQUFFLGNBQTBDO0lBQ3RELGtCQUFrQjtJQUVmLENBQUEsQ0FBQyxRQUNELENBQUMsSUFBSSxLQUFLLFVBQVU7UUFDckIsd0RBQXdEO1FBQ3hELDZDQUFxQixDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVsRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxNQUFNLHFCQUFxQixHQUFHLENBQzFCLDZDQUFxQixDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUM7UUFDekQsRUFBRSxLQUNULENBQUEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBRWhCLGtDQUFrQztJQUNsQyxNQUFNLGlCQUFpQixHQUFHLDZDQUFxQixDQUFDLG1CQUFtQixDQUMvRCxJQUFJLEVBQ0osUUFBUSxDQUNYLEVBQUUsS0FBNEMsQ0FBQztJQUVoRCxNQUFNLHNCQUFzQixHQUFHLGlCQUFpQjtRQUM1QyxDQUFDLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU07UUFDbkMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVSLHVCQUF1QjtJQUN2QixPQUFPLHNCQUFzQixLQUFLLHFCQUFxQixDQUFDO0FBQzVELENBQUMsQ0FBQztBQXZDVyxRQUFBLHFCQUFxQix5QkF1Q2hDO0FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBQSx1QkFBVSxFQUFvQjtJQUN2QyxJQUFJLEVBQUUsbURBQW1EO0lBQ3pELElBQUksRUFBRTtRQUNGLElBQUksRUFBRTtZQUNGLFdBQVcsRUFDUCxtR0FBbUc7U0FDMUc7UUFDRCxRQUFRLEVBQUU7WUFDTixXQUFXLEVBQUUsMEZBQTBGO1NBQzFHO1FBQ0QsTUFBTSxFQUFFLEVBQUU7UUFDVixJQUFJLEVBQUUsU0FBUztLQUNsQjtJQUNELGNBQWMsRUFBRSxFQUFFO0lBRWxCLE1BQU0sQ0FBQyxPQUFPO1FBQ1YsT0FBTztZQUNILGtCQUFrQixDQUFDLElBQWlDO2dCQUNoRCxJQUFJLElBQUEsNkJBQXFCLEVBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsYUFBYTtxQkFDM0IsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxrQkFBZSxJQUFJLENBQUMifQ==
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shouldTriggerForVariableDeclaratorExpression = exports.shouldTriggerNewExpressionHasProperty = exports.checkObjectExpression = exports.isValidationPipeNewExpression = void 0;
|
|
4
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
5
|
+
const createRule_1 = require("../../utils/createRule");
|
|
6
|
+
const utils_2 = require("@typescript-eslint/utils");
|
|
7
|
+
const isValidationPipeNewExpression = (node) => {
|
|
5
8
|
const newExpression = node;
|
|
6
9
|
const callee = newExpression.callee;
|
|
7
10
|
if (callee && callee.name === "ValidationPipe") {
|
|
@@ -9,13 +12,14 @@ export const isValidationPipeNewExpression = (node) => {
|
|
|
9
12
|
}
|
|
10
13
|
return false;
|
|
11
14
|
};
|
|
12
|
-
|
|
15
|
+
exports.isValidationPipeNewExpression = isValidationPipeNewExpression;
|
|
16
|
+
const checkObjectExpression = (os) => {
|
|
13
17
|
if (!os) {
|
|
14
18
|
return false;
|
|
15
19
|
}
|
|
16
20
|
// eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style
|
|
17
21
|
const forbidUnknownValuesProperty = os.properties
|
|
18
|
-
.filter(ASTUtils.isNodeOfType(TSESTree.AST_NODE_TYPES.Property))
|
|
22
|
+
.filter(utils_2.ASTUtils.isNodeOfType(utils_1.TSESTree.AST_NODE_TYPES.Property))
|
|
19
23
|
.find((p) => p.key.name === "forbidUnknownValues");
|
|
20
24
|
// property is not present. this is wrong.
|
|
21
25
|
if (os && !forbidUnknownValuesProperty) {
|
|
@@ -29,9 +33,10 @@ export const checkObjectExpression = (os) => {
|
|
|
29
33
|
// otherwise ignore this. we don't know the value.
|
|
30
34
|
return false;
|
|
31
35
|
};
|
|
32
|
-
|
|
36
|
+
exports.checkObjectExpression = checkObjectExpression;
|
|
37
|
+
const shouldTriggerNewExpressionHasProperty = (node) => {
|
|
33
38
|
// only look at ValidationPipe expressions
|
|
34
|
-
if (!isValidationPipeNewExpression(node)) {
|
|
39
|
+
if (!(0, exports.isValidationPipeNewExpression)(node)) {
|
|
35
40
|
return false;
|
|
36
41
|
}
|
|
37
42
|
const newExpression = node;
|
|
@@ -40,26 +45,28 @@ export const shouldTriggerNewExpressionHasProperty = (node) => {
|
|
|
40
45
|
// or if the properties are spread
|
|
41
46
|
if (newExpression.arguments.length === 0 ||
|
|
42
47
|
newExpression.arguments[0].type !==
|
|
43
|
-
TSESTree.AST_NODE_TYPES.ObjectExpression ||
|
|
44
|
-
newExpression.arguments[0].properties.some(ASTUtils.isNodeOfType(TSESTree.AST_NODE_TYPES.SpreadElement))) {
|
|
48
|
+
utils_1.TSESTree.AST_NODE_TYPES.ObjectExpression ||
|
|
49
|
+
newExpression.arguments[0].properties.some(utils_2.ASTUtils.isNodeOfType(utils_1.TSESTree.AST_NODE_TYPES.SpreadElement))) {
|
|
45
50
|
return false;
|
|
46
51
|
}
|
|
47
52
|
const argument = newExpression?.arguments[0];
|
|
48
|
-
return checkObjectExpression(argument);
|
|
53
|
+
return (0, exports.checkObjectExpression)(argument);
|
|
49
54
|
};
|
|
50
|
-
|
|
55
|
+
exports.shouldTriggerNewExpressionHasProperty = shouldTriggerNewExpressionHasProperty;
|
|
56
|
+
const shouldTriggerForVariableDeclaratorExpression = (node) => {
|
|
51
57
|
// if the developer hasn't annotated the object we can't continue to check these rules correctly (we don't know if anonymous objects need to have any props)
|
|
52
58
|
const variableDeclarator = node;
|
|
53
59
|
const asExpression = variableDeclarator.init;
|
|
54
|
-
const typeAnnotation = asExpression
|
|
60
|
+
const typeAnnotation = asExpression.typeAnnotation;
|
|
55
61
|
const typeName = typeAnnotation?.typeName;
|
|
56
62
|
if (typeName === undefined || typeName.name !== "ValidationPipeOptions") {
|
|
57
63
|
return false;
|
|
58
64
|
}
|
|
59
65
|
// otherwise check the object expression is what we want
|
|
60
|
-
return checkObjectExpression(asExpression.expression);
|
|
66
|
+
return (0, exports.checkObjectExpression)(asExpression.expression);
|
|
61
67
|
};
|
|
62
|
-
|
|
68
|
+
exports.shouldTriggerForVariableDeclaratorExpression = shouldTriggerForVariableDeclaratorExpression;
|
|
69
|
+
const rule = (0, createRule_1.createRule)({
|
|
63
70
|
name: "validation-pipe-should-use-forbid-unknown",
|
|
64
71
|
meta: {
|
|
65
72
|
docs: {
|
|
@@ -77,7 +84,7 @@ const rule = createRule({
|
|
|
77
84
|
return {
|
|
78
85
|
NewExpression(node) {
|
|
79
86
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
80
|
-
const result = shouldTriggerNewExpressionHasProperty(node);
|
|
87
|
+
const result = (0, exports.shouldTriggerNewExpressionHasProperty)(node);
|
|
81
88
|
if (result) {
|
|
82
89
|
context.report({
|
|
83
90
|
node: node,
|
|
@@ -87,7 +94,7 @@ const rule = createRule({
|
|
|
87
94
|
},
|
|
88
95
|
VariableDeclarator(node) {
|
|
89
96
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
90
|
-
const result = shouldTriggerForVariableDeclaratorExpression(node);
|
|
97
|
+
const result = (0, exports.shouldTriggerForVariableDeclaratorExpression)(node);
|
|
91
98
|
if (result) {
|
|
92
99
|
context.report({
|
|
93
100
|
node: node,
|
|
@@ -98,5 +105,5 @@ const rule = createRule({
|
|
|
98
105
|
};
|
|
99
106
|
},
|
|
100
107
|
});
|
|
101
|
-
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
108
|
+
exports.default = rule;
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdWxkU3BlY2lmeUZvcmJpZFVua25vd25WYWx1ZXNSdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL3Nob3VsZFNwZWNpZnlGb3JiaWRVbmtub3duVmFsdWVzL3Nob3VsZFNwZWNpZnlGb3JiaWRVbmtub3duVmFsdWVzUnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvREFBa0Q7QUFDbEQsdURBQWtEO0FBQ2xELG9EQUFrRDtBQUUzQyxNQUFNLDZCQUE2QixHQUFHLENBQUMsSUFBbUIsRUFBVyxFQUFFO0lBQzFFLE1BQU0sYUFBYSxHQUFHLElBQThCLENBQUM7SUFDckQsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQTZCLENBQUM7SUFDM0QsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUM7QUFQVyxRQUFBLDZCQUE2QixpQ0FPeEM7QUFDSyxNQUFNLHFCQUFxQixHQUFHLENBQ2pDLEVBQTZCLEVBQ3RCLEVBQUU7SUFDVCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDTixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0QsZ0ZBQWdGO0lBQ2hGLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDLFVBQVU7U0FDNUMsTUFBTSxDQUFDLGdCQUFRLENBQUMsWUFBWSxDQUFDLGdCQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQy9ELElBQUksQ0FDRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBQyxDQUFDLEdBQTJCLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUNsRCxDQUFDO0lBQzNCLDBDQUEwQztJQUMxQyxJQUFJLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELCtDQUErQztJQUMvQyxNQUFNLDhCQUE4QixHQUMvQiwyQkFBMkIsQ0FBQyxLQUEwQixDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUM7SUFDNUUsSUFBSSw4QkFBOEIsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxrREFBa0Q7SUFDbEQsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBeEJXLFFBQUEscUJBQXFCLHlCQXdCaEM7QUFFSyxNQUFNLHFDQUFxQyxHQUFHLENBQ2pELElBQW1CLEVBQ1osRUFBRTtJQUNULDBDQUEwQztJQUMxQyxJQUFJLENBQUMsSUFBQSxxQ0FBNkIsRUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxNQUFNLGFBQWEsR0FBRyxJQUE4QixDQUFDO0lBQ3JELHFHQUFxRztJQUNyRyxxRUFBcUU7SUFDckUsa0NBQWtDO0lBQ2xDLElBQ0ksYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUNwQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDM0IsZ0JBQVEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCO1FBQzVDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDdEMsZ0JBQVEsQ0FBQyxZQUFZLENBQUMsZ0JBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQy9ELEVBQ0gsQ0FBQztRQUNDLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdDLE9BQU8sSUFBQSw2QkFBcUIsRUFBQyxRQUFRLENBQUMsQ0FBQztBQUMzQyxDQUFDLENBQUM7QUF4QlcsUUFBQSxxQ0FBcUMseUNBd0JoRDtBQUVLLE1BQU0sNENBQTRDLEdBQUcsQ0FDeEQsSUFBaUMsRUFDMUIsRUFBRTtJQUNULDRKQUE0SjtJQUM1SixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUNoQyxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxJQUErQixDQUFDO0lBQ3hFLE1BQU0sY0FBYyxHQUNoQixZQUFZLENBQUMsY0FBMEMsQ0FBQztJQUM1RCxNQUFNLFFBQVEsR0FBRyxjQUFjLEVBQUUsUUFBK0IsQ0FBQztJQUNqRSxJQUFJLFFBQVEsS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3RFLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCx3REFBd0Q7SUFDeEQsT0FBTyxJQUFBLDZCQUFxQixFQUN4QixZQUFZLENBQUMsVUFBdUMsQ0FDdkQsQ0FBQztBQUNOLENBQUMsQ0FBQztBQWhCVyxRQUFBLDRDQUE0QyxnREFnQnZEO0FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBQSx1QkFBVSxFQUF5QztJQUM1RCxJQUFJLEVBQUUsMkNBQTJDO0lBQ2pELElBQUksRUFBRTtRQUNGLElBQUksRUFBRTtZQUNGLFdBQVcsRUFDUCwySUFBMkk7U0FDbEo7UUFDRCxRQUFRLEVBQUU7WUFDTixnQ0FBZ0MsRUFBRSxpTEFBaUw7U0FDdE47UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLElBQUksRUFBRSxZQUFZO0tBQ3JCO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFFbEIsTUFBTSxDQUFDLE9BQU87UUFDVixPQUFPO1lBQ0gsYUFBYSxDQUFDLElBQTRCO2dCQUN0QyxnRUFBZ0U7Z0JBQ2hFLE1BQU0sTUFBTSxHQUFHLElBQUEsNkNBQXFDLEVBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRTNELElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1QsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsa0NBQWtDO3FCQUNoRCxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztZQUNMLENBQUM7WUFFRCxrQkFBa0IsQ0FBQyxJQUFpQztnQkFDaEQsZ0VBQWdFO2dCQUNoRSxNQUFNLE1BQU0sR0FDUixJQUFBLG9EQUE0QyxFQUFDLElBQUksQ0FBQyxDQUFDO2dCQUV2RCxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNULE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ1gsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLGtDQUFrQztxQkFDaEQsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxrQkFBZSxJQUFJLENBQUMifQ==
|
|
@@ -1,36 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getRelevantNodeName = exports.isValidModuleMetaPropertyType = void 0;
|
|
4
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
5
|
+
const createRule_1 = require("../../utils/createRule");
|
|
6
|
+
const wellKnownSelectors_1 = require("../../utils/wellKnownSelectors");
|
|
7
|
+
const utils_2 = require("@typescript-eslint/utils");
|
|
5
8
|
// Inspired by https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/src/rules/sort-ngmodule-metadata-arrays.ts
|
|
6
9
|
const DEFAULT_LOCALE = "en-US";
|
|
7
|
-
|
|
10
|
+
const isValidModuleMetaPropertyType = (node) => {
|
|
8
11
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
9
12
|
return (!!node &&
|
|
10
|
-
ASTUtils.isNodeOfTypes([
|
|
11
|
-
TSESTree.AST_NODE_TYPES.Identifier,
|
|
12
|
-
TSESTree.AST_NODE_TYPES.CallExpression,
|
|
13
|
+
utils_2.ASTUtils.isNodeOfTypes([
|
|
14
|
+
utils_1.TSESTree.AST_NODE_TYPES.Identifier,
|
|
15
|
+
utils_1.TSESTree.AST_NODE_TYPES.CallExpression,
|
|
13
16
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
17
|
])); // unsure about this type
|
|
15
18
|
};
|
|
16
|
-
|
|
19
|
+
exports.isValidModuleMetaPropertyType = isValidModuleMetaPropertyType;
|
|
20
|
+
const getRelevantNodeName = (node) => {
|
|
17
21
|
let currentName = "";
|
|
18
|
-
if (node.type === TSESTree.AST_NODE_TYPES.Identifier) {
|
|
22
|
+
if (node.type === utils_1.TSESTree.AST_NODE_TYPES.Identifier) {
|
|
19
23
|
currentName = node.name;
|
|
20
24
|
}
|
|
21
|
-
if (node.type === TSESTree.AST_NODE_TYPES.CallExpression &&
|
|
22
|
-
node.callee.type === TSESTree.AST_NODE_TYPES.MemberExpression &&
|
|
23
|
-
node.callee.object.type === TSESTree.AST_NODE_TYPES.Identifier) {
|
|
25
|
+
if (node.type === utils_1.TSESTree.AST_NODE_TYPES.CallExpression &&
|
|
26
|
+
node.callee.type === utils_1.TSESTree.AST_NODE_TYPES.MemberExpression &&
|
|
27
|
+
node.callee.object.type === utils_1.TSESTree.AST_NODE_TYPES.Identifier) {
|
|
24
28
|
currentName = node.callee.object.name;
|
|
25
29
|
}
|
|
26
30
|
return currentName;
|
|
27
31
|
};
|
|
32
|
+
exports.getRelevantNodeName = getRelevantNodeName;
|
|
28
33
|
const defaultLocaleOptions = [
|
|
29
34
|
{
|
|
30
35
|
locale: DEFAULT_LOCALE,
|
|
31
36
|
},
|
|
32
37
|
];
|
|
33
|
-
|
|
38
|
+
exports.default = (0, createRule_1.createRule)({
|
|
34
39
|
name: "sort-module-metadata-arrays",
|
|
35
40
|
meta: {
|
|
36
41
|
type: "suggestion",
|
|
@@ -67,16 +72,16 @@ export default createRule({
|
|
|
67
72
|
const { locale } = context.options[0];
|
|
68
73
|
const sourceCode = context.sourceCode;
|
|
69
74
|
return {
|
|
70
|
-
[`${MODULE_CLASS_DECORATOR} Property > ArrayExpression`]({ elements, }) {
|
|
75
|
+
[`${wellKnownSelectors_1.MODULE_CLASS_DECORATOR} Property > ArrayExpression`]({ elements, }) {
|
|
71
76
|
const unorderedNodes = elements
|
|
72
77
|
// nestjs modules use identifiers and call expressions
|
|
73
78
|
// can modify this later
|
|
74
|
-
.filter(isValidModuleMetaPropertyType)
|
|
79
|
+
.filter(exports.isValidModuleMetaPropertyType)
|
|
75
80
|
.map((current, index, list) => [current, list[index + 1]])
|
|
76
81
|
.find(([current, next]) => {
|
|
77
82
|
return (current &&
|
|
78
83
|
next &&
|
|
79
|
-
getRelevantNodeName(current).localeCompare(getRelevantNodeName(next), locale) === 1);
|
|
84
|
+
(0, exports.getRelevantNodeName)(current).localeCompare((0, exports.getRelevantNodeName)(next), locale) === 1);
|
|
80
85
|
});
|
|
81
86
|
if (!unorderedNodes)
|
|
82
87
|
return;
|
|
@@ -93,4 +98,4 @@ export default createRule({
|
|
|
93
98
|
};
|
|
94
99
|
},
|
|
95
100
|
});
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydE1vZHVsZU1ldGFkYXRhQXJyYXlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL3NvcnRNb2R1bGVNZXRhZGF0YUFycmF5cy9zb3J0TW9kdWxlTWV0YWRhdGFBcnJheXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0RBQWtEO0FBQ2xELHVEQUFrRDtBQUNsRCx1RUFBc0U7QUFDdEUsb0RBQWtEO0FBRWxELDJJQUEySTtBQUUzSSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUM7QUFZeEIsTUFBTSw2QkFBNkIsR0FBRyxDQUN6QyxJQUF5RCxFQUM3QixFQUFFO0lBQzlCLCtEQUErRDtJQUMvRCxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDVixnQkFBUSxDQUFDLGFBQWEsQ0FBQztZQUNuQixnQkFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVO1lBQ2xDLGdCQUFRLENBQUMsY0FBYyxDQUFDLGNBQWM7WUFDdEMsOERBQThEO1NBQ2pFLENBQUMsQ0FBUSxDQUFDLENBQUMseUJBQXlCO0FBQzdDLENBQUMsQ0FBQztBQVZXLFFBQUEsNkJBQTZCLGlDQVV4QztBQUNLLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxJQUFtQixFQUFFLEVBQUU7SUFDdkQsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBRXJCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuRCxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFDSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFRLENBQUMsY0FBYyxDQUFDLGNBQWM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssZ0JBQVEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCO1FBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxnQkFBUSxD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
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class ArraySetResultModel {
|
|
2
4
|
constructor(isArrayShouldBeSetTrue, isArrayShouldBeSetFalse) {
|
|
3
5
|
this.isArrayShouldBeSetTrue = isArrayShouldBeSetTrue;
|
|
4
6
|
this.isArrayShouldBeSetFalse = isArrayShouldBeSetFalse;
|
|
5
7
|
}
|
|
6
8
|
}
|
|
7
|
-
|
|
9
|
+
exports.default = ArraySetResultModel;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlTZXRSZXN1bHRNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy92YWxpZGF0ZU5lc3RlZE9mQXJyYXlTaG91bGRTZXRFYWNoL2FycmF5U2V0UmVzdWx0TW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxNQUFxQixtQkFBbUI7SUFDcEMsWUFDVyxzQkFBK0IsRUFDL0IsdUJBQWdDO1FBRGhDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBUztRQUMvQiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQVM7SUFDeEMsQ0FBQztDQUNQO0FBTEQsc0NBS0MifQ==
|
|
@@ -1,24 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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.shouldSetArrayProperty = void 0;
|
|
7
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
8
|
+
const createRule_1 = require("../../utils/createRule");
|
|
9
|
+
const typedTokenHelpers_1 = require("../../utils/typedTokenHelpers");
|
|
10
|
+
const arraySetResultModel_1 = __importDefault(require("./arraySetResultModel"));
|
|
11
|
+
const shouldSetArrayProperty = (node) => {
|
|
12
|
+
const decorators = typedTokenHelpers_1.typedTokenHelpers.getDecoratorsNamed(node, [
|
|
7
13
|
"ValidateNested",
|
|
8
14
|
]);
|
|
9
15
|
if (decorators.length === 0) {
|
|
10
|
-
return new
|
|
16
|
+
return new arraySetResultModel_1.default(false, false);
|
|
11
17
|
}
|
|
12
18
|
const firstArgumentToDecorator = decorators[0].expression.arguments[0];
|
|
13
|
-
const hasEachSetInOptions = typedTokenHelpers.getPropertyValueEqualsExpected(firstArgumentToDecorator, "each", true);
|
|
19
|
+
const hasEachSetInOptions = typedTokenHelpers_1.typedTokenHelpers.getPropertyValueEqualsExpected(firstArgumentToDecorator, "each", true);
|
|
14
20
|
// handle string[] or Array<string>
|
|
15
21
|
const isArrayType = (node.typeAnnotation?.typeAnnotation)
|
|
16
22
|
.typeName?.name === "Array";
|
|
17
|
-
const isTypescriptArrayType = node.typeAnnotation?.typeAnnotation.type === AST_NODE_TYPES.TSArrayType;
|
|
23
|
+
const isTypescriptArrayType = node.typeAnnotation?.typeAnnotation.type === utils_1.AST_NODE_TYPES.TSArrayType;
|
|
18
24
|
const isAnArrayLikeType = isArrayType || isTypescriptArrayType;
|
|
19
|
-
return new
|
|
25
|
+
return new arraySetResultModel_1.default(isAnArrayLikeType && !hasEachSetInOptions, !isAnArrayLikeType && hasEachSetInOptions);
|
|
20
26
|
};
|
|
21
|
-
|
|
27
|
+
exports.shouldSetArrayProperty = shouldSetArrayProperty;
|
|
28
|
+
const rule = (0, createRule_1.createRule)({
|
|
22
29
|
name: "validate-nested-of-array-should-set-each",
|
|
23
30
|
meta: {
|
|
24
31
|
docs: {
|
|
@@ -36,7 +43,7 @@ const rule = createRule({
|
|
|
36
43
|
create(context) {
|
|
37
44
|
return {
|
|
38
45
|
PropertyDefinition: (node) => {
|
|
39
|
-
const shouldSetArrayResults = shouldSetArrayProperty(node);
|
|
46
|
+
const shouldSetArrayResults = (0, exports.shouldSetArrayProperty)(node);
|
|
40
47
|
if (shouldSetArrayResults.isArrayShouldBeSetFalse) {
|
|
41
48
|
context.report({
|
|
42
49
|
node: node,
|
|
@@ -53,5 +60,5 @@ const rule = createRule({
|
|
|
53
60
|
};
|
|
54
61
|
},
|
|
55
62
|
});
|
|
56
|
-
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
exports.default = rule;
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVOZXN0ZWRPZkFycmF5U2hvdWxkU2V0RWFjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy92YWxpZGF0ZU5lc3RlZE9mQXJyYXlTaG91bGRTZXRFYWNoL3ZhbGlkYXRlTmVzdGVkT2ZBcnJheVNob3VsZFNldEVhY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQWtFO0FBQ2xFLHVEQUFrRDtBQUNsRCxxRUFBZ0U7QUFDaEUsZ0ZBQXdEO0FBRWpELE1BQU0sc0JBQXNCLEdBQUcsQ0FDbEMsSUFBaUMsRUFDZCxFQUFFO0lBQ3JCLE1BQU0sVUFBVSxHQUFHLHFDQUFpQixDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRTtRQUMxRCxnQkFBZ0I7S0FDbkIsQ0FBQyxDQUFDO0lBRUgsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSw2QkFBbUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELE1BQU0sd0JBQXdCLEdBQzFCLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUNqQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQThCLENBQUM7SUFFNUMsTUFBTSxtQkFBbUIsR0FDckIscUNBQWlCLENBQUMsOEJBQThCLENBQzVDLHdCQUF3QixFQUN4QixNQUFNLEVBQ04sSUFBSSxDQUNQLENBQUM7SUFDTixtQ0FBbUM7SUFDbkMsTUFBTSxXQUFXLEdBRVQsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGNBQTJDLENBQUE7U0FDNUQsUUFDUixFQUFFLElBQUksS0FBSyxPQUFPLENBQUM7SUFDeEIsTUFBTSxxQkFBcUIsR0FDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsSUFBSSxLQUFLLHNCQUFjLENBQUMsV0FBVyxDQUFDO0lBQzVFLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxJQUFJLHFCQUFxQixDQUFDO0lBRS9ELE9BQU8sSUFBSSw2QkFBbUIsQ0FDMUIsaUJBQWlCLElBQUksQ0FBQyxtQkFBbUIsRUFDekMsQ0FBQyxpQkFBaUIsSUFBSSxtQkFBbUIsQ0FDNUMsQ0FBQztBQUNOLENBQUMsQ0FBQztBQW5DVyxRQUFBLHNCQUFzQiwwQkFtQ2pDO0FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBQSx1QkFBVSxFQUdyQjtJQUNFLElBQUksRUFBRSwwQ0FBMEM7SUFDaEQsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUNQLHFGQUFxRjtTQUM1RjtRQUNELFFBQVEsRUFBRTtZQUNOLHlCQUF5QixFQUFFLCtEQUErRDtZQUMxRiwwQkFBMEIsRUFBRSxrTEFBa0w7U0FDak47UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLElBQUksRUFBRSxZQUFZO0tBQ3JCO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFFbEIsTUFBTSxDQUFDLE9BQU87UUFDVixPQUFPO1lBQ0gsa0JBQWtCLEVBQUUsQ0FBQyxJQUFtQixFQUFFLEVBQUU7Z0JBQ3hDLE1BQU0scUJBQXFCLEdBQUcsSUFBQSw4QkFBc0IsRUFDaEQsSUFBbUMsQ0FDdEMsQ0FBQztnQkFFRixJQUFJLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFLENBQUM7b0JBQ2hELE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ1gsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLDRCQUE0QjtxQkFDMUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBQ0QsSUFBSSxxQkFBcUIsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO29CQUMvQyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNYLElBQUksRUFBRSxJQUFJO3dCQUNWLFNBQVMsRUFBRSwyQkFBMkI7cUJBQ3pDLENBQUMsQ0FBQztnQkFDUCxDQUFDO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FBRUgsa0JBQWUsSUFBSSxDQUFDIn0=
|