@longzai-intelligence/pagination 0.0.1 → 0.0.2

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.
Files changed (70) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/.turbo/turbo-test$colon$coverage.log +6 -6
  3. package/.turbo/turbo-test.log +7 -7
  4. package/CHANGELOG.md +7 -0
  5. package/README.md +5 -1
  6. package/coverage/coverage-final.json +6 -2
  7. package/coverage/index.html +19 -4
  8. package/coverage/src/adapters/index.html +1 -16
  9. package/coverage/src/adapters/typeorm.adapter.ts.html +1 -1
  10. package/coverage/src/index.html +16 -1
  11. package/coverage/src/index.ts.html +38 -11
  12. package/coverage/src/schemas/index.html +161 -0
  13. package/coverage/src/{adapters → schemas}/index.ts.html +61 -10
  14. package/coverage/src/schemas/pagination.schemas.ts.html +343 -0
  15. package/coverage/src/schemas/result.schemas.ts.html +724 -0
  16. package/coverage/src/schemas/sort.schemas.ts.html +544 -0
  17. package/coverage/src/typeorm.ts.html +154 -0
  18. package/coverage/src/types/index.html +1 -1
  19. package/coverage/src/types/index.ts.html +69 -3
  20. package/coverage/src/types/pagination.types.ts.html +15 -138
  21. package/coverage/src/types/result.types.ts.html +11 -299
  22. package/coverage/src/types/sort.types.ts.html +16 -139
  23. package/coverage/src/types/typeorm.d.ts.html +1 -1
  24. package/coverage/src/utils/index.html +1 -1
  25. package/coverage/src/utils/index.ts.html +1 -1
  26. package/coverage/src/utils/pagination.util.ts.html +1 -1
  27. package/coverage/src/utils/validation.util.ts.html +1 -1
  28. package/dist/index-C8FaNzej.d.mts +145 -0
  29. package/dist/index-CMiyhlfm.d.cts +145 -0
  30. package/dist/index.cjs +33 -1
  31. package/dist/index.d.cts +2 -81
  32. package/dist/index.d.mts +2 -81
  33. package/dist/index.mjs +1 -1
  34. package/dist/typeorm.cjs +129 -0
  35. package/dist/typeorm.d.cts +26 -0
  36. package/dist/typeorm.d.mts +26 -0
  37. package/dist/typeorm.mjs +1 -0
  38. package/dist/utils-CV6Ovku6.mjs +1 -0
  39. package/dist/utils-D_qD2YAX.cjs +1 -0
  40. package/docs/specs/spec-20260413-typeorm-subpath-export/checklist.md +33 -0
  41. package/docs/specs/spec-20260413-typeorm-subpath-export/spec.md +104 -0
  42. package/docs/specs/spec-20260413-typeorm-subpath-export/tasks.md +48 -0
  43. package/package.json +15 -3
  44. package/src/__tests__/index.test.ts +9 -3
  45. package/src/__tests__/pagination.util.test.ts +0 -2
  46. package/src/__tests__/result.schemas.test.ts +142 -0
  47. package/src/__tests__/sort.schemas.test.ts +157 -0
  48. package/src/__tests__/typeorm.adapter.test.ts +1 -3
  49. package/src/__tests__/validation.util.test.ts +0 -2
  50. package/src/adapters/{typeorm.adapter.ts → typeorm/adapter.ts} +10 -92
  51. package/src/adapters/typeorm/index.ts +23 -0
  52. package/src/adapters/typeorm/types.ts +95 -0
  53. package/src/index.ts +18 -9
  54. package/src/schemas/index.ts +28 -0
  55. package/src/schemas/pagination.schemas.ts +86 -0
  56. package/src/schemas/result.schemas.ts +213 -0
  57. package/src/schemas/sort.schemas.ts +153 -0
  58. package/src/typeorm.ts +23 -0
  59. package/src/types/index.ts +23 -1
  60. package/src/types/pagination.types.ts +13 -54
  61. package/src/types/result.types.ts +9 -105
  62. package/src/types/sort.types.ts +14 -55
  63. package/tsconfig/.cache/app.tsbuildinfo +1 -1
  64. package/tsconfig/.cache/node.tsbuildinfo +1 -1
  65. package/tsconfig/.cache/test.tsbuildinfo +1 -1
  66. package/tsconfig/app.json +4 -1
  67. package/tsdown.config.ts +10 -3
  68. package/src/adapters/index.ts +0 -11
  69. package/tsconfig/.cache/build.tsbuildinfo +0 -1
  70. /package/src/{types → adapters/typeorm}/typeorm.d.ts +0 -0
