@darraghor/eslint-plugin-nestjs-typed 5.2.1 → 6.0.0-rc.10
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 +5 -7
- package/dist/configs/base.d.ts +8 -0
- package/dist/configs/base.js +7 -0
- package/dist/configs/index.d.ts +11 -0
- package/dist/configs/noSwagger.d.ts +6 -0
- package/dist/configs/noSwagger.js +14 -12
- package/dist/configs/recommended.d.ts +6 -0
- package/dist/configs/recommended.js +30 -29
- package/dist/index.d.ts +52 -0
- package/dist/index.js +91 -5
- package/dist/rules/allPropertiesAreWhitelisted/allPropertiesAreWhitelisted.d.ts +2 -0
- package/dist/rules/allPropertiesAreWhitelisted/allPropertiesAreWhitelisted.js +2 -4
- package/dist/rules/allPropertiesHaveExplicitDefined/allPropertiesHaveExplicitDefined.d.ts +3 -0
- package/dist/rules/allPropertiesHaveExplicitDefined/allPropertiesHaveExplicitDefined.js +1 -2
- package/dist/rules/apiEnumPropertyBestPractices/apiEnumPropertyBestPractices.d.ts +6 -0
- package/dist/rules/apiEnumPropertyBestPractices/apiEnumPropertyBestPractices.js +2 -3
- package/dist/rules/apiEnumPropertyBestPractices/enumTestResultModel.d.ts +7 -0
- package/dist/rules/apiMethodsShouldBeGuarded/apiMethodsShouldBeGuarded.d.ts +4 -0
- package/dist/rules/apiMethodsShouldBeGuarded/apiMethodsShouldBeGuarded.js +1 -2
- package/dist/rules/apiMethodsShouldSpecifyApiOperation/apiMethodsShouldSpecifyApiOperation.d.ts +4 -0
- package/dist/rules/apiMethodsShouldSpecifyApiOperation/apiMethodsShouldSpecifyApiOperation.js +1 -2
- package/dist/rules/apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.d.ts +4 -0
- package/dist/rules/apiMethodsShouldSpecifyApiResponse/apiMethodsShouldSpecifyApiResponse.js +1 -2
- package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.d.ts +5 -0
- package/dist/rules/apiPropertyMatchesPropertyOptionality/apiPropertyMatchesPropertyOptionality.js +1 -2
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/apiPropertyReturningArrayShouldSetArray.d.ts +5 -0
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/apiPropertyReturningArrayShouldSetArray.js +2 -3
- package/dist/rules/apiPropertyReturningArrayShouldSetArray/arraySetResultModel.d.ts +5 -0
- package/dist/rules/controllerDecoratedHasApiTags/controllerDecoratedHasApiTags.d.ts +4 -0
- package/dist/rules/controllerDecoratedHasApiTags/controllerDecoratedHasApiTags.js +1 -2
- package/dist/rules/index.d.ts +23 -0
- package/dist/rules/injectablesShouldBeProvided/injectableShouldBeProvided.d.ts +9 -0
- package/dist/rules/injectablesShouldBeProvided/injectableShouldBeProvided.js +9 -12
- package/dist/rules/noDuplicateDecorators/noDuplicateDecorators.d.ts +9 -0
- package/dist/rules/noDuplicateDecorators/noDuplicateDecorators.js +3 -7
- package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.d.ts +21 -0
- package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.js +12 -15
- package/dist/rules/paramDecoratorNameMatchesRouteParam/rule.testData.d.ts +10 -0
- package/dist/rules/paramDecoratorNameMatchesRouteParam/rule.testData.js +1 -2
- package/dist/rules/providerInjectedShouldMatchFactory/ProviderInjectedShouldMatchFactory.d.ts +4 -0
- package/dist/rules/providerInjectedShouldMatchFactory/ProviderInjectedShouldMatchFactory.js +5 -8
- package/dist/rules/shouldSpecifyForbidUnknownValues/shouldSpecifyForbidUnknownValuesRule.d.ts +7 -0
- package/dist/rules/shouldSpecifyForbidUnknownValues/shouldSpecifyForbidUnknownValuesRule.js +8 -11
- package/dist/rules/sortModuleMetadataArrays/sortModuleMetadataArrays.d.ts +11 -0
- package/dist/rules/sortModuleMetadataArrays/sortModuleMetadataArrays.js +2 -2
- package/dist/rules/validateNestedOfArrayShouldSetEach/arraySetResultModel.d.ts +5 -0
- package/dist/rules/validateNestedOfArrayShouldSetEach/validateNestedOfArrayShouldSetEach.d.ts +5 -0
- package/dist/rules/validateNestedOfArrayShouldSetEach/validateNestedOfArrayShouldSetEach.js +2 -3
- package/dist/rules/validateNonPrimitiveNeedsTypeDecorator/validateNonPrimitiveNeedsDecorators.d.ts +10 -0
- package/dist/rules/validateNonPrimitiveNeedsTypeDecorator/validateNonPrimitiveNeedsDecorators.js +10 -12
- package/dist/testing/fixtureSetup.d.ts +1 -0
- package/dist/testing/fixtureSetup.js +1 -2
- package/dist/testing/preRun.d.ts +1 -0
- package/dist/utils/ast.d.ts +2 -0
- package/dist/utils/createRule.d.ts +2 -0
- package/dist/utils/createRule.js +1 -3
- package/dist/utils/files/customFileEnumeratorWrapper.d.ts +8 -0
- package/dist/utils/files/customFileEnumeratorWrapper.js +36 -0
- package/dist/utils/files/isFilteredPath.d.ts +4 -0
- package/dist/utils/files/isFilteredPath.js +2 -2
- package/dist/utils/nestModules/models/NestProvidedInjectablesMap.d.ts +5 -0
- package/dist/utils/nestModules/nestModuleAstParser.d.ts +7 -0
- package/dist/utils/nestModules/nestModuleAstParser.js +5 -7
- package/dist/utils/nestModules/nestProvidedInjectableMapper.d.ts +14 -0
- package/dist/utils/nestModules/nestProvidedInjectableMapper.js +2 -7
- package/dist/utils/nestModules/nestProvidedInjectableMapper.testData.d.ts +7 -0
- package/dist/utils/nestModules/nestProviderAstParser.d.ts +7 -0
- package/dist/utils/nestModules/nestProviderAstParser.js +3 -6
- package/dist/utils/typedTokenHelpers.d.ts +59 -0
- package/dist/utils/typedTokenHelpers.js +9 -8
- package/dist/utils/wellKnownSelectors.d.ts +1 -0
- package/package.json +35 -17
- package/dist/fixtures/Controller.stub.js +0 -9
- package/dist/fixtures/Injectable.stub.js +0 -9
- package/dist/fixtures/Module.stub.js +0 -9
- package/dist/fixtures/NonFactoryDecorator.stub.js +0 -10
- package/dist/fixtures/anotherExample.module.js +0 -25
- package/dist/fixtures/example.controller.js +0 -17
- package/dist/fixtures/example.customprovider.js +0 -14
- package/dist/fixtures/example.module.js +0 -32
- package/dist/fixtures/example.providedClass.provider.js +0 -16
- package/dist/fixtures/example.provider.js +0 -16
- package/dist/fixtures/file.js +0 -4
- package/dist/fixtures/providerArray.module.js +0 -25
- package/dist/fixtures/tooManyTimesExample.provider.js +0 -16
- package/dist/utils/files/fileEnumerationWrapper.js +0 -29
|
@@ -17,7 +17,7 @@ const shouldSetArrayProperty = (node) => {
|
|
|
17
17
|
return new arraySetResultModel_1.default(false, false);
|
|
18
18
|
}
|
|
19
19
|
// There should only be one of these apiproperty decorators so we just grab the parameter to decorator at index 0
|
|
20
|
-
const firstArgumentToDecorator = decorators[0].expression
|
|
20
|
+
const firstArgumentToDecorator = decorators[0].expression?.arguments[0];
|
|
21
21
|
// if the code is using anything other than object expression, ignore the rule (we dont want to go looking at objects)
|
|
22
22
|
// we DO want to alert if there is no argument at all. so we continue to test the rule if no argument was passed
|
|
23
23
|
if (firstArgumentToDecorator &&
|
|
@@ -53,7 +53,6 @@ const rule = (0, createRule_1.createRule)({
|
|
|
53
53
|
defaultOptions: [],
|
|
54
54
|
create(context) {
|
|
55
55
|
return {
|
|
56
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
57
56
|
PropertyDefinition: (node) => {
|
|
58
57
|
const shouldSetArrayResults = (0, exports.shouldSetArrayProperty)(node);
|
|
59
58
|
if (shouldSetArrayResults.isArrayShouldBeSetFalse) {
|
|
@@ -73,4 +72,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
73
72
|
},
|
|
74
73
|
});
|
|
75
74
|
exports.default = rule;
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUHJvcGVydHlSZXR1cm5pbmdBcnJheVNob3VsZFNldEFycmF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL2FwaVByb3BlcnR5UmV0dXJuaW5nQXJyYXlTaG91bGRTZXRBcnJheS9hcGlQcm9wZXJ0eVJldHVybmluZ0FycmF5U2hvdWxkU2V0QXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQWtFO0FBQ2xFLHVEQUFrRDtBQUNsRCxxRUFBZ0U7QUFDaEUsZ0ZBQXdEO0FBRWpELE1BQU0sc0JBQXNCLEdBQUcsQ0FDbEMsSUFBaUMsRUFDZCxFQUFFO0lBQ3JCLE1BQU0sVUFBVSxHQUFHLHFDQUFpQixDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRTtRQUMxRCxxQkFBcUI7UUFDckIsYUFBYTtLQUNoQixDQUFDLENBQUM7SUFFSCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxJQUFJLDZCQUFtQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsaUhBQWlIO0lBQ2pILE1BQU0sd0JBQXdCLEdBQzFCLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUNqQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVoQixzSEFBc0g7SUFDdEgsZ0hBQWdIO0lBQ2hILElBQ0ksd0JBQXdCO1FBQ3hCLENBQUMsd0JBQXdCLENBQUMsSUFBSSxLQUFLLHNCQUFjLENBQUMsZ0JBQWdCO1lBQzlELHdGQUF3RjtZQUN4Rix3QkFBd0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNwQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxzQkFBYyxDQUFDLGFBQWEsQ0FDakQsQ0FBQyxFQUNSLENBQUM7UUFDQyxPQUFPLElBQUksNkJBQW1CLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxNQUFNLHNCQUFzQixHQUN4QixxQ0FBaUIsQ0FBQyw4QkFBOEIsQ0FDNUMsd0JBQXdCLEVBQ3hCLFNBQVMsRUFDVCxJQUFJLENBQ1AsQ0FBQztJQUVOLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDO0lBQzNELG1DQUFtQztJQUNuQyxNQUFNLFdBQVcsR0FFUixjQUF1RDtRQUNwRCxFQUFFLFFBQ1QsRUFBRSxJQUFJLEtBQUssT0FBTyxDQUFDO0lBQ3hCLE1BQU0scUJBQXFCLEdBQ3ZCLGNBQWMsRUFBRSxJQUFJLEtBQUssc0JBQWMsQ0FBQyxXQUFXLENBQUM7SUFDeEQsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLElBQUkscUJBQXFCLENBQUM7SUFFL0QsT0FBTyxJQUFJLDZCQUFtQixDQUMxQixpQkFBaUIsSUFBSSxDQUFDLHNCQUFzQixFQUM1QyxDQUFDLGlCQUFpQixJQUFJLHNCQUFzQixDQUMvQyxDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBcERXLFFBQUEsc0JBQXNCLDBCQW9EakM7QUFFRixNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFVLEVBR3JCO0lBQ0UsSUFBSSxFQUFFLCtDQUErQztJQUNyRCxJQUFJLEVBQUU7UUFDRixJQUFJLEVBQUU7WUFDRixXQUFXLEVBQUUsc0NBQXNDO1NBQ3REO1FBQ0QsUUFBUSxFQUFFO1lBQ04sMEJBQTBCLEVBQUUsZ0VBQWdFO1lBQzVGLDJCQUEyQixFQUFFLHdFQUF3RTtTQUN4RztRQUNELE1BQU0sRUFBRSxFQUFFO1FBQ1YsY0FBYyxFQUFFLEtBQUs7UUFDckIsSUFBSSxFQUFFLFlBQVk7S0FDckI7SUFDRCxjQUFjLEVBQUUsRUFBRTtJQUVsQixNQUFNLENBQUMsT0FBTztRQUNWLE9BQU87WUFDSCxrQkFBa0IsRUFBRSxDQUFDLElBQW1CLEVBQUUsRUFBRTtnQkFDeEMsTUFBTSxxQkFBcUIsR0FBRyxJQUFBLDhCQUFzQixFQUNoRCxJQUFtQyxDQUN0QyxDQUFDO2dCQUVGLElBQUkscUJBQXFCLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztvQkFDaEQsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsNkJBQTZCO3FCQUMzQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztnQkFDRCxJQUFJLHFCQUFxQixDQUFDLHNCQUFzQixFQUFFLENBQUM7b0JBQy9DLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ1gsSUFBSSxFQUFFLElBQUk7d0JBQ1YsU0FBUyxFQUFFLDRCQUE0QjtxQkFDMUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxrQkFBZSxJQUFJLENBQUMifQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { TSESTree } from "@typescript-eslint/utils";
|
|
2
|
+
export declare const shouldUseApiTagDecorator: (node: TSESTree.ClassDeclaration) => boolean;
|
|
3
|
+
declare const rule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldUseApiTagDecorator", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
4
|
+
export default rule;
|
|
@@ -27,7 +27,6 @@ const rule = (0, createRule_1.createRule)({
|
|
|
27
27
|
defaultOptions: [],
|
|
28
28
|
create(context) {
|
|
29
29
|
return {
|
|
30
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
31
30
|
ClassDeclaration(node) {
|
|
32
31
|
if ((0, exports.shouldUseApiTagDecorator)(node)) {
|
|
33
32
|
context.report({
|
|
@@ -40,4 +39,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
40
39
|
},
|
|
41
40
|
});
|
|
42
41
|
exports.default = rule;
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlckRlY29yYXRlZEhhc0FwaVRhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvY29udHJvbGxlckRlY29yYXRlZEhhc0FwaVRhZ3MvY29udHJvbGxlckRlY29yYXRlZEhhc0FwaVRhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdURBQWtEO0FBQ2xELHFFQUFnRTtBQUV6RCxNQUFNLHdCQUF3QixHQUFHLENBQ3BDLElBQStCLEVBQ3hCLEVBQUU7SUFDVCxNQUFNLHNCQUFzQixHQUFHLHFDQUFpQixDQUFDLHNCQUFzQixDQUNuRSxJQUFJLEVBQ0osQ0FBQyxZQUFZLENBQUMsQ0FDakIsQ0FBQztJQUVGLE1BQU0sa0JBQWtCLEdBQUcscUNBQWlCLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFO1FBQ3RFLFNBQVM7S0FDWixDQUFDLENBQUM7SUFFSCxPQUFPLHNCQUFzQixJQUFJLENBQUMsa0JBQWtCLENBQUM7QUFDekQsQ0FBQyxDQUFDO0FBYlcsUUFBQSx3QkFBd0IsNEJBYW5DO0FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBQSx1QkFBVSxFQUFpQztJQUNwRCxJQUFJLEVBQUUsb0NBQW9DO0lBQzFDLElBQUksRUFBRTtRQUNGLElBQUksRUFBRTtZQUNGLFdBQVcsRUFDUCwyRUFBMkU7U0FDbEY7UUFDRCxRQUFRLEVBQUU7WUFDTix3QkFBd0IsRUFBRSwrSkFBK0o7U0FDNUw7UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLElBQUksRUFBRSxZQUFZO0tBQ3JCO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFFbEIsTUFBTSxDQUFDLE9BQU87UUFDVixPQUFPO1lBQ0gsZ0JBQWdCLENBQUMsSUFBK0I7Z0JBQzVDLElBQUksSUFBQSxnQ0FBd0IsRUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNqQyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNYLElBQUksRUFBRSxJQUFJO3dCQUNWLFNBQVMsRUFBRSwwQkFBMEI7cUJBQ3hDLENBQUMsQ0FBQztnQkFDUCxDQUFDO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyxDQUFDO0FBRUgsa0JBQWUsSUFBSSxDQUFDIn0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
declare const allRules: {
|
|
2
|
+
"all-properties-have-explicit-defined": import("@typescript-eslint/utils/ts-eslint").RuleModule<"missing-is-defined-decorator" | "missing-is-optional-decorator" | "conflicting-defined-decorators-defined-optional" | "conflicting-defined-decorators-defined-validate-if" | "conflicting-defined-decorators-optional-validate-if" | "conflicting-defined-decorators-all", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
3
|
+
"api-property-matches-property-optionality": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldUseOptionalDecorator" | "shouldUseRequiredDecorator", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
4
|
+
"injectable-should-be-provided": import("@typescript-eslint/utils/ts-eslint").RuleModule<"injectableInModule" | "controllersInModule", [{
|
|
5
|
+
src: string[];
|
|
6
|
+
filterFromPaths: string[];
|
|
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>;
|
|
9
|
+
"provided-injected-should-match-factory-parameters": import("@typescript-eslint/utils/ts-eslint").RuleModule<"mainMessage", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
10
|
+
"controllers-should-supply-api-tags": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldUseApiTagDecorator", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
11
|
+
"api-method-should-specify-api-response": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSpecifyApiResponse", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
12
|
+
"api-method-should-specify-api-operation": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSpecifyApiOperation", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
13
|
+
"api-enum-property-best-practices": import("@typescript-eslint/utils/ts-eslint").RuleModule<"needsEnumNameAdded" | "needsTypeRemoved" | "enumNameShouldMatchType", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
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
|
+
"should-specify-forbid-unknown-values": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSpecifyForbidUnknownValues", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
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>;
|
|
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
|
+
"all-properties-are-whitelisted": import("@typescript-eslint/utils/ts-eslint").RuleModule<"missing-property-decorator", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
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>;
|
|
22
|
+
};
|
|
23
|
+
export default allRules;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TSESLint } from "@typescript-eslint/utils";
|
|
2
|
+
type Options = [
|
|
3
|
+
{
|
|
4
|
+
src: string[];
|
|
5
|
+
filterFromPaths: string[];
|
|
6
|
+
}
|
|
7
|
+
];
|
|
8
|
+
declare const rule: TSESLint.RuleModule<"injectableInModule" | "controllersInModule", Options, unknown, TSESLint.RuleListener>;
|
|
9
|
+
export default rule;
|
|
@@ -4,9 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const createRule_1 = require("../../utils/createRule");
|
|
7
|
-
|
|
7
|
+
// import FileEnumeratorWrapper from "../../utils/files/fileEnumerationWrapper";
|
|
8
8
|
const nestProvidedInjectableMapper_1 = __importDefault(require("../../utils/nestModules/nestProvidedInjectableMapper"));
|
|
9
9
|
const typedTokenHelpers_1 = require("../../utils/typedTokenHelpers");
|
|
10
|
+
const customFileEnumeratorWrapper_1 = __importDefault(require("../../utils/files/customFileEnumeratorWrapper"));
|
|
10
11
|
let listOfPotentialNestModuleFiles;
|
|
11
12
|
let nestModuleMap;
|
|
12
13
|
const findModuleMapping = (className, propertyName, nestModuleMap) => {
|
|
@@ -15,8 +16,9 @@ const findModuleMapping = (className, propertyName, nestModuleMap) => {
|
|
|
15
16
|
});
|
|
16
17
|
return modules;
|
|
17
18
|
};
|
|
19
|
+
const checkNode = (
|
|
18
20
|
// super fragile types but whatevs
|
|
19
|
-
|
|
21
|
+
node, decoratorName, propertyName, messageId, context) => {
|
|
20
22
|
if (nestProvidedInjectableMapper_1.default.isNestInjectableThatIsNeverProvided(node)) {
|
|
21
23
|
return;
|
|
22
24
|
}
|
|
@@ -42,7 +44,7 @@ const checkNode = (node, decoratorName, propertyName, messageId, context) => {
|
|
|
42
44
|
};
|
|
43
45
|
function initializeModuleMappings(sourcePath, filterFromPaths, context) {
|
|
44
46
|
const mappedSourceDirectory = nestProvidedInjectableMapper_1.default.detectDirectoryToScanForFiles(sourcePath, process.cwd());
|
|
45
|
-
listOfPotentialNestModuleFiles =
|
|
47
|
+
listOfPotentialNestModuleFiles = customFileEnumeratorWrapper_1.default.enumerateFiles(mappedSourceDirectory, [".ts"], filterFromPaths);
|
|
46
48
|
nestModuleMap = nestProvidedInjectableMapper_1.default.parseFileList(listOfPotentialNestModuleFiles, context);
|
|
47
49
|
}
|
|
48
50
|
const defaultOptions = [
|
|
@@ -90,6 +92,7 @@ const rule = (0, createRule_1.createRule)({
|
|
|
90
92
|
},
|
|
91
93
|
defaultOptions: defaultOptions,
|
|
92
94
|
create(contextWithoutDefaults) {
|
|
95
|
+
// @ts-ignore
|
|
93
96
|
const context = contextWithoutDefaults.options &&
|
|
94
97
|
contextWithoutDefaults.options.length > 0
|
|
95
98
|
? contextWithoutDefaults
|
|
@@ -97,25 +100,19 @@ const rule = (0, createRule_1.createRule)({
|
|
|
97
100
|
Object.setPrototypeOf({
|
|
98
101
|
options: defaultOptions,
|
|
99
102
|
}, contextWithoutDefaults);
|
|
100
|
-
const { src, filterFromPaths
|
|
101
|
-
// ignoreExports = [],
|
|
102
|
-
// missingExports,
|
|
103
|
-
// unusedExports,
|
|
104
|
-
} = context.options[0] || {};
|
|
103
|
+
const { src, filterFromPaths } = context.options[0] || {};
|
|
105
104
|
if (nestModuleMap === undefined || nestModuleMap.size === 0) {
|
|
106
105
|
initializeModuleMappings(src[0], filterFromPaths, context);
|
|
107
106
|
}
|
|
108
107
|
return {
|
|
109
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
110
108
|
ClassDeclaration(node) {
|
|
111
109
|
checkNode(node, "Injectable", "providers", "injectableInModule", context);
|
|
112
110
|
checkNode(node, "Controller", "controllers", "controllersInModule", context);
|
|
113
111
|
},
|
|
114
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
115
112
|
"Program:exit"() {
|
|
116
113
|
// map the source to a mapping thing
|
|
117
114
|
// if not undefined set it to the mapping set
|
|
118
|
-
const mappedProvidedInjectables = nestProvidedInjectableMapper_1.default.mapAllProvidedInjectables(context.
|
|
115
|
+
const mappedProvidedInjectables = nestProvidedInjectableMapper_1.default.mapAllProvidedInjectables(context.sourceCode.ast, context.filename);
|
|
119
116
|
if (mappedProvidedInjectables !== null) {
|
|
120
117
|
nestModuleMap.set(mappedProvidedInjectables[0], mappedProvidedInjectables[1]);
|
|
121
118
|
}
|
|
@@ -124,4 +121,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
124
121
|
},
|
|
125
122
|
});
|
|
126
123
|
exports.default = rule;
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0YWJsZVNob3VsZEJlUHJvdmlkZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvaW5qZWN0YWJsZXNTaG91bGRCZVByb3ZpZGVkL2luamVjdGFibGVTaG91bGRCZVByb3ZpZGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsdURBQWtEO0FBQ2xELGdGQUFnRjtBQUNoRix3SEFBZ0c7QUFFaEcscUVBQWdFO0FBSWhFLGdIQUFrRjtBQUVsRixJQUFJLDhCQUEwQyxDQUFDO0FBQy9DLElBQUksYUFBc0QsQ0FBQztBQVMzRCxNQUFNLGlCQUFpQixHQUFHLENBQ3RCLFNBQWlCLEVBQ2pCLFlBQXlDLEVBQ3pDLGFBQXNELEVBQzFCLEVBQUU7SUFDOUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3pELE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGLE1BQU0sU0FBUyxHQUFHO0FBQ2Qsa0NBQWtDO0FBQ2xDLElBQStCLEVBQy9CLGFBQTBDLEVBQzFDLFlBQXlDLEVBQ3pDLFNBQXVELEVBQ3ZELE9BS0MsRUFDSCxFQUFFO0lBQ0EsSUFDSSxzQ0FBNEIsQ0FBQyxtQ0FBbUMsQ0FBQyxJQUFJLENBQUMsRUFDeEUsQ0FBQztRQUNDLE9BQU87SUFDWCxDQUFDO0lBQ0QsSUFBSSxxQ0FBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksRUFB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
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type NoDuplicateDecoratorsOptions = [
|
|
2
|
+
{
|
|
3
|
+
customList: string[];
|
|
4
|
+
}
|
|
5
|
+
];
|
|
6
|
+
export declare const shouldTrigger: () => boolean;
|
|
7
|
+
export declare const standardDecoratorsToValidate: string[];
|
|
8
|
+
declare const rule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"noDuplicateDecorators", NoDuplicateDecoratorsOptions, unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
9
|
+
export default rule;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.standardDecoratorsToValidate = exports.shouldTrigger = void 0;
|
|
4
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
5
|
-
/* eslint-disable unicorn/prevent-abbreviations */
|
|
6
4
|
const createRule_1 = require("../../utils/createRule");
|
|
7
5
|
const utils_1 = require("@typescript-eslint/utils");
|
|
8
6
|
const shouldTrigger = () => {
|
|
@@ -44,7 +42,7 @@ const rule = (0, createRule_1.createRule)({
|
|
|
44
42
|
},
|
|
45
43
|
],
|
|
46
44
|
create(context) {
|
|
47
|
-
const customListArrayItem = context.options
|
|
45
|
+
const customListArrayItem = context.options[0];
|
|
48
46
|
let decoratorsToValidate = customListArrayItem?.customList;
|
|
49
47
|
if (!customListArrayItem?.customList ||
|
|
50
48
|
customListArrayItem?.customList.length === 0) {
|
|
@@ -52,8 +50,7 @@ const rule = (0, createRule_1.createRule)({
|
|
|
52
50
|
}
|
|
53
51
|
return {
|
|
54
52
|
["PropertyDefinition,ClassDeclaration"](node) {
|
|
55
|
-
|
|
56
|
-
const allDecorators = node?.decorators;
|
|
53
|
+
const allDecorators = node.decorators;
|
|
57
54
|
if (allDecorators && allDecorators.length > 1) {
|
|
58
55
|
const decoratorNames = allDecorators.map((decorator) => {
|
|
59
56
|
if (decorator.expression.type ===
|
|
@@ -61,7 +58,6 @@ const rule = (0, createRule_1.createRule)({
|
|
|
61
58
|
decorator.expression.callee &&
|
|
62
59
|
decorator.expression.callee.type ===
|
|
63
60
|
utils_1.TSESTree.AST_NODE_TYPES.Identifier) {
|
|
64
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
65
61
|
return decorator.expression.callee.name;
|
|
66
62
|
}
|
|
67
63
|
return "";
|
|
@@ -96,4 +92,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
96
92
|
},
|
|
97
93
|
});
|
|
98
94
|
exports.default = rule;
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9EdXBsaWNhdGVEZWNvcmF0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL25vRHVwbGljYXRlRGVjb3JhdG9ycy9ub0R1cGxpY2F0ZURlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQWtEO0FBRWxELG9EQUFrRDtBQU8zQyxNQUFNLGFBQWEsR0FBRyxHQUFZLEVBQUU7SUFDdkMsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRlcsUUFBQSxhQUFhLGlCQUV4QjtBQUNXLFFBQUEsNEJBQTRCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDekUsTUFBTSxJQUFJLEdBQUcsSUFBQSx1QkFBVSxFQUF3RDtJQUMzRSxJQUFJLEVBQUUseUJBQXlCO0lBQy9CLElBQUksRUFBRTtRQUNGLElBQUksRUFBRTtZQUNGLFdBQVcsRUFDUCwyRkFBMkY7U0FDbEc7UUFDRCxRQUFRLEVBQUU7WUFDTixxQkFBcUIsRUFDakIsMEVBQTBFO1NBQ2pGO1FBQ0QsTUFBTSxFQUFFO1lBQ0o7Z0JBQ0ksSUFBSSxFQUFFLFFBQStCO2dCQUNyQyxVQUFVLEVBQUU7b0JBQ1IsVUFBVSxFQUFFO3dCQUNSLFdBQVcsRUFDUCx5RUFBeUU7d0JBQzdFLElBQUksRUFBRSxPQUE4Qjt3QkFDcEMsUUFBUSxFQUFFLENBQUM7d0JBQ1gsS0FBSyxFQUFFOzRCQUNILElBQUksRUFBRSxRQUErQjs0QkFDckMsU0FBUyxFQUFFLENBQUM7eUJBQ2Y7cUJBQ0o7aUJBQ0o7YUFDSjtTQUNKO1FBQ0QsY0FBYyxFQUFFLElBQUk7UUFDcEIsSUFBSSxFQUFFLFlBQVk7S0FDckI7SUFDRCxjQUFjLEVBQUU7UUFDWjtZQUNJLFVBQVUsRUFBRSxJQUFJLEtBQUssRUFBVTtTQUNsQztLQUNKO0lBRUQsTUFBTSxDQUFDLE9BQU87UUFDVixNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENB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
|
package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { TSESTree } from "@typescript-eslint/utils";
|
|
2
|
+
interface ResultModel {
|
|
3
|
+
hasColonInName: boolean;
|
|
4
|
+
paramNameNotMatchedInPath: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare const parsePathParts: (decorator: TSESTree.Decorator) => string[];
|
|
7
|
+
/**
|
|
8
|
+
* nestjs allows for paths with _+?()*
|
|
9
|
+
* this rule doesn't support parsing those so we'll just pass
|
|
10
|
+
*/
|
|
11
|
+
export declare const hasPathPartsAnyRegexParams: (pathPartsToCheck: string[]) => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Checks if there is a matching path part for the paramName
|
|
14
|
+
* @param paramName
|
|
15
|
+
* @param pathPartsToCheck
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
export declare const isParameterNameIncludedInAPathPart: (paramName: string, pathPartsToCheck: string[]) => boolean;
|
|
19
|
+
export declare const shouldTrigger: (decorator: TSESTree.Decorator) => ResultModel;
|
|
20
|
+
declare const rule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"paramIdentifierDoesntNeedColon" | "paramIdentifierShouldMatch", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
21
|
+
export default rule;
|
package/dist/rules/paramDecoratorNameMatchesRouteParam/paramDecoratorNameMatchesRouteParam.js
CHANGED
|
@@ -29,8 +29,8 @@ const parsePathParts = (decorator) => {
|
|
|
29
29
|
}
|
|
30
30
|
if (decoratorArgument?.type === utils_1.TSESTree.AST_NODE_TYPES.ObjectExpression) {
|
|
31
31
|
return decoratorArgument.properties
|
|
32
|
-
.filter((x) => x
|
|
33
|
-
|
|
32
|
+
.filter((x) => x.key
|
|
33
|
+
.name === "path")
|
|
34
34
|
.map((x) => x.value.raw);
|
|
35
35
|
}
|
|
36
36
|
return [];
|
|
@@ -42,7 +42,6 @@ exports.parsePathParts = parsePathParts;
|
|
|
42
42
|
*/
|
|
43
43
|
const hasPathPartsAnyRegexParams = (pathPartsToCheck) => {
|
|
44
44
|
// prettier-ignore
|
|
45
|
-
// eslint-disable-next-line no-useless-escape
|
|
46
45
|
const specialCharacterRegex = /(dareslint__skip|\*|\+|\?|\(|\)|_)/; //new RegExp("([\?\+\*\_\(\)])")
|
|
47
46
|
return pathPartsToCheck.some((pathPart) => {
|
|
48
47
|
return specialCharacterRegex.test(pathPart);
|
|
@@ -77,8 +76,8 @@ const shouldTrigger = (decorator) => {
|
|
|
77
76
|
};
|
|
78
77
|
}
|
|
79
78
|
// grab the param name
|
|
80
|
-
const paramName = decorator
|
|
81
|
-
|
|
79
|
+
const paramName = (decorator?.expression)
|
|
80
|
+
.arguments[0]?.value;
|
|
82
81
|
// if there's no param name get out of here
|
|
83
82
|
if (!paramName || paramName === "") {
|
|
84
83
|
return {
|
|
@@ -96,19 +95,19 @@ const shouldTrigger = (decorator) => {
|
|
|
96
95
|
let pathPartsToCheck = [];
|
|
97
96
|
// grab any controller path parts
|
|
98
97
|
// eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style
|
|
99
|
-
const controllerDecorator = decorator.parent
|
|
100
|
-
?.parent
|
|
98
|
+
const controllerDecorator = (decorator.parent.parent?.parent?.parent
|
|
99
|
+
?.parent).decorators.find((d) => {
|
|
101
100
|
return (d.expression
|
|
102
|
-
.callee
|
|
101
|
+
.callee.name === "Controller");
|
|
103
102
|
});
|
|
104
103
|
pathPartsToCheck = pathPartsToCheck.concat((0, exports.parsePathParts)(controllerDecorator));
|
|
105
104
|
// grab any api method path parts from method decorator
|
|
106
|
-
const methodDefinition = decorator.parent
|
|
105
|
+
const methodDefinition = decorator.parent.parent
|
|
107
106
|
?.parent;
|
|
108
107
|
// eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style
|
|
109
|
-
const methodDecorator = methodDefinition
|
|
108
|
+
const methodDecorator = methodDefinition.decorators.find((d) => {
|
|
110
109
|
return nestRequestMethodDecoratorNames.has(d.expression
|
|
111
|
-
.callee
|
|
110
|
+
.callee.name);
|
|
112
111
|
});
|
|
113
112
|
pathPartsToCheck = pathPartsToCheck.concat((0, exports.parsePathParts)(methodDecorator));
|
|
114
113
|
const shouldIgnoreThisSetOfRoutes =
|
|
@@ -145,13 +144,11 @@ const rule = (0, createRule_1.createRule)({
|
|
|
145
144
|
defaultOptions: [],
|
|
146
145
|
create(context) {
|
|
147
146
|
return {
|
|
148
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
149
147
|
Decorator(node) {
|
|
150
148
|
if (node.expression
|
|
151
|
-
|
|
149
|
+
.callee.name !== "Param") {
|
|
152
150
|
return;
|
|
153
151
|
}
|
|
154
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
155
152
|
const result = (0, exports.shouldTrigger)(node);
|
|
156
153
|
if (result.paramNameNotMatchedInPath) {
|
|
157
154
|
context.report({
|
|
@@ -170,4 +167,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
170
167
|
},
|
|
171
168
|
});
|
|
172
169
|
exports.default = rule;
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvcGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0vcGFyYW1EZWNvcmF0b3JOYW1lTWF0Y2hlc1JvdXRlUGFyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsa0RBQWtEO0FBQ2xELG9EQUFrRDtBQUNsRCx1REFBa0Q7QUFPbEQsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUM1QyxLQUFLO0lBQ0wsTUFBTTtJQUNOLEtBQUs7SUFDTCxRQUFRO0lBQ1IsT0FBTztJQUNQLFNBQVM7SUFDVCxNQUFNO0lBQ04sS0FBSztDQUNSLENBQUMsQ0FBQztBQUVJLE1BQU0sY0FBYyxHQUFHLENBQUMsU0FBNkIsRUFBWSxFQUFFO0lBQ3RFLE1BQU0saUJBQWlCLEdBQUksU0FBUyxFQUFFLFVBQXNDO1FBQ3hFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5CLElBQ0ksaUJBQWlCLEVBQUUsSUFBSSxLQUFLLGdCQUFRLENBQUMsY0FBYyxDQUFDLGVBQWU7UUFDbkUsaUJBQWlCLEVBQUUsSUFBSSxLQUFLLGdCQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFDaEUsQ0FBQztRQUNDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLGlCQUFpQixFQUFFLElBQUksS0FBSyxnQkFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5RCxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksaUJBQWlCLEVBQUUsSUFBSSxLQUFLLGdCQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3RFLE9BQU8saUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDakMs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
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* eslint-disable unicorn/filename-case */
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.responseParsingTestCases = exports.pathPartTestCases = void 0;
|
|
5
4
|
exports.pathPartTestCases = [
|
|
@@ -122,4 +121,4 @@ exports.responseParsingTestCases = [
|
|
|
122
121
|
shouldResult: false,
|
|
123
122
|
},
|
|
124
123
|
];
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS50ZXN0RGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9wYXJhbURlY29yYXRvck5hbWVNYXRjaGVzUm91dGVQYXJhbS9ydWxlLnRlc3REYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsaUJBQWlCLEdBQUc7SUFDN0I7UUFDSSxVQUFVLEVBQUU7OztTQUdYO1FBQ0QsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ2xCLE9BQU8sRUFBRSw4QkFBOEI7S0FDMUM7SUFDRDtRQUNJLFVBQVUsRUFBRTs7O1NBR1g7UUFDRCxLQUFLLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztRQUMzQyxPQUFPLEVBQUUsa0NBQWtDO0tBQzlDO0lBQ0Q7UUFDSSxVQUFVLEVBQUU7OztTQUdYO1FBQ0QsS0FBSyxFQUFFO1lBQ0gsa0NBQWtDO1lBQ2xDLGtDQUFrQztTQUNyQztRQUNELE9BQU8sRUFBRSxvQ0FBb0M7S0FDaEQ7SUFDRDtRQUNJLFVBQVUsRUFBRTs7O1NBR1g7UUFDRCxLQUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO1FBQzdCLE9BQU8sRUFBRSxnQ0FBZ0M7S0FDNUM7SUFDRDtRQUNJLFVBQVUsRUFBRTs7O1NBR1g7UUFDRCxLQUFLLEVBQUUsRUFBRTtRQUNULE9BQU8sRUFBRSxxQkFBcUI7S0FDakM7SUFDRDtRQUNJLFVBQVUsRUFBRTs7O1NBR1g7UUFDRCxLQUFLLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztRQUMzQyxPQUFPLEVBQUUsNEJBQTRCO0tBQ3hDO0NBQ0osQ0FBQztBQUVXLFFBQUEsd0JBQXdCLEdBQUc7SUFDcEM7UUFDSSxXQUFXLEVBQUUsTUFBTTtRQUNuQixLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDbEIsWUFBWSxFQUFFLElBQUk7S0FDckI7SUFDRDtRQUNJLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUNsQixZQUFZLEVBQUUsS0FBSztLQUN0QjtJQUNEO1FBQ0ksV0FBVyxFQUFFLE1BQU07UUFDbkIsS0FBSyxFQUFFLENBQUMsdUJBQXVCLENBQUM7UUFDaEMsWUFBWSxFQUFFLElBQUk7S0FDckI7SUFDRDtRQUNJLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLEtBQUssRUFBRSxDQUFDLHdCQUF3QixDQUFDO1FBQ2pDLFlBQVksRUFBRSxLQUFLO0tBQ3RCO0lBQ0Q7UUFDSSxXQUFXLEVBQUUsTUFBTTtRQUNuQixLQUFLLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztRQUNqQyxZQUFZLEVBQUUsSUFBSTtLQUNyQjtJQUNEO1FBQ0ksV0FBVyxFQUFFLE1BQU07UUFDbkIsS0FBSyxFQUFFLENBQUMsdUJBQXVCLENBQUM7UUFDaEMsWUFBWSxFQUFFLElBQUk7S0FDckI7SUFDRDtRQUNJLFdBQVcsRUFBRSxNQUFNO1FBQ25CLEtBQUssRUFBRSxDQUFDLHNCQUFzQixDQUFDO1FBQy9CLFlBQVksRUFBRSxJQUFJO0tBQ3JCO0lBQ0Q7UUFDSSxXQUFXLEVBQUUsTUFBTTtRQUNuQixLQUFLLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztRQUNoQyxZQUFZLEVBQUUsSUFBSTtLQUNyQjtJQUNEO1FBQ0ksV0FBVyxFQUFFLEtBQUs7UUFDbEIsS0FBSyxFQUFFLENBQUMsdUJBQXVCLENBQUM7UUFDaEMsWUFBWSxFQUFFLEtBQUs7S0FDdEI7SUFDRDtRQUNJLFdBQVcsRUFBRSxNQUFNO1FBQ25CLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUM7UUFDaEMsWUFBWSxFQUFFLElBQUk7S0FDckI7SUFDRDtRQUNJLFdBQVcsRUFBRSxNQUFNO1FBQ25CLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQztRQUNyQixZQUFZLEVBQUUsS0FBSztLQUN0QjtJQUNEO1FBQ0ksV0FBVyxFQUFFLE1BQU07UUFDbkIsS0FBSyxFQUFFLEVBQUU7UUFDVCxZQUFZLEVBQUUsS0FBSztLQUN0QjtJQUNEO1FBQ0ksV0FBVyxFQUFFLE1BQU07UUFDbkIsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNqQixZQUFZLEVBQUUsS0FBSztLQUN0QjtDQUNKLENBQUMifQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { TSESTree } from "@typescript-eslint/utils";
|
|
2
|
+
export declare const hasMismatchedInjected: (node: TSESTree.VariableDeclarator) => boolean;
|
|
3
|
+
declare const rule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"mainMessage", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
4
|
+
export default rule;
|
|
@@ -2,25 +2,23 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hasMismatchedInjected = void 0;
|
|
4
4
|
const createRule_1 = require("../../utils/createRule");
|
|
5
|
-
// eslint-disable-next-line unicorn/import-style
|
|
6
5
|
//import util from "util";
|
|
7
6
|
const nestProviderAstParser_1 = require("../../utils/nestModules/nestProviderAstParser");
|
|
8
7
|
const hasMismatchedInjected = (node) => {
|
|
9
8
|
// should be a nest provider - note this doesn't check the Provider used is an import actually from nest. Assumes nest Provider. Will change if this is annoying:)
|
|
10
9
|
// edit 03/06/2023 - it was annoying and someone complained on github so I added a check for a "useFactory" property on the Provider declaration
|
|
11
|
-
const isNestProvider = node.id.typeAnnotation
|
|
10
|
+
const isNestProvider = (node.id.typeAnnotation
|
|
12
11
|
?.typeAnnotation
|
|
13
12
|
// prettier-ignore
|
|
14
|
-
|
|
15
|
-
?.typeName?.name === "Provider" &&
|
|
13
|
+
).typeName.name === "Provider" &&
|
|
16
14
|
// and there is a useFactory property in the declaration
|
|
17
15
|
nestProviderAstParser_1.nestProviderAstParser.findProvideProperty(node, "useFactory");
|
|
18
16
|
if (!isNestProvider) {
|
|
19
17
|
return false;
|
|
20
18
|
}
|
|
21
19
|
// count number of factory params
|
|
22
|
-
const factoryParameterCount = nestProviderAstParser_1.nestProviderAstParser.findProvideProperty(node, "useFactory")
|
|
23
|
-
?.value
|
|
20
|
+
const factoryParameterCount = (nestProviderAstParser_1.nestProviderAstParser.findProvideProperty(node, "useFactory")
|
|
21
|
+
?.value).params.length;
|
|
24
22
|
// Count number of injected params
|
|
25
23
|
const injectedParameter = nestProviderAstParser_1.nestProviderAstParser.findProvideProperty(node, "inject")?.value;
|
|
26
24
|
const injectedParameterCount = injectedParameter
|
|
@@ -45,7 +43,6 @@ const rule = (0, createRule_1.createRule)({
|
|
|
45
43
|
defaultOptions: [],
|
|
46
44
|
create(context) {
|
|
47
45
|
return {
|
|
48
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
49
46
|
VariableDeclarator(node) {
|
|
50
47
|
if ((0, exports.hasMismatchedInjected)(node)) {
|
|
51
48
|
context.report({
|
|
@@ -58,4 +55,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
58
55
|
},
|
|
59
56
|
});
|
|
60
57
|
exports.default = rule;
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvdmlkZXJJbmplY3RlZFNob3VsZE1hdGNoRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydWxlcy9wcm92aWRlckluamVjdGVkU2hvdWxkTWF0Y2hGYWN0b3J5L1Byb3ZpZGVySW5qZWN0ZWRTaG91bGRNYXRjaEZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdURBQWtEO0FBRWxELDBCQUEwQjtBQUMxQix5RkFBb0Y7QUFFN0UsTUFBTSxxQkFBcUIsR0FBRyxDQUNqQyxJQUFpQyxFQUMxQixFQUFFO0lBQ1Qsa0tBQWtLO0lBQ2xLLGdKQUFnSjtJQUNoSixNQUFNLGNBQWMsR0FFWixDQUNBLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYztRQUNsQixFQUFFLGNBQTBDO0lBQ3RELGtCQUFrQjtJQUVmLENBQUEsQ0FBQyxRQUNELENBQUMsSUFBSSxLQUFLLFVBQVU7UUFDckIsd0RBQXdEO1FBQ3hELDZDQUFxQixDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVsRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxNQUFNLHFCQUFxQixHQUFHLENBQzFCLDZDQUFxQixDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUM7UUFDekQsRUFBRSxLQUNULENBQUEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBRWhCLGtDQUFrQztJQUNsQyxNQUFNLGlCQUFpQixHQUFHLDZDQUFxQixDQUFDLG1CQUFtQixDQUMvRCxJQUFJLEVBQ0osUUFBUSxDQUNYLEVBQUUsS0FBNEMsQ0FBQztJQUVoRCxNQUFNLHNCQUFzQixHQUFHLGlCQUFpQjtRQUM1QyxDQUFDLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU07UUFDbkMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVSLHVCQUF1QjtJQUN2QixPQUFPLHNCQUFzQixLQUFLLHFCQUFxQixDQUFDO0FBQzVELENBQUMsQ0FBQztBQXZDVyxRQUFBLHFCQUFxQix5QkF1Q2hDO0FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBQSx1QkFBVSxFQUFvQjtJQUN2QyxJQUFJLEVBQUUsbURBQW1EO0lBQ3pELElBQUksRUFBRTtRQUNGLElBQUksRUFBRTtZQUNGLFdBQVcsRUFDUCxtR0FBbUc7U0FDMUc7UUFDRCxRQUFRLEVBQUU7WUFDTixXQUFXLEVBQUUsMEZBQTBGO1NBQzFHO1FBQ0QsTUFBTSxFQUFFLEVBQUU7UUFDVixJQUFJLEVBQUUsU0FBUztLQUNsQjtJQUNELGNBQWMsRUFBRSxFQUFFO0lBRWxCLE1BQU0sQ0FBQyxPQUFPO1FBQ1YsT0FBTztZQUNILGtCQUFrQixDQUFDLElBQWlDO2dCQUNoRCxJQUFJLElBQUEsNkJBQXFCLEVBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDWCxJQUFJLEVBQUUsSUFBSTt3QkFDVixTQUFTLEVBQUUsYUFBYTtxQkFDM0IsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxrQkFBZSxJQUFJLENBQUMifQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { TSESTree } from "@typescript-eslint/utils";
|
|
2
|
+
export declare const isValidationPipeNewExpression: (node: TSESTree.Node) => boolean;
|
|
3
|
+
export declare const checkObjectExpression: (os: TSESTree.ObjectExpression) => boolean;
|
|
4
|
+
export declare const shouldTriggerNewExpressionHasProperty: (node: TSESTree.Node) => boolean;
|
|
5
|
+
export declare const shouldTriggerForVariableDeclaratorExpression: (node: TSESTree.VariableDeclarator) => boolean;
|
|
6
|
+
declare const rule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldSpecifyForbidUnknownValues", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
7
|
+
export default rule;
|
|
@@ -6,7 +6,7 @@ const createRule_1 = require("../../utils/createRule");
|
|
|
6
6
|
const utils_2 = require("@typescript-eslint/utils");
|
|
7
7
|
const isValidationPipeNewExpression = (node) => {
|
|
8
8
|
const newExpression = node;
|
|
9
|
-
const callee = newExpression
|
|
9
|
+
const callee = newExpression.callee;
|
|
10
10
|
if (callee && callee.name === "ValidationPipe") {
|
|
11
11
|
return true;
|
|
12
12
|
}
|
|
@@ -18,16 +18,15 @@ const checkObjectExpression = (os) => {
|
|
|
18
18
|
return false;
|
|
19
19
|
}
|
|
20
20
|
// eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style
|
|
21
|
-
const forbidUnknownValuesProperty = os
|
|
22
|
-
|
|
21
|
+
const forbidUnknownValuesProperty = os.properties
|
|
22
|
+
.filter(utils_2.ASTUtils.isNodeOfType(utils_1.TSESTree.AST_NODE_TYPES.Property))
|
|
23
23
|
.find((p) => p.key.name === "forbidUnknownValues");
|
|
24
24
|
// property is not present. this is wrong.
|
|
25
25
|
if (os && !forbidUnknownValuesProperty) {
|
|
26
26
|
return true;
|
|
27
27
|
}
|
|
28
28
|
// property is explicitly false. this is wrong.
|
|
29
|
-
const isPropertyValueExplicitlyFalse =
|
|
30
|
-
"false";
|
|
29
|
+
const isPropertyValueExplicitlyFalse = forbidUnknownValuesProperty.value.raw === "false";
|
|
31
30
|
if (isPropertyValueExplicitlyFalse) {
|
|
32
31
|
return true;
|
|
33
32
|
}
|
|
@@ -44,7 +43,7 @@ const shouldTriggerNewExpressionHasProperty = (node) => {
|
|
|
44
43
|
// the default new ValidationPipe() seems to prevent the attack so we ignore calls with no parameters
|
|
45
44
|
// we also ignore parameters that are not explicit object expressions
|
|
46
45
|
// or if the properties are spread
|
|
47
|
-
if (newExpression.arguments
|
|
46
|
+
if (newExpression.arguments.length === 0 ||
|
|
48
47
|
newExpression.arguments[0].type !==
|
|
49
48
|
utils_1.TSESTree.AST_NODE_TYPES.ObjectExpression ||
|
|
50
49
|
newExpression.arguments[0].properties.some(utils_2.ASTUtils.isNodeOfType(utils_1.TSESTree.AST_NODE_TYPES.SpreadElement))) {
|
|
@@ -57,8 +56,8 @@ exports.shouldTriggerNewExpressionHasProperty = shouldTriggerNewExpressionHasPro
|
|
|
57
56
|
const shouldTriggerForVariableDeclaratorExpression = (node) => {
|
|
58
57
|
// if the developer hasn't annotated the object we can't continue to check these rules correctly (we don't know if anonymous objects need to have any props)
|
|
59
58
|
const variableDeclarator = node;
|
|
60
|
-
const asExpression = variableDeclarator
|
|
61
|
-
const typeAnnotation = asExpression
|
|
59
|
+
const asExpression = variableDeclarator.init;
|
|
60
|
+
const typeAnnotation = asExpression.typeAnnotation;
|
|
62
61
|
const typeName = typeAnnotation?.typeName;
|
|
63
62
|
if (typeName === undefined || typeName.name !== "ValidationPipeOptions") {
|
|
64
63
|
return false;
|
|
@@ -83,7 +82,6 @@ const rule = (0, createRule_1.createRule)({
|
|
|
83
82
|
defaultOptions: [],
|
|
84
83
|
create(context) {
|
|
85
84
|
return {
|
|
86
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
87
85
|
NewExpression(node) {
|
|
88
86
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
89
87
|
const result = (0, exports.shouldTriggerNewExpressionHasProperty)(node);
|
|
@@ -94,7 +92,6 @@ const rule = (0, createRule_1.createRule)({
|
|
|
94
92
|
});
|
|
95
93
|
}
|
|
96
94
|
},
|
|
97
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
98
95
|
VariableDeclarator(node) {
|
|
99
96
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
100
97
|
const result = (0, exports.shouldTriggerForVariableDeclaratorExpression)(node);
|
|
@@ -109,4 +106,4 @@ const rule = (0, createRule_1.createRule)({
|
|
|
109
106
|
},
|
|
110
107
|
});
|
|
111
108
|
exports.default = rule;
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdWxkU3BlY2lmeUZvcmJpZFVua25vd25WYWx1ZXNSdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL3Nob3VsZFNwZWNpZnlGb3JiaWRVbmtub3duVmFsdWVzL3Nob3VsZFNwZWNpZnlGb3JiaWRVbmtub3duVmFsdWVzUnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvREFBa0Q7QUFDbEQsdURBQWtEO0FBQ2xELG9EQUFrRDtBQUUzQyxNQUFNLDZCQUE2QixHQUFHLENBQUMsSUFBbUIsRUFBVyxFQUFFO0lBQzFFLE1BQU0sYUFBYSxHQUFHLElBQThCLENBQUM7SUFDckQsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQTZCLENBQUM7SUFDM0QsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUM7QUFQVyxRQUFBLDZCQUE2QixpQ0FPeEM7QUFDSyxNQUFNLHFCQUFxQixHQUFHLENBQ2pDLEVBQTZCLEVBQ3RCLEVBQUU7SUFDVCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDTixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0QsZ0ZBQWdGO0lBQ2hGLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDLFVBQVU7U0FDNUMsTUFBTSxDQUFDLGdCQUFRLENBQUMsWUFBWSxDQUFDLGdCQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQy9ELElBQUksQ0FDRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUUsQ0FBQyxDQUFDLEdBQTJCLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUNsRCxDQUFDO0lBQzNCLDBDQUEwQztJQUMxQyxJQUFJLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDckMsT0FB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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { TSESTree } from "@typescript-eslint/utils";
|
|
2
|
+
export type RuleOptions = [
|
|
3
|
+
{
|
|
4
|
+
locale?: string;
|
|
5
|
+
}
|
|
6
|
+
];
|
|
7
|
+
export type ValidModuleNodeTypes = TSESTree.Identifier | TSESTree.CallExpression;
|
|
8
|
+
export declare const isValidModuleMetaPropertyType: (node: TSESTree.Expression | TSESTree.SpreadElement | null) => node is ValidModuleNodeTypes;
|
|
9
|
+
export declare const getRelevantNodeName: (node: TSESTree.Node) => string;
|
|
10
|
+
declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<"moduleMetadataArraysAreSorted", RuleOptions, unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
11
|
+
export default _default;
|