@darraghor/eslint-plugin-nestjs-typed 6.11.0 → 6.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/configs/recommended.js +2 -1
- package/dist/rules/apiPropertyShouldHaveApiExtraModels/apiPropertyShouldHaveApiExtraModels.d.ts +2 -0
- package/dist/rules/apiPropertyShouldHaveApiExtraModels/apiPropertyShouldHaveApiExtraModels.js +129 -0
- package/dist/rules/index.d.ts +1 -0
- package/dist/rules/index.js +3 -1
- package/package.json +1 -1
|
@@ -23,9 +23,10 @@ export const rules = {
|
|
|
23
23
|
"@darraghor/nestjs-typed/sort-module-metadata-arrays": "off",
|
|
24
24
|
"@darraghor/nestjs-typed/no-duplicate-decorators": "error",
|
|
25
25
|
"@darraghor/nestjs-typed/use-injectable-provided-token": "error",
|
|
26
|
+
"@darraghor/nestjs-typed/api-property-should-have-api-extra-models": "error",
|
|
26
27
|
};
|
|
27
28
|
export default {
|
|
28
29
|
extends: ["./configs/base"],
|
|
29
30
|
rules,
|
|
30
31
|
};
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb21tZW5kZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlncy9yZWNvbW1lbmRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQWdDO0lBQzlDLDJFQUEyRSxFQUN2RSxPQUFPO0lBQ1gsdURBQXVELEVBQUU7UUFDckQsT0FBTztRQUNQO1lBQ0ksR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ3BCLGVBQWUsRUFBRSxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO1NBQ3hEO0tBQ0o7SUFDRCxtRUFBbUUsRUFDL0QsT0FBTztJQUNYLGdFQUFnRSxFQUFFLE9BQU87SUFDekUsNERBQTRELEVBQUUsT0FBTztJQUNyRSwwREFBMEQsRUFBRSxPQUFPO0lBQ25FLHVFQUF1RSxFQUNuRSxPQUFPO0lBQ1gsOERBQThELEVBQUUsT0FBTztJQUN2RSxrRUFBa0UsRUFBRSxPQUFPO0lBQzNFLCtFQUErRSxFQUMzRSxPQUFPO0lBQ1gsa0VBQWtFLEVBQUUsT0FBTztJQUMzRSx3REFBd0QsRUFBRSxPQUFPO0lBQ2pFLDhEQUE4RCxFQUFFLE9BQU87SUFDdkUsdURBQXVELEVBQUUsS0FBSztJQUM5RCxpRUFBaUUsRUFBRSxLQUFLO0lBQ3hFLHFEQUFxRCxFQUFFLEtBQUs7SUFDNUQsaURBQWlELEVBQUUsT0FBTztJQUMxRCx1REFBdUQsRUFBRSxPQUFPO0lBQ2hFLG1FQUFtRSxFQUMvRCxPQUFPO0NBQ2QsQ0FBQztBQUNGLGVBQWU7SUFDWCxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMzQixLQUFLO0NBQ1IsQ0FBQyJ9
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { AST_NODE_TYPES } from "@typescript-eslint/utils";
|
|
2
|
+
import { createRule } from "../../utils/createRule.js";
|
|
3
|
+
import { typedTokenHelpers } from "../../utils/typedTokenHelpers.js";
|
|
4
|
+
/**
|
|
5
|
+
* Extracts model names from getSchemaPath() calls within oneOf/allOf/anyOf arrays
|
|
6
|
+
*/
|
|
7
|
+
const extractModelsFromSchemaReferences = (arrayExpression) => {
|
|
8
|
+
const models = [];
|
|
9
|
+
for (const element of arrayExpression.elements) {
|
|
10
|
+
if (element?.type === AST_NODE_TYPES.ObjectExpression) {
|
|
11
|
+
// Look for { $ref: getSchemaPath(ModelName) }
|
|
12
|
+
const referenceProperty = element.properties.find((property) => property.type === AST_NODE_TYPES.Property &&
|
|
13
|
+
property.key.type === AST_NODE_TYPES.Identifier &&
|
|
14
|
+
property.key.name === "$ref");
|
|
15
|
+
if (referenceProperty &&
|
|
16
|
+
referenceProperty.value.type === AST_NODE_TYPES.CallExpression) {
|
|
17
|
+
const callExpression = referenceProperty.value;
|
|
18
|
+
// Check if it's a getSchemaPath call
|
|
19
|
+
if (callExpression.callee.type === AST_NODE_TYPES.Identifier &&
|
|
20
|
+
callExpression.callee.name === "getSchemaPath" &&
|
|
21
|
+
callExpression.arguments.length > 0) {
|
|
22
|
+
const firstArgument = callExpression.arguments[0];
|
|
23
|
+
if (firstArgument.type === AST_NODE_TYPES.Identifier) {
|
|
24
|
+
models.push({
|
|
25
|
+
modelName: firstArgument.name,
|
|
26
|
+
node: firstArgument,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return models;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Checks if a property definition uses oneOf/allOf/anyOf with model references
|
|
37
|
+
*/
|
|
38
|
+
const getModelsFromApiPropertyDecorator = (node) => {
|
|
39
|
+
const decorators = typedTokenHelpers.getDecoratorsNamed(node, [
|
|
40
|
+
"ApiProperty",
|
|
41
|
+
"ApiPropertyOptional",
|
|
42
|
+
]);
|
|
43
|
+
if (decorators.length === 0) {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
if (decorators[0].expression.type !== AST_NODE_TYPES.CallExpression) {
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
const firstArgument = decorators[0].expression.arguments[0];
|
|
50
|
+
// Only process object expressions
|
|
51
|
+
if (!firstArgument ||
|
|
52
|
+
firstArgument.type !== AST_NODE_TYPES.ObjectExpression) {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
const models = [];
|
|
56
|
+
// Check for oneOf, allOf, anyOf properties
|
|
57
|
+
for (const property of firstArgument.properties) {
|
|
58
|
+
if (property.type === AST_NODE_TYPES.Property &&
|
|
59
|
+
property.key.type === AST_NODE_TYPES.Identifier &&
|
|
60
|
+
["oneOf", "allOf", "anyOf"].includes(property.key.name)) {
|
|
61
|
+
// The value should be an array expression
|
|
62
|
+
if (property.value.type === AST_NODE_TYPES.ArrayExpression) {
|
|
63
|
+
const extractedModels = extractModelsFromSchemaReferences(property.value);
|
|
64
|
+
models.push(...extractedModels);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return models;
|
|
69
|
+
};
|
|
70
|
+
const rule = createRule({
|
|
71
|
+
name: "api-property-should-have-api-extra-models",
|
|
72
|
+
meta: {
|
|
73
|
+
docs: {
|
|
74
|
+
description: "Ensures models referenced in oneOf, allOf, or anyOf within ApiProperty decorators are declared in ApiExtraModels",
|
|
75
|
+
},
|
|
76
|
+
messages: {
|
|
77
|
+
shouldUseApiExtraModels: `Model '{{modelName}}' is referenced in {{schemaType}} but may not be included in @ApiExtraModels(). Ensure it is added to @ApiExtraModels() on a controller or included directly in an endpoint response type.`,
|
|
78
|
+
},
|
|
79
|
+
schema: [],
|
|
80
|
+
hasSuggestions: false,
|
|
81
|
+
type: "suggestion",
|
|
82
|
+
},
|
|
83
|
+
defaultOptions: [],
|
|
84
|
+
create(context) {
|
|
85
|
+
return {
|
|
86
|
+
PropertyDefinition(node) {
|
|
87
|
+
const models = getModelsFromApiPropertyDecorator(node);
|
|
88
|
+
if (models.length > 0) {
|
|
89
|
+
// Determine which schema type is being used
|
|
90
|
+
const decorators = typedTokenHelpers.getDecoratorsNamed(node, ["ApiProperty", "ApiPropertyOptional"]);
|
|
91
|
+
let schemaType = "oneOf/allOf/anyOf";
|
|
92
|
+
if (decorators.length > 0 &&
|
|
93
|
+
decorators[0].expression.type ===
|
|
94
|
+
AST_NODE_TYPES.CallExpression) {
|
|
95
|
+
const firstArgument = decorators[0].expression.arguments[0];
|
|
96
|
+
if (firstArgument &&
|
|
97
|
+
firstArgument.type ===
|
|
98
|
+
AST_NODE_TYPES.ObjectExpression) {
|
|
99
|
+
for (const property of firstArgument.properties) {
|
|
100
|
+
if (property.type === AST_NODE_TYPES.Property &&
|
|
101
|
+
property.key.type ===
|
|
102
|
+
AST_NODE_TYPES.Identifier) {
|
|
103
|
+
const key = property.key.name;
|
|
104
|
+
if (["oneOf", "allOf", "anyOf"].includes(key)) {
|
|
105
|
+
schemaType = key;
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Report each model
|
|
113
|
+
for (const model of models) {
|
|
114
|
+
context.report({
|
|
115
|
+
node: model.node,
|
|
116
|
+
messageId: "shouldUseApiExtraModels",
|
|
117
|
+
data: {
|
|
118
|
+
modelName: model.modelName,
|
|
119
|
+
schemaType: schemaType,
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
export default rule;
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUHJvcGVydHlTaG91bGRIYXZlQXBpRXh0cmFNb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVsZXMvYXBpUHJvcGVydHlTaG91bGRIYXZlQXBpRXh0cmFNb2RlbHMvYXBpUHJvcGVydHlTaG91bGRIYXZlQXBpRXh0cmFNb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBVyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQU9uRTs7R0FFRztBQUNILE1BQU0saUNBQWlDLEdBQUcsQ0FDdEMsZUFBeUMsRUFDeEIsRUFBRTtJQUNuQixNQUFNLE1BQU0sR0FBc0IsRUFBRSxDQUFDO0lBRXJDLEtBQUssTUFBTSxPQUFPLElBQUksZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdDLElBQUksT0FBTyxFQUFFLElBQUksS0FBSyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNwRCw4Q0FBOEM7WUFDOUMsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDN0MsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUNULFFBQVEsQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLFFBQVE7Z0JBQ3pDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxVQUFVO2dCQUMvQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxNQUFNLENBQ0YsQ0FBQztZQUVuQyxJQUNJLGlCQUFpQjtnQkFDakIsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsY0FBYyxFQUNoRSxDQUFDO2dCQUNDLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQztnQkFDL0Ms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
|
package/dist/rules/index.d.ts
CHANGED
|
@@ -26,5 +26,6 @@ declare const allRules: {
|
|
|
26
26
|
caseFormat: "kebab-case" | "snake_case" | "camelCase";
|
|
27
27
|
}], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
28
28
|
"use-injectable-provided-token": import("@typescript-eslint/utils/ts-eslint").RuleModule<"useInjectableProvidedToken", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
29
|
+
"api-property-should-have-api-extra-models": import("@typescript-eslint/utils/ts-eslint").RuleModule<"shouldUseApiExtraModels", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
29
30
|
};
|
|
30
31
|
export default allRules;
|
package/dist/rules/index.js
CHANGED
|
@@ -17,6 +17,7 @@ import sortModuleMetadataArrays from "./sortModuleMetadataArrays/sortModuleMetad
|
|
|
17
17
|
import noDuplicateDecorators from "./noDuplicateDecorators/noDuplicateDecorators.js";
|
|
18
18
|
import useCorrectEndpointNamingConvention from "./useCorrectEndpointNamingConvention/useCorrectEndpointNamingConvention.js";
|
|
19
19
|
import useInjectableProvidedToken from "./useInjectableProvidedToken/useInjectableProvidedToken.js";
|
|
20
|
+
import apiPropertyShouldHaveApiExtraModels from "./apiPropertyShouldHaveApiExtraModels/apiPropertyShouldHaveApiExtraModels.js";
|
|
20
21
|
const allRules = {
|
|
21
22
|
"all-properties-have-explicit-defined": allPropertiesHaveExplicitDefined,
|
|
22
23
|
"api-property-matches-property-optionality": apiPropertyMatchesPropertyOptionality,
|
|
@@ -37,6 +38,7 @@ const allRules = {
|
|
|
37
38
|
"sort-module-metadata-arrays": sortModuleMetadataArrays,
|
|
38
39
|
"use-correct-endpoint-naming-convention": useCorrectEndpointNamingConvention,
|
|
39
40
|
"use-injectable-provided-token": useInjectableProvidedToken,
|
|
41
|
+
"api-property-should-have-api-extra-models": apiPropertyShouldHaveApiExtraModels,
|
|
40
42
|
};
|
|
41
43
|
export default allRules;
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTywwQkFBMEIsTUFBTSw2REFBNkQsQ0FBQztBQUNyRyxPQUFPLDRDQUE0QyxNQUFNLDRFQUE0RSxDQUFDO0FBQ3RJLE9BQU8scUNBQXFDLE1BQU0sa0ZBQWtGLENBQUM7QUFDckksT0FBTyw2QkFBNkIsTUFBTSxrRUFBa0UsQ0FBQztBQUM3RyxPQUFPLGtDQUFrQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzVILE9BQU8sNEJBQTRCLE1BQU0sZ0VBQWdFLENBQUM7QUFDMUcsT0FBTyx1Q0FBdUMsTUFBTSxzRkFBc0YsQ0FBQztBQUMzSSxPQUFPLGdDQUFnQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzFILE9BQU8sdUNBQXVDLE1BQU0sOEVBQThFLENBQUM7QUFDbkksT0FBTyxtQ0FBbUMsTUFBTSxpRkFBaUYsQ0FBQztBQUNsSSxPQUFPLGtDQUFrQyxNQUFNLDRFQUE0RSxDQUFDO0FBQzVILE9BQU8sMkJBQTJCLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxnQ0FBZ0MsTUFBTSx3RUFBd0UsQ0FBQztBQUN0SCxPQUFPLHlCQUF5QixNQUFNLDBEQUEwRCxDQUFDO0FBQ2pHLE9BQU8sbUNBQW1DLE1BQU0sOEVBQThFLENBQUM7QUFDL0gsT0FBTyx3QkFBd0IsTUFBTSx3REFBd0QsQ0FBQztBQUM5RixPQUFPLHFCQUFxQixNQUFNLGtEQUFrRCxDQUFDO0FBQ3JGLE9BQU8sa0NBQWtDLE1BQU0sNEVBQTRFLENBQUM7QUFDNUgsT0FBTywwQkFBMEIsTUFBTSw0REFBNEQsQ0FBQztBQUNwRyxPQUFPLG1DQUFtQyxNQUFNLDhFQUE4RSxDQUFDO0FBQy9ILE1BQU0sUUFBUSxHQUFHO0lBQ2Isc0NBQXNDLEVBQUUsZ0NBQWdDO0lBQ3hFLDJDQUEyQyxFQUN2QyxxQ0FBcUM7SUFDekMsK0JBQStCLEVBQUUsMEJBQTBCO0lBQzNELHlCQUF5QixFQUFFLHFCQUFxQjtJQUNoRCxtREFBbUQsRUFDL0MsNENBQTRDO0lBQ2hELG9DQUFvQyxFQUFFLDZCQUE2QjtJQUNuRSx3Q0FBd0MsRUFDcEMsa0NBQWtDO0lBQ3RDLHlDQUF5QyxFQUNyQyxtQ0FBbUM7SUFDdkMsa0NBQWtDLEVBQUUsNEJBQTRCO0lBQ2hFLCtDQUErQyxFQUMzQyx1Q0FBdUM7SUFDM0Msc0NBQXNDLEVBQUUsZ0NBQWdDO0lBQ3hFLDBDQUEwQyxFQUN0Qyx1Q0FBdUM7SUFDM0MsdURBQXVELEVBQ25ELG1DQUFtQztJQUN2QywwQ0FBMEMsRUFDdEMsa0NBQWtDO0lBQ3RDLGdDQUFnQyxFQUFFLDJCQUEyQjtJQUM3RCwrQkFBK0IsRUFBRSx5QkFBeUI7SUFDMUQsNkJBQTZCLEVBQUUsd0JBQXdCO0lBQ3ZELHdDQUF3QyxFQUNwQyxrQ0FBa0M7SUFDdEMsK0JBQStCLEVBQUUsMEJBQTBCO0lBQzNELDJDQUEyQyxFQUN2QyxtQ0FBbUM7Q0FDMUMsQ0FBQztBQUVGLGVBQWUsUUFBUSxDQUFDIn0=
|