@@ -77,199 +77,7 @@
77
77
  <a name='L12'></a><a href='#L12'>12</a>
78
78
  <a name='L13'></a><a href='#L13'>13</a>
79
79
  <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
177
- <span class="cline-any cline-neutral">&nbsp;</span>
178
- <span class="cline-any cline-neutral">&nbsp;</span>
179
- <span class="cline-any cline-neutral">&nbsp;</span>
180
- <span class="cline-any cline-neutral">&nbsp;</span>
181
- <span class="cline-any cline-neutral">&nbsp;</span>
182
- <span class="cline-any cline-neutral">&nbsp;</span>
183
- <span class="cline-any cline-neutral">&nbsp;</span>
184
- <span class="cline-any cline-neutral">&nbsp;</span>
185
- <span class="cline-any cline-neutral">&nbsp;</span>
186
- <span class="cline-any cline-neutral">&nbsp;</span>
187
- <span class="cline-any cline-neutral">&nbsp;</span>
188
- <span class="cline-any cline-neutral">&nbsp;</span>
189
- <span class="cline-any cline-neutral">&nbsp;</span>
190
- <span class="cline-any cline-neutral">&nbsp;</span>
191
- <span class="cline-any cline-neutral">&nbsp;</span>
192
- <span class="cline-any cline-neutral">&nbsp;</span>
193
- <span class="cline-any cline-neutral">&nbsp;</span>
194
- <span class="cline-any cline-neutral">&nbsp;</span>
195
- <span class="cline-any cline-neutral">&nbsp;</span>
196
- <span class="cline-any cline-neutral">&nbsp;</span>
197
- <span class="cline-any cline-neutral">&nbsp;</span>
198
- <span class="cline-any cline-neutral">&nbsp;</span>
199
- <span class="cline-any cline-neutral">&nbsp;</span>
200
- <span class="cline-any cline-neutral">&nbsp;</span>
201
- <span class="cline-any cline-neutral">&nbsp;</span>
202
- <span class="cline-any cline-neutral">&nbsp;</span>
203
- <span class="cline-any cline-neutral">&nbsp;</span>
204
- <span class="cline-any cline-neutral">&nbsp;</span>
205
- <span class="cline-any cline-neutral">&nbsp;</span>
206
- <span class="cline-any cline-neutral">&nbsp;</span>
207
- <span class="cline-any cline-neutral">&nbsp;</span>
208
- <span class="cline-any cline-neutral">&nbsp;</span>
209
- <span class="cline-any cline-neutral">&nbsp;</span>
210
- <span class="cline-any cline-neutral">&nbsp;</span>
211
- <span class="cline-any cline-neutral">&nbsp;</span>
212
- <span class="cline-any cline-neutral">&nbsp;</span>
213
- <span class="cline-any cline-neutral">&nbsp;</span>
214
- <span class="cline-any cline-neutral">&nbsp;</span>
215
- <span class="cline-any cline-neutral">&nbsp;</span>
216
- <span class="cline-any cline-neutral">&nbsp;</span>
217
- <span class="cline-any cline-neutral">&nbsp;</span>
218
- <span class="cline-any cline-neutral">&nbsp;</span>
219
- <span class="cline-any cline-neutral">&nbsp;</span>
220
- <span class="cline-any cline-neutral">&nbsp;</span>
221
- <span class="cline-any cline-neutral">&nbsp;</span>
222
- <span class="cline-any cline-neutral">&nbsp;</span>
223
- <span class="cline-any cline-neutral">&nbsp;</span>
224
- <span class="cline-any cline-neutral">&nbsp;</span>
225
- <span class="cline-any cline-neutral">&nbsp;</span>
226
- <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-neutral">&nbsp;</span>
228
- <span class="cline-any cline-neutral">&nbsp;</span>
229
- <span class="cline-any cline-neutral">&nbsp;</span>
230
- <span class="cline-any cline-neutral">&nbsp;</span>
231
- <span class="cline-any cline-neutral">&nbsp;</span>
232
- <span class="cline-any cline-neutral">&nbsp;</span>
233
- <span class="cline-any cline-neutral">&nbsp;</span>
234
- <span class="cline-any cline-neutral">&nbsp;</span>
235
- <span class="cline-any cline-neutral">&nbsp;</span>
236
- <span class="cline-any cline-neutral">&nbsp;</span>
237
- <span class="cline-any cline-neutral">&nbsp;</span>
238
- <span class="cline-any cline-neutral">&nbsp;</span>
239
- <span class="cline-any cline-neutral">&nbsp;</span>
240
- <span class="cline-any cline-neutral">&nbsp;</span>
241
- <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-neutral">&nbsp;</span>
243
- <span class="cline-any cline-neutral">&nbsp;</span>
244
- <span class="cline-any cline-neutral">&nbsp;</span>
245
- <span class="cline-any cline-neutral">&nbsp;</span>
246
- <span class="cline-any cline-neutral">&nbsp;</span>
247
- <span class="cline-any cline-neutral">&nbsp;</span>
248
- <span class="cline-any cline-neutral">&nbsp;</span>
249
- <span class="cline-any cline-neutral">&nbsp;</span>
250
- <span class="cline-any cline-neutral">&nbsp;</span>
251
- <span class="cline-any cline-neutral">&nbsp;</span>
252
- <span class="cline-any cline-neutral">&nbsp;</span>
253
- <span class="cline-any cline-neutral">&nbsp;</span>
254
- <span class="cline-any cline-neutral">&nbsp;</span>
255
- <span class="cline-any cline-neutral">&nbsp;</span>
256
- <span class="cline-any cline-neutral">&nbsp;</span>
257
- <span class="cline-any cline-neutral">&nbsp;</span>
258
- <span class="cline-any cline-neutral">&nbsp;</span>
259
- <span class="cline-any cline-neutral">&nbsp;</span>
260
- <span class="cline-any cline-neutral">&nbsp;</span>
261
- <span class="cline-any cline-neutral">&nbsp;</span>
262
- <span class="cline-any cline-neutral">&nbsp;</span>
263
- <span class="cline-any cline-neutral">&nbsp;</span>
264
- <span class="cline-any cline-neutral">&nbsp;</span>
265
- <span class="cline-any cline-neutral">&nbsp;</span>
266
- <span class="cline-any cline-neutral">&nbsp;</span>
267
- <span class="cline-any cline-neutral">&nbsp;</span>
268
- <span class="cline-any cline-neutral">&nbsp;</span>
269
- <span class="cline-any cline-neutral">&nbsp;</span>
270
- <span class="cline-any cline-neutral">&nbsp;</span>
271
- <span class="cline-any cline-neutral">&nbsp;</span>
272
- <span class="cline-any cline-neutral">&nbsp;</span>
80
+ <a name='L15'></a><a href='#L15'>15</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
273
81
  <span class="cline-any cline-neutral">&nbsp;</span>
