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

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,38 @@
1
1
  # @baeta/plugin-pagination
2
2
 
3
+ ## 2.0.0-next.10
4
+
5
+ ## 2.0.0-next.9
6
+
7
+ ### Patch Changes
8
+
9
+ - Updated dependencies [[`831cfa2`](https://github.com/andreisergiu98/baeta/commit/831cfa2a11445aaf7f2d1a1d7ddf073db9bb8008), [`831cfa2`](https://github.com/andreisergiu98/baeta/commit/831cfa2a11445aaf7f2d1a1d7ddf073db9bb8008)]:
10
+ - @baeta/generator-sdk@2.0.0-next.4
11
+ - @baeta/util-path@2.0.0-next.3
12
+
13
+ ## 2.0.0-next.8
14
+
15
+ ## 2.0.0-next.7
16
+
17
+ ## 2.0.0-next.3
18
+
19
+ ### Patch Changes
20
+
21
+ - Update generator-sdk package
22
+
23
+ - Updated dependencies [[`6de5d15`](https://github.com/andreisergiu98/baeta/commit/6de5d15484d341a1717a1b2f3f45272912e6a886)]:
24
+ - @baeta/generator-sdk@2.0.0-next.3
25
+
26
+ ## 2.0.0-next.2
27
+
28
+ ### Patch Changes
29
+
30
+ - Fix broken types
31
+
32
+ - Updated dependencies []:
33
+ - @baeta/generator-sdk@2.0.0-next.2
34
+ - @baeta/util-path@2.0.0-next.2
35
+
3
36
  ## 2.0.0-next.1
4
37
 
5
38
  ### Patch Changes
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  <div align="center">
6
6
  <h1>Baeta</h1>
7
7
  <a href="https://www.npmjs.com/package/@baeta/cli"><img src="https://img.shields.io/npm/v/@baeta/cli.svg?style=flat" /></a>
8
- <a href="https://github.com/andreisergiu98/baeta/actions/workflows/testing.yml"><img src="https://img.shields.io/github/actions/workflow/status/andreisergiu98/baeta/testing.yml" /></a>
8
+ <a href="https://github.com/andreisergiu98/baeta/actions/workflows/checks.yml"><img src="https://img.shields.io/github/actions/workflow/status/andreisergiu98/baeta/checks.yml" /></a>
9
9
  <a href="https://github.com/andreisergiu98/baeta/pulls"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" /></a>
10
10
  <a href="https://github.com/andreisergiu98/baeta/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" /></a>
11
11
  <br />
@@ -77,43 +77,68 @@ type Query {
77
77
  #### 2. Implement your resolvers
78
78
 
79
79
  ```typescript
80
- import { getUserModule } from "./typedef";
80
+ import { UserModule } from "./typedef.ts";
81
81
 
82
- const { Query } = getUserModule();
82
+ const { Query } = UserModule;
83
83
 
84
- Query.user(({ args }) => {
84
+ const userQuery = Query.user.resolve(({ args }) => {
85
85
  return dataSource.user.find(args.where);
86
86
  });
87
87
 
88
- Query.users(() => {
88
+ const usersQuery = Query.users.resolve(() => {
89
89
  return dataSource.user.findMany();
90
90
  });
91
+
92
+ Query.$fields({
93
+ user: userQuery,
94
+ users: usersQuery,
95
+ });
91
96
  ```
92
97
 
93
98
  #### 3. Add authorization
94
99
 
95
100
  ```typescript
96
- const { Query, Mutation } = getUserModule();
97
-
98
- Query.users.$auth({
99
- $or: {
100
- isPublic: true,
101
- isLoggedIn: true,
102
- },
103
- });
101
+ import { UserModule } from "./typedef.ts";
102
+
103
+ const { Query } = UserModule;
104
+
105
+ const userQuery = Query.user
106
+ .$auth({
107
+ $or: {
108
+ isPublic: true,
109
+ isLoggedIn: true,
110
+ },
111
+ })
112
+ .resolve(async ({ args }) => {
113
+ // ...
114
+ });
104
115
  ```
105
116
 
106
117
  #### 4. Add caching
107
118
 
108
119
  ```typescript
109
- import { getUserModule } from "./typedef";
110
-
111
- const { User, Query } = getUserModule();
120
+ const { Query, Mutation, User } = UserModule;
112
121
 
113
122
  export const userCache = User.$createCache();
114
123
 
115
- Query.user.$useCache(userCache);
116
- Query.users.$useCache(userCache);
124
+ const userQuery = Query.user
125
+ .$auth({
126
+ // ...
127
+ })
128
+ .$useCache(userCache)
129
+ .resolve(async ({ args }) => {
130
+ // ...
131
+ });
132
+
133
+ const updateUserMutation = Mutation.updateUser
134
+ .$use(async (next) => {
135
+ const user = await next();
136
+ await userCache.save(user);
137
+ return user;
138
+ })
139
+ .resolve(async ({ args }) => {
140
+ // ...
141
+ });
117
142
  ```
118
143
 
119
144
  ## Compatibility
@@ -0,0 +1,74 @@
1
+ import * as _baeta_generator_sdk0 from "@baeta/generator-sdk";
2
+
3
+ //#region index.d.ts
4
+ /**
5
+ * Configuration options for a specific pagination type
6
+ */
7
+ interface PaginationTypeOptions {
8
+ /** The GraphQL type for nodes (e.g., "User!") */
9
+ nodeType?: string;
10
+ /** The GraphQL type for cursors
11
+ * @defaultValue "ID!"
12
+ */
13
+ cursorType?: string;
14
+ /**
15
+ * Additional fields to add to the edge type
16
+ * @example edgeFields: ["hasPhotos: Boolean!"]
17
+ */
18
+ edgeFields?: string[];
19
+ /**
20
+ * Additional fields to add to the connection type
21
+ * @example connectionFields: ["totalCount: Int!"]
22
+ */
23
+ connectionFields?: string[];
24
+ }
25
+ /**
26
+ * Configuration options for the pagination plugin
27
+ */
28
+ interface PaginationOptions<Keys extends string | number | symbol = string> {
29
+ /**
30
+ * Map of type names to their pagination configuration.
31
+ * @example
32
+ * ```typescript
33
+ * {
34
+ * // Simple configuration
35
+ * User: true,
36
+ *
37
+ * // Advanced configuration
38
+ * UserCustom: {
39
+ * nodeType: "User",
40
+ * cursorType: "UUID!",
41
+ * connectionFields: ["totalCount: Int!"],
42
+ * edgeFields: ["hasPhotos: Boolean!"]
43
+ * }
44
+ * }
45
+ * ```
46
+ */
47
+ types: { [key in Keys]?: boolean | PaginationTypeOptions };
48
+ /**
49
+ * Whether the node field should be nullable in all connections
50
+ * @defaultValue true
51
+ */
52
+ nullableNode?: boolean;
53
+ /**
54
+ * Additional fields to add to the PageInfo type
55
+ * @example ["hasMorePages: Boolean!"]
56
+ */
57
+ pageInfoFields?: string[];
58
+ /**
59
+ * Custom name for the pagination module
60
+ * @defaultValue 'baeta-pagination'
61
+ */
62
+ moduleName?: string;
63
+ }
64
+ /**
65
+ * A plugin that generates Relay-style pagination types for GraphQL.
66
+ * See https://baeta.io/docs/plugins/pagination for more details
67
+ *
68
+ * @param options - Configuration options for the pagination plugin
69
+ * @returns A Baeta generator plugin
70
+ */
71
+ declare function paginationPlugin<T>(options: PaginationOptions<keyof T>): _baeta_generator_sdk0.GeneratorPluginV1<unknown>;
72
+ //#endregion
73
+ export { PaginationOptions, PaginationTypeOptions, paginationPlugin };
74
+ //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,145 +1,120 @@
1
- // index.ts
2
1
  import { createPluginV1, getModuleExportName } from "@baeta/generator-sdk";
3
2
  import { join, parse } from "@baeta/util-path";
3
+
4
+ //#region index.ts
4
5
  function printFields(fields) {
5
- return fields.map((field) => ` ${field}`).join("\n");
6
+ return fields.map((field) => ` ${field}`).join("\n");
6
7
  }
7
8
  function printType(name, fields) {
8
- return `type ${name} {
9
+ return `type ${name} {
9
10
  ${printFields(fields)}
10
11
  }`;
11
12
  }
12
13
  function printTypes(types) {
13
- return `${types.join("\n\n")}
14
- `;
14
+ return `${types.join("\n\n")}\n`;
15
15
  }
16
16
  function printPageInfo(addFields = []) {
17
- return printType("PageInfo", [
18
- ...addFields,
19
- "hasPreviousPage: Boolean!",
20
- "hasNextPage: Boolean!"
21
- ]);
17
+ return printType("PageInfo", [
18
+ ...addFields,
19
+ "hasPreviousPage: Boolean!",
20
+ "hasNextPage: Boolean!"
21
+ ]);
22
22
  }
23
23
  function printResolversForType(module, type, fields) {
24
- return `${type}: ${module}.${type}.$fields({
24
+ return `${type}: ${module}.${type}.$fields({
25
25
  ${fields.map((field) => printResolverForField(module, type, field)).map(indent(4)).join(",\n")}
26
26
  })`;
27
27
  }
28
28
  function printResolverForField(module, type, field) {
29
- return `${field}: ${module}.${type}.${field}.key('${field}').undefinedAsNull()`;
29
+ return `${field}: ${module}.${type}.${field}.key('${field}').undefinedAsNull()`;
30
30
  }
31
31
  function getFieldNameFromFieldWithType(field) {
32
- const [fieldName] = field.split(":");
33
- return fieldName;
32
+ const [fieldName] = field.split(":");
33
+ return fieldName;
34
34
  }
35
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}";
36
+ const module = getModuleExportName(moduleName);
37
+ return `import { ${module} } from "./${parse(moduleDefinitionName).name + importExt}";
61
38
 
62
39
  export default ${module}.$schema({
63
- ${[pageInfoResolver, ...typesResolvers].map(indent(4)).join(",\n")}
40
+ ${[printResolversForType(module, "PageInfo", [
41
+ "hasNextPage",
42
+ "hasPreviousPage",
43
+ ...options.pageInfoFields?.map(getFieldNameFromFieldWithType) ?? []
44
+ ]), ...Object.entries(options.types).flatMap(([type, typeOptions]) => {
45
+ if (typeOptions == null || typeOptions === false) return [];
46
+ const extraEdgeFields = (typeOptions === true ? [] : typeOptions.edgeFields ?? []).map(getFieldNameFromFieldWithType);
47
+ const extraConnectionFields = (typeOptions === true ? [] : typeOptions.connectionFields ?? []).map(getFieldNameFromFieldWithType);
48
+ return [printResolversForType(module, `${type}Connection`, [
49
+ "pageInfo",
50
+ "edges",
51
+ ...extraConnectionFields
52
+ ]), printResolversForType(module, `${type}Edge`, [
53
+ "cursor",
54
+ "node",
55
+ ...extraEdgeFields
56
+ ])];
57
+ })].map(indent(4)).join(",\n")}
64
58
  });
65
59
  `;
66
60
  }
67
61
  function indent(size) {
68
- return (text) => text.split("\n").map((line) => " ".repeat(size) + line).join("\n");
62
+ return (text) => text.split("\n").map((line) => " ".repeat(size) + line).join("\n");
69
63
  }
70
64
  function printConnectionTypes(name, typeOptions, options) {
71
- const {
72
- cursorType = "ID!",
73
- nodeType = name,
74
- connectionFields = [],
75
- edgeFields = []
76
- } = typeOptions;
77
- const connection = printType(`${name}Connection`, [
78
- ...connectionFields,
79
- "pageInfo: PageInfo!",
80
- `edges: [${name}Edge]`
81
- ]);
82
- const edge = printType(`${name}Edge`, [
83
- ...edgeFields,
84
- `cursor: ${cursorType}`,
85
- `node: ${nodeType}${options.nullableNode === false ? "!" : ""}`
86
- ]);
87
- return [connection, edge];
65
+ const { cursorType = "ID!", nodeType = name, connectionFields = [], edgeFields = [] } = typeOptions;
66
+ return [printType(`${name}Connection`, [
67
+ ...connectionFields,
68
+ "pageInfo: PageInfo!",
69
+ `edges: [${name}Edge]`
70
+ ]), printType(`${name}Edge`, [
71
+ ...edgeFields,
72
+ `cursor: ${cursorType}`,
73
+ `node: ${nodeType}${options.nullableNode === false ? "!" : ""}`
74
+ ])];
88
75
  }
89
76
  function createConnectionModuleDir(modulesDir, moduleName) {
90
- return join(modulesDir, moduleName);
77
+ return join(modulesDir, moduleName);
91
78
  }
92
79
  function createGqlFilename(moduleDir) {
93
- return `${moduleDir}/connections.gql`;
80
+ return `${moduleDir}/connections.gql`;
94
81
  }
95
82
  function createExportFilename(moduleDir) {
96
- return `${moduleDir}/index.ts`;
83
+ return `${moduleDir}/index.ts`;
97
84
  }
85
+ /**
86
+ * A plugin that generates Relay-style pagination types for GraphQL.
87
+ * See https://baeta.io/docs/plugins/pagination for more details
88
+ *
89
+ * @param options - Configuration options for the pagination plugin
90
+ * @returns A Baeta generator plugin
91
+ */
98
92
  function paginationPlugin(options) {
99
- const { moduleName = "baeta-pagination" } = options;
100
- return createPluginV1({
101
- name: "pagination",
102
- actionName: "pagination connections",
103
- watch: (generatorOptions, watcher) => {
104
- watcher.ignore(`${createConnectionModuleDir(generatorOptions.modulesDir, moduleName)}/**`);
105
- },
106
- generate: async (ctx, next) => {
107
- const types = [printPageInfo(options.pageInfoFields)];
108
- for (const name in options.types) {
109
- const typeOptions = options.types[name];
110
- if (typeOptions == null || typeOptions === false) {
111
- continue;
112
- }
113
- const connectionTypes = printConnectionTypes(
114
- name,
115
- typeOptions === true ? {} : typeOptions,
116
- options
117
- );
118
- types.push(...connectionTypes);
119
- }
120
- const moduleDir = createConnectionModuleDir(ctx.generatorOptions.modulesDir, moduleName);
121
- const definitionFile = ctx.fileManager.createAndAdd(
122
- createGqlFilename(moduleDir),
123
- printTypes(types),
124
- "pagination"
125
- );
126
- await definitionFile.write();
127
- ctx.fileManager.add(definitionFile);
128
- ctx.fileManager.createAndAdd(
129
- createExportFilename(moduleDir),
130
- printExport(
131
- ctx.generatorOptions.moduleDefinitionName,
132
- moduleName,
133
- ctx.generatorOptions.importExtension,
134
- options
135
- ),
136
- "pagination"
137
- );
138
- return next();
139
- }
140
- });
93
+ const { moduleName = "baeta-pagination" } = options;
94
+ return createPluginV1({
95
+ name: "pagination",
96
+ actionName: "pagination connections",
97
+ watch: (generatorOptions, watcher) => {
98
+ watcher.ignore(`${createConnectionModuleDir(generatorOptions.modulesDir, moduleName)}/**`);
99
+ },
100
+ generate: async (ctx, next) => {
101
+ const types = [printPageInfo(options.pageInfoFields)];
102
+ for (const name in options.types) {
103
+ const typeOptions = options.types[name];
104
+ if (typeOptions == null || typeOptions === false) continue;
105
+ const connectionTypes = printConnectionTypes(name, typeOptions === true ? {} : typeOptions, options);
106
+ types.push(...connectionTypes);
107
+ }
108
+ const moduleDir = createConnectionModuleDir(ctx.generatorOptions.modulesDir, moduleName);
109
+ const definitionFile = ctx.fileManager.createAndAdd(createGqlFilename(moduleDir), printTypes(types), "pagination");
110
+ await definitionFile.write();
111
+ ctx.fileManager.add(definitionFile);
112
+ ctx.fileManager.createAndAdd(createExportFilename(moduleDir), printExport(ctx.generatorOptions.moduleDefinitionName, moduleName, ctx.generatorOptions.importExtension, options), "pagination");
113
+ return next();
114
+ }
115
+ });
141
116
  }
142
- export {
143
- paginationPlugin
144
- };
117
+
118
+ //#endregion
119
+ export { paginationPlugin };
145
120
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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":[]}
1
+ {"version":3,"file":"index.js","names":["types: string[]"],"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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@baeta/plugin-pagination",
3
- "version": "2.0.0-next.1",
3
+ "version": "2.0.0-next.10",
4
4
  "keywords": [
5
5
  "baeta",
6
6
  "graphql",
@@ -37,20 +37,28 @@
37
37
  "package.json"
38
38
  ],
39
39
  "scripts": {
40
- "build": "tsup",
41
- "prepack": "prep",
42
- "postpack": "prep --clean",
40
+ "build": "builder build",
41
+ "prepack": "builder prepare",
42
+ "postpack": "builder prepare --clean",
43
+ "test": "builder test",
44
+ "test:circular": "builder test-circular",
43
45
  "types": "tsc --noEmit"
44
46
  },
47
+ "ava": {
48
+ "extensions": {
49
+ "ts": "module"
50
+ }
51
+ },
45
52
  "dependencies": {
46
- "@baeta/generator-sdk": "^2.0.0-next.1",
47
- "@baeta/util-path": "^2.0.0-next.1"
53
+ "@baeta/generator-sdk": "^2.0.0-next.4",
54
+ "@baeta/util-path": "^2.0.0-next.3"
48
55
  },
49
56
  "devDependencies": {
50
57
  "@baeta/builder": "^0.0.0",
58
+ "@baeta/testing": "^0.0.0",
51
59
  "@baeta/tsconfig": "^0.0.0",
52
- "@types/node": "^22.18.11",
53
- "graphql": "^16.11.0",
60
+ "@types/node": "^22.19.1",
61
+ "graphql": "^16.12.0",
54
62
  "typescript": "^5.9.3"
55
63
  },
56
64
  "peerDependencies": {