@darraghor/eslint-plugin-nestjs-typed 7.0.0 → 7.0.2
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.
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import { TSESTree } from "@typescript-eslint/utils";
|
|
1
|
+
import { TSESTree, AST_NODE_TYPES } from "@typescript-eslint/utils";
|
|
2
2
|
import { createRule } from "../../utils/createRule.js";
|
|
3
3
|
import { ASTUtils } from "@typescript-eslint/utils";
|
|
4
4
|
export const isValidationPipeNewExpression = (node) => {
|
|
5
5
|
const newExpression = node;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return true;
|
|
6
|
+
if (newExpression.callee.type !== AST_NODE_TYPES.Identifier) {
|
|
7
|
+
return false;
|
|
9
8
|
}
|
|
10
|
-
return
|
|
9
|
+
return newExpression.callee.name === "ValidationPipe";
|
|
11
10
|
};
|
|
12
11
|
export const checkObjectExpression = (os) => {
|
|
13
12
|
if (!os) {
|
|
@@ -52,8 +51,8 @@ export const shouldTriggerForVariableDeclaratorExpression = (node) => {
|
|
|
52
51
|
const variableDeclarator = node;
|
|
53
52
|
const asExpression = variableDeclarator.init;
|
|
54
53
|
const typeAnnotation = asExpression?.typeAnnotation;
|
|
55
|
-
const typeName = typeAnnotation
|
|
56
|
-
if (typeName
|
|
54
|
+
const typeName = typeAnnotation?.typeName;
|
|
55
|
+
if (typeName?.name !== "ValidationPipeOptions") {
|
|
57
56
|
return false;
|
|
58
57
|
}
|
|
59
58
|
// otherwise check the object expression is what we want
|
|
@@ -99,4 +98,4 @@ const rule = createRule({
|
|
|
99
98
|
},
|
|
100
99
|
});
|
|
101
100
|
export default rule;
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdWxkU3BlY2lmeUZvcmJpZFVua25vd25WYWx1ZXNSdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bGVzL3Nob3VsZFNwZWNpZnlGb3JiaWRVbmtub3duVmFsdWVzL3Nob3VsZFNwZWNpZnlGb3JiaWRVbmtub3duVmFsdWVzUnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFbEQsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxJQUFtQixFQUFXLEVBQUU7SUFDMUUsTUFBTSxhQUFhLEdBQUcsSUFBOEIsQ0FBQztJQUNyRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMxRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0QsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQztBQUMxRCxDQUFDLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUNqQyxFQUE2QixFQUN0QixFQUFFO0lBQ1QsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ04sT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELGdGQUFnRjtJQUNoRixNQUFNLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyxVQUFVO1NBQzVDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0QsSUFBSSxDQUNELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFDLENBQUMsR0FBMkIsQ0FBQyxJQUFJ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
|
|
@@ -10,7 +10,15 @@ export declare const typedTokenHelpers: {
|
|
|
10
10
|
getConstrainedTypeAtLocation(checker: ts.TypeChecker, node: ts.Node): ts.Type;
|
|
11
11
|
nodeHasDecoratorsNamed(n: TSESTree.ClassDeclaration | TSESTree.PropertyDefinition | TSESTree.MethodDefinition, decoratorNames: string[]): boolean;
|
|
12
12
|
getDecoratorsNamed(n: TSESTree.ClassDeclaration | TSESTree.PropertyDefinition | TSESTree.MethodDefinition, decoratorNames: string[]): TSESTree.Decorator[];
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Parses code to AST without type information.
|
|
15
|
+
* This is used for scanning files to extract module metadata.
|
|
16
|
+
* We intentionally do NOT spread context.parserOptions here because
|
|
17
|
+
* that would include `project` or `projectService` settings which
|
|
18
|
+
* create a full TypeScript program for each file - extremely slow
|
|
19
|
+
* and unnecessary when we only need to parse decorators.
|
|
20
|
+
*/
|
|
21
|
+
parseStringToAst(code: string, path: string, _context: Readonly<TSESLint.RuleContext<never, never[]>>): TSESTree.Program;
|
|
14
22
|
isEnumType(type: ts.Type): boolean;
|
|
15
23
|
isOptionalPropertyValue(node: TSESTree.PropertyDefinition): boolean;
|
|
16
24
|
/**
|
|
@@ -69,13 +69,24 @@ export const typedTokenHelpers = {
|
|
|
69
69
|
});
|
|
70
70
|
return decorators || [];
|
|
71
71
|
},
|
|
72
|
-
|
|
72
|
+
/**
|
|
73
|
+
* Parses code to AST without type information.
|
|
74
|
+
* This is used for scanning files to extract module metadata.
|
|
75
|
+
* We intentionally do NOT spread context.parserOptions here because
|
|
76
|
+
* that would include `project` or `projectService` settings which
|
|
77
|
+
* create a full TypeScript program for each file - extremely slow
|
|
78
|
+
* and unnecessary when we only need to parse decorators.
|
|
79
|
+
*/
|
|
80
|
+
parseStringToAst(code, path,
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
82
|
+
_context) {
|
|
73
83
|
return parse(code, {
|
|
74
84
|
filePath: path,
|
|
75
85
|
range: true,
|
|
76
86
|
tokens: true,
|
|
77
87
|
loc: true,
|
|
78
|
-
|
|
88
|
+
// Note: We don't spread context.parserOptions here to avoid
|
|
89
|
+
// creating TypeScript programs for each scanned file
|
|
79
90
|
});
|
|
80
91
|
},
|
|
81
92
|
isEnumType(type) {
|
|
@@ -199,4 +210,4 @@ export const typedTokenHelpers = {
|
|
|
199
210
|
return decorator.expression.callee.name;
|
|
200
211
|
},
|
|
201
212
|
};
|
|
202
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRUb2tlbkhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdHlwZWRUb2tlbkhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBWSxRQUFRLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RSxPQUFPLEVBQUMsS0FBSyxFQUFpQixNQUFNLDJCQUEyQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1QixPQUFPLEtBQUssVUFBVSxNQUFNLGNBQWMsQ0FBQztBQUUzQyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUM7QUFFM0IsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDN0IsZ0RBQWdELEVBQUU7UUFDOUMsU0FBUztRQUNULGNBQWM7UUFDZCxjQUFjO1FBQ2QsZUFBZTtRQUNmLGtCQUFrQjtRQUNsQixlQUFlO1FBQ2YsYUFBYTtLQUNoQjtJQUNELGtDQUFrQyxDQUM5QixJQUFtQixFQUNuQixhQUE2QixFQUM3QixPQUF1QjtRQUV2QixJQUNLLElBQW9DLENBQUMsY0FBYyxFQUFFLGNBQWM7YUFDL0QsSUFBSSxLQUFLLFFBQVEsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUNuRCxDQUFDO1lBQ0MsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRSxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFB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
|