@darraghor/eslint-plugin-nestjs-typed 3.5.6 → 3.7.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/fixtures/file.js +2 -1
- package/dist/index.d.ts +3 -0
- package/dist/rules/index.d.ts +3 -0
- package/dist/rules/index.js +3 -1
- package/dist/rules/noWhitelistedProperties/noWhitelistedProperties.d.ts +4 -0
- package/dist/rules/noWhitelistedProperties/noWhitelistedProperties.js +77 -0
- package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.js +4 -2
- package/dist/rules/validate-non-primitves-needs-type-decorator/validateNonPrimitiveNeedsDecorators.js +26 -11
- package/dist/utils/classValidatorDecorators.js +2 -1
- package/dist/utils/createRule.d.ts +2 -14
- package/package.json +25 -23
package/dist/fixtures/file.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
2
|
+
/* eslint-disable unicorn/no-empty-file */
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwwQ0FBMEMifQ==
|
package/dist/index.d.ts
CHANGED
|
@@ -35,6 +35,9 @@ declare const configuration: {
|
|
|
35
35
|
"validate-nested-of-array-should-set-each": import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"shouldSetEachPropertyTrue" | "shouldSetEachPropertyFalse", never[], {
|
|
36
36
|
PropertyDefinition: (node: import("@typescript-eslint/types/dist/ast-spec").Node) => void;
|
|
37
37
|
}>;
|
|
38
|
+
"no-whitelisted-properties": import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"missing-property-decorator", never[], {
|
|
39
|
+
ClassDeclaration(node: import("@typescript-eslint/types/dist/ast-spec").ClassDeclaration): void;
|
|
40
|
+
}>;
|
|
38
41
|
};
|
|
39
42
|
configs: {
|
|
40
43
|
recommended: {
|
package/dist/rules/index.d.ts
CHANGED
|
@@ -34,5 +34,8 @@ declare const allRules: {
|
|
|
34
34
|
"validate-nested-of-array-should-set-each": import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"shouldSetEachPropertyTrue" | "shouldSetEachPropertyFalse", never[], {
|
|
35
35
|
PropertyDefinition: (node: import("@typescript-eslint/types/dist/ast-spec").Node) => void;
|
|
36
36
|
}>;
|
|
37
|
+
"no-whitelisted-properties": import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"missing-property-decorator", never[], {
|
|
38
|
+
ClassDeclaration(node: import("@typescript-eslint/types/dist/ast-spec").ClassDeclaration): void;
|
|
39
|
+
}>;
|
|
37
40
|
};
|
|
38
41
|
export default allRules;
|
package/dist/rules/index.js
CHANGED
|
@@ -14,6 +14,7 @@ const shouldSpecifyForbidUnknownValuesRule_1 = __importDefault(require("./should
|
|
|
14
14
|
const paramDecoratorNameMatchesRouteParam_1 = __importDefault(require("./paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam"));
|
|
15
15
|
const validateNonPrimitiveNeedsDecorators_1 = __importDefault(require("./validate-non-primitves-needs-type-decorator/validateNonPrimitiveNeedsDecorators"));
|
|
16
16
|
const validateNestedOfArrayShouldSetEach_1 = __importDefault(require("./validateNestedOfArrayShouldSetEach/validateNestedOfArrayShouldSetEach"));
|
|
17
|
+
const noWhitelistedProperties_1 = __importDefault(require("./noWhitelistedProperties/noWhitelistedProperties"));
|
|
17
18
|
const allRules = {
|
|
18
19
|
"api-property-matches-property-optionality": apiPropertyMatchesPropertyOptionality_1.default,
|
|
19
20
|
"injectable-should-be-provided": injectableShouldBeProvided_1.default,
|
|
@@ -26,6 +27,7 @@ const allRules = {
|
|
|
26
27
|
"param-decorator-name-matches-route-param": paramDecoratorNameMatchesRouteParam_1.default,
|
|
27
28
|
"validated-non-primitive-property-needs-type-decorator": validateNonPrimitiveNeedsDecorators_1.default,
|
|
28
29
|
"validate-nested-of-array-should-set-each": validateNestedOfArrayShouldSetEach_1.default,
|
|
30
|
+
"no-whitelisted-properties": noWhitelistedProperties_1.default,
|
|
29
31
|
};
|
|
30
32
|
exports.default = allRules;
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwwSEFBa0c7QUFDbEcsaUpBQW1JO0FBQ25JLDBKQUFrSTtBQUNsSSxrSUFBMEc7QUFDMUcsaUpBQXlIO0FBQ3pILCtIQUF1RztBQUN2RyxnS0FBd0k7QUFDeEksbUpBQXVIO0FBQ3ZILG9KQUFnSTtBQUNoSSw0SkFBb0k7QUFDcEksaUpBQXlIO0FBQ3pILGdIQUF3RjtBQUV4RixNQUFNLFFBQVEsR0FBRztJQUNiLDJDQUEyQyxFQUN2QywrQ0FBcUM7SUFDekMsK0JBQStCLEVBQUUsb0NBQTBCO0lBQzNELG1EQUFtRCxFQUMvQyw0Q0FBNEM7SUFDaEQsb0NBQW9DLEVBQUUsdUNBQTZCO0lBQ25FLHdDQUF3QyxFQUNwQyw0Q0FBa0M7SUFDdEMsa0NBQWtDLEVBQUUsc0NBQTRCO0lBQ2hFLCtDQUErQyxFQUMzQyxpREFBdUM7SUFDM0Msc0NBQXNDLEVBQUUsOENBQWdDO0lBQ3hFLDBDQUEwQyxFQUN0Qyw2Q0FBdUM7SUFDM0MsdURBQXVELEVBQ25ELDZDQUFtQztJQUN2QywwQ0FBMEMsRUFDdEMsNENBQWtDO0lBQ3RDLDJCQUEyQixFQUFFLGlDQUF1QjtDQUN2RCxDQUFDO0FBRUYsa0JBQWUsUUFBUSxDQUFDIn0=
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
|
|
23
|
+
const classValidator = __importStar(require("class-validator"));
|
|
24
|
+
const createRule_1 = require("../../utils/createRule");
|
|
25
|
+
const CLASS_VALIDATOR_DECORATOR_NAMES = new Set(Object.keys(classValidator));
|
|
26
|
+
const rule = (0, createRule_1.createRule)({
|
|
27
|
+
name: "no-whitelisted-properties",
|
|
28
|
+
meta: {
|
|
29
|
+
docs: {
|
|
30
|
+
description: "Enforce no properties are whitelisted",
|
|
31
|
+
recommended: "error",
|
|
32
|
+
requiresTypeChecking: false,
|
|
33
|
+
},
|
|
34
|
+
messages: {
|
|
35
|
+
"missing-property-decorator": "Property has no class-validator decorator (use @Allow so it would not be whitelisted)",
|
|
36
|
+
},
|
|
37
|
+
type: "problem",
|
|
38
|
+
schema: {},
|
|
39
|
+
},
|
|
40
|
+
defaultOptions: [],
|
|
41
|
+
create: function (context) {
|
|
42
|
+
return {
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
44
|
+
ClassDeclaration(node) {
|
|
45
|
+
var _a;
|
|
46
|
+
const withDecorator = [];
|
|
47
|
+
const withoutDecorator = [];
|
|
48
|
+
for (const element of node.body.body) {
|
|
49
|
+
if (element.type !== experimental_utils_1.AST_NODE_TYPES.PropertyDefinition) {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const hasDecorator = (_a = element.decorators) === null || _a === void 0 ? void 0 : _a.some((decorator) => decorator.expression.type ===
|
|
53
|
+
experimental_utils_1.AST_NODE_TYPES.CallExpression &&
|
|
54
|
+
decorator.expression.callee.type ===
|
|
55
|
+
experimental_utils_1.AST_NODE_TYPES.Identifier &&
|
|
56
|
+
CLASS_VALIDATOR_DECORATOR_NAMES.has(decorator.expression.callee.name));
|
|
57
|
+
if (hasDecorator) {
|
|
58
|
+
withDecorator.push(element);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
withoutDecorator.push(element);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (withDecorator.length > 0 && withoutDecorator.length > 0) {
|
|
65
|
+
for (const element of withoutDecorator) {
|
|
66
|
+
context.report({
|
|
67
|
+
node: element,
|
|
68
|
+
messageId: "missing-property-decorator",
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
exports.default = rule;
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9XaGl0ZWxpc3RlZFByb3BlcnRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvbm9XaGl0ZWxpc3RlZFByb3BlcnRpZXMvbm9XaGl0ZWxpc3RlZFByb3BlcnRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOEVBQXFFO0FBRXJFLGdFQUFrRDtBQUNsRCx1REFBa0Q7QUFFbEQsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLEdBQUcsQ0FDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUF3QixDQUFDLENBQ3hDLENBQUM7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQUM7SUFDcEIsSUFBSSxFQUFFLDJCQUEyQjtJQUNqQyxJQUFJLEVBQUU7UUFDRixJQUFJLEVBQUU7WUFDRixXQUFXLEVBQUUsdUNBQXVDO1lBQ3BELFdBQVcsRUFBRSxPQUFPO1lBQ3BCLG9CQUFvQixFQUFFLEtBQUs7U0FDOUI7UUFDRCxRQUFRLEVBQUU7WUFDTiw0QkFBNEIsRUFDeEIsdUZBQXVGO1NBQzlGO1FBQ0QsSUFBSSxFQUFFLFNBQVM7UUFDZixNQUFNLEVBQUUsRUFBRTtLQUNiO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFDbEIsTUFBTSxFQUFFLFVBQVUsT0FBTztRQUNyQixPQUFPO1lBQ0gsZ0VBQWdFO1lBQ2hFLGdCQUFnQixDQUFDLElBQUk7O2dCQUNqQixNQUFNLGFBQWEsR0FBeUIsRUFBRSxDQUFDO2dCQUMvQyxNQUFNLGdCQUFnQixHQUF5QixFQUFFLENBQUM7Z0JBQ2xELEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ2xDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxtQ0FBYyxDQUFDLGtCQUFrQixFQUFFO3dCQUNwRCxTQUFTO3FCQUNaO29CQUNELE1BQU0sWUFBWSxHQUFHLE1BQUEsT0FBTyxDQUFDLFVBQVUsMENBQUUsSUFBSSxDQUN6QyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ1YsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJO3dCQUNyQixtQ0FBYyxDQUFDLGNBQWM7d0JBQ2pDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUk7NEJBQzVCLG1DQUFjLENBQUMsVUFBVTt3QkFDN0IsK0JBQStCLENBQUMsR0FBRyxDQUMvQixTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ25DLENBQ1IsQ0FBQztvQkFDRixJQUFJLFlBQVksRUFBRTt3QkFDZCxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUMvQjt5QkFBTTt3QkFDSCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQ2xDO2lCQUNKO2dCQUNELElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDekQsS0FBSyxNQUFNLE9BQU8sSUFBSSxnQkFBZ0IsRUFBRTt3QkFDcEMsT0FBTyxDQUFDLE1BQU0sQ0FBQzs0QkFDWCxJQUFJLEVBQUUsT0FBTzs0QkFDYixTQUFTLEVBQUUsNEJBQTRCO3lCQUMxQyxDQUFDLENBQUM7cUJBQ047aUJBQ0o7WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxrQkFBZSxJQUFJLENBQUMifQ==
|
package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.js
CHANGED
|
@@ -59,7 +59,9 @@ const isParameterNameIncludedInAPathPart = (paramName, pathPartsToCheck) => {
|
|
|
59
59
|
pathPart === `':${paramName}'` ||
|
|
60
60
|
pathPart.includes(`/:${paramName}/`) ||
|
|
61
61
|
pathPart.includes(`/:${paramName}"`) ||
|
|
62
|
-
pathPart.includes(`":${paramName}/`)
|
|
62
|
+
pathPart.includes(`":${paramName}/`) ||
|
|
63
|
+
pathPart.includes(`/:${paramName}'`) ||
|
|
64
|
+
pathPart.includes(`':${paramName}/`));
|
|
63
65
|
});
|
|
64
66
|
};
|
|
65
67
|
exports.isParameterNameIncludedInAPathPart = isParameterNameIncludedInAPathPart;
|
|
@@ -161,4 +163,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
161
163
|
},
|
|
162
164
|
});
|
|
163
165
|
exports.default = rule;
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvcGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0vcGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsdURBQWtEO0FBT2xELE1BQU0sK0JBQStCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDNUMsS0FBSztJQUNMLE1BQU07SUFDTixLQUFLO0lBQ0wsUUFBUTtJQUNSLE9BQU87SUFDUCxTQUFTO0lBQ1QsTUFBTTtJQUNOLEtBQUs7Q0FDUixDQUFDLENBQUM7QUFFSSxNQUFNLGNBQWMsR0FBRyxDQUFDLFNBQTZCLEVBQVksRUFBRTs7SUFDdEUsTUFBTSxpQkFBaUIsR0FBRyxNQUFDLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxVQUFzQywwQ0FDdEUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5CLElBQUksQ0FBQSxpQkFBaUIsYUFBakIsaUJBQWlCLHVCQUFqQixpQkFBaUIsQ0FBRSxJQUFJLE1BQUssU0FBUyxFQUFFO1FBQ3ZDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsQztJQUNELElBQUksQ0FBQSxpQkFBaUIsYUFBakIsaUJBQWlCLHVCQUFqQixpQkFBaUIsQ0FBRSxJQUFJLE1BQUssaUJBQWlCLEVBQUU7UUFDL0MsT0FBTyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUNqQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBc0IsQ0FBQyxHQUFHLENBQ3JDLENBQUM7S0FDTDtJQUNELElBQUksQ0FBQSxpQkFBaUIsYUFBakIsaUJBQWlCLHVCQUFqQixpQkFBaUIsQ0FBRSxJQUFJLE1BQUssa0JBQWtCLEVBQUU7UUFDaEQsT0FBTyxpQkFBaUIsQ0FBQyxVQUFV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
|
|
@@ -7,6 +7,7 @@ const createRule_1 = require("../../utils/createRule");
|
|
|
7
7
|
const typedTokenHelpers_1 = require("../../utils/typedTokenHelpers");
|
|
8
8
|
const eslint_utils_1 = require("@typescript-eslint/experimental-utils/dist/eslint-utils");
|
|
9
9
|
const classValidatorDecorators_1 = require("../../utils/classValidatorDecorators");
|
|
10
|
+
//import util from "util";
|
|
10
11
|
const primitiveTypes = new Set([
|
|
11
12
|
types_1.AST_NODE_TYPES.TSStringKeyword,
|
|
12
13
|
types_1.AST_NODE_TYPES.TSBooleanKeyword,
|
|
@@ -38,28 +39,42 @@ const rule = (0, createRule_1.createRule)({
|
|
|
38
39
|
return {
|
|
39
40
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
40
41
|
PropertyDefinition(node) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
var _a, _b, _c, _d, _e, _f;
|
|
43
|
+
// if it's an array get the element type
|
|
44
|
+
let mainType;
|
|
45
|
+
const isAnArray = typedTokenHelpers_1.typedTokenHelpers.isTypeArrayTypeOrUnionOfArrayTypes(node, parserServices, typeChecker);
|
|
46
|
+
if (isAnArray) {
|
|
47
|
+
mainType = (_b = (_a = node.typeAnnotation) === null || _a === void 0 ? void 0 : _a.typeAnnotation) === null || _b === void 0 ? void 0 : _b.elementType.type;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
mainType = (_d = (_c = node.typeAnnotation) === null || _c === void 0 ? void 0 : _c.typeAnnotation) === null || _d === void 0 ? void 0 : _d.type;
|
|
51
|
+
}
|
|
52
|
+
// if this couldn't be found we don't understand the AST
|
|
53
|
+
if (!mainType) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// property is a primitive type - no need to validate
|
|
57
|
+
const isNodeTypePrimitive = primitiveTypes.has(mainType);
|
|
45
58
|
if (isNodeTypePrimitive) {
|
|
46
59
|
return;
|
|
47
60
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
((
|
|
61
|
+
// property is a union with primitive type - no need to validate
|
|
62
|
+
const isNodeAUnionWithAPrimitive = mainType === types_1.AST_NODE_TYPES.TSUnionType &&
|
|
63
|
+
((_f = ((_e = node.typeAnnotation) === null || _e === void 0 ? void 0 : _e.typeAnnotation).types) === null || _f === void 0 ? void 0 : _f.some((x) => primitiveTypes.has(x.type)));
|
|
51
64
|
if (isNodeAUnionWithAPrimitive) {
|
|
52
65
|
return;
|
|
53
66
|
}
|
|
54
|
-
// if this is an enum we don't need a type
|
|
67
|
+
// if this is an enum we don't need a type decorator
|
|
55
68
|
const mappedNode = parserServices.esTreeNodeToTSNodeMap.get(node);
|
|
56
69
|
const objectType = typeChecker.getTypeAtLocation(mappedNode);
|
|
57
70
|
if (typedTokenHelpers_1.typedTokenHelpers.isEnumType(objectType)) {
|
|
58
71
|
return;
|
|
59
72
|
}
|
|
60
|
-
// We have to make an assumption here. We assume that
|
|
73
|
+
// We have to make an assumption here. We assume that
|
|
74
|
+
// if there is a validation decorator on the property, this is an input DTO.
|
|
61
75
|
// And for input DTOs they should specify types.
|
|
62
|
-
// property has a validation decorator but not IsEnum
|
|
76
|
+
// property has a validation decorator but not IsEnum
|
|
77
|
+
// (we don't care about un-validated properties and enums don't need Type())
|
|
63
78
|
const foundClassValidatorDecorators = typedTokenHelpers_1.typedTokenHelpers.getDecoratorsNamed(node, classValidatorDecorators_1.classValidatorDecorators.filter((x) => x !== "IsEnum"));
|
|
64
79
|
if (foundClassValidatorDecorators.length === 0) {
|
|
65
80
|
return;
|
|
@@ -77,4 +92,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
77
92
|
},
|
|
78
93
|
});
|
|
79
94
|
exports.default = rule;
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVOb25QcmltaXRpdmVOZWVkc0RlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvdmFsaWRhdGUtbm9uLXByaW1pdHZlcy1uZWVkcy10eXBlLWRlY29yYXRvci92YWxpZGF0ZU5vblByaW1pdGl2ZU5lZWRzRGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrREFBa0Q7QUFDbEQsb0RBQWtFO0FBQ2xFLHVEQUFrRDtBQUNsRCxxRUFBZ0U7QUFDaEUsMEZBQTBGO0FBQzFGLG1GQUE4RTtBQUM5RSwwQkFBMEI7QUFFMUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDM0Isc0JBQWMsQ0FBQyxlQUFlO0lBQzlCLHNCQUFjLENBQUMsZ0JBQWdCO0lBQy9CLHNCQUFjLENBQUMsZUFBZTtDQUNqQyxDQUFDLENBQUM7QUFDSSxNQUFNLGFBQWEsR0FBRyxHQUFZLEVBQUU7SUFDdkMsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRlcsUUFBQSxhQUFhLGlCQUV4QjtBQUVGLE1BQU0sSUFBSSxHQUFHLElBQUEsdUJBQVUsRUFBQztJQUNwQixJQUFJLEVBQUUsdURBQXVEO0lBQzdELElBQUksRUFBRTtRQUNGLElBQUksRUFBRTtZQUNGLFdBQVcsRUFDUCwrRUFBK0U7WUFDbkYsV0FBVyxFQUFFLEtBQUs7WUFDbEIsb0JBQW9CLEVBQUUsS0FBSztTQUM5QjtRQUNELFFBQVEsRUFBRTtZQUNOLHNCQUFzQixFQUNsQiwrRUFBK0U7U0FDdEY7UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLElBQUksRUFBRSxZQUFZO0tBQ3JCO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFFbEIsTUFBTSxDQUFDLE9BQU87UUFDVixNQUFNLGNBQWMsR0FBRyxJQUFBLGdDQUFpQixFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sV0FB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
|
|
@@ -99,5 +99,6 @@ exports.classValidatorDecorators = [
|
|
|
99
99
|
"IsPassportNumber",
|
|
100
100
|
"IsPostalCode",
|
|
101
101
|
"IsSemVer",
|
|
102
|
+
"ValidateNested",
|
|
102
103
|
];
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NWYWxpZGF0b3JEZWNvcmF0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NsYXNzVmFsaWRhdG9yRGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLHdCQUF3QixHQUFHO0lBQ3BDLGlCQUFpQjtJQUNqQixZQUFZO0lBQ1osV0FBVztJQUNYLGFBQWE7SUFDYixZQUFZO0lBQ1osWUFBWTtJQUNaLFVBQVU7SUFDVixRQUFRO0lBQ1IsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsZ0JBQWdCO0lBQ2hCLFNBQVM7SUFDVCxXQUFXO0lBQ1gsVUFBVTtJQUNWLFdBQVc7SUFDWCxjQUFjO0lBQ2QsY0FBYztJQUNkLFlBQVk7SUFDWixRQUFRO0lBQ1IsZUFBZTtJQUNmLFNBQVM7SUFDVCxRQUFRO0lBQ1IsUUFBUTtJQUNSLGFBQWE7SUFDYixhQUFhO0lBQ2IsaUJBQWlCO0lBQ2pCLFlBQVk7SUFDWixlQUFlO0lBQ2YsTUFBTTtJQUNOLFFBQVE7SUFDUixXQUFXO0lBQ1gsTUFBTTtJQUNOLE9BQU87SUFDUCxRQUFRO0lBQ1IsT0FBTztJQUNQLFVBQVU7SUFDVixrQkFBa0I7SUFDbEIsUUFBUTtJQUNSLGFBQWE7SUFDYixXQUFXO0lBQ1gsYUFBYTtJQUNiLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsT0FBTztJQUNQLFFBQVE7SUFDUixhQUFhO0lBQ2IsU0FBUztJQUNULFdBQVc7SUFDWCxXQUFXO0lBQ1gsS0FBSztJQUNMLEtBQUs7SUFDTCxZQUFZO0lBQ1osZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixjQUFjO0lBQ2QsY0FBYztJQUNkLFdBQVc7SUFDWCxTQUFTO0lBQ1QsV0FBVztJQUNYLFNBQVM7SUFDVCxVQUFVO0lBQ1YsVUFBVTtJQUNWLGFBQWE7SUFDYixlQUFlO0lBQ2Ysa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixTQUFTO0lBQ1QsY0FBYztJQUNkLFlBQVk7SUFDWixlQUFlO0lBQ2Ysa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixRQUFRO0lBQ1IsY0FBYztJQUNkLFFBQVE7SUFDUixrQkFBa0I7SUFDbEIsT0FBTztJQUNQLE9BQU87SUFDUCxtQkFBbUI7SUFDbkIsY0FBYztJQUNkLFdBQVc7SUFDWCxPQUFPO0lBQ1AsWUFBWTtJQUNaLGdCQUFnQjtJQUNoQixVQUFVO0lBQ1YsUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0lBQ1IsV0FBVztJQUNYLFVBQVU7SUFDVixhQUFhO0lBQ2IsWUFBWTtJQUNaLFNBQVM7SUFDVCxrQkFBa0I7SUFDbEIsY0FBYztJQUNkLFVBQVU7SUFDVixnQkFBZ0I7Q0FDbkIsQ0FBQyJ9
|
|
@@ -1,14 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
meta: {
|
|
4
|
-
docs: {
|
|
5
|
-
description: string;
|
|
6
|
-
recommended: false | "error" | "warn";
|
|
7
|
-
suggestion?: boolean | undefined;
|
|
8
|
-
requiresTypeChecking?: boolean | undefined;
|
|
9
|
-
extendsBaseRule?: string | boolean | undefined;
|
|
10
|
-
};
|
|
11
|
-
} & Omit<import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleMetaData<TMessageIds>, "docs">;
|
|
12
|
-
defaultOptions: Readonly<TOptions>;
|
|
13
|
-
create: (context: Readonly<import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleContext<TMessageIds, TOptions>>, optionsWithDefault: Readonly<TOptions>) => TRuleListener;
|
|
14
|
-
}>) => import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<TMessageIds, TOptions, TRuleListener>;
|
|
1
|
+
import { ESLintUtils } from "@typescript-eslint/experimental-utils";
|
|
2
|
+
export declare const createRule: <TOptions extends readonly unknown[], TMessageIds extends string, TRuleListener extends import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleListener = import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleListener>({ name, meta, ...rule }: Readonly<ESLintUtils.RuleWithMetaAndName<TOptions, TMessageIds, TRuleListener>>) => import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<TMessageIds, TOptions, TRuleListener>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@darraghor/eslint-plugin-nestjs-typed",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.7.0",
|
|
4
4
|
"description": "Eslint rules for nestjs projects",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"clean": "rm -Rf ./dist/",
|
|
@@ -40,39 +40,41 @@
|
|
|
40
40
|
"main": "dist/index.js",
|
|
41
41
|
"types": "index.d.ts",
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@typescript-eslint/experimental-utils": "5.
|
|
44
|
-
"@typescript-eslint/scope-manager": "5.
|
|
43
|
+
"@typescript-eslint/experimental-utils": "5.5.0",
|
|
44
|
+
"@typescript-eslint/scope-manager": "5.5.0",
|
|
45
45
|
"eslint-module-utils": "2.7.1",
|
|
46
46
|
"reflect-metadata": "0.1.13"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@commitlint/cli": "
|
|
50
|
-
"@commitlint/config-conventional": "
|
|
51
|
-
"@semantic-release/changelog": "
|
|
52
|
-
"@semantic-release/exec": "
|
|
53
|
-
"@types/eslint": "
|
|
54
|
-
"@types/jest": "
|
|
55
|
-
"@types/node": "
|
|
56
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
57
|
-
"@typescript-eslint/parser": "5.
|
|
58
|
-
"
|
|
49
|
+
"@commitlint/cli": "15.0.0",
|
|
50
|
+
"@commitlint/config-conventional": "15.0.0",
|
|
51
|
+
"@semantic-release/changelog": "6.0.1",
|
|
52
|
+
"@semantic-release/exec": "6.0.2",
|
|
53
|
+
"@types/eslint": "8.2.0",
|
|
54
|
+
"@types/jest": "27.0.3",
|
|
55
|
+
"@types/node": "16.11.11",
|
|
56
|
+
"@typescript-eslint/eslint-plugin": "5.5.0",
|
|
57
|
+
"@typescript-eslint/parser": "5.5.0",
|
|
58
|
+
"class-validator": "^0.13.2",
|
|
59
|
+
"eslint": "8.3.0",
|
|
59
60
|
"eslint-config-prettier": "8.3.0",
|
|
60
|
-
"eslint-plugin-import": "2.25.
|
|
61
|
-
"eslint-plugin-jsdoc": "37.
|
|
61
|
+
"eslint-plugin-import": "2.25.3",
|
|
62
|
+
"eslint-plugin-jsdoc": "37.1.0",
|
|
62
63
|
"eslint-plugin-prefer-arrow": "1.2.3",
|
|
63
|
-
"eslint-plugin-unicorn": "
|
|
64
|
-
"husky": "
|
|
65
|
-
"jest": "27.
|
|
66
|
-
"jest-create-mock-instance": "
|
|
64
|
+
"eslint-plugin-unicorn": "39.0.0",
|
|
65
|
+
"husky": "7.0.4",
|
|
66
|
+
"jest": "27.4.2",
|
|
67
|
+
"jest-create-mock-instance": "2.0.0",
|
|
67
68
|
"jest-junit": "13.0.0",
|
|
68
|
-
"lint-staged": "
|
|
69
|
-
"prettier": "2.
|
|
70
|
-
"semantic-release": "
|
|
69
|
+
"lint-staged": "12.1.2",
|
|
70
|
+
"prettier": "2.5.0",
|
|
71
|
+
"semantic-release": "18.0.1",
|
|
71
72
|
"ts-jest": "27.0.7",
|
|
72
|
-
"typescript": "4.
|
|
73
|
+
"typescript": "4.5.2"
|
|
73
74
|
},
|
|
74
75
|
"peerDependencies": {
|
|
75
76
|
"@typescript-eslint/parser": "^5.0.0",
|
|
77
|
+
"class-validator": "*",
|
|
76
78
|
"eslint": "^8.0.0"
|
|
77
79
|
},
|
|
78
80
|
"keywords": [
|