@comet/api-generator 8.15.0 → 8.16.0-canary-20260219100902

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
- @Args() {${Object.entries(Object.assign(Object.assign({ scope: !!scopeProp }, dedicatedResolverArgProps.reduce((acc, dedicatedResolverArgProp) => {
844
- acc[dedicatedResolverArgProp.name] = true;
845
- return acc;
846
- }, {})), { search: !!hasSearchArg, filter: !!hasFilterArg, sort: !!hasSortArg, offset: true, limit: true }))
847
- .filter(([key, use]) => use)
848
- .map(([key]) => key)
849
- .join(", ")}}: ${argsClassName}
850
- ${hasOutputRelations ? `, @Info() info: GraphQLResolveInfo` : ""}
851
- ): Promise<Paginated${classNamePlural}> {
852
- const where${hasSearchArg || hasFilterArg
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, { root: "nodes" });
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
- const [entities, totalCount] = await this.entityManager.findAndCount(${metadata.className}, where, options);
882
- return new Paginated${classNamePlural}(entities, totalCount);
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
- generatedFiles.push({
1055
- name: `dto/paginated-${fileNamePlural}.ts`,
1056
- content: generatePaginatedDto({ generatorOptions, metadata }),
1057
- type: "sort",
1058
- });
1059
- generatedFiles.push({
1060
- name: `dto/${argsFileName}.ts`,
1061
- content: generateArgsDto({ generatorOptions, metadata }),
1062
- type: "args",
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.15.0",
3
+ "version": "8.16.0-canary-20260219100902",
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.15.0"
28
+ "@comet/cms-api": "8.16.0-canary-20260219100902"
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.15.0"
47
+ "@comet/eslint-config": "8.16.0-canary-20260219100902"
48
48
  },
49
49
  "peerDependencies": {
50
50
  "@mikro-orm/cli": "^6.0.0",