@darraghor/eslint-plugin-nestjs-typed 3.22.5 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -22
- package/dist/fixtures/example.controller.js +3 -4
- package/dist/fixtures/example.module.js +3 -4
- package/dist/fixtures/file.js +2 -1
- package/dist/fixtures/providerArray.module.js +3 -4
- package/dist/rules/allPropertiesAreWhitelisted/allPropertiesAreWhitelisted.js +3 -5
- package/dist/rules/allPropertiesHaveExplicitDefined/allPropertiesHaveExplicitDefined.js +6 -8
- package/dist/rules/apiEnumPropertyBestPractices/apiEnumPropertyBestPractices.js +1 -2
- package/dist/rules/apiMethodsShouldBeGuarded/apiMethodsShouldBeGuarded.js +3 -3
- package/dist/rules/apiMethodsShouldSpecifyApiOperation/apiMethodsShouldSpecifyApiOperation.js +1 -2
- package/dist/rules/apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.js +1 -2
- package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.js +1 -2
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/apiPropertyReturningArrayShouldSetArray.js +8 -7
- package/dist/rules/controllerDecoratedHasApiTags/controllerDecoratedHasApiTags.js +1 -2
- package/dist/rules/injectablesShouldBeProvided/injectableShouldBeProvided.js +18 -11
- package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.js +25 -26
- package/dist/rules/providerInjectedShouldMatchFactory/ProviderInjectedShouldMatchFactory.js +7 -7
- package/dist/rules/shouldSpecifyForbidUnknownValues/shouldSpecifyForbidUnknownValuesRule.js +16 -15
- package/dist/rules/sortModuleMetadataArrays/sortModuleMetadataArrays.js +20 -12
- package/dist/rules/validateNestedOfArrayShouldSetEach/validateNestedOfArrayShouldSetEach.js +5 -7
- package/dist/rules/validateNonPrimitiveNeedsTypeDecorator/validateNonPrimitiveNeedsDecorators.js +15 -10
- package/dist/utils/files/fileEnumerationWrapper.js +1 -1
- package/dist/utils/files/isFilteredPath.js +2 -2
- package/dist/utils/nestModules/nestModuleAstParser.js +6 -12
- package/dist/utils/nestModules/nestProvidedInjectableMapper.js +6 -2
- package/dist/utils/nestModules/nestProviderAstParser.js +3 -5
- package/dist/utils/typedTokenHelpers.js +20 -23
- package/package.json +20 -21
- package/dist/configs/index.d.ts +0 -44
- package/dist/configs/noSwagger.d.ts +0 -15
- package/dist/configs/recommended.d.ts +0 -28
- package/dist/fixtures/Controller.stub.d.ts +0 -1
- package/dist/fixtures/Injectable.stub.d.ts +0 -1
- package/dist/fixtures/Module.stub.d.ts +0 -1
- package/dist/fixtures/NonFactoryDecorator.stub.d.ts +0 -1
- package/dist/fixtures/example.controller.d.ts +0 -2
- package/dist/fixtures/example.customprovider.d.ts +0 -5
- package/dist/fixtures/example.module.d.ts +0 -2
- package/dist/fixtures/example.providedClass.provider.d.ts +0 -3
- package/dist/fixtures/example.provider.d.ts +0 -3
- package/dist/fixtures/file.d.ts +0 -0
- package/dist/fixtures/providerArray.module.d.ts +0 -2
- package/dist/index.d.ts +0 -103
- package/dist/rules/allPropertiesAreWhitelisted/allPropertiesAreWhitelisted.d.ts +0 -5
- package/dist/rules/allPropertiesHaveExplicitDefined/allPropertiesHaveExplicitDefined.d.ts +0 -5
- package/dist/rules/apiEnumPropertyBestPractices/apiEnumPropertyBestPractices.d.ts +0 -8
- package/dist/rules/apiEnumPropertyBestPractices/enumTestResultModel.d.ts +0 -7
- package/dist/rules/apiMethodsShouldBeGuarded/apiMethodsShouldBeGuarded.d.ts +0 -6
- package/dist/rules/apiMethodsShouldSpecifyApiOperation/apiMethodsShouldSpecifyApiOperation.d.ts +0 -6
- package/dist/rules/apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.d.ts +0 -6
- package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.d.ts +0 -7
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/apiPropertyReturningArrayShouldSetArray.d.ts +0 -7
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/arraySetResultModel.d.ts +0 -5
- package/dist/rules/controllerDecoratedHasApiTags/controllerDecoratedHasApiTags.d.ts +0 -6
- package/dist/rules/index.d.ts +0 -58
- package/dist/rules/injectablesShouldBeProvided/injectableShouldBeProvided.d.ts +0 -12
- package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.d.ts +0 -23
- package/dist/rules/paramDecoratorNameMatchesRouteParam/rule.testData.d.ts +0 -10
- package/dist/rules/providerInjectedShouldMatchFactory/ProviderInjectedShouldMatchFactory.d.ts +0 -6
- package/dist/rules/shouldSpecifyForbidUnknownValues/shouldSpecifyForbidUnknownValuesRule.d.ts +0 -10
- package/dist/rules/sortModuleMetadataArrays/sortModuleMetadataArrays.d.ts +0 -10
- package/dist/rules/validateNestedOfArrayShouldSetEach/arraySetResultModel.d.ts +0 -5
- package/dist/rules/validateNestedOfArrayShouldSetEach/validateNestedOfArrayShouldSetEach.d.ts +0 -7
- package/dist/rules/validateNonPrimitiveNeedsTypeDecorator/validateNonPrimitiveNeedsDecorators.d.ts +0 -12
- package/dist/testing/fixtureSetup.d.ts +0 -1
- package/dist/testing/preRun.d.ts +0 -1
- package/dist/utils/ast.d.ts +0 -2
- package/dist/utils/createRule.d.ts +0 -2
- package/dist/utils/files/fileEnumerationWrapper.d.ts +0 -6
- package/dist/utils/files/isFilteredPath.d.ts +0 -4
- package/dist/utils/nestModules/models/NestProvidedInjectablesMap.d.ts +0 -5
- package/dist/utils/nestModules/nestModuleAstParser.d.ts +0 -7
- package/dist/utils/nestModules/nestProvidedInjectableMapper.d.ts +0 -12
- package/dist/utils/nestModules/nestProvidedInjectableMapper.testData.d.ts +0 -7
- package/dist/utils/nestModules/nestProviderAstParser.d.ts +0 -7
- package/dist/utils/typedTokenHelpers.d.ts +0 -59
- package/dist/utils/wellKnownSelectors.d.ts +0 -1
package/README.md
CHANGED
|
@@ -22,28 +22,28 @@ Please check the recommended list (https://github.com/darraghoriordan/eslint-plu
|
|
|
22
22
|
|
|
23
23
|
Some rules are opinionated and have to be turned on explicitly (if they're not in the recommended config pack).
|
|
24
24
|
|
|
25
|
-
| Category | Rule
|
|
26
|
-
| ------------------------------------- |
|
|
27
|
-
| Nest Modules and Dependency Injection | provided-injected-should-match-factory-parameters
|
|
28
|
-
| | injectable-should-be-provided
|
|
29
|
-
| |
|
|
30
|
-
| Nest Swagger | api-property-matches-property-optionality
|
|
31
|
-
| | controllers-should-supply-api-tags
|
|
32
|
-
| | api-method-should-specify-api-response
|
|
33
|
-
| | api-method-should-specify-api-operation
|
|
34
|
-
| | api-enum-property-best-practices
|
|
35
|
-
| | api-property-returning-array-should-set-array
|
|
36
|
-
| |
|
|
37
|
-
| Preventing bugs | param-decorator-name-matches-route-param
|
|
38
|
-
| | validate-nested-of-array-should-set-each
|
|
39
|
-
| | validated-non-primitive-property-needs-type-decorator | Y |
|
|
40
|
-
| | all-properties-are-whitelisted
|
|
41
|
-
| | all-properties-have-explicit-defined
|
|
42
|
-
| |
|
|
43
|
-
| Security | should-
|
|
44
|
-
| | api-methods-should-be-guarded
|
|
45
|
-
| |
|
|
46
|
-
| Code Consistency | sort-module-metadata-arrays
|
|
25
|
+
| Category | Rule | is in recommended config |
|
|
26
|
+
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------ |
|
|
27
|
+
| Nest Modules and Dependency Injection | [`provided-injected-should-match-factory-parameters`](./src/docs/rules/provided-injected-should-match-factory-parameters.md) | Y |
|
|
28
|
+
| | [`injectable-should-be-provided`](./src/docs/rules/injectable-should-be-provided.md) | Y |
|
|
29
|
+
| | | |
|
|
30
|
+
| Nest Swagger | [`api-property-matches-property-optionality`](./src/docs/rules/api-property-matches-property-optionality.md) | Y |
|
|
31
|
+
| | [`controllers-should-supply-api-tags`](./src/docs/rules/controllers-should-supply-api-tags.md) | Y |
|
|
32
|
+
| | [`api-method-should-specify-api-response`](./src/docs/rules/api-method-should-specify-api-response.md) | N |
|
|
33
|
+
| | [`api-method-should-specify-api-operation`](./src/docs/rules/api-method-should-specify-api-operation.md) | Y |
|
|
34
|
+
| | [`api-enum-property-best-practices`](./src/docs/rules/api-enum-property-best-practices.md) | Y |
|
|
35
|
+
| | [`api-property-returning-array-should-set-array`](./src/docs/rules/api-property-returning-array-should-set-array.md) | Y |
|
|
36
|
+
| | | |
|
|
37
|
+
| Preventing bugs | [`param-decorator-name-matches-route-param`](./src/docs/rules/param-decorator-name-matches-route-param.md) | Y |
|
|
38
|
+
| | [`validate-nested-of-array-should-set-each`](./src/docs/rules/validate-nested-of-array-should-set-each.md) | Y |
|
|
39
|
+
| | [`validated-non-primitive-property-needs-type-decorator`](./src/docs/rules/validated-non-primitive-property-needs-type-decorator.md) | Y |
|
|
40
|
+
| | [`all-properties-are-whitelisted`](./src/docs/rules/all-properties-are-whitelisted.md) | Y |
|
|
41
|
+
| | [`all-properties-have-explicit-defined`](./src/docs/rules/all-properties-have-explicit-defined.md) | Y |
|
|
42
|
+
| | | |
|
|
43
|
+
| Security | [`validation-pipe-should-forbid-unknown`](./src/docs/rules/validation-pipe-should-use-forbid-unknown.md) | Y |
|
|
44
|
+
| | [`api-methods-should-be-guarded`](./src/docs/rules/api-methods-should-be-guarded.md) | N |
|
|
45
|
+
| | | |
|
|
46
|
+
| Code Consistency | [`sort-module-metadata-arrays`](./src/docs/rules/sort-module-metadata-arrays.md) | N |
|
|
47
47
|
|
|
48
48
|
Detailed docs are available here: https://github.com/darraghoriordan/eslint-plugin-nestjs-typed/tree/main/src/docs/rules
|
|
49
49
|
|
|
@@ -102,6 +102,8 @@ yarn add class-validator
|
|
|
102
102
|
|
|
103
103
|
## To configure
|
|
104
104
|
|
|
105
|
+
You can see how the rules are used in this NestJS project: https://github.com/darraghoriordan/use-miller
|
|
106
|
+
|
|
105
107
|
Then update your eslint with the plugin import and add the recommended rule set
|
|
106
108
|
|
|
107
109
|
```ts
|
|
@@ -8,10 +8,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.ExampleController = void 0;
|
|
10
10
|
const Controller_stub_1 = require("./Controller.stub");
|
|
11
|
-
let ExampleController = class ExampleController {
|
|
11
|
+
let ExampleController = exports.ExampleController = class ExampleController {
|
|
12
12
|
};
|
|
13
|
-
ExampleController = __decorate([
|
|
13
|
+
exports.ExampleController = ExampleController = __decorate([
|
|
14
14
|
(0, Controller_stub_1.Controller)()
|
|
15
15
|
], ExampleController);
|
|
16
|
-
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS5jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpeHR1cmVzL2V4YW1wbGUuY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSx1REFBNkM7QUFHdEMsSUFBTSxpQkFBaUIsR0FBdkIsTUFBTSxpQkFBaUI7Q0FBRyxDQUFBO0FBQXBCLGlCQUFpQjtJQUQ3QixJQUFBLDRCQUFVLEdBQUU7R0FDQSxpQkFBaUIsQ0FBRztBQUFwQiw4Q0FBaUIifQ==
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS5jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpeHR1cmVzL2V4YW1wbGUuY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSx1REFBNkM7QUFHdEMsSUFBTSxpQkFBaUIsK0JBQXZCLE1BQU0saUJBQWlCO0NBQUcsQ0FBQTs0QkFBcEIsaUJBQWlCO0lBRDdCLElBQUEsNEJBQVUsR0FBRTtHQUNBLGlCQUFpQixDQUFHIn0=
|
|
@@ -14,14 +14,13 @@ const Module_stub_1 = require("./Module.stub");
|
|
|
14
14
|
const example_provider_1 = __importDefault(require("./example.provider"));
|
|
15
15
|
const example_controller_1 = require("./example.controller");
|
|
16
16
|
const example_customprovider_1 = require("./example.customprovider");
|
|
17
|
-
let ExampleModule = class ExampleModule {
|
|
17
|
+
let ExampleModule = exports.ExampleModule = class ExampleModule {
|
|
18
18
|
};
|
|
19
|
-
ExampleModule = __decorate([
|
|
19
|
+
exports.ExampleModule = ExampleModule = __decorate([
|
|
20
20
|
(0, Module_stub_1.Module)({
|
|
21
21
|
imports: [],
|
|
22
22
|
controllers: [example_controller_1.ExampleController],
|
|
23
23
|
providers: [example_provider_1.default, example_customprovider_1.ExampleProvider],
|
|
24
24
|
})
|
|
25
25
|
], ExampleModule);
|
|
26
|
-
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZml4dHVyZXMvZXhhbXBsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQXFDO0FBQ3JDLDBFQUFpRTtBQUNqRSw2REFBdUQ7QUFDdkQscUVBQXlEO0FBT2xELElBQU0sYUFBYSxHQUFuQixNQUFNLGFBQWE7Q0FBRyxDQUFBO0FBQWhCLGFBQWE7SUFMekIsSUFBQSxvQkFBTSxFQUFDO1FBQ0osT0FBTyxFQUFFLEVBQUU7UUFDWCxXQUFXLEVBQUUsQ0FBQyxzQ0FBaUIsQ0FBQztRQUNoQyxTQUFTLEVBQUUsQ0FBQywwQkFBK0IsRUFBRSx3Q0FBZSxDQUFDO0tBQ2hFLENBQUM7R0FDVyxhQUFhLENBQUc7QUFBaEIsc0NBQWEifQ==
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZml4dHVyZXMvZXhhbXBsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQXFDO0FBQ3JDLDBFQUFpRTtBQUNqRSw2REFBdUQ7QUFDdkQscUVBQXlEO0FBT2xELElBQU0sYUFBYSwyQkFBbkIsTUFBTSxhQUFhO0NBQUcsQ0FBQTt3QkFBaEIsYUFBYTtJQUx6QixJQUFBLG9CQUFNLEVBQUM7UUFDSixPQUFPLEVBQUUsRUFBRTtRQUNYLFdBQVcsRUFBRSxDQUFDLHNDQUFpQixDQUFDO1FBQ2hDLFNBQVMsRUFBRSxDQUFDLDBCQUErQixFQUFFLHdDQUFlLENBQUM7S0FDaEUsQ0FBQztHQUNXLGFBQWEsQ0FBRyJ9
|
package/dist/fixtures/file.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
3
|
/* eslint-disable unicorn/no-empty-file */
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMENBQTBDIn0=
|
|
@@ -13,13 +13,12 @@ exports.ProviderArrayModule = void 0;
|
|
|
13
13
|
const Module_stub_1 = require("./Module.stub");
|
|
14
14
|
const example_provider_1 = __importDefault(require("./example.provider"));
|
|
15
15
|
const providers = [example_provider_1.default];
|
|
16
|
-
let ProviderArrayModule = class ProviderArrayModule {
|
|
16
|
+
let ProviderArrayModule = exports.ProviderArrayModule = class ProviderArrayModule {
|
|
17
17
|
};
|
|
18
|
-
ProviderArrayModule = __decorate([
|
|
18
|
+
exports.ProviderArrayModule = ProviderArrayModule = __decorate([
|
|
19
19
|
(0, Module_stub_1.Module)({
|
|
20
20
|
imports: [],
|
|
21
21
|
providers: providers,
|
|
22
22
|
})
|
|
23
23
|
], ProviderArrayModule);
|
|
24
|
-
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJBcnJheS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZml4dHVyZXMvcHJvdmlkZXJBcnJheS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQXFDO0FBQ3JDLDBFQUFpRTtBQUVqRSxNQUFNLFNBQVMsR0FBRyxDQUFDLDBCQUErQixDQUFDLENBQUM7QUFNN0MsSUFBTSxtQkFBbUIsR0FBekIsTUFBTSxtQkFBbUI7Q0FBRyxDQUFBO0FBQXRCLG1CQUFtQjtJQUovQixJQUFBLG9CQUFNLEVBQUM7UUFDSixPQUFPLEVBQUUsRUFBRTtRQUNYLFNBQVMsRUFBRSxTQUFTO0tBQ3ZCLENBQUM7R0FDVyxtQkFBbUIsQ0FBRztBQUF0QixrREFBbUIifQ==
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJBcnJheS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZml4dHVyZXMvcHJvdmlkZXJBcnJheS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQXFDO0FBQ3JDLDBFQUFpRTtBQUVqRSxNQUFNLFNBQVMsR0FBRyxDQUFDLDBCQUErQixDQUFDLENBQUM7QUFNN0MsSUFBTSxtQkFBbUIsaUNBQXpCLE1BQU0sbUJBQW1CO0NBQUcsQ0FBQTs4QkFBdEIsbUJBQW1CO0lBSi9CLElBQUEsb0JBQU0sRUFBQztRQUNKLE9BQU8sRUFBRSxFQUFFO1FBQ1gsU0FBUyxFQUFFLFNBQVM7S0FDdkIsQ0FBQztHQUNXLG1CQUFtQixDQUFHIn0=
|
|
@@ -8,7 +8,6 @@ const rule = (0, createRule_1.createRule)({
|
|
|
8
8
|
meta: {
|
|
9
9
|
docs: {
|
|
10
10
|
description: "Enforce all properties are whitelisted",
|
|
11
|
-
recommended: "error",
|
|
12
11
|
requiresTypeChecking: false,
|
|
13
12
|
},
|
|
14
13
|
messages: {
|
|
@@ -16,14 +15,13 @@ const rule = (0, createRule_1.createRule)({
|
|
|
16
15
|
"missing-property-decorator": "Property has no class-validator decorator (use @Allow() if you don't need a validation)",
|
|
17
16
|
},
|
|
18
17
|
type: "problem",
|
|
19
|
-
schema:
|
|
18
|
+
schema: [],
|
|
20
19
|
},
|
|
21
20
|
defaultOptions: [],
|
|
22
21
|
create: function (context) {
|
|
23
22
|
return {
|
|
24
23
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
25
24
|
ClassDeclaration(node) {
|
|
26
|
-
var _a;
|
|
27
25
|
const program = typedTokenHelpers_1.typedTokenHelpers.getRootProgram(node);
|
|
28
26
|
const withDecorator = [];
|
|
29
27
|
const withoutDecorator = [];
|
|
@@ -31,7 +29,7 @@ const rule = (0, createRule_1.createRule)({
|
|
|
31
29
|
if (element.type !== utils_1.AST_NODE_TYPES.PropertyDefinition) {
|
|
32
30
|
continue;
|
|
33
31
|
}
|
|
34
|
-
const hasDecorator =
|
|
32
|
+
const hasDecorator = element.decorators?.some((decorator) => decorator.expression.type ===
|
|
35
33
|
utils_1.AST_NODE_TYPES.CallExpression &&
|
|
36
34
|
decorator.expression.callee.type ===
|
|
37
35
|
utils_1.AST_NODE_TYPES.Identifier &&
|
|
@@ -56,4 +54,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
56
54
|
},
|
|
57
55
|
});
|
|
58
56
|
exports.default = rule;
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsUHJvcGVydGllc0FyZVdoaXRlbGlzdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL2FsbFByb3BlcnRpZXNBcmVXaGl0ZWxpc3RlZC9hbGxQcm9wZXJ0aWVzQXJlV2hpdGVsaXN0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxvREFBa0U7QUFDbEUsdURBQWtEO0FBQ2xELHFFQUFnRTtBQUVoRSxNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQW1DO0lBQ3RELElBQUksRUFBRSxnQ0FBZ0M7SUFDdEMsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUFFLHdDQUF3QztZQUNyRCxvQkFBb0IsRUFBRSxLQUFLO1NBQzlCO1FBQ0QsUUFBUSxFQUFFO1lBQ04sZ0VBQWdFO1lBQ2hFLDRCQUE0QixFQUN4Qix5RkFBeUY7U0FDaEc7UUFDRCxJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRSxFQUFFO0tBQ2I7SUFDRCxjQUFjLEVBQUUsRUFBRTtJQUNsQixNQUFNLEVBQUUsVUFBVSxPQUFPO1FBQ3JCLE9BQU87WUFDSCxnRUFBZ0U7WUFDaEUsZ0JBQWdCLENBQUMsSUFBK0I7Z0JBQzVDLE1BQU0sT0FBTyxHQUFHLHFDQUFpQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkQsTUFBTSxhQUFhLEdBQWtDLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxnQkFBZ0IsR0FBa0MsRUFBRSxDQUFDO2dCQUMzRCxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUNsQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssc0JBQWMsQ0FBQyxrQkFBa0IsRUFBRTt3QkFDcEQsU0FBUztxQkFDWjtvQkFDRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksQ0FDekMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUNWLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSTt3QkFDckIsc0JBQWMsQ0FBQyxjQUFjO3dCQUNqQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJOzRCQUM1QixzQkFBYyxDQUFDLFVBQVU7d0JBQzdCLHFDQUFpQixDQUFDLGtDQUFrQyxDQUNoRCxPQUFPLEVBQ1AsU0FBUyxDQUNaLENBQ1IsQ0FBQztvQkFDRixJQUFJLFlBQVksRUFBRTt3QkFDZCxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUMvQjt5QkFBTTt3QkFDSCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQ2xDO2lCQUNKO2dCQUNELElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDekQsS0FBSyxNQUFNLE9BQU8sSUFBSSxnQkFBZ0IsRUFBRTt3QkFDcEMsT0FBTyxDQUFDLE1BQU0sQ0FBQzs0QkFDWCxJQUFJLEVBQUUsT0FBTzs0QkFDYixTQUFTLEVBQUUsNEJBQTRCO3lCQUMxQyxDQUFDLENBQUM7cUJBQ047aUJBQ0o7WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxrQkFBZSxJQUFJLENBQUMifQ==
|
|
@@ -4,7 +4,6 @@ const utils_1 = require("@typescript-eslint/utils");
|
|
|
4
4
|
const type_utils_1 = require("@typescript-eslint/type-utils");
|
|
5
5
|
const ast_1 = require("../../utils/ast");
|
|
6
6
|
const createRule_1 = require("../../utils/createRule");
|
|
7
|
-
const eslint_utils_1 = require("@typescript-eslint/utils/dist/eslint-utils");
|
|
8
7
|
const typedTokenHelpers_1 = require("../../utils/typedTokenHelpers");
|
|
9
8
|
const rule = (0, createRule_1.createRule)({
|
|
10
9
|
name: "all-properties-have-explicit-defined",
|
|
@@ -20,12 +19,11 @@ const rule = (0, createRule_1.createRule)({
|
|
|
20
19
|
"conflicting-defined-decorators": "Properties can have @IsDefined() or @IsOptional() but not both",
|
|
21
20
|
},
|
|
22
21
|
type: "problem",
|
|
23
|
-
schema:
|
|
22
|
+
schema: [],
|
|
24
23
|
},
|
|
25
24
|
defaultOptions: [],
|
|
26
25
|
create: function (context) {
|
|
27
|
-
const service =
|
|
28
|
-
const { esTreeNodeToTSNodeMap } = service;
|
|
26
|
+
const service = utils_1.ESLintUtils.getParserServices(context);
|
|
29
27
|
const checker = service.program.getTypeChecker();
|
|
30
28
|
return {
|
|
31
29
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
@@ -62,7 +60,7 @@ const rule = (0, createRule_1.createRule)({
|
|
|
62
60
|
continue;
|
|
63
61
|
}
|
|
64
62
|
// get the type of the property
|
|
65
|
-
const type = getType(propertyDefinition.typeAnnotation.typeAnnotation,
|
|
63
|
+
const type = getType(propertyDefinition.typeAnnotation.typeAnnotation, service, checker);
|
|
66
64
|
// if the type is nullable, it should be optional
|
|
67
65
|
if (propertyDefinition.optional ||
|
|
68
66
|
(0, type_utils_1.isNullableType)(type)) {
|
|
@@ -89,8 +87,8 @@ const rule = (0, createRule_1.createRule)({
|
|
|
89
87
|
},
|
|
90
88
|
});
|
|
91
89
|
exports.default = rule;
|
|
92
|
-
function getType(typeNode,
|
|
93
|
-
const tsNode = esTreeNodeToTSNodeMap.get(typeNode);
|
|
90
|
+
function getType(typeNode, service, checker) {
|
|
91
|
+
const tsNode = service.esTreeNodeToTSNodeMap.get(typeNode);
|
|
94
92
|
const type = checker.getTypeAtLocation(tsNode);
|
|
95
93
|
return type;
|
|
96
94
|
}
|
|
@@ -128,4 +126,4 @@ function getDecoratorsStatus(propertyDefinition) {
|
|
|
128
126
|
hasIsOptionalDecorator,
|
|
129
127
|
};
|
|
130
128
|
}
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsUHJvcGVydGllc0hhdmVFeHBsaWNpdERlZmluZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvYWxsUHJvcGVydGllc0hhdmVFeHBsaWNpdERlZmluZWQvYWxsUHJvcGVydGllc0hhdmVFeHBsaWNpdERlZmluZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxvREFLa0M7QUFDbEMsOERBQTZEO0FBQzdELHlDQUF5RDtBQUN6RCx1REFBa0Q7QUFFbEQscUVBQWdFO0FBR2hFLE1BQU0sSUFBSSxHQUFHLElBQUEsdUJBQVUsRUFLckI7SUFDRSxJQUFJLEVBQUUsc0NBQXNDO0lBQzVDLElBQUksRUFBRTtRQUNGLElBQUksRUFBRTtZQUNGLFdBQVcsRUFDUCxrRUFBa0U7WUFDdEUsV0FBVyxFQUFFLE9BQTZCO1lBQzFDLG9CQUFvQixFQUFFLElBQUk7U0FDN0I7UUFDRCxRQUFRLEVBQUU7WUFDTiw4QkFBOEIsRUFDMUIsNEdBQTRHO1lBQ2hILCtCQUErQixFQUMzQix1REFBdUQ7WUFDM0QsZ0NBQWdDLEVBQzVCLGdFQUFnRTtTQUN2RTtRQUNELElBQUksRUFBRSxTQUFTO1FBQ2YsTUFBTSxFQUFFLEVBQUU7S0FDYjtJQUNELGNBQWMsRUFBRSxFQUFFO0lBQ2xCLE1BQU0sRUFBRSxVQUFVLE9BQU87UUFDckIsTUFBTSxPQUFPLEdBQUcsbUJBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2pELE9BQU87WUFDSCxnRUFBZ0U7WUFDaEUsZ0JBQWdCLENBQUMsSUFBK0I7Z0JBQzVDLE1BQU0sdUNBQXVDLEdBR3ZDLEVBQUUsQ0FBQztnQkFDVCxJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztnQkFDM0IsTUFBTSxtQkFBbUIsR0FBRyxJQUFBLDhCQUF3QixFQUFDLElBQUksQ0FBQyxD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
|
|
@@ -63,7 +63,6 @@ const rule = (0, createRule_1.createRule)({
|
|
|
63
63
|
meta: {
|
|
64
64
|
docs: {
|
|
65
65
|
description: "Enums should use the best practices for api documentation",
|
|
66
|
-
recommended: false,
|
|
67
66
|
requiresTypeChecking: false,
|
|
68
67
|
},
|
|
69
68
|
messages: {
|
|
@@ -110,4 +109,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
110
109
|
},
|
|
111
110
|
});
|
|
112
111
|
exports.default = rule;
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpRW51bVByb3BlcnR5QmVzdFByYWN0aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlFbnVtUHJvcGVydHlCZXN0UHJhY3RpY2VzL2FwaUVudW1Qcm9wZXJ0eUJlc3RQcmFjdGljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0RBQStEO0FBQy9ELHVEQUFrRDtBQUNsRCxxRUFBZ0U7QUFDaEUsK0RBQTBEO0FBRTFELE1BQU0sdUJBQXVCLEdBQUcsSUFBSSx5Q0FBbUIsQ0FBQztJQUNwRCxjQUFjLEVBQUUsS0FBSztJQUNyQixrQkFBa0IsRUFBRSxLQUFLO0lBQ3pCLDRCQUE0QixFQUFFLEtBQUs7SUFDbkMsZ0JBQWdCLEVBQUUsS0FBSztDQUMxQixDQUFDLENBQUM7QUFFSSxNQUFNLHlCQUF5QixHQUFHLENBQ3JDLElBQW1CLEVBQ25CLFVBQW1CLEVBQ0EsRUFBRTtJQUNyQixrQkFBa0I7SUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNiLE9BQU8sdUJBQXVCLENBQUM7S0FDbEM7SUFFRCwyQ0FBMkM7SUFDM0MsTUFBTSxVQUFVLEdBQUcscUNBQWlCLENBQUMsa0JBQWtCLENBQ25ELElBQW1DLEVBQ25DLENBQUMscUJBQXFCLEVBQUUsYUFBYSxDQUFDLENBQ3pDLENBQUM7SUFFRixJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sdUJBQXVCLENBQUM7S0FDbEM7SUFFRCxzR0FBc0c7SUFDdEcsTUFBTSxhQUFhLEdBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQXNDO1NBQ3RFLFNBQVMsQ0FBQyxDQUFDLENBQThCLENBQUM7SUFDL0MsSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUNoQixPQUFPLElBQUkseUNBQW1CLENBQUM7WUFDM0IsY0FBYyxFQUFFLElBQUk7WUFDcEIsa0JBQWtCLEVBQUUsSUFBSTtZQUN4Qiw0QkFBNEIsRUFBRSxL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
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.apiMethodsShouldBeGuarded = void 0;
|
|
4
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
4
5
|
const createRule_1 = require("../../utils/createRule");
|
|
5
6
|
const typedTokenHelpers_1 = require("../../utils/typedTokenHelpers");
|
|
6
7
|
const apiMethodsShouldBeGuarded = (node) => {
|
|
7
8
|
const hasApiMethodDecorator = typedTokenHelpers_1.typedTokenHelpers.nodeHasDecoratorsNamed(node, ["Get", "Post", "Put", "Delete", "Patch", "Options", "Head", "All"]);
|
|
8
9
|
const hasUseGuardsDecorator = typedTokenHelpers_1.typedTokenHelpers.nodeHasDecoratorsNamed(node, ["UseGuards"]);
|
|
9
10
|
function findClassDeclaration(node) {
|
|
10
|
-
if (node.type ===
|
|
11
|
+
if (node.type === utils_1.TSESTree.AST_NODE_TYPES.ClassDeclaration) {
|
|
11
12
|
return node;
|
|
12
13
|
}
|
|
13
14
|
if (node.parent) {
|
|
@@ -29,7 +30,6 @@ const rule = (0, createRule_1.createRule)({
|
|
|
29
30
|
meta: {
|
|
30
31
|
docs: {
|
|
31
32
|
description: "Endpoints should have authentication guards to maintain our security model.",
|
|
32
|
-
recommended: false,
|
|
33
33
|
requiresTypeChecking: false,
|
|
34
34
|
},
|
|
35
35
|
messages: {
|
|
@@ -55,4 +55,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
55
55
|
},
|
|
56
56
|
});
|
|
57
57
|
exports.default = rule;
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpTWV0aG9kc1Nob3VsZEJlR3VhcmRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlNZXRob2RzU2hvdWxkQmVHdWFyZGVkL2FwaU1ldGhvZHNTaG91bGRCZUd1YXJkZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0RBQWtEO0FBQ2xELHVEQUFrRDtBQUNsRCxxRUFBZ0U7QUFFekQsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLElBQStCLEVBQUUsRUFBRTtJQUN6RSxNQUFNLHFCQUFxQixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNsRSxJQUFJLEVBQ0osQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQ3RFLENBQUM7SUFFRixNQUFNLHFCQUFxQixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNsRSxJQUFJLEVBQ0osQ0FBQyxXQUFXLENBQUMsQ0FDaEIsQ0FBQztJQUVGLFNBQVMsb0JBQW9CLENBQ3pCLElBQW1CO1FBRW5CLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRTtZQUN4RCxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsT0FBTyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFN0MsTUFBTSxpQ0FBaUMsR0FBRyxTQUFTO1FBQy9DLENBQUMsQ0FBQyxxQ0FBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsS0FBSyxDQUFDO0lBRVosT0FBTyxDQUNILHFCQUFxQjtRQUNyQixDQUFDLHFCQUFxQjtRQUN0QixDQUFDLGlDQUFpQyxDQUNyQyxDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBbENXLFFBQUEseUJBQXlCLDZCQWtDcEM7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQWtDO0lBQ3JELElBQUksRUFBRSwrQkFBK0I7SUFDckMsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUNQLDZFQUE2RTtZQUVqRixvQkFBb0IsRUFBRSxLQUFLO1NBQzlCO1FBQ0QsUUFBUSxFQUFFO1lBQ04seUJBQXlCLEVBQ3JCLDJHQUEyRztTQUNsSDtRQUNELE1BQU0sRUFBRSxFQUFFO1FBQ1YsY0FBYyxFQUFFLEtBQUs7UUFDckIsSUFBSSxFQUFFLFlBQVk7S0FDckI7SUFDRCxjQUFjLEVBQUUsRUFBRTtJQUNsQixNQUFNLENBQUMsT0FBTztRQUNWLE9BQU87WUFDSCxnRUFBZ0U7WUFDaEUsZ0JBQWdCLENBQUMsSUFBK0I7Z0JBQzVDLElBQUksSUFBQSxpQ0FBeUIsRUFBQyxJQUFJLENBQUMsRUFBRTtvQkFDakMsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsMkJBQTJCO3FCQUN6QyxDQUFDLENBQUM7aUJBQ047WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxrQkFBZSxJQUFJLENBQUMifQ==
|
package/dist/rules/apiMethodsShouldSpecifyApiOperation/apiMethodsShouldSpecifyApiOperation.js
CHANGED
|
@@ -14,7 +14,6 @@ const rule = (0, createRule_1.createRule)({
|
|
|
14
14
|
meta: {
|
|
15
15
|
docs: {
|
|
16
16
|
description: "Api methods should at least specify the expected ApiOperation.",
|
|
17
|
-
recommended: false,
|
|
18
17
|
requiresTypeChecking: false,
|
|
19
18
|
},
|
|
20
19
|
messages: {
|
|
@@ -40,4 +39,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
40
39
|
},
|
|
41
40
|
});
|
|
42
41
|
exports.default = rule;
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpTWV0aG9kc1Nob3VsZFNwZWNpZnlBcGlPcGVyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvYXBpTWV0aG9kc1Nob3VsZFNwZWNpZnlBcGlPcGVyYXRpb24vYXBpTWV0aG9kc1Nob3VsZFNwZWNpZnlBcGlPcGVyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdURBQWtEO0FBQ2xELHFFQUFnRTtBQUV6RCxNQUFNLDZCQUE2QixHQUFHLENBQ3pDLElBQStCLEVBQ3hCLEVBQUU7SUFDVCxNQUFNLHFCQUFxQixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNsRSxJQUFJLEVBQ0osQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQ3RFLENBQUM7SUFFRixNQUFNLHdCQUF3QixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNyRSxJQUFJLEVBQ0osQ0FBQyxjQUFjLENBQUMsQ0FDbkIsQ0FBQztJQUVGLE9BQU8scUJBQXFCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztBQUM5RCxDQUFDLENBQUM7QUFkVyxRQUFBLDZCQUE2QixpQ0FjeEM7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQWtDO0lBQ3JELElBQUksRUFBRSx5Q0FBeUM7SUFDL0MsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUNQLGdFQUFnRTtZQUVwRSxvQkFBb0IsRUFBRSxLQUFLO1NBQzlCO1FBQ0QsUUFBUSxFQUFFO1lBQ04seUJBQXlCLEVBQUUsbUxBQW1MO1NBQ2pOO1FBQ0QsTUFBTSxFQUFFLEVBQUU7UUFDVixjQUFjLEVBQUUsS0FBSztRQUNyQixJQUFJLEVBQUUsWUFBWTtLQUNyQjtJQUNELGNBQWMsRUFBRSxFQUFFO0lBRWxCLE1BQU0sQ0FBQyxPQUFPO1FBQ1YsT0FBTztZQUNILGdFQUFnRTtZQUNoRSxnQkFBZ0IsQ0FBQyxJQUErQjtnQkFDNUMsSUFBSSxJQUFBLHFDQUE2QixFQUFDLElBQUksQ0FBQyxFQUFFO29CQUNyQyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNYLElBQUksRUFBRSxJQUFJO3dCQUNWLFNBQVMsRUFBRSwyQkFBMkI7cUJBQ3pDLENBQUMsQ0FBQztpQkFDTjtZQUNMLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQUVILGtCQUFlLElBQUksQ0FBQyJ9
|
|
@@ -42,7 +42,6 @@ const rule = (0, createRule_1.createRule)({
|
|
|
42
42
|
meta: {
|
|
43
43
|
docs: {
|
|
44
44
|
description: "Api methods should at least specify the expected OK response with @ApiOkResponse. But also add any error responses that might not be expected (e.g. 429)",
|
|
45
|
-
recommended: false,
|
|
46
45
|
requiresTypeChecking: false,
|
|
47
46
|
},
|
|
48
47
|
messages: {
|
|
@@ -68,4 +67,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
68
67
|
},
|
|
69
68
|
});
|
|
70
69
|
exports.default = rule;
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpTWV0aG9kc1Nob3VsZFNwZWNpZnlBcGlSZXNwb25zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlNZXRob2RzU2hvdWxkU3BlY2lmeUFwaVJlc3BvbnNlL2FwaU1ldGhvZHNTaG91bGRTcGVjaWZ5QXBpUmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdURBQWtEO0FBQ2xELHFFQUFnRTtBQUV6RCxNQUFNLDZCQUE2QixHQUFHLENBQ3pDLElBQStCLEVBQ3hCLEVBQUU7SUFDVCxNQUFNLHFCQUFxQixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNsRSxJQUFJLEVBQ0osQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQ3RFLENBQUM7SUFFRixNQUFNLHVCQUF1QixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNwRSxJQUFJLEVBQ0o7UUFDSSxhQUFhO1FBQ2IsZUFBZTtRQUNmLG9CQUFvQjtRQUNwQixxQkFBcUI7UUFDckIsc0JBQXNCO1FBQ3RCLDZCQUE2QjtRQUM3QixrQkFBa0I7UUFDbEIsdUJBQXVCO1FBQ3ZCLHlCQUF5QjtRQUN6Qiw0QkFBNEI7UUFDNUIscUJBQXFCO1FBQ3JCLGdDQUFnQztRQUNoQyx1QkFBdUI7UUFDdkIscUJBQXFCO1FBQ3JCLHNCQUFzQjtRQUN0QiwyQkFBMkI7UUFDM0IsaUJBQWlCO1FBQ2pCLDZCQUE2QjtRQUM3QiwwQkFBMEI7UUFDMUIsMkJBQTJCO1FBQzNCLCtCQUErQjtRQUMvQiw0QkFBNEI7UUFDNUIsMkJBQTJCO1FBQzNCLCtCQUErQjtRQUMvQixnQ0FBZ0M7UUFDaEMsaUNBQWlDO1FBQ2pDLG9CQUFvQjtLQUN2QixDQUNKLENBQUM7SUFFRixPQUFPLHFCQUFxQixJQUFJLENBQUMsdUJBQXVCLENBQUM7QUFDN0QsQ0FBQyxDQUFDO0FBMUNXLFFBQUEsNkJBQTZCLGlDQTBDeEM7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQWlDO0lBQ3BELElBQUksRUFBRSx3Q0FBd0M7SUFDOUMsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUNQLDBKQUEwSjtZQUU5SixvQkFBb0IsRUFBRSxLQUFLO1NBQzlCO1FBQ0QsUUFBUSxFQUFFO1lBQ04sd0JBQXdCLEVBQUUsOEtBQThLO1NBQzNNO1FBQ0QsTUFBTSxFQUFFLEVBQUU7UUFDVixjQUFjLEVBQUUsS0FBSztRQUNyQixJQUFJLEVBQUUsWUFBWTtLQUNyQjtJQUNELGNBQWMsRUFBRSxFQUFFO0lBRWxCLE1BQU0sQ0FBQyxPQUFPO1FBQ1YsT0FBTztZQUNILGdFQUFnRTtZQUNoRSxnQkFBZ0IsQ0FBQyxJQUErQjtnQkFDNUMsSUFBSSxJQUFBLHFDQUE2QixFQUFDLElBQUksQ0FBQyxFQUFFO29CQUNyQyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNYLElBQUksRUFBRSxJQUFJO3dCQUNWLFNBQVMsRUFBRSwwQkFBMEI7cUJBQ3hDLENBQUMsQ0FBQztpQkFDTjtZQUNMLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQUVILGtCQUFlLElBQUksQ0FBQyJ9
|
package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.js
CHANGED
|
@@ -20,7 +20,6 @@ const rule = (0, createRule_1.createRule)({
|
|
|
20
20
|
meta: {
|
|
21
21
|
docs: {
|
|
22
22
|
description: "Properties should have correct @ApiProperty decorators",
|
|
23
|
-
recommended: false,
|
|
24
23
|
requiresTypeChecking: false,
|
|
25
24
|
},
|
|
26
25
|
messages: {
|
|
@@ -53,4 +52,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
53
52
|
},
|
|
54
53
|
});
|
|
55
54
|
exports.default = rule;
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUHJvcGVydHlNYXRjaGVzUHJvcGVydHlPcHRpb25hbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlQcm9wZXJ0eU1hdGNoZXNQcm9wZXJ0eU9wdGlvbmFsaXR5L2FwaVByb3BlcnR5TWF0Y2hlc1Byb3BlcnR5T3B0aW9uYWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdURBQWtEO0FBQ2xELHFFQUFnRTtBQUV6RCxNQUFNLDBCQUEwQixHQUFHLENBQ3RDLElBQWlDLEVBQzFCLEVBQUU7SUFDVCxNQUFNLG9CQUFvQixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNqRSxJQUFJLEVBQ0osQ0FBQyxxQkFBcUIsQ0FBQyxDQUMxQixDQUFDO0lBRUYsTUFBTSx1QkFBdUIsR0FDekIscUNBQWlCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFcEQsT0FBTyxvQkFBb0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDO0FBQzVELENBQUMsQ0FBQztBQVpXLFFBQUEsMEJBQTBCLDhCQVlyQztBQUVLLE1BQU0sMEJBQTBCLEdBQUcsQ0FDdEMsSUFBaUMsRUFDMUIsRUFBRTtJQUNULE1BQU0sb0JBQW9CLEdBQUcscUNBQWlCLENBQUMsc0JBQXNCLENBQ2pFLElBQUksRUFDSixDQUFDLGFBQWEsQ0FBQyxDQUNsQixDQUFDO0lBRUYsTUFBTSx1QkFBdUIsR0FDekIscUNBQWlCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFcEQsT0FBTyxvQkFBb0IsSUFBSSx1QkFBdUIsQ0FBQztBQUMzRCxDQUFDLENBQUM7QUFaVyxRQUFBLDBCQUEwQiw4QkFZckM7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBR3JCO0lBQ0UsSUFBSSxFQUFFLDJDQUEyQztJQUNqRCxJQUFJLEVBQUU7UUFDRixJQUFJLEVBQUU7WUFDRixXQUFXLEVBQ1Asd0RBQXdEO1lBRTVELG9CQUFvQixFQUFFLEtBQUs7U0FDOUI7UUFDRCxRQUFRLEVBQUU7WUFDTiwwQkFBMEIsRUFBRSx1RUFBdUU7WUFDbkcsMEJBQTBCLEVBQUUsK0RBQStEO1NBQzlGO1FBQ0QsTUFBTSxFQUFFLEVBQUU7UUFDVixjQUFjLEVBQUUsS0FBSztRQUNyQixJQUFJLEVBQUUsWUFBWTtLQUNyQjtJQUNELGNBQWMsRUFBRSxFQUFFO0lBRWxCLE1BQU0sQ0FBQyxPQUFPO1FBQ1YsT0FBTztZQUNILGdFQUFnRTtZQUNoRSxrQkFBa0IsQ0FBQyxJQUFpQztnQkFDaEQsSUFBSSxJQUFBLGtDQUEwQixFQUFDLElBQUksQ0FBQyxFQUFFO29CQUNsQyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNYLElBQUksRUFBRSxJQUFJO3dCQUNWLFNBQVMsRUFBRSw0QkFBNEI7cUJBQzFDLENBQUMsQ0FBQztpQkFDTjtnQkFDRCxJQUFJLElBQUEsa0NBQTBCLEVBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2xDLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ1gsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLDRCQUE0QjtxQkFDMUMsQ0FBQyxDQUFDO2lCQUNOO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FBRUgsa0JBQWUsSUFBSSxDQUFDIn0=
|
|
@@ -9,7 +9,6 @@ const createRule_1 = require("../../utils/createRule");
|
|
|
9
9
|
const typedTokenHelpers_1 = require("../../utils/typedTokenHelpers");
|
|
10
10
|
const arraySetResultModel_1 = __importDefault(require("./arraySetResultModel"));
|
|
11
11
|
const shouldSetArrayProperty = (node) => {
|
|
12
|
-
var _a, _b;
|
|
13
12
|
const decorators = typedTokenHelpers_1.typedTokenHelpers.getDecoratorsNamed(node, [
|
|
14
13
|
"ApiPropertyOptional",
|
|
15
14
|
"ApiProperty",
|
|
@@ -22,14 +21,17 @@ const shouldSetArrayProperty = (node) => {
|
|
|
22
21
|
// if the code is using anything other than object expression, ignore the rule (we dont want to go looking at objects)
|
|
23
22
|
// we DO want to alert if there is no argument at all. so we continue to test the rule if no argument was passed
|
|
24
23
|
if (firstArgumentToDecorator &&
|
|
25
|
-
firstArgumentToDecorator.type !== utils_1.AST_NODE_TYPES.ObjectExpression
|
|
24
|
+
(firstArgumentToDecorator.type !== utils_1.AST_NODE_TYPES.ObjectExpression ||
|
|
25
|
+
// if the things passed to the object expression contains a spread then ignore that too!
|
|
26
|
+
firstArgumentToDecorator.properties.some((x) => x.type === utils_1.AST_NODE_TYPES.SpreadElement))) {
|
|
26
27
|
return new arraySetResultModel_1.default(false, false);
|
|
27
28
|
}
|
|
28
29
|
const hasIsArraySetInOptions = typedTokenHelpers_1.typedTokenHelpers.getPropertyValueEqualsExpected(firstArgumentToDecorator, "isArray", true);
|
|
29
|
-
const typeAnnotation =
|
|
30
|
+
const typeAnnotation = node.typeAnnotation?.typeAnnotation;
|
|
30
31
|
// handle string[] or Array<string>
|
|
31
|
-
const isArrayType =
|
|
32
|
-
|
|
32
|
+
const isArrayType = typeAnnotation
|
|
33
|
+
?.typeName?.name === "Array";
|
|
34
|
+
const isTypescriptArrayType = typeAnnotation?.type === utils_1.AST_NODE_TYPES.TSArrayType;
|
|
33
35
|
const isAnArrayLikeType = isArrayType || isTypescriptArrayType;
|
|
34
36
|
return new arraySetResultModel_1.default(isAnArrayLikeType && !hasIsArraySetInOptions, !isAnArrayLikeType && hasIsArraySetInOptions);
|
|
35
37
|
};
|
|
@@ -39,7 +41,6 @@ const rule = (0, createRule_1.createRule)({
|
|
|
39
41
|
meta: {
|
|
40
42
|
docs: {
|
|
41
43
|
description: "Properties of array should set array",
|
|
42
|
-
recommended: false,
|
|
43
44
|
requiresTypeChecking: false,
|
|
44
45
|
},
|
|
45
46
|
messages: {
|
|
@@ -73,4 +74,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
73
74
|
},
|
|
74
75
|
});
|
|
75
76
|
exports.default = rule;
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUHJvcGVydHlSZXR1cm5pbmdBcnJheVNob3VsZFNldEFycmF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL2FwaVByb3BlcnR5UmV0dXJuaW5nQXJyYXlTaG91bGRTZXRBcnJheS9hcGlQcm9wZXJ0eVJldHVybmluZ0FycmF5U2hvdWxkU2V0QXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQWtFO0FBQ2xFLHVEQUFrRDtBQUNsRCxxRUFBZ0U7QUFDaEUsZ0ZBQXdEO0FBRWpELE1BQU0sc0JBQXNCLEdBQUcsQ0FDbEMsSUFBaUMsRUFDZCxFQUFFO0lBQ3JCLE1BQU0sVUFBVSxHQUFHLHFDQUFpQixDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRTtRQUMxRCxxQkFBcUI7UUFDckIsYUFBYTtLQUNoQixDQUFDLENBQUM7SUFFSCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sSUFBSSw2QkFBbUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDaEQ7SUFFRCxpSEFBaUg7SUFDakgsTUFBTSx3QkFBd0IsR0FDMUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQ2pCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWYsc0hBQXNIO0lBQ3RILGdIQUFnSDtJQUNoSCxJQUNJLHdCQUF3QjtRQUN4QixDQUFDLHdCQUF3QixDQUFDLElBQUksS0FBSyxzQkFBYyxDQUFDLGdCQUFnQjtZQUM5RCx3RkFBd0Y7WUFDeEYsd0JBQXdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDcEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssc0JBQWMsQ0FBQyxhQUFhLENBQ2pELENBQUMsRUFDUjtRQUNFLE9BQU8sSUFBSSw2QkFBbUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDaEQ7SUFFRCxNQUFNLHNCQUFzQixHQUN4QixxQ0FBaUIsQ0FBQyw4QkFBOEIsQ0FDNUMsd0JBQXdCLEVBQ3hCLFNBQVMsRUFDVCxJQUFJLENBQ1AsQ0FBQztJQUVOLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDO0lBQzNELG1DQUFtQztJQUNuQyxNQUFNLFdBQVcsR0FFUixjQUF1RDtRQUNwRCxFQUFFLFFBQ1QsRUFBRSxJQUFJLEtBQUssT0FBTyxDQUFDO0lBQ3hCLE1BQU0scUJBQXFCLEdBQ3ZCLGNBQWMsRUFBRSxJQUFJLEtBQUssc0JBQWMsQ0FBQyxXQUFXLENBQUM7SUFDeEQsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLElBQUkscUJBQXFCLENBQUM7SUFFL0QsT0FBTyxJQUFJLDZCQUFtQixDQUMxQixpQkFBaUIsSUFBSSxDQUFDLHNCQUFzQixFQUM1QyxDQUFDLGlCQUFpQixJQUFJLHNCQUFzQixDQUMvQyxDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBcERXLFFBQUEsc0JBQXNCLDBCQW9EakM7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBR3JCO0lBQ0UsSUFBSSxFQUFFLCtDQUErQztJQUNyRCxJQUFJLEVBQUU7UUFDRixJQUFJLEVBQUU7WUFDRixXQUFXLEVBQUUsc0NBQXNDO1lBRW5ELG9CQUFvQixFQUFFLEtBQUs7U0FDOUI7UUFDRCxRQUFRLEVBQUU7WUFDTiwwQkFBMEIsRUFBRSxnRUFBZ0U7WUFDNUYsMkJBQTJCLEVBQUUsd0VBQXdFO1NBQ3hHO1FBQ0QsTUFBTSxFQUFFLEVBQUU7UUFDVixjQUFjLEVBQUUsS0FBSztRQUNyQixJQUFJLEVBQUUsWUFBWTtLQUNyQjtJQUNELGNBQWMsRUFBRSxFQUFFO0lBRWxCLE1BQU0sQ0FBQyxPQUFPO1FBQ1YsT0FBTztZQUNILGdFQUFnRTtZQUNoRSxrQkFBa0IsRUFBRSxDQUFDLElBQW1CLEVBQUUsRUFBRTtnQkFDeEMsTUFBTSxxQkFBcUIsR0FBRyxJQUFBLDhCQUFzQixFQUNoRCxJQUFtQyxDQUN0QyxDQUFDO2dCQUVGLElBQUkscUJBQXFCLENBQUMsdUJBQXVCLEVBQUU7b0JBQy9DLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ1gsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLDZCQUE2QjtxQkFDM0MsQ0FBQyxDQUFDO2lCQUNOO2dCQUNELElBQUkscUJBQXFCLENBQUMsc0JBQXNCLEVBQUU7b0JBQzlDLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ1gsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLDRCQUE0QjtxQkFDMUMsQ0FBQyxDQUFDO2lCQUNOO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FBRUgsa0JBQWUsSUFBSSxDQUFDIn0=
|
|
@@ -16,7 +16,6 @@ const rule = (0, createRule_1.createRule)({
|
|
|
16
16
|
meta: {
|
|
17
17
|
docs: {
|
|
18
18
|
description: "Controllers should supply an ApiTag to make swagger UI easier to navigate",
|
|
19
|
-
recommended: false,
|
|
20
19
|
requiresTypeChecking: false,
|
|
21
20
|
},
|
|
22
21
|
messages: {
|
|
@@ -42,4 +41,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
42
41
|
},
|
|
43
42
|
});
|
|
44
43
|
exports.default = rule;
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlckRlY29yYXRlZEhhc0FwaVRhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvY29udHJvbGxlckRlY29yYXRlZEhhc0FwaVRhZ3MvY29udHJvbGxlckRlY29yYXRlZEhhc0FwaVRhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdURBQWtEO0FBQ2xELHFFQUFnRTtBQUV6RCxNQUFNLHdCQUF3QixHQUFHLENBQ3BDLElBQStCLEVBQ3hCLEVBQUU7SUFDVCxNQUFNLHNCQUFzQixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNuRSxJQUFJLEVBQ0osQ0FBQyxZQUFZLENBQUMsQ0FDakIsQ0FBQztJQUVGLE1BQU0sa0JBQWtCLEdBQUcscUNBQWlCLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFO1FBQ3RFLFNBQVM7S0FDWixDQUFDLENBQUM7SUFFSCxPQUFPLHNCQUFzQixJQUFJLENBQUMsa0JBQWtCLENBQUM7QUFDekQsQ0FBQyxDQUFDO0FBYlcsUUFBQSx3QkFBd0IsNEJBYW5DO0FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBQSx1QkFBVSxFQUFpQztJQUNwRCxJQUFJLEVBQUUsb0NBQW9DO0lBQzFDLElBQUksRUFBRTtRQUNGLElBQUksRUFBRTtZQUNGLFdBQVcsRUFDUCwyRUFBMkU7WUFFL0Usb0JBQW9CLEVBQUUsS0FBSztTQUM5QjtRQUNELFFBQVEsRUFBRTtZQUNOLHdCQUF3QixFQUFFLCtKQUErSjtTQUM1TDtRQUNELE1BQU0sRUFBRSxFQUFFO1FBQ1YsY0FBYyxFQUFFLEtBQUs7UUFDckIsSUFBSSxFQUFFLFlBQVk7S0FDckI7SUFDRCxjQUFjLEVBQUUsRUFBRTtJQUVsQixNQUFNLENBQUMsT0FBTztRQUNWLE9BQU87WUFDSCxnRUFBZ0U7WUFDaEUsZ0JBQWdCLENBQUMsSUFBK0I7Z0JBQzVDLElBQUksSUFBQSxnQ0FBd0IsRUFBQyxJQUFJLENBQUMsRUFBRTtvQkFDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsMEJBQTBCO3FCQUN4QyxDQUFDLENBQUM7aUJBQ047WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxrQkFBZSxJQUFJLENBQUMifQ==
|
|
@@ -20,12 +20,11 @@ const findModuleMapping = (classNAme, propertyName, nestModuleMap) => {
|
|
|
20
20
|
};
|
|
21
21
|
// super fragile types but whatevs
|
|
22
22
|
const checkNode = (node, decoratorName, propertyName, messageId, context) => {
|
|
23
|
-
var _a;
|
|
24
23
|
if (nestProvidedInjectableMapper_1.default.isNestInjectableThatIsNeverProvided(node)) {
|
|
25
24
|
return;
|
|
26
25
|
}
|
|
27
26
|
if (typedTokenHelpers_1.typedTokenHelpers.nodeHasDecoratorsNamed(node, [decoratorName])) {
|
|
28
|
-
const name =
|
|
27
|
+
const name = node.id?.name;
|
|
29
28
|
if (!name) {
|
|
30
29
|
return;
|
|
31
30
|
}
|
|
@@ -45,12 +44,17 @@ function initializeModuleMappings(sourcePath, filterFromPaths, context) {
|
|
|
45
44
|
listOfPotentialNestModuleFiles = fileEnumerationWrapper_1.default.enumerateFiles(mappedSourceDirectory, [".ts"], filterFromPaths);
|
|
46
45
|
nestModuleMap = nestProvidedInjectableMapper_1.default.parseFileList(listOfPotentialNestModuleFiles, context);
|
|
47
46
|
}
|
|
47
|
+
const defaultOptions = [
|
|
48
|
+
{
|
|
49
|
+
src: ["src/**/*.ts"],
|
|
50
|
+
filterFromPaths: ["dist", "node_modules", ".test.", ".spec."],
|
|
51
|
+
},
|
|
52
|
+
];
|
|
48
53
|
const rule = (0, createRule_1.createRule)({
|
|
49
54
|
name: "injectable-should-be-provided",
|
|
50
55
|
meta: {
|
|
51
56
|
docs: {
|
|
52
57
|
description: "Public api methods should have documentation",
|
|
53
|
-
recommended: false,
|
|
54
58
|
requiresTypeChecking: false,
|
|
55
59
|
},
|
|
56
60
|
messages: {
|
|
@@ -59,6 +63,7 @@ const rule = (0, createRule_1.createRule)({
|
|
|
59
63
|
},
|
|
60
64
|
schema: [
|
|
61
65
|
{
|
|
66
|
+
type: "object",
|
|
62
67
|
properties: {
|
|
63
68
|
src: {
|
|
64
69
|
description: "files/paths to be analyzed (only for provided injectable or controller)",
|
|
@@ -83,13 +88,15 @@ const rule = (0, createRule_1.createRule)({
|
|
|
83
88
|
],
|
|
84
89
|
type: "problem",
|
|
85
90
|
},
|
|
86
|
-
defaultOptions:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
defaultOptions: defaultOptions,
|
|
92
|
+
create(contextWithoutDefaults) {
|
|
93
|
+
const context = contextWithoutDefaults.options &&
|
|
94
|
+
contextWithoutDefaults.options.length > 0
|
|
95
|
+
? contextWithoutDefaults
|
|
96
|
+
: // only apply the defaults when the user provides no config
|
|
97
|
+
Object.setPrototypeOf({
|
|
98
|
+
options: defaultOptions,
|
|
99
|
+
}, contextWithoutDefaults);
|
|
93
100
|
const { src, filterFromPaths,
|
|
94
101
|
// ignoreExports = [],
|
|
95
102
|
// missingExports,
|
|
@@ -117,4 +124,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
117
124
|
},
|
|
118
125
|
});
|
|
119
126
|
exports.default = rule;
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0YWJsZVNob3VsZEJlUHJvdmlkZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvaW5qZWN0YWJsZXNTaG91bGRCZVByb3ZpZGVkL2luamVjdGFibGVTaG91bGRCZVByb3ZpZGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsdURBQWtEO0FBQ2xELHNHQUE2RTtBQUM3RSx3SEFBZ0c7QUFFaEcscUVBQWdFO0FBSWhFLDhEQUE4RDtBQUM5RCxJQUFJLDhCQUEwQyxDQUFDO0FBQy9DLElBQUksYUFBc0QsQ0FBQztBQVMzRCxNQUFNLGlCQUFpQixHQUFHLENBQ3RCLFNBQWlCLEVBQ2pCLFlBQXlDLEVBQ3pDLGFBQXNELEVBQ2hCLEVBQUU7SUFDeEMsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDeEMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0tBQ0o7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRixrQ0FBa0M7QUFDbEMsTUFBTSxTQUFTLEdBQUcsQ0FDZCxJQUErQixFQUMvQixhQUEwQyxFQUMxQyxZQUF5QyxFQUN6QyxTQUF1RCxFQUN2RCxPQUtDLEVBQ0gsRUFBRTtJQUNBLElBQ0ksc0NBQTRCLENBQUMsbUNBQW1DLENBQUMsSUFBSSxDQUFDLEVBQ3hFO1FBQ0UsT0FBTztLQUNWO0lBQ0QsSUFBSSxxQ0FBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFO1FBQ2pFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLFFBQVEsR0FBRyxpQkFBaUIs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
|