@darraghor/eslint-plugin-nestjs-typed 6.0.0-rc.9 → 6.1.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -16
- package/dist/configs/base.d.ts +1 -1
- package/dist/configs/base.js +3 -4
- package/dist/configs/noSwagger.d.ts +2 -1
- package/dist/configs/noSwagger.js +3 -4
- package/dist/configs/recommended.d.ts +2 -1
- package/dist/configs/recommended.js +3 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +25 -57
- package/dist/rules/allPropertiesAreWhitelisted/allPropertiesAreWhitelisted.js +11 -13
- package/dist/rules/allPropertiesHaveExplicitDefined/allPropertiesHaveExplicitDefined.js +15 -17
- package/dist/rules/apiEnumPropertyBestPractices/apiEnumPropertyBestPractices.d.ts +1 -1
- package/dist/rules/apiEnumPropertyBestPractices/apiEnumPropertyBestPractices.js +17 -22
- package/dist/rules/apiEnumPropertyBestPractices/enumTestResultModel.js +2 -6
- package/dist/rules/apiMethodsShouldBeGuarded/apiMethodsShouldBeGuarded.js +12 -16
- package/dist/rules/apiMethodsShouldSpecifyApiOperation/apiMethodsShouldSpecifyApiOperation.js +9 -13
- package/dist/rules/apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.js +9 -13
- package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.js +13 -18
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/apiPropertyReturningArrayShouldSetArray.d.ts +1 -1
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/apiPropertyReturningArrayShouldSetArray.js +17 -24
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/arraySetResultModel.js +2 -5
- package/dist/rules/controllerDecoratedHasApiTags/controllerDecoratedHasApiTags.js +9 -13
- package/dist/rules/index.d.ts +3 -3
- package/dist/rules/index.js +36 -41
- package/dist/rules/injectablesShouldBeProvided/injectableShouldBeProvided.js +32 -24
- package/dist/rules/noDuplicateDecorators/noDuplicateDecorators.js +10 -14
- package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.js +19 -26
- package/dist/rules/paramDecoratorNameMatchesRouteParam/rule.testData.js +3 -6
- package/dist/rules/providerInjectedShouldMatchFactory/ProviderInjectedShouldMatchFactory.js +12 -18
- package/dist/rules/shouldSpecifyForbidUnknownValues/shouldSpecifyForbidUnknownValuesRule.js +20 -27
- package/dist/rules/sortModuleMetadataArrays/sortModuleMetadataArrays.js +18 -23
- package/dist/rules/validateNestedOfArrayShouldSetEach/arraySetResultModel.js +2 -5
- package/dist/rules/validateNestedOfArrayShouldSetEach/validateNestedOfArrayShouldSetEach.d.ts +1 -1
- package/dist/rules/validateNestedOfArrayShouldSetEach/validateNestedOfArrayShouldSetEach.js +14 -21
- package/dist/rules/validateNonPrimitiveNeedsTypeDecorator/validateNonPrimitiveNeedsDecorators.js +29 -33
- package/dist/testing/fixtureSetup.js +4 -10
- package/dist/testing/preRun.js +2 -4
- package/dist/utils/ast.js +4 -7
- package/dist/utils/createRule.js +3 -6
- package/dist/utils/files/customFileEnumeratorWrapper.js +9 -16
- package/dist/utils/files/isFilteredPath.js +2 -4
- package/dist/utils/nestModules/models/NestProvidedInjectablesMap.d.ts +1 -0
- package/dist/utils/nestModules/models/NestProvidedInjectablesMap.js +2 -6
- package/dist/utils/nestModules/nestModuleAstParser.d.ts +2 -2
- package/dist/utils/nestModules/nestModuleAstParser.js +10 -13
- package/dist/utils/nestModules/nestProvidedInjectableMapper.d.ts +4 -4
- package/dist/utils/nestModules/nestProvidedInjectableMapper.js +24 -58
- package/dist/utils/nestModules/nestProvidedInjectableMapper.testData.d.ts +1 -1
- package/dist/utils/nestModules/nestProvidedInjectableMapper.testData.js +9 -12
- package/dist/utils/nestModules/nestProviderAstParser.d.ts +2 -2
- package/dist/utils/nestModules/nestProviderAstParser.js +13 -16
- package/dist/utils/typedTokenHelpers.js +25 -64
- package/dist/utils/wellKnownSelectors.js +2 -5
- package/package.json +4 -3
- package/dist/configs/index.d.ts +0 -11
- package/dist/configs/index.js +0 -13
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EnumTestResultModel = void 0;
|
|
4
|
-
class EnumTestResultModel {
|
|
1
|
+
export class EnumTestResultModel {
|
|
5
2
|
constructor(init) {
|
|
6
3
|
this.needsEnumAdded = init.needsEnumAdded;
|
|
7
4
|
this.needsEnumNameAdded = init.needsEnumNameAdded;
|
|
@@ -9,5 +6,4 @@ class EnumTestResultModel {
|
|
|
9
6
|
this.needsEnumNameToMatchEnumType = init.needsEnumNameToMatchEnumType;
|
|
10
7
|
}
|
|
11
8
|
}
|
|
12
|
-
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bVRlc3RSZXN1bHRNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlFbnVtUHJvcGVydHlCZXN0UHJhY3RpY2VzL2VudW1UZXN0UmVzdWx0TW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBYSxtQkFBbUI7SUFDNUIsWUFBWSxJQUF5QjtRQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDMUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzlDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUM7SUFDMUUsQ0FBQztDQUtKO0FBWEQsa0RBV0MifQ==
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bVRlc3RSZXN1bHRNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlFbnVtUHJvcGVydHlCZXN0UHJhY3RpY2VzL2VudW1UZXN0UmVzdWx0TW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLG1CQUFtQjtJQUM1QixZQUFZLElBQXlCO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMxQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQ2xELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDOUMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQztJQUMxRSxDQUFDO0NBS0oifQ==
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const apiMethodsShouldBeGuarded = (node) => {
|
|
8
|
-
const hasApiMethodDecorator = typedTokenHelpers_1.typedTokenHelpers.nodeHasDecoratorsNamed(node, ["Get", "Post", "Put", "Delete", "Patch", "Options", "Head", "All"]);
|
|
9
|
-
const hasUseGuardsDecorator = typedTokenHelpers_1.typedTokenHelpers.nodeHasDecoratorsNamed(node, ["UseGuards"]);
|
|
1
|
+
import { TSESTree } from "@typescript-eslint/utils";
|
|
2
|
+
import { createRule } from "../../utils/createRule.js";
|
|
3
|
+
import { typedTokenHelpers } from "../../utils/typedTokenHelpers.js";
|
|
4
|
+
export const apiMethodsShouldBeGuarded = (node) => {
|
|
5
|
+
const hasApiMethodDecorator = typedTokenHelpers.nodeHasDecoratorsNamed(node, ["Get", "Post", "Put", "Delete", "Patch", "Options", "Head", "All"]);
|
|
6
|
+
const hasUseGuardsDecorator = typedTokenHelpers.nodeHasDecoratorsNamed(node, ["UseGuards"]);
|
|
10
7
|
function findClassDeclaration(node) {
|
|
11
|
-
if (node.type ===
|
|
8
|
+
if (node.type === TSESTree.AST_NODE_TYPES.ClassDeclaration) {
|
|
12
9
|
return node;
|
|
13
10
|
}
|
|
14
11
|
if (node.parent) {
|
|
@@ -18,14 +15,13 @@ const apiMethodsShouldBeGuarded = (node) => {
|
|
|
18
15
|
}
|
|
19
16
|
const classNode = findClassDeclaration(node);
|
|
20
17
|
const hasUseGuardsDecoratorOnController = classNode
|
|
21
|
-
?
|
|
18
|
+
? typedTokenHelpers.nodeHasDecoratorsNamed(classNode, ["UseGuards"])
|
|
22
19
|
: false;
|
|
23
20
|
return (hasApiMethodDecorator &&
|
|
24
21
|
!hasUseGuardsDecorator &&
|
|
25
22
|
!hasUseGuardsDecoratorOnController);
|
|
26
23
|
};
|
|
27
|
-
|
|
28
|
-
const rule = (0, createRule_1.createRule)({
|
|
24
|
+
const rule = createRule({
|
|
29
25
|
name: "api-methods-should-be-guarded",
|
|
30
26
|
meta: {
|
|
31
27
|
docs: {
|
|
@@ -42,7 +38,7 @@ const rule = (0, createRule_1.createRule)({
|
|
|
42
38
|
create(context) {
|
|
43
39
|
return {
|
|
44
40
|
MethodDefinition(node) {
|
|
45
|
-
if (
|
|
41
|
+
if (apiMethodsShouldBeGuarded(node)) {
|
|
46
42
|
context.report({
|
|
47
43
|
node: node,
|
|
48
44
|
messageId: "apiMethodsShouldBeGuarded",
|
|
@@ -52,5 +48,5 @@ const rule = (0, createRule_1.createRule)({
|
|
|
52
48
|
};
|
|
53
49
|
},
|
|
54
50
|
});
|
|
55
|
-
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
export default rule;
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpTWV0aG9kc1Nob3VsZEJlR3VhcmRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlNZXRob2RzU2hvdWxkQmVHdWFyZGVkL2FwaU1ldGhvZHNTaG91bGRCZUd1YXJkZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUVuRSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLElBQStCLEVBQUUsRUFBRTtJQUN6RSxNQUFNLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDLHNCQUFzQixDQUNsRSxJQUFJLEVBQ0osQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQ3RFLENBQUM7SUFFRixNQUFNLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDLHNCQUFzQixDQUNsRSxJQUFJLEVBQ0osQ0FBQyxXQUFXLENBQUMsQ0FDaEIsQ0FBQztJQUVGLFNBQVMsb0JBQW9CLENBQ3pCLElBQW1CO1FBRW5CLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDekQsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsT0FBTyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU3QyxNQUFNLGlDQUFpQyxHQUFHLFNBQVM7UUFDL0MsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFFWixPQUFPLENBQ0gscUJBQXFCO1FBQ3JCLENBQUMscUJBQXFCO1FBQ3RCLENBQUMsaUNBQWlDLENBQ3JDLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRixNQUFNLElBQUksR0FBRyxVQUFVLENBQWtDO0lBQ3JELElBQUksRUFBRSwrQkFBK0I7SUFDckMsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUNQLDZFQUE2RTtTQUNwRjtRQUNELFFBQVEsRUFBRTtZQUNOLHlCQUF5QixFQUNyQiwyR0FBMkc7U0FDbEg7UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLElBQUksRUFBRSxZQUFZO0tBQ3JCO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFDbEIsTUFBTSxDQUFDLE9BQU87UUFDVixPQUFPO1lBQ0gsZ0JBQWdCLENBQUMsSUFBK0I7Z0JBQzVDLElBQUkseUJBQXlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsMkJBQTJCO3FCQUN6QyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztZQUNMLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQUVILGVBQWUsSUFBSSxDQUFDIn0=
|
package/dist/rules/apiMethodsShouldSpecifyApiOperation/apiMethodsShouldSpecifyApiOperation.js
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const shouldUseApiResponseDecorator = (node) => {
|
|
7
|
-
const hasApiMethodDecorator = typedTokenHelpers_1.typedTokenHelpers.nodeHasDecoratorsNamed(node, ["Get", "Post", "Put", "Delete", "Patch", "Options", "Head", "All"]);
|
|
8
|
-
const hasApiOperationDecorator = typedTokenHelpers_1.typedTokenHelpers.nodeHasDecoratorsNamed(node, ["ApiOperation"]);
|
|
1
|
+
import { createRule } from "../../utils/createRule.js";
|
|
2
|
+
import { typedTokenHelpers } from "../../utils/typedTokenHelpers.js";
|
|
3
|
+
export const shouldUseApiResponseDecorator = (node) => {
|
|
4
|
+
const hasApiMethodDecorator = typedTokenHelpers.nodeHasDecoratorsNamed(node, ["Get", "Post", "Put", "Delete", "Patch", "Options", "Head", "All"]);
|
|
5
|
+
const hasApiOperationDecorator = typedTokenHelpers.nodeHasDecoratorsNamed(node, ["ApiOperation"]);
|
|
9
6
|
return hasApiMethodDecorator && !hasApiOperationDecorator;
|
|
10
7
|
};
|
|
11
|
-
|
|
12
|
-
const rule = (0, createRule_1.createRule)({
|
|
8
|
+
const rule = createRule({
|
|
13
9
|
name: "api-method-should-specify-api-operation",
|
|
14
10
|
meta: {
|
|
15
11
|
docs: {
|
|
@@ -26,7 +22,7 @@ const rule = (0, createRule_1.createRule)({
|
|
|
26
22
|
create(context) {
|
|
27
23
|
return {
|
|
28
24
|
MethodDefinition(node) {
|
|
29
|
-
if (
|
|
25
|
+
if (shouldUseApiResponseDecorator(node)) {
|
|
30
26
|
context.report({
|
|
31
27
|
node: node,
|
|
32
28
|
messageId: "shouldSpecifyApiOperation",
|
|
@@ -36,5 +32,5 @@ const rule = (0, createRule_1.createRule)({
|
|
|
36
32
|
};
|
|
37
33
|
},
|
|
38
34
|
});
|
|
39
|
-
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
export default rule;
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpTWV0aG9kc1Nob3VsZFNwZWNpZnlBcGlPcGVyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvYXBpTWV0aG9kc1Nob3VsZFNwZWNpZnlBcGlPcGVyYXRpb24vYXBpTWV0aG9kc1Nob3VsZFNwZWNpZnlBcGlPcGVyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQ3pDLElBQStCLEVBQ3hCLEVBQUU7SUFDVCxNQUFNLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDLHNCQUFzQixDQUNsRSxJQUFJLEVBQ0osQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQ3RFLENBQUM7SUFFRixNQUFNLHdCQUF3QixHQUFHLGlCQUFpQixDQUFDLHNCQUFzQixDQUNyRSxJQUFJLEVBQ0osQ0FBQyxjQUFjLENBQUMsQ0FDbkIsQ0FBQztJQUVGLE9BQU8scUJBQXFCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztBQUM5RCxDQUFDLENBQUM7QUFFRixNQUFNLElBQUksR0FBRyxVQUFVLENBQWtDO0lBQ3JELElBQUksRUFBRSx5Q0FBeUM7SUFDL0MsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUNQLGdFQUFnRTtTQUN2RTtRQUNELFFBQVEsRUFBRTtZQUNOLHlCQUF5QixFQUFFLG1MQUFtTDtTQUNqTjtRQUNELE1BQU0sRUFBRSxFQUFFO1FBQ1YsY0FBYyxFQUFFLEtBQUs7UUFDckIsSUFBSSxFQUFFLFlBQVk7S0FDckI7SUFDRCxjQUFjLEVBQUUsRUFBRTtJQUVsQixNQUFNLENBQUMsT0FBTztRQUNWLE9BQU87WUFDSCxnQkFBZ0IsQ0FBQyxJQUErQjtnQkFDNUMsSUFBSSw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUN0QyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNYLElBQUksRUFBRSxJQUFJO3dCQUNWLFNBQVMsRUFBRSwyQkFBMkI7cUJBQ3pDLENBQUMsQ0FBQztnQkFDUCxDQUFDO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FBRUgsZUFBZSxJQUFJLENBQUMifQ==
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const shouldUseApiResponseDecorator = (node) => {
|
|
7
|
-
const hasApiMethodDecorator = typedTokenHelpers_1.typedTokenHelpers.nodeHasDecoratorsNamed(node, ["Get", "Post", "Put", "Delete", "Patch", "Options", "Head", "All"]);
|
|
8
|
-
const hasApiResponseDecorator = typedTokenHelpers_1.typedTokenHelpers.nodeHasDecoratorsNamed(node, [
|
|
1
|
+
import { createRule } from "../../utils/createRule.js";
|
|
2
|
+
import { typedTokenHelpers } from "../../utils/typedTokenHelpers.js";
|
|
3
|
+
export const shouldUseApiResponseDecorator = (node) => {
|
|
4
|
+
const hasApiMethodDecorator = typedTokenHelpers.nodeHasDecoratorsNamed(node, ["Get", "Post", "Put", "Delete", "Patch", "Options", "Head", "All"]);
|
|
5
|
+
const hasApiResponseDecorator = typedTokenHelpers.nodeHasDecoratorsNamed(node, [
|
|
9
6
|
"ApiResponse",
|
|
10
7
|
"ApiOkResponse",
|
|
11
8
|
"ApiCreatedResponse",
|
|
@@ -36,8 +33,7 @@ const shouldUseApiResponseDecorator = (node) => {
|
|
|
36
33
|
]);
|
|
37
34
|
return hasApiMethodDecorator && !hasApiResponseDecorator;
|
|
38
35
|
};
|
|
39
|
-
|
|
40
|
-
const rule = (0, createRule_1.createRule)({
|
|
36
|
+
const rule = createRule({
|
|
41
37
|
name: "api-method-should-specify-api-response",
|
|
42
38
|
meta: {
|
|
43
39
|
docs: {
|
|
@@ -54,7 +50,7 @@ const rule = (0, createRule_1.createRule)({
|
|
|
54
50
|
create(context) {
|
|
55
51
|
return {
|
|
56
52
|
MethodDefinition(node) {
|
|
57
|
-
if (
|
|
53
|
+
if (shouldUseApiResponseDecorator(node)) {
|
|
58
54
|
context.report({
|
|
59
55
|
node: node,
|
|
60
56
|
messageId: "shouldSpecifyApiResponse",
|
|
@@ -64,5 +60,5 @@ const rule = (0, createRule_1.createRule)({
|
|
|
64
60
|
};
|
|
65
61
|
},
|
|
66
62
|
});
|
|
67
|
-
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
export default rule;
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpTWV0aG9kc1Nob3VsZFNwZWNpZnlBcGlSZXNwb25zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlNZXRob2RzU2hvdWxkU3BlY2lmeUFwaVJlc3BvbnNlL2FwaU1ldGhvZHNTaG91bGRTcGVjaWZ5QXBpUmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQ3pDLElBQStCLEVBQ3hCLEVBQUU7SUFDVCxNQUFNLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDLHNCQUFzQixDQUNsRSxJQUFJLEVBQ0osQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQ3RFLENBQUM7SUFFRixNQUFNLHVCQUF1QixHQUFHLGlCQUFpQixDQUFDLHNCQUFzQixDQUNwRSxJQUFJLEVBQ0o7UUFDSSxhQUFhO1FBQ2IsZUFBZTtRQUNmLG9CQUFvQjtRQUNwQixxQkFBcUI7UUFDckIsc0JBQXNCO1FBQ3RCLDZCQUE2QjtRQUM3QixrQkFBa0I7UUFDbEIsdUJBQXVCO1FBQ3ZCLHlCQUF5QjtRQUN6Qiw0QkFBNEI7UUFDNUIscUJBQXFCO1FBQ3JCLGdDQUFnQztRQUNoQyx1QkFBdUI7UUFDdkIscUJBQXFCO1FBQ3JCLHNCQUFzQjtRQUN0QiwyQkFBMkI7UUFDM0IsaUJBQWlCO1FBQ2pCLDZCQUE2QjtRQUM3QiwwQkFBMEI7UUFDMUIsMkJBQTJCO1FBQzNCLCtCQUErQjtRQUMvQiw0QkFBNEI7UUFDNUIsMkJBQTJCO1FBQzNCLCtCQUErQjtRQUMvQixnQ0FBZ0M7UUFDaEMsaUNBQWlDO1FBQ2pDLG9CQUFvQjtLQUN2QixDQUNKLENBQUM7SUFFRixPQUFPLHFCQUFxQixJQUFJLENBQUMsdUJBQXVCLENBQUM7QUFDN0QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFpQztJQUNwRCxJQUFJLEVBQUUsd0NBQXdDO0lBQzlDLElBQUksRUFBRTtRQUNGLElBQUksRUFBRTtZQUNGLFdBQVcsRUFDUCwwSkFBMEo7U0FDaks7UUFDRCxRQUFRLEVBQUU7WUFDTix3QkFBd0IsRUFBRSw4S0FBOEs7U0FDM007UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLElBQUksRUFBRSxZQUFZO0tBQ3JCO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFFbEIsTUFBTSxDQUFDLE9BQU87UUFDVixPQUFPO1lBQ0gsZ0JBQWdCLENBQUMsSUFBK0I7Z0JBQzVDLElBQUksNkJBQTZCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDdEMsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsMEJBQTBCO3FCQUN4QyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztZQUNMLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQUVILGVBQWUsSUFBSSxDQUFDIn0=
|
package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.js
CHANGED
|
@@ -1,21 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const shouldUseRequiredDecorator = (node) => {
|
|
7
|
-
const hasOptionalDecorator = typedTokenHelpers_1.typedTokenHelpers.nodeHasDecoratorsNamed(node, ["ApiPropertyOptional"]);
|
|
8
|
-
const isOptionalPropertyValue = typedTokenHelpers_1.typedTokenHelpers.isOptionalPropertyValue(node);
|
|
1
|
+
import { createRule } from "../../utils/createRule.js";
|
|
2
|
+
import { typedTokenHelpers } from "../../utils/typedTokenHelpers.js";
|
|
3
|
+
export const shouldUseRequiredDecorator = (node) => {
|
|
4
|
+
const hasOptionalDecorator = typedTokenHelpers.nodeHasDecoratorsNamed(node, ["ApiPropertyOptional"]);
|
|
5
|
+
const isOptionalPropertyValue = typedTokenHelpers.isOptionalPropertyValue(node);
|
|
9
6
|
return hasOptionalDecorator && !isOptionalPropertyValue;
|
|
10
7
|
};
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const isOptionalPropertyValue = typedTokenHelpers_1.typedTokenHelpers.isOptionalPropertyValue(node);
|
|
8
|
+
export const shouldUseOptionalDecorator = (node) => {
|
|
9
|
+
const hasRequiredDecorator = typedTokenHelpers.nodeHasDecoratorsNamed(node, ["ApiProperty"]);
|
|
10
|
+
const isOptionalPropertyValue = typedTokenHelpers.isOptionalPropertyValue(node);
|
|
15
11
|
return hasRequiredDecorator && isOptionalPropertyValue;
|
|
16
12
|
};
|
|
17
|
-
|
|
18
|
-
const rule = (0, createRule_1.createRule)({
|
|
13
|
+
const rule = createRule({
|
|
19
14
|
name: "api-property-matches-property-optionality",
|
|
20
15
|
meta: {
|
|
21
16
|
docs: {
|
|
@@ -33,13 +28,13 @@ const rule = (0, createRule_1.createRule)({
|
|
|
33
28
|
create(context) {
|
|
34
29
|
return {
|
|
35
30
|
PropertyDefinition(node) {
|
|
36
|
-
if (
|
|
31
|
+
if (shouldUseOptionalDecorator(node)) {
|
|
37
32
|
context.report({
|
|
38
33
|
node: node,
|
|
39
34
|
messageId: "shouldUseOptionalDecorator",
|
|
40
35
|
});
|
|
41
36
|
}
|
|
42
|
-
if (
|
|
37
|
+
if (shouldUseRequiredDecorator(node)) {
|
|
43
38
|
context.report({
|
|
44
39
|
node: node,
|
|
45
40
|
messageId: "shouldUseRequiredDecorator",
|
|
@@ -49,5 +44,5 @@ const rule = (0, createRule_1.createRule)({
|
|
|
49
44
|
};
|
|
50
45
|
},
|
|
51
46
|
});
|
|
52
|
-
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
export default rule;
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUHJvcGVydHlNYXRjaGVzUHJvcGVydHlPcHRpb25hbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlQcm9wZXJ0eU1hdGNoZXNQcm9wZXJ0eU9wdGlvbmFsaXR5L2FwaVByb3BlcnR5TWF0Y2hlc1Byb3BlcnR5T3B0aW9uYWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQ3RDLElBQWlDLEVBQzFCLEVBQUU7SUFDVCxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDLHNCQUFzQixDQUNqRSxJQUFJLEVBQ0osQ0FBQyxxQkFBcUIsQ0FBQyxDQUMxQixDQUFDO0lBRUYsTUFBTSx1QkFBdUIsR0FDekIsaUJBQWlCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFcEQsT0FBTyxvQkFBb0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDO0FBQzVELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQ3RDLElBQWlDLEVBQzFCLEVBQUU7SUFDVCxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDLHNCQUFzQixDQUNqRSxJQUFJLEVBQ0osQ0FBQyxhQUFhLENBQUMsQ0FDbEIsQ0FBQztJQUVGLE1BQU0sdUJBQXVCLEdBQ3pCLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXBELE9BQU8sb0JBQW9CLElBQUksdUJBQXVCLENBQUM7QUFDM0QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUdyQjtJQUNFLElBQUksRUFBRSwyQ0FBMkM7SUFDakQsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUNQLHdEQUF3RDtTQUMvRDtRQUNELFFBQVEsRUFBRTtZQUNOLDBCQUEwQixFQUFFLHVFQUF1RTtZQUNuRywwQkFBMEIsRUFBRSwrREFBK0Q7U0FDOUY7UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLElBQUksRUFBRSxZQUFZO0tBQ3JCO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFFbEIsTUFBTSxDQUFDLE9BQU87UUFDVixPQUFPO1lBQ0gsa0JBQWtCLENBQUMsSUFBaUM7Z0JBQ2hELElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDbkMsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsNEJBQTRCO3FCQUMxQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztnQkFDRCxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ25DLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ1gsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLDRCQUE0QjtxQkFDMUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxlQUFlLElBQUksQ0FBQyJ9
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TSESTree } from "@typescript-eslint/utils";
|
|
2
|
-
import ArraySetResultModel from "./arraySetResultModel";
|
|
2
|
+
import ArraySetResultModel from "./arraySetResultModel.js";
|
|
3
3
|
export declare const shouldSetArrayProperty: (node: TSESTree.PropertyDefinition) => ArraySetResultModel;
|
|
4
4
|
declare const rule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSetArrayPropertyTrue" | "shouldSetArrayPropertyFalse", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
5
5
|
export default rule;
|
|
@@ -1,42 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const utils_1 = require("@typescript-eslint/utils");
|
|
8
|
-
const createRule_1 = require("../../utils/createRule");
|
|
9
|
-
const typedTokenHelpers_1 = require("../../utils/typedTokenHelpers");
|
|
10
|
-
const arraySetResultModel_1 = __importDefault(require("./arraySetResultModel"));
|
|
11
|
-
const shouldSetArrayProperty = (node) => {
|
|
12
|
-
const decorators = typedTokenHelpers_1.typedTokenHelpers.getDecoratorsNamed(node, [
|
|
1
|
+
import { AST_NODE_TYPES } from "@typescript-eslint/utils";
|
|
2
|
+
import { createRule } from "../../utils/createRule.js";
|
|
3
|
+
import { typedTokenHelpers } from "../../utils/typedTokenHelpers.js";
|
|
4
|
+
import ArraySetResultModel from "./arraySetResultModel.js";
|
|
5
|
+
export const shouldSetArrayProperty = (node) => {
|
|
6
|
+
const decorators = typedTokenHelpers.getDecoratorsNamed(node, [
|
|
13
7
|
"ApiPropertyOptional",
|
|
14
8
|
"ApiProperty",
|
|
15
9
|
]);
|
|
16
10
|
if (decorators.length === 0) {
|
|
17
|
-
return new
|
|
11
|
+
return new ArraySetResultModel(false, false);
|
|
18
12
|
}
|
|
19
13
|
// There should only be one of these apiproperty decorators so we just grab the parameter to decorator at index 0
|
|
20
14
|
const firstArgumentToDecorator = decorators[0].expression?.arguments[0];
|
|
21
15
|
// if the code is using anything other than object expression, ignore the rule (we dont want to go looking at objects)
|
|
22
16
|
// we DO want to alert if there is no argument at all. so we continue to test the rule if no argument was passed
|
|
23
17
|
if (firstArgumentToDecorator &&
|
|
24
|
-
(firstArgumentToDecorator.type !==
|
|
18
|
+
(firstArgumentToDecorator.type !== AST_NODE_TYPES.ObjectExpression ||
|
|
25
19
|
// if the things passed to the object expression contains a spread then ignore that too!
|
|
26
|
-
firstArgumentToDecorator.properties.some((x) => x.type ===
|
|
27
|
-
return new
|
|
20
|
+
firstArgumentToDecorator.properties.some((x) => x.type === AST_NODE_TYPES.SpreadElement))) {
|
|
21
|
+
return new ArraySetResultModel(false, false);
|
|
28
22
|
}
|
|
29
|
-
const hasIsArraySetInOptions =
|
|
23
|
+
const hasIsArraySetInOptions = typedTokenHelpers.getPropertyValueEqualsExpected(firstArgumentToDecorator, "isArray", true);
|
|
30
24
|
const typeAnnotation = node.typeAnnotation?.typeAnnotation;
|
|
31
25
|
// handle string[] or Array<string>
|
|
32
26
|
const isArrayType = typeAnnotation
|
|
33
27
|
?.typeName?.name === "Array";
|
|
34
|
-
const isTypescriptArrayType = typeAnnotation?.type ===
|
|
28
|
+
const isTypescriptArrayType = typeAnnotation?.type === AST_NODE_TYPES.TSArrayType;
|
|
35
29
|
const isAnArrayLikeType = isArrayType || isTypescriptArrayType;
|
|
36
|
-
return new
|
|
30
|
+
return new ArraySetResultModel(isAnArrayLikeType && !hasIsArraySetInOptions, !isAnArrayLikeType && hasIsArraySetInOptions);
|
|
37
31
|
};
|
|
38
|
-
|
|
39
|
-
const rule = (0, createRule_1.createRule)({
|
|
32
|
+
const rule = createRule({
|
|
40
33
|
name: "api-property-returning-array-should-set-array",
|
|
41
34
|
meta: {
|
|
42
35
|
docs: {
|
|
@@ -54,7 +47,7 @@ const rule = (0, createRule_1.createRule)({
|
|
|
54
47
|
create(context) {
|
|
55
48
|
return {
|
|
56
49
|
PropertyDefinition: (node) => {
|
|
57
|
-
const shouldSetArrayResults =
|
|
50
|
+
const shouldSetArrayResults = shouldSetArrayProperty(node);
|
|
58
51
|
if (shouldSetArrayResults.isArrayShouldBeSetFalse) {
|
|
59
52
|
context.report({
|
|
60
53
|
node: node,
|
|
@@ -71,5 +64,5 @@ const rule = (0, createRule_1.createRule)({
|
|
|
71
64
|
};
|
|
72
65
|
},
|
|
73
66
|
});
|
|
74
|
-
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
export default rule;
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUHJvcGVydHlSZXR1cm5pbmdBcnJheVNob3VsZFNldEFycmF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL2FwaVByb3BlcnR5UmV0dXJuaW5nQXJyYXlTaG91bGRTZXRBcnJheS9hcGlQcm9wZXJ0eVJldHVybmluZ0FycmF5U2hvdWxkU2V0QXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBVyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLG1CQUFtQixNQUFNLDBCQUEwQixDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQ2xDLElBQWlDLEVBQ2QsRUFBRTtJQUNyQixNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7UUFDMUQscUJBQXFCO1FBQ3JCLGFBQWE7S0FDaEIsQ0FBQyxDQUFDO0lBRUgsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGlIQUFpSDtJQUNqSCxNQUFNLHdCQUF3QixHQUMxQixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFDakIsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFaEIsc0hBQXNIO0lBQ3RILGdIQUFnSDtJQUNoSCxJQUNJLHdCQUF3QjtRQUN4QixDQUFDLHdCQUF3QixDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsZ0JBQWdCO1lBQzlELHdGQUF3RjtZQUN4Rix3QkFBd0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNwQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsYUFBYSxDQUNqRCxDQUFDLEVBQ1IsQ0FBQztRQUNDLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELE1BQU0sc0JBQXNCLEdBQ3hCLGlCQUFpQixDQUFDLDhCQUE4QixDQUM1Qyx3QkFBd0IsRUFDeEIsU0FBUyxFQUNULElBQUksQ0FDUCxDQUFDO0lBRU4sTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUM7SUFDM0QsbUNBQW1DO0lBQ25DLE1BQU0sV0FBVyxHQUVSLGNBQXVEO1FBQ3BELEVBQUUsUUFDVCxFQUFFLElBQUksS0FBSyxPQUFPLENBQUM7SUFDeEIsTUFBTSxxQkFBcUIsR0FDdkIsY0FBYyxFQUFFLElBQUksS0FBSyxjQUFjLENBQUMsV0FBVyxDQUFDO0lBQ3hELE1BQU0saUJBQWlCLEdBQUcsV0FBVyxJQUFJLHFCQUFxQixDQUFDO0lBRS9ELE9BQU8sSUFBSSxtQkFBbUIsQ0FDMUIsaUJBQWlCLElBQUksQ0FBQyxzQkFBc0IsRUFDNUMsQ0FBQyxpQkFBaUIsSUFBSSxzQkFBc0IsQ0FDL0MsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FHckI7SUFDRSxJQUFJLEVBQUUsK0NBQStDO0lBQ3JELElBQUksRUFBRTtRQUNGLElBQUksRUFBRTtZQUNGLFdBQVcsRUFBRSxzQ0FBc0M7U0FDdEQ7UUFDRCxRQUFRLEVBQUU7WUFDTiwwQkFBMEIsRUFBRSxnRUFBZ0U7WUFDNUYsMkJBQTJCLEVBQUUsd0VBQXdFO1NBQ3hHO1FBQ0QsTUFBTSxFQUFFLEVBQUU7UUFDVixjQUFjLEVBQUUsS0FBSztRQUNyQixJQUFJLEVBQUUsWUFBWTtLQUNyQjtJQUNELGNBQWMsRUFBRSxFQUFFO0lBRWxCLE1BQU0sQ0FBQyxPQUFPO1FBQ1YsT0FBTztZQUNILGtCQUFrQixFQUFFLENBQUMsSUFBbUIsRUFBRSxFQUFFO2dCQUN4QyxNQUFNLHFCQUFxQixHQUFHLHNCQUFzQixDQUNoRCxJQUFtQyxDQUN0QyxDQUFDO2dCQUVGLElBQUkscUJBQXFCLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztvQkFDaEQsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsNkJBQTZCO3FCQUMzQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztnQkFDRCxJQUFJLHFCQUFxQixDQUFDLHNCQUFzQixFQUFFLENBQUM7b0JBQy9DLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ1gsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLDRCQUE0QjtxQkFDMUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxlQUFlLElBQUksQ0FBQyJ9
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
class ArraySetResultModel {
|
|
1
|
+
export default class ArraySetResultModel {
|
|
4
2
|
constructor(isArrayShouldBeSetTrue, isArrayShouldBeSetFalse) {
|
|
5
3
|
this.isArrayShouldBeSetTrue = isArrayShouldBeSetTrue;
|
|
6
4
|
this.isArrayShouldBeSetFalse = isArrayShouldBeSetFalse;
|
|
7
5
|
}
|
|
8
6
|
}
|
|
9
|
-
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlTZXRSZXN1bHRNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlQcm9wZXJ0eVJldHVybmluZ0FycmF5U2hvdWxkU2V0QXJyYXkvYXJyYXlTZXRSZXN1bHRNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE1BQXFCLG1CQUFtQjtJQUNwQyxZQUNXLHNCQUErQixFQUMvQix1QkFBZ0M7UUFEaEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFTO1FBQy9CLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBUztJQUN4QyxDQUFDO0NBQ1A7QUFMRCxzQ0FLQyJ9
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlTZXRSZXN1bHRNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlQcm9wZXJ0eVJldHVybmluZ0FycmF5U2hvdWxkU2V0QXJyYXkvYXJyYXlTZXRSZXN1bHRNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsT0FBTyxPQUFPLG1CQUFtQjtJQUNwQyxZQUNXLHNCQUErQixFQUMvQix1QkFBZ0M7UUFEaEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFTO1FBQy9CLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBUztJQUN4QyxDQUFDO0NBQ1AifQ==
|
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const shouldUseApiTagDecorator = (node) => {
|
|
7
|
-
const hasControllerDecorator = typedTokenHelpers_1.typedTokenHelpers.nodeHasDecoratorsNamed(node, ["Controller"]);
|
|
8
|
-
const hasApiTagDecorator = typedTokenHelpers_1.typedTokenHelpers.nodeHasDecoratorsNamed(node, [
|
|
1
|
+
import { createRule } from "../../utils/createRule.js";
|
|
2
|
+
import { typedTokenHelpers } from "../../utils/typedTokenHelpers.js";
|
|
3
|
+
export const shouldUseApiTagDecorator = (node) => {
|
|
4
|
+
const hasControllerDecorator = typedTokenHelpers.nodeHasDecoratorsNamed(node, ["Controller"]);
|
|
5
|
+
const hasApiTagDecorator = typedTokenHelpers.nodeHasDecoratorsNamed(node, [
|
|
9
6
|
"ApiTags",
|
|
10
7
|
]);
|
|
11
8
|
return hasControllerDecorator && !hasApiTagDecorator;
|
|
12
9
|
};
|
|
13
|
-
|
|
14
|
-
const rule = (0, createRule_1.createRule)({
|
|
10
|
+
const rule = createRule({
|
|
15
11
|
name: "controllers-should-supply-api-tags",
|
|
16
12
|
meta: {
|
|
17
13
|
docs: {
|
|
@@ -28,7 +24,7 @@ const rule = (0, createRule_1.createRule)({
|
|
|
28
24
|
create(context) {
|
|
29
25
|
return {
|
|
30
26
|
ClassDeclaration(node) {
|
|
31
|
-
if (
|
|
27
|
+
if (shouldUseApiTagDecorator(node)) {
|
|
32
28
|
context.report({
|
|
33
29
|
node: node,
|
|
34
30
|
messageId: "shouldUseApiTagDecorator",
|
|
@@ -38,5 +34,5 @@ const rule = (0, createRule_1.createRule)({
|
|
|
38
34
|
};
|
|
39
35
|
},
|
|
40
36
|
});
|
|
41
|
-
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
export default rule;
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlckRlY29yYXRlZEhhc0FwaVRhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvY29udHJvbGxlckRlY29yYXRlZEhhc0FwaVRhZ3MvY29udHJvbGxlckRlY29yYXRlZEhhc0FwaVRhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQ3BDLElBQStCLEVBQ3hCLEVBQUU7SUFDVCxNQUFNLHNCQUFzQixHQUFHLGlCQUFpQixDQUFDLHNCQUFzQixDQUNuRSxJQUFJLEVBQ0osQ0FBQyxZQUFZLENBQUMsQ0FDakIsQ0FBQztJQUVGLE1BQU0sa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFO1FBQ3RFLFNBQVM7S0FDWixDQUFDLENBQUM7SUFFSCxPQUFPLHNCQUFzQixJQUFJLENBQUMsa0JBQWtCLENBQUM7QUFDekQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFpQztJQUNwRCxJQUFJLEVBQUUsb0NBQW9DO0lBQzFDLElBQUksRUFBRTtRQUNGLElBQUksRUFBRTtZQUNGLFdBQVcsRUFDUCwyRUFBMkU7U0FDbEY7UUFDRCxRQUFRLEVBQUU7WUFDTix3QkFBd0IsRUFBRSwrSkFBK0o7U0FDNUw7UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLElBQUksRUFBRSxZQUFZO0tBQ3JCO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFFbEIsTUFBTSxDQUFDLE9BQU87UUFDVixPQUFPO1lBQ0gsZ0JBQWdCLENBQUMsSUFBK0I7Z0JBQzVDLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDakMsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsMEJBQTBCO3FCQUN4QyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztZQUNMLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQUVILGVBQWUsSUFBSSxDQUFDIn0=
|
package/dist/rules/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ declare const allRules: {
|
|
|
5
5
|
src: string[];
|
|
6
6
|
filterFromPaths: string[];
|
|
7
7
|
}], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
8
|
-
"no-duplicate-decorators": import("@typescript-eslint/utils/ts-eslint").RuleModule<"noDuplicateDecorators", import("./noDuplicateDecorators/noDuplicateDecorators").NoDuplicateDecoratorsOptions, unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
8
|
+
"no-duplicate-decorators": import("@typescript-eslint/utils/ts-eslint").RuleModule<"noDuplicateDecorators", import("./noDuplicateDecorators/noDuplicateDecorators.js").NoDuplicateDecoratorsOptions, unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
9
9
|
"provided-injected-should-match-factory-parameters": import("@typescript-eslint/utils/ts-eslint").RuleModule<"mainMessage", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
10
10
|
"controllers-should-supply-api-tags": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldUseApiTagDecorator", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
11
11
|
"api-method-should-specify-api-response": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSpecifyApiResponse", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
@@ -14,10 +14,10 @@ declare const allRules: {
|
|
|
14
14
|
"api-property-returning-array-should-set-array": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSetArrayPropertyTrue" | "shouldSetArrayPropertyFalse", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
15
15
|
"should-specify-forbid-unknown-values": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSpecifyForbidUnknownValues", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
16
16
|
"param-decorator-name-matches-route-param": import("@typescript-eslint/utils/ts-eslint").RuleModule<"paramIdentifierDoesntNeedColon" | "paramIdentifierShouldMatch", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
17
|
-
"validated-non-primitive-property-needs-type-decorator": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldUseTypeDecorator" | "autofixWithTypeDecorator", import("./validateNonPrimitiveNeedsTypeDecorator/validateNonPrimitiveNeedsDecorators").ValidateNonPrimitivePropertyTypeDecoratorOptions, unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
17
|
+
"validated-non-primitive-property-needs-type-decorator": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldUseTypeDecorator" | "autofixWithTypeDecorator", import("./validateNonPrimitiveNeedsTypeDecorator/validateNonPrimitiveNeedsDecorators.js").ValidateNonPrimitivePropertyTypeDecoratorOptions, unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
18
18
|
"validate-nested-of-array-should-set-each": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSetEachPropertyTrue" | "shouldSetEachPropertyFalse", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
19
19
|
"all-properties-are-whitelisted": import("@typescript-eslint/utils/ts-eslint").RuleModule<"missing-property-decorator", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
20
20
|
"api-methods-should-be-guarded": import("@typescript-eslint/utils/ts-eslint").RuleModule<"apiMethodsShouldBeGuarded", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
21
|
-
"sort-module-metadata-arrays": import("@typescript-eslint/utils/ts-eslint").RuleModule<"moduleMetadataArraysAreSorted", import("./sortModuleMetadataArrays/sortModuleMetadataArrays").RuleOptions, unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
21
|
+
"sort-module-metadata-arrays": import("@typescript-eslint/utils/ts-eslint").RuleModule<"moduleMetadataArraysAreSorted", import("./sortModuleMetadataArrays/sortModuleMetadataArrays.js").RuleOptions, unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
22
22
|
};
|
|
23
23
|
export default allRules;
|
package/dist/rules/index.js
CHANGED
|
@@ -1,43 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const allPropertiesHaveExplicitDefined_1 = __importDefault(require("./allPropertiesHaveExplicitDefined/allPropertiesHaveExplicitDefined"));
|
|
19
|
-
const apiMethodsShouldBeGuarded_1 = __importDefault(require("./apiMethodsShouldBeGuarded/apiMethodsShouldBeGuarded"));
|
|
20
|
-
const apiMethodsShouldSpecifyApiOperation_1 = __importDefault(require("./apiMethodsShouldSpecifyApiOperation/apiMethodsShouldSpecifyApiOperation"));
|
|
21
|
-
const sortModuleMetadataArrays_1 = __importDefault(require("./sortModuleMetadataArrays/sortModuleMetadataArrays"));
|
|
22
|
-
const noDuplicateDecorators_1 = __importDefault(require("./noDuplicateDecorators/noDuplicateDecorators"));
|
|
1
|
+
import injectableShouldBeProvided from "./injectablesShouldBeProvided/injectableShouldBeProvided.js";
|
|
2
|
+
import providedInjectedShouldMatchFactoryParameters from "./providerInjectedShouldMatchFactory/ProviderInjectedShouldMatchFactory.js";
|
|
3
|
+
import apiPropertyMatchesPropertyOptionality from "./apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.js";
|
|
4
|
+
import controllerDecoratedHasApiTags from "./controllerDecoratedHasApiTags/controllerDecoratedHasApiTags.js";
|
|
5
|
+
import apiMethodsShouldSpecifyApiResponse from "./apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.js";
|
|
6
|
+
import apiEnumPropertyBestPractices from "./apiEnumPropertyBestPractices/apiEnumPropertyBestPractices.js";
|
|
7
|
+
import apiPropertyReturningArrayShouldSetArray from "./apiPropertyReturningArrayShouldSetArray/apiPropertyReturningArrayShouldSetArray.js";
|
|
8
|
+
import shouldSpecifyForbidUnknownValues from "./shouldSpecifyForbidUnknownValues/shouldSpecifyForbidUnknownValuesRule.js";
|
|
9
|
+
import parameterDecoratorNameMatchesRouteParam from "./paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.js";
|
|
10
|
+
import validateNonPrimitiveNeedsDecorators from "./validateNonPrimitiveNeedsTypeDecorator/validateNonPrimitiveNeedsDecorators.js";
|
|
11
|
+
import validateNestedOfArrayShouldSetEach from "./validateNestedOfArrayShouldSetEach/validateNestedOfArrayShouldSetEach.js";
|
|
12
|
+
import allPropertiesAreWhitelisted from "./allPropertiesAreWhitelisted/allPropertiesAreWhitelisted.js";
|
|
13
|
+
import allPropertiesHaveExplicitDefined from "./allPropertiesHaveExplicitDefined/allPropertiesHaveExplicitDefined.js";
|
|
14
|
+
import apiMethodsShouldBeGuarded from "./apiMethodsShouldBeGuarded/apiMethodsShouldBeGuarded.js";
|
|
15
|
+
import apiMethodsShouldSpecifyApiOperation from "./apiMethodsShouldSpecifyApiOperation/apiMethodsShouldSpecifyApiOperation.js";
|
|
16
|
+
import sortModuleMetadataArrays from "./sortModuleMetadataArrays/sortModuleMetadataArrays.js";
|
|
17
|
+
import noDuplicateDecorators from "./noDuplicateDecorators/noDuplicateDecorators.js";
|
|
23
18
|
const allRules = {
|
|
24
|
-
"all-properties-have-explicit-defined":
|
|
25
|
-
"api-property-matches-property-optionality":
|
|
26
|
-
"injectable-should-be-provided":
|
|
27
|
-
"no-duplicate-decorators":
|
|
28
|
-
"provided-injected-should-match-factory-parameters":
|
|
29
|
-
"controllers-should-supply-api-tags":
|
|
30
|
-
"api-method-should-specify-api-response":
|
|
31
|
-
"api-method-should-specify-api-operation":
|
|
32
|
-
"api-enum-property-best-practices":
|
|
33
|
-
"api-property-returning-array-should-set-array":
|
|
34
|
-
"should-specify-forbid-unknown-values":
|
|
35
|
-
"param-decorator-name-matches-route-param":
|
|
36
|
-
"validated-non-primitive-property-needs-type-decorator":
|
|
37
|
-
"validate-nested-of-array-should-set-each":
|
|
38
|
-
"all-properties-are-whitelisted":
|
|
39
|
-
"api-methods-should-be-guarded":
|
|
40
|
-
"sort-module-metadata-arrays":
|
|
19
|
+
"all-properties-have-explicit-defined": allPropertiesHaveExplicitDefined,
|
|
20
|
+
"api-property-matches-property-optionality": apiPropertyMatchesPropertyOptionality,
|
|
21
|
+
"injectable-should-be-provided": injectableShouldBeProvided,
|
|
22
|
+
"no-duplicate-decorators": noDuplicateDecorators,
|
|
23
|
+
"provided-injected-should-match-factory-parameters": providedInjectedShouldMatchFactoryParameters,
|
|
24
|
+
"controllers-should-supply-api-tags": controllerDecoratedHasApiTags,
|
|
25
|
+
"api-method-should-specify-api-response": apiMethodsShouldSpecifyApiResponse,
|
|
26
|
+
"api-method-should-specify-api-operation": apiMethodsShouldSpecifyApiOperation,
|
|
27
|
+
"api-enum-property-best-practices": apiEnumPropertyBestPractices,
|
|
28
|
+
"api-property-returning-array-should-set-array": apiPropertyReturningArrayShouldSetArray,
|
|
29
|
+
"should-specify-forbid-unknown-values": shouldSpecifyForbidUnknownValues,
|
|
30
|
+
"param-decorator-name-matches-route-param": parameterDecoratorNameMatchesRouteParam,
|
|
31
|
+
"validated-non-primitive-property-needs-type-decorator": validateNonPrimitiveNeedsDecorators,
|
|
32
|
+
"validate-nested-of-array-should-set-each": validateNestedOfArrayShouldSetEach,
|
|
33
|
+
"all-properties-are-whitelisted": allPropertiesAreWhitelisted,
|
|
34
|
+
"api-methods-should-be-guarded": apiMethodsShouldBeGuarded,
|
|
35
|
+
"sort-module-metadata-arrays": sortModuleMetadataArrays,
|
|
41
36
|
};
|
|
42
|
-
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
export default allRules;
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTywwQkFBMEIsTUFBTSw2REFBNkQsQ0FBQztBQUNyRyxPQUFPLDRDQUE0QyxNQUFNLDRFQUE0RSxDQUFDO0FBQ3RJLE9BQU8scUNBQXFDLE1BQU0sa0ZBQWtGLENBQUM7QUFDckksT0FBTyw2QkFBNkIsTUFBTSxrRUFBa0UsQ0FBQztBQUM3RyxPQUFPLGtDQUFrQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzVILE9BQU8sNEJBQTRCLE1BQU0sZ0VBQWdFLENBQUM7QUFDMUcsT0FBTyx1Q0FBdUMsTUFBTSxzRkFBc0YsQ0FBQztBQUMzSSxPQUFPLGdDQUFnQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzFILE9BQU8sdUNBQXVDLE1BQU0sOEVBQThFLENBQUM7QUFDbkksT0FBTyxtQ0FBbUMsTUFBTSxpRkFBaUYsQ0FBQztBQUNsSSxPQUFPLGtDQUFrQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzVILE9BQU8sMkJBQTJCLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxnQ0FBZ0MsTUFBTSx3RUFBd0UsQ0FBQztBQUN0SCxPQUFPLHlCQUF5QixNQUFNLDBEQUEwRCxDQUFDO0FBQ2pHLE9BQU8sbUNBQW1DLE1BQU0sOEVBQThFLENBQUM7QUFDL0gsT0FBTyx3QkFBd0IsTUFBTSx3REFBd0QsQ0FBQztBQUM5RixPQUFPLHFCQUFxQixNQUFNLGtEQUFrRCxDQUFDO0FBQ3JGLE1BQU0sUUFBUSxHQUFHO0lBQ2Isc0NBQXNDLEVBQUUsZ0NBQWdDO0lBQ3hFLDJDQUEyQyxFQUN2QyxxQ0FBcUM7SUFDekMsK0JBQStCLEVBQUUsMEJBQTBCO0lBQzNELHlCQUF5QixFQUFFLHFCQUFxQjtJQUNoRCxtREFBbUQsRUFDL0MsNENBQTRDO0lBQ2hELG9DQUFvQyxFQUFFLDZCQUE2QjtJQUNuRSx3Q0FBd0MsRUFDcEMsa0NBQWtDO0lBQ3RDLHlDQUF5QyxFQUNyQyxtQ0FBbUM7SUFDdkMsa0NBQWtDLEVBQUUsNEJBQTRCO0lBQ2hFLCtDQUErQyxFQUMzQyx1Q0FBdUM7SUFDM0Msc0NBQXNDLEVBQUUsZ0NBQWdDO0lBQ3hFLDBDQUEwQyxFQUN0Qyx1Q0FBdUM7SUFDM0MsdURBQXVELEVBQ25ELG1DQUFtQztJQUN2QywwQ0FBMEMsRUFDdEMsa0NBQWtDO0lBQ3RDLGdDQUFnQyxFQUFFLDJCQUEyQjtJQUM3RCwrQkFBK0IsRUFBRSx5QkFBeUI7SUFDMUQsNkJBQTZCLEVBQUUsd0JBQXdCO0NBQzFELENBQUM7QUFFRixlQUFlLFFBQVEsQ0FBQyJ9
|