@darraghor/eslint-plugin-nestjs-typed 6.15.0 → 6.17.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 CHANGED
@@ -63,6 +63,7 @@ Awesome! [Click here](https://github.com/darraghoriordan/eslint-plugin-nestjs-ty
63
63
  | Nest Modules and Dependency Injection | [`provided-injected-should-match-factory-parameters`](./src/docs/rules/provided-injected-should-match-factory-parameters.md) | ✅ |
64
64
  | | [`injectable-should-be-provided`](./src/docs/rules/injectable-should-be-provided.md) | ✅ |
65
65
  | | [`use-injectable-provided-token`](./src/docs/rules/use-injectable-provided-token.md) | ✅ |
66
+ | | [`use-dependency-injection`](./src/docs/rules/use-dependency-injection.md) | ❌ |
66
67
  | | | |
67
68
  | Nest Swagger | [`api-property-matches-property-optionality`](./src/docs/rules/api-property-matches-property-optionality.md) | ✅ |
68
69
  | | [`controllers-should-supply-api-tags`](./src/docs/rules/controllers-should-supply-api-tags.md) | ✅ |
@@ -24,9 +24,10 @@ export const rules = {
24
24
  "@darraghor/nestjs-typed/no-duplicate-decorators": "error",
25
25
  "@darraghor/nestjs-typed/use-injectable-provided-token": "error",
26
26
  "@darraghor/nestjs-typed/api-property-should-have-api-extra-models": "error",
27
+ "@darraghor/nestjs-typed/use-dependency-injection": "off",
27
28
  };
28
29
  export default {
29
30
  extends: ["./configs/base"],
30
31
  rules,
31
32
  };
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb21tZW5kZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlncy9yZWNvbW1lbmRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQWdDO0lBQzlDLDJFQUEyRSxFQUN2RSxPQUFPO0lBQ1gsdURBQXVELEVBQUU7UUFDckQsT0FBTztRQUNQO1lBQ0ksR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ3BCLGVBQWUsRUFBRSxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO1NBQ3hEO0tBQ0o7SUFDRCxtRUFBbUUsRUFDL0QsT0FBTztJQUNYLGdFQUFnRSxFQUFFLE9BQU87SUFDekUsNERBQTRELEVBQUUsT0FBTztJQUNyRSwwREFBMEQsRUFBRSxPQUFPO0lBQ25FLHVFQUF1RSxFQUNuRSxPQUFPO0lBQ1gsOERBQThELEVBQUUsT0FBTztJQUN2RSxrRUFBa0UsRUFBRSxPQUFPO0lBQzNFLCtFQUErRSxFQUMzRSxPQUFPO0lBQ1gsa0VBQWtFLEVBQUUsT0FBTztJQUMzRSx3REFBd0QsRUFBRSxPQUFPO0lBQ2pFLDhEQUE4RCxFQUFFLE9BQU87SUFDdkUsdURBQXVELEVBQUUsS0FBSztJQUM5RCxpRUFBaUUsRUFBRSxLQUFLO0lBQ3hFLHFEQUFxRCxFQUFFLEtBQUs7SUFDNUQsaURBQWlELEVBQUUsT0FBTztJQUMxRCx1REFBdUQsRUFBRSxPQUFPO0lBQ2hFLG1FQUFtRSxFQUMvRCxPQUFPO0NBQ2QsQ0FBQztBQUNGLGVBQWU7SUFDWCxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMzQixLQUFLO0NBQ1IsQ0FBQyJ9
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb21tZW5kZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlncy9yZWNvbW1lbmRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQWdDO0lBQzlDLDJFQUEyRSxFQUN2RSxPQUFPO0lBQ1gsdURBQXVELEVBQUU7UUFDckQsT0FBTztRQUNQO1lBQ0ksR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ3BCLGVBQWUsRUFBRSxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO1NBQ3hEO0tBQ0o7SUFDRCxtRUFBbUUsRUFDL0QsT0FBTztJQUNYLGdFQUFnRSxFQUFFLE9BQU87SUFDekUsNERBQTRELEVBQUUsT0FBTztJQUNyRSwwREFBMEQsRUFBRSxPQUFPO0lBQ25FLHVFQUF1RSxFQUNuRSxPQUFPO0lBQ1gsOERBQThELEVBQUUsT0FBTztJQUN2RSxrRUFBa0UsRUFBRSxPQUFPO0lBQzNFLCtFQUErRSxFQUMzRSxPQUFPO0lBQ1gsa0VBQWtFLEVBQUUsT0FBTztJQUMzRSx3REFBd0QsRUFBRSxPQUFPO0lBQ2pFLDhEQUE4RCxFQUFFLE9BQU87SUFDdkUsdURBQXVELEVBQUUsS0FBSztJQUM5RCxpRUFBaUUsRUFBRSxLQUFLO0lBQ3hFLHFEQUFxRCxFQUFFLEtBQUs7SUFDNUQsaURBQWlELEVBQUUsT0FBTztJQUMxRCx1REFBdUQsRUFBRSxPQUFPO0lBQ2hFLG1FQUFtRSxFQUMvRCxPQUFPO0lBQ1gsa0RBQWtELEVBQUUsS0FBSztDQUM1RCxDQUFDO0FBQ0YsZUFBZTtJQUNYLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO0lBQzNCLEtBQUs7Q0FDUixDQUFDIn0=
@@ -33,5 +33,6 @@ declare const allRules: {
33
33
  }], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
34
34
  "use-injectable-provided-token": import("@typescript-eslint/utils/ts-eslint").RuleModule<"useInjectableProvidedToken", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
35
35
  "api-property-should-have-api-extra-models": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldUseApiExtraModels", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
36
+ "use-dependency-injection": import("@typescript-eslint/utils/ts-eslint").RuleModule<"useDependencyInjection", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
36
37
  };
37
38
  export default allRules;
@@ -18,6 +18,7 @@ import noDuplicateDecorators from "./noDuplicateDecorators/noDuplicateDecorators
18
18
  import useCorrectEndpointNamingConvention from "./useCorrectEndpointNamingConvention/useCorrectEndpointNamingConvention.js";
19
19
  import useInjectableProvidedToken from "./useInjectableProvidedToken/useInjectableProvidedToken.js";
20
20
  import apiPropertyShouldHaveApiExtraModels from "./apiPropertyShouldHaveApiExtraModels/apiPropertyShouldHaveApiExtraModels.js";
21
+ import useDependencyInjection from "./useDependencyInjection/useDependencyInjection.js";
21
22
  const allRules = {
22
23
  "all-properties-have-explicit-defined": allPropertiesHaveExplicitDefined,
23
24
  "api-property-matches-property-optionality": apiPropertyMatchesPropertyOptionality,
@@ -39,6 +40,7 @@ const allRules = {
39
40
  "use-correct-endpoint-naming-convention": useCorrectEndpointNamingConvention,
40
41
  "use-injectable-provided-token": useInjectableProvidedToken,
41
42
  "api-property-should-have-api-extra-models": apiPropertyShouldHaveApiExtraModels,
43
+ "use-dependency-injection": useDependencyInjection,
42
44
  };
43
45
  export default allRules;
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTywwQkFBMEIsTUFBTSw2REFBNkQsQ0FBQztBQUNyRyxPQUFPLDRDQUE0QyxNQUFNLDRFQUE0RSxDQUFDO0FBQ3RJLE9BQU8scUNBQXFDLE1BQU0sa0ZBQWtGLENBQUM7QUFDckksT0FBTyw2QkFBNkIsTUFBTSxrRUFBa0UsQ0FBQztBQUM3RyxPQUFPLGtDQUFrQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzVILE9BQU8sNEJBQTRCLE1BQU0sZ0VBQWdFLENBQUM7QUFDMUcsT0FBTyx1Q0FBdUMsTUFBTSxzRkFBc0YsQ0FBQztBQUMzSSxPQUFPLGdDQUFnQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzFILE9BQU8sdUNBQXVDLE1BQU0sOEVBQThFLENBQUM7QUFDbkksT0FBTyxtQ0FBbUMsTUFBTSxpRkFBaUYsQ0FBQztBQUNsSSxPQUFPLGtDQUFrQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzVILE9BQU8sMkJBQTJCLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxnQ0FBZ0MsTUFBTSx3RUFBd0UsQ0FBQztBQUN0SCxPQUFPLHlCQUF5QixNQUFNLDBEQUEwRCxDQUFDO0FBQ2pHLE9BQU8sbUNBQW1DLE1BQU0sOEVBQThFLENBQUM7QUFDL0gsT0FBTyx3QkFBd0IsTUFBTSx3REFBd0QsQ0FBQztBQUM5RixPQUFPLHFCQUFxQixNQUFNLGtEQUFrRCxDQUFDO0FBQ3JGLE9BQU8sa0NBQWtDLE1BQU0sNEVBQTRFLENBQUM7QUFDNUgsT0FBTywwQkFBMEIsTUFBTSw0REFBNEQsQ0FBQztBQUNwRyxPQUFPLG1DQUFtQyxNQUFNLDhFQUE4RSxDQUFDO0FBQy9ILE1BQU0sUUFBUSxHQUFHO0lBQ2Isc0NBQXNDLEVBQUUsZ0NBQWdDO0lBQ3hFLDJDQUEyQyxFQUN2QyxxQ0FBcUM7SUFDekMsK0JBQStCLEVBQUUsMEJBQTBCO0lBQzNELHlCQUF5QixFQUFFLHFCQUFxQjtJQUNoRCxtREFBbUQsRUFDL0MsNENBQTRDO0lBQ2hELG9DQUFvQyxFQUFFLDZCQUE2QjtJQUNuRSx3Q0FBd0MsRUFDcEMsa0NBQWtDO0lBQ3RDLHlDQUF5QyxFQUNyQyxtQ0FBbUM7SUFDdkMsa0NBQWtDLEVBQUUsNEJBQTRCO0lBQ2hFLCtDQUErQyxFQUMzQyx1Q0FBdUM7SUFDM0Msc0NBQXNDLEVBQUUsZ0NBQWdDO0lBQ3hFLDBDQUEwQyxFQUN0Qyx1Q0FBdUM7SUFDM0MsdURBQXVELEVBQ25ELG1DQUFtQztJQUN2QywwQ0FBMEMsRUFDdEMsa0NBQWtDO0lBQ3RDLGdDQUFnQyxFQUFFLDJCQUEyQjtJQUM3RCwrQkFBK0IsRUFBRSx5QkFBeUI7SUFDMUQsNkJBQTZCLEVBQUUsd0JBQXdCO0lBQ3ZELHdDQUF3QyxFQUNwQyxrQ0FBa0M7SUFDdEMsK0JBQStCLEVBQUUsMEJBQTBCO0lBQzNELDJDQUEyQyxFQUN2QyxtQ0FBbUM7Q0FDMUMsQ0FBQztBQUVGLGVBQWUsUUFBUSxDQUFDIn0=
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTywwQkFBMEIsTUFBTSw2REFBNkQsQ0FBQztBQUNyRyxPQUFPLDRDQUE0QyxNQUFNLDRFQUE0RSxDQUFDO0FBQ3RJLE9BQU8scUNBQXFDLE1BQU0sa0ZBQWtGLENBQUM7QUFDckksT0FBTyw2QkFBNkIsTUFBTSxrRUFBa0UsQ0FBQztBQUM3RyxPQUFPLGtDQUFrQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzVILE9BQU8sNEJBQTRCLE1BQU0sZ0VBQWdFLENBQUM7QUFDMUcsT0FBTyx1Q0FBdUMsTUFBTSxzRkFBc0YsQ0FBQztBQUMzSSxPQUFPLGdDQUFnQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzFILE9BQU8sdUNBQXVDLE1BQU0sOEVBQThFLENBQUM7QUFDbkksT0FBTyxtQ0FBbUMsTUFBTSxpRkFBaUYsQ0FBQztBQUNsSSxPQUFPLGtDQUFrQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzVILE9BQU8sMkJBQTJCLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxnQ0FBZ0MsTUFBTSx3RUFBd0UsQ0FBQztBQUN0SCxPQUFPLHlCQUF5QixNQUFNLDBEQUEwRCxDQUFDO0FBQ2pHLE9BQU8sbUNBQW1DLE1BQU0sOEVBQThFLENBQUM7QUFDL0gsT0FBTyx3QkFBd0IsTUFBTSx3REFBd0QsQ0FBQztBQUM5RixPQUFPLHFCQUFxQixNQUFNLGtEQUFrRCxDQUFDO0FBQ3JGLE9BQU8sa0NBQWtDLE1BQU0sNEVBQTRFLENBQUM7QUFDNUgsT0FBTywwQkFBMEIsTUFBTSw0REFBNEQsQ0FBQztBQUNwRyxPQUFPLG1DQUFtQyxNQUFNLDhFQUE4RSxDQUFDO0FBQy9ILE9BQU8sc0JBQXNCLE1BQU0sb0RBQW9ELENBQUM7QUFDeEYsTUFBTSxRQUFRLEdBQUc7SUFDYixzQ0FBc0MsRUFBRSxnQ0FBZ0M7SUFDeEUsMkNBQTJDLEVBQ3ZDLHFDQUFxQztJQUN6QywrQkFBK0IsRUFBRSwwQkFBMEI7SUFDM0QseUJBQXlCLEVBQUUscUJBQXFCO0lBQ2hELG1EQUFtRCxFQUMvQyw0Q0FBNEM7SUFDaEQsb0NBQW9DLEVBQUUsNkJBQTZCO0lBQ25FLHdDQUF3QyxFQUNwQyxrQ0FBa0M7SUFDdEMseUNBQXlDLEVBQ3JDLG1DQUFtQztJQUN2QyxrQ0FBa0MsRUFBRSw0QkFBNEI7SUFDaEUsK0NBQStDLEVBQzNDLHVDQUF1QztJQUMzQyxzQ0FBc0MsRUFBRSxnQ0FBZ0M7SUFDeEUsMENBQTBDLEVBQ3RDLHVDQUF1QztJQUMzQyx1REFBdUQsRUFDbkQsbUNBQW1DO0lBQ3ZDLDBDQUEwQyxFQUN0QyxrQ0FBa0M7SUFDdEMsZ0NBQWdDLEVBQUUsMkJBQTJCO0lBQzdELCtCQUErQixFQUFFLHlCQUF5QjtJQUMxRCw2QkFBNkIsRUFBRSx3QkFBd0I7SUFDdkQsd0NBQXdDLEVBQ3BDLGtDQUFrQztJQUN0QywrQkFBK0IsRUFBRSwwQkFBMEI7SUFDM0QsMkNBQTJDLEVBQ3ZDLG1DQUFtQztJQUN2QywwQkFBMEIsRUFBRSxzQkFBc0I7Q0FDckQsQ0FBQztBQUVGLGVBQWUsUUFBUSxDQUFDIn0=
@@ -16,7 +16,8 @@ export const parsePathParts = (decorator) => {
16
16
  const decoratorArgument = decorator?.expression
17
17
  ?.arguments[0];
18
18
  if (decoratorArgument?.type === TSESTree.AST_NODE_TYPES.TemplateLiteral ||
19
- decoratorArgument?.type === TSESTree.AST_NODE_TYPES.Identifier) {
19
+ decoratorArgument?.type === TSESTree.AST_NODE_TYPES.Identifier ||
20
+ decoratorArgument?.type === TSESTree.AST_NODE_TYPES.MemberExpression) {
20
21
  return ["dareslint__skip"];
21
22
  }
22
23
  if (decoratorArgument?.type === TSESTree.AST_NODE_TYPES.Literal) {
@@ -187,4 +188,4 @@ const rule = createRule({
187
188
  },
188
189
  });
189
190
  export default rule;
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvcGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0vcGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0RBQWtEO0FBQ2xELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFxQnJELE1BQU0sK0JBQStCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDNUMsS0FBSztJQUNMLE1BQU07SUFDTixLQUFLO0lBQ0wsUUFBUTtJQUNSLE9BQU87SUFDUCxTQUFTO0lBQ1QsTUFBTTtJQUNOLEtBQUs7SUFDTCxLQUFLO0NBQ1IsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsU0FBNkIsRUFBWSxFQUFFO0lBQ3RFLE1BQU0saUJBQWlCLEdBQUksU0FBUyxFQUFFLFVBQXNDO1FBQ3hFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5CLElBQ0ksaUJBQWlCLEVBQUUsSUFBSSxLQUFLLFFBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZTtRQUNuRSxpQkFBaUIsRUFBRSxJQUFJLEtBQUssUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQ2hFLENBQUM7UUFDQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxpQkFBaUIsRUFBRSxJQUFJLEtBQUssUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5RCxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksaUJBQWlCLEVBQUUsSUFBSSxLQUFLLFFBQVEs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
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvcGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0vcGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0RBQWtEO0FBQ2xELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFxQnJELE1BQU0sK0JBQStCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDNUMsS0FBSztJQUNMLE1BQU07SUFDTixLQUFLO0lBQ0wsUUFBUTtJQUNSLE9BQU87SUFDUCxTQUFTO0lBQ1QsTUFBTTtJQUNOLEtBQUs7SUFDTCxLQUFLO0NBQ1IsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsU0FBNkIsRUFBWSxFQUFFO0lBQ3RFLE1BQU0saUJBQWlCLEdBQUksU0FBUyxFQUFFLFVBQXNDO1FBQ3hFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5CLElBQ0ksaUJBQWlCLEVBQUUsSUFBSSxLQUFLLFFBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZTtRQUNuRSxpQkFBaUIsRUFBRSxJQUFJLEtBQUssUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVO1FBQzlELGlCQUFpQixFQUFFLElBQUksS0FBSyxRQUFRLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUN0RSxDQUFDO1FBQ0MsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksaUJBQWlCLEVBQUUsSUFBSSxLQUFLLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUQsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FB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
@@ -0,0 +1,2 @@
1
+ declare const rule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"useDependencyInjection", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
+ export default rule;
@@ -0,0 +1,132 @@
1
+ import { TSESTree } from "@typescript-eslint/utils";
2
+ import { createRule } from "../../utils/createRule.js";
3
+ import { typedTokenHelpers } from "../../utils/typedTokenHelpers.js";
4
+ // Decorators that indicate a class should use dependency injection
5
+ const INJECTABLE_DECORATORS = [
6
+ "Injectable",
7
+ "Controller",
8
+ "Component", // Legacy NestJS decorator
9
+ "Service", // Common alias
10
+ ];
11
+ const rule = createRule({
12
+ name: "use-dependency-injection",
13
+ meta: {
14
+ docs: {
15
+ description: "Enforce dependency injection through constructor parameters rather than property initialization. Services and controllers should not instantiate their dependencies directly.",
16
+ },
17
+ messages: {
18
+ useDependencyInjection: "Dependencies must be provided through the class constructor, not instantiated directly. This violates the dependency injection principle.",
19
+ },
20
+ schema: [],
21
+ hasSuggestions: false,
22
+ type: "problem",
23
+ },
24
+ defaultOptions: [],
25
+ create(context) {
26
+ let isInjectableClass = false;
27
+ let currentConstructor = null;
28
+ const programImports = new Set();
29
+ const programVariables = new Set();
30
+ return {
31
+ // Track all imports at the program level
32
+ ImportDeclaration(node) {
33
+ node.specifiers.forEach((specifier) => {
34
+ if (specifier.local?.name) {
35
+ programImports.add(specifier.local.name);
36
+ }
37
+ });
38
+ },
39
+ // Track top-level variable declarations (like const bunyan = require('bunyan'))
40
+ "Program > VariableDeclaration"(node) {
41
+ node.declarations.forEach((declaration) => {
42
+ if (declaration.id &&
43
+ declaration.id.type ===
44
+ TSESTree.AST_NODE_TYPES.Identifier) {
45
+ programVariables.add(declaration.id.name);
46
+ }
47
+ });
48
+ },
49
+ // Track when we enter a class that should use DI
50
+ ClassDeclaration(node) {
51
+ isInjectableClass = typedTokenHelpers.nodeHasDecoratorsNamed(node, INJECTABLE_DECORATORS);
52
+ },
53
+ // Track when we exit the class
54
+ "ClassDeclaration:exit"() {
55
+ isInjectableClass = false;
56
+ },
57
+ // Track when we enter a constructor
58
+ MethodDefinition(node) {
59
+ if (node.key.type === TSESTree.AST_NODE_TYPES.Identifier &&
60
+ node.key.name === "constructor") {
61
+ currentConstructor = node;
62
+ }
63
+ },
64
+ // Track when we exit a constructor
65
+ "MethodDefinition:exit"(node) {
66
+ if (node.key.type === TSESTree.AST_NODE_TYPES.Identifier &&
67
+ node.key.name === "constructor") {
68
+ currentConstructor = null;
69
+ }
70
+ },
71
+ // Check property definitions with initializers
72
+ PropertyDefinition(node) {
73
+ if (!isInjectableClass || !node.value) {
74
+ return;
75
+ }
76
+ // Check for new expressions: private logger = new Logger()
77
+ if (node.value.type === TSESTree.AST_NODE_TYPES.NewExpression) {
78
+ context.report({
79
+ node: node.value,
80
+ messageId: "useDependencyInjection",
81
+ });
82
+ return;
83
+ }
84
+ // Check for require calls: private logger = require('bunyan')
85
+ const isRequireCall = node.value.type ===
86
+ TSESTree.AST_NODE_TYPES.CallExpression &&
87
+ node.value.callee.type ===
88
+ TSESTree.AST_NODE_TYPES.Identifier &&
89
+ node.value.callee.name === "require";
90
+ if (isRequireCall) {
91
+ context.report({
92
+ node: node.value,
93
+ messageId: "useDependencyInjection",
94
+ });
95
+ return;
96
+ }
97
+ // Check for identifiers from imports/variables: private logger = bunyan
98
+ const isImportedIdentifier = node.value.type === TSESTree.AST_NODE_TYPES.Identifier &&
99
+ (programImports.has(node.value.name) ||
100
+ programVariables.has(node.value.name));
101
+ if (isImportedIdentifier) {
102
+ context.report({
103
+ node: node.value,
104
+ messageId: "useDependencyInjection",
105
+ });
106
+ }
107
+ },
108
+ // Check assignments in constructor: this.logger = new Logger()
109
+ AssignmentExpression(node) {
110
+ if (!isInjectableClass ||
111
+ !currentConstructor ||
112
+ node.operator !== "=") {
113
+ return;
114
+ }
115
+ // Check if it's assigning to a class member (this.property)
116
+ const isThisMemberAssignment = node.left.type ===
117
+ TSESTree.AST_NODE_TYPES.MemberExpression &&
118
+ node.left.object.type ===
119
+ TSESTree.AST_NODE_TYPES.ThisExpression;
120
+ const isNewExpression = node.right.type === TSESTree.AST_NODE_TYPES.NewExpression;
121
+ if (isThisMemberAssignment && isNewExpression) {
122
+ context.report({
123
+ node: node.right,
124
+ messageId: "useDependencyInjection",
125
+ });
126
+ }
127
+ },
128
+ };
129
+ },
130
+ });
131
+ export default rule;
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlRGVwZW5kZW5jeUluamVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy91c2VEZXBlbmRlbmN5SW5qZWN0aW9uL3VzZURlcGVuZGVuY3lJbmplY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUVuRSxtRUFBbUU7QUFDbkUsTUFBTSxxQkFBcUIsR0FBRztJQUMxQixZQUFZO0lBQ1osWUFBWTtJQUNaLFdBQVcsRUFBRSwwQkFBMEI7SUFDdkMsU0FBUyxFQUFFLGVBQWU7Q0FDN0IsQ0FBQztBQUVGLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBK0I7SUFDbEQsSUFBSSxFQUFFLDBCQUEwQjtJQUNoQyxJQUFJLEVBQUU7UUFDRixJQUFJLEVBQUU7WUFDRixXQUFXLEVBQ1AsK0tBQStLO1NBQ3RMO1FBQ0QsUUFBUSxFQUFFO1lBQ04sc0JBQXNCLEVBQ2xCLDJJQUEySTtTQUNsSjtRQUNELE1BQU0sRUFBRSxFQUFFO1FBQ1YsY0FBYyxFQUFFLEtBQUs7UUFDckIsSUFBSSxFQUFFLFNBQVM7S0FDbEI7SUFDRCxjQUFjLEVBQUUsRUFBRTtJQUVsQixNQUFNLENBQUMsT0FBTztRQUNWLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksa0JBQWtCLEdBQXFDLElBQUksQ0FBQztRQUNoRSxNQUFNLGNBQWMsR0FBZ0IsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUN0RCxNQUFNLGdCQUFnQixHQUFnQixJQUFJLEdBQUcsRUFBVSxDQUFDO1FBRXhELE9BQU87WUFDSCx5Q0FBeUM7WUFDekMsaUJBQWlCLENBQUMsSUFBZ0M7Z0JBQzlDLElBQUksQ0FBQyxVQUFVLENB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@darraghor/eslint-plugin-nestjs-typed",
3
- "version": "6.15.0",
3
+ "version": "6.17.0",
4
4
  "description": "Eslint rules for nestjs projects",
5
5
  "scripts": {
6
6
  "clean": "rm -Rf ./dist/",