274
82
  <span class="cline-any cline-neutral">&nbsp;</span>
275
83
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -285,114 +93,18 @@
285
93
  <span class="cline-any cline-neutral">&nbsp;</span>
286
94
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
287
95
  * 分页结果类型定义
288
- */
289
- &nbsp;
290
- /**
291
- * 分页结果
292
96
  *
293
- * 包含分页数据和分页信息的完整结果
294
- *
295
- * @typeParam T - 数据项类型
97
+ * 类型从 zod schemas 推导导出
296
98
  */
297
- export type PaginatedResult&lt;T&gt; = {
298
- /**
299
- * 数据项数组
300
- */
301
- items: T[];
302
- &nbsp;
303
- /**
304
- * 总记录数
305
- */
306
- total: number;
307
- &nbsp;
308
- /**
309
- * 当前页码
310
- */
311
- page: number;
312
- &nbsp;
313
- /**
314
- * 每页数量
315
- */
316
- pageSize: number;
317
- &nbsp;
318
- /**
319
- * 总页数
320
- */
321
- totalPages: number;
322
- &nbsp;
323
- /**
324
- * 是否有下一页
325
- */
326
- hasNextPage: boolean;
327
- &nbsp;
328
- /**
329
- * 是否有上一页
330
- */
331
- hasPreviousPage: boolean;
332
- };
333
- &nbsp;
334
- /**
335
- * Offset 风格分页结果
336
- *
337
- * 包含偏移量分页数据和分页信息
338
- *
339
- * @typeParam T - 数据项类型
340
- */
341
- export type OffsetPaginatedResult&lt;T&gt; = {
342
- /**
343
- * 数据项数组
344
- */
345
- items: T[];
346
- &nbsp;
347
- /**
348
- * 总记录数
349
- */
350
- total: number;
351
- &nbsp;
352
- /**
353
- * 限制数量
354
- */
355
- limit: number;
356
- &nbsp;
357
- /**
358
- * 偏移量
359
- */
360
- offset: number;
361
- &nbsp;
362
- /**
363
- * 是否有更多数据
364
- */
365
- hasMore: boolean;
366
- };
367
- &nbsp;
368
- /**
369
- * 游标分页结果
370
- *
371
- * 包含游标分页数据和分页信息
372
- *
373
- * @typeParam T - 数据项类型
374
- */
375
- export type CursorPaginatedResult&lt;T&gt; = {
376
- /**
377
- * 数据项数组
378
- */
379
- items: T[];
380
- &nbsp;
381
- /**
382
- * 下一页游标
383
- */
384
- nextCursor: string | null;
385
- &nbsp;
386
- /**
387
- * 上一页游标
388
- */
389
- previousCursor: string | null;
390
99
  &nbsp;
391
- /**
392
- * 是否有更多数据
393
- */
394
- hasMore: boolean;
395
- };
100
+ export {
101
+ createPaginatedResultSchema,
102
+ createOffsetPaginatedResultSchema,
103
+ createCursorPaginatedResultSchema,
104
+ type PaginatedResult,
105
+ type OffsetPaginatedResult,
106
+ type CursorPaginatedResult,
107
+ } from '../schemas/result.schemas';
396
108
  &nbsp;</pre></td></tr></table></pre>
397
109
 
398
110
  <div class='push'></div><!-- for sticky footer -->
@@ -400,7 +112,7 @@ export type CursorPaginatedResult&lt;T&gt; = {
400
112
  <div class='footer quiet pad2 space-top1 center small'>
401
113
  Code coverage generated by
402
114
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
403
- at 2026-04-09T17:27:15.194Z
115
+ at 2026-04-12T21:41:37.775Z
404
116
  </div>
405
117
  <script src="../../prettify.js"></script>
406
118
  <script>
@@ -82,89 +82,7 @@
82
82
  <a name='L17'></a><a href='#L17'>17</a>
83
83
  <a name='L18'></a><a href='#L18'>18</a>
84
84
  <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
127
- <span class="cline-any cline-neutral">&nbsp;</span>
128
- <span class="cline-any cline-neutral">&nbsp;</span>
129
- <span class="cline-any cline-neutral">&nbsp;</span>
130
- <span class="cline-any cline-neutral">&nbsp;</span>
131
- <span class="cline-any cline-neutral">&nbsp;</span>
132
- <span class="cline-any cline-neutral">&nbsp;</span>
133
- <span class="cline-any cline-neutral">&nbsp;</span>
134
- <span class="cline-any cline-neutral">&nbsp;</span>
135
- <span class="cline-any cline-neutral">&nbsp;</span>
136
- <span class="cline-any cline-neutral">&nbsp;</span>
137
- <span class="cline-any cline-neutral">&nbsp;</span>
138
- <span class="cline-any cline-neutral">&nbsp;</span>
139
- <span class="cline-any cline-neutral">&nbsp;</span>
140
- <span class="cline-any cline-neutral">&nbsp;</span>
141
- <span class="cline-any cline-neutral">&nbsp;</span>
142
- <span class="cline-any cline-neutral">&nbsp;</span>
143
- <span class="cline-any cline-neutral">&nbsp;</span>
144
- <span class="cline-any cline-neutral">&nbsp;</span>
145
- <span class="cline-any cline-neutral">&nbsp;</span>
146
- <span class="cline-any cline-neutral">&nbsp;</span>
147
- <span class="cline-any cline-neutral">&nbsp;</span>
148
- <span class="cline-any cline-neutral">&nbsp;</span>
149
- <span class="cline-any cline-neutral">&nbsp;</span>
150
- <span class="cline-any cline-neutral">&nbsp;</span>
151
- <span class="cline-any cline-neutral">&nbsp;</span>
152
- <span class="cline-any cline-neutral">&nbsp;</span>
153
- <span class="cline-any cline-neutral">&nbsp;</span>
154
- <span class="cline-any cline-neutral">&nbsp;</span>
155
- <span class="cline-any cline-neutral">&nbsp;</span>
156
- <span class="cline-any cline-neutral">&nbsp;</span>
157
- <span class="cline-any cline-neutral">&nbsp;</span>
158
- <span class="cline-any cline-neutral">&nbsp;</span>
159
- <span class="cline-any cline-neutral">&nbsp;</span>
160
- <span class="cline-any cline-neutral">&nbsp;</span>
161
- <span class="cline-any cline-neutral">&nbsp;</span>
162
- <span class="cline-any cline-neutral">&nbsp;</span>
163
- <span class="cline-any cline-neutral">&nbsp;</span>
164
- <span class="cline-any cline-neutral">&nbsp;</span>
165
- <span class="cline-any cline-neutral">&nbsp;</span>
166
- <span class="cline-any cline-neutral">&nbsp;</span>
167
- <span class="cline-any cline-neutral">&nbsp;</span>
85
+ <a name='L20'></a><a href='#L20'>20</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
168
86
  <span class="cline-any cline-neutral">&nbsp;</span>
169
87
  <span class="cline-any cline-neutral">&nbsp;</span>
170
88
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -185,64 +103,23 @@
185
103
  <span class="cline-any cline-neutral">&nbsp;</span>
186
104
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
187
105
  * 排序类型定义
188
- */
189
- &nbsp;
190
- /**
191
- * 排序方向
192
- */
193
- export type SortOrder = 'asc' | 'desc';
194
- &nbsp;
195
- /**
196
- * 排序参数
197
- *
198
- * 单字段排序参数
199
106
  *
200
- * @typeParam T - 排序字段类型
107
+ * 类型从 zod schemas 推导导出
201
108
  */
202
- export type SortParams&lt;T extends string = string&gt; = {
203
- /**
204
- * 排序字段
205
- */
206
- sortBy?: T;
207
109
  &nbsp;
208
- /**
209
- * 排序方向
210
- */
211
- sortOrder?: SortOrder;
212
- };
213
- &nbsp;
214
- /**
215
- * 多字段排序项
216
- *
217
- * 单个排序项定义
218
- *
219
- * @typeParam T - 排序字段类型
220
- */
221
- export type SortItem&lt;T extends string = string&gt; = {
222
- /**
223
- * 排序字段
224
- */
225
- field: T;
226
- &nbsp;
227
- /**
228
- * 排序方向
229
- */
230
- order: SortOrder;
231
- };
232
- &nbsp;
233
- /**
234
- * 多字段排序参数
235
- *
236
- * 支持多个字段的排序
237
- *
238
- * @typeParam T - 排序字段类型
239
- */
240
- export type MultiSortParams&lt;T extends string = string&gt; = {
241
- /**
242
- * 排序项数组
243
- */
244
- sort?: SortItem&lt;T&gt;[];
245
- };
110
+ export {
111
+ SortOrderSchema,
112
+ SortParamsSchema,
113
+ SortItemSchema,
114
+ MultiSortParamsSchema,
115
+ createSortParamsSchema,
116
+ createSortItemSchema,
117
+ createMultiSortParamsSchema,
118
+ type SortOrder,
119
+ type SortParams,
120
+ type SortItem,
121
+ type MultiSortParams,
122
+ } from '../schemas/sort.schemas';
246
123
  &nbsp;</pre></td></tr></table></pre>
247
124
 
248
125
  <div class='push'></div><!-- for sticky footer -->
@@ -250,7 +127,7 @@ export type MultiSortParams&lt;T extends string = string&gt; = {
250
127
  <div class='footer quiet pad2 space-top1 center small'>
251
128
  Code coverage generated by
252
129
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
253
- at 2026-04-09T17:27:15.194Z
130
+ at 2026-04-12T21:41:37.775Z
254
131
  </div>
255
132
  <script src="../../prettify.js"></script>
256
133
  <script>
@@ -181,7 +181,7 @@ declare module 'typeorm' {
181
181
  <div class='footer quiet pad2 space-top1 center small'>
182
182
  Code coverage generated by
183
183
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
184
- at 2026-04-09T17:27:15.194Z
184
+ at 2026-04-12T21:41:37.775Z
185
185
  </div>
186
186
  <script src="../../prettify.js"></script>
187
187
  <script>
@@ -131,7 +131,7 @@
131
131
  <div class='footer quiet pad2 space-top1 center small'>
132
132
  Code coverage generated by
133
133
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
134
- at 2026-04-09T17:27:15.194Z
134
+ at 2026-04-12T21:41:37.775Z
135
135
  </div>
136
136
  <script src="../../prettify.js"></script>
137
137
  <script>
@@ -163,7 +163,7 @@ export {
163
163
  <div class='footer quiet pad2 space-top1 center small'>
164
164
  Code coverage generated by
165
165
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
166
- at 2026-04-09T17:27:15.194Z
166
+ at 2026-04-12T21:41:37.775Z
167
167
  </div>
168
168
  <script src="../../prettify.js"></script>
169
169
  <script>
@@ -688,7 +688,7 @@ export function createPaginatedResult&lt;T&gt;(
688
688
  <div class='footer quiet pad2 space-top1 center small'>
689
689
  Code coverage generated by
690
690
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
691
- at 2026-04-09T17:27:15.194Z
691
+ at 2026-04-12T21:41:37.775Z
692
692
  </div>
693
693
  <script src="../../prettify.js"></script>
694
694
  <script>
@@ -520,7 +520,7 @@ export function isValidOffsetPagination(
520
520
  <div class='footer quiet pad2 space-top1 center small'>
521
521
  Code coverage generated by
522
522
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
523
- at 2026-04-09T17:27:15.194Z
523
+ at 2026-04-12T21:41:37.775Z
524
524
  </div>
525
525
  <script src="../../prettify.js"></script>
526
526
  <script>