@darraghor/eslint-plugin-nestjs-typed 3.22.0 → 3.22.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/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.shouldTrigger = exports.isParameterNameIncludedInAPathPart = exports.hasPathPartsAnyRegexParams = exports.parsePathParts = void 0;
|
|
4
|
+
/* eslint-disable unicorn/prevent-abbreviations */
|
|
5
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
4
6
|
const createRule_1 = require("../../utils/createRule");
|
|
5
7
|
const nestRequestMethodDecoratorNames = new Set([
|
|
6
8
|
"Get",
|
|
@@ -15,13 +17,17 @@ const nestRequestMethodDecoratorNames = new Set([
|
|
|
15
17
|
const parsePathParts = (decorator) => {
|
|
16
18
|
var _a;
|
|
17
19
|
const decoratorArgument = (_a = decorator === null || decorator === void 0 ? void 0 : decorator.expression) === null || _a === void 0 ? void 0 : _a.arguments[0];
|
|
18
|
-
if ((decoratorArgument === null || decoratorArgument === void 0 ? void 0 : decoratorArgument.type) ===
|
|
20
|
+
if ((decoratorArgument === null || decoratorArgument === void 0 ? void 0 : decoratorArgument.type) === utils_1.TSESTree.AST_NODE_TYPES.TemplateLiteral ||
|
|
21
|
+
(decoratorArgument === null || decoratorArgument === void 0 ? void 0 : decoratorArgument.type) === utils_1.TSESTree.AST_NODE_TYPES.Identifier) {
|
|
22
|
+
return ["dareslint__skip"];
|
|
23
|
+
}
|
|
24
|
+
if ((decoratorArgument === null || decoratorArgument === void 0 ? void 0 : decoratorArgument.type) === utils_1.TSESTree.AST_NODE_TYPES.Literal) {
|
|
19
25
|
return [decoratorArgument.raw];
|
|
20
26
|
}
|
|
21
|
-
if ((decoratorArgument === null || decoratorArgument === void 0 ? void 0 : decoratorArgument.type) ===
|
|
27
|
+
if ((decoratorArgument === null || decoratorArgument === void 0 ? void 0 : decoratorArgument.type) === utils_1.TSESTree.AST_NODE_TYPES.ArrayExpression) {
|
|
22
28
|
return decoratorArgument.elements.map((x) => x.raw);
|
|
23
29
|
}
|
|
24
|
-
if ((decoratorArgument === null || decoratorArgument === void 0 ? void 0 : decoratorArgument.type) ===
|
|
30
|
+
if ((decoratorArgument === null || decoratorArgument === void 0 ? void 0 : decoratorArgument.type) === utils_1.TSESTree.AST_NODE_TYPES.ObjectExpression) {
|
|
25
31
|
return decoratorArgument.properties
|
|
26
32
|
.filter((x) => {
|
|
27
33
|
var _a;
|
|
@@ -39,7 +45,7 @@ exports.parsePathParts = parsePathParts;
|
|
|
39
45
|
const hasPathPartsAnyRegexParams = (pathPartsToCheck) => {
|
|
40
46
|
// prettier-ignore
|
|
41
47
|
// eslint-disable-next-line no-useless-escape
|
|
42
|
-
const specialCharacterRegex = new RegExp("([\?\+\*\_\(\)])")
|
|
48
|
+
const specialCharacterRegex = /(dareslint__skip|\*|\+|\?|\(|\)|_)/; //new RegExp("([\?\+\*\_\(\)])")
|
|
43
49
|
return pathPartsToCheck.some((pathPart) => {
|
|
44
50
|
return specialCharacterRegex.test(pathPart);
|
|
45
51
|
});
|
|
@@ -105,7 +111,10 @@ const shouldTrigger = (decorator) => {
|
|
|
105
111
|
.callee) === null || _a === void 0 ? void 0 : _a.name);
|
|
106
112
|
});
|
|
107
113
|
pathPartsToCheck = pathPartsToCheck.concat((0, exports.parsePathParts)(methodDecorator));
|
|
108
|
-
const shouldIgnoreThisSetOfRoutes =
|
|
114
|
+
const shouldIgnoreThisSetOfRoutes =
|
|
115
|
+
// is a template literal argument
|
|
116
|
+
// is an identifier argument
|
|
117
|
+
(0, exports.hasPathPartsAnyRegexParams)(pathPartsToCheck);
|
|
109
118
|
if (shouldIgnoreThisSetOfRoutes) {
|
|
110
119
|
return {
|
|
111
120
|
hasColonInName: false,
|
|
@@ -163,4 +172,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
163
172
|
},
|
|
164
173
|
});
|
|
165
174
|
exports.default = rule;
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvcGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0vcGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsa0RBQWtEO0FBQ2xELG9EQUE0RDtBQUM1RCx1REFBa0Q7QUFPbEQsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUM1QyxLQUFLO0lBQ0wsTUFBTTtJQUNOLEtBQUs7SUFDTCxRQUFRO0lBQ1IsT0FBTztJQUNQLFNBQVM7SUFDVCxNQUFNO0lBQ04sS0FBSztDQUNSLENBQUMsQ0FBQztBQUVJLE1BQU0sY0FBYyxHQUFHLENBQUMsU0FBNkIsRUFBWSxFQUFFOztJQUN0RSxNQUFNLGlCQUFpQixHQUFHLE1BQUMsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLFVBQXNDLDBDQUN0RSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbkIsSUFDSSxDQUFBLGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLElBQUksTUFBSyxnQkFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlO1FBQ25FLENBQUEsaUJBQWlCLGFBQWpCLGlCQUFpQix1QkFBakIsaUJBQWlCLENBQUUsSUFBSSxNQUFLLGdCQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFDaEU7UUFDRSxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztLQUM5QjtJQUVELElBQUksQ0FBQSxpQkFBaUIsYUFBakIsaUJBQWlCLHVCQUFqQixpQkFBaUIsQ0FBRSxJQUFJLE1BQUssZ0JBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFO1FBQzdELE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsQztJQUNELElBQUksQ0FB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
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.shouldTriggerForVariableDecleratorExpression = exports.shouldTriggerNewExpressionHasProperty = exports.checkObjectExpression = exports.isValidationPipeNewExpression = void 0;
|
|
4
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
4
5
|
const createRule_1 = require("../../utils/createRule");
|
|
6
|
+
const ast_utils_1 = require("@typescript-eslint/utils/dist/ast-utils");
|
|
5
7
|
const isValidationPipeNewExpression = (node) => {
|
|
6
8
|
const newExpression = node;
|
|
7
9
|
const callee = newExpression === null || newExpression === void 0 ? void 0 : newExpression.callee;
|
|
@@ -16,8 +18,7 @@ const checkObjectExpression = (os) => {
|
|
|
16
18
|
if (!os) {
|
|
17
19
|
return false;
|
|
18
20
|
}
|
|
19
|
-
const forbidUnknownValuesProperty = (_a = os === null || os === void 0 ? void 0 : os.properties) === null || _a === void 0 ? void 0 : _a.find((p) => p.key.name ===
|
|
20
|
-
"forbidUnknownValues");
|
|
21
|
+
const forbidUnknownValuesProperty = (_a = os === null || os === void 0 ? void 0 : os.properties) === null || _a === void 0 ? void 0 : _a.filter((0, ast_utils_1.isNodeOfType)(utils_1.TSESTree.AST_NODE_TYPES.Property)).find((p) => p.key.name === "forbidUnknownValues");
|
|
21
22
|
// property is not present. this is wrong.
|
|
22
23
|
if (os && !forbidUnknownValuesProperty) {
|
|
23
24
|
return true;
|
|
@@ -41,8 +42,10 @@ const shouldTriggerNewExpressionHasProperty = (node) => {
|
|
|
41
42
|
const newExpression = node;
|
|
42
43
|
// the default new ValidationPipe() seems to prevent the attack so we ignore calls with no parameters
|
|
43
44
|
// we also ignore parameters that are not explicit object expressions
|
|
45
|
+
// or if the properties are spread
|
|
44
46
|
if (((_a = newExpression.arguments) === null || _a === void 0 ? void 0 : _a.length) === 0 ||
|
|
45
|
-
newExpression.arguments[0].type !== "ObjectExpression"
|
|
47
|
+
newExpression.arguments[0].type !== "ObjectExpression" ||
|
|
48
|
+
newExpression.arguments[0].properties.some((0, ast_utils_1.isNodeOfType)(utils_1.TSESTree.AST_NODE_TYPES.SpreadElement))) {
|
|
46
49
|
return false;
|
|
47
50
|
}
|
|
48
51
|
const argument = newExpression === null || newExpression === void 0 ? void 0 : newExpression.arguments[0];
|
|
@@ -106,4 +109,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
106
109
|
},
|
|
107
110
|
});
|
|
108
111
|
exports.default = rule;
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdWxkU3BlY2lmeUZvcmJpZFVua25vd25WYWx1ZXNSdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL3Nob3VsZFNwZWNpZnlGb3JiaWRVbmtub3duVmFsdWVzL3Nob3VsZFNwZWNpZnlGb3JiaWRVbmtub3duVmFsdWVzUnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxvREFBNEQ7QUFDNUQsdURBQWtEO0FBQ2xELHVFQUFxRTtBQUU5RCxNQUFNLDZCQUE2QixHQUFHLENBQUMsSUFBbUIsRUFBVyxFQUFFO0lBQzFFLE1BQU0sYUFBYSxHQUFHLElBQThCLENBQUM7SUFDckQsTUFBTSxNQUFNLEdBQUcsYUFBYSxhQUFiLGFBQWEsdUJBQWIsYUFBYSxDQUFFLE1BQTZCLENBQUM7SUFDNUQsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRTtRQUM1QyxPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBUFcsUUFBQSw2QkFBNkIsaUNBT3hDO0FBQ0ssTUFBTSxxQkFBcUIsR0FBRyxDQUNqQyxFQUE2QixFQUN0QixFQUFFOztJQUNULElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDTCxPQUFPLEtBQUssQ0FBQztLQUNoQjtJQUNELE1BQU0sMkJBQTJCLEdBQUcsTUFBQSxFQUFFLGFBQUYsRUFBRSx1QkFBRixFQUFFLENBQUUsVUFBVSwwQ0FDNUMsTUFBTSxDQUFDLElBQUEsd0JBQVksRUFBQyxnQkFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFDdEQsSUFBSSxDQUNELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFDLENBQUMsR0FBMkIsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQ2xELENBQUM7SUFDM0IsMENBQTBDO0lBQzFDLElBQUksRUFBRSxJQUFJLENBQUMsMkJBQTJCLEVBQUU7UUFDcEMsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELCtDQUErQztJQUMvQyxNQUFNLDhCQUE4QixHQUNoQyxDQUFDLDJCQUEyQixhQUEzQiwyQkFBMkIsdUJBQTNCLDJCQUEyQixDQUFFLEtBQTBCLENBQUEsQ0FBQyxHQUFHO1FBQzVELE9BQU8sQ0FBQztJQUNaLElBQUksOEJBQThCLEVBQUU7UUFDaEMsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELGtEQUFrRDtJQUNsRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUM7QUF4QlcsUUFBQSxxQkFBcUIseUJBd0JoQztBQUVLLE1BQU0scUNBQXFDLEdBQUcsQ0FDakQsSUFBbUIsRUFDWixFQUFFOztJQUNULDBDQUEwQztJQUMxQyxJQUFJLENBQUMsSUFBQSxxQ0FBNkIsRUFBQyxJQUFJLENBQUMsRUFBRTtRQUN0QyxPQUFPLEtBQUssQ0FBQztLQUNoQjtJQUNELE1BQU0sYUFBYSxHQUFHLElBQThCLENBQUM7SUFDckQscUdBQXFHO0lBQ3JHLHFFQUFxRTtJQUNyRSxrQ0FBa0M7SUFDbEMsSUFDSSxDQUFBLE1BQUEsYUFBYSxDQUFDLFNBQVMsMENBQUUsTUFBTSxNQUFLLENBQUM7UUFDckMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssa0JBQWtCO1FBQ3RELGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDdEMsSUFBQSx3QkFBWSxFQUFDLGdCQUFRLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUN0RCxFQUNIO1FBQ0UsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFDRCxNQUFNLFFBQVEsR0FBRyxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdDLE9BQU8sSUFBQSw2QkFBcUIsRUFBQyxRQUFRLENBQUMsQ0FBQztBQUMzQyxDQUFDLENBQUM7QUF2QlcsUUFBQSxxQ0FBcUMseUNBdUJoRDtBQUVLLE1BQU0sNENBQTRDLEdBQUcsQ0FDeEQsSUFBbUIsRUFDWixFQUFFO0lBQ1QsNEpBQTRKO0lBQzVKLE1BQU0sa0JBQWtCLEdBQUcsSUFBMEIsQ0FBQztJQUN0RCxNQUFNLFlBQVksR0FBRyxrQkFBa0IsYUFBbEIsa0JBQWtCLHVCQUFsQixrQkFBa0IsQ0FBRSxJQUErQixDQUFDO0lBQ3pFLE1BQU0sY0FBYyxHQUNoQixZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsY0FBMEMsQ0FBQztJQUM3RCxNQUFNLFFBQVEsR0FBRyxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsUUFBK0IsQ0FBQztJQUNqRSxJQUFJLFFBQVEsS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyx1QkFBdUIsRUFBRTtRQUNyRSxPQUFPLEtBQUssQ0FBQztLQUNoQjtJQUNELHdEQUF3RDtJQUN4RCxPQUFPLElBQUEsNkJBQXFCLEVBQ3hCLFlBQVksQ0FBQyxVQUF1QyxDQUN2RCxDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBaEJXLFFBQUEsNENBQTRDLGdEQWdCdkQ7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQUM7SUFDcEIsSUFBSSxFQUFFLDJDQUEyQztJQUNqRCxJQUFJLEVBQUU7UUFDRixJQUFJLEVBQUU7WUFDRixXQUFXLEVBQ1AsMklBQTJJO1lBQy9JLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLG9CQUFvQixFQUFFLEtBQUs7U0FDOUI7UUFDRCxRQUFRLEVBQUU7WUFDTixnQ0FBZ0MsRUFBRSxpTEFBaUw7U0FDdE47UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLElBQUksRUFBRSxZQUFZO0tBQ3JCO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFFbEIsTUFBTSxDQUNGLE9BRUM7UUFFRCxPQUFPO1lBQ0gsZ0VBQWdFO1lBQ2hFLGFBQWEsQ0FBQyxJQUFtQjtnQkFDN0IsZ0VBQWdFO2dCQUNoRSxNQUFNLE1BQU0sR0FBRyxJQUFBLDZDQUFxQyxFQUFDLElBQUksQ0FBQyxDQUFDO2dCQUUzRCxJQUFJLE1BQU0sRUFBRTtvQkFDUixPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNYLElBQUksRUFBRSxJQUFJO3dCQUNWLFNBQVMsRUFBRSxrQ0FBa0M7cUJBQ2hELENBQUMsQ0FBQztpQkFDTjtZQUNMLENBQUM7WUFDRCxnRUFBZ0U7WUFDaEUsa0JBQWtCLENBQUMsSUFBbUI7Z0JBQ2xDLGdFQUFnRTtnQkFDaEUsTUFBTSxNQUFNLEdBQ1IsSUFBQSxvREFBNEMsRUFBQyxJQUFJLENBQUMsQ0FBQztnQkFFdkQsSUFBSSxNQUFNLEVBQUU7b0JBQ1IsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsa0NBQWtDO3FCQUNoRCxDQUFDLENBQUM7aUJBQ047WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxrQkFBZSxJQUFJLENBQUMifQ==
|