@darraghor/eslint-plugin-nestjs-typed 3.11.0 → 3.12.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 +26 -0
- package/dist/fixtures/Controller.stub.d.ts +1 -0
- package/dist/fixtures/Controller.stub.js +10 -0
- package/dist/fixtures/example.controller.d.ts +2 -0
- package/dist/fixtures/example.controller.js +17 -0
- package/dist/fixtures/example.customprovider.d.ts +5 -0
- package/dist/fixtures/example.customprovider.js +14 -0
- package/dist/fixtures/example.module.js +5 -2
- package/dist/fixtures/example.providedClass.provider.d.ts +3 -0
- package/dist/fixtures/example.providedClass.provider.js +16 -0
- package/dist/index.d.ts +1 -1
- package/dist/rules/allPropertiesAreWhitelisted/allPropertiesAreWhitelisted.js +3 -26
- package/dist/rules/apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.js +2 -2
- package/dist/rules/controllerDecoratedHasApiTags/controllerDecoratedHasApiTags.js +2 -2
- package/dist/rules/index.d.ts +1 -1
- package/dist/rules/injectablesShouldBeProvided/injectableShouldBeProvided.js +6 -6
- package/dist/rules/providerInjectedShouldMatchFactory/ProviderInjectedShouldMatchFactory.js +3 -3
- package/dist/rules/validate-non-primitves-needs-type-decorator/validateNonPrimitiveNeedsDecorators.d.ts +6 -1
- package/dist/rules/validate-non-primitves-needs-type-decorator/validateNonPrimitiveNeedsDecorators.js +27 -5
- package/dist/utils/nestModules/nestProvidedInjectableMapper.d.ts +1 -1
- package/dist/utils/nestModules/nestProvidedInjectableMapper.js +23 -10
- package/dist/utils/nestModules/nestProviderAstParser.d.ts +2 -2
- package/dist/utils/nestModules/nestProviderAstParser.js +21 -9
- package/package.json +17 -17
package/README.md
CHANGED
|
@@ -6,6 +6,10 @@ 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
|
+
typescript eslint parser supports a range of typescript versions but there can be a delay in supporting the latest versions.
|
|
10
|
+
|
|
11
|
+
This plugin only supports typescript up to the version typescript eslint parser supports. See https://github.com/typescript-eslint/typescript-eslint#supported-typescript-version for the versions.
|
|
12
|
+
|
|
9
13
|
## Index of available rules
|
|
10
14
|
|
|
11
15
|
(more details for each specific rule are available in sections below)
|
|
@@ -72,6 +76,19 @@ https://github.com/typestack/class-validator/issues/438
|
|
|
72
76
|
|
|
73
77
|
```
|
|
74
78
|
npm install --save-dev @darraghor/eslint-plugin-nestjs-typed
|
|
79
|
+
|
|
80
|
+
// or
|
|
81
|
+
|
|
82
|
+
yarn add -D @darraghor/eslint-plugin-nestjs-typed
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
If you don't already have `class-validator` you should install that
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
npm install class-validator
|
|
89
|
+
|
|
90
|
+
// or
|
|
91
|
+
yarn add class-validator
|
|
75
92
|
```
|
|
76
93
|
|
|
77
94
|
Then update your eslint with the plugin import and add the recommended rule set
|
|
@@ -202,6 +219,15 @@ export class CreateOrganisationDto {
|
|
|
202
219
|
|
|
203
220
|
If you use any of the class validator decorators on a property that is not a primitive, you should tell class-transformer how to transform it into a class first.
|
|
204
221
|
|
|
222
|
+
This rule accepts an optional list of custom type decorators that will be counted as valid for the rule test. e.g.
|
|
223
|
+
|
|
224
|
+
```ts
|
|
225
|
+
"@darraghor/nestjs-typed/validated-non-primitive-property-needs-type-decorator": [
|
|
226
|
+
"error",
|
|
227
|
+
{additionalTypeDecorators: ["TransformDate"]},
|
|
228
|
+
],
|
|
229
|
+
```
|
|
230
|
+
|
|
205
231
|
This PASSES because we're validating a Person class and we have added the @Type decorator.
|
|
206
232
|
|
|
207
233
|
```ts
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function Controller(): any;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Controller = void 0;
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
6
|
+
function Controller() {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
exports.Controller = Controller;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbGxlci5zdHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpeHR1cmVzL0NvbnRyb2xsZXIuc3R1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1REFBdUQ7QUFDdkQsc0RBQXNEO0FBQ3RELFNBQWdCLFVBQVU7SUFDdEIsT0FBTztBQUNYLENBQUM7QUFGRCxnQ0FFQyJ9
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ExampleController = void 0;
|
|
10
|
+
const Controller_stub_1 = require("./Controller.stub");
|
|
11
|
+
let ExampleController = class ExampleController {
|
|
12
|
+
};
|
|
13
|
+
ExampleController = __decorate([
|
|
14
|
+
(0, Controller_stub_1.Controller)()
|
|
15
|
+
], ExampleController);
|
|
16
|
+
exports.ExampleController = ExampleController;
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS5jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpeHR1cmVzL2V4YW1wbGUuY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSx1REFBNkM7QUFHN0MsSUFBYSxpQkFBaUIsR0FBOUIsTUFBYSxpQkFBaUI7Q0FBRyxDQUFBO0FBQXBCLGlCQUFpQjtJQUQ3QixJQUFBLDRCQUFVLEdBQUU7R0FDQSxpQkFBaUIsQ0FBRztBQUFwQiw4Q0FBaUIifQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
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.ExampleProvider = void 0;
|
|
7
|
+
const example_providedClass_provider_1 = __importDefault(require("./example.providedClass.provider"));
|
|
8
|
+
exports.ExampleProvider = {
|
|
9
|
+
provide: example_providedClass_provider_1.default,
|
|
10
|
+
useFactory: () => {
|
|
11
|
+
return new example_providedClass_provider_1.default();
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS5jdXN0b21wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maXh0dXJlcy9leGFtcGxlLmN1c3RvbXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHNHQUFnRTtBQUVuRCxRQUFBLGVBQWUsR0FBRztJQUMzQixPQUFPLEVBQUUsd0NBQWdCO0lBQ3pCLFVBQVUsRUFBRSxHQUFHLEVBQUU7UUFDYixPQUFPLElBQUksd0NBQWdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0NBQ0osQ0FBQyJ9
|
|
@@ -12,13 +12,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.ExampleModule = void 0;
|
|
13
13
|
const Module_stub_1 = require("./Module.stub");
|
|
14
14
|
const example_provider_1 = __importDefault(require("./example.provider"));
|
|
15
|
+
const example_controller_1 = require("./example.controller");
|
|
16
|
+
const example_customprovider_1 = require("./example.customprovider");
|
|
15
17
|
let ExampleModule = class ExampleModule {
|
|
16
18
|
};
|
|
17
19
|
ExampleModule = __decorate([
|
|
18
20
|
(0, Module_stub_1.Module)({
|
|
19
21
|
imports: [],
|
|
20
|
-
|
|
22
|
+
controllers: [example_controller_1.ExampleController],
|
|
23
|
+
providers: [example_provider_1.default, example_customprovider_1.ExampleProvider],
|
|
21
24
|
})
|
|
22
25
|
], ExampleModule);
|
|
23
26
|
exports.ExampleModule = ExampleModule;
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZml4dHVyZXMvZXhhbXBsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQXFDO0FBQ3JDLDBFQUFpRTtBQUNqRSw2REFBdUQ7QUFDdkQscUVBQXlEO0FBT3pELElBQWEsYUFBYSxHQUExQixNQUFhLGFBQWE7Q0FBRyxDQUFBO0FBQWhCLGFBQWE7SUFMekIsSUFBQSxvQkFBTSxFQUFDO1FBQ0osT0FBTyxFQUFFLEVBQUU7UUFDWCxXQUFXLEVBQUUsQ0FBQyxzQ0FBaUIsQ0FBQztRQUNoQyxTQUFTLEVBQUUsQ0FBQywwQkFBK0IsRUFBRSx3Q0FBZSxDQUFDO0tBQ2hFLENBQUM7R0FDVyxhQUFhLENBQUc7QUFBaEIsc0NBQWEifQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const Injectable_stub_1 = require("./Injectable.stub");
|
|
10
|
+
let ShouldBeProvided = class ShouldBeProvided {
|
|
11
|
+
};
|
|
12
|
+
ShouldBeProvided = __decorate([
|
|
13
|
+
(0, Injectable_stub_1.Injectable)()
|
|
14
|
+
], ShouldBeProvided);
|
|
15
|
+
exports.default = ShouldBeProvided;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS5wcm92aWRlZENsYXNzLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpeHR1cmVzL2V4YW1wbGUucHJvdmlkZWRDbGFzcy5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLHVEQUE2QztBQUc3QyxJQUFNLGdCQUFnQixHQUF0QixNQUFNLGdCQUFnQjtDQUFHLENBQUE7QUFBbkIsZ0JBQWdCO0lBRHJCLElBQUEsNEJBQVUsR0FBRTtHQUNQLGdCQUFnQixDQUFHO0FBRXpCLGtCQUFlLGdCQUFnQixDQUFDIn0=
|
package/dist/index.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ declare const configuration: {
|
|
|
32
32
|
"param-decorator-name-matches-route-param": import("@typescript-eslint/utils/dist/ts-eslint/Rule").RuleModule<"paramIdentifierDoesntNeedColon" | "paramIdentifierShouldMatch", never[], {
|
|
33
33
|
Decorator(node: import("@typescript-eslint/types/dist/generated/ast-spec").Decorator): void;
|
|
34
34
|
}>;
|
|
35
|
-
"validated-non-primitive-property-needs-type-decorator": import("@typescript-eslint/utils/dist/ts-eslint/Rule").RuleModule<"shouldUseTypeDecorator",
|
|
35
|
+
"validated-non-primitive-property-needs-type-decorator": import("@typescript-eslint/utils/dist/ts-eslint/Rule").RuleModule<"shouldUseTypeDecorator", import("./rules/validate-non-primitves-needs-type-decorator/validateNonPrimitiveNeedsDecorators").ValidateNonPrimitivePropertyTypeDecoratorOptions, {
|
|
36
36
|
PropertyDefinition(node: import("@typescript-eslint/types/dist/generated/ast-spec").PropertyDefinition): void;
|
|
37
37
|
}>;
|
|
38
38
|
"validate-nested-of-array-should-set-each": import("@typescript-eslint/utils/dist/ts-eslint/Rule").RuleModule<"shouldSetEachPropertyTrue" | "shouldSetEachPropertyFalse", never[], {
|
|
@@ -1,32 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
3
|
const utils_1 = require("@typescript-eslint/utils");
|
|
27
|
-
const classValidator = __importStar(require("class-validator"));
|
|
28
4
|
const createRule_1 = require("../../utils/createRule");
|
|
29
|
-
const
|
|
5
|
+
const classValidatorDecorators_1 = require("../../utils/classValidatorDecorators");
|
|
6
|
+
const CLASS_VALIDATOR_DECORATOR_NAMES = new Set(classValidatorDecorators_1.classValidatorDecorators);
|
|
30
7
|
const rule = (0, createRule_1.createRule)({
|
|
31
8
|
name: "all-properties-are-whitelisted",
|
|
32
9
|
meta: {
|
|
@@ -79,4 +56,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
79
56
|
},
|
|
80
57
|
});
|
|
81
58
|
exports.default = rule;
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsUHJvcGVydGllc0FyZVdoaXRlbGlzdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL2FsbFByb3BlcnRpZXNBcmVXaGl0ZWxpc3RlZC9hbGxQcm9wZXJ0aWVzQXJlV2hpdGVsaXN0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxvREFBNEU7QUFDNUUsdURBQWtEO0FBQ2xELG1GQUE4RTtBQUU5RSxNQUFNLCtCQUErQixHQUFHLElBQUksR0FBRyxDQUFDLG1EQUF3QixDQUFDLENBQUM7QUFFMUUsTUFBTSxJQUFJLEdBQUcsSUFBQSx1QkFBVSxFQUFDO0lBQ3BCLElBQUksRUFBRSxnQ0FBZ0M7SUFDdEMsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUFFLHdDQUF3QztZQUNyRCxXQUFXLEVBQUUsT0FBTztZQUNwQixvQkFBb0IsRUFBRSxLQUFLO1NBQzlCO1FBQ0QsUUFBUSxFQUFFO1lBQ04sZ0VBQWdFO1lBQ2hFLDRCQUE0QixFQUN4Qix5RkFBeUY7U0FDaEc7UUFDRCxJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRSxFQUFFO0tBQ2I7SUFDRCxjQUFjLEVBQUUsRUFBRTtJQUNsQixNQUFNLEVBQUUsVUFDSixPQUVDO1FBRUQsT0FBTztZQUNILGdFQUFnRTtZQUNoRSxnQkFBZ0IsQ0FBQyxJQUFJOztnQkFDakIsTUFBTSxhQUFhLEdBQWtDLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxnQkFBZ0IsR0FBa0MsRUFBRSxDQUFDO2dCQUMzRCxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUNsQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssc0JBQWMsQ0FBQyxrQkFBa0IsRUFBRTt3QkFDcEQsU0FBUztxQkFDWjtvQkFDRCxNQUFNLFlBQVksR0FBRyxNQUFBLE9BQU8sQ0FBQyxVQUFVLDBDQUFFLElBQUksQ0FDekMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUNWLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSTt3QkFDckIsc0JBQWMsQ0FBQyxjQUFjO3dCQUNqQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJOzRCQUM1QixzQkFBYyxDQUFDLFVBQVU7d0JBQzdCLCtCQUErQixDQUFDLEdBQUcsQ0FDL0IsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNuQyxDQUNSLENBQUM7b0JBQ0YsSUFBSSxZQUFZLEVBQUU7d0JBQ2QsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDL0I7eUJBQU07d0JBQ0gsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUNsQztpQkFDSjtnQkFDRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3pELEtBQUssTUFBTSxPQUFPLElBQUksZ0JBQWdCLEVBQUU7d0JBQ3BDLE9BQU8sQ0FBQyxNQUFNLENBQUM7NEJBQ1gsSUFBSSxFQUFFLE9BQU87NEJBQ2IsU0FBUyxFQUFFLDRCQUE0Qjt5QkFDMUMsQ0FBQyxDQUFDO3FCQUNOO2lCQUNKO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FBRUgsa0JBQWUsSUFBSSxDQUFDIn0=
|
|
@@ -46,7 +46,7 @@ const rule = (0, createRule_1.createRule)({
|
|
|
46
46
|
requiresTypeChecking: false,
|
|
47
47
|
},
|
|
48
48
|
messages: {
|
|
49
|
-
shouldSpecifyApiResponse: `A method decorated with @Get, @Post etc. should specify the expected ApiResponse e.g. @ApiOkResponse(type: MyType)
|
|
49
|
+
shouldSpecifyApiResponse: `A method decorated with @Get, @Post etc. should specify the expected ApiResponse e.g. @ApiOkResponse(type: MyType). These decorators are in the @nestjs/swagger npm package.`,
|
|
50
50
|
},
|
|
51
51
|
schema: [],
|
|
52
52
|
hasSuggestions: false,
|
|
@@ -68,4 +68,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
68
68
|
},
|
|
69
69
|
});
|
|
70
70
|
exports.default = rule;
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpTWV0aG9kc1Nob3VsZFNwZWNpZnlBcGlSZXNwb25zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlNZXRob2RzU2hvdWxkU3BlY2lmeUFwaVJlc3BvbnNlL2FwaU1ldGhvZHNTaG91bGRTcGVjaWZ5QXBpUmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsdURBQWtEO0FBQ2xELHFFQUFnRTtBQUV6RCxNQUFNLDZCQUE2QixHQUFHLENBQ3pDLElBQStCLEVBQ3hCLEVBQUU7SUFDVCxNQUFNLHFCQUFxQixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNsRSxJQUFJLEVBQ0osQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQ3RFLENBQUM7SUFFRixNQUFNLHVCQUF1QixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNwRSxJQUFJLEVBQ0o7UUFDSSxhQUFhO1FBQ2IsZUFBZTtRQUNmLG9CQUFvQjtRQUNwQixxQkFBcUI7UUFDckIsc0JBQXNCO1FBQ3RCLDZCQUE2QjtRQUM3QixrQkFBa0I7UUFDbEIsdUJBQXVCO1FBQ3ZCLHlCQUF5QjtRQUN6Qiw0QkFBNEI7UUFDNUIscUJBQXFCO1FBQ3JCLGdDQUFnQztRQUNoQyx1QkFBdUI7UUFDdkIscUJBQXFCO1FBQ3JCLHNCQUFzQjtRQUN0QiwyQkFBMkI7UUFDM0IsaUJBQWlCO1FBQ2pCLDZCQUE2QjtRQUM3QiwwQkFBMEI7UUFDMUIsMkJBQTJCO1FBQzNCLCtCQUErQjtRQUMvQiw0QkFBNEI7UUFDNUIsMkJBQTJCO1FBQzNCLCtCQUErQjtRQUMvQixnQ0FBZ0M7UUFDaEMsaUNBQWlDO1FBQ2pDLG9CQUFvQjtLQUN2QixDQUNKLENBQUM7SUFFRixPQUFPLHFCQUFxQixJQUFJLENBQUMsdUJBQXVCLENBQUM7QUFDN0QsQ0FBQyxDQUFDO0FBMUNXLFFBQUEsNkJBQTZCLGlDQTBDeEM7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQUM7SUFDcEIsSUFBSSxFQUFFLHdDQUF3QztJQUM5QyxJQUFJLEVBQUU7UUFDRixJQUFJLEVBQUU7WUFDRixXQUFXLEVBQ1AsMEpBQTBKO1lBQzlKLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLG9CQUFvQixFQUFFLEtBQUs7U0FDOUI7UUFDRCxRQUFRLEVBQUU7WUFDTix3QkFBd0IsRUFBRSw4S0FBOEs7U0FDM007UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLElBQUksRUFBRSxZQUFZO0tBQ3JCO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFFbEIsTUFBTSxDQUNGLE9BRUM7UUFFRCxPQUFPO1lBQ0gsZ0VBQWdFO1lBQ2hFLGdCQUFnQixDQUFDLElBQStCO2dCQUM1QyxJQUFJLElBQUEscUNBQTZCLEVBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3JDLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ1gsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLDBCQUEwQjtxQkFDeEMsQ0FBQyxDQUFDO2lCQUNOO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FBRUgsa0JBQWUsSUFBSSxDQUFDIn0=
|
|
@@ -20,7 +20,7 @@ const rule = (0, createRule_1.createRule)({
|
|
|
20
20
|
requiresTypeChecking: false,
|
|
21
21
|
},
|
|
22
22
|
messages: {
|
|
23
|
-
shouldUseApiTagDecorator: `Controllers should use @ApiTags decorator. This makes it much easier to navigate swagger UI.`,
|
|
23
|
+
shouldUseApiTagDecorator: `Controllers should use @ApiTags decorator. This makes it much easier to navigate swagger UI. This ApiTags decorator is in the @nestjs/swagger package on npm.`,
|
|
24
24
|
},
|
|
25
25
|
schema: [],
|
|
26
26
|
hasSuggestions: false,
|
|
@@ -42,4 +42,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
42
42
|
},
|
|
43
43
|
});
|
|
44
44
|
exports.default = rule;
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlckRlY29yYXRlZEhhc0FwaVRhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvY29udHJvbGxlckRlY29yYXRlZEhhc0FwaVRhZ3MvY29udHJvbGxlckRlY29yYXRlZEhhc0FwaVRhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsdURBQWtEO0FBQ2xELHFFQUFnRTtBQUV6RCxNQUFNLHdCQUF3QixHQUFHLENBQ3BDLElBQStCLEVBQ3hCLEVBQUU7SUFDVCxNQUFNLHNCQUFzQixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNuRSxJQUFJLEVBQ0osQ0FBQyxZQUFZLENBQUMsQ0FDakIsQ0FBQztJQUVGLE1BQU0sa0JBQWtCLEdBQUcscUNBQWlCLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFO1FBQ3RFLFNBQVM7S0FDWixDQUFDLENBQUM7SUFFSCxPQUFPLHNCQUFzQixJQUFJLENBQUMsa0JBQWtCLENBQUM7QUFDekQsQ0FBQyxDQUFDO0FBYlcsUUFBQSx3QkFBd0IsNEJBYW5DO0FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBQSx1QkFBVSxFQUFDO0lBQ3BCLElBQUksRUFBRSxvQ0FBb0M7SUFDMUMsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUNQLDJFQUEyRTtZQUMvRSxXQUFXLEVBQUUsS0FBSztZQUNsQixvQkFBb0IsRUFBRSxLQUFLO1NBQzlCO1FBQ0QsUUFBUSxFQUFFO1lBQ04sd0JBQXdCLEVBQUUsK0pBQStKO1NBQzVMO1FBQ0QsTUFBTSxFQUFFLEVBQUU7UUFDVixjQUFjLEVBQUUsS0FBSztRQUNyQixJQUFJLEVBQUUsWUFBWTtLQUNyQjtJQUNELGNBQWMsRUFBRSxFQUFFO0lBRWxCLE1BQU0sQ0FDRixPQUVDO1FBRUQsT0FBTztZQUNILGdFQUFnRTtZQUNoRSxnQkFBZ0IsQ0FBQyxJQUErQjtnQkFDNUMsSUFBSSxJQUFBLGdDQUF3QixFQUFDLElBQUksQ0FBQyxFQUFFO29CQUNoQyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNYLElBQUksRUFBRSxJQUFJO3dCQUNWLFNBQVMsRUFBRSwwQkFBMEI7cUJBQ3hDLENBQUMsQ0FBQztpQkFDTjtZQUNMLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQUVILGtCQUFlLElBQUksQ0FBQyJ9
|
package/dist/rules/index.d.ts
CHANGED
|
@@ -31,7 +31,7 @@ declare const allRules: {
|
|
|
31
31
|
"param-decorator-name-matches-route-param": import("@typescript-eslint/utils/dist/ts-eslint/Rule").RuleModule<"paramIdentifierDoesntNeedColon" | "paramIdentifierShouldMatch", never[], {
|
|
32
32
|
Decorator(node: import("@typescript-eslint/types/dist/generated/ast-spec").Decorator): void;
|
|
33
33
|
}>;
|
|
34
|
-
"validated-non-primitive-property-needs-type-decorator": import("@typescript-eslint/utils/dist/ts-eslint/Rule").RuleModule<"shouldUseTypeDecorator",
|
|
34
|
+
"validated-non-primitive-property-needs-type-decorator": import("@typescript-eslint/utils/dist/ts-eslint/Rule").RuleModule<"shouldUseTypeDecorator", import("./validate-non-primitves-needs-type-decorator/validateNonPrimitiveNeedsDecorators").ValidateNonPrimitivePropertyTypeDecoratorOptions, {
|
|
35
35
|
PropertyDefinition(node: import("@typescript-eslint/types/dist/generated/ast-spec").PropertyDefinition): void;
|
|
36
36
|
}>;
|
|
37
37
|
"validate-nested-of-array-should-set-each": import("@typescript-eslint/utils/dist/ts-eslint/Rule").RuleModule<"shouldSetEachPropertyTrue" | "shouldSetEachPropertyFalse", never[], {
|
|
@@ -7,7 +7,8 @@ const createRule_1 = require("../../utils/createRule");
|
|
|
7
7
|
const fileEnumerationWrapper_1 = __importDefault(require("../../utils/files/fileEnumerationWrapper"));
|
|
8
8
|
const nestProvidedInjectableMapper_1 = __importDefault(require("../../utils/nestModules/nestProvidedInjectableMapper"));
|
|
9
9
|
const typedTokenHelpers_1 = require("../../utils/typedTokenHelpers");
|
|
10
|
-
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
11
|
+
let listOfPotentialNestModuleFiles;
|
|
11
12
|
let nestModuleMap;
|
|
12
13
|
const findModuleMapping = (classNAme, propertyName, nestModuleMap) => {
|
|
13
14
|
for (const entry of nestModuleMap.values()) {
|
|
@@ -40,10 +41,9 @@ const checkNode = (node, decoratorName, propertyName, messageId, context) => {
|
|
|
40
41
|
}
|
|
41
42
|
};
|
|
42
43
|
function initialiseModuleMappings(sourcePath, filterFromPaths, context) {
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
nestModuleMap = nestProvidedInjectableMapper_1.default.parseFileList(listFilesToProcess, context);
|
|
44
|
+
const mappedSourceDirectory = nestProvidedInjectableMapper_1.default.detectDirectoryToScanForFiles(sourcePath, process.cwd());
|
|
45
|
+
listOfPotentialNestModuleFiles = fileEnumerationWrapper_1.default.enumerateFiles(mappedSourceDirectory, [".ts"], filterFromPaths);
|
|
46
|
+
nestModuleMap = nestProvidedInjectableMapper_1.default.parseFileList(listOfPotentialNestModuleFiles, context);
|
|
47
47
|
}
|
|
48
48
|
const rule = (0, createRule_1.createRule)({
|
|
49
49
|
name: "injectable-should-be-provided",
|
|
@@ -117,4 +117,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
117
117
|
},
|
|
118
118
|
});
|
|
119
119
|
exports.default = rule;
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0YWJsZVNob3VsZEJlUHJvdmlkZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvaW5qZWN0YWJsZXNTaG91bGRCZVByb3ZpZGVkL2luamVjdGFibGVTaG91bGRCZVByb3ZpZGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsdURBQWtEO0FBQ2xELHNHQUE2RTtBQUM3RSx3SEFBZ0c7QUFFaEcscUVBQWdFO0FBR2hFLDhEQUE4RDtBQUM5RCxJQUFJLDhCQUEwQyxDQUFDO0FBQy9DLElBQUksYUFBc0QsQ0FBQztBQVMzRCxNQUFNLGlCQUFpQixHQUFHLENBQ3RCLFNBQWlCLEVBQ2pCLFlBQXlDLEVBQ3pDLGFBQXNELEVBQ2hCLEVBQUU7SUFDeEMsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDeEMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0tBQ0o7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRixrQ0FBa0M7QUFDbEMsTUFBTSxTQUFTLEdBQUcsQ0FDZCxJQUErQixFQUMvQixhQUEwQyxFQUMxQyxZQUF5QyxFQUN6QyxTQUF1RCxFQUN2RCxPQUtDLEVBQ0gsRUFBRTs7SUFDQSxJQUNJLHNDQUE0QixDQUFDLG1DQUFtQyxDQUFDLElBQUksQ0FBQyxFQUN4RTtRQUNFLE9BQU87S0FDVjtJQUNELElBQUkscUNBQWlCLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRTtRQUNqRSxNQUFNLElBQUksR0FBRyxNQUFBLElBQUksQ0FBQyxFQUFFLDBDQUFFLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsT0FBTztTQUNWO1FBQ0QsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN0RSxJQUFJLFFBQVEsRUFBRTtZQUNWLE9BQU87U0FDVjtRQUNELDZCQUE2QjtRQUM3QixPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ1gsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsU0FBUztTQUN2QixDQUFDLENBQUM7S0FDTjtBQUNMLENBQUMsQ0FBQztBQUVGLFNBQVMsd0JBQXdCLENBQzdCLFVBQWtCLEVBQ2xCLGVBQXlCLEVBQ3pCLE9BQXVEO0lBRXZELE1BQU0scUJBQXFCLEdBQ3ZCLHNDQUE0QixDQUFDLDZCQUE2QixDQUN0RCxVQUFVLEVBQ1YsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUNoQixDQUFDO0lBQ04sOEJBQThCLEdBQUcsZ0NBQXFCLENBQUMsY0FBYyxDQUNqRSxxQkFBcUIsRUFDckIsQ0FBQyxLQUFLLENBQUMsRUFDUCxlQUFlLENBQ2xCLENBQUM7SUFFRixhQUFhLEdBQUcsc0NBQTRCLENBQUMsYUFBYSxDQUN0RCw4QkFBOEIsRUFDOUIsT0FBTyxDQUNWLENBQUM7QUFDTixDQUFDO0FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBQSx1QkFBVSxFQUFDO0lBQ3BCLElBQUksRUFBRSwrQkFBK0I7SUFDckMsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUFFLDhDQUE4QztZQUMzRCxXQUFXLEVBQUUsS0FBSztZQUNsQixvQkFBb0IsRUFBRSxLQUFLO1NBQzlCO1FBQ0QsUUFBUSxFQUFFO1lBQ04sa0JBQWtCLEVBQUUsdU5BQXVOO1lBQzNPLG1CQUFtQixFQUFFLHlOQUF5TjtTQUNqUDtRQUNELE1BQU0sRUFBRTtZQUNKO2dCQUNJLFVBQVUsRUFBRTtvQkFDUixHQUFHLEVBQUU7d0JBQ0QsV0FBVyxFQUNQLHlFQUF5RTt3QkFDN0UsSUFBSSxFQUFFLE9BQU87d0JBQ2IsUUFBUSxFQUFFLENBQUM7d0JBQ1gsS0FBSyxFQUFFOzRCQUNILElBQUksRUFBRSxRQUFROzRCQUNkLFNBQVMsRUFBRSxDQUFDO3lCQUNmO3FCQUNKO29CQUNELGVBQWUsRUFBRTt3QkFDYixXQUFXLEVBQ1AsNkVBQTZFO3dCQUNqRixJQUFJLEVBQUUsT0FBTzt3QkFDYixRQUFRLEVBQUUsQ0FBQzt3QkFDWCxLQUFLLEVBQUU7NEJBQ0gsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsU0FBUyxFQUFFLENBQUM7eUJBQ2Y7cUJBQ0o7aUJBQ0o7YUFDSjtTQUNKO1FBQ0QsSUFBSSxFQUFFLFNBQVM7S0FDbEI7SUFDRCxjQUFjLEVBQUU7UUFDWjtZQUNJLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUNwQixlQUFlLEVBQUUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7U0FDaEU7S0FDSjtJQUVELE1BQU0sQ0FDRixPQUtDO1FBRUQsTUFBTSxFQUNGLEdBQUcsRUFDSCxlQUFlO1FBQ2Ysc0JBQXNCO1FBQ3RCLGtCQUFrQjtRQUNsQixpQkFBaUI7VUFDcEIsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUU3QixJQUFJLGFBQWEsS0FBSyxTQUFTLElBQUksYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDekQsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM5RDtRQUVELE9BQU87WUFDSCxnRUFBZ0U7WUFDaEUsZ0JBQWdCLENBQUMsSUFBK0I7Z0JBQzVDLFNBQVMsQ0FDTCxJQUFJLEVBQ0osWUFBWSxFQUNaLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsT0FBTyxDQUNWLENBQUM7Z0JBQ0YsU0FBUyxDQUNMLElBQUksRUFDSixZQUFZLEVBQ1osYUFBYSxFQUNiLHFCQUFxQixFQUNyQixPQUFPLENBQ1YsQ0FBQztZQUNOLENBQUM7WUFDRCxnRUFBZ0U7WUFDaEUsY0FBYztnQkFDVixvQ0FBb0M7Z0JBQ3BDLDZDQUE2QztnQkFDN0MsTUFBTSx5QkFBeUIsR0FDM0Isc0NBQTRCLENBQUMseUJBQXlCLENBQ2xELE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQzNCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FDeEIsQ0FBQztnQkFDTixJQUFJLHlCQUF5QixLQUFLLElBQUksRUFBRTtvQkFDcEMsYUFBYSxDQUFDLEdBQUcsQ0FDYix5QkFBeUIsQ0FBQyxDQUFDLENBQVcsRUFDdEMseUJBQXlCLENBQUMsQ0FBQyxDQUErQixDQUM3RCxDQUFDO2lCQUNMO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FBRUgsa0JBQWUsSUFBSSxDQUFDIn0=
|
|
@@ -16,9 +16,9 @@ const hasMismatchedInjected = (node) => {
|
|
|
16
16
|
return false;
|
|
17
17
|
}
|
|
18
18
|
// count number of factory params
|
|
19
|
-
const factoryParameterCount = (_e = ((_d = nestProviderAstParser_1.nestProviderAstParser.
|
|
19
|
+
const factoryParameterCount = (_e = ((_d = nestProviderAstParser_1.nestProviderAstParser.findProvideProperty(node, "useFactory")) === null || _d === void 0 ? void 0 : _d.value).params) === null || _e === void 0 ? void 0 : _e.length;
|
|
20
20
|
// Count number of injected params
|
|
21
|
-
const injectedParameter = (_f = nestProviderAstParser_1.nestProviderAstParser.
|
|
21
|
+
const injectedParameter = (_f = nestProviderAstParser_1.nestProviderAstParser.findProvideProperty(node, "inject")) === null || _f === void 0 ? void 0 : _f.value;
|
|
22
22
|
const injectedParameterCount = injectedParameter
|
|
23
23
|
? injectedParameter.elements.length
|
|
24
24
|
: 0;
|
|
@@ -56,4 +56,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
56
56
|
},
|
|
57
57
|
});
|
|
58
58
|
exports.default = rule;
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvdmlkZXJJbmplY3RlZFNob3VsZE1hdGNoRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9wcm92aWRlckluamVjdGVkU2hvdWxkTWF0Y2hGYWN0b3J5L1Byb3ZpZGVySW5qZWN0ZWRTaG91bGRNYXRjaEZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdURBQWtEO0FBQ2xELGdEQUFnRDtBQUNoRCwwQkFBMEI7QUFDMUIseUZBQW9GO0FBRTdFLE1BQU0scUJBQXFCLEdBQUcsQ0FDakMsSUFBaUMsRUFDMUIsRUFBRTs7SUFDVCxrS0FBa0s7SUFDbEssTUFBTSxjQUFjLEdBQ2hCLENBQUEsTUFDSSxNQUNBLE1BQUEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLDBDQUNoQixjQUEwQztJQUN0RCxrQkFBa0I7SUFDbEIsOERBQThEO0lBQzNELDBDQUFFLFFBQ0YsMENBQUUsSUFBSSxNQUFLLFVBQVUsQ0FBQztJQUUzQixJQUFJLENBQUMsY0FBYyxFQUFFO1FBQ2pCLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsaUNBQWlDO0lBQ2pDLE1BQU0scUJBQXFCLEdBQUcsTUFBQSxDQUMxQixNQUFBLDZDQUFxQixDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsMENBQ3ZELEtBQ1QsQ0FBQSxDQUFDLE1BQU0sMENBQUUsTUFBTSxDQUFDO0lBRWpCLGtDQUFrQztJQUNsQyxNQUFNLGlCQUFpQixHQUFHLE1BQUEsNkNBQXFCLENBQUMsbUJBQW1CLENBQy9ELElBQUksRUFDSixRQUFRLENBQ1gsMENBQUUsS0FBNEMsQ0FBQztJQUVoRCxNQUFNLHNCQUFzQixHQUFHLGlCQUFpQjtRQUM1QyxDQUFDLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU07UUFDbkMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVSLHVCQUF1QjtJQUN2QixPQUFPLHNCQUFzQixLQUFLLHFCQUFxQixDQUFDO0FBQzVELENBQUMsQ0FBQztBQXBDVyxRQUFBLHFCQUFxQix5QkFvQ2hDO0FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBQSx1QkFBVSxFQUFDO0lBQ3BCLElBQUksRUFBRSxtREFBbUQ7SUFDekQsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUNQLG1HQUFtRztZQUN2RyxXQUFXLEVBQUUsS0FBSztZQUNsQixvQkFBb0IsRUFBRSxLQUFLO1NBQzlCO1FBQ0QsUUFBUSxFQUFFO1lBQ04sV0FBVyxFQUFFLDBGQUEwRjtTQUMxRztRQUNELE1BQU0sRUFBRSxFQUFFO1FBQ1YsSUFBSSxFQUFFLFNBQVM7S0FDbEI7SUFDRCxjQUFjLEVBQUUsRUFBRTtJQUVsQixNQUFNLENBQUMsT0FBK0Q7UUFDbEUsT0FBTztZQUNILGdFQUFnRTtZQUNoRSxrQkFBa0IsQ0FBQyxJQUFpQztnQkFDaEQsSUFBSSxJQUFBLDZCQUFxQixFQUFDLElBQUksQ0FBQyxFQUFFO29CQUM3QixPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNYLElBQUksRUFBRSxJQUFJO3dCQUNWLFNBQVMsRUFBRSxhQUFhO3FCQUMzQixDQUFDLENBQUM7aUJBQ047WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxrQkFBZSxJQUFJLENBQUMifQ==
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { TSESTree, TSESLint } from "@typescript-eslint/utils";
|
|
2
|
+
export declare type ValidateNonPrimitivePropertyTypeDecoratorOptions = [
|
|
3
|
+
{
|
|
4
|
+
additionalTypeDecorators: string[];
|
|
5
|
+
}
|
|
6
|
+
];
|
|
2
7
|
export declare const shouldTrigger: () => boolean;
|
|
3
|
-
declare const rule: TSESLint.RuleModule<"shouldUseTypeDecorator",
|
|
8
|
+
declare const rule: TSESLint.RuleModule<"shouldUseTypeDecorator", ValidateNonPrimitivePropertyTypeDecoratorOptions, {
|
|
4
9
|
PropertyDefinition(node: TSESTree.PropertyDefinition): void;
|
|
5
10
|
}>;
|
|
6
11
|
export default rule;
|
|
@@ -26,12 +26,29 @@ const rule = (0, createRule_1.createRule)({
|
|
|
26
26
|
messages: {
|
|
27
27
|
shouldUseTypeDecorator: "A non-primitve property with validation should probably use a @Type decorator",
|
|
28
28
|
},
|
|
29
|
-
schema: [
|
|
29
|
+
schema: [
|
|
30
|
+
{
|
|
31
|
+
properties: {
|
|
32
|
+
additionalTypeDecorators: {
|
|
33
|
+
description: "A list of custom type decorators that this rule will use to validate",
|
|
34
|
+
type: "array",
|
|
35
|
+
minItems: 0,
|
|
36
|
+
items: {
|
|
37
|
+
type: "string",
|
|
38
|
+
minLength: 1,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
],
|
|
30
44
|
hasSuggestions: false,
|
|
31
45
|
type: "suggestion",
|
|
32
46
|
},
|
|
33
|
-
defaultOptions: [],
|
|
47
|
+
defaultOptions: [{ additionalTypeDecorators: new Array() }],
|
|
34
48
|
create(context) {
|
|
49
|
+
const { additionalTypeDecorators } = context.options[0] || {
|
|
50
|
+
additionalTypeDecorators: [],
|
|
51
|
+
};
|
|
35
52
|
const parserServices = utils_1.ESLintUtils.getParserServices(context);
|
|
36
53
|
const typeChecker = parserServices.program.getTypeChecker();
|
|
37
54
|
return {
|
|
@@ -88,8 +105,13 @@ const rule = (0, createRule_1.createRule)({
|
|
|
88
105
|
if (foundClassValidatorDecorators.length === 0) {
|
|
89
106
|
return;
|
|
90
107
|
}
|
|
91
|
-
//
|
|
92
|
-
|
|
108
|
+
// we add the supplied extra decorators from settings to the type decorators
|
|
109
|
+
console.log(`deccc ${additionalTypeDecorators.flat(1)}`);
|
|
110
|
+
const typeDecorators = new Array().concat(additionalTypeDecorators, // these are user-specified extra type decorators, unique to user's project
|
|
111
|
+
["Type"] //this is the default type decorator
|
|
112
|
+
);
|
|
113
|
+
// ok so does the property have Type decorator or custom type decorator? it probably should
|
|
114
|
+
const foundTypeDecorator = typedTokenHelpers_1.typedTokenHelpers.getDecoratorsNamed(node, typeDecorators);
|
|
93
115
|
if (foundTypeDecorator.length === 0) {
|
|
94
116
|
context.report({
|
|
95
117
|
node: node,
|
|
@@ -101,4 +123,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
101
123
|
},
|
|
102
124
|
});
|
|
103
125
|
exports.default = rule;
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVOb25QcmltaXRpdmVOZWVkc0RlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvdmFsaWRhdGUtbm9uLXByaW1pdHZlcy1uZWVkcy10eXBlLWRlY29yYXRvci92YWxpZGF0ZU5vblByaW1pdGl2ZU5lZWRzRGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrREFBa0Q7QUFDbEQsb0RBS2tDO0FBQ2xDLHVEQUFrRDtBQUNsRCxxRUFBZ0U7QUFDaEUsbUZBQThFO0FBRTlFLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQzNCLHNCQUFjLENBQUMsZUFBZTtJQUM5QixzQkFBYyxDQUFDLGdCQUFnQjtJQUMvQixzQkFBYyxDQUFDLGVBQWU7Q0FDakMsQ0FBQyxDQUFDO0FBTUksTUFBTSxhQUFhLEdBQUcsR0FBWSxFQUFFO0lBQ3ZDLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUZXLFFBQUEsYUFBYSxpQkFFeEI7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQUM7SUFDcEIsSUFBSSxFQUFFLHVEQUF1RDtJQUM3RCxJQUFJLEVBQUU7UUFDRixJQUFJLEVBQUU7WUFDRixXQUFXLEVBQ1AsK0VBQStFO1lBQ25GLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLG9CQUFvQixFQUFFLEtBQUs7U0FDOUI7UUFDRCxRQUFRLEVBQUU7WUFDTixzQkFBc0IsRUFDbEIsK0VBQStFO1NBQ3RGO1FBQ0QsTUFBTSxFQUFFO1lBQ0o7Z0JBQ0ksVUFBVSxFQUFFO29CQUNSLHdCQUF3QixFQUFFO3dCQUN0QixXQUFXLEVBQ1Asc0VBQXNFO3dCQUMxRSxJQUFJLEVBQUUsT0FBTzt3QkFDYixRQUFRLEVBQUUsQ0FBQzt3QkFDWCxLQUFLLEVBQUU7NEJBQ0gsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsU0FBUyxFQUFFLENBQUM7eUJBQ2Y7cUJBQ0o7aUJBQ0o7YUFD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
|
|
@@ -2,7 +2,7 @@ import { TSESLint, TSESTree } from "@typescript-eslint/utils";
|
|
|
2
2
|
import { FilePath } from "eslint/use-at-your-own-risk";
|
|
3
3
|
import { NestProvidedInjectablesMap } from "./models/NestProvidedInjectablesMap";
|
|
4
4
|
declare const NestProvidedInjectableMapper: {
|
|
5
|
-
|
|
5
|
+
detectDirectoryToScanForFiles(sourceGlob: string | string[] | undefined, currentWorkingDirectory: string): string[];
|
|
6
6
|
parseFileList(files: Array<FilePath>, context: Readonly<TSESLint.RuleContext<never, any>>): Map<string, NestProvidedInjectablesMap>;
|
|
7
7
|
notEmpty<TValue>(value: TValue | null): value is TValue;
|
|
8
8
|
readFileContents(path: string): string;
|
|
@@ -38,23 +38,26 @@ const implementsForInjectablesThatAreNotProvided = new Set([
|
|
|
38
38
|
"NestMiddleware", //(isMiddleware)
|
|
39
39
|
]);
|
|
40
40
|
const NestProvidedInjectableMapper = {
|
|
41
|
-
|
|
41
|
+
detectDirectoryToScanForFiles(sourceGlob, currentWorkingDirectory) {
|
|
42
42
|
if (sourceGlob && typeof sourceGlob === "string") {
|
|
43
43
|
return [sourceGlob];
|
|
44
44
|
}
|
|
45
45
|
if (sourceGlob && Array.isArray(sourceGlob)) {
|
|
46
46
|
return sourceGlob;
|
|
47
47
|
}
|
|
48
|
+
console.debug("Injectables should be provided is using cwd for scanning. Consider configuring it in eslintrc.", { currentWorkingDirectory });
|
|
48
49
|
return [currentWorkingDirectory];
|
|
49
50
|
},
|
|
50
|
-
parseFileList(
|
|
51
|
-
// eslint-disable-next-line @typescript-eslint/no-
|
|
52
|
-
files,
|
|
53
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
|
|
51
|
+
parseFileList(files,
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
54
53
|
context) {
|
|
55
54
|
const moduleMaps = new Map();
|
|
56
55
|
files
|
|
57
|
-
.map((f) =>
|
|
56
|
+
.map((f) => {
|
|
57
|
+
const fileContents = NestProvidedInjectableMapper.readFileContents(f.filename);
|
|
58
|
+
const fileAstString = typedTokenHelpers_1.typedTokenHelpers.parseStringToAst(fileContents, f.filename, context);
|
|
59
|
+
return NestProvidedInjectableMapper.mapAllProvidedInjectables(fileAstString, f.filename);
|
|
60
|
+
})
|
|
58
61
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
59
62
|
.filter(NestProvidedInjectableMapper.notEmpty)
|
|
60
63
|
.forEach((m) => moduleMaps.set(m[0], m[1]));
|
|
@@ -84,14 +87,24 @@ const NestProvidedInjectableMapper = {
|
|
|
84
87
|
!unambiguous.isModule(ast)) {
|
|
85
88
|
return null;
|
|
86
89
|
}
|
|
90
|
+
// This does too much and should probably be split up
|
|
91
|
+
// i also assume you would never have multiple of providers, controllers or modules in a file
|
|
92
|
+
// dangerous assumption i guess. i have never seen this done before though.
|
|
93
|
+
// set up the response model
|
|
87
94
|
let nestModuleMap = null;
|
|
95
|
+
// Is this a module?
|
|
88
96
|
const foundNestModuleClass = nestModuleAstParser_1.nestModuleAstParser.findNestModuleClass(ast);
|
|
89
97
|
if (foundNestModuleClass) {
|
|
90
98
|
nestModuleMap = nestModuleAstParser_1.nestModuleAstParser.mapNestModuleDecorator(foundNestModuleClass, path);
|
|
99
|
+
return nestModuleMap;
|
|
91
100
|
}
|
|
92
|
-
|
|
93
|
-
if
|
|
94
|
-
|
|
101
|
+
// or is this a custom provider that would provide an instance of the class?
|
|
102
|
+
// if it is we map the itentifier it "provide"s. This will only work if it's an identifier
|
|
103
|
+
// it can't be provider for a string literal "provide".
|
|
104
|
+
const foundProviderDeclaration = nestProviderAstParser_1.nestProviderAstParser.findNestProviderVariableDeclaration(ast);
|
|
105
|
+
const provideProperty = nestProviderAstParser_1.nestProviderAstParser.findProvideProperty(foundProviderDeclaration, "provide");
|
|
106
|
+
if (provideProperty) {
|
|
107
|
+
nestModuleMap = nestProviderAstParser_1.nestProviderAstParser.mapNestProviderObject(provideProperty, path);
|
|
95
108
|
}
|
|
96
109
|
return nestModuleMap;
|
|
97
110
|
}
|
|
@@ -104,4 +117,4 @@ const NestProvidedInjectableMapper = {
|
|
|
104
117
|
},
|
|
105
118
|
};
|
|
106
119
|
exports.default = NestProvidedInjectableMapper;
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdFByb3ZpZGVkSW5qZWN0YWJsZU1hcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9uZXN0TW9kdWxlcy9uZXN0UHJvdmlkZWRJbmplY3RhYmxlTWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSw2RUFBK0Q7QUFHL0QsNENBQW9CO0FBQ3BCLDREQUF1RDtBQUd2RCwrREFBMEQ7QUFDMUQsbUVBQThEO0FBRTlELE1BQU0sMENBQTBDLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDdkQsYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsZ0JBQWdCLEVBQUUsZ0JBQWdCO0NBQ3JDLENBQUMsQ0FBQztBQUNILE1BQU0sNEJBQTRCLEdBQUc7SUFDakMsNkJBQTZCLENBQ3pCLFVBQXlDLEVBQ3pDLHVCQUErQjtRQUUvQixJQUFJLFVBQVUsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUU7WUFDOUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxVQUFVLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN6QyxPQUFPLFVBQVUsQ0FBQztTQUNyQjtRQUNELE9BQU8sQ0FBQyxLQUFLLENBQ1QsZ0dBQWdHLEVBQ2hHLEVBQUMsdUJBQXVCLEVBQUMsQ0FDNUIsQ0FBQztRQUNGLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxhQUFhLENBQ1QsS0FBc0I7SUFDdEIsOERBQThEO0lBQzlELE9BQW1EO1FBRW5ELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFzQyxDQUFDO1FBQ2pFLEtBQUs7YUFDQSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNQLE1BQU0sWUFBWSxHQUNkLDRCQUE0QixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxRQUFR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
|
|
@@ -2,6 +2,6 @@ import { TSESTree } from "@typescript-eslint/utils";
|
|
|
2
2
|
import { NestProvidedInjectablesMap } from "./models/NestProvidedInjectablesMap";
|
|
3
3
|
export declare const nestProviderAstParser: {
|
|
4
4
|
mapNestProviderObject(n: TSESTree.Property, path: string): Array<string | NestProvidedInjectablesMap> | null;
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
findProvideProperty(providerDeclaration: TSESTree.VariableDeclarator | undefined, propertyName: string): TSESTree.Property | null;
|
|
6
|
+
findNestProviderVariableDeclaration(ast: TSESTree.Program): TSESTree.VariableDeclarator | undefined;
|
|
7
7
|
};
|
|
@@ -15,7 +15,7 @@ exports.nestProviderAstParser = {
|
|
|
15
15
|
}
|
|
16
16
|
return null;
|
|
17
17
|
},
|
|
18
|
-
|
|
18
|
+
findProvideProperty(providerDeclaration, propertyName) {
|
|
19
19
|
if (providerDeclaration) {
|
|
20
20
|
const foundProviderProperty = providerDeclaration.init.properties.find((p) =>
|
|
21
21
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -25,19 +25,31 @@ exports.nestProviderAstParser = {
|
|
|
25
25
|
}
|
|
26
26
|
return null;
|
|
27
27
|
},
|
|
28
|
-
|
|
28
|
+
findNestProviderVariableDeclaration(ast) {
|
|
29
29
|
var _a;
|
|
30
30
|
for (const n of ast.body) {
|
|
31
31
|
if ((n.type === utils_1.AST_NODE_TYPES.ExportNamedDeclaration ||
|
|
32
32
|
n.type === utils_1.AST_NODE_TYPES.ExportDefaultDeclaration) &&
|
|
33
33
|
((_a = n.declaration) === null || _a === void 0 ? void 0 : _a.type) === utils_1.AST_NODE_TYPES.VariableDeclaration) {
|
|
34
34
|
const providerDeclaration = n.declaration.declarations.find((d) => {
|
|
35
|
-
var _a
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
var _a;
|
|
36
|
+
const isObjectExpression = (d.type === utils_1.AST_NODE_TYPES.VariableDeclarator &&
|
|
37
|
+
// has property "provide" and that property is an identifier
|
|
38
|
+
((_a = d.init) === null || _a === void 0 ? void 0 : _a.type) ===
|
|
39
|
+
utils_1.AST_NODE_TYPES.ObjectExpression) ||
|
|
40
|
+
false;
|
|
41
|
+
const hasProvideProperty = isObjectExpression &&
|
|
42
|
+
d.init.properties.some((property) => {
|
|
43
|
+
return ((property.type ===
|
|
44
|
+
utils_1.AST_NODE_TYPES.Property &&
|
|
45
|
+
property.key.type ===
|
|
46
|
+
utils_1.AST_NODE_TYPES.Identifier &&
|
|
47
|
+
property.key.name === "provide" &&
|
|
48
|
+
property.value.type ===
|
|
49
|
+
utils_1.AST_NODE_TYPES.Identifier) ||
|
|
50
|
+
false);
|
|
51
|
+
});
|
|
52
|
+
return hasProvideProperty;
|
|
41
53
|
});
|
|
42
54
|
return providerDeclaration;
|
|
43
55
|
}
|
|
@@ -45,4 +57,4 @@ exports.nestProviderAstParser = {
|
|
|
45
57
|
return undefined;
|
|
46
58
|
},
|
|
47
59
|
};
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdFByb3ZpZGVyQXN0UGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL25lc3RNb2R1bGVzL25lc3RQcm92aWRlckFzdFBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvREFBa0U7QUFDbEUsb0ZBQStFO0FBRWxFLFFBQUEscUJBQXFCLEdBQUc7SUFDakMscUJBQXFCLENBQ2pCLENBQW9CLEVBQ3BCLElBQVk7UUFFWiw4REFBOEQ7UUFDOUQsTUFBTSxZQUFZLEdBQUksQ0FBQyxDQUFDLEtBQTZCLENBQUMsSUFBSSxDQUFDO1FBQzNELElBQUksWUFBWSxFQUFFO1lBQ2QsT0FBTztnQkFDSCxJQUFJO2dCQUNKLElBQUksdURBQTBCLENBQzFCLElBQUksR0FBRyxFQUFFLEVBQ1QsSUFBSSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUMxQjthQUNKLENBQUM7U0FDTDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxtQkFBbUIsQ0FDZixtQkFBNEQsRUFDNUQsWUFBb0I7UUFFcEIsSUFBSSxtQkFBbUIsRUFBRTtZQUNyQixNQUFNLHFCQUFxQixHQUN2QixtQkFBbUIsQ0FBQyxJQUN2QixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ2IsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNGLDhEQUE4RDtZQUM1RCxDQUF1QixDQUFDLEdBQTJCO2lCQUNoRCxJQUFJLEtBQUssWUFBWSxDQUNaLENBQUM7WUFDdkIsT0FBTyxxQkFBcUIsQ0FBQztTQUNoQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxtQ0FBbUMsQ0FDL0IsR0FBcUI7O1FBRXJCLEtBQUssTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtZQUN0QixJQUNJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxzQkFBYyxDQUFDLHNCQUFzQjtnQkFDN0MsQ0FBQyxDQUFDLElBQUksS0FBSyxzQkFBYyxDQUFDLHdCQUF3QixDQUFDO2dCQUN2RCxDQUFBLE1BQUEsQ0FBQyxDQUFDLFdBQVcsMENBQUUsSUFBSSxNQUFLLHNCQUFjLENBQUMsbUJBQW1CLEVBQzVEO2dCQUNFLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN2RCxDQUFDLENBQUMsRUFBRSxFQUFFOztvQkFDRixNQUFNLGtCQUFrQixHQUNwQixDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssc0JBQWMsQ0FBQyxrQkFBa0I7d0JBQ3pDLDREQUE0RDt3QkFDNUQsQ0FBQSxNQUFBLENBQUMsQ0FBQyxJQUFJLDBDQUFFLElBQUk7NEJBQ1Isc0JBQWMsQ0FBQyxnQkFBZ0IsQ0FBQzt3QkFDeEMsS0FBSyxDQUFDO29CQUVWLE1BQU0sa0JBQWtCLEdBQ3BCLGtCQUFrQjt3QkFFZCxDQUFDLENBQUMsSUFDTCxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTs0QkFDM0IsT0FBTyxDQUNILENBQUMsUUFBUSxDQUFDLElBQUk7Z0NBQ1Ysc0JBQWMsQ0FBQyxRQUFRO2dDQUN2QixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUk7b0NBQ2Isc0JBQWMsQ0FBQyxVQUFVO2dDQUM3QixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTO2dDQUMvQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUk7b0NBQ2Ysc0JBQWMsQ0FBQyxVQUFVLENBQUM7Z0NBQ2xDLEtBQUssQ0FDUixDQUFDO3dCQUNOLENBQUMsQ0FBQyxDQUFDO29CQUNQLE9BQU8sa0JBQWtCLENBQUM7Z0JBQzlCLENBQUMsQ0FDSixDQUFDO2dCQUVGLE9BQU8sbUJBQW1CLENBQUM7YUFDOUI7U0FDSjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7Q0FDSixDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@darraghor/eslint-plugin-nestjs-typed",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.12.0",
|
|
4
4
|
"description": "Eslint rules for nestjs projects",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"clean": "rm -Rf ./dist/",
|
|
@@ -40,36 +40,36 @@
|
|
|
40
40
|
"main": "dist/index.js",
|
|
41
41
|
"types": "index.d.ts",
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@typescript-eslint/scope-manager": "5.
|
|
44
|
-
"@typescript-eslint/utils": "5.
|
|
45
|
-
"eslint-module-utils": "2.7.
|
|
43
|
+
"@typescript-eslint/scope-manager": "5.35.1",
|
|
44
|
+
"@typescript-eslint/utils": "5.35.1",
|
|
45
|
+
"eslint-module-utils": "2.7.4",
|
|
46
46
|
"reflect-metadata": "0.1.13"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@commitlint/cli": "17.
|
|
50
|
-
"@commitlint/config-conventional": "17.0
|
|
49
|
+
"@commitlint/cli": "17.1.1",
|
|
50
|
+
"@commitlint/config-conventional": "17.1.0",
|
|
51
51
|
"@semantic-release/changelog": "6.0.1",
|
|
52
52
|
"@semantic-release/exec": "6.0.3",
|
|
53
|
-
"@types/eslint": "8.4.
|
|
54
|
-
"@types/jest": "28.1.
|
|
55
|
-
"@types/node": "
|
|
56
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
57
|
-
"@typescript-eslint/parser": "5.
|
|
53
|
+
"@types/eslint": "8.4.6",
|
|
54
|
+
"@types/jest": "28.1.8",
|
|
55
|
+
"@types/node": "18.7.13",
|
|
56
|
+
"@typescript-eslint/eslint-plugin": "5.35.1",
|
|
57
|
+
"@typescript-eslint/parser": "5.35.1",
|
|
58
58
|
"class-validator": "^0.13.2",
|
|
59
|
-
"eslint": "8.
|
|
59
|
+
"eslint": "8.23.0",
|
|
60
60
|
"eslint-config-prettier": "8.5.0",
|
|
61
61
|
"eslint-plugin-import": "2.26.0",
|
|
62
|
-
"eslint-plugin-jsdoc": "39.3.
|
|
62
|
+
"eslint-plugin-jsdoc": "39.3.6",
|
|
63
63
|
"eslint-plugin-prefer-arrow": "1.2.3",
|
|
64
64
|
"eslint-plugin-unicorn": "43.0.2",
|
|
65
65
|
"husky": "8.0.1",
|
|
66
|
-
"jest": "
|
|
66
|
+
"jest": "29.0.1",
|
|
67
67
|
"jest-create-mock-instance": "2.0.0",
|
|
68
|
-
"jest-junit": "14.0.
|
|
68
|
+
"jest-junit": "14.0.1",
|
|
69
69
|
"lint-staged": "13.0.3",
|
|
70
70
|
"prettier": "2.7.1",
|
|
71
|
-
"semantic-release": "19.0.
|
|
72
|
-
"ts-jest": "28.0.
|
|
71
|
+
"semantic-release": "19.0.5",
|
|
72
|
+
"ts-jest": "28.0.8",
|
|
73
73
|
"ts-node": "10.9.1",
|
|
74
74
|
"typescript": "4.7.4"
|
|
75
75
|
},
|