@baeta/plugin-pagination 2.0.0-next.0 → 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 ADDED
@@ -0,0 +1,275 @@
1
+ # @baeta/plugin-pagination
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
+
36
+ ## 2.0.0-next.1
37
+
38
+ ### Patch Changes
39
+
40
+ - Fix release version
41
+
42
+ - Updated dependencies []:
43
+ - @baeta/generator-sdk@2.0.0-next.1
44
+ - @baeta/util-path@2.0.0-next.1
45
+
46
+ ## 2.0.0-next.0
47
+
48
+ ### Major Changes
49
+
50
+ - [#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
51
+ - **Side-effect-free type generation & resolver definitions.**
52
+ The types generator and resolver definitions were reworked to be side-effect free, improving type safety.
53
+ - **Stricter type safety.**
54
+ You must now **explicitly define resolvers for every field** during development—breakages that used to surface at runtime are now caught at compile time.
55
+ - **Removed `@baeta/compiler`.**
56
+ 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.
57
+ - **Subscriptions update.**
58
+ `@baeta/subscriptions-pubsub` now targets **`graphql-subscriptions` v3**.
59
+
60
+ ### Patch Changes
61
+
62
+ - Updated dependencies [[`31d1a50`](https://github.com/andreisergiu98/baeta/commit/31d1a509f96535b43ae85d19c770eb1a5f09dc94)]:
63
+ - @baeta/generator-sdk@2.0.0-next.0
64
+ - @baeta/util-path@2.0.0-next.0
65
+
66
+ ## 1.0.11
67
+
68
+ ### Patch Changes
69
+
70
+ - Updated dependencies [[`7cbd2ef`](https://github.com/andreisergiu98/baeta/commit/7cbd2ef5b7697f703e4cc6f8d9612c7d01a10dd1), [`c7b9c05`](https://github.com/andreisergiu98/baeta/commit/c7b9c0523eb9827c99b2bcfc7dbe02f5ef389f21)]:
71
+ - @baeta/generator-sdk@1.0.2
72
+
73
+ ## 1.0.9
74
+
75
+ ### Patch Changes
76
+
77
+ - [`583014f`](https://github.com/andreisergiu98/baeta/commit/583014f0bac810b25d9a8226bda2df4c9039f5e3) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - Update dependencies
78
+
79
+ - Updated dependencies [[`583014f`](https://github.com/andreisergiu98/baeta/commit/583014f0bac810b25d9a8226bda2df4c9039f5e3)]:
80
+ - @baeta/generator-sdk@1.0.1
81
+ - @baeta/util-path@1.0.1
82
+
83
+ ## 1.0.8
84
+
85
+ ### Patch Changes
86
+
87
+ - [#189](https://github.com/andreisergiu98/baeta/pull/189) [`d500378`](https://github.com/andreisergiu98/baeta/commit/d500378198e0a9c48298c4242913bca8ad348228) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - add jsdocs
88
+
89
+ - [#165](https://github.com/andreisergiu98/baeta/pull/165) [`1334c2a`](https://github.com/andreisergiu98/baeta/commit/1334c2a866676c88f0f3d380b22133d81c4e98bc) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - mark as stable
90
+
91
+ - Updated dependencies [[`d500378`](https://github.com/andreisergiu98/baeta/commit/d500378198e0a9c48298c4242913bca8ad348228), [`1334c2a`](https://github.com/andreisergiu98/baeta/commit/1334c2a866676c88f0f3d380b22133d81c4e98bc)]:
92
+ - @baeta/generator-sdk@1.0.0
93
+ - @baeta/util-path@1.0.0
94
+
95
+ ## 0.1.5
96
+
97
+ ### Patch Changes
98
+
99
+ - Updated dependencies [[`bf2d1a3`](https://github.com/andreisergiu98/baeta/commit/bf2d1a326235e5f34e723a5acc81cd7b974b913b)]:
100
+ - @baeta/generator-sdk@0.1.5
101
+
102
+ ## 0.1.4
103
+
104
+ ### Patch Changes
105
+
106
+ - [`b59db50`](https://github.com/andreisergiu98/baeta/commit/b59db501a83275ab2d964933080e688a3a5d8820) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - add readme
107
+
108
+ - Updated dependencies [[`b59db50`](https://github.com/andreisergiu98/baeta/commit/b59db501a83275ab2d964933080e688a3a5d8820)]:
109
+ - @baeta/generator-sdk@0.1.4
110
+ - @baeta/util-path@0.1.4
111
+
112
+ ## 0.1.3
113
+
114
+ ### Patch Changes
115
+
116
+ - [#180](https://github.com/andreisergiu98/baeta/pull/180) [`483c709`](https://github.com/andreisergiu98/baeta/commit/483c70932f815fd114732c00b74f9488d7924c72) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - Raise minimum required NodeJS version to 22.12.0. Drop CommonJS builds in favor of the require_esm feature from NodeJS 22.12.0 onwards.
117
+
118
+ - [`de6e89c`](https://github.com/andreisergiu98/baeta/commit/de6e89c1b592e280967c73a4137d24ee56ef1857) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - raise es target to 2024
119
+
120
+ - Updated dependencies [[`483c709`](https://github.com/andreisergiu98/baeta/commit/483c70932f815fd114732c00b74f9488d7924c72), [`de6e89c`](https://github.com/andreisergiu98/baeta/commit/de6e89c1b592e280967c73a4137d24ee56ef1857)]:
121
+ - @baeta/generator-sdk@0.1.3
122
+ - @baeta/util-path@0.1.3
123
+
124
+ ## 0.1.2
125
+
126
+ ### Patch Changes
127
+
128
+ - [#170](https://github.com/andreisergiu98/baeta/pull/170) [`59bbb9c`](https://github.com/andreisergiu98/baeta/commit/59bbb9c4baaf716f27dc251fe7aeb0231e6c5321) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update dependencies
129
+
130
+ - Updated dependencies [[`e3fb6f8`](https://github.com/andreisergiu98/baeta/commit/e3fb6f877b4b20e248ad79cbaa3655cabe973f6b), [`59bbb9c`](https://github.com/andreisergiu98/baeta/commit/59bbb9c4baaf716f27dc251fe7aeb0231e6c5321)]:
131
+ - @baeta/generator-sdk@0.1.2
132
+ - @baeta/util-path@0.1.2
133
+
134
+ ## 0.1.1
135
+
136
+ ### Patch Changes
137
+
138
+ - [`7f1958c`](https://github.com/andreisergiu98/baeta/commit/7f1958c44d1b9bed473e48c875fdaa7020c434fa) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - allow custom extension for generated file imports
139
+
140
+ - [`a3f0e5d`](https://github.com/andreisergiu98/baeta/commit/a3f0e5d03fc9ef21a87d3ec6bf264d0e9707636a) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - fix exports order in package.json
141
+
142
+ - [#161](https://github.com/andreisergiu98/baeta/pull/161) [`cca37dd`](https://github.com/andreisergiu98/baeta/commit/cca37dd7135a2852f1f6e287c46911306bdc8da0) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update dependencies
143
+
144
+ - Updated dependencies [[`7f1958c`](https://github.com/andreisergiu98/baeta/commit/7f1958c44d1b9bed473e48c875fdaa7020c434fa), [`b9638eb`](https://github.com/andreisergiu98/baeta/commit/b9638eb9fb713507efa9821b4f04cc7896a997b1), [`fd3a5d2`](https://github.com/andreisergiu98/baeta/commit/fd3a5d27b497aca4b8807155e801b1c1197c5fe2), [`9d8d6a1`](https://github.com/andreisergiu98/baeta/commit/9d8d6a15d63579a2e0bdaa07b7efdcf10aff2492), [`a3f0e5d`](https://github.com/andreisergiu98/baeta/commit/a3f0e5d03fc9ef21a87d3ec6bf264d0e9707636a), [`cca37dd`](https://github.com/andreisergiu98/baeta/commit/cca37dd7135a2852f1f6e287c46911306bdc8da0)]:
145
+ - @baeta/generator-sdk@0.1.1
146
+ - @baeta/util-path@0.1.1
147
+
148
+ ## 0.1.0
149
+
150
+ ### Minor Changes
151
+
152
+ - [#156](https://github.com/andreisergiu98/baeta/pull/156) [`01f3c20`](https://github.com/andreisergiu98/baeta/commit/01f3c20365539fad6e8a8694c59a8e86c95784e8) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - raise engine requirement to node >= 22
153
+
154
+ ### Patch Changes
155
+
156
+ - [#152](https://github.com/andreisergiu98/baeta/pull/152) [`d538c79`](https://github.com/andreisergiu98/baeta/commit/d538c7905e6ba96d9f294e2d528f9252e83acbe7) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update formatter
157
+
158
+ - [#145](https://github.com/andreisergiu98/baeta/pull/145) [`08428d4`](https://github.com/andreisergiu98/baeta/commit/08428d4f03b79cab9c116ff7b3a3cf9a0b2620f2) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update dependencies
159
+
160
+ - Updated dependencies [[`01f3c20`](https://github.com/andreisergiu98/baeta/commit/01f3c20365539fad6e8a8694c59a8e86c95784e8), [`d538c79`](https://github.com/andreisergiu98/baeta/commit/d538c7905e6ba96d9f294e2d528f9252e83acbe7), [`08428d4`](https://github.com/andreisergiu98/baeta/commit/08428d4f03b79cab9c116ff7b3a3cf9a0b2620f2)]:
161
+ - @baeta/generator-sdk@0.1.0
162
+ - @baeta/util-path@0.1.0
163
+
164
+ ## 0.0.12
165
+
166
+ ### Patch Changes
167
+
168
+ - [#139](https://github.com/andreisergiu98/baeta/pull/139) [`00dbc8f`](https://github.com/andreisergiu98/baeta/commit/00dbc8f35839aaa6524a6c0125ff38a766e45be4) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update dependencies
169
+
170
+ - [#139](https://github.com/andreisergiu98/baeta/pull/139) [`00dbc8f`](https://github.com/andreisergiu98/baeta/commit/00dbc8f35839aaa6524a6c0125ff38a766e45be4) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update typescript
171
+
172
+ - Updated dependencies [[`00dbc8f`](https://github.com/andreisergiu98/baeta/commit/00dbc8f35839aaa6524a6c0125ff38a766e45be4), [`00dbc8f`](https://github.com/andreisergiu98/baeta/commit/00dbc8f35839aaa6524a6c0125ff38a766e45be4)]:
173
+ - @baeta/generator-sdk@0.0.14
174
+ - @baeta/util-path@0.0.6
175
+
176
+ ## 0.0.11
177
+
178
+ ### Patch Changes
179
+
180
+ - [#128](https://github.com/andreisergiu98/baeta/pull/128) [`534917a`](https://github.com/andreisergiu98/baeta/commit/534917a18e7ed5d788a90a0335a5370d6af8f4a4) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update dependencies
181
+
182
+ - Updated dependencies [[`534917a`](https://github.com/andreisergiu98/baeta/commit/534917a18e7ed5d788a90a0335a5370d6af8f4a4)]:
183
+ - @baeta/generator-sdk@0.0.13
184
+ - @baeta/util-path@0.0.5
185
+
186
+ ## 0.0.10
187
+
188
+ ### Patch Changes
189
+
190
+ - [#121](https://github.com/andreisergiu98/baeta/pull/121) [`ceae50d`](https://github.com/andreisergiu98/baeta/commit/ceae50d88e4e59b22c603637620f4fc6b28b2454) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - Update Node to v20
191
+
192
+ - [#51](https://github.com/andreisergiu98/baeta/pull/51) [`d94ee47`](https://github.com/andreisergiu98/baeta/commit/d94ee47bc485c541ff011290c4ac6ef0c145c83f) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - add native support for file monifications
193
+
194
+ - Updated dependencies [[`ceae50d`](https://github.com/andreisergiu98/baeta/commit/ceae50d88e4e59b22c603637620f4fc6b28b2454), [`d94ee47`](https://github.com/andreisergiu98/baeta/commit/d94ee47bc485c541ff011290c4ac6ef0c145c83f)]:
195
+ - @baeta/generator-sdk@0.0.12
196
+ - @baeta/util-path@0.0.4
197
+
198
+ ## 0.0.9
199
+
200
+ ### Patch Changes
201
+
202
+ - [#119](https://github.com/andreisergiu98/baeta/pull/119) [`643a2eb`](https://github.com/andreisergiu98/baeta/commit/643a2eb17c2789cd25361ddeede149a0e459e68a) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update dependencies
203
+
204
+ - Updated dependencies [[`18db339`](https://github.com/andreisergiu98/baeta/commit/18db339719aa309c619372d2161c5fdbc08fa316), [`643a2eb`](https://github.com/andreisergiu98/baeta/commit/643a2eb17c2789cd25361ddeede149a0e459e68a)]:
205
+ - @baeta/generator-sdk@0.0.11
206
+ - @baeta/util-path@0.0.3
207
+
208
+ ## 0.0.8
209
+
210
+ ### Patch Changes
211
+
212
+ - [#102](https://github.com/andreisergiu98/baeta/pull/102) [`c9e37fd`](https://github.com/andreisergiu98/baeta/commit/c9e37fd1d64588fd8eb63facd7eda08c0009470c) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update dependencies
213
+
214
+ - [#102](https://github.com/andreisergiu98/baeta/pull/102) [`c9e37fd`](https://github.com/andreisergiu98/baeta/commit/c9e37fd1d64588fd8eb63facd7eda08c0009470c) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update dependencies and builder
215
+
216
+ - [#106](https://github.com/andreisergiu98/baeta/pull/106) [`01788ab`](https://github.com/andreisergiu98/baeta/commit/01788ab04ff6956b2b50186af5bec8ed7ebbe76e) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - add compatibility with windows
217
+
218
+ - Updated dependencies [[`c9e37fd`](https://github.com/andreisergiu98/baeta/commit/c9e37fd1d64588fd8eb63facd7eda08c0009470c), [`c9e37fd`](https://github.com/andreisergiu98/baeta/commit/c9e37fd1d64588fd8eb63facd7eda08c0009470c), [`01788ab`](https://github.com/andreisergiu98/baeta/commit/01788ab04ff6956b2b50186af5bec8ed7ebbe76e)]:
219
+ - @baeta/generator-sdk@0.0.10
220
+ - @baeta/util-path@0.0.2
221
+
222
+ ## 0.0.7
223
+
224
+ ### Patch Changes
225
+
226
+ - [#81](https://github.com/andreisergiu98/baeta/pull/81) [`3ff5e54`](https://github.com/andreisergiu98/baeta/commit/3ff5e54f31cf42ba2264b12309338d6e78710722) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - add file transformation function from config
227
+
228
+ - [#69](https://github.com/andreisergiu98/baeta/pull/69) [`3cdd9b3`](https://github.com/andreisergiu98/baeta/commit/3cdd9b30369d21179769a4b8d5f76e326ae6db37) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update dependencies
229
+
230
+ - [#91](https://github.com/andreisergiu98/baeta/pull/91) [`e0944f6`](https://github.com/andreisergiu98/baeta/commit/e0944f6320e6cf2f0a3d2c9f51edd282bdce0546) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update dependencies
231
+
232
+ - Updated dependencies [[`3ff5e54`](https://github.com/andreisergiu98/baeta/commit/3ff5e54f31cf42ba2264b12309338d6e78710722), [`3cdd9b3`](https://github.com/andreisergiu98/baeta/commit/3cdd9b30369d21179769a4b8d5f76e326ae6db37), [`e0944f6`](https://github.com/andreisergiu98/baeta/commit/e0944f6320e6cf2f0a3d2c9f51edd282bdce0546)]:
233
+ - @baeta/generator-sdk@0.0.9
234
+
235
+ ## 0.0.6
236
+
237
+ ### Patch Changes
238
+
239
+ - [#66](https://github.com/andreisergiu98/baeta/pull/66) [`9a4a021`](https://github.com/andreisergiu98/baeta/commit/9a4a0214351b70295ce4f7eecaa8c49ab0e1325b) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - replace chokidar with @parcel/watcher
240
+
241
+ - Updated dependencies [[`9a4a021`](https://github.com/andreisergiu98/baeta/commit/9a4a0214351b70295ce4f7eecaa8c49ab0e1325b)]:
242
+ - @baeta/generator-sdk@0.0.8
243
+
244
+ ## 0.0.5
245
+
246
+ ### Patch Changes
247
+
248
+ - Updated dependencies []:
249
+ - @baeta/generator-sdk@0.0.7
250
+
251
+ ## 0.0.4
252
+
253
+ ### Patch Changes
254
+
255
+ - [#47](https://github.com/andreisergiu98/baeta/pull/47) [`eb7096d`](https://github.com/andreisergiu98/baeta/commit/eb7096d42a53b17bae0a8365eccb795e7ded02e9) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - update dependencies
256
+
257
+ - [#43](https://github.com/andreisergiu98/baeta/pull/43) [`670501b`](https://github.com/andreisergiu98/baeta/commit/670501b2b1cfb1126be3421293b8ccd597c6ffc2) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - bump dependencies
258
+
259
+ - Updated dependencies [[`eb7096d`](https://github.com/andreisergiu98/baeta/commit/eb7096d42a53b17bae0a8365eccb795e7ded02e9), [`670501b`](https://github.com/andreisergiu98/baeta/commit/670501b2b1cfb1126be3421293b8ccd597c6ffc2)]:
260
+ - @baeta/generator-sdk@0.0.6
261
+
262
+ ## 0.0.3
263
+
264
+ ### Patch Changes
265
+
266
+ - [`8569eca`](https://github.com/andreisergiu98/baeta/commit/8569ecaf263e24f8d17f62ea00a0cd374dd27941) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - add final new line
267
+
268
+ - [#31](https://github.com/andreisergiu98/baeta/pull/31) [`f122a1e`](https://github.com/andreisergiu98/baeta/commit/f122a1e2970d915ce3c24931d4309db26665c739) Thanks [@andreisergiu98](https://github.com/andreisergiu98)! - ignore generated sdl
269
+
270
+ ## 0.0.2
271
+
272
+ ### Patch Changes
273
+
274
+ - Updated dependencies [[`9f937f4`](https://github.com/andreisergiu98/baeta/commit/9f937f47d3464a082680047414ee13a76cf6c056), [`9f937f4`](https://github.com/andreisergiu98/baeta/commit/9f937f47d3464a082680047414ee13a76cf6c056)]:
275
+ - @baeta/generator-sdk@0.0.5
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.0",
3
+ "version": "2.0.0-next.10",
4
4
  "keywords": [
5
5
  "baeta",
6
6
  "graphql",
@@ -27,8 +27,8 @@
27
27
  "type": "module",
28
28
  "exports": {
29
29
  ".": {
30
- "types": "./index.ts",
31
- "default": "./index.ts"
30
+ "types": "./dist/index.d.ts",
31
+ "default": "./dist/index.js"
32
32
  }
33
33
  },
34
34
  "types": "dist/index.d.ts",
@@ -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": "workspace:^",
47
- "@baeta/util-path": "workspace:^"
53
+ "@baeta/generator-sdk": "^2.0.0-next.4",
54
+ "@baeta/util-path": "^2.0.0-next.3"
48
55
  },
49
56
  "devDependencies": {
50
- "@baeta/builder": "workspace:^",
51
- "@baeta/tsconfig": "workspace:^",
52
- "@types/node": "^22.18.11",
53
- "graphql": "^16.11.0",
57
+ "@baeta/builder": "^0.0.0",
58
+ "@baeta/testing": "^0.0.0",
59
+ "@baeta/tsconfig": "^0.0.0",
60
+ "@types/node": "^22.19.1",
61
+ "graphql": "^16.12.0",
54
62
  "typescript": "^5.9.3"
55
63
  },
56
64
  "peerDependencies": {
@@ -81,4 +89,4 @@
81
89
  "alphabetical-ignoring-documents"
82
90
  ]
83
91
  }
84
- }
92
+ }