@darraghor/eslint-plugin-nestjs-typed 6.0.0-rc.18 → 6.0.0-rc.3
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/dist/configs/base.js +4 -3
- package/dist/configs/index.js +13 -0
- package/dist/configs/noSwagger.js +4 -3
- package/dist/configs/recommended.js +4 -3
- package/dist/index.js +14 -57
- package/dist/rules/allPropertiesAreWhitelisted/allPropertiesAreWhitelisted.js +13 -11
- package/dist/rules/allPropertiesHaveExplicitDefined/allPropertiesHaveExplicitDefined.js +17 -15
- package/dist/rules/apiEnumPropertyBestPractices/apiEnumPropertyBestPractices.js +22 -17
- package/dist/rules/apiEnumPropertyBestPractices/enumTestResultModel.js +6 -2
- package/dist/rules/apiMethodsShouldBeGuarded/apiMethodsShouldBeGuarded.js +16 -12
- package/dist/rules/apiMethodsShouldSpecifyApiOperation/apiMethodsShouldSpecifyApiOperation.js +13 -9
- package/dist/rules/apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.js +13 -9
- package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.js +18 -13
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/apiPropertyReturningArrayShouldSetArray.js +24 -17
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/arraySetResultModel.js +5 -2
- package/dist/rules/controllerDecoratedHasApiTags/controllerDecoratedHasApiTags.js +13 -9
- package/dist/rules/index.js +41 -36
- package/dist/rules/injectablesShouldBeProvided/injectableShouldBeProvided.js +18 -13
- package/dist/rules/noDuplicateDecorators/noDuplicateDecorators.js +14 -10
- package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.js +26 -19
- package/dist/rules/paramDecoratorNameMatchesRouteParam/rule.testData.js +6 -3
- package/dist/rules/providerInjectedShouldMatchFactory/ProviderInjectedShouldMatchFactory.js +18 -12
- package/dist/rules/shouldSpecifyForbidUnknownValues/shouldSpecifyForbidUnknownValuesRule.js +27 -20
- package/dist/rules/sortModuleMetadataArrays/sortModuleMetadataArrays.js +23 -18
- package/dist/rules/validateNestedOfArrayShouldSetEach/arraySetResultModel.js +5 -2
- package/dist/rules/validateNestedOfArrayShouldSetEach/validateNestedOfArrayShouldSetEach.js +21 -14
- package/dist/rules/validateNonPrimitiveNeedsTypeDecorator/validateNonPrimitiveNeedsDecorators.js +33 -29
- package/dist/testing/fixtureSetup.js +10 -4
- package/dist/testing/preRun.js +4 -2
- package/dist/utils/ast.js +7 -4
- package/dist/utils/createRule.js +6 -3
- package/dist/utils/files/customFileEnumeratorWrapper.js +16 -9
- package/dist/utils/files/isFilteredPath.js +4 -2
- package/dist/utils/nestModules/models/NestProvidedInjectablesMap.js +6 -2
- package/dist/utils/nestModules/nestModuleAstParser.js +12 -9
- package/dist/utils/nestModules/nestProvidedInjectableMapper.js +52 -14
- package/dist/utils/nestModules/nestProvidedInjectableMapper.testData.js +12 -9
- package/dist/utils/nestModules/nestProviderAstParser.js +16 -13
- package/dist/utils/typedTokenHelpers.js +64 -25
- package/dist/utils/wellKnownSelectors.js +5 -2
- package/package.json +3 -12
- package/dist/configs/base.d.ts +0 -8
- package/dist/configs/noSwagger.d.ts +0 -7
- package/dist/configs/recommended.d.ts +0 -7
- package/dist/index.d.ts +0 -52
- package/dist/rules/allPropertiesAreWhitelisted/allPropertiesAreWhitelisted.d.ts +0 -2
- package/dist/rules/allPropertiesHaveExplicitDefined/allPropertiesHaveExplicitDefined.d.ts +0 -3
- package/dist/rules/apiEnumPropertyBestPractices/apiEnumPropertyBestPractices.d.ts +0 -6
- package/dist/rules/apiEnumPropertyBestPractices/enumTestResultModel.d.ts +0 -7
- package/dist/rules/apiMethodsShouldBeGuarded/apiMethodsShouldBeGuarded.d.ts +0 -4
- package/dist/rules/apiMethodsShouldSpecifyApiOperation/apiMethodsShouldSpecifyApiOperation.d.ts +0 -4
- package/dist/rules/apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.d.ts +0 -4
- package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.d.ts +0 -5
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/apiPropertyReturningArrayShouldSetArray.d.ts +0 -5
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/arraySetResultModel.d.ts +0 -5
- package/dist/rules/controllerDecoratedHasApiTags/controllerDecoratedHasApiTags.d.ts +0 -4
- package/dist/rules/index.d.ts +0 -23
- package/dist/rules/injectablesShouldBeProvided/injectableShouldBeProvided.d.ts +0 -9
- package/dist/rules/noDuplicateDecorators/noDuplicateDecorators.d.ts +0 -9
- package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.d.ts +0 -21
- package/dist/rules/paramDecoratorNameMatchesRouteParam/rule.testData.d.ts +0 -10
- package/dist/rules/providerInjectedShouldMatchFactory/ProviderInjectedShouldMatchFactory.d.ts +0 -4
- package/dist/rules/shouldSpecifyForbidUnknownValues/shouldSpecifyForbidUnknownValuesRule.d.ts +0 -7
- package/dist/rules/sortModuleMetadataArrays/sortModuleMetadataArrays.d.ts +0 -11
- package/dist/rules/validateNestedOfArrayShouldSetEach/arraySetResultModel.d.ts +0 -5
- package/dist/rules/validateNestedOfArrayShouldSetEach/validateNestedOfArrayShouldSetEach.d.ts +0 -5
- package/dist/rules/validateNonPrimitiveNeedsTypeDecorator/validateNonPrimitiveNeedsDecorators.d.ts +0 -10
- package/dist/testing/fixtureSetup.d.ts +0 -1
- package/dist/testing/preRun.d.ts +0 -1
- package/dist/utils/ast.d.ts +0 -2
- package/dist/utils/createRule.d.ts +0 -2
- package/dist/utils/files/customFileEnumeratorWrapper.d.ts +0 -8
- package/dist/utils/files/isFilteredPath.d.ts +0 -4
- package/dist/utils/nestModules/models/NestProvidedInjectablesMap.d.ts +0 -5
- package/dist/utils/nestModules/nestModuleAstParser.d.ts +0 -7
- package/dist/utils/nestModules/nestProvidedInjectableMapper.d.ts +0 -14
- package/dist/utils/nestModules/nestProvidedInjectableMapper.testData.d.ts +0 -7
- package/dist/utils/nestModules/nestProviderAstParser.d.ts +0 -7
- package/dist/utils/typedTokenHelpers.d.ts +0 -59
- package/dist/utils/wellKnownSelectors.d.ts +0 -1
package/dist/configs/base.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
module.exports = {
|
|
2
3
|
parser: "@typescript-eslint/parser",
|
|
3
4
|
parserOptions: { sourceType: "module" },
|
|
4
|
-
plugins: ["@
|
|
5
|
+
plugins: ["@typescript-eslint"],
|
|
5
6
|
};
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWdzL2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLGlCQUFTO0lBQ0wsTUFBTSxFQUFFLDJCQUEyQjtJQUNuQyxhQUFhLEVBQUUsRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFDO0lBQ3JDLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUFDO0NBQ0gsQ0FBQyJ9
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const noSwagger_1 = __importDefault(require("./noSwagger"));
|
|
7
|
+
const recommended_1 = __importDefault(require("./recommended"));
|
|
8
|
+
const allConfigs = {
|
|
9
|
+
recommended: recommended_1.default,
|
|
10
|
+
"no-swagger": noSwagger_1.default,
|
|
11
|
+
};
|
|
12
|
+
exports.default = allConfigs;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlncy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDREQUFvQztBQUNwQyxnRUFBd0M7QUFDeEMsTUFBTSxVQUFVLEdBQUc7SUFDZixXQUFXLEVBQUUscUJBQVc7SUFDeEIsWUFBWSxFQUFFLG1CQUFTO0NBQzFCLENBQUM7QUFFRixrQkFBZSxVQUFVLENBQUMifQ==
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
// Should turn off swagger rules for folks not using swagger typings
|
|
2
|
-
|
|
3
|
+
const rules = {
|
|
3
4
|
"@darraghor/nestjs-typed/api-property-matches-property-optionality": "off",
|
|
4
5
|
"@darraghor/nestjs-typed/api-method-should-specify-api-response": "off",
|
|
5
6
|
"@darraghor/nestjs-typed/api-method-should-specify-api-operation": "off",
|
|
@@ -7,8 +8,8 @@ export const rules = {
|
|
|
7
8
|
"@darraghor/nestjs-typed/api-enum-property-best-practices": "off",
|
|
8
9
|
"@darraghor/nestjs-typed/api-property-returning-array-should-set-array": "off",
|
|
9
10
|
};
|
|
10
|
-
|
|
11
|
+
module.exports = {
|
|
11
12
|
extends: ["./configs/base"],
|
|
12
13
|
rules,
|
|
13
14
|
};
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9Td2FnZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZ3Mvbm9Td2FnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxvRUFBb0U7QUFDcEUsTUFBTSxLQUFLLEdBQWdDO0lBQ3ZDLG1FQUFtRSxFQUFFLEtBQUs7SUFDMUUsZ0VBQWdFLEVBQUUsS0FBSztJQUN2RSxpRUFBaUUsRUFBRSxLQUFLO0lBQ3hFLDREQUE0RCxFQUFFLEtBQUs7SUFDbkUsMERBQTBELEVBQUUsS0FBSztJQUNqRSx1RUFBdUUsRUFDbkUsS0FBSztDQUNaLENBQUM7QUFFRixpQkFBUztJQUNMLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO0lBQzNCLEtBQUs7Q0FDUixDQUFDIn0=
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
const rules = {
|
|
2
3
|
"@darraghor/nestjs-typed/provided-injected-should-match-factory-parameters": "error",
|
|
3
4
|
"@darraghor/nestjs-typed/injectable-should-be-provided": [
|
|
4
5
|
"error",
|
|
@@ -23,8 +24,8 @@ export const rules = {
|
|
|
23
24
|
"@darraghor/nestjs-typed/sort-module-metadata-arrays": "off",
|
|
24
25
|
"@darraghor/nestjs-typed/no-duplicate-decorators": "error",
|
|
25
26
|
};
|
|
26
|
-
|
|
27
|
+
module.exports = {
|
|
27
28
|
extends: ["./configs/base"],
|
|
28
29
|
rules,
|
|
29
30
|
};
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb21tZW5kZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlncy9yZWNvbW1lbmRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsTUFBTSxLQUFLLEdBQWdDO0lBQ3ZDLDJFQUEyRSxFQUN2RSxPQUFPO0lBQ1gsdURBQXVELEVBQUU7UUFDckQsT0FBTztRQUNQO1lBQ0ksR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ3BCLGVBQWUsRUFBRSxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO1NBQ3hEO0tBQ0o7SUFDRCxtRUFBbUUsRUFDL0QsT0FBTztJQUNYLGdFQUFnRSxFQUFFLE9BQU87SUFDekUsNERBQTRELEVBQUUsT0FBTztJQUNyRSwwREFBMEQsRUFBRSxPQUFPO0lBQ25FLHVFQUF1RSxFQUNuRSxPQUFPO0lBQ1gsOERBQThELEVBQUUsT0FBTztJQUN2RSxrRUFBa0UsRUFBRSxPQUFPO0lBQzNFLCtFQUErRSxFQUMzRSxPQUFPO0lBQ1gsa0VBQWtFLEVBQUUsT0FBTztJQUMzRSx3REFBd0QsRUFBRSxPQUFPO0lBQ2pFLDhEQUE4RCxFQUFFLE9BQU87SUFDdkUsdURBQXVELEVBQUUsS0FBSztJQUM5RCxpRUFBaUUsRUFBRSxLQUFLO0lBQ3hFLHFEQUFxRCxFQUFFLEtBQUs7SUFDNUQsaURBQWlELEVBQUUsT0FBTztDQUM3RCxDQUFDO0FBQ0YsaUJBQVM7SUFDTCxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMzQixLQUFLO0NBQ1IsQ0FBQyJ9
|
package/dist/index.js
CHANGED
|
@@ -1,66 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
9
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
11
|
-
const __dirname = dirname(__filename);
|
|
12
|
-
const { name, version } = JSON.parse(readFileSync(resolve(__dirname, "../package.json"), "utf8"));
|
|
13
|
-
// Most of this is copied and simplified from https://github.com/typescript-eslint/typescript-eslint/blob/v8.22.0/packages/typescript-eslint/src/configs/recommended.ts
|
|
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
|
+
const configs_1 = __importDefault(require("./configs"));
|
|
7
|
+
const rules_1 = __importDefault(require("./rules"));
|
|
14
8
|
// note - cannot migrate this to an import statement because it will make TSC copy the package.json to the dist folder
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
10
|
+
const { name, version } = require("../package.json");
|
|
15
11
|
const meta = {
|
|
16
12
|
name,
|
|
17
13
|
version,
|
|
18
14
|
};
|
|
19
|
-
|
|
20
|
-
meta: parserBase.meta,
|
|
21
|
-
parseForESLint: parserBase.parseForESLint,
|
|
22
|
-
};
|
|
23
|
-
const classicPlugin = {
|
|
15
|
+
exports.default = {
|
|
24
16
|
configs: {
|
|
25
|
-
recommended: recommended,
|
|
26
|
-
"no-swagger":
|
|
17
|
+
recommended: configs_1.default.recommended,
|
|
18
|
+
"no-swagger": configs_1.default["no-swagger"],
|
|
27
19
|
},
|
|
28
|
-
rules,
|
|
20
|
+
rules: rules_1.default,
|
|
29
21
|
meta,
|
|
30
22
|
};
|
|
31
|
-
|
|
32
|
-
const flatBaseConfig = (plugin, parser) => {
|
|
33
|
-
const baseConfig = {
|
|
34
|
-
name: "@darraghor/nestjs-typed/base",
|
|
35
|
-
languageOptions: {
|
|
36
|
-
parser,
|
|
37
|
-
sourceType: "module",
|
|
38
|
-
},
|
|
39
|
-
plugins: {
|
|
40
|
-
"@darraghor/nestjs-typed": plugin,
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
return baseConfig;
|
|
44
|
-
};
|
|
45
|
-
// export the classic plugin configs
|
|
46
|
-
export { classicPlugin };
|
|
47
|
-
// export the flat configs
|
|
48
|
-
export default {
|
|
49
|
-
plugin,
|
|
50
|
-
configs: {
|
|
51
|
-
flatRecommended: [
|
|
52
|
-
flatBaseConfig(plugin, parser),
|
|
53
|
-
{
|
|
54
|
-
name: "@darraghor/nestjs-typed/recommended",
|
|
55
|
-
rules: recommended.rules,
|
|
56
|
-
},
|
|
57
|
-
],
|
|
58
|
-
flatNoSwagger: [
|
|
59
|
-
{
|
|
60
|
-
name: "@darraghor/nestjs-typed/no-swagger",
|
|
61
|
-
rules: noSwagger.rules,
|
|
62
|
-
},
|
|
63
|
-
],
|
|
64
|
-
},
|
|
65
|
-
};
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxXQUFXLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxLQUFLLE1BQU0sa0JBQWtCLENBQUM7QUFFckMsT0FBTyxLQUFLLFVBQVUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sS0FBSyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxJQUFJLENBQUM7QUFDaEMsT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFdEMsZ0VBQWdFO0FBQ2hFLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELGdFQUFnRTtBQUNoRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdEMsTUFBTSxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUM5QixZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUk5RCxDQUFDO0FBQ0YsdUtBQXVLO0FBRXZLLHNIQUFzSDtBQUV0SCxNQUFNLElBQUksR0FBRztJQUNULElBQUk7SUFDSixPQUFPO0NBQ1YsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBK0I7SUFDOUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO0lBQ3JCLGNBQWMsRUFBRSxVQUFVLENBQUMsY0FBYztDQUM1QyxDQUFDO0FBRUYsTUFBTSxhQUFhLEdBQUc7SUFDbEIsT0FBTyxFQUFFO1FBQ0wsV0FBVyxFQUFFLFdBQVc7UUFDeEIsWUFBWSxFQUFFLFNBQVM7S0FDMUI7SUFDRCxLQUFLO0lBQ0wsSUFBSTtDQUNpQixDQUFDO0FBRTFCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBK0IsYUFHakQsQ0FBQztBQUNGLE1BQU0sY0FBYyxHQUFHLENBQ25CLE1BQXlCLEVBQ3pCLE1BQXlCLEVBQ1IsRUFBRTtJQUNuQixNQUFNLFVBQVUsR0FBc0I7UUFDbEMsSUFBSSxFQUFFLDhCQUE4QjtRQUNwQyxlQUFlLEVBQUU7WUFDYixNQUFNO1lBQ04sVUFBVSxFQUFFLFFBQVE7U0FDdkI7UUFDRCxPQUFPLEVBQUU7WUFDTCx5QkFBeUIsRUFBRSxNQUFNO1NBQ3BDO0tBQ0osQ0FBQztJQUNGLE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUMsQ0FBQztBQUVGLG9DQUFvQztBQUNwQyxPQUFPLEVBQUMsYUFBYSxFQUFDLENBQUM7QUFFdkIsMEJBQTBCO0FBQzFCLGVBQWU7SUFDWCxNQUFNO0lBQ04sT0FBTyxFQUFFO1FBQ0wsZUFBZSxFQUFFO1lBQ2IsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7WUFDOUI7Z0JBQ0ksSUFBSSxFQUFFLHFDQUFxQztnQkFDM0MsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLO2FBQzNCO1NBQ0o7UUFDRCxhQUFhLEVBQUU7WUFDWDtnQkFDSSxJQUFJLEVBQUUsb0NBQW9DO2dCQUMxQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUs7YUFDekI7U0FDSjtLQUlKO0NBQ0osQ0FBQyJ9
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSx3REFBZ0M7QUFDaEMsb0RBQTRCO0FBRTVCLHNIQUFzSDtBQUN0SCxpRUFBaUU7QUFDakUsTUFBTSxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBR2hELENBQUM7QUFDRixNQUFNLElBQUksR0FBRztJQUNULElBQUk7SUFDSixPQUFPO0NBQ1YsQ0FBQztBQUVGLGtCQUFlO0lBQ1gsT0FBTyxFQUFFO1FBQ0wsV0FBVyxFQUFFLGlCQUFPLENBQUMsV0FBVztRQUNoQyxZQUFZLEVBQUUsaUJBQU8sQ0FBQyxZQUFZLENBQUM7S0FDdEM7SUFDRCxLQUFLLEVBQUwsZUFBSztJQUNMLElBQUk7Q0FDaUIsQ0FBQyJ9
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
4
|
+
const createRule_1 = require("../../utils/createRule");
|
|
5
|
+
const typedTokenHelpers_1 = require("../../utils/typedTokenHelpers");
|
|
6
|
+
const rule = (0, createRule_1.createRule)({
|
|
5
7
|
name: "all-properties-are-whitelisted",
|
|
6
8
|
meta: {
|
|
7
9
|
docs: {
|
|
@@ -17,18 +19,18 @@ const rule = createRule({
|
|
|
17
19
|
create: function (context) {
|
|
18
20
|
return {
|
|
19
21
|
ClassDeclaration(node) {
|
|
20
|
-
const program = typedTokenHelpers.getRootProgram(node);
|
|
22
|
+
const program = typedTokenHelpers_1.typedTokenHelpers.getRootProgram(node);
|
|
21
23
|
const withDecorator = [];
|
|
22
24
|
const withoutDecorator = [];
|
|
23
25
|
for (const element of node.body.body) {
|
|
24
|
-
if (element.type !== AST_NODE_TYPES.PropertyDefinition) {
|
|
26
|
+
if (element.type !== utils_1.AST_NODE_TYPES.PropertyDefinition) {
|
|
25
27
|
continue;
|
|
26
28
|
}
|
|
27
29
|
const hasDecorator = element.decorators.some((decorator) => decorator.expression.type ===
|
|
28
|
-
AST_NODE_TYPES.CallExpression &&
|
|
30
|
+
utils_1.AST_NODE_TYPES.CallExpression &&
|
|
29
31
|
decorator.expression.callee.type ===
|
|
30
|
-
AST_NODE_TYPES.Identifier &&
|
|
31
|
-
typedTokenHelpers.decoratorIsClassValidatorDecorator(program, decorator));
|
|
32
|
+
utils_1.AST_NODE_TYPES.Identifier &&
|
|
33
|
+
typedTokenHelpers_1.typedTokenHelpers.decoratorIsClassValidatorDecorator(program, decorator));
|
|
32
34
|
if (hasDecorator) {
|
|
33
35
|
withDecorator.push(element);
|
|
34
36
|
}
|
|
@@ -48,5 +50,5 @@ const rule = createRule({
|
|
|
48
50
|
};
|
|
49
51
|
},
|
|
50
52
|
});
|
|
51
|
-
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
exports.default = rule;
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsUHJvcGVydGllc0FyZVdoaXRlbGlzdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL2FsbFByb3BlcnRpZXNBcmVXaGl0ZWxpc3RlZC9hbGxQcm9wZXJ0aWVzQXJlV2hpdGVsaXN0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxvREFBa0U7QUFDbEUsdURBQWtEO0FBQ2xELHFFQUFnRTtBQUVoRSxNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQW1DO0lBQ3RELElBQUksRUFBRSxnQ0FBZ0M7SUFDdEMsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUFFLHdDQUF3QztTQUN4RDtRQUNELFFBQVEsRUFBRTtZQUNOLDRCQUE0QixFQUN4Qix5RkFBeUY7U0FDaEc7UUFDRCxJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRSxFQUFFO0tBQ2I7SUFDRCxjQUFjLEVBQUUsRUFBRTtJQUNsQixNQUFNLEVBQUUsVUFBVSxPQUFPO1FBQ3JCLE9BQU87WUFDSCxnQkFBZ0IsQ0FBQyxJQUErQjtnQkFDNUMsTUFBTSxPQUFPLEdBQUcscUNBQWlCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLGFBQWEsR0FBa0MsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLGdCQUFnQixHQUFrQyxFQUFFLENBQUM7Z0JBQzNELEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDbkMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLHNCQUFjLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzt3QkFDckQsU0FBUztvQkFDYixDQUFDO29CQUNELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN4QyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ1YsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJO3dCQUNyQixzQkFBYyxDQUFDLGNBQWM7d0JBQ2pDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUk7NEJBQzVCLHNCQUFjLENBQUMsVUFBVTt3QkFDN0IscUNBQWlCLENBQUMsa0NBQWtDLENBQ2hELE9BQU8sRUFDUCxTQUFTLENBQ1osQ0FDUixDQUFDO29CQUNGLElBQUksWUFBWSxFQUFFLENBQUM7d0JBQ2YsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDaEMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDbkMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMxRCxLQUFLLE1BQU0sT0FBTyxJQUFJLGdCQUFnQixFQUFFLENBQUM7d0JBQ3JDLE9BQU8sQ0FBQyxNQUFNLENBQUM7NEJBQ1gsSUFBSSxFQUFFLE9BQU87NEJBQ2IsU0FBUyxFQUFFLDRCQUE0Qjt5QkFDMUMsQ0FBQyxDQUFDO29CQUNQLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7U0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMsQ0FBQztBQUVILGtCQUFlLElBQUksQ0FBQyJ9
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
4
|
+
const type_utils_1 = require("@typescript-eslint/type-utils");
|
|
5
|
+
const ast_1 = require("../../utils/ast");
|
|
6
|
+
const createRule_1 = require("../../utils/createRule");
|
|
7
|
+
const typedTokenHelpers_1 = require("../../utils/typedTokenHelpers");
|
|
8
|
+
const rule = (0, createRule_1.createRule)({
|
|
7
9
|
name: "all-properties-have-explicit-defined",
|
|
8
10
|
meta: {
|
|
9
11
|
docs: {
|
|
@@ -22,13 +24,13 @@ const rule = createRule({
|
|
|
22
24
|
},
|
|
23
25
|
defaultOptions: [],
|
|
24
26
|
create: function (context) {
|
|
25
|
-
const service = ESLintUtils.getParserServices(context);
|
|
27
|
+
const service = utils_1.ESLintUtils.getParserServices(context);
|
|
26
28
|
const checker = service.program.getTypeChecker();
|
|
27
29
|
return {
|
|
28
30
|
ClassDeclaration(node) {
|
|
29
31
|
const propertyDefinitionsWithDecoratorsStatus = [];
|
|
30
32
|
let withDecoratorCount = 0;
|
|
31
|
-
const propertyDefinitions = getPropertiesDefinitions(node);
|
|
33
|
+
const propertyDefinitions = (0, ast_1.getPropertiesDefinitions)(node);
|
|
32
34
|
// for each property in the class
|
|
33
35
|
for (const propertyDefinition of propertyDefinitions) {
|
|
34
36
|
// check for the optional or defined decorators, or any class-validator decorator
|
|
@@ -84,7 +86,7 @@ const rule = createRule({
|
|
|
84
86
|
const type = getType(propertyDefinition.typeAnnotation.typeAnnotation, service, checker);
|
|
85
87
|
// if the type is nullable, it should be optional
|
|
86
88
|
if (propertyDefinition.optional ||
|
|
87
|
-
isNullableType(type)) {
|
|
89
|
+
(0, type_utils_1.isNullableType)(type)) {
|
|
88
90
|
if (!decoratorsStatus.hasIsOptionalDecorator &&
|
|
89
91
|
!decoratorsStatus.hasValidateIfDecorator) {
|
|
90
92
|
context.report({
|
|
@@ -108,7 +110,7 @@ const rule = createRule({
|
|
|
108
110
|
};
|
|
109
111
|
},
|
|
110
112
|
});
|
|
111
|
-
|
|
113
|
+
exports.default = rule;
|
|
112
114
|
function getType(typeNode, service, checker) {
|
|
113
115
|
const tsNode = service.esTreeNodeToTSNodeMap.get(typeNode);
|
|
114
116
|
const type = checker.getTypeAtLocation(tsNode);
|
|
@@ -119,13 +121,13 @@ function getDecoratorsStatus(propertyDefinition) {
|
|
|
119
121
|
let hasTypeCheckingDecorator = false;
|
|
120
122
|
let hasIsOptionalDecorator = false;
|
|
121
123
|
let hasValidateIfDecorator = false;
|
|
122
|
-
const program = typedTokenHelpers.getRootProgram(propertyDefinition);
|
|
124
|
+
const program = typedTokenHelpers_1.typedTokenHelpers.getRootProgram(propertyDefinition);
|
|
123
125
|
if (propertyDefinition.decorators) {
|
|
124
126
|
for (const decorator of propertyDefinition.decorators) {
|
|
125
|
-
if (decorator.expression.type === AST_NODE_TYPES.CallExpression &&
|
|
126
|
-
decorator.expression.callee.type === AST_NODE_TYPES.Identifier) {
|
|
127
|
+
if (decorator.expression.type === utils_1.AST_NODE_TYPES.CallExpression &&
|
|
128
|
+
decorator.expression.callee.type === utils_1.AST_NODE_TYPES.Identifier) {
|
|
127
129
|
// if this is not a class-validator decorator, skip it (this avoids name conflicts with decorators from other libraries)
|
|
128
|
-
if (!typedTokenHelpers.decoratorIsClassValidatorDecorator(program, decorator)) {
|
|
130
|
+
if (!typedTokenHelpers_1.typedTokenHelpers.decoratorIsClassValidatorDecorator(program, decorator)) {
|
|
129
131
|
continue;
|
|
130
132
|
}
|
|
131
133
|
// We care if the decorator is a validation decorator like IsString etc for checks later
|
|
@@ -154,4 +156,4 @@ function getDecoratorsStatus(propertyDefinition) {
|
|
|
154
156
|
hasValidateIfDecorator,
|
|
155
157
|
};
|
|
156
158
|
}
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsUHJvcGVydGllc0hhdmVFeHBsaWNpdERlZmluZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvYWxsUHJvcGVydGllc0hhdmVFeHBsaWNpdERlZmluZWQvYWxsUHJvcGVydGllc0hhdmVFeHBsaWNpdERlZmluZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxvREFLa0M7QUFDbEMsOERBQTZEO0FBQzdELHlDQUF5RDtBQUN6RCx1REFBa0Q7QUFFbEQscUVBQWdFO0FBRWhFLE1BQU0sSUFBSSxHQUFHLElBQUEsdUJBQVUsRUFRckI7SUFDRSxJQUFJLEVBQUUsc0NBQXNDO0lBQzVDLElBQUksRUFBRTtRQUNGLElBQUksRUFBRTtZQUNGLFdBQVcsRUFDUCxrRUFBa0U7U0FDekU7UUFDRCxRQUFRLEVBQUU7WUFDTiw4QkFBOEIsRUFDMUIsNEdBQTRHO1lBQ2hILCtCQUErQixFQUMzQix3RUFBd0U7WUFDNUUsaURBQWlELEVBQzdDLGdFQUFnRTtZQUNwRSxvREFBb0QsRUFDaEQsZ0VBQWdFO1lBQ3BFLHFEQUFxRCxFQUNqRCxpRUFBaUU7WUFDckUsb0NBQW9DLEVBQ2hDLDJFQUEyRTtTQUNsRjtRQUNELElBQUksRUFBRSxTQUFTO1FBQ2YsTUFBTSxFQUFFLEVBQUU7S0FDYjtJQUNELGNBQWMsRUFBRSxFQUFFO0lBQ2xCLE1BQU0sRUFBRSxVQUFVLE9BQU87UUFDckIsTUFBTSxPQUFPLEdBQUcsbUJBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2pELE9BQU87WUFDSCxnQkFBZ0IsQ0FBQyxJQUErQjtnQkFDNUMsTUFBTSx1Q0FBdUMsR0FHdkMsRUFBRSxDQUFDO2dCQUNULElBQUksa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQixNQUFNLG1CQUFtQixHQUFHLElBQUEsOEJB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
|
|
@@ -1,20 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.needsEnumNameMatchingEnumType = exports.hasEnumSpecifiedCorrectly = void 0;
|
|
4
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
5
|
+
const createRule_1 = require("../../utils/createRule");
|
|
6
|
+
const typedTokenHelpers_1 = require("../../utils/typedTokenHelpers");
|
|
7
|
+
const enumTestResultModel_1 = require("./enumTestResultModel");
|
|
8
|
+
const noChangesRequiredResult = new enumTestResultModel_1.EnumTestResultModel({
|
|
6
9
|
needsEnumAdded: false,
|
|
7
10
|
needsEnumNameAdded: false,
|
|
8
11
|
needsEnumNameToMatchEnumType: false,
|
|
9
12
|
needsTypeRemoved: false,
|
|
10
13
|
});
|
|
11
|
-
|
|
14
|
+
const hasEnumSpecifiedCorrectly = (node, isEnumType) => {
|
|
12
15
|
// is this an enum
|
|
13
16
|
if (!isEnumType) {
|
|
14
17
|
return noChangesRequiredResult;
|
|
15
18
|
}
|
|
16
19
|
// is this decorated with api documentation
|
|
17
|
-
const decorators = typedTokenHelpers.getDecoratorsNamed(node, ["ApiPropertyOptional", "ApiProperty"]);
|
|
20
|
+
const decorators = typedTokenHelpers_1.typedTokenHelpers.getDecoratorsNamed(node, ["ApiPropertyOptional", "ApiProperty"]);
|
|
18
21
|
if (decorators.length === 0) {
|
|
19
22
|
return noChangesRequiredResult;
|
|
20
23
|
}
|
|
@@ -22,7 +25,7 @@ export const hasEnumSpecifiedCorrectly = (node, isEnumType) => {
|
|
|
22
25
|
const firstArgument = decorators[0].expression
|
|
23
26
|
.arguments[0];
|
|
24
27
|
if (!firstArgument) {
|
|
25
|
-
return new EnumTestResultModel({
|
|
28
|
+
return new enumTestResultModel_1.EnumTestResultModel({
|
|
26
29
|
needsEnumAdded: true,
|
|
27
30
|
needsEnumNameAdded: true,
|
|
28
31
|
needsEnumNameToMatchEnumType: false,
|
|
@@ -37,14 +40,15 @@ export const hasEnumSpecifiedCorrectly = (node, isEnumType) => {
|
|
|
37
40
|
// check if there is an enumName: property in the provided options (enums should specify a name)
|
|
38
41
|
const enumNameProperty = firstArgument.properties.find((p) => p.key.name ===
|
|
39
42
|
"enumName");
|
|
40
|
-
return new EnumTestResultModel({
|
|
43
|
+
return new enumTestResultModel_1.EnumTestResultModel({
|
|
41
44
|
needsEnumAdded: enumProperty === undefined,
|
|
42
45
|
needsEnumNameAdded: enumNameProperty === undefined,
|
|
43
|
-
needsEnumNameToMatchEnumType: needsEnumNameMatchingEnumType(enumNameProperty, enumProperty),
|
|
46
|
+
needsEnumNameToMatchEnumType: (0, exports.needsEnumNameMatchingEnumType)(enumNameProperty, enumProperty),
|
|
44
47
|
needsTypeRemoved: hasTypeProperty,
|
|
45
48
|
});
|
|
46
49
|
};
|
|
47
|
-
|
|
50
|
+
exports.hasEnumSpecifiedCorrectly = hasEnumSpecifiedCorrectly;
|
|
51
|
+
const needsEnumNameMatchingEnumType = (enumNameProperty, enumProperty) => {
|
|
48
52
|
// if enum props aren't specified we don't care about this scenario
|
|
49
53
|
if (enumNameProperty === undefined || enumProperty === undefined) {
|
|
50
54
|
return false;
|
|
@@ -53,7 +57,8 @@ export const needsEnumNameMatchingEnumType = (enumNameProperty, enumProperty) =>
|
|
|
53
57
|
enumProperty.value?.name;
|
|
54
58
|
return !isEnumNameMatchingEnumType;
|
|
55
59
|
};
|
|
56
|
-
|
|
60
|
+
exports.needsEnumNameMatchingEnumType = needsEnumNameMatchingEnumType;
|
|
61
|
+
const rule = (0, createRule_1.createRule)({
|
|
57
62
|
name: "api-enum-property-best-practices",
|
|
58
63
|
meta: {
|
|
59
64
|
docs: {
|
|
@@ -71,14 +76,14 @@ const rule = createRule({
|
|
|
71
76
|
defaultOptions: [],
|
|
72
77
|
create(context) {
|
|
73
78
|
//const globalScope = context.getScope();
|
|
74
|
-
const parserServices = ESLintUtils.getParserServices(context);
|
|
79
|
+
const parserServices = utils_1.ESLintUtils.getParserServices(context);
|
|
75
80
|
const typeChecker = parserServices.program.getTypeChecker();
|
|
76
81
|
return {
|
|
77
82
|
PropertyDefinition(node) {
|
|
78
83
|
const mappedNode = parserServices.esTreeNodeToTSNodeMap.get(node);
|
|
79
84
|
const objectType = typeChecker.getTypeAtLocation(mappedNode);
|
|
80
|
-
const isEnumType = typedTokenHelpers.isEnumType(objectType);
|
|
81
|
-
const result = hasEnumSpecifiedCorrectly(node, isEnumType);
|
|
85
|
+
const isEnumType = typedTokenHelpers_1.typedTokenHelpers.isEnumType(objectType);
|
|
86
|
+
const result = (0, exports.hasEnumSpecifiedCorrectly)(node, isEnumType);
|
|
82
87
|
if (result.needsEnumNameAdded) {
|
|
83
88
|
context.report({
|
|
84
89
|
node: node,
|
|
@@ -101,5 +106,5 @@ const rule = createRule({
|
|
|
101
106
|
};
|
|
102
107
|
},
|
|
103
108
|
});
|
|
104
|
-
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
109
|
+
exports.default = rule;
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpRW51bVByb3BlcnR5QmVzdFByYWN0aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlFbnVtUHJvcGVydHlCZXN0UHJhY3RpY2VzL2FwaUVudW1Qcm9wZXJ0eUJlc3RQcmFjdGljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0RBQStEO0FBQy9ELHVEQUFrRDtBQUNsRCxxRUFBZ0U7QUFDaEUsK0RBQTBEO0FBRTFELE1BQU0sdUJBQXVCLEdBQUcsSUFBSSx5Q0FBbUIsQ0FBQztJQUNwRCxjQUFjLEVBQUUsS0FBSztJQUNyQixrQkFBa0IsRUFBRSxLQUFLO0lBQ3pCLDRCQUE0QixFQUFFLEtBQUs7SUFDbkMsZ0JBQWdCLEVBQUUsS0FBSztDQUMxQixDQUFDLENBQUM7QUFFSSxNQUFNLHlCQUF5QixHQUFHLENBQ3JDLElBQW1CLEVBQ25CLFVBQW1CLEVBQ0EsRUFBRTtJQUNyQixrQkFBa0I7SUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2QsT0FBTyx1QkFBdUIsQ0FBQztJQUNuQyxDQUFDO0lBRUQsMkNBQTJDO0lBQzNDLE1BQU0sVUFBVSxHQUFHLHFDQUFpQixDQUFDLGtCQUFrQixDQUNuRCxJQUFtQyxFQUNuQyxDQUFDLHFCQUFxQixFQUFFLGFBQWEsQ0FBQyxDQUN6QyxDQUFDO0lBRUYsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sdUJBQXVCLENBQUM7SUFDbkMsQ0FBQztJQUVELHNHQUFzRztJQUN0RyxNQUFNLGFBQWEsR0FBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBc0M7U0FDdEUsU0FBUyxDQUFDLENBQUMsQ0FBOEIsQ0FBQztJQUMvQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakIsT0FBTyxJQUFJLHlDQUFtQixDQUFDO1lBQzNCLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLGtCQUFrQixFQUFF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
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnumTestResultModel = void 0;
|
|
4
|
+
class EnumTestResultModel {
|
|
2
5
|
constructor(init) {
|
|
3
6
|
this.needsEnumAdded = init.needsEnumAdded;
|
|
4
7
|
this.needsEnumNameAdded = init.needsEnumNameAdded;
|
|
@@ -6,4 +9,5 @@ export class EnumTestResultModel {
|
|
|
6
9
|
this.needsEnumNameToMatchEnumType = init.needsEnumNameToMatchEnumType;
|
|
7
10
|
}
|
|
8
11
|
}
|
|
9
|
-
|
|
12
|
+
exports.EnumTestResultModel = EnumTestResultModel;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bVRlc3RSZXN1bHRNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlFbnVtUHJvcGVydHlCZXN0UHJhY3RpY2VzL2VudW1UZXN0UmVzdWx0TW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBYSxtQkFBbUI7SUFDNUIsWUFBWSxJQUF5QjtRQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDMUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzlDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUM7SUFDMUUsQ0FBQztDQUtKO0FBWEQsa0RBV0MifQ==
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.apiMethodsShouldBeGuarded = void 0;
|
|
4
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
5
|
+
const createRule_1 = require("../../utils/createRule");
|
|
6
|
+
const typedTokenHelpers_1 = require("../../utils/typedTokenHelpers");
|
|
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"]);
|
|
7
10
|
function findClassDeclaration(node) {
|
|
8
|
-
if (node.type === TSESTree.AST_NODE_TYPES.ClassDeclaration) {
|
|
11
|
+
if (node.type === utils_1.TSESTree.AST_NODE_TYPES.ClassDeclaration) {
|
|
9
12
|
return node;
|
|
10
13
|
}
|
|
11
14
|
if (node.parent) {
|
|
@@ -15,13 +18,14 @@ export const apiMethodsShouldBeGuarded = (node) => {
|
|
|
15
18
|
}
|
|
16
19
|
const classNode = findClassDeclaration(node);
|
|
17
20
|
const hasUseGuardsDecoratorOnController = classNode
|
|
18
|
-
? typedTokenHelpers.nodeHasDecoratorsNamed(classNode, ["UseGuards"])
|
|
21
|
+
? typedTokenHelpers_1.typedTokenHelpers.nodeHasDecoratorsNamed(classNode, ["UseGuards"])
|
|
19
22
|
: false;
|
|
20
23
|
return (hasApiMethodDecorator &&
|
|
21
24
|
!hasUseGuardsDecorator &&
|
|
22
25
|
!hasUseGuardsDecoratorOnController);
|
|
23
26
|
};
|
|
24
|
-
|
|
27
|
+
exports.apiMethodsShouldBeGuarded = apiMethodsShouldBeGuarded;
|
|
28
|
+
const rule = (0, createRule_1.createRule)({
|
|
25
29
|
name: "api-methods-should-be-guarded",
|
|
26
30
|
meta: {
|
|
27
31
|
docs: {
|
|
@@ -38,7 +42,7 @@ const rule = createRule({
|
|
|
38
42
|
create(context) {
|
|
39
43
|
return {
|
|
40
44
|
MethodDefinition(node) {
|
|
41
|
-
if (apiMethodsShouldBeGuarded(node)) {
|
|
45
|
+
if ((0, exports.apiMethodsShouldBeGuarded)(node)) {
|
|
42
46
|
context.report({
|
|
43
47
|
node: node,
|
|
44
48
|
messageId: "apiMethodsShouldBeGuarded",
|
|
@@ -48,5 +52,5 @@ const rule = createRule({
|
|
|
48
52
|
};
|
|
49
53
|
},
|
|
50
54
|
});
|
|
51
|
-
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
exports.default = rule;
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpTWV0aG9kc1Nob3VsZEJlR3VhcmRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlNZXRob2RzU2hvdWxkQmVHdWFyZGVkL2FwaU1ldGhvZHNTaG91bGRCZUd1YXJkZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0RBQWtEO0FBQ2xELHVEQUFrRDtBQUNsRCxxRUFBZ0U7QUFFekQsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLElBQStCLEVBQUUsRUFBRTtJQUN6RSxNQUFNLHFCQUFxQixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNsRSxJQUFJLEVBQ0osQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQ3RFLENBQUM7SUFFRixNQUFNLHFCQUFxQixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNsRSxJQUFJLEVBQ0osQ0FBQyxXQUFXLENBQUMsQ0FDaEIsQ0FBQztJQUVGLFNBQVMsb0JBQW9CLENBQ3pCLElBQW1CO1FBRW5CLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFN0MsTUFBTSxpQ0FBaUMsR0FBRyxTQUFTO1FBQy9DLENBQUMsQ0FBQyxxQ0FBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsS0FBSyxDQUFDO0lBRVosT0FBTyxDQUNILHFCQUFxQjtRQUNyQixDQUFDLHFCQUFxQjtRQUN0QixDQUFDLGlDQUFpQyxDQUNyQyxDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBbENXLFFBQUEseUJBQXlCLDZCQWtDcEM7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQWtDO0lBQ3JELElBQUksRUFBRSwrQkFBK0I7SUFDckMsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUNQLDZFQUE2RTtTQUNwRjtRQUNELFFBQVEsRUFBRTtZQUNOLHlCQUF5QixFQUNyQiwyR0FBMkc7U0FDbEg7UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLElBQUksRUFBRSxZQUFZO0tBQ3JCO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFDbEIsTUFBTSxDQUFDLE9BQU87UUFDVixPQUFPO1lBQ0gsZ0JBQWdCLENBQUMsSUFBK0I7Z0JBQzVDLElBQUksSUFBQSxpQ0FBeUIsRUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNsQyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNYLElBQUksRUFBRSxJQUFJO3dCQUNWLFNBQVMsRUFBRSwyQkFBMkI7cUJBQ3pDLENBQUMsQ0FBQztnQkFDUCxDQUFDO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FBRUgsa0JBQWUsSUFBSSxDQUFDIn0=
|
package/dist/rules/apiMethodsShouldSpecifyApiOperation/apiMethodsShouldSpecifyApiOperation.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shouldUseApiResponseDecorator = void 0;
|
|
4
|
+
const createRule_1 = require("../../utils/createRule");
|
|
5
|
+
const typedTokenHelpers_1 = require("../../utils/typedTokenHelpers");
|
|
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"]);
|
|
6
9
|
return hasApiMethodDecorator && !hasApiOperationDecorator;
|
|
7
10
|
};
|
|
8
|
-
|
|
11
|
+
exports.shouldUseApiResponseDecorator = shouldUseApiResponseDecorator;
|
|
12
|
+
const rule = (0, createRule_1.createRule)({
|
|
9
13
|
name: "api-method-should-specify-api-operation",
|
|
10
14
|
meta: {
|
|
11
15
|
docs: {
|
|
@@ -22,7 +26,7 @@ const rule = createRule({
|
|
|
22
26
|
create(context) {
|
|
23
27
|
return {
|
|
24
28
|
MethodDefinition(node) {
|
|
25
|
-
if (shouldUseApiResponseDecorator(node)) {
|
|
29
|
+
if ((0, exports.shouldUseApiResponseDecorator)(node)) {
|
|
26
30
|
context.report({
|
|
27
31
|
node: node,
|
|
28
32
|
messageId: "shouldSpecifyApiOperation",
|
|
@@ -32,5 +36,5 @@ const rule = createRule({
|
|
|
32
36
|
};
|
|
33
37
|
},
|
|
34
38
|
});
|
|
35
|
-
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
exports.default = rule;
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpTWV0aG9kc1Nob3VsZFNwZWNpZnlBcGlPcGVyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvYXBpTWV0aG9kc1Nob3VsZFNwZWNpZnlBcGlPcGVyYXRpb24vYXBpTWV0aG9kc1Nob3VsZFNwZWNpZnlBcGlPcGVyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdURBQWtEO0FBQ2xELHFFQUFnRTtBQUV6RCxNQUFNLDZCQUE2QixHQUFHLENBQ3pDLElBQStCLEVBQ3hCLEVBQUU7SUFDVCxNQUFNLHFCQUFxQixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNsRSxJQUFJLEVBQ0osQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQ3RFLENBQUM7SUFFRixNQUFNLHdCQUF3QixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNyRSxJQUFJLEVBQ0osQ0FBQyxjQUFjLENBQUMsQ0FDbkIsQ0FBQztJQUVGLE9BQU8scUJBQXFCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztBQUM5RCxDQUFDLENBQUM7QUFkVyxRQUFBLDZCQUE2QixpQ0FjeEM7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQWtDO0lBQ3JELElBQUksRUFBRSx5Q0FBeUM7SUFDL0MsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUNQLGdFQUFnRTtTQUN2RTtRQUNELFFBQVEsRUFBRTtZQUNOLHlCQUF5QixFQUFFLG1MQUFtTDtTQUNqTjtRQUNELE1BQU0sRUFBRSxFQUFFO1FBQ1YsY0FBYyxFQUFFLEtBQUs7UUFDckIsSUFBSSxFQUFFLFlBQVk7S0FDckI7SUFDRCxjQUFjLEVBQUUsRUFBRTtJQUVsQixNQUFNLENBQUMsT0FBTztRQUNWLE9BQU87WUFDSCxnQkFBZ0IsQ0FBQyxJQUErQjtnQkFDNUMsSUFBSSxJQUFBLHFDQUE2QixFQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ1gsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLDJCQUEyQjtxQkFDekMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxrQkFBZSxJQUFJLENBQUMifQ==
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shouldUseApiResponseDecorator = void 0;
|
|
4
|
+
const createRule_1 = require("../../utils/createRule");
|
|
5
|
+
const typedTokenHelpers_1 = require("../../utils/typedTokenHelpers");
|
|
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, [
|
|
6
9
|
"ApiResponse",
|
|
7
10
|
"ApiOkResponse",
|
|
8
11
|
"ApiCreatedResponse",
|
|
@@ -33,7 +36,8 @@ export const shouldUseApiResponseDecorator = (node) => {
|
|
|
33
36
|
]);
|
|
34
37
|
return hasApiMethodDecorator && !hasApiResponseDecorator;
|
|
35
38
|
};
|
|
36
|
-
|
|
39
|
+
exports.shouldUseApiResponseDecorator = shouldUseApiResponseDecorator;
|
|
40
|
+
const rule = (0, createRule_1.createRule)({
|
|
37
41
|
name: "api-method-should-specify-api-response",
|
|
38
42
|
meta: {
|
|
39
43
|
docs: {
|
|
@@ -50,7 +54,7 @@ const rule = createRule({
|
|
|
50
54
|
create(context) {
|
|
51
55
|
return {
|
|
52
56
|
MethodDefinition(node) {
|
|
53
|
-
if (shouldUseApiResponseDecorator(node)) {
|
|
57
|
+
if ((0, exports.shouldUseApiResponseDecorator)(node)) {
|
|
54
58
|
context.report({
|
|
55
59
|
node: node,
|
|
56
60
|
messageId: "shouldSpecifyApiResponse",
|
|
@@ -60,5 +64,5 @@ const rule = createRule({
|
|
|
60
64
|
};
|
|
61
65
|
},
|
|
62
66
|
});
|
|
63
|
-
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
exports.default = rule;
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpTWV0aG9kc1Nob3VsZFNwZWNpZnlBcGlSZXNwb25zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9hcGlNZXRob2RzU2hvdWxkU3BlY2lmeUFwaVJlc3BvbnNlL2FwaU1ldGhvZHNTaG91bGRTcGVjaWZ5QXBpUmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdURBQWtEO0FBQ2xELHFFQUFnRTtBQUV6RCxNQUFNLDZCQUE2QixHQUFHLENBQ3pDLElBQStCLEVBQ3hCLEVBQUU7SUFDVCxNQUFNLHFCQUFxQixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNsRSxJQUFJLEVBQ0osQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQ3RFLENBQUM7SUFFRixNQUFNLHVCQUF1QixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNwRSxJQUFJLEVBQ0o7UUFDSSxhQUFhO1FBQ2IsZUFBZTtRQUNmLG9CQUFvQjtRQUNwQixxQkFBcUI7UUFDckIsc0JBQXNCO1FBQ3RCLDZCQUE2QjtRQUM3QixrQkFBa0I7UUFDbEIsdUJBQXVCO1FBQ3ZCLHlCQUF5QjtRQUN6Qiw0QkFBNEI7UUFDNUIscUJBQXFCO1FBQ3JCLGdDQUFnQztRQUNoQyx1QkFBdUI7UUFDdkIscUJBQXFCO1FBQ3JCLHNCQUFzQjtRQUN0QiwyQkFBMkI7UUFDM0IsaUJBQWlCO1FBQ2pCLDZCQUE2QjtRQUM3QiwwQkFBMEI7UUFDMUIsMkJBQTJCO1FBQzNCLCtCQUErQjtRQUMvQiw0QkFBNEI7UUFDNUIsMkJBQTJCO1FBQzNCLCtCQUErQjtRQUMvQixnQ0FBZ0M7UUFDaEMsaUNBQWlDO1FBQ2pDLG9CQUFvQjtLQUN2QixDQUNKLENBQUM7SUFFRixPQUFPLHFCQUFxQixJQUFJLENBQUMsdUJBQXVCLENBQUM7QUFDN0QsQ0FBQyxDQUFDO0FBMUNXLFFBQUEsNkJBQTZCLGlDQTBDeEM7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBQWlDO0lBQ3BELElBQUksRUFBRSx3Q0FBd0M7SUFDOUMsSUFBSSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0YsV0FBVyxFQUNQLDBKQUEwSjtTQUNqSztRQUNELFFBQVEsRUFBRTtZQUNOLHdCQUF3QixFQUFFLDhLQUE4SztTQUMzTTtRQUNELE1BQU0sRUFBRSxFQUFFO1FBQ1YsY0FBYyxFQUFFLEtBQUs7UUFDckIsSUFBSSxFQUFFLFlBQVk7S0FDckI7SUFDRCxjQUFjLEVBQUUsRUFBRTtJQUVsQixNQUFNLENBQUMsT0FBTztRQUNWLE9BQU87WUFDSCxnQkFBZ0IsQ0FBQyxJQUErQjtnQkFDNUMsSUFBSSxJQUFBLHFDQUE2QixFQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ1gsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLDBCQUEwQjtxQkFDeEMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxrQkFBZSxJQUFJLENBQUMifQ==
|