@comet/api-generator 8.15.0 → 8.16.0-canary-20260219095654
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.
|
@@ -16,6 +16,8 @@ export declare function buildOptions(metadata: EntityMetadata<any>, generatorOpt
|
|
|
16
16
|
skipScopeCheck: boolean;
|
|
17
17
|
argsClassName: string;
|
|
18
18
|
argsFileName: string;
|
|
19
|
+
hasPaging: boolean;
|
|
20
|
+
hasArgsClass: boolean;
|
|
19
21
|
blockProps: import("@mikro-orm/core").EntityProperty<any, any>[];
|
|
20
22
|
dedicatedResolverArgProps: import("@mikro-orm/core").EntityProperty<any, any>[];
|
|
21
23
|
};
|
|
@@ -113,6 +113,8 @@ function buildOptions(metadata, generatorOptions) {
|
|
|
113
113
|
const skipScopeCheck = !scopeProp && !scopedEntity;
|
|
114
114
|
const argsClassName = `${classNameSingular != classNamePlural ? classNamePlural : `${classNamePlural}List`}Args`;
|
|
115
115
|
const argsFileName = `${fileNameSingular != fileNamePlural ? fileNamePlural : `${fileNameSingular}-list`}.args`;
|
|
116
|
+
const hasPaging = generatorOptions.paging !== false;
|
|
117
|
+
const hasArgsClass = hasPaging || !!scopeProp || dedicatedResolverArgProps.length > 0;
|
|
116
118
|
const blockProps = metadata.props.filter((prop) => {
|
|
117
119
|
return (0, cms_api_1.hasCrudFieldFeature)(metadata.class, prop.name, "input") && prop.type === "RootBlockType";
|
|
118
120
|
});
|
|
@@ -131,6 +133,8 @@ function buildOptions(metadata, generatorOptions) {
|
|
|
131
133
|
skipScopeCheck,
|
|
132
134
|
argsClassName,
|
|
133
135
|
argsFileName,
|
|
136
|
+
hasPaging,
|
|
137
|
+
hasArgsClass,
|
|
134
138
|
blockProps,
|
|
135
139
|
dedicatedResolverArgProps,
|
|
136
140
|
};
|
|
@@ -274,7 +274,7 @@ function generatePaginatedDto({ generatorOptions, metadata }) {
|
|
|
274
274
|
function generateArgsDto({ generatorOptions, metadata }) {
|
|
275
275
|
var _a;
|
|
276
276
|
const { classNameSingular, fileNameSingular } = (0, build_name_variants_1.buildNameVariants)(metadata);
|
|
277
|
-
const { scopeProp, argsClassName, hasSearchArg, hasSortArg, hasFilterArg, dedicatedResolverArgProps, hasPositionProp, crudSortProps } = (0, build_options_1.buildOptions)(metadata, generatorOptions);
|
|
277
|
+
const { scopeProp, argsClassName, hasSearchArg, hasSortArg, hasFilterArg, dedicatedResolverArgProps, hasPositionProp, crudSortProps, hasPaging } = (0, build_options_1.buildOptions)(metadata, generatorOptions);
|
|
278
278
|
const imports = [];
|
|
279
279
|
if (scopeProp && scopeProp.targetMeta) {
|
|
280
280
|
imports.push(generateEntityImport(scopeProp.targetMeta, `${generatorOptions.targetDirectory}/dto`));
|
|
@@ -291,14 +291,14 @@ function generateArgsDto({ generatorOptions, metadata }) {
|
|
|
291
291
|
const argsOut = `import { ArgsType, Field, IntersectionType, registerEnumType, ID } from "@nestjs/graphql";
|
|
292
292
|
import { Type } from "class-transformer";
|
|
293
293
|
import { IsOptional, IsString, ValidateNested, IsEnum, IsUUID } from "class-validator";
|
|
294
|
-
import { OffsetBasedPaginationArgs, SortDirection } from "@comet/cms-api"
|
|
295
|
-
import { ${classNameSingular}Filter } from "./${fileNameSingular}.filter"
|
|
296
|
-
import { ${classNameSingular}Sort, ${classNameSingular}SortField } from "./${fileNameSingular}.sort"
|
|
294
|
+
${hasPaging ? `import { OffsetBasedPaginationArgs, SortDirection } from "@comet/cms-api";` : ``}
|
|
295
|
+
${hasPaging && hasFilterArg ? `import { ${classNameSingular}Filter } from "./${fileNameSingular}.filter";` : ``}
|
|
296
|
+
${hasPaging && hasSortArg ? `import { ${classNameSingular}Sort, ${classNameSingular}SortField } from "./${fileNameSingular}.sort";` : ``}
|
|
297
297
|
|
|
298
298
|
${(0, generate_imports_code_1.generateImportsCode)(imports)}
|
|
299
299
|
|
|
300
300
|
@ArgsType()
|
|
301
|
-
export class ${argsClassName} extends OffsetBasedPaginationArgs {
|
|
301
|
+
export class ${argsClassName}${hasPaging ? ` extends OffsetBasedPaginationArgs` : ""} {
|
|
302
302
|
${scopeProp
|
|
303
303
|
? `
|
|
304
304
|
@Field(() => ${scopeProp.type})
|
|
@@ -324,7 +324,7 @@ function generateArgsDto({ generatorOptions, metadata }) {
|
|
|
324
324
|
})
|
|
325
325
|
.join("")}
|
|
326
326
|
|
|
327
|
-
${hasSearchArg
|
|
327
|
+
${hasPaging && hasSearchArg
|
|
328
328
|
? `
|
|
329
329
|
@Field({ nullable: true })
|
|
330
330
|
@IsOptional()
|
|
@@ -333,7 +333,7 @@ function generateArgsDto({ generatorOptions, metadata }) {
|
|
|
333
333
|
`
|
|
334
334
|
: ""}
|
|
335
335
|
|
|
336
|
-
${hasFilterArg
|
|
336
|
+
${hasPaging && hasFilterArg
|
|
337
337
|
? `
|
|
338
338
|
@Field(() => ${classNameSingular}Filter, { nullable: true })
|
|
339
339
|
@ValidateNested()
|
|
@@ -343,7 +343,7 @@ function generateArgsDto({ generatorOptions, metadata }) {
|
|
|
343
343
|
`
|
|
344
344
|
: ""}
|
|
345
345
|
|
|
346
|
-
${hasSortArg
|
|
346
|
+
${hasPaging && hasSortArg
|
|
347
347
|
? `
|
|
348
348
|
@Field(() => [${classNameSingular}Sort], { ${defaultSortField === null ? "nullable: true" : `defaultValue: [{ field: ${classNameSingular}SortField.${defaultSortField}, direction: SortDirection.ASC }]`} })
|
|
349
349
|
@ValidateNested({ each: true })
|
|
@@ -729,7 +729,7 @@ function generateRelationsFieldResolver({ generatorOptions, metadata }) {
|
|
|
729
729
|
function generateResolver({ generatorOptions, metadata }) {
|
|
730
730
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
731
731
|
const { classNameSingular, fileNameSingular, instanceNameSingular, classNamePlural, fileNamePlural, instanceNamePlural } = (0, build_name_variants_1.buildNameVariants)(metadata);
|
|
732
|
-
const { scopeProp, skipScopeCheck, argsClassName, argsFileName, hasSlugProp, hasSearchArg, hasSortArg, hasFilterArg, hasPositionProp, positionGroupProps, hasDeletedAtProp, dedicatedResolverArgProps, } = (0, build_options_1.buildOptions)(metadata, generatorOptions);
|
|
732
|
+
const { scopeProp, skipScopeCheck, argsClassName, argsFileName, hasSlugProp, hasSearchArg, hasSortArg, hasFilterArg, hasPositionProp, positionGroupProps, hasDeletedAtProp, dedicatedResolverArgProps, hasPaging, hasArgsClass, } = (0, build_options_1.buildOptions)(metadata, generatorOptions);
|
|
733
733
|
const relationManyToOneProps = metadata.props.filter((prop) => prop.kind === "m:1");
|
|
734
734
|
const relationOneToManyProps = metadata.props.filter((prop) => prop.kind === "1:m");
|
|
735
735
|
const relationManyToManyProps = metadata.props.filter((prop) => prop.kind === "m:n");
|
|
@@ -790,8 +790,8 @@ function generateResolver({ generatorOptions, metadata }) {
|
|
|
790
790
|
|
|
791
791
|
${hasPositionProp ? `import { ${classNamePlural}Service } from "./${fileNamePlural}.service";` : ``}
|
|
792
792
|
import { ${classNameSingular}Input, ${classNameSingular}UpdateInput } from "./dto/${fileNameSingular}.input";
|
|
793
|
-
import { Paginated${classNamePlural} } from "./dto/paginated-${fileNamePlural}"
|
|
794
|
-
import { ${argsClassName} } from "./dto/${argsFileName}"
|
|
793
|
+
${hasPaging ? `import { Paginated${classNamePlural} } from "./dto/paginated-${fileNamePlural}";` : ""}
|
|
794
|
+
${hasArgsClass ? `import { ${argsClassName} } from "./dto/${argsFileName}";` : ""}
|
|
795
795
|
${(0, generate_imports_code_1.generateImportsCode)(imports)}
|
|
796
796
|
|
|
797
797
|
${payloadObjectTypes.code}
|
|
@@ -832,7 +832,7 @@ function generateResolver({ generatorOptions, metadata }) {
|
|
|
832
832
|
|
|
833
833
|
${generatorOptions.list
|
|
834
834
|
? `
|
|
835
|
-
@Query(() => Paginated${classNamePlural})
|
|
835
|
+
@Query(() => ${hasPaging ? `Paginated${classNamePlural}` : `[${metadata.className}]`})
|
|
836
836
|
${dedicatedResolverArgProps
|
|
837
837
|
.map((dedicatedResolverArgProp) => {
|
|
838
838
|
var _a;
|
|
@@ -840,16 +840,18 @@ function generateResolver({ generatorOptions, metadata }) {
|
|
|
840
840
|
})
|
|
841
841
|
.join("")}
|
|
842
842
|
async ${instanceNameSingular != instanceNamePlural ? instanceNamePlural : `${instanceNamePlural}List`}(
|
|
843
|
-
|
|
844
|
-
acc
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
843
|
+
${hasArgsClass
|
|
844
|
+
? `@Args() {${Object.entries(Object.assign(Object.assign({ scope: !!scopeProp }, dedicatedResolverArgProps.reduce((acc, dedicatedResolverArgProp) => {
|
|
845
|
+
acc[dedicatedResolverArgProp.name] = true;
|
|
846
|
+
return acc;
|
|
847
|
+
}, {})), { search: hasPaging && !!hasSearchArg, filter: hasPaging && !!hasFilterArg, sort: hasPaging && !!hasSortArg, offset: hasPaging, limit: hasPaging }))
|
|
848
|
+
.filter(([key, use]) => use)
|
|
849
|
+
.map(([key]) => key)
|
|
850
|
+
.join(", ")}}: ${argsClassName}`
|
|
851
|
+
: ""}
|
|
852
|
+
${hasOutputRelations ? `${hasArgsClass ? `,` : ""} @Info() info: GraphQLResolveInfo` : ""}
|
|
853
|
+
): Promise<${hasPaging ? `Paginated${classNamePlural}` : `${metadata.className}[]`}> {
|
|
854
|
+
const where${hasPaging && (hasSearchArg || hasFilterArg)
|
|
853
855
|
? ` = gqlArgsToMikroOrmQuery({ ${hasSearchArg ? `search, ` : ""}${hasFilterArg ? `filter, ` : ""} }, this.entityManager.getMetadata(${metadata.className}));`
|
|
854
856
|
: `: ObjectQuery<${metadata.className}> = {}`}
|
|
855
857
|
${scopeProp ? `where.scope = scope;` : ""}
|
|
@@ -860,7 +862,7 @@ function generateResolver({ generatorOptions, metadata }) {
|
|
|
860
862
|
.join("\n")}
|
|
861
863
|
|
|
862
864
|
${hasOutputRelations
|
|
863
|
-
? `const fields = extractGraphqlFields(info
|
|
865
|
+
? `const fields = extractGraphqlFields(info${hasPaging ? `, { root: "nodes" }` : ""});
|
|
864
866
|
const populate: string[] = [];`
|
|
865
867
|
: ""}
|
|
866
868
|
${[...outputRelationManyToOneProps, ...outputRelationOneToManyProps, ...outputRelationManyToManyProps, ...outputRelationOneToOneProps]
|
|
@@ -870,16 +872,19 @@ function generateResolver({ generatorOptions, metadata }) {
|
|
|
870
872
|
.join("\n")}
|
|
871
873
|
|
|
872
874
|
${hasOutputRelations ? `// eslint-disable-next-line @typescript-eslint/no-explicit-any` : ""}
|
|
873
|
-
const options: FindOptions<${metadata.className}${hasOutputRelations ? `, any` : ""}> = { offset, limit${hasOutputRelations ? `, populate` : ""}};
|
|
875
|
+
const options: FindOptions<${metadata.className}${hasOutputRelations ? `, any` : ""}> = { ${hasPaging ? `offset, limit${hasOutputRelations ? `, populate` : ""}` : `${hasOutputRelations ? `populate` : ""}`}};
|
|
874
876
|
|
|
875
|
-
${hasSortArg
|
|
877
|
+
${hasPaging && hasSortArg
|
|
876
878
|
? `if (sort) {
|
|
877
879
|
options.orderBy = gqlSortToMikroOrmOrderBy(sort);
|
|
878
880
|
}`
|
|
879
881
|
: ""}
|
|
880
882
|
|
|
881
|
-
|
|
882
|
-
|
|
883
|
+
${hasPaging
|
|
884
|
+
? `const [entities, totalCount] = await this.entityManager.findAndCount(${metadata.className}, where, options);
|
|
885
|
+
return new Paginated${classNamePlural}(entities, totalCount);`
|
|
886
|
+
: `const entities = await this.entityManager.find(${metadata.className}, where, options);
|
|
887
|
+
return entities;`}
|
|
883
888
|
}
|
|
884
889
|
`
|
|
885
890
|
: ""}
|
|
@@ -1034,33 +1039,37 @@ function generateCrud(generatorOptionsParam, metadata) {
|
|
|
1034
1039
|
}
|
|
1035
1040
|
const generatedFiles = [];
|
|
1036
1041
|
const { fileNameSingular, fileNamePlural } = (0, build_name_variants_1.buildNameVariants)(metadata);
|
|
1037
|
-
const { hasFilterArg, hasSortArg, argsFileName, hasPositionProp } = (0, build_options_1.buildOptions)(metadata, generatorOptions);
|
|
1042
|
+
const { hasFilterArg, hasSortArg, argsFileName, hasPositionProp, hasPaging, hasArgsClass } = (0, build_options_1.buildOptions)(metadata, generatorOptions);
|
|
1038
1043
|
function generateCrudResolver() {
|
|
1039
1044
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1040
|
-
if (hasFilterArg) {
|
|
1045
|
+
if (hasPaging && hasFilterArg) {
|
|
1041
1046
|
generatedFiles.push({
|
|
1042
1047
|
name: `dto/${fileNameSingular}.filter.ts`,
|
|
1043
1048
|
content: generateFilterDto({ generatorOptions, metadata }),
|
|
1044
1049
|
type: "filter",
|
|
1045
1050
|
});
|
|
1046
1051
|
}
|
|
1047
|
-
if (hasSortArg) {
|
|
1052
|
+
if (hasPaging && hasSortArg) {
|
|
1048
1053
|
generatedFiles.push({
|
|
1049
1054
|
name: `dto/${fileNameSingular}.sort.ts`,
|
|
1050
1055
|
content: generateSortDto({ generatorOptions, metadata }),
|
|
1051
1056
|
type: "sort",
|
|
1052
1057
|
});
|
|
1053
1058
|
}
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1059
|
+
if (hasPaging) {
|
|
1060
|
+
generatedFiles.push({
|
|
1061
|
+
name: `dto/paginated-${fileNamePlural}.ts`,
|
|
1062
|
+
content: generatePaginatedDto({ generatorOptions, metadata }),
|
|
1063
|
+
type: "sort",
|
|
1064
|
+
});
|
|
1065
|
+
}
|
|
1066
|
+
if (hasArgsClass) {
|
|
1067
|
+
generatedFiles.push({
|
|
1068
|
+
name: `dto/${argsFileName}.ts`,
|
|
1069
|
+
content: generateArgsDto({ generatorOptions, metadata }),
|
|
1070
|
+
type: "args",
|
|
1071
|
+
});
|
|
1072
|
+
}
|
|
1064
1073
|
if (hasPositionProp) {
|
|
1065
1074
|
generatedFiles.push({
|
|
1066
1075
|
name: `${fileNamePlural}.service.ts`,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@comet/api-generator",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.16.0-canary-20260219095654",
|
|
4
4
|
"description": "Comet API Generator CLI tool",
|
|
5
5
|
"repository": {
|
|
6
6
|
"directory": "packages/api/api-generator",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"ts-morph": "^25.0.1",
|
|
26
26
|
"ts-node": "^10.9.2",
|
|
27
27
|
"typescript": "^5.9.3",
|
|
28
|
-
"@comet/cms-api": "8.
|
|
28
|
+
"@comet/cms-api": "8.16.0-canary-20260219095654"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@mikro-orm/cli": "^6.4.16",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"rimraf": "^6.1.2",
|
|
45
45
|
"ts-jest": "^29.4.6",
|
|
46
46
|
"uuid": "^11.1.0",
|
|
47
|
-
"@comet/eslint-config": "8.
|
|
47
|
+
"@comet/eslint-config": "8.16.0-canary-20260219095654"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"@mikro-orm/cli": "^6.0.0",
|