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