@baeta/plugin-pagination 1.0.11 → 2.0.0-next.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # @baeta/plugin-pagination
2
2
 
3
+ ## 2.0.0-next.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Fix release version
8
+
9
+ - Updated dependencies []:
10
+ - @baeta/generator-sdk@2.0.0-next.1
11
+ - @baeta/util-path@2.0.0-next.1
12
+
13
+ ## 2.0.0-next.0
14
+
15
+ ### Major Changes
16
+
17
+ - [#214](https://github.com/andreisergiu98/baeta/pull/214) [`31d1a50`](https://github.com/andreisergiu98/baeta/commit/31d1a509f96535b43ae85d19c770eb1a5f09dc94) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - Baeta v2 – major refactor
18
+ - **Side-effect-free type generation & resolver definitions.**
19
+ The types generator and resolver definitions were reworked to be side-effect free, improving type safety.
20
+ - **Stricter type safety.**
21
+ You must now **explicitly define resolvers for every field** during development—breakages that used to surface at runtime are now caught at compile time.
22
+ - **Removed `@baeta/compiler`.**
23
+ Since modern runtimes can execute TypeScript natively, the separate compiler package is no longer needed. Use your runtime’s native TS support or your existing build setup.
24
+ - **Subscriptions update.**
25
+ `@baeta/subscriptions-pubsub` now targets **`graphql-subscriptions` v3**.
26
+
27
+ ### Patch Changes
28
+
29
+ - Updated dependencies [[`31d1a50`](https://github.com/andreisergiu98/baeta/commit/31d1a509f96535b43ae85d19c770eb1a5f09dc94)]:
30
+ - @baeta/generator-sdk@2.0.0-next.0
31
+ - @baeta/util-path@2.0.0-next.0
32
+
3
33
  ## 1.0.11
4
34
 
5
35
  ### Patch Changes
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // index.ts
2
- import { createPluginV1, getModuleGetName, getModuleVariableName } from "@baeta/generator-sdk";
2
+ import { createPluginV1, getModuleExportName } from "@baeta/generator-sdk";
3
3
  import { join, parse } from "@baeta/util-path";
4
4
  function printFields(fields) {
5
5
  return fields.map((field) => ` ${field}`).join("\n");
@@ -20,15 +20,53 @@ function printPageInfo(addFields = []) {
20
20
  "hasNextPage: Boolean!"
21
21
  ]);
22
22
  }
23
- function printExport(moduleDefinitionName, moduleName, importExt = "") {
24
- const parsed = parse(moduleDefinitionName);
25
- const method = getModuleGetName(moduleName);
26
- const importName = parsed.ext === ".ts" ? parsed.name : moduleDefinitionName;
27
- return `import { ${method} } from "./${importName}${importExt}";
23
+ function printResolversForType(module, type, fields) {
24
+ return `${type}: ${module}.${type}.$fields({
25
+ ${fields.map((field) => printResolverForField(module, type, field)).map(indent(4)).join(",\n")}
26
+ })`;
27
+ }
28
+ function printResolverForField(module, type, field) {
29
+ return `${field}: ${module}.${type}.${field}.key('${field}').undefinedAsNull()`;
30
+ }
31
+ function getFieldNameFromFieldWithType(field) {
32
+ const [fieldName] = field.split(":");
33
+ return fieldName;
34
+ }
35
+ function printExport(moduleDefinitionName, moduleName, importExt, options) {
36
+ const module = getModuleExportName(moduleName);
37
+ const typedef = parse(moduleDefinitionName).name + importExt;
38
+ const pageInfoResolver = printResolversForType(module, "PageInfo", [
39
+ "hasNextPage",
40
+ "hasPreviousPage",
41
+ ...options.pageInfoFields?.map(getFieldNameFromFieldWithType) ?? []
42
+ ]);
43
+ const typesResolvers = Object.entries(options.types).flatMap(([type, typeOptions]) => {
44
+ if (typeOptions == null || typeOptions === false) {
45
+ return [];
46
+ }
47
+ const extraEdgeFields = (typeOptions === true ? [] : typeOptions.edgeFields ?? []).map(
48
+ getFieldNameFromFieldWithType
49
+ );
50
+ const extraConnectionFields = (typeOptions === true ? [] : typeOptions.connectionFields ?? []).map(getFieldNameFromFieldWithType);
51
+ return [
52
+ printResolversForType(module, `${type}Connection`, [
53
+ "pageInfo",
54
+ "edges",
55
+ ...extraConnectionFields
56
+ ]),
57
+ printResolversForType(module, `${type}Edge`, ["cursor", "node", ...extraEdgeFields])
58
+ ];
59
+ });
60
+ return `import { ${module} } from "./${typedef}";
28
61
 
29
- export const ${getModuleVariableName(moduleName)} = ${method}();
62
+ export default ${module}.$schema({
63
+ ${[pageInfoResolver, ...typesResolvers].map(indent(4)).join(",\n")}
64
+ });
30
65
  `;
31
66
  }
67
+ function indent(size) {
68
+ return (text) => text.split("\n").map((line) => " ".repeat(size) + line).join("\n");
69
+ }
32
70
  function printConnectionTypes(name, typeOptions, options) {
33
71
  const {
34
72
  cursorType = "ID!",
@@ -69,7 +107,7 @@ function paginationPlugin(options) {
69
107
  const types = [printPageInfo(options.pageInfoFields)];
70
108
  for (const name in options.types) {
71
109
  const typeOptions = options.types[name];
72
- if (typeOptions === false) {
110
+ if (typeOptions == null || typeOptions === false) {
73
111
  continue;
74
112
  }
75
113
  const connectionTypes = printConnectionTypes(
@@ -87,15 +125,13 @@ function paginationPlugin(options) {
87
125
  );
88
126
  await definitionFile.write();
89
127
  ctx.fileManager.add(definitionFile);
90
- if (options.createExport === false) {
91
- return next();
92
- }
93
128
  ctx.fileManager.createAndAdd(
94
129
  createExportFilename(moduleDir),
95
130
  printExport(
96
131
  ctx.generatorOptions.moduleDefinitionName,
97
132
  moduleName,
98
- ctx.generatorOptions.importExtension
133
+ ctx.generatorOptions.importExtension,
134
+ options
99
135
  ),
100
136
  "pagination"
101
137
  );
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../index.ts"],"sourcesContent":["import { createPluginV1, getModuleGetName, getModuleVariableName } from '@baeta/generator-sdk';\nimport { join, parse } from '@baeta/util-path';\n\n/**\n * Configuration options for a specific pagination type\n */\nexport interface PaginationTypeOptions {\n\t/** The GraphQL type for nodes (e.g., \"User!\") */\n\tnodeType?: string;\n\t/** The GraphQL type for cursors\n\t * @defaultValue \"ID!\"\n\t */\n\tcursorType?: string;\n\t/**\n\t * Additional fields to add to the edge type\n\t * @example edgeFields: [\"hasPhotos: Boolean!\"]\n\t */\n\tedgeFields?: string[];\n\t/**\n\t * Additional fields to add to the connection type\n\t * @example connectionFields: [\"totalCount: Int!\"]\n\t */\n\tconnectionFields?: string[];\n}\n\n/**\n * Configuration options for the pagination plugin\n */\nexport interface PaginationOptions {\n\t/**\n\t * Map of type names to their pagination configuration.\n\t * @example\n\t * ```typescript\n\t * {\n\t * // Simple configuration\n\t * User: true,\n\t *\n\t * // Advanced configuration\n\t * UserCustom: {\n\t * nodeType: \"User\",\n\t * cursorType: \"UUID!\",\n\t * connectionFields: [\"totalCount: Int!\"],\n\t * edgeFields: [\"hasPhotos: Boolean!\"]\n\t * }\n\t * }\n\t * ```\n\t */\n\ttypes: Record<string, boolean | PaginationTypeOptions>;\n\t/**\n\t * Whether the node field should be nullable in all connections\n\t * @defaultValue true\n\t */\n\tnullableNode?: boolean;\n\t/**\n\t * Additional fields to add to the PageInfo type\n\t * @example [\"hasMorePages: Boolean!\"]\n\t */\n\tpageInfoFields?: string[];\n\t/** Whether to create an export file */\n\tcreateExport?: boolean;\n\t/**\n\t * Custom name for the pagination module\n\t * @defaultValue 'baeta-pagination'\n\t */\n\tmoduleName?: string;\n}\n\nfunction printFields(fields: string[]) {\n\treturn fields.map((field) => ` ${field}`).join('\\n');\n}\n\nfunction printType(name: string, fields: string[]) {\n\treturn `type ${name} {\n${printFields(fields)}\n}`;\n}\n\nfunction printTypes(types: string[]) {\n\treturn `${types.join('\\n\\n')}\\n`;\n}\n\nfunction printPageInfo(addFields: string[] = []) {\n\treturn printType('PageInfo', [\n\t\t...addFields,\n\t\t'hasPreviousPage: Boolean!',\n\t\t'hasNextPage: Boolean!',\n\t]);\n}\n\nfunction printExport(moduleDefinitionName: string, moduleName: string, importExt = '') {\n\tconst parsed = parse(moduleDefinitionName);\n\tconst method = getModuleGetName(moduleName);\n\tconst importName = parsed.ext === '.ts' ? parsed.name : moduleDefinitionName;\n\n\treturn `import { ${method} } from \"./${importName}${importExt}\";\n\nexport const ${getModuleVariableName(moduleName)} = ${method}();\n`;\n}\n\nfunction printConnectionTypes(\n\tname: string,\n\ttypeOptions: PaginationTypeOptions,\n\toptions: PaginationOptions,\n) {\n\tconst {\n\t\tcursorType = 'ID!',\n\t\tnodeType = name,\n\t\tconnectionFields = [],\n\t\tedgeFields = [],\n\t} = typeOptions;\n\n\tconst connection = printType(`${name}Connection`, [\n\t\t...connectionFields,\n\t\t'pageInfo: PageInfo!',\n\t\t`edges: [${name}Edge]`,\n\t]);\n\n\tconst edge = printType(`${name}Edge`, [\n\t\t...edgeFields,\n\t\t`cursor: ${cursorType}`,\n\t\t`node: ${nodeType}${options.nullableNode === false ? '!' : ''}`,\n\t]);\n\n\treturn [connection, edge];\n}\n\nfunction createConnectionModuleDir(modulesDir: string, moduleName: string) {\n\treturn join(modulesDir, moduleName);\n}\n\nfunction createGqlFilename(moduleDir: string) {\n\treturn `${moduleDir}/connections.gql`;\n}\n\nfunction createExportFilename(moduleDir: string) {\n\treturn `${moduleDir}/index.ts`;\n}\n\n/**\n * A plugin that generates Relay-style pagination types for GraphQL.\n * See https://baeta.io/docs/plugins/pagination for more details\n *\n * @param options - Configuration options for the pagination plugin\n * @returns A Baeta generator plugin\n */\nexport function paginationPlugin(options: PaginationOptions) {\n\tconst { moduleName = 'baeta-pagination' } = options;\n\n\treturn createPluginV1({\n\t\tname: 'pagination',\n\t\tactionName: 'pagination connections',\n\t\twatch: (generatorOptions, watcher) => {\n\t\t\twatcher.ignore(`${createConnectionModuleDir(generatorOptions.modulesDir, moduleName)}/**`);\n\t\t},\n\t\tgenerate: async (ctx, next) => {\n\t\t\tconst types: string[] = [printPageInfo(options.pageInfoFields)];\n\n\t\t\tfor (const name in options.types) {\n\t\t\t\tconst typeOptions = options.types[name];\n\n\t\t\t\tif (typeOptions === false) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst connectionTypes = printConnectionTypes(\n\t\t\t\t\tname,\n\t\t\t\t\ttypeOptions === true ? {} : typeOptions,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\n\t\t\t\ttypes.push(...connectionTypes);\n\t\t\t}\n\n\t\t\tconst moduleDir = createConnectionModuleDir(ctx.generatorOptions.modulesDir, moduleName);\n\n\t\t\tconst definitionFile = ctx.fileManager.createAndAdd(\n\t\t\t\tcreateGqlFilename(moduleDir),\n\t\t\t\tprintTypes(types),\n\t\t\t\t'pagination',\n\t\t\t);\n\t\t\tawait definitionFile.write();\n\n\t\t\tctx.fileManager.add(definitionFile);\n\n\t\t\tif (options.createExport === false) {\n\t\t\t\treturn next();\n\t\t\t}\n\n\t\t\tctx.fileManager.createAndAdd(\n\t\t\t\tcreateExportFilename(moduleDir),\n\t\t\t\tprintExport(\n\t\t\t\t\tctx.generatorOptions.moduleDefinitionName,\n\t\t\t\t\tmoduleName,\n\t\t\t\t\tctx.generatorOptions.importExtension,\n\t\t\t\t),\n\t\t\t\t'pagination',\n\t\t\t);\n\n\t\t\treturn next();\n\t\t},\n\t});\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../index.ts"],"sourcesContent":["import { createPluginV1, getModuleExportName } from '@baeta/generator-sdk';\nimport { join, parse } from '@baeta/util-path';\n\n/**\n * Configuration options for a specific pagination type\n */\nexport interface PaginationTypeOptions {\n\t/** The GraphQL type for nodes (e.g., \"User!\") */\n\tnodeType?: string;\n\t/** The GraphQL type for cursors\n\t * @defaultValue \"ID!\"\n\t */\n\tcursorType?: string;\n\t/**\n\t * Additional fields to add to the edge type\n\t * @example edgeFields: [\"hasPhotos: Boolean!\"]\n\t */\n\tedgeFields?: string[];\n\t/**\n\t * Additional fields to add to the connection type\n\t * @example connectionFields: [\"totalCount: Int!\"]\n\t */\n\tconnectionFields?: string[];\n}\n\n/**\n * Configuration options for the pagination plugin\n */\nexport interface PaginationOptions<Keys extends string | number | symbol = string> {\n\t/**\n\t * Map of type names to their pagination configuration.\n\t * @example\n\t * ```typescript\n\t * {\n\t * // Simple configuration\n\t * User: true,\n\t *\n\t * // Advanced configuration\n\t * UserCustom: {\n\t * nodeType: \"User\",\n\t * cursorType: \"UUID!\",\n\t * connectionFields: [\"totalCount: Int!\"],\n\t * edgeFields: [\"hasPhotos: Boolean!\"]\n\t * }\n\t * }\n\t * ```\n\t */\n\ttypes: {\n\t\t[key in Keys]?: boolean | PaginationTypeOptions;\n\t};\n\t/**\n\t * Whether the node field should be nullable in all connections\n\t * @defaultValue true\n\t */\n\tnullableNode?: boolean;\n\t/**\n\t * Additional fields to add to the PageInfo type\n\t * @example [\"hasMorePages: Boolean!\"]\n\t */\n\tpageInfoFields?: string[];\n\t/**\n\t * Custom name for the pagination module\n\t * @defaultValue 'baeta-pagination'\n\t */\n\tmoduleName?: string;\n}\n\nfunction printFields(fields: string[]) {\n\treturn fields.map((field) => ` ${field}`).join('\\n');\n}\n\nfunction printType(name: string, fields: string[]) {\n\treturn `type ${name} {\n${printFields(fields)}\n}`;\n}\n\nfunction printTypes(types: string[]) {\n\treturn `${types.join('\\n\\n')}\\n`;\n}\n\nfunction printPageInfo(addFields: string[] = []) {\n\treturn printType('PageInfo', [\n\t\t...addFields,\n\t\t'hasPreviousPage: Boolean!',\n\t\t'hasNextPage: Boolean!',\n\t]);\n}\n\nfunction printResolversForType(module: string, type: string, fields: string[]) {\n\treturn `${type}: ${module}.${type}.$fields({\n${fields\n\t.map((field) => printResolverForField(module, type, field))\n\t.map(indent(4))\n\t.join(',\\n')}\n})`;\n}\n\nfunction printResolverForField(module: string, type: string, field: string) {\n\treturn `${field}: ${module}.${type}.${field}.key('${field}').undefinedAsNull()`;\n}\n\nfunction getFieldNameFromFieldWithType(field: string) {\n\tconst [fieldName] = field.split(':');\n\treturn fieldName;\n}\n\nfunction printExport(\n\tmoduleDefinitionName: string,\n\tmoduleName: string,\n\timportExt: string,\n\toptions: PaginationOptions,\n) {\n\tconst module = getModuleExportName(moduleName);\n\tconst typedef = parse(moduleDefinitionName).name + importExt;\n\n\tconst pageInfoResolver = printResolversForType(module, 'PageInfo', [\n\t\t'hasNextPage',\n\t\t'hasPreviousPage',\n\t\t...(options.pageInfoFields?.map(getFieldNameFromFieldWithType) ?? []),\n\t]);\n\n\tconst typesResolvers = Object.entries(options.types).flatMap(([type, typeOptions]) => {\n\t\tif (typeOptions == null || typeOptions === false) {\n\t\t\treturn [];\n\t\t}\n\t\tconst extraEdgeFields = (typeOptions === true ? [] : (typeOptions.edgeFields ?? [])).map(\n\t\t\tgetFieldNameFromFieldWithType,\n\t\t);\n\t\tconst extraConnectionFields = (\n\t\t\ttypeOptions === true ? [] : (typeOptions.connectionFields ?? [])\n\t\t).map(getFieldNameFromFieldWithType);\n\t\treturn [\n\t\t\tprintResolversForType(module, `${type}Connection`, [\n\t\t\t\t'pageInfo',\n\t\t\t\t'edges',\n\t\t\t\t...extraConnectionFields,\n\t\t\t]),\n\t\t\tprintResolversForType(module, `${type}Edge`, ['cursor', 'node', ...extraEdgeFields]),\n\t\t];\n\t});\n\n\treturn `import { ${module} } from \"./${typedef}\";\n\nexport default ${module}.$schema({\n${[pageInfoResolver, ...typesResolvers].map(indent(4)).join(',\\n')}\n});\n`;\n}\n\nfunction indent(size: number) {\n\treturn (text: string) =>\n\t\ttext\n\t\t\t.split('\\n')\n\t\t\t.map((line) => ' '.repeat(size) + line)\n\t\t\t.join('\\n');\n}\n\nfunction printConnectionTypes(\n\tname: string,\n\ttypeOptions: PaginationTypeOptions,\n\toptions: PaginationOptions,\n) {\n\tconst {\n\t\tcursorType = 'ID!',\n\t\tnodeType = name,\n\t\tconnectionFields = [],\n\t\tedgeFields = [],\n\t} = typeOptions;\n\n\tconst connection = printType(`${name}Connection`, [\n\t\t...connectionFields,\n\t\t'pageInfo: PageInfo!',\n\t\t`edges: [${name}Edge]`,\n\t]);\n\n\tconst edge = printType(`${name}Edge`, [\n\t\t...edgeFields,\n\t\t`cursor: ${cursorType}`,\n\t\t`node: ${nodeType}${options.nullableNode === false ? '!' : ''}`,\n\t]);\n\n\treturn [connection, edge];\n}\n\nfunction createConnectionModuleDir(modulesDir: string, moduleName: string) {\n\treturn join(modulesDir, moduleName);\n}\n\nfunction createGqlFilename(moduleDir: string) {\n\treturn `${moduleDir}/connections.gql`;\n}\n\nfunction createExportFilename(moduleDir: string) {\n\treturn `${moduleDir}/index.ts`;\n}\n\n/**\n * A plugin that generates Relay-style pagination types for GraphQL.\n * See https://baeta.io/docs/plugins/pagination for more details\n *\n * @param options - Configuration options for the pagination plugin\n * @returns A Baeta generator plugin\n */\nexport function paginationPlugin<T>(options: PaginationOptions<keyof T>) {\n\tconst { moduleName = 'baeta-pagination' } = options;\n\n\treturn createPluginV1({\n\t\tname: 'pagination',\n\t\tactionName: 'pagination connections',\n\t\twatch: (generatorOptions, watcher) => {\n\t\t\twatcher.ignore(`${createConnectionModuleDir(generatorOptions.modulesDir, moduleName)}/**`);\n\t\t},\n\t\tgenerate: async (ctx, next) => {\n\t\t\tconst types: string[] = [printPageInfo(options.pageInfoFields)];\n\n\t\t\tfor (const name in options.types) {\n\t\t\t\tconst typeOptions = options.types[name];\n\t\t\t\tif (typeOptions == null || typeOptions === false) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst connectionTypes = printConnectionTypes(\n\t\t\t\t\tname,\n\t\t\t\t\ttypeOptions === true ? {} : typeOptions,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\n\t\t\t\ttypes.push(...connectionTypes);\n\t\t\t}\n\n\t\t\tconst moduleDir = createConnectionModuleDir(ctx.generatorOptions.modulesDir, moduleName);\n\n\t\t\tconst definitionFile = ctx.fileManager.createAndAdd(\n\t\t\t\tcreateGqlFilename(moduleDir),\n\t\t\t\tprintTypes(types),\n\t\t\t\t'pagination',\n\t\t\t);\n\t\t\tawait definitionFile.write();\n\n\t\t\tctx.fileManager.add(definitionFile);\n\n\t\t\tctx.fileManager.createAndAdd(\n\t\t\t\tcreateExportFilename(moduleDir),\n\t\t\t\tprintExport(\n\t\t\t\t\tctx.generatorOptions.moduleDefinitionName,\n\t\t\t\t\tmoduleName,\n\t\t\t\t\tctx.generatorOptions.importExtension,\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\t\t'pagination',\n\t\t\t);\n\n\t\t\treturn next();\n\t\t},\n\t});\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@baeta/plugin-pagination",
3
- "version": "1.0.11",
3
+ "version": "2.0.0-next.1",
4
4
  "keywords": [
5
5
  "baeta",
6
6
  "graphql",
@@ -43,21 +43,21 @@
43
43
  "types": "tsc --noEmit"
44
44
  },
45
45
  "dependencies": {
46
- "@baeta/generator-sdk": "^1.0.2",
47
- "@baeta/util-path": "^1.0.1"
46
+ "@baeta/generator-sdk": "^2.0.0-next.1",
47
+ "@baeta/util-path": "^2.0.0-next.1"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@baeta/builder": "^0.0.0",
51
51
  "@baeta/tsconfig": "^0.0.0",
52
- "@types/node": "^22.15.21",
52
+ "@types/node": "^22.18.11",
53
53
  "graphql": "^16.11.0",
54
- "typescript": "^5.8.3"
54
+ "typescript": "^5.9.3"
55
55
  },
56
56
  "peerDependencies": {
57
57
  "graphql": "^16.6.0"
58
58
  },
59
59
  "engines": {
60
- "node": ">=22.12.0"
60
+ "node": ">=22.20.0"
61
61
  },
62
62
  "publishConfig": {
63
63
  "access": "public",
package/dist/index.d.ts DELETED
@@ -1,74 +0,0 @@
1
- import * as _baeta_generator_sdk from '@baeta/generator-sdk';
2
-
3
- /**
4
- * Configuration options for a specific pagination type
5
- */
6
- interface PaginationTypeOptions {
7
- /** The GraphQL type for nodes (e.g., "User!") */
8
- nodeType?: string;
9
- /** The GraphQL type for cursors
10
- * @defaultValue "ID!"
11
- */
12
- cursorType?: string;
13
- /**
14
- * Additional fields to add to the edge type
15
- * @example edgeFields: ["hasPhotos: Boolean!"]
16
- */
17
- edgeFields?: string[];
18
- /**
19
- * Additional fields to add to the connection type
20
- * @example connectionFields: ["totalCount: Int!"]
21
- */
22
- connectionFields?: string[];
23
- }
24
- /**
25
- * Configuration options for the pagination plugin
26
- */
27
- interface PaginationOptions {
28
- /**
29
- * Map of type names to their pagination configuration.
30
- * @example
31
- * ```typescript
32
- * {
33
- * // Simple configuration
34
- * User: true,
35
- *
36
- * // Advanced configuration
37
- * UserCustom: {
38
- * nodeType: "User",
39
- * cursorType: "UUID!",
40
- * connectionFields: ["totalCount: Int!"],
41
- * edgeFields: ["hasPhotos: Boolean!"]
42
- * }
43
- * }
44
- * ```
45
- */
46
- types: Record<string, boolean | PaginationTypeOptions>;
47
- /**
48
- * Whether the node field should be nullable in all connections
49
- * @defaultValue true
50
- */
51
- nullableNode?: boolean;
52
- /**
53
- * Additional fields to add to the PageInfo type
54
- * @example ["hasMorePages: Boolean!"]
55
- */
56
- pageInfoFields?: string[];
57
- /** Whether to create an export file */
58
- createExport?: boolean;
59
- /**
60
- * Custom name for the pagination module
61
- * @defaultValue 'baeta-pagination'
62
- */
63
- moduleName?: string;
64
- }
65
- /**
66
- * A plugin that generates Relay-style pagination types for GraphQL.
67
- * See https://baeta.io/docs/plugins/pagination for more details
68
- *
69
- * @param options - Configuration options for the pagination plugin
70
- * @returns A Baeta generator plugin
71
- */
72
- declare function paginationPlugin(options: PaginationOptions): _baeta_generator_sdk.GeneratorPluginV1<unknown>;
73
-
74
- export { type PaginationOptions, type PaginationTypeOptions, paginationPlugin };