@darraghor/eslint-plugin-nestjs-typed 3.3.0 → 3.4.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.
Files changed (34) hide show
  1. package/README.md +37 -30
  2. package/dist/fixtures/file.d.ts +0 -0
  3. package/dist/fixtures/file.js +2 -0
  4. package/dist/index.d.ts +3 -3
  5. package/dist/rules/apiEnumPropertyBestPractices/apiEnumPropertyBestPractices.d.ts +1 -1
  6. package/dist/rules/apiEnumPropertyBestPractices/apiEnumPropertyBestPractices.js +2 -2
  7. package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.d.ts +1 -1
  8. package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.js +2 -2
  9. package/dist/rules/apiPropertyReturningArrayShouldSetArray/apiPropertyReturningArrayShouldSetArray.d.ts +1 -1
  10. package/dist/rules/apiPropertyReturningArrayShouldSetArray/apiPropertyReturningArrayShouldSetArray.js +7 -16
  11. package/dist/rules/index.d.ts +3 -3
  12. package/dist/rules/paramDecoratorNameMatchesRouteParam/rule.testData.d.ts +0 -6
  13. package/dist/rules/paramDecoratorNameMatchesRouteParam/rule.testData.js +3 -54
  14. package/dist/rules/validate-non-primitves-needs-decorators/validateNonPrimitiveNeedsDecorators.d.ts +6 -0
  15. package/dist/rules/validate-non-primitves-needs-decorators/validateNonPrimitiveNeedsDecorators.js +54 -0
  16. package/dist/testing/fixtureSetup.d.ts +1 -0
  17. package/dist/testing/fixtureSetup.js +13 -0
  18. package/dist/utils/typedTokenHelpers.d.ts +8 -1
  19. package/dist/utils/typedTokenHelpers.js +45 -1
  20. package/package.json +2 -2
  21. package/dist/rules/apiEnumPropertyBestPractices/apiEnumPropertyBestPractices.testData.d.ts +0 -9
  22. package/dist/rules/apiEnumPropertyBestPractices/apiEnumPropertyBestPractices.testData.js +0 -137
  23. package/dist/rules/apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.testData.d.ts +0 -5
  24. package/dist/rules/apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.testData.js +0 -48
  25. package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.testData.d.ts +0 -6
  26. package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.testData.js +0 -55
  27. package/dist/rules/apiPropertyReturningArrayShouldSetArray/apiPropertyReturningArrayShouldSetArray.testData.d.ts +0 -6
  28. package/dist/rules/apiPropertyReturningArrayShouldSetArray/apiPropertyReturningArrayShouldSetArray.testData.js +0 -51
  29. package/dist/rules/controllerDecoratedHasApiTags/controllerDecoratedHasApiTags.testData.d.ts +0 -5
  30. package/dist/rules/controllerDecoratedHasApiTags/controllerDecoratedHasApiTags.testData.js +0 -30
  31. package/dist/rules/providerInjectedShouldMatchFactory/ProviderInjectedShouldMatchFactory.testData.d.ts +0 -5
  32. package/dist/rules/providerInjectedShouldMatchFactory/ProviderInjectedShouldMatchFactory.testData.js +0 -82
  33. package/dist/rules/shouldSpecifyForbidUnknownValues/rule.testData.d.ts +0 -6
  34. package/dist/rules/shouldSpecifyForbidUnknownValues/rule.testData.js +0 -138
package/README.md CHANGED
@@ -6,6 +6,31 @@ Version 3.x supports Eslint version >=8.x and typescript eslint parser 5+
6
6
 
7
7
  There were many breaking changes between these versions.
8
8
 
9
+ ## Index of Available rules
10
+
11
+ Details for each rule are available in sections below.
12
+
13
+ Nest Modules
14
+
15
+ - provided-injected-should-match-factory-parameters
16
+ - injectable-should-be-provided
17
+
18
+ Nest Swagger
19
+
20
+ - api-property-matches-property-optionality
21
+ - controllers-should-supply-api-tags
22
+ - api-method-should-specify-api-response
23
+ - api-enum-property-best-practices
24
+ - api-property-returning-array-should-set-array
25
+
26
+ Preventing bugs
27
+
28
+ - param-decorator-name-matches-route-param
29
+
30
+ Security
31
+
32
+ - should-specify-forbid-unknown-values
33
+
9
34
  ## Why use this package?
10
35
 
11
36
  If you use NestJs (https://nestjs.com/) then these rules will help keep you usage of decorators consistent.
@@ -22,7 +47,7 @@ In particular if you're using custom providers the errors can be really tricky t
22
47
 
23
48
  These are described in the "Common Errors" section of the nest js docs.
24
49
 
25
- ### 2. Using Open Api / Swagger decorators and automatically generating a clients
50
+ ### 1. Using Open Api / Swagger decorators and automatically generating a clients
26
51
 
27
52
  When working with NestJS I generate my front end client and models using the swagger generated from the nest controllers and models.
28
53
 
@@ -30,34 +55,16 @@ I have a bunch of rules here that are mostly for strict typing with decorators f
30
55
 
31
56
  These rules are somewhat opinionated, but necessary for clean model generation if using an Open Api model generator.
32
57
 
33
- ### 2. Some security and best practices
58
+ ### 1. Helping prevent bugs
59
+
60
+ There are some tightly coupled but untyped decorators and things like that in nest that will catch you out if your not careful. There are some rules to help prevent issues that have caught me out before.
61
+
62
+ ### 1. Security
34
63
 
35
64
  There is a CVE for class-transformer when using random javascript objects. You need to be careful about configuring the ValidationPipe in NestJs. See
36
65
  https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-18413
37
66
  https://github.com/typestack/class-validator/issues/438
38
67
 
39
- ## Index of Available rules
40
-
41
- Details for each rule are available in sections below.
42
-
43
- Nest Modules
44
-
45
- - provided-injected-should-match-factory-parameters
46
- - injectable-should-be-provided
47
-
48
- Nest Swagger
49
-
50
- - api-property-matches-property-optionality
51
- - controllers-should-supply-api-tags
52
- - api-method-should-specify-api-response
53
- - api-enum-property-best-practices
54
- - api-property-returning-array-should-set-array
55
-
56
- Security and best practices
57
-
58
- - should-specify-forbid-unknown-values
59
- - param-decorator-name-matches-route-param
60
-
61
68
  ## To install
62
69
 
63
70
  ```
@@ -100,7 +107,7 @@ Note: You can easily turn off all the swagger rules if you don't use swagger by
100
107
 
101
108
  This rule will verify you have entered a `Param("name")` that has a matching url parameter in a controller or method decorator
102
109
 
103
- e.g. this passes because the uuid param is in the `Get()` method
110
+ e.g. this passes because the uuid param is in the `Get()` decorator
104
111
 
105
112
  ```ts
106
113
  @Controller("custom-bot")
@@ -118,7 +125,7 @@ export class CustomBotController {
118
125
  }
119
126
  ```
120
127
 
121
- this passes because the uuid param is in the `Controller()` method
128
+ this passes because the uuid param is in the `Controller()` decorator
122
129
 
123
130
  ```ts
124
131
  @Controller("custom-bot/:uuid")
@@ -136,7 +143,7 @@ export class CustomBotController {
136
143
  }
137
144
  ```
138
145
 
139
- this fails because you don't put the `:` in the param decorator
146
+ This fails because there is a typo in the param decorator
140
147
 
141
148
  ```ts
142
149
  @Controller("custom-bot")
@@ -146,7 +153,7 @@ export class CustomBotController {
146
153
  @Get(":uuid")
147
154
  @ApiOkResponse({type: CustomBot})
148
155
  findOne(
149
- @Param(":uuid") uuid: string,
156
+ @Param("uui") uuid: string,
150
157
  @Request() request: RequestWithUser
151
158
  ): Promise<CustomBot> {
152
159
  return this.customBotService.findOne(uuid, request.user.uuid);
@@ -154,7 +161,7 @@ export class CustomBotController {
154
161
  }
155
162
  ```
156
163
 
157
- This fails because there is a typo in the param decorator
164
+ this fails because you shouldn't put the `:` in the param decorator
158
165
 
159
166
  ```ts
160
167
  @Controller("custom-bot")
@@ -164,7 +171,7 @@ export class CustomBotController {
164
171
  @Get(":uuid")
165
172
  @ApiOkResponse({type: CustomBot})
166
173
  findOne(
167
- @Param("uui") uuid: string,
174
+ @Param(":uuid") uuid: string,
168
175
  @Request() request: RequestWithUser
169
176
  ): Promise<CustomBot> {
170
177
  return this.customBotService.findOne(uuid, request.user.uuid);
File without changes
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  declare const configuration: {
2
2
  rules: {
3
3
  "api-property-matches-property-optionality": import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"shouldUseOptionalDecorator" | "shouldUseRequiredDecorator", never[], {
4
- ClassProperty(node: import("@typescript-eslint/types/dist/ast-spec").PropertyDefinition): void;
4
+ PropertyDefinition(node: import("@typescript-eslint/types/dist/ast-spec").PropertyDefinition): void;
5
5
  }>;
6
6
  "injectable-should-be-provided": import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"injectableInModule" | "controllersInModule", never[], {
7
7
  ClassDeclaration(node: import("@typescript-eslint/types/dist/ast-spec").ClassDeclaration): void;
@@ -17,10 +17,10 @@ declare const configuration: {
17
17
  MethodDefinition(node: import("@typescript-eslint/types/dist/ast-spec").MethodDefinition): void;
18
18
  }>;
19
19
  "api-enum-property-best-practices": import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"needsEnumNameAdded" | "needsTypeRemoved" | "enumNameShouldMatchType", never[], {
20
- ClassProperty(node: import("@typescript-eslint/types/dist/ast-spec").Node): void;
20
+ PropertyDefinition(node: import("@typescript-eslint/types/dist/ast-spec").Node): void;
21
21
  }>;
22
22
  "api-property-returning-array-should-set-array": import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"shouldSetArrayPropertyTrue" | "shouldSetArrayPropertyFalse", never[], {
23
- ClassProperty(node: import("@typescript-eslint/types/dist/ast-spec").PropertyDefinition): void;
23
+ PropertyDefinition: (node: import("@typescript-eslint/types/dist/ast-spec").Node) => void;
24
24
  }>;
25
25
  "should-specify-forbid-unknown-values": import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"shouldSpecifyForbidUnknownValues", never[], {
26
26
  NewExpression(node: import("@typescript-eslint/types/dist/ast-spec").Node): void;
@@ -3,6 +3,6 @@ import { EnumTestResultModel } from "./enumTestResultModel";
3
3
  export declare const hasEnumSpecifiedCorrectly: (node: TSESTree.Node, isEnumType: boolean) => EnumTestResultModel;
4
4
  export declare const needsEnumNameMatchingEnumType: (enumNameProperty: TSESTree.Property, enumProperty: TSESTree.Property) => boolean;
5
5
  declare const rule: import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"needsEnumNameAdded" | "needsTypeRemoved" | "enumNameShouldMatchType", never[], {
6
- ClassProperty(node: TSESTree.Node): void;
6
+ PropertyDefinition(node: TSESTree.Node): void;
7
7
  }>;
8
8
  export default rule;
@@ -105,7 +105,7 @@ const rule = (0, createRule_1.createRule)({
105
105
  const typeChecker = parserServices.program.getTypeChecker();
106
106
  return {
107
107
  // eslint-disable-next-line @typescript-eslint/naming-convention
108
- ClassProperty(node) {
108
+ PropertyDefinition(node) {
109
109
  const mappedNode = parserServices.esTreeNodeToTSNodeMap.get(node);
110
110
  const objectType = typeChecker.getTypeAtLocation(mappedNode);
111
111
  const isEnumType = tsutils.isTypeFlagSet(objectType, typescript_1.TypeFlags.EnumLike);
@@ -133,4 +133,4 @@ const rule = (0, createRule_1.createRule)({
133
133
  },
134
134
  });
135
135
  exports.default = rule;
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpRW51bVByb3BlcnR5QmVzdFByYWN0aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlFbnVtUHJvcGVydHlCZXN0UHJhY3RpY2VzL2FwaUVudW1Qcm9wZXJ0eUJlc3RQcmFjdGljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBGQUEwRjtBQUUxRix1REFBa0Q7QUFDbEQscUVBQWdFO0FBQ2hFLCtEQUEwRDtBQUMxRCxnREFBZ0Q7QUFDaEQsMEJBQTBCO0FBQzFCLGlEQUFtQztBQUNuQywyQ0FBcUM7QUFFckMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLHlDQUFtQixDQUFDO0lBQ3BELGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGtCQUFrQixFQUFFLEtBQUs7SUFDekIsNEJBQTRCLEVBQUUsS0FBSztJQUNuQyxnQkFBZ0IsRUFBRSxLQUFLO0NBQzFCLENBQUMsQ0FBQztBQUVJLE1BQU0seUJBQXlCLEdBQUcsQ0FDckMsSUFBbUIsRUFDbkIsVUFBbUIsRUFDQSxFQUFFO0lBQ3JCLGtCQUFrQjtJQUNsQixJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ2IsT0FBTyx1QkFBdUIsQ0FBQztLQUNsQztJQUVELDJDQUEyQztJQUMzQyxNQUFNLFVBQVUsR0FBRyxxQ0FBaUIsQ0FBQyxrQkFBa0IsQ0FDbkQsSUFBbUMsRUFDbkMsQ0FBQyxxQkFBcUIsRUFBRSxhQUFhLENBQUMsQ0FDekMsQ0FBQztJQUVGLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDekIsT0FBTyx1QkFBdUIsQ0FBQztLQUNsQztJQUVELHNHQUFzRztJQUN0RyxNQUFNLGFBQWEsR0FBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBc0M7U0FDdEUsU0FBUyxDQUFDLENBQUMsQ0FBOEIsQ0FBQztJQUMvQyxJQUFJLENBQUMsYUFBYSxFQUFFO1FBQ2hCLE9BQU8sSUFBSSx5Q0FBbUIsQ0FBQztZQUMzQixjQUFjLEVBQUUsSUFBSTtZQUNwQixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLDRCQUE0QixFQUFFLEtBQUs7WUFDbkMsZ0JBQWdCLEVBQUUsS0FBSztTQUMxQixDQUFDLENBQUM7S0FDTjtJQUVELE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUM5QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0EsQ0FBdUIsQ0FBQyxHQUEyQixDQUFDLElBQUk7UUFDMUQsTUFBTSxDQUNiLENBQUM7SUFFRiw0RkFBNEY7SUFDNUYsTUFBTSxlQUFlLEdBQ2pCLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN6QixDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0EsQ0FBdUIsQ0FBQyxHQUEyQixDQUFDLElBQUk7UUFDMUQsTUFBTSxDQUNiLEtBQUssU0FBUyxDQUFDO0lBRXBCLGdHQUFnRztJQUNoRyxNQUFNLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNsRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0EsQ0FBdUIsQ0FBQyxHQUEyQixDQUFDLElBQUk7UUFDMUQsVUFBVSxDQUNqQixDQUFDO0lBQ0YsT0FBTyxJQUFJLHlDQUFtQixDQUFDO1FBQzNCLGNBQWMsRUFBRSxZQUFZLEtBQUssU0FBUztRQUMxQyxrQkFBa0IsRUFBRSxnQkFBZ0IsS0FBSyxTQUFTO1FBQ2xELDRCQUE0QixFQUFFLElBQUEscUNBQTZCLEVBQ3ZELGdCQUFxQyxFQUNyQyxZQUFpQyxDQUNwQztRQUNELGdCQUFnQixFQUFFLGVBQWU7S0FDcEMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDO0FBNURXLFFBQUEseUJBQXlCLDZCQTREcEM7QUFFSyxNQUFNLDZCQUE2QixHQUFHLENBQ3pDLGdCQUFtQyxFQUNuQyxZQUErQixFQUN4QixFQUFFO0lBQ1QsbUVBQW1FO0lBQ25FLElBQUksZ0JBQWdCLEtBQUssU0FBUyxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUU7UUFDOUQsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxNQUFNLDBCQUEwQixHQUMzQixnQkFBZ0IsQ0FBQyxLQUEwQixDQUFDLEtBQUs7UUFDakQsWUFBWSxDQUFDLEtBQTZCLENBQUMsSUFBSSxDQUFDO0lBRXJELE9BQU8sQ0FBQywwQkFBMEIsQ0FBQztBQUN2QyxDQUFDLENBQUM7QUFkVyxRQUFBLDZCQUE2QixpQ0FjeEM7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQUM7SUFDcEIsSUFBSSxFQUFFLGtDQUFrQztJQUN4QyxJQUFJLEVBQUU7UUFDRixJQUFJLEVBQUU7WUFDRixXQUFXLEVBQ1AsMkRBQTJEO1lBQy9ELFdBQVcsRUFBRSxLQUFLO1lBQ2xCLG9CQUFvQixFQUFFLEtBQUs7U0FDOUI7UUFDRCxRQUFRLEVBQUU7WUFDTixrQkFBa0IsRUFBRSw4RkFBOEY7WUFDbEgsZ0JBQWdCLEVBQUUseURBQXlEO1lBQzNFLHVCQUF1QixFQUFFLGtEQUFrRDtTQUM5RTtRQUNELE1BQU0sRUFBRSxFQUFFO1FBQ1YsY0FBYyxFQUFFLEtBQUs7UUFDckIsSUFBSSxFQUFFLFlBQVk7S0FDckI7SUFDRCxjQUFjLEVBQUUsRUFBRTtJQUVsQixNQUFNLENBQUMsT0FBTztRQUNWLHlDQUF5QztRQUN6QyxNQUFNLGNBQWMsR0FBRyxJQUFBLGdDQUFpQixFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFNUQsT0FBTztZQUNILGdFQUFnRTtZQUNoRSxhQUFhLENBQUMsSUFBbUI7Z0JBQzdCLE1BQU0sVUFBVSxHQUNaLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25ELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDN0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FDcEMsVUFBVSxFQUNWLHNCQUFTLENBQUMsUUFBUSxDQUNyQixDQUFDO2dCQUVGLE1BQU0sTUFBTSxHQUFHLElBQUEsaUNBQXlCLEVBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUUzRCxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtvQkFDM0IsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsb0JBQW9CO3FCQUNsQyxDQUFDLENBQUM7aUJBQ047Z0JBQ0QsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ3pCLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ1gsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLGtCQUFrQjtxQkFDaEMsQ0FBQyxDQUFDO2lCQUNOO2dCQUNELElBQUksTUFBTSxDQUFDLDRCQUE0QixFQUFFO29CQUNyQyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNYLElBQUksRUFBRSxJQUFJO3dCQUNWLFNBQVMsRUFBRSx5QkFBeUI7cUJBQ3ZDLENBQUMsQ0FBQztpQkFDTjtZQUNMLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQUVILGtCQUFlLElBQUksQ0FBQyJ9
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpRW51bVByb3BlcnR5QmVzdFByYWN0aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlFbnVtUHJvcGVydHlCZXN0UHJhY3RpY2VzL2FwaUVudW1Qcm9wZXJ0eUJlc3RQcmFjdGljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBGQUEwRjtBQUUxRix1REFBa0Q7QUFDbEQscUVBQWdFO0FBQ2hFLCtEQUEwRDtBQUMxRCxnREFBZ0Q7QUFDaEQsMEJBQTBCO0FBQzFCLGlEQUFtQztBQUNuQywyQ0FBcUM7QUFFckMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLHlDQUFtQixDQUFDO0lBQ3BELGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGtCQUFrQixFQUFFLEtBQUs7SUFDekIsNEJBQTRCLEVBQUUsS0FBSztJQUNuQyxnQkFBZ0IsRUFBRSxLQUFLO0NBQzFCLENBQUMsQ0FBQztBQUVJLE1BQU0seUJBQXlCLEdBQUcsQ0FDckMsSUFBbUIsRUFDbkIsVUFBbUIsRUFDQSxFQUFFO0lBQ3JCLGtCQUFrQjtJQUNsQixJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ2IsT0FBTyx1QkFBdUIsQ0FBQztLQUNsQztJQUVELDJDQUEyQztJQUMzQyxNQUFNLFVBQVUsR0FBRyxxQ0FBaUIsQ0FBQyxrQkFBa0IsQ0FDbkQsSUFBbUMsRUFDbkMsQ0FBQyxxQkFBcUIsRUFBRSxhQUFhLENBQUMsQ0FDekMsQ0FBQztJQUVGLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDekIsT0FBTyx1QkFBdUIsQ0FBQztLQUNsQztJQUVELHNHQUFzRztJQUN0RyxNQUFNLGFBQWEsR0FBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBc0M7U0FDdEUsU0FBUyxDQUFDLENBQUMsQ0FBOEIsQ0FBQztJQUMvQyxJQUFJLENBQUMsYUFBYSxFQUFFO1FBQ2hCLE9BQU8sSUFBSSx5Q0FB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
@@ -2,6 +2,6 @@ import { TSESTree } from "@typescript-eslint/types";
2
2
  export declare const shouldUseRequiredDecorator: (node: TSESTree.PropertyDefinition) => boolean;
3
3
  export declare const shouldUseOptionalDecorator: (node: TSESTree.PropertyDefinition) => boolean;
4
4
  declare const rule: import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"shouldUseOptionalDecorator" | "shouldUseRequiredDecorator", never[], {
5
- ClassProperty(node: TSESTree.PropertyDefinition): void;
5
+ PropertyDefinition(node: TSESTree.PropertyDefinition): void;
6
6
  }>;
7
7
  export default rule;
@@ -35,7 +35,7 @@ const rule = (0, createRule_1.createRule)({
35
35
  create(context) {
36
36
  return {
37
37
  // eslint-disable-next-line @typescript-eslint/naming-convention
38
- ClassProperty(node) {
38
+ PropertyDefinition(node) {
39
39
  if ((0, exports.shouldUseOptionalDecorator)(node)) {
40
40
  context.report({
41
41
  node: node,
@@ -53,4 +53,4 @@ const rule = (0, createRule_1.createRule)({
53
53
  },
54
54
  });
55
55
  exports.default = rule;
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUHJvcGVydHlNYXRjaGVzUHJvcGVydHlPcHRpb25hbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlQcm9wZXJ0eU1hdGNoZXNQcm9wZXJ0eU9wdGlvbmFsaXR5L2FwaVByb3BlcnR5TWF0Y2hlc1Byb3BlcnR5T3B0aW9uYWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsdURBQWtEO0FBQ2xELHFFQUFnRTtBQUV6RCxNQUFNLDBCQUEwQixHQUFHLENBQ3RDLElBQWlDLEVBQzFCLEVBQUU7SUFDVCxNQUFNLG9CQUFvQixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNqRSxJQUFJLEVBQ0osQ0FBQyxxQkFBcUIsQ0FBQyxDQUMxQixDQUFDO0lBRUYsTUFBTSx1QkFBdUIsR0FDekIscUNBQWlCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFcEQsT0FBTyxvQkFBb0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDO0FBQzVELENBQUMsQ0FBQztBQVpXLFFBQUEsMEJBQTBCLDhCQVlyQztBQUVLLE1BQU0sMEJBQTBCLEdBQUcsQ0FDdEMsSUFBaUMsRUFDMUIsRUFBRTtJQUNULE1BQU0sb0JBQW9CLEdBQUcscUNBQWlCLENBQUMsc0JBQXNCLENBQ2pFLElBQUksRUFDSixDQUFDLGFBQWEsQ0FBQyxDQUNsQixDQUFDO0lBRUYsTUFBTSx1QkFBdUIsR0FDekIscUNBQWlCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFcEQsT0FBTyxvQkFBb0IsSUFBSSx1QkFBdUIsQ0FBQztBQUMzRCxDQUFDLENBQUM7QUFaVyxRQUFBLDBCQUEwQiw4QkFZckM7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQUM7SUFDcEIsSUFBSSxFQUFFLDJDQUEyQztJQUNqRCxJQUFJLEVBQUU7UUFDRixJQUFJLEVBQUU7WUFDRixXQUFXLEVBQ1Asd0RBQXdEO1lBQzVELFdBQVcsRUFBRSxLQUFLO1lBQ2xCLG9CQUFvQixFQUFFLEtBQUs7U0FDOUI7UUFDRCxRQUFRLEVBQUU7WUFDTiwwQkFBMEIsRUFBRSx1RUFBdUU7WUFDbkcsMEJBQTBCLEVBQUUsK0RBQStEO1NBQzlGO1FBQ0QsTUFBTSxFQUFFLEVBQUU7UUFDVixjQUFjLEVBQUUsS0FBSztRQUNyQixJQUFJLEVBQUUsWUFBWTtLQUNyQjtJQUNELGNBQWMsRUFBRSxFQUFFO0lBRWxCLE1BQU0sQ0FBQyxPQUFPO1FBQ1YsT0FBTztZQUNILGdFQUFnRTtZQUNoRSxhQUFhLENBQUMsSUFBaUM7Z0JBQzNDLElBQUksSUFBQSxrQ0FBMEIsRUFBQyxJQUFJLENBQUMsRUFBRTtvQkFDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsNEJBQTRCO3FCQUMxQyxDQUFDLENBQUM7aUJBQ047Z0JBQ0QsSUFBSSxJQUFBLGtDQUEwQixFQUFDLElBQUksQ0FBQyxFQUFFO29CQUNsQyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNYLElBQUksRUFBRSxJQUFJO3dCQUNWLFNBQVMsRUFBRSw0QkFBNEI7cUJBQzFDLENBQUMsQ0FBQztpQkFDTjtZQUNMLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQUVILGtCQUFlLElBQUksQ0FBQyJ9
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUHJvcGVydHlNYXRjaGVzUHJvcGVydHlPcHRpb25hbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlQcm9wZXJ0eU1hdGNoZXNQcm9wZXJ0eU9wdGlvbmFsaXR5L2FwaVByb3BlcnR5TWF0Y2hlc1Byb3BlcnR5T3B0aW9uYWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsdURBQWtEO0FBQ2xELHFFQUFnRTtBQUV6RCxNQUFNLDBCQUEwQixHQUFHLENBQ3RDLElBQWlDLEVBQzFCLEVBQUU7SUFDVCxNQUFNLG9CQUFvQixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNqRSxJQUFJLEVBQ0osQ0FBQyxxQkFBcUIsQ0FBQyxDQUMxQixDQUFDO0lBRUYsTUFBTSx1QkFBdUIsR0FDekIscUNBQWlCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFcEQsT0FBTyxvQkFBb0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDO0FBQzVELENBQUMsQ0FBQztBQVpXLFFBQUEsMEJBQTBCLDhCQVlyQztBQUVLLE1BQU0sMEJBQTBCLEdBQUcsQ0FDdEMsSUFBaUMsRUFDMUIsRUFBRTtJQUNULE1BQU0sb0JBQW9CLEdBQUcscUNBQWlCLENBQUMsc0JBQXNCLENBQ2pFLElBQUksRUFDSixDQUFDLGFBQWEsQ0FBQyxDQUNsQixDQUFDO0lBRUYsTUFBTSx1QkFBdUIsR0FDekIscUNBQWlCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFcEQsT0FBTyxvQkFBb0IsSUFBSSx1QkFBdUIsQ0FBQztBQUMzRCxDQUFDLENBQUM7QUFaVyxRQUFBLDBCQUEwQiw4QkFZckM7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQUM7SUFDcEIsSUFBSSxFQUFFLDJDQUEyQztJQUNqRCxJQUFJLEVBQUU7UUFDRixJQUFJLEVBQUU7WUFDRixXQUFXLEVBQ1Asd0RBQXdEO1lBQzVELFdBQVcsRUFBRSxLQUFLO1lBQ2xCLG9CQUFvQixFQUFFLEtBQUs7U0FDOUI7UUFDRCxRQUFRLEVBQUU7WUFDTiwwQkFBMEIsRUFBRSx1RUFBdUU7WUFDbkcsMEJBQTBCLEVBQUUsK0RBQStEO1NBQzlGO1FBQ0QsTUFBTSxFQUFFLEVBQUU7UUFDVixjQUFjLEVBQUUsS0FBSztRQUNyQixJQUFJLEVBQUUsWUFBWTtLQUNyQjtJQUNELGNBQWMsRUFBRSxFQUFFO0lBRWxCLE1BQU0sQ0FBQyxPQUFPO1FBQ1YsT0FBTztZQUNILGdFQUFnRTtZQUNoRSxrQkFBa0IsQ0FBQyxJQUFpQztnQkFDaEQsSUFBSSxJQUFBLGtDQUEwQixFQUFDLElBQUksQ0FBQyxFQUFFO29CQUNsQyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNYLElBQUksRUFBRSxJQUFJO3dCQUNWLFNBQVMsRUFBRSw0QkFBNEI7cUJBQzFDLENBQUMsQ0FBQztpQkFDTjtnQkFDRCxJQUFJLElBQUEsa0NBQTBCLEVBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2xDLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ1gsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLDRCQUE0QjtxQkFDMUMsQ0FBQyxDQUFDO2lCQUNOO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FBRUgsa0JBQWUsSUFBSSxDQUFDIn0=
@@ -2,6 +2,6 @@ import { TSESTree } from "@typescript-eslint/types";
2
2
  import ArraySetResultModel from "./arraySetResultModel";
3
3
  export declare const shouldSetArrayProperty: (node: TSESTree.PropertyDefinition) => ArraySetResultModel;
4
4
  declare const rule: import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"shouldSetArrayPropertyTrue" | "shouldSetArrayPropertyFalse", never[], {
5
- ClassProperty(node: TSESTree.PropertyDefinition): void;
5
+ PropertyDefinition: (node: TSESTree.Node) => void;
6
6
  }>;
7
7
  export default rule;
@@ -17,24 +17,15 @@ const shouldSetArrayProperty = (node) => {
17
17
  if (decorators.length === 0) {
18
18
  return new arraySetResultModel_1.default(false, false);
19
19
  }
20
- const firstArgument = decorators[0].expression
21
- .arguments[0];
22
- let isArraySet = false;
23
- if (firstArgument !== undefined) {
24
- const isArrayProperty = firstArgument.properties.find((p) => p.key.name ===
25
- "isArray");
26
- isArraySet =
27
- isArrayProperty !== undefined &&
28
- isArrayProperty.value
29
- .value === true;
30
- }
20
+ // There should only be one of these apiproperty decorators so we just grab the parameter to decorator at index 0
21
+ const firstArgumentToDecorator = decorators[0].expression.arguments[0];
22
+ const hasIsArraySetInOptions = typedTokenHelpers_1.typedTokenHelpers.getPropertyValueEqualsExpected(firstArgumentToDecorator, "isArray", true);
31
23
  // handle string[] or Array<string>
32
24
  const isArrayType = ((_b = ((_a = node.typeAnnotation) === null || _a === void 0 ? void 0 : _a.typeAnnotation)
33
25
  .typeName) === null || _b === void 0 ? void 0 : _b.name) === "Array";
34
26
  const isTypescriptArrayType = ((_c = node.typeAnnotation) === null || _c === void 0 ? void 0 : _c.typeAnnotation.type) === types_1.AST_NODE_TYPES.TSArrayType;
35
- const shouldArrayBeSet = isArrayType || isTypescriptArrayType;
36
- // this is verbose but makes it easier to read imho
37
- return new arraySetResultModel_1.default(shouldArrayBeSet && isArraySet === false, shouldArrayBeSet === false && isArraySet);
27
+ const isAnArrayLikeType = isArrayType || isTypescriptArrayType;
28
+ return new arraySetResultModel_1.default(isAnArrayLikeType && !hasIsArraySetInOptions, !isAnArrayLikeType && hasIsArraySetInOptions);
38
29
  };
39
30
  exports.shouldSetArrayProperty = shouldSetArrayProperty;
40
31
  const rule = (0, createRule_1.createRule)({
@@ -57,7 +48,7 @@ const rule = (0, createRule_1.createRule)({
57
48
  create(context) {
58
49
  return {
59
50
  // eslint-disable-next-line @typescript-eslint/naming-convention
60
- ClassProperty(node) {
51
+ PropertyDefinition: (node) => {
61
52
  const shouldSetArrayResults = (0, exports.shouldSetArrayProperty)(node);
62
53
  if (shouldSetArrayResults.isArrayShouldBeSetFalse) {
63
54
  context.report({
@@ -76,4 +67,4 @@ const rule = (0, createRule_1.createRule)({
76
67
  },
77
68
  });
78
69
  exports.default = rule;
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUHJvcGVydHlSZXR1cm5pbmdBcnJheVNob3VsZFNldEFycmF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL2FwaVByb3BlcnR5UmV0dXJuaW5nQXJyYXlTaG91bGRTZXRBcnJheS9hcGlQcm9wZXJ0eVJldHVybmluZ0FycmF5U2hvdWxkU2V0QXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQWtFO0FBQ2xFLHVEQUFrRDtBQUNsRCxxRUFBZ0U7QUFDaEUsZ0ZBQXdEO0FBRWpELE1BQU0sc0JBQXNCLEdBQUcsQ0FDbEMsSUFBaUMsRUFDZCxFQUFFOztJQUNyQixNQUFNLFVBQVUsR0FBRyxxQ0FBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7UUFDMUQscUJBQXFCO1FBQ3JCLGFBQWE7S0FDaEIsQ0FBQyxDQUFDO0lBRUgsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN6QixPQUFPLElBQUksNkJBQW1CLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ2hEO0lBRUQsTUFBTSxhQUFhLEdBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQXNDO1NBQ3RFLFNBQVMsQ0FBQyxDQUFDLENBQThCLENBQUM7SUFDL0MsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRTtRQUM3QixNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDakQsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNBLENBQXVCLENBQUMsR0FBMkIsQ0FBQyxJQUFJO1lBQzFELFNBQVMsQ0FDaEIsQ0FBQztRQUVGLFVBQVU7WUFDTixlQUFlLEtBQUssU0FBUztnQkFDM0IsZUFBcUMsQ0FBQyxLQUEwQjtxQkFDN0QsS0FBSyxLQUFLLElBQUksQ0FBQztLQUMzQjtJQUNELG1DQUFtQztJQUNuQyxNQUFNLFdBQVcsR0FDYixDQUFBLE1BQ0ksQ0FBQyxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLGNBQTJDLENBQUE7U0FDNUQsUUFDUiwwQ0FBRSxJQUFJLE1BQUssT0FBTyxDQUFDO0lBQ3hCLE1BQU0scUJBQXFCLEdBQ3ZCLENBQUEsTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxjQUFjLENBQUMsSUFBSSxNQUFLLHNCQUFjLENBQUMsV0FBVyxDQUFDO0lBQzVFLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxJQUFJLHFCQUFxQixDQUFDO0lBRTlELG1EQUFtRDtJQUNuRCxPQUFPLElBQUksNkJBQW1CLENBQzFCLGdCQUFnQixJQUFJLFVBQVUsS0FBSyxLQUFLLEVBQ3hDLGdCQUFnQixLQUFLLEtBQUssSUFBSSxVQUFVLENBQzNDLENBQUM7QUFDTixDQUFDLENBQUM7QUExQ1csUUFBQSxzQkFBc0IsMEJBMENqQztBQUVGLE1BQU0sSUFBSSxHQUFHLElBQUEsdUJBQVUsRUFBQztJQUNwQixJQUFJLEVBQUUsK0NBQStDO0lBQ3JELElBQUksRUFBRTtRQUNGLElBQUksRUFBRTtZQUNGLFdBQVcsRUFBRSxzQ0FBc0M7WUFDbkQsV0FBVyxFQUFFLEtBQUs7WUFDbEIsb0JBQW9CLEVBQUUsS0FBSztTQUM5QjtRQUNELFFBQVEsRUFBRTtZQUNOLDBCQUEwQixFQUFFLGdFQUFnRTtZQUM1RiwyQkFBMkIsRUFBRSx3RUFBd0U7U0FDeEc7UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLElBQUksRUFBRSxZQUFZO0tBQ3JCO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFFbEIsTUFBTSxDQUFDLE9BQU87UUFDVixPQUFPO1lBQ0gsZ0VBQWdFO1lBQ2hFLGFBQWEsQ0FBQyxJQUFpQztnQkFDM0MsTUFBTSxxQkFBcUIsR0FBRyxJQUFBLDhCQUFzQixFQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO29CQUMvQyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNYLElBQUksRUFBRSxJQUFJO3dCQUNWLFNBQVMsRUFBRSw2QkFBNkI7cUJBQzNDLENBQUMsQ0FBQztpQkFDTjtnQkFDRCxJQUFJLHFCQUFxQixDQUFDLHNCQUFzQixFQUFFO29CQUM5QyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNYLElBQUksRUFBRSxJQUFJO3dCQUNWLFNBQVMsRUFBRSw0QkFBNEI7cUJBQzFDLENBQUMsQ0FBQztpQkFDTjtZQUNMLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQUVILGtCQUFlLElBQUksQ0FBQyJ9
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUHJvcGVydHlSZXR1cm5pbmdBcnJheVNob3VsZFNldEFycmF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL2FwaVByb3BlcnR5UmV0dXJuaW5nQXJyYXlTaG91bGRTZXRBcnJheS9hcGlQcm9wZXJ0eVJldHVybmluZ0FycmF5U2hvdWxkU2V0QXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQWtFO0FBQ2xFLHVEQUFrRDtBQUNsRCxxRUFBZ0U7QUFDaEUsZ0ZBQXdEO0FBRWpELE1BQU0sc0JBQXNCLEdBQUcsQ0FDbEMsSUFBaUMsRUFDZCxFQUFFOztJQUNyQixNQUFNLFVBQVUsR0FBRyxxQ0FBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7UUFDMUQscUJBQXFCO1FBQ3JCLGFBQWE7S0FDaEIsQ0FBQyxDQUFDO0lBRUgsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN6QixPQUFPLElBQUksNkJBQW1CLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ2hEO0lBRUQsaUhBQWlIO0lBQ2pILE1BQU0sd0JBQXdCLEdBQzFCLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUNqQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQThCLENBQUM7SUFFNUMsTUFBTSxzQkFBc0IsR0FDeEIscUNBQWlCLENBQUMsOEJBQThCLENBQzVDLHdCQUF3QixFQUN4QixTQUFTLEVBQ1QsSUFBSSxDQUNQLENBQUM7SUFDTixtQ0FBbUM7SUFDbkMsTUFBTSxXQUFXLEdBQ2IsQ0FBQSxNQUNJLENBQUMsTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxjQUEyQyxDQUFBO1NBQzVELFFBQ1IsMENBQUUsSUFBSSxNQUFLLE9BQU8sQ0FBQztJQUN4QixNQUFNLHFCQUFxQixHQUN2QixDQUFBLE1BQUEsSUFBSSxDQUFDLGNBQWMsMENBQUUsY0FBYyxDQUFDLElBQUksTUFBSyxzQkFBYyxDQUFDLFdBQVcsQ0FBQztJQUM1RSxNQUFNLGlCQUFpQixHQUFHLFdBQVcsSUFBSSxxQkFBcUIsQ0FBQztJQUUvRCxPQUFPLElBQUksNkJBQW1CLENBQzFCLGlCQUFpQixJQUFJLENBQUMsc0JBQXNCLEVBQzVDLENBQUMsaUJBQWlCLElBQUksc0JBQXNCLENBQy9DLENBQUM7QUFDTixDQUFDLENBQUM7QUFyQ1csUUFBQSxzQkFBc0IsMEJBcUNqQztBQUVGLE1BQU0sSUFBSSxHQUFHLElBQUEsdUJBQVUsRUFBQztJQUNwQixJQUFJLEVBQUUsK0NBQStDO0lBQ3JELElBQUksRUFBRTtRQUNGLElBQUksRUFBRTtZQUNGLFdBQVcsRUFBRSxzQ0FBc0M7WUFDbkQsV0FBVyxFQUFFLEtBQUs7WUFDbEIsb0JBQW9CLEVBQUUsS0FBSztTQUM5QjtRQUNELFFBQVEsRUFBRTtZQUNOLDBCQUEwQixFQUFFLGdFQUFnRTtZQUM1RiwyQkFBMkIsRUFBRSx3RUFBd0U7U0FDeEc7UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLElBQUksRUFBRSxZQUFZO0tBQ3JCO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFFbEIsTUFBTSxDQUFDLE9BQU87UUFDVixPQUFPO1lBQ0gsZ0VBQWdFO1lBQ2hFLGtCQUFrQixFQUFFLENBQUMsSUFBbUIsRUFBRSxFQUFFO2dCQUN4QyxNQUFNLHFCQUFxQixHQUFHLElBQUEsOEJBQXNCLEVBQ2hELElBQW1DLENBQ3RDLENBQUM7Z0JBRUYsSUFBSSxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRTtvQkFDL0MsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsNkJBQTZCO3FCQUMzQyxDQUFDLENBQUM7aUJBQ047Z0JBQ0QsSUFBSSxxQkFBcUIsQ0FBQyxzQkFBc0IsRUFBRTtvQkFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsNEJBQTRCO3FCQUMxQyxDQUFDLENBQUM7aUJBQ047WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxrQkFBZSxJQUFJLENBQUMifQ==
@@ -1,6 +1,6 @@
1
1
  declare const allRules: {
2
2
  "api-property-matches-property-optionality": import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"shouldUseOptionalDecorator" | "shouldUseRequiredDecorator", never[], {
3
- ClassProperty(node: import("@typescript-eslint/types/dist/ast-spec").PropertyDefinition): void;
3
+ PropertyDefinition(node: import("@typescript-eslint/types/dist/ast-spec").PropertyDefinition): void;
4
4
  }>;
5
5
  "injectable-should-be-provided": import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"injectableInModule" | "controllersInModule", never[], {
6
6
  ClassDeclaration(node: import("@typescript-eslint/types/dist/ast-spec").ClassDeclaration): void;
@@ -16,10 +16,10 @@ declare const allRules: {
16
16
  MethodDefinition(node: import("@typescript-eslint/types/dist/ast-spec").MethodDefinition): void;
17
17
  }>;
18
18
  "api-enum-property-best-practices": import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"needsEnumNameAdded" | "needsTypeRemoved" | "enumNameShouldMatchType", never[], {
19
- ClassProperty(node: import("@typescript-eslint/types/dist/ast-spec").Node): void;
19
+ PropertyDefinition(node: import("@typescript-eslint/types/dist/ast-spec").Node): void;
20
20
  }>;
21
21
  "api-property-returning-array-should-set-array": import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"shouldSetArrayPropertyTrue" | "shouldSetArrayPropertyFalse", never[], {
22
- ClassProperty(node: import("@typescript-eslint/types/dist/ast-spec").PropertyDefinition): void;
22
+ PropertyDefinition: (node: import("@typescript-eslint/types/dist/ast-spec").Node) => void;
23
23
  }>;
24
24
  "should-specify-forbid-unknown-values": import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"shouldSpecifyForbidUnknownValues", never[], {
25
25
  NewExpression(node: import("@typescript-eslint/types/dist/ast-spec").Node): void;
@@ -1,9 +1,3 @@
1
- export declare const parameterNameCheckTestCases: {
2
- moduleCode: string;
3
- isParamNameNotMatchedInPathTriggered: boolean;
4
- isParamNameIncludesColonTriggered: boolean;
5
- message: string;
6
- }[];
7
1
  export declare const pathPartTestCases: {
8
2
  moduleCode: string;
9
3
  paths: string[];
@@ -1,58 +1,7 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.responseParsingTestCases = exports.pathPartTestCases = exports.parameterNameCheckTestCases = void 0;
4
2
  /* eslint-disable unicorn/filename-case */
5
- exports.parameterNameCheckTestCases = [
6
- {
7
- moduleCode: `
8
- @ApiTags("Custom Bot")
9
- @ApiBearerAuth()
10
- @UseGuards(DefaultAuthGuard)
11
- @Controller("custom-bot")
12
- export class CustomBotController {
13
- constructor(
14
- ) {}
15
-
16
- @Get(":uuid")
17
- @ApiOkResponse({ type: CustomBot })
18
- findOne(
19
- @Param() uuid: string,
20
- @Request() request: RequestWithUser
21
- ): Promise<CustomBot> {
22
- return this.customBotService.findOne(uuid, request.user.uuid);
23
- }
24
-
25
- }
26
- `,
27
- isParamNameNotMatchedInPathTriggered: false,
28
- isParamNameIncludesColonTriggered: false,
29
- message: "no param name provided - can't check anything",
30
- },
31
- {
32
- moduleCode: `
33
- @ApiTags("Custom Bot")
34
- @ApiBearerAuth()
35
- @UseGuards(DefaultAuthGuard)
36
- @Controller("custom-bot/:uuid/my-controller")
37
- export class CustomBotController {
38
- constructor(
39
- ) {}
40
-
41
- @Get()
42
- @ApiOkResponse({ type: CustomBot })
43
- findOne(
44
- @Param(":uuid") uuid: string,
45
- @Request() request: RequestWithUser
46
- ): Promise<CustomBot> {
47
- return this.customBotService.findOne(uuid, request.user.uuid);
48
- }
49
- }
50
- `,
51
- isParamNameNotMatchedInPathTriggered: false,
52
- isParamNameIncludesColonTriggered: true,
53
- message: "This param name includes a colon - probably unintentional",
54
- },
55
- ];
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.responseParsingTestCases = exports.pathPartTestCases = void 0;
56
5
  exports.pathPartTestCases = [
57
6
  {
58
7
  moduleCode: `
@@ -173,4 +122,4 @@ exports.responseParsingTestCases = [
173
122
  shouldResult: false,
174
123
  },
175
124
  ];
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS50ZXN0RGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9wYXJhbURlY29yYXRvck5hbWVNYXRjaGVzUm91dGVQYXJhbS9ydWxlLnRlc3REYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDBDQUEwQztBQUM3QixRQUFBLDJCQUEyQixHQUFHO0lBQ3ZDO1FBQ0ksVUFBVSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBbUJYO1FBQ0Qsb0NBQW9DLEVBQUUsS0FBSztRQUMzQyxpQ0FBaUMsRUFBRSxLQUFLO1FBQ3hDLE9BQU8sRUFBRSwrQ0FBK0M7S0FDM0Q7SUFDRDtRQUNJLFVBQVUsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBa0JYO1FBQ0Qsb0NBQW9DLEVBQUUsS0FBSztRQUMzQyxpQ0FBaUMsRUFBRSxJQUFJO1FBQ3ZDLE9BQU8sRUFBRSwyREFBMkQ7S0FDdkU7Q0FDSixDQUFDO0FBRVcsUUFBQSxpQkFBaUIsR0FBRztJQUM3QjtRQUNJLFVBQVUsRUFBRTs7O1NBR1g7UUFDRCxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDbEIsT0FBTyxFQUFFLDhCQUE4QjtLQUMxQztJQUNEO1FBQ0ksVUFBVSxFQUFFOzs7U0FHWDtRQUNELEtBQUssRUFBRSxDQUFDLGtDQUFrQyxDQUFDO1FBQzNDLE9BQU8sRUFBRSxrQ0FBa0M7S0FDOUM7SUFDRDtRQUNJLFVBQVUsRUFBRTs7O1NBR1g7UUFDRCxLQUFLLEVBQUU7WUFDSCxrQ0FBa0M7WUFDbEMsa0NBQWtDO1NBQ3JDO1FBQ0QsT0FBTyxFQUFFLG9DQUFvQztLQUNoRDtJQUNEO1FBQ0ksVUFBVSxFQUFFOzs7U0FHWDtRQUNELEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7UUFDN0IsT0FBTyxFQUFFLGdDQUFnQztLQUM1QztJQUNEO1FBQ0ksVUFBVSxFQUFFOzs7U0FHWDtRQUNELEtBQUssRUFBRSxFQUFFO1FBQ1QsT0FBTyxFQUFFLHFCQUFxQjtLQUNqQztJQUNEO1FBQ0ksVUFBVSxFQUFFOzs7U0FHWDtRQUNELEtBQUssRUFBRSxDQUFDLGtDQUFrQyxDQUFDO1FBQzNDLE9BQU8sRUFBRSw0QkFBNEI7S0FDeEM7Q0FDSixDQUFDO0FBRVcsUUFBQSx3QkFBd0IsR0FBRztJQUNwQztRQUNJLFdBQVcsRUFBRSxNQUFNO1FBQ25CLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUNsQixZQUFZLEVBQUUsSUFBSTtLQUNyQjtJQUNEO1FBQ0ksV0FBVyxFQUFFLEtBQUs7UUFDbEIsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ2xCLFlBQVksRUFBRSxLQUFLO0tBQ3RCO0lBQ0Q7UUFDSSxXQUFXLEVBQUUsTUFBTTtRQUNuQixLQUFLLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztRQUNoQyxZQUFZLEVBQUUsSUFBSTtLQUNyQjtJQUNEO1FBQ0ksV0FBVyxFQUFFLEtBQUs7UUFDbEIsS0FBSyxFQUFFLENBQUMsd0JBQXdCLENBQUM7UUFDakMsWUFBWSxFQUFFLEtBQUs7S0FDdEI7SUFDRDtRQUNJLFdBQVcsRUFBRSxNQUFNO1FBQ25CLEtBQUssRUFBRSxDQUFDLHdCQUF3QixDQUFDO1FBQ2pDLFlBQVksRUFBRSxJQUFJO0tBQ3JCO0lBQ0Q7UUFDSSxXQUFXLEVBQUUsTUFBTTtRQUNuQixLQUFLLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztRQUNoQyxZQUFZLEVBQUUsSUFBSTtLQUNyQjtJQUNEO1FBQ0ksV0FBVyxFQUFFLE1BQU07UUFDbkIsS0FBSyxFQUFFLENBQUMsc0JBQXNCLENBQUM7UUFDL0IsWUFBWSxFQUFFLElBQUk7S0FDckI7SUFDRDtRQUNJLFdBQVcsRUFBRSxNQUFNO1FBQ25CLEtBQUssRUFBRSxDQUFDLHVCQUF1QixDQUFDO1FBQ2hDLFlBQVksRUFBRSxJQUFJO0tBQ3JCO0lBQ0Q7UUFDSSxXQUFXLEVBQUUsS0FBSztRQUNsQixLQUFLLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztRQUNoQyxZQUFZLEVBQUUsS0FBSztLQUN0QjtJQUNEO1FBQ0ksV0FBVyxFQUFFLE1BQU07UUFDbkIsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQztRQUNoQyxZQUFZLEVBQUUsSUFBSTtLQUNyQjtJQUNEO1FBQ0ksV0FBVyxFQUFFLE1BQU07UUFDbkIsS0FBSyxFQUFFLENBQUMsWUFBWSxDQUFDO1FBQ3JCLFlBQVksRUFBRSxLQUFLO0tBQ3RCO0lBQ0Q7UUFDSSxXQUFXLEVBQUUsTUFBTTtRQUNuQixLQUFLLEVBQUUsRUFBRTtRQUNULFlBQVksRUFBRSxLQUFLO0tBQ3RCO0lBQ0Q7UUFDSSxXQUFXLEVBQUUsTUFBTTtRQUNuQixLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLFlBQVksRUFBRSxLQUFLO0tBQ3RCO0NBQ0osQ0FBQyJ9
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS50ZXN0RGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9wYXJhbURlY29yYXRvck5hbWVNYXRjaGVzUm91dGVQYXJhbS9ydWxlLnRlc3REYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwwQ0FBMEM7OztBQUU3QixRQUFBLGlCQUFpQixHQUFHO0lBQzdCO1FBQ0ksVUFBVSxFQUFFOzs7U0FHWDtRQUNELEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUNsQixPQUFPLEVBQUUsOEJBQThCO0tBQzFDO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7OztTQUdYO1FBQ0QsS0FBSyxFQUFFLENBQUMsa0NBQWtDLENBQUM7UUFDM0MsT0FBTyxFQUFFLGtDQUFrQztLQUM5QztJQUNEO1FBQ0ksVUFBVSxFQUFFOzs7U0FHWDtRQUNELEtBQUssRUFBRTtZQUNILGtDQUFrQztZQUNsQyxrQ0FBa0M7U0FDckM7UUFDRCxPQUFPLEVBQUUsb0NBQW9DO0tBQ2hEO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7OztTQUdYO1FBQ0QsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztRQUM3QixPQUFPLEVBQUUsZ0NBQWdDO0tBQzVDO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7OztTQUdYO1FBQ0QsS0FBSyxFQUFFLEVBQUU7UUFDVCxPQUFPLEVBQUUscUJBQXFCO0tBQ2pDO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7OztTQUdYO1FBQ0QsS0FBSyxFQUFFLENBQUMsa0NBQWtDLENBQUM7UUFDM0MsT0FBTyxFQUFFLDRCQUE0QjtLQUN4QztDQUNKLENBQUM7QUFFVyxRQUFBLHdCQUF3QixHQUFHO0lBQ3BDO1FBQ0ksV0FBVyxFQUFFLE1BQU07UUFDbkIsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ2xCLFlBQVksRUFBRSxJQUFJO0tBQ3JCO0lBQ0Q7UUFDSSxXQUFXLEVBQUUsS0FBSztRQUNsQixLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDbEIsWUFBWSxFQUFFLEtBQUs7S0FDdEI7SUFDRDtRQUNJLFdBQVcsRUFBRSxNQUFNO1FBQ25CLEtBQUssRUFBRSxDQUFDLHVCQUF1QixDQUFDO1FBQ2hDLFlBQVksRUFBRSxJQUFJO0tBQ3JCO0lBQ0Q7UUFDSSxXQUFXLEVBQUUsS0FBSztRQUNsQixLQUFLLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztRQUNqQyxZQUFZLEVBQUUsS0FBSztLQUN0QjtJQUNEO1FBQ0ksV0FBVyxFQUFFLE1BQU07UUFDbkIsS0FBSyxFQUFFLENBQUMsd0JBQXdCLENBQUM7UUFDakMsWUFBWSxFQUFFLElBQUk7S0FDckI7SUFDRDtRQUNJLFdBQVcsRUFBRSxNQUFNO1FBQ25CLEtBQUssRUFBRSxDQUFDLHVCQUF1QixDQUFDO1FBQ2hDLFlBQVksRUFBRSxJQUFJO0tBQ3JCO0lBQ0Q7UUFDSSxXQUFXLEVBQUUsTUFBTTtRQUNuQixLQUFLLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztRQUMvQixZQUFZLEVBQUUsSUFBSTtLQUNyQjtJQUNEO1FBQ0ksV0FBVyxFQUFFLE1BQU07UUFDbkIsS0FBSyxFQUFFLENBQUMsdUJBQXVCLENBQUM7UUFDaEMsWUFBWSxFQUFFLElBQUk7S0FDckI7SUFDRDtRQUNJLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLEtBQUssRUFBRSxDQUFDLHVCQUF1QixDQUFDO1FBQ2hDLFlBQVksRUFBRSxLQUFLO0tBQ3RCO0lBQ0Q7UUFDSSxXQUFXLEVBQUUsTUFBTTtRQUNuQixLQUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDO1FBQ2hDLFlBQVksRUFBRSxJQUFJO0tBQ3JCO0lBQ0Q7UUFDSSxXQUFXLEVBQUUsTUFBTTtRQUNuQixLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUM7UUFDckIsWUFBWSxFQUFFLEtBQUs7S0FDdEI7SUFDRDtRQUNJLFdBQVcsRUFBRSxNQUFNO1FBQ25CLEtBQUssRUFBRSxFQUFFO1FBQ1QsWUFBWSxFQUFFLEtBQUs7S0FDdEI7SUFDRDtRQUNJLFdBQVcsRUFBRSxNQUFNO1FBQ25CLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDakIsWUFBWSxFQUFFLEtBQUs7S0FDdEI7Q0FDSixDQUFDIn0=
@@ -0,0 +1,6 @@
1
+ import { TSESTree } from "@typescript-eslint/types";
2
+ export declare const shouldTrigger: () => boolean;
3
+ declare const rule: import("@typescript-eslint/experimental-utils/dist/ts-eslint/Rule").RuleModule<"shouldUseValidateNested", never[], {
4
+ PropertyDefinition(node: TSESTree.PropertyDefinition): void;
5
+ }>;
6
+ export default rule;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shouldTrigger = void 0;
4
+ const createRule_1 = require("../../utils/createRule");
5
+ // const nestRequestMethodDecoratorNames = new Set([
6
+ // "Get",
7
+ // "Post",
8
+ // "Put",
9
+ // "Delete",
10
+ // "Patch",
11
+ // "Options",
12
+ // "Head",
13
+ // "All",
14
+ // ]);
15
+ const shouldTrigger = () => {
16
+ return false;
17
+ };
18
+ exports.shouldTrigger = shouldTrigger;
19
+ const rule = (0, createRule_1.createRule)({
20
+ name: "param-decorator-name-matches-route-param",
21
+ meta: {
22
+ docs: {
23
+ description: "Properties that are not primitive types should ValidateNested",
24
+ recommended: false,
25
+ requiresTypeChecking: false,
26
+ },
27
+ messages: {
28
+ shouldUseValidateNested: "A non-primitve type property with validation should use @ValidateNested",
29
+ },
30
+ schema: [],
31
+ hasSuggestions: false,
32
+ type: "suggestion",
33
+ },
34
+ defaultOptions: [],
35
+ create(context) {
36
+ return {
37
+ // eslint-disable-next-line @typescript-eslint/naming-convention
38
+ PropertyDefinition(node) {
39
+ // property is not a primitve type
40
+ // property has a validation decorator
41
+ // eslint-disable-next-line @typescript-eslint/naming-convention
42
+ const result = (0, exports.shouldTrigger)();
43
+ if (result) {
44
+ context.report({
45
+ node: node,
46
+ messageId: "shouldUseValidateNested",
47
+ });
48
+ }
49
+ },
50
+ };
51
+ },
52
+ });
53
+ exports.default = rule;
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVOb25QcmltaXRpdmVOZWVkc0RlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvdmFsaWRhdGUtbm9uLXByaW1pdHZlcy1uZWVkcy1kZWNvcmF0b3JzL3ZhbGlkYXRlTm9uUHJpbWl0aXZlTmVlZHNEZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHVEQUFrRDtBQUVsRCxvREFBb0Q7QUFDcEQsYUFBYTtBQUNiLGNBQWM7QUFDZCxhQUFhO0FBQ2IsZ0JBQWdCO0FBQ2hCLGVBQWU7QUFDZixpQkFBaUI7QUFDakIsY0FBYztBQUNkLGFBQWE7QUFDYixNQUFNO0FBRUMsTUFBTSxhQUFhLEdBQUcsR0FBWSxFQUFFO0lBQ3ZDLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUZXLFFBQUEsYUFBYSxpQkFFeEI7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQUM7SUFDcEIsSUFBSSxFQUFFLDBDQUEwQztJQUNoRCxJQUFJLEVBQUU7UUFDRixJQUFJLEVBQUU7WUFDRixXQUFXLEVBQ1AsK0RBQStEO1lBQ25FLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLG9CQUFvQixFQUFFLEtBQUs7U0FDOUI7UUFDRCxRQUFRLEVBQUU7WUFDTix1QkFBdUIsRUFDbkIseUVBQXlFO1NBQ2hGO1FBQ0QsTUFBTSxFQUFFLEVBQUU7UUFDVixjQUFjLEVBQUUsS0FBSztRQUNyQixJQUFJLEVBQUUsWUFBWTtLQUNyQjtJQUNELGNBQWMsRUFBRSxFQUFFO0lBRWxCLE1BQU0sQ0FBQyxPQUFPO1FBQ1YsT0FBTztZQUNILGdFQUFnRTtZQUNoRSxrQkFBa0IsQ0FBQyxJQUFpQztnQkFDaEQsa0NBQWtDO2dCQUNsQyxzQ0FBc0M7Z0JBRXRDLGdFQUFnRTtnQkFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBYSxHQUFFLENBQUM7Z0JBRS9CLElBQUksTUFBTSxFQUFFO29CQUNSLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ1gsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLHlCQUF5QjtxQkFDdkMsQ0FBQyxDQUFDO2lCQUNOO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FBRUgsa0JBQWUsSUFBSSxDQUFDIn0=
@@ -0,0 +1 @@
1
+ export declare function getFixturesRootDirectory(): string;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getFixturesRootDirectory = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ function getFixturesRootDirectory() {
9
+ // eslint-disable-next-line unicorn/prefer-module
10
+ return path_1.default.join(__dirname, "..", "fixtures");
11
+ }
12
+ exports.getFixturesRootDirectory = getFixturesRootDirectory;
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZVNldHVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RpbmcvZml4dHVyZVNldHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdEQUF3QjtBQUV4QixTQUFnQix3QkFBd0I7SUFDcEMsaURBQWlEO0lBQ2pELE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFIRCw0REFHQyJ9
@@ -1,6 +1,13 @@
1
- import { TSESTree } from "@typescript-eslint/experimental-utils";
1
+ import { ParserServices, TSESTree } from "@typescript-eslint/experimental-utils";
2
2
  import { RuleContext } from "@typescript-eslint/experimental-utils/dist/ts-eslint";
3
+ import ts from "typescript";
3
4
  export declare const typedTokenHelpers: {
5
+ decoratorsThatCouldMeanTheDevIsValidatingAnArray: string[];
6
+ isTypeArrayTypeOrUnionOfArrayTypes(node: TSESTree.Node, parserService: ParserServices, checker: ts.TypeChecker): boolean;
7
+ getNodeType(node: TSESTree.Node, parserService: ParserServices, checker: ts.TypeChecker): ts.Type;
8
+ expressionNodeIsArrayType(node: TSESTree.Expression, parserService: ParserServices, checker: ts.TypeChecker): boolean;
9
+ getPropertyValueEqualsExpected(firstArgument: TSESTree.ObjectExpression, propertyName: string, expectedValue: string | number | bigint | boolean | RegExp | null): boolean;
10
+ getConstrainedTypeAtLocation(checker: ts.TypeChecker, node: ts.Node): ts.Type;
4
11
  nodeHasDecoratorsNamed(n: TSESTree.ClassDeclaration | TSESTree.PropertyDefinition | TSESTree.MethodDefinition, decoratorNames: string[]): boolean;
5
12
  getDecoratorsNamed(n: TSESTree.ClassDeclaration | TSESTree.PropertyDefinition | TSESTree.MethodDefinition, decoratorNames: string[]): TSESTree.Decorator[];
6
13
  parseStringToAst(code: string, path: string, context: Readonly<RuleContext<never, never[]>>): TSESTree.Program;
@@ -3,7 +3,51 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.typedTokenHelpers = void 0;
4
4
  const experimental_utils_1 = require("@typescript-eslint/experimental-utils");
5
5
  const parser_1 = require("@typescript-eslint/parser");
6
+ const tsutils_1 = require("tsutils");
6
7
  exports.typedTokenHelpers = {
8
+ decoratorsThatCouldMeanTheDevIsValidatingAnArray: [
9
+ "IsArray",
10
+ "ArrayMinSize",
11
+ "ArrayMinSize",
12
+ "ArrayContains",
13
+ "ArrayNotContains",
14
+ "ArrayNotEmpty",
15
+ "ArrayUnique",
16
+ ],
17
+ isTypeArrayTypeOrUnionOfArrayTypes(node, parserService, checker) {
18
+ const nodeType = this.getNodeType(node, parserService, checker);
19
+ for (const t of (0, tsutils_1.unionTypeParts)(nodeType)) {
20
+ if (!checker.isArrayType(t)) {
21
+ return false;
22
+ }
23
+ }
24
+ return true;
25
+ },
26
+ getNodeType(node, parserService, checker) {
27
+ const tsNode = parserService.esTreeNodeToTSNodeMap.get(node);
28
+ return exports.typedTokenHelpers.getConstrainedTypeAtLocation(checker, tsNode);
29
+ },
30
+ expressionNodeIsArrayType(node, parserService, checker) {
31
+ const nodeType = this.getNodeType(node, parserService, checker);
32
+ return checker.isArrayType(nodeType);
33
+ },
34
+ getPropertyValueEqualsExpected(firstArgument, propertyName, expectedValue) {
35
+ let didMatchExpectedValues = false;
36
+ if (firstArgument !== undefined) {
37
+ const foundPropertyOfName = firstArgument.properties.find((p) => p.key
38
+ .name === propertyName);
39
+ didMatchExpectedValues =
40
+ foundPropertyOfName !== undefined &&
41
+ foundPropertyOfName
42
+ .value.value === expectedValue;
43
+ }
44
+ return didMatchExpectedValues;
45
+ },
46
+ getConstrainedTypeAtLocation(checker, node) {
47
+ const nodeType = checker.getTypeAtLocation(node);
48
+ const constrained = checker.getBaseConstraintOfType(nodeType);
49
+ return constrained !== null && constrained !== void 0 ? constrained : nodeType;
50
+ },
7
51
  nodeHasDecoratorsNamed(n, decoratorNames) {
8
52
  const decorators = this.getDecoratorsNamed(n, decoratorNames);
9
53
  return decorators.length > 0;
@@ -30,4 +74,4 @@ exports.typedTokenHelpers = {
30
74
  return isOptionalPropertyValue;
31
75
  },
32
76
  };
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRUb2tlbkhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdHlwZWRUb2tlbkhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsOEVBQStFO0FBRS9FLHNEQUFnRDtBQUVuQyxRQUFBLGlCQUFpQixHQUFHO0lBQzdCLHNCQUFzQixDQUNsQixDQUcrQixFQUMvQixjQUF3QjtRQUV4QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRTlELE9BQU8sVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELGtCQUFrQixDQUNkLENBRytCLEVBQy9CLGNBQXdCOztRQUV4QixNQUFNLFVBQVUsR0FBRyxNQUFBLENBQUMsQ0FBQyxVQUFVLDBDQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzFDLGNBQWMsQ0FBQyxRQUFRLENBRWQsQ0FBQyxDQUFDLFVBQXNDO2FBQ3BDLE1BQ1IsQ0FBQyxJQUFJLENBQ1QsQ0FDSixDQUFDO1FBRUYsT0FBTyxVQUFVLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxnQkFBZ0IsQ0FDWixJQUFZLEVBQ1osSUFBWSxFQUNaLE9BQThDO1FBRTlDLE9BQU8sSUFBQSxjQUFLLEVBQUMsSUFBSSxFQUFFO1lBQ2YsUUFBUSxFQUFFLElBQUk7WUFDZCxLQUFLLEVBQUUsSUFBSTtZQUNYLE1BQU0sRUFBRSxJQUFJO1lBQ1osR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLE9BQU8sQ0FBQyxhQUFhO1NBQzNCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCx1QkFBdUIsQ0FBQyxJQUFpQzs7UUFDckQsTUFBTSxlQUFlLEdBQ2pCLENBQUEsTUFBQSxNQUNJLE1BQUEsSUFBSSxDQUFDLGNBQWMsMENBQUUsY0FDeEIsMENBQUUsS0FBSywwQ0FBRSxJQUFJLENBQ1YsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssbUNBQWMsQ0FBQyxrQkFBa0IsQ0FDdEQsTUFBSyxTQUFTLENBQUM7UUFFcEIsTUFBTSx1QkFBdUIsR0FDekIsSUFBSSxDQUFDLFFBQVEsSUFBSSxlQUFlLElBQUksS0FBSyxDQUFDO1FBQzlDLE9BQU8sdUJBQXVCLENBQUM7SUFDbkMsQ0FBQztDQUNKLENBQUMifQ==
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRUb2tlbkhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdHlwZWRUb2tlbkhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsOEVBSStDO0FBRS9DLHNEQUFnRDtBQUVoRCxxQ0FBdUM7QUFFMUIsUUFBQSxpQkFBaUIsR0FBRztJQUM3QixnREFBZ0QsRUFBRTtRQUM5QyxTQUFTO1FBQ1QsY0FBYztRQUNkLGNBQWM7UUFDZCxlQUFlO1FBQ2Ysa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZixhQUFhO0tBQ2hCO0lBQ0Qsa0NBQWtDLENBQzlCLElBQW1CLEVBQ25CLGFBQTZCLEVBQzdCLE9BQXVCO1FBRXZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRSxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUEsd0JBQWMsRUFBQyxRQUFRLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDekIsT0FBTyxLQUFLLENBQUM7YUFDaEI7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxXQUFXLENBQ1AsSUFBbUIsRUFDbkIsYUFBNkIsRUFDN0IsT0FBdUI7UUFFdkIsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RCxPQUFPLHlCQUFpQixDQUFDLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QseUJBQXlCLENBQ3JCLElBQXlCLEVBQ3pCLGFBQTZCLEVBQzdCLE9BQXVCO1FBRXZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztR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
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@darraghor/eslint-plugin-nestjs-typed",
3
- "version": "3.3.0",
3
+ "version": "3.4.0",
4
4
  "description": "Eslint rules for nestjs projects",
5
5
  "scripts": {
6
6
  "clean": "rm -Rf ./dist/",
7
7
  "build:ci": "npm run build",
8
8
  "build": "npm run clean && mkdir ./dist && tsc --project tsconfig.build.json",
9
9
  "lint": "npx eslint -c .eslintrc.js --ext .ts './src/**/*.ts' './tests/**/*.ts' --no-error-on-unmatched-pattern",
10
- "test": "export NODE_OPTIONS=\"--max-old-space-size=8192\" && npx jest --runInBand --color --reporters=default --no-cache --coverage=false",
10
+ "test": "export NODE_OPTIONS=\"--max-old-space-size=8192\" && npx jest --runInBand --color --reporters=default --no-cache --coverage=false --silent=false",
11
11
  "pre-commit": "npx lint-staged",
12
12
  "prettier": "prettier --write src/*",
13
13
  "prepare": "husky install",
@@ -1,9 +0,0 @@
1
- export declare const testCases: {
2
- moduleCode: string;
3
- needsEnumProperty: boolean;
4
- needsEnumNameProperty: boolean;
5
- needsTypeRemoved: boolean;
6
- needsEnumNameToMatchEnumType: boolean;
7
- isEnumType: boolean;
8
- message: string;
9
- }[];
@@ -1,137 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.testCases = void 0;
4
- /* eslint-disable unicorn/filename-case */
5
- exports.testCases = [
6
- {
7
- moduleCode: `enum MyEnum{
8
- ValA,
9
- ValB
10
- }
11
-
12
- class MyClass {
13
- @ApiProperty({
14
- type: MyEnum,
15
- enum: MyEnum,
16
- })
17
- public myProperty!:MyEnum
18
- }`,
19
- needsEnumProperty: false,
20
- needsEnumNameProperty: true,
21
- needsTypeRemoved: true,
22
- needsEnumNameToMatchEnumType: false,
23
- isEnumType: true,
24
- message: "type is present, no enum name prop",
25
- },
26
- {
27
- moduleCode: `enum MyEnum{
28
- ValA,
29
- ValB
30
- }
31
-
32
- class MyClass {
33
- @ApiProperty({
34
- enumName: "MyEnum",
35
- enum: MyEnum,
36
- })
37
- public myProperty!:MyEnum
38
- }`,
39
- needsEnumProperty: false,
40
- needsEnumNameProperty: false,
41
- needsTypeRemoved: false,
42
- needsEnumNameToMatchEnumType: false,
43
- isEnumType: true,
44
- message: "perfect",
45
- },
46
- {
47
- moduleCode: `enum MyEnum{
48
- ValA,
49
- ValB
50
- }
51
-
52
- class MyClass {
53
- @ApiProperty({
54
- enum: MyEnum,
55
- })
56
- public myProperty!:MyEnum
57
- }`,
58
- needsEnumProperty: false,
59
- needsEnumNameProperty: true,
60
- needsTypeRemoved: false,
61
- needsEnumNameToMatchEnumType: false,
62
- isEnumType: true,
63
- message: "missing enum name, no type present",
64
- },
65
- {
66
- moduleCode: `enum MyEnum{
67
- ValA,
68
- ValB
69
- }
70
-
71
- class MyClass {
72
- @ApiProperty({
73
- type: MyEnum,
74
- })
75
- public myProperty!:MyEnum
76
- }`,
77
- needsEnumProperty: true,
78
- needsEnumNameProperty: true,
79
- needsTypeRemoved: true,
80
- needsEnumNameToMatchEnumType: false,
81
- isEnumType: true,
82
- message: "has type, missing everything else",
83
- },
84
- {
85
- moduleCode: `enum MyEnum{
86
- ValA,
87
- ValB
88
- }
89
-
90
- class MyClass {
91
- @ApiProperty()
92
- public myProperty!:Object
93
- }`,
94
- needsEnumProperty: false,
95
- needsEnumNameProperty: false,
96
- needsTypeRemoved: false,
97
- needsEnumNameToMatchEnumType: false,
98
- isEnumType: false,
99
- message: "not an enum at all",
100
- },
101
- {
102
- moduleCode: `enum MyEnum{
103
- ValA,
104
- ValB
105
- }
106
-
107
- class MyClass {
108
- @ApiProperty({})
109
- public myProperty!:MyEnum
110
- }`,
111
- needsEnumProperty: true,
112
- needsEnumNameProperty: true,
113
- needsTypeRemoved: false,
114
- needsEnumNameToMatchEnumType: false,
115
- isEnumType: true,
116
- message: "missing all but still has property",
117
- },
118
- {
119
- moduleCode: `enum MyEnum{
120
- ValA,
121
- ValB
122
- }
123
-
124
- class MyClass {
125
- @ApiProperty({enumName: "MyEnumTYPO",
126
- enum: MyEnum,})
127
- public myProperty!:MyEnum
128
- }`,
129
- needsEnumProperty: false,
130
- needsEnumNameProperty: false,
131
- needsTypeRemoved: false,
132
- needsEnumNameToMatchEnumType: true,
133
- isEnumType: true,
134
- message: "enum name doesn't match enum type",
135
- },
136
- ];
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpRW51bVByb3BlcnR5QmVzdFByYWN0aWNlcy50ZXN0RGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlFbnVtUHJvcGVydHlCZXN0UHJhY3RpY2VzL2FwaUVudW1Qcm9wZXJ0eUJlc3RQcmFjdGljZXMudGVzdERhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMENBQTBDO0FBQzdCLFFBQUEsU0FBUyxHQUFHO0lBQ3JCO1FBQ0ksVUFBVSxFQUFFOzs7Ozs7Ozs7OztVQVdWO1FBQ0YsaUJBQWlCLEVBQUUsS0FBSztRQUN4QixxQkFBcUIsRUFBRSxJQUFJO1FBQzNCLGdCQUFnQixFQUFFLElBQUk7UUFDdEIsNEJBQTRCLEVBQUUsS0FBSztRQUNuQyxVQUFVLEVBQUUsSUFBSTtRQUNoQixPQUFPLEVBQUUsb0NBQW9DO0tBQ2hEO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7Ozs7Ozs7Ozs7O1VBV1Y7UUFDRixpQkFBaUIsRUFBRSxLQUFLO1FBQ3hCLHFCQUFxQixFQUFFLEtBQUs7UUFDNUIsZ0JBQWdCLEVBQUUsS0FBSztRQUN2Qiw0QkFBNEIsRUFBRSxLQUFLO1FBQ25DLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLE9BQU8sRUFBRSxTQUFTO0tBQ3JCO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7Ozs7Ozs7Ozs7VUFVVjtRQUNGLGlCQUFpQixFQUFFLEtBQUs7UUFDeEIscUJBQXFCLEVBQUUsSUFBSTtRQUMzQixnQkFBZ0IsRUFBRSxLQUFLO1FBQ3ZCLDRCQUE0QixFQUFFLEtBQUs7UUFDbkMsVUFBVSxFQUFFLElBQUk7UUFDaEIsT0FBTyxFQUFFLG9DQUFvQztLQUNoRDtJQUNEO1FBQ0ksVUFBVSxFQUFFOzs7Ozs7Ozs7O1VBVVY7UUFDRixpQkFBaUIsRUFBRSxJQUFJO1FBQ3ZCLHFCQUFxQixFQUFFLElBQUk7UUFDM0IsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0Qiw0QkFBNEIsRUFBRSxLQUFLO1FBQ25DLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLE9BQU8sRUFBRSxtQ0FBbUM7S0FDL0M7SUFDRDtRQUNJLFVBQVUsRUFBRTs7Ozs7Ozs7VUFRVjtRQUNGLGlCQUFpQixFQUFFLEtBQUs7UUFDeEIscUJBQXFCLEVBQUUsS0FBSztRQUM1QixnQkFBZ0IsRUFBRSxLQUFLO1FBQ3ZCLDRCQUE0QixFQUFFLEtBQUs7UUFDbkMsVUFBVSxFQUFFLEtBQUs7UUFDakIsT0FBTyxFQUFFLG9CQUFvQjtLQUNoQztJQUNEO1FBQ0ksVUFBVSxFQUFFOzs7Ozs7OztVQVFWO1FBQ0YsaUJBQWlCLEVBQUUsSUFBSTtRQUN2QixxQkFBcUIsRUFBRSxJQUFJO1FBQzNCLGdCQUFnQixFQUFFLEtBQUs7UUFDdkIsNEJBQTRCLEVBQUUsS0FBSztRQUNuQyxVQUFVLEVBQUUsSUFBSTtRQUNoQixPQUFPLEVBQUUsb0NBQW9DO0tBQ2hEO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7Ozs7Ozs7OztVQVNWO1FBQ0YsaUJBQWlCLEVBQUUsS0FBSztRQUN4QixxQkFBcUIsRUFBRSxLQUFLO1FBQzVCLGdCQUFnQixFQUFFLEtBQUs7UUFDdkIsNEJBQTRCLEVBQUUsSUFBSTtRQUNsQyxVQUFVLEVBQUUsSUFBSTtRQUNoQixPQUFPLEVBQUUsbUNBQW1DO0tBQy9DO0NBQ0osQ0FBQyJ9
@@ -1,5 +0,0 @@
1
- export declare const testCases: {
2
- moduleCode: string;
3
- shouldUseDecorator: boolean;
4
- message: string;
5
- }[];
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.testCases = void 0;
4
- exports.testCases = [
5
- {
6
- moduleCode: `class TestClass {
7
- @Get()
8
- @ApiOkResponse({ type: String, isArray: true })
9
- @ApiBadRequestResponse({ description: "Bad Request" })
10
- public getAll(): Promise<string[]> {
11
- return [];
12
- }
13
- }`,
14
- shouldUseDecorator: false,
15
- message: "all good",
16
- },
17
- {
18
- moduleCode: `class TestClass {
19
- @Get()
20
- @ApiResponse({ status: 200, type: String })
21
- public getAll(): Promise<string[]> {
22
- return [];
23
- }
24
- }`,
25
- shouldUseDecorator: false,
26
- message: "all good",
27
- },
28
- {
29
- moduleCode: `class TestClass {
30
- @Get()
31
- public getAll(): Promise<string[]> {
32
- return [];
33
- }
34
- }`,
35
- shouldUseDecorator: true,
36
- message: "no api respones decorator",
37
- },
38
- {
39
- moduleCode: `class TestClass {
40
- public getAll(): Promise<string[]> {
41
- return [];
42
- }
43
- }`,
44
- shouldUseDecorator: false,
45
- message: "not an http method",
46
- },
47
- ];
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpTWV0aG9kc1Nob3VsZFNwZWNpZnlBcGlSZXNwb25zZS50ZXN0RGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlNZXRob2RzU2hvdWxkU3BlY2lmeUFwaVJlc3BvbnNlL2FwaU1ldGhvZHNTaG91bGRTcGVjaWZ5QXBpUmVzcG9uc2UudGVzdERhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxTQUFTLEdBQUc7SUFDckI7UUFDSSxVQUFVLEVBQUU7Ozs7Ozs7VUFPVjtRQUNGLGtCQUFrQixFQUFFLEtBQUs7UUFDekIsT0FBTyxFQUFFLFVBQVU7S0FDdEI7SUFDRDtRQUNJLFVBQVUsRUFBRTs7Ozs7O1VBTVY7UUFDRixrQkFBa0IsRUFBRSxLQUFLO1FBQ3pCLE9BQU8sRUFBRSxVQUFVO0tBQ3RCO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7Ozs7O1VBS1Y7UUFDRixrQkFBa0IsRUFBRSxJQUFJO1FBQ3hCLE9BQU8sRUFBRSwyQkFBMkI7S0FDdkM7SUFDRDtRQUNJLFVBQVUsRUFBRTs7OztVQUlWO1FBQ0Ysa0JBQWtCLEVBQUUsS0FBSztRQUN6QixPQUFPLEVBQUUsb0JBQW9CO0tBQ2hDO0NBQ0osQ0FBQyJ9
@@ -1,6 +0,0 @@
1
- export declare const testCases: {
2
- moduleCode: string;
3
- shouldUseOptionalDecorator: boolean;
4
- shouldUseRequiredDecorator: boolean;
5
- message: string;
6
- }[];
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.testCases = void 0;
4
- exports.testCases = [
5
- {
6
- moduleCode: `class TestClass {
7
- @Expose()
8
- @ApiPropertyOptional()
9
- thisIsAStringProp?: string;}`,
10
- shouldUseOptionalDecorator: false,
11
- shouldUseRequiredDecorator: false,
12
- message: "optional everywhere",
13
- },
14
- {
15
- moduleCode: `class TestClass {@Expose()
16
- @ApiPropertyOptional()
17
- thisIsAStringProp: string;}`,
18
- shouldUseOptionalDecorator: false,
19
- shouldUseRequiredDecorator: true,
20
- message: "optional decorator, required prop",
21
- },
22
- {
23
- moduleCode: `class TestClass {@Expose()
24
- @ApiPropertyOptional()
25
- thisIsAStringProp!: string;}`,
26
- shouldUseOptionalDecorator: false,
27
- shouldUseRequiredDecorator: true,
28
- message: "optional decorator, required prop",
29
- },
30
- {
31
- moduleCode: `class TestClass {@Expose()
32
- @ApiProperty()
33
- thisIsAStringProp?: string;}`,
34
- shouldUseOptionalDecorator: true,
35
- shouldUseRequiredDecorator: false,
36
- message: "required decorator, optional prop",
37
- },
38
- {
39
- moduleCode: `class TestClass {@Expose()
40
- @ApiProperty()
41
- thisIsAStringProp: string | undefined;}`,
42
- shouldUseOptionalDecorator: true,
43
- shouldUseRequiredDecorator: false,
44
- message: "required decorator, optional prop",
45
- },
46
- {
47
- moduleCode: `class TestClass {@Expose()
48
- @ApiPropertyOptional()
49
- thisIsAStringProp: string | undefined;}`,
50
- shouldUseOptionalDecorator: false,
51
- shouldUseRequiredDecorator: false,
52
- message: "optional decorator, optional prop",
53
- },
54
- ];
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUHJvcGVydHlNYXRjaGVzUHJvcGVydHlPcHRpb25hbGl0eS50ZXN0RGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlQcm9wZXJ0eU1hdGNoZXNQcm9wZXJ0eU9wdGlvbmFsaXR5L2FwaVByb3BlcnR5TWF0Y2hlc1Byb3BlcnR5T3B0aW9uYWxpdHkudGVzdERhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxTQUFTLEdBQUc7SUFDckI7UUFDSSxVQUFVLEVBQUU7OztxQ0FHaUI7UUFDN0IsMEJBQTBCLEVBQUUsS0FBSztRQUNqQywwQkFBMEIsRUFBRSxLQUFLO1FBQ2pDLE9BQU8sRUFBRSxxQkFBcUI7S0FDakM7SUFDRDtRQUNJLFVBQVUsRUFBRTs7b0NBRWdCO1FBQzVCLDBCQUEwQixFQUFFLEtBQUs7UUFDakMsMEJBQTBCLEVBQUUsSUFBSTtRQUNoQyxPQUFPLEVBQUUsbUNBQW1DO0tBQy9DO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7O3FDQUVpQjtRQUM3QiwwQkFBMEIsRUFBRSxLQUFLO1FBQ2pDLDBCQUEwQixFQUFFLElBQUk7UUFDaEMsT0FBTyxFQUFFLG1DQUFtQztLQUMvQztJQUNEO1FBQ0ksVUFBVSxFQUFFOztxQ0FFaUI7UUFDN0IsMEJBQTBCLEVBQUUsSUFBSTtRQUNoQywwQkFBMEIsRUFBRSxLQUFLO1FBQ2pDLE9BQU8sRUFBRSxtQ0FBbUM7S0FDL0M7SUFDRDtRQUNJLFVBQVUsRUFBRTs7Z0RBRTRCO1FBQ3hDLDBCQUEwQixFQUFFLElBQUk7UUFDaEMsMEJBQTBCLEVBQUUsS0FBSztRQUNqQyxPQUFPLEVBQUUsbUNBQW1DO0tBQy9DO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7O2dEQUU0QjtRQUN4QywwQkFBMEIsRUFBRSxLQUFLO1FBQ2pDLDBCQUEwQixFQUFFLEtBQUs7UUFDakMsT0FBTyxFQUFFLG1DQUFtQztLQUMvQztDQUNKLENBQUMifQ==
@@ -1,6 +0,0 @@
1
- export declare const testCases: {
2
- moduleCode: string;
3
- shouldSetIsArrayFalse: boolean;
4
- shouldSetIsArrayTrue: boolean;
5
- message: string;
6
- }[];
@@ -1,51 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.testCases = void 0;
4
- exports.testCases = [
5
- {
6
- moduleCode: `class TestClass {
7
- @Expose()
8
- @ApiPropertyOptional({isArray:true})
9
- thisIsAStringProp?: string[];}`,
10
- shouldSetIsArrayFalse: false,
11
- shouldSetIsArrayTrue: false,
12
- message: "set ok",
13
- },
14
- {
15
- moduleCode: `class TestClass {
16
- @Expose()
17
- @ApiPropertyOptional({isArray:true})
18
- thisIsAStringProp?: Array<string>;}`,
19
- shouldSetIsArrayFalse: false,
20
- shouldSetIsArrayTrue: false,
21
- message: "set ok",
22
- },
23
- {
24
- moduleCode: `class TestClass {
25
- @Expose()
26
- @ApiPropertyOptional({isArray:false})
27
- thisIsAStringProp?: Array<string>;}`,
28
- shouldSetIsArrayFalse: false,
29
- shouldSetIsArrayTrue: true,
30
- message: "mismatch is array prop",
31
- },
32
- {
33
- moduleCode: `class TestClass {
34
- @Expose()
35
- @ApiPropertyOptional()
36
- thisIsAStringProp?: Array<string>;}`,
37
- shouldSetIsArrayFalse: false,
38
- shouldSetIsArrayTrue: true,
39
- message: "should set tue",
40
- },
41
- {
42
- moduleCode: `class TestClass {
43
- @Expose()
44
- @ApiPropertyOptional({isArray:true})
45
- thisIsAStringProp?: string;}`,
46
- shouldSetIsArrayFalse: true,
47
- shouldSetIsArrayTrue: false,
48
- message: "mismatch not array prop",
49
- },
50
- ];
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUHJvcGVydHlSZXR1cm5pbmdBcnJheVNob3VsZFNldEFycmF5LnRlc3REYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL2FwaVByb3BlcnR5UmV0dXJuaW5nQXJyYXlTaG91bGRTZXRBcnJheS9hcGlQcm9wZXJ0eVJldHVybmluZ0FycmF5U2hvdWxkU2V0QXJyYXkudGVzdERhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxTQUFTLEdBQUc7SUFDckI7UUFDSSxVQUFVLEVBQUU7Ozt1Q0FHbUI7UUFDL0IscUJBQXFCLEVBQUUsS0FBSztRQUM1QixvQkFBb0IsRUFBRSxLQUFLO1FBQzNCLE9BQU8sRUFBRSxRQUFRO0tBQ3BCO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7Ozs0Q0FHd0I7UUFDcEMscUJBQXFCLEVBQUUsS0FBSztRQUM1QixvQkFBb0IsRUFBRSxLQUFLO1FBQzNCLE9BQU8sRUFBRSxRQUFRO0tBQ3BCO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7Ozs0Q0FHd0I7UUFDcEMscUJBQXFCLEVBQUUsS0FBSztRQUM1QixvQkFBb0IsRUFBRSxJQUFJO1FBQzFCLE9BQU8sRUFBRSx3QkFBd0I7S0FDcEM7SUFDRDtRQUNJLFVBQVUsRUFBRTs7OzRDQUd3QjtRQUNwQyxxQkFBcUIsRUFBRSxLQUFLO1FBQzVCLG9CQUFvQixFQUFFLElBQUk7UUFDMUIsT0FBTyxFQUFFLGdCQUFnQjtLQUM1QjtJQUNEO1FBQ0ksVUFBVSxFQUFFOzs7cUNBR2lCO1FBQzdCLHFCQUFxQixFQUFFLElBQUk7UUFDM0Isb0JBQW9CLEVBQUUsS0FBSztRQUMzQixPQUFPLEVBQUUseUJBQXlCO0tBQ3JDO0NBQ0osQ0FBQyJ9
@@ -1,5 +0,0 @@
1
- export declare const testCases: {
2
- moduleCode: string;
3
- shouldUseApiTagsDecorator: boolean;
4
- message: string;
5
- }[];
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.testCases = void 0;
4
- exports.testCases = [
5
- {
6
- moduleCode: `
7
- @ApiTags("my-tag")
8
- @Controller("my-controller")
9
- class TestClass {
10
- }`,
11
- shouldUseApiTagsDecorator: false,
12
- message: "all good state",
13
- },
14
- {
15
- moduleCode: `
16
- @Controller("my-controller")
17
- class TestClass {
18
- }`,
19
- shouldUseApiTagsDecorator: true,
20
- message: "missing tag",
21
- },
22
- {
23
- moduleCode: `
24
- class TestClass {
25
- }`,
26
- shouldUseApiTagsDecorator: false,
27
- message: "not a controller",
28
- },
29
- ];
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlckRlY29yYXRlZEhhc0FwaVRhZ3MudGVzdERhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvY29udHJvbGxlckRlY29yYXRlZEhhc0FwaVRhZ3MvY29udHJvbGxlckRlY29yYXRlZEhhc0FwaVRhZ3MudGVzdERhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxTQUFTLEdBQUc7SUFDckI7UUFDSSxVQUFVLEVBQUU7Ozs7UUFJWjtRQUNBLHlCQUF5QixFQUFFLEtBQUs7UUFDaEMsT0FBTyxFQUFFLGdCQUFnQjtLQUM1QjtJQUNEO1FBQ0ksVUFBVSxFQUFFOzs7UUFHWjtRQUNBLHlCQUF5QixFQUFFLElBQUk7UUFDL0IsT0FBTyxFQUFFLGFBQWE7S0FDekI7SUFDRDtRQUNJLFVBQVUsRUFBRTs7UUFFWjtRQUNBLHlCQUF5QixFQUFFLEtBQUs7UUFDaEMsT0FBTyxFQUFFLGtCQUFrQjtLQUM5QjtDQUNKLENBQUMifQ==
@@ -1,5 +0,0 @@
1
- export declare const testCases: {
2
- moduleCode: string;
3
- hasMismatch: boolean;
4
- message: string;
5
- }[];
@@ -1,82 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.testCases = void 0;
4
- exports.testCases = [
5
- {
6
- moduleCode: `export const MyOtherInjectableProvider: Provider = {
7
- provide: MyOtherInjectable,
8
- useFactory: async (
9
- config: MyService
10
- ): Promise<MyOtherInjectable> => {
11
- return new MyOtherInjectable()
12
- },
13
- inject: [MyService],
14
- };`,
15
- hasMismatch: false,
16
- message: "one injected, one param",
17
- },
18
- {
19
- moduleCode: `export const MyOtherInjectableProvider: NotAProvider = {
20
- provide: MyOtherInjectable,
21
- useFactory: async (
22
- config: MyService
23
- ): Promise<MyOtherInjectable> => {
24
- return new MyOtherInjectable()
25
- },
26
- inject: [MyService],
27
- };`,
28
- hasMismatch: false,
29
- message: "not a nest provider",
30
- },
31
- {
32
- moduleCode: `export const MyOtherInjectableProvider: Provider = {
33
- provide: MyOtherInjectable,
34
- useFactory: async (
35
- ): Promise<MyOtherInjectable> => {
36
- return new MyOtherInjectable()
37
- },
38
- inject: [],
39
- };`,
40
- hasMismatch: false,
41
- message: "empty inject, no params",
42
- },
43
- {
44
- moduleCode: `export const MyOtherInjectableProvider: Provider = {
45
- provide: MyOtherInjectable,
46
- useFactory: async (
47
- ): Promise<MyOtherInjectable> => {
48
- return new MyOtherInjectable()
49
- }
50
- };`,
51
- hasMismatch: false,
52
- message: "no inject, no params",
53
- },
54
- {
55
- moduleCode: `export const MyOtherInjectableProvider: Provider = {
56
- provide: MyOtherInjectable,
57
- useFactory: async (
58
- config: MyService
59
- ): Promise<MyOtherInjectable> => {
60
- return new MyOtherInjectable()
61
- },
62
- inject: [MyService,SecondService],
63
- };`,
64
- hasMismatch: true,
65
- message: "two injected, one param",
66
- },
67
- {
68
- moduleCode: `export const MyOtherInjectableProvider: Provider = {
69
- provide: MyOtherInjectable,
70
- useFactory: async (
71
- config: MyService,
72
- configTwo: MySecondService
73
- ): Promise<MyOtherInjectable> => {
74
- return new MyOtherInjectable()
75
- },
76
- inject: [MyService],
77
- };`,
78
- hasMismatch: true,
79
- message: "one injected, two param",
80
- },
81
- ];
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvdmlkZXJJbmplY3RlZFNob3VsZE1hdGNoRmFjdG9yeS50ZXN0RGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9wcm92aWRlckluamVjdGVkU2hvdWxkTWF0Y2hGYWN0b3J5L1Byb3ZpZGVySW5qZWN0ZWRTaG91bGRNYXRjaEZhY3RvcnkudGVzdERhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxTQUFTLEdBQUc7SUFDckI7UUFDSSxVQUFVLEVBQUU7Ozs7Ozs7O09BUWI7UUFDQyxXQUFXLEVBQUUsS0FBSztRQUNsQixPQUFPLEVBQUUseUJBQXlCO0tBQ3JDO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7Ozs7Ozs7O09BUWI7UUFDQyxXQUFXLEVBQUUsS0FBSztRQUNsQixPQUFPLEVBQUUscUJBQXFCO0tBQ2pDO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7Ozs7Ozs7T0FPYjtRQUNDLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLE9BQU8sRUFBRSx5QkFBeUI7S0FDckM7SUFFRDtRQUNJLFVBQVUsRUFBRTs7Ozs7O09BTWI7UUFDQyxXQUFXLEVBQUUsS0FBSztRQUNsQixPQUFPLEVBQUUsc0JBQXNCO0tBQ2xDO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7Ozs7Ozs7O09BUWI7UUFDQyxXQUFXLEVBQUUsSUFBSTtRQUNqQixPQUFPLEVBQUUseUJBQXlCO0tBQ3JDO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7Ozs7Ozs7OztPQVNiO1FBQ0MsV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTyxFQUFFLHlCQUF5QjtLQUNyQztDQUNKLENBQUMifQ==
@@ -1,6 +0,0 @@
1
- export declare const testCases: {
2
- moduleCode: string;
3
- isNewExpressionTriggered: boolean;
4
- isVariableExpressionTriggered: boolean;
5
- message: string;
6
- }[];
@@ -1,138 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.testCases = void 0;
4
- /* eslint-disable unicorn/filename-case */
5
- exports.testCases = [
6
- {
7
- moduleCode: `
8
- const options = {
9
- forbidNonWhitelisted: true,
10
- forbidUnknownValues: true,
11
- } as ValidationPipeOptions;
12
-
13
- const validationPipeA = new ValidationPipe(options);
14
-
15
- const validationPipeB = new ValidationPipe({
16
- transform: true,
17
- skipMissingProperties: false,
18
- whitelist: true,
19
- forbidNonWhitelisted: true,
20
- forbidUnknownValues: true,
21
- });
22
- `,
23
- isNewExpressionTriggered: false,
24
- isVariableExpressionTriggered: false,
25
- message: "property is present in both scenarios",
26
- },
27
- {
28
- moduleCode: `
29
- const options = {
30
- forbidNonWhitelisted: true,
31
- } as ValidationPipeOptions;
32
-
33
- const validationPipeA = new ValidationPipe(options);
34
-
35
- const validationPipeB = new ValidationPipe({
36
- transform: true,
37
- skipMissingProperties: false,
38
- whitelist: true,
39
- forbidNonWhitelisted: true,
40
- forbidUnknownValues: true,
41
- });
42
- `,
43
- isNewExpressionTriggered: false,
44
- isVariableExpressionTriggered: true,
45
- message: "property is missing in options object variable",
46
- },
47
- {
48
- moduleCode: `
49
- const options = {
50
- forbidNonWhitelisted: true,
51
- } as ThisIsNotAValidationPipeOptionsClass;
52
-
53
- const validationPipeA = new ValidationPipe(options);
54
-
55
- const validationPipeB = new ValidationPipe({
56
- transform: true,
57
- skipMissingProperties: false,
58
- whitelist: true,
59
- forbidNonWhitelisted: true,
60
- forbidUnknownValues: true,
61
- });
62
- `,
63
- isNewExpressionTriggered: false,
64
- isVariableExpressionTriggered: false,
65
- message: "not a validation options class",
66
- },
67
- {
68
- moduleCode: `
69
- const options = {
70
- forbidNonWhitelisted: true,
71
- forbidUnknownValues: true,
72
- } as ValidationPipeOptions;
73
-
74
- const validationPipeA = new ValidationPipe(options);
75
-
76
- const validationPipeB = new ValidationPipe({
77
- transform: true,
78
- skipMissingProperties: false,
79
- whitelist: true,
80
- forbidNonWhitelisted: true
81
- });
82
- `,
83
- isNewExpressionTriggered: true,
84
- isVariableExpressionTriggered: false,
85
- message: "property is missing in parameter declaration",
86
- },
87
- {
88
- moduleCode: `
89
- const options = {
90
- forbidNonWhitelisted: true,
91
- forbidUnknownValues: true,
92
- } as ValidationPipeOptions;
93
-
94
- const validationPipeA = new ValidationPipe(options);
95
-
96
- const validationPipeB = new ThisIsNotAValidationPipeClass({
97
- transform: true,
98
- skipMissingProperties: false,
99
- whitelist: true,
100
- forbidNonWhitelisted: true
101
- });
102
- `,
103
- isNewExpressionTriggered: false,
104
- isVariableExpressionTriggered: false,
105
- message: "not the right class to trigger the rule",
106
- },
107
- {
108
- moduleCode: `
109
- const options = {
110
- forbidNonWhitelisted: true,
111
- forbidUnknownValues: true,
112
- } as ValidationPipeOptions;
113
-
114
- const validationPipeA = new ValidationPipe(options);
115
-
116
- const validationPipeB = new ValidationPipe({});
117
- `,
118
- isNewExpressionTriggered: true,
119
- isVariableExpressionTriggered: false,
120
- message: "empty options object should trigger",
121
- },
122
- {
123
- moduleCode: `
124
- const options = {
125
- forbidNonWhitelisted: true,
126
- forbidUnknownValues: true,
127
- } as ValidationPipeOptions;
128
-
129
- const validationPipeA = new ValidationPipe(options);
130
-
131
- const validationPipeB = new ValidationPipe();
132
- `,
133
- isNewExpressionTriggered: false,
134
- isVariableExpressionTriggered: false,
135
- message: "empty constructor should not trigger the rule",
136
- },
137
- ];
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS50ZXN0RGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9zaG91bGRTcGVjaWZ5Rm9yYmlkVW5rbm93blZhbHVlcy9ydWxlLnRlc3REYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDBDQUEwQztBQUM3QixRQUFBLFNBQVMsR0FBRztJQUNyQjtRQUNJLFVBQVUsRUFBRTs7Ozs7Ozs7Ozs7Ozs7O1NBZVg7UUFDRCx3QkFBd0IsRUFBRSxLQUFLO1FBQy9CLDZCQUE2QixFQUFFLEtBQUs7UUFDcEMsT0FBTyxFQUFFLHVDQUF1QztLQUNuRDtJQUNEO1FBQ0ksVUFBVSxFQUFFOzs7Ozs7Ozs7Ozs7OztTQWNYO1FBQ0Qsd0JBQXdCLEVBQUUsS0FBSztRQUMvQiw2QkFBNkIsRUFBRSxJQUFJO1FBQ25DLE9BQU8sRUFBRSxnREFBZ0Q7S0FDNUQ7SUFDRDtRQUNJLFVBQVUsRUFBRTs7Ozs7Ozs7Ozs7Ozs7U0FjWDtRQUNELHdCQUF3QixFQUFFLEtBQUs7UUFDL0IsNkJBQTZCLEVBQUUsS0FBSztRQUNwQyxPQUFPLEVBQUUsZ0NBQWdDO0tBQzVDO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7Ozs7Ozs7Ozs7Ozs7O1NBY1g7UUFDRCx3QkFBd0IsRUFBRSxJQUFJO1FBQzlCLDZCQUE2QixFQUFFLEtBQUs7UUFDcEMsT0FBTyxFQUFFLDhDQUE4QztLQUMxRDtJQUNEO1FBQ0ksVUFBVSxFQUFFOzs7Ozs7Ozs7Ozs7OztTQWNYO1FBQ0Qsd0JBQXdCLEVBQUUsS0FBSztRQUMvQiw2QkFBNkIsRUFBRSxLQUFLO1FBQ3BDLE9BQU8sRUFBRSx5Q0FBeUM7S0FDckQ7SUFDRDtRQUNJLFVBQVUsRUFBRTs7Ozs7Ozs7O1NBU1g7UUFDRCx3QkFBd0IsRUFBRSxJQUFJO1FBQzlCLDZCQUE2QixFQUFFLEtBQUs7UUFDcEMsT0FBTyxFQUFFLHFDQUFxQztLQUNqRDtJQUNEO1FBQ0ksVUFBVSxFQUFFOzs7Ozs7Ozs7U0FTWDtRQUNELHdCQUF3QixFQUFFLEtBQUs7UUFDL0IsNkJBQTZCLEVBQUUsS0FBSztRQUNwQyxPQUFPLEVBQUUsK0NBQStDO0tBQzNEO0NBQ0osQ0FBQyJ9