@longzai-intelligence/pagination 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +22 -0
- package/.turbo/turbo-lint.log +1 -0
- package/.turbo/turbo-test$colon$coverage.log +36 -0
- package/.turbo/turbo-test.log +14 -0
- package/.turbo/turbo-typecheck.log +4 -0
- package/CHANGELOG.md +11 -0
- package/README.md +218 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/coverage-final.json +12 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +161 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/coverage/src/adapters/index.html +131 -0
- package/coverage/src/adapters/index.ts.html +118 -0
- package/coverage/src/adapters/typeorm.adapter.ts.html +940 -0
- package/coverage/src/index.html +116 -0
- package/coverage/src/index.ts.html +253 -0
- package/coverage/src/types/index.html +176 -0
- package/coverage/src/types/index.ts.html +133 -0
- package/coverage/src/types/pagination.types.ts.html +292 -0
- package/coverage/src/types/result.types.ts.html +415 -0
- package/coverage/src/types/sort.types.ts.html +265 -0
- package/coverage/src/types/typeorm.d.ts.html +196 -0
- package/coverage/src/utils/index.html +146 -0
- package/coverage/src/utils/index.ts.html +178 -0
- package/coverage/src/utils/pagination.util.ts.html +703 -0
- package/coverage/src/utils/validation.util.ts.html +535 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +117 -0
- package/dist/index.d.mts +117 -0
- package/dist/index.mjs +1 -0
- package/eslint.config.ts +3 -0
- package/package.json +62 -0
- package/src/__tests__/index.test.ts +66 -0
- package/src/__tests__/pagination.util.test.ts +253 -0
- package/src/__tests__/typeorm.adapter.test.ts +214 -0
- package/src/__tests__/validation.util.test.ts +122 -0
- package/src/adapters/index.ts +11 -0
- package/src/adapters/typeorm.adapter.ts +285 -0
- package/src/index.ts +56 -0
- package/src/types/index.ts +16 -0
- package/src/types/pagination.types.ts +69 -0
- package/src/types/result.types.ts +110 -0
- package/src/types/sort.types.ts +60 -0
- package/src/types/typeorm.d.ts +37 -0
- package/src/utils/index.ts +31 -0
- package/src/utils/pagination.util.ts +206 -0
- package/src/utils/validation.util.ts +150 -0
- package/tsconfig/.cache/app.tsbuildinfo +1 -0
- package/tsconfig/.cache/build.tsbuildinfo +1 -0
- package/tsconfig/.cache/node.tsbuildinfo +1 -0
- package/tsconfig/.cache/test.tsbuildinfo +1 -0
- package/tsconfig/app.json +12 -0
- package/tsconfig/node.json +11 -0
- package/tsconfig/test.json +14 -0
- package/tsconfig.json +9 -0
- package/tsdown.config.ts +6 -0
- package/vitest.config.ts +3 -0
|
@@ -0,0 +1,535 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/utils/validation.util.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../index.html">All files</a> / <a href="index.html">src/utils</a> validation.util.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">100% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>15/15</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">100% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>28/28</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>7/7</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">100% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>15/15</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
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>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
217
|
+
<span class="cline-any cline-neutral"> </span>
|
|
218
|
+
<span class="cline-any cline-neutral"> </span>
|
|
219
|
+
<span class="cline-any cline-neutral"> </span>
|
|
220
|
+
<span class="cline-any cline-neutral"> </span>
|
|
221
|
+
<span class="cline-any cline-neutral"> </span>
|
|
222
|
+
<span class="cline-any cline-neutral"> </span>
|
|
223
|
+
<span class="cline-any cline-neutral"> </span>
|
|
224
|
+
<span class="cline-any cline-neutral"> </span>
|
|
225
|
+
<span class="cline-any cline-neutral"> </span>
|
|
226
|
+
<span class="cline-any cline-neutral"> </span>
|
|
227
|
+
<span class="cline-any cline-neutral"> </span>
|
|
228
|
+
<span class="cline-any cline-neutral"> </span>
|
|
229
|
+
<span class="cline-any cline-yes">20x</span>
|
|
230
|
+
<span class="cline-any cline-neutral"> </span>
|
|
231
|
+
<span class="cline-any cline-neutral"> </span>
|
|
232
|
+
<span class="cline-any cline-neutral"> </span>
|
|
233
|
+
<span class="cline-any cline-neutral"> </span>
|
|
234
|
+
<span class="cline-any cline-neutral"> </span>
|
|
235
|
+
<span class="cline-any cline-neutral"> </span>
|
|
236
|
+
<span class="cline-any cline-neutral"> </span>
|
|
237
|
+
<span class="cline-any cline-neutral"> </span>
|
|
238
|
+
<span class="cline-any cline-neutral"> </span>
|
|
239
|
+
<span class="cline-any cline-neutral"> </span>
|
|
240
|
+
<span class="cline-any cline-neutral"> </span>
|
|
241
|
+
<span class="cline-any cline-neutral"> </span>
|
|
242
|
+
<span class="cline-any cline-neutral"> </span>
|
|
243
|
+
<span class="cline-any cline-neutral"> </span>
|
|
244
|
+
<span class="cline-any cline-neutral"> </span>
|
|
245
|
+
<span class="cline-any cline-neutral"> </span>
|
|
246
|
+
<span class="cline-any cline-neutral"> </span>
|
|
247
|
+
<span class="cline-any cline-neutral"> </span>
|
|
248
|
+
<span class="cline-any cline-neutral"> </span>
|
|
249
|
+
<span class="cline-any cline-neutral"> </span>
|
|
250
|
+
<span class="cline-any cline-neutral"> </span>
|
|
251
|
+
<span class="cline-any cline-neutral"> </span>
|
|
252
|
+
<span class="cline-any cline-neutral"> </span>
|
|
253
|
+
<span class="cline-any cline-neutral"> </span>
|
|
254
|
+
<span class="cline-any cline-neutral"> </span>
|
|
255
|
+
<span class="cline-any cline-neutral"> </span>
|
|
256
|
+
<span class="cline-any cline-neutral"> </span>
|
|
257
|
+
<span class="cline-any cline-neutral"> </span>
|
|
258
|
+
<span class="cline-any cline-neutral"> </span>
|
|
259
|
+
<span class="cline-any cline-neutral"> </span>
|
|
260
|
+
<span class="cline-any cline-neutral"> </span>
|
|
261
|
+
<span class="cline-any cline-neutral"> </span>
|
|
262
|
+
<span class="cline-any cline-neutral"> </span>
|
|
263
|
+
<span class="cline-any cline-neutral"> </span>
|
|
264
|
+
<span class="cline-any cline-neutral"> </span>
|
|
265
|
+
<span class="cline-any cline-neutral"> </span>
|
|
266
|
+
<span class="cline-any cline-neutral"> </span>
|
|
267
|
+
<span class="cline-any cline-neutral"> </span>
|
|
268
|
+
<span class="cline-any cline-neutral"> </span>
|
|
269
|
+
<span class="cline-any cline-yes">14x</span>
|
|
270
|
+
<span class="cline-any cline-neutral"> </span>
|
|
271
|
+
<span class="cline-any cline-neutral"> </span>
|
|
272
|
+
<span class="cline-any cline-neutral"> </span>
|
|
273
|
+
<span class="cline-any cline-neutral"> </span>
|
|
274
|
+
<span class="cline-any cline-neutral"> </span>
|
|
275
|
+
<span class="cline-any cline-neutral"> </span>
|
|
276
|
+
<span class="cline-any cline-neutral"> </span>
|
|
277
|
+
<span class="cline-any cline-neutral"> </span>
|
|
278
|
+
<span class="cline-any cline-neutral"> </span>
|
|
279
|
+
<span class="cline-any cline-yes">13x</span>
|
|
280
|
+
<span class="cline-any cline-neutral"> </span>
|
|
281
|
+
<span class="cline-any cline-neutral"> </span>
|
|
282
|
+
<span class="cline-any cline-neutral"> </span>
|
|
283
|
+
<span class="cline-any cline-neutral"> </span>
|
|
284
|
+
<span class="cline-any cline-neutral"> </span>
|
|
285
|
+
<span class="cline-any cline-neutral"> </span>
|
|
286
|
+
<span class="cline-any cline-neutral"> </span>
|
|
287
|
+
<span class="cline-any cline-neutral"> </span>
|
|
288
|
+
<span class="cline-any cline-neutral"> </span>
|
|
289
|
+
<span class="cline-any cline-neutral"> </span>
|
|
290
|
+
<span class="cline-any cline-neutral"> </span>
|
|
291
|
+
<span class="cline-any cline-neutral"> </span>
|
|
292
|
+
<span class="cline-any cline-neutral"> </span>
|
|
293
|
+
<span class="cline-any cline-neutral"> </span>
|
|
294
|
+
<span class="cline-any cline-yes">11x</span>
|
|
295
|
+
<span class="cline-any cline-neutral"> </span>
|
|
296
|
+
<span class="cline-any cline-neutral"> </span>
|
|
297
|
+
<span class="cline-any cline-neutral"> </span>
|
|
298
|
+
<span class="cline-any cline-neutral"> </span>
|
|
299
|
+
<span class="cline-any cline-neutral"> </span>
|
|
300
|
+
<span class="cline-any cline-neutral"> </span>
|
|
301
|
+
<span class="cline-any cline-neutral"> </span>
|
|
302
|
+
<span class="cline-any cline-neutral"> </span>
|
|
303
|
+
<span class="cline-any cline-neutral"> </span>
|
|
304
|
+
<span class="cline-any cline-yes">14x</span>
|
|
305
|
+
<span class="cline-any cline-neutral"> </span>
|
|
306
|
+
<span class="cline-any cline-neutral"> </span>
|
|
307
|
+
<span class="cline-any cline-neutral"> </span>
|
|
308
|
+
<span class="cline-any cline-neutral"> </span>
|
|
309
|
+
<span class="cline-any cline-neutral"> </span>
|
|
310
|
+
<span class="cline-any cline-neutral"> </span>
|
|
311
|
+
<span class="cline-any cline-neutral"> </span>
|
|
312
|
+
<span class="cline-any cline-neutral"> </span>
|
|
313
|
+
<span class="cline-any cline-neutral"> </span>
|
|
314
|
+
<span class="cline-any cline-neutral"> </span>
|
|
315
|
+
<span class="cline-any cline-neutral"> </span>
|
|
316
|
+
<span class="cline-any cline-neutral"> </span>
|
|
317
|
+
<span class="cline-any cline-neutral"> </span>
|
|
318
|
+
<span class="cline-any cline-neutral"> </span>
|
|
319
|
+
<span class="cline-any cline-yes">10x</span>
|
|
320
|
+
<span class="cline-any cline-yes">3x</span>
|
|
321
|
+
<span class="cline-any cline-neutral"> </span>
|
|
322
|
+
<span class="cline-any cline-neutral"> </span>
|
|
323
|
+
<span class="cline-any cline-neutral"> </span>
|
|
324
|
+
<span class="cline-any cline-neutral"> </span>
|
|
325
|
+
<span class="cline-any cline-neutral"> </span>
|
|
326
|
+
<span class="cline-any cline-yes">7x</span>
|
|
327
|
+
<span class="cline-any cline-neutral"> </span>
|
|
328
|
+
<span class="cline-any cline-neutral"> </span>
|
|
329
|
+
<span class="cline-any cline-neutral"> </span>
|
|
330
|
+
<span class="cline-any cline-neutral"> </span>
|
|
331
|
+
<span class="cline-any cline-yes">7x</span>
|
|
332
|
+
<span class="cline-any cline-neutral"> </span>
|
|
333
|
+
<span class="cline-any cline-yes">7x</span>
|
|
334
|
+
<span class="cline-any cline-neutral"> </span>
|
|
335
|
+
<span class="cline-any cline-neutral"> </span>
|
|
336
|
+
<span class="cline-any cline-neutral"> </span>
|
|
337
|
+
<span class="cline-any cline-neutral"> </span>
|
|
338
|
+
<span class="cline-any cline-neutral"> </span>
|
|
339
|
+
<span class="cline-any cline-neutral"> </span>
|
|
340
|
+
<span class="cline-any cline-neutral"> </span>
|
|
341
|
+
<span class="cline-any cline-neutral"> </span>
|
|
342
|
+
<span class="cline-any cline-neutral"> </span>
|
|
343
|
+
<span class="cline-any cline-neutral"> </span>
|
|
344
|
+
<span class="cline-any cline-neutral"> </span>
|
|
345
|
+
<span class="cline-any cline-neutral"> </span>
|
|
346
|
+
<span class="cline-any cline-neutral"> </span>
|
|
347
|
+
<span class="cline-any cline-neutral"> </span>
|
|
348
|
+
<span class="cline-any cline-yes">10x</span>
|
|
349
|
+
<span class="cline-any cline-yes">3x</span>
|
|
350
|
+
<span class="cline-any cline-neutral"> </span>
|
|
351
|
+
<span class="cline-any cline-neutral"> </span>
|
|
352
|
+
<span class="cline-any cline-neutral"> </span>
|
|
353
|
+
<span class="cline-any cline-neutral"> </span>
|
|
354
|
+
<span class="cline-any cline-neutral"> </span>
|
|
355
|
+
<span class="cline-any cline-yes">7x</span>
|
|
356
|
+
<span class="cline-any cline-neutral"> </span>
|
|
357
|
+
<span class="cline-any cline-neutral"> </span>
|
|
358
|
+
<span class="cline-any cline-neutral"> </span>
|
|
359
|
+
<span class="cline-any cline-neutral"> </span>
|
|
360
|
+
<span class="cline-any cline-yes">7x</span>
|
|
361
|
+
<span class="cline-any cline-neutral"> </span>
|
|
362
|
+
<span class="cline-any cline-yes">7x</span>
|
|
363
|
+
<span class="cline-any cline-neutral"> </span>
|
|
364
|
+
<span class="cline-any cline-neutral"> </span>
|
|
365
|
+
<span class="cline-any cline-neutral"> </span>
|
|
366
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/**
|
|
367
|
+
* 分页参数验证工具函数
|
|
368
|
+
*/
|
|
369
|
+
|
|
370
|
+
import { PAGINATION_DEFAULTS } from '../types';
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* 检查值是否为对象类型
|
|
374
|
+
*
|
|
375
|
+
* @param value - 待检查的值
|
|
376
|
+
* @returns 是否为对象类型
|
|
377
|
+
*/
|
|
378
|
+
function isObject(value: unknown): value is Record<string, unknown> {
|
|
379
|
+
return typeof value === 'object' && value !== null;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Page 风格分页参数
|
|
384
|
+
*/
|
|
385
|
+
export type PaginationValidationResult = {
|
|
386
|
+
/**
|
|
387
|
+
* 页码
|
|
388
|
+
*/
|
|
389
|
+
page: number;
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* 每页数量
|
|
393
|
+
*/
|
|
394
|
+
pageSize: number;
|
|
395
|
+
};
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Offset 风格分页参数
|
|
399
|
+
*/
|
|
400
|
+
export type OffsetPaginationValidationResult = {
|
|
401
|
+
/**
|
|
402
|
+
* 限制数量
|
|
403
|
+
*/
|
|
404
|
+
limit: number;
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* 偏移量
|
|
408
|
+
*/
|
|
409
|
+
offset: number;
|
|
410
|
+
};
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* 验证页码是否有效
|
|
414
|
+
*
|
|
415
|
+
* @param page - 页码
|
|
416
|
+
* @returns 是否有效
|
|
417
|
+
*/
|
|
418
|
+
export function isValidPage(page: unknown): page is number {
|
|
419
|
+
return typeof page === 'number' && Number.isInteger(page) && page >= 1;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* 验证每页数量是否有效
|
|
424
|
+
*
|
|
425
|
+
* @param pageSize - 每页数量
|
|
426
|
+
* @returns 是否有效
|
|
427
|
+
*/
|
|
428
|
+
export function isValidPageSize(pageSize: unknown): pageSize is number {
|
|
429
|
+
return (
|
|
430
|
+
typeof pageSize === 'number' &&
|
|
431
|
+
Number.isInteger(pageSize) &&
|
|
432
|
+
pageSize >= PAGINATION_DEFAULTS.minPageSize &&
|
|
433
|
+
pageSize <= PAGINATION_DEFAULTS.maxPageSize
|
|
434
|
+
);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* 验证偏移量是否有效
|
|
439
|
+
*
|
|
440
|
+
* @param offset - 偏移量
|
|
441
|
+
* @returns 是否有效
|
|
442
|
+
*/
|
|
443
|
+
export function isValidOffset(offset: unknown): offset is number {
|
|
444
|
+
return typeof offset === 'number' && Number.isInteger(offset) && offset >= 0;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* 验证 limit 是否有效
|
|
449
|
+
*
|
|
450
|
+
* @param limit - 限制数量
|
|
451
|
+
* @returns 是否有效
|
|
452
|
+
*/
|
|
453
|
+
export function isValidLimit(limit: unknown): limit is number {
|
|
454
|
+
return (
|
|
455
|
+
typeof limit === 'number' &&
|
|
456
|
+
Number.isInteger(limit) &&
|
|
457
|
+
limit >= PAGINATION_DEFAULTS.minPageSize &&
|
|
458
|
+
limit <= PAGINATION_DEFAULTS.maxPageSize
|
|
459
|
+
);
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* 验证分页参数是否有效
|
|
464
|
+
*
|
|
465
|
+
* @param params - 分页参数
|
|
466
|
+
* @returns 是否有效
|
|
467
|
+
*/
|
|
468
|
+
export function isValidPagination(params: unknown): params is PaginationValidationResult {
|
|
469
|
+
if (!isObject(params)) {
|
|
470
|
+
return false;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* 提取的页码
|
|
475
|
+
*/
|
|
476
|
+
const page = params.page;
|
|
477
|
+
|
|
478
|
+
/**
|
|
479
|
+
* 提取的每页数量
|
|
480
|
+
*/
|
|
481
|
+
const pageSize = params.pageSize;
|
|
482
|
+
|
|
483
|
+
return (
|
|
484
|
+
(page === undefined || isValidPage(page)) &&
|
|
485
|
+
(pageSize === undefined || isValidPageSize(pageSize))
|
|
486
|
+
);
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* 验证 offset 分页参数是否有效
|
|
491
|
+
*
|
|
492
|
+
* @param params - offset 分页参数
|
|
493
|
+
* @returns 是否有效
|
|
494
|
+
*/
|
|
495
|
+
export function isValidOffsetPagination(
|
|
496
|
+
params: unknown,
|
|
497
|
+
): params is OffsetPaginationValidationResult {
|
|
498
|
+
if (!isObject(params)) {
|
|
499
|
+
return false;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* 提取的限制数量
|
|
504
|
+
*/
|
|
505
|
+
const limit = params.limit;
|
|
506
|
+
|
|
507
|
+
/**
|
|
508
|
+
* 提取的偏移量
|
|
509
|
+
*/
|
|
510
|
+
const offset = params.offset;
|
|
511
|
+
|
|
512
|
+
return (
|
|
513
|
+
(limit === undefined || isValidLimit(limit)) && (offset === undefined || isValidOffset(offset))
|
|
514
|
+
);
|
|
515
|
+
}
|
|
516
|
+
</pre></td></tr></table></pre>
|
|
517
|
+
|
|
518
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
519
|
+
</div><!-- /wrapper -->
|
|
520
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
521
|
+
Code coverage generated by
|
|
522
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
523
|
+
at 2026-04-09T17:27:15.194Z
|
|
524
|
+
</div>
|
|
525
|
+
<script src="../../prettify.js"></script>
|
|
526
|
+
<script>
|
|
527
|
+
window.onload = function () {
|
|
528
|
+
prettyPrint();
|
|
529
|
+
};
|
|
530
|
+
</script>
|
|
531
|
+
<script src="../../sorter.js"></script>
|
|
532
|
+
<script src="../../block-navigation.js"></script>
|
|
533
|
+
</body>
|
|
534
|
+
</html>
|
|
535
|
+
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e={page:1,pageSize:20,maxPageSize:100,minPageSize:1};function t(t){return{page:Math.max(1,Math.floor(t?.page??e.page)),pageSize:Math.min(e.maxPageSize,Math.max(e.minPageSize,Math.floor(t?.pageSize??e.pageSize)))}}function n(t){return{limit:Math.min(e.maxPageSize,Math.max(e.minPageSize,Math.floor(t?.limit??e.pageSize))),offset:Math.max(0,Math.floor(t?.offset??0))}}function r(e,t){return(e-1)*t}function i(e,t){return t<=0?0:Math.ceil(e/t)}function a(e,t){return e<t}function o(e){return e>1}function s(e,t){let n=Math.max(1,t);return{page:Math.floor(e/n)+1,pageSize:n}}function c(e,t){let n=Math.max(1,e),r=Math.max(1,t);return{offset:(n-1)*r,limit:r}}function l(e,t,n,r){let s=i(t,r);return{items:e,total:t,page:n,pageSize:r,totalPages:s,hasNextPage:a(n,s),hasPreviousPage:o(n)}}function u(e){return typeof e==`object`&&!!e}function d(e){return typeof e==`number`&&Number.isInteger(e)&&e>=1}function f(t){return typeof t==`number`&&Number.isInteger(t)&&t>=e.minPageSize&&t<=e.maxPageSize}function p(e){return typeof e==`number`&&Number.isInteger(e)&&e>=0}function m(t){return typeof t==`number`&&Number.isInteger(t)&&t>=e.minPageSize&&t<=e.maxPageSize}function h(e){if(!u(e))return!1;let t=e.page,n=e.pageSize;return(t===void 0||d(t))&&(n===void 0||f(n))}function g(e){if(!u(e))return!1;let t=e.limit,n=e.offset;return(t===void 0||m(t))&&(n===void 0||p(n))}function _(e){return e!==void 0&&`mapper`in e}function v(e,t,n,r){let s=i(t,r);return{items:e,total:t,page:n,pageSize:r,totalPages:s,hasNextPage:a(n,s),hasPreviousPage:o(n)}}async function y(e,n,i){let{page:a,pageSize:o}=t(n),s={skip:r(a,o),take:o,where:i?.where,relations:i?.relations,select:i?.select,order:i?.order??{createdAt:`DESC`}},[c,l]=await e.findAndCount(s);return _(i)?v(await Promise.all(c.map(i.mapper)),l,a,o):v(c,l,a,o)}async function b(e,n,i){let{page:a,pageSize:o}=t(n),s=r(a,o);e.skip(s).take(o);let[c,l]=await e.getManyAndCount();return v(i?await Promise.all(c.map(i)):c,l,a,o)}function x(e,t){return e.createQueryBuilder(t??e.metadata.name.toLowerCase())}exports.PAGINATION_DEFAULTS=e,exports.calculateOffset=r,exports.calculateTotalPages=i,exports.createPaginatedResult=l,exports.createPaginationQueryBuilder=x,exports.hasNextPage=a,exports.hasPreviousPage=o,exports.isValidLimit=m,exports.isValidOffset=p,exports.isValidOffsetPagination=g,exports.isValidPage=d,exports.isValidPageSize=f,exports.isValidPagination=h,exports.normalizeOffsetPagination=n,exports.normalizePagination=t,exports.offsetToPage=s,exports.pageToOffset=c,exports.paginateWithQueryBuilder=b,exports.paginateWithRepository=y;
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { FindManyOptions, FindOptionsOrder, ObjectLiteral, Repository, SelectQueryBuilder } from "typeorm";
|
|
2
|
+
|
|
3
|
+
//#region src/types/pagination.types.d.ts
|
|
4
|
+
type PaginationParams = {
|
|
5
|
+
page?: number;
|
|
6
|
+
pageSize?: number;
|
|
7
|
+
};
|
|
8
|
+
type OffsetPaginationParams = {
|
|
9
|
+
limit?: number;
|
|
10
|
+
offset?: number;
|
|
11
|
+
};
|
|
12
|
+
type CursorPaginationParams = {
|
|
13
|
+
cursor?: string;
|
|
14
|
+
limit?: number;
|
|
15
|
+
};
|
|
16
|
+
declare const PAGINATION_DEFAULTS: {
|
|
17
|
+
readonly page: 1;
|
|
18
|
+
readonly pageSize: 20;
|
|
19
|
+
readonly maxPageSize: 100;
|
|
20
|
+
readonly minPageSize: 1;
|
|
21
|
+
};
|
|
22
|
+
type PaginationDefaults = typeof PAGINATION_DEFAULTS;
|
|
23
|
+
//#endregion
|
|
24
|
+
//#region src/types/result.types.d.ts
|
|
25
|
+
type PaginatedResult<T> = {
|
|
26
|
+
items: T[];
|
|
27
|
+
total: number;
|
|
28
|
+
page: number;
|
|
29
|
+
pageSize: number;
|
|
30
|
+
totalPages: number;
|
|
31
|
+
hasNextPage: boolean;
|
|
32
|
+
hasPreviousPage: boolean;
|
|
33
|
+
};
|
|
34
|
+
type OffsetPaginatedResult<T> = {
|
|
35
|
+
items: T[];
|
|
36
|
+
total: number;
|
|
37
|
+
limit: number;
|
|
38
|
+
offset: number;
|
|
39
|
+
hasMore: boolean;
|
|
40
|
+
};
|
|
41
|
+
type CursorPaginatedResult<T> = {
|
|
42
|
+
items: T[];
|
|
43
|
+
nextCursor: string | null;
|
|
44
|
+
previousCursor: string | null;
|
|
45
|
+
hasMore: boolean;
|
|
46
|
+
};
|
|
47
|
+
//#endregion
|
|
48
|
+
//#region src/types/sort.types.d.ts
|
|
49
|
+
type SortOrder = 'asc' | 'desc';
|
|
50
|
+
type SortParams<T extends string = string> = {
|
|
51
|
+
sortBy?: T;
|
|
52
|
+
sortOrder?: SortOrder;
|
|
53
|
+
};
|
|
54
|
+
type SortItem<T extends string = string> = {
|
|
55
|
+
field: T;
|
|
56
|
+
order: SortOrder;
|
|
57
|
+
};
|
|
58
|
+
type MultiSortParams<T extends string = string> = {
|
|
59
|
+
sort?: SortItem<T>[];
|
|
60
|
+
};
|
|
61
|
+
//#endregion
|
|
62
|
+
//#region src/utils/pagination.util.d.ts
|
|
63
|
+
type OffsetPaginationResult = {
|
|
64
|
+
page: number;
|
|
65
|
+
pageSize: number;
|
|
66
|
+
};
|
|
67
|
+
type PagePaginationResult = {
|
|
68
|
+
offset: number;
|
|
69
|
+
limit: number;
|
|
70
|
+
};
|
|
71
|
+
declare function normalizePagination(params?: PaginationParams): Required<PaginationParams>;
|
|
72
|
+
declare function normalizeOffsetPagination(params?: OffsetPaginationParams): Required<OffsetPaginationParams>;
|
|
73
|
+
declare function calculateOffset(page: number, pageSize: number): number;
|
|
74
|
+
declare function calculateTotalPages(total: number, pageSize: number): number;
|
|
75
|
+
declare function hasNextPage(page: number, totalPages: number): boolean;
|
|
76
|
+
declare function hasPreviousPage(page: number): boolean;
|
|
77
|
+
declare function offsetToPage(offset: number, limit: number): OffsetPaginationResult;
|
|
78
|
+
declare function pageToOffset(page: number, pageSize: number): PagePaginationResult;
|
|
79
|
+
declare function createPaginatedResult<T>(items: T[], total: number, page: number, pageSize: number): PaginatedResult<T>;
|
|
80
|
+
//#endregion
|
|
81
|
+
//#region src/utils/validation.util.d.ts
|
|
82
|
+
type PaginationValidationResult = {
|
|
83
|
+
page: number;
|
|
84
|
+
pageSize: number;
|
|
85
|
+
};
|
|
86
|
+
type OffsetPaginationValidationResult = {
|
|
87
|
+
limit: number;
|
|
88
|
+
offset: number;
|
|
89
|
+
};
|
|
90
|
+
declare function isValidPage(page: unknown): page is number;
|
|
91
|
+
declare function isValidPageSize(pageSize: unknown): pageSize is number;
|
|
92
|
+
declare function isValidOffset(offset: unknown): offset is number;
|
|
93
|
+
declare function isValidLimit(limit: unknown): limit is number;
|
|
94
|
+
declare function isValidPagination(params: unknown): params is PaginationValidationResult;
|
|
95
|
+
declare function isValidOffsetPagination(params: unknown): params is OffsetPaginationValidationResult;
|
|
96
|
+
//#endregion
|
|
97
|
+
//#region src/adapters/typeorm.adapter.d.ts
|
|
98
|
+
type EntityMapper<TEntity, TDto> = (entity: TEntity) => TDto | Promise<TDto>;
|
|
99
|
+
type TypeOrmPaginateOptionsWithMapper<TEntity extends ObjectLiteral, TDto> = {
|
|
100
|
+
mapper: EntityMapper<TEntity, TDto>;
|
|
101
|
+
order?: FindOptionsOrder<TEntity>;
|
|
102
|
+
where?: FindManyOptions<TEntity>['where'];
|
|
103
|
+
relations?: FindManyOptions<TEntity>['relations'];
|
|
104
|
+
select?: FindManyOptions<TEntity>['select'];
|
|
105
|
+
};
|
|
106
|
+
type TypeOrmPaginateOptionsNoMapper<TEntity extends ObjectLiteral> = {
|
|
107
|
+
order?: FindOptionsOrder<TEntity>;
|
|
108
|
+
where?: FindManyOptions<TEntity>['where'];
|
|
109
|
+
relations?: FindManyOptions<TEntity>['relations'];
|
|
110
|
+
select?: FindManyOptions<TEntity>['select'];
|
|
111
|
+
};
|
|
112
|
+
type TypeOrmPaginateOptions<TEntity extends ObjectLiteral, TDto = TEntity> = TypeOrmPaginateOptionsWithMapper<TEntity, TDto> | TypeOrmPaginateOptionsNoMapper<TEntity>;
|
|
113
|
+
declare function paginateWithRepository<TEntity extends ObjectLiteral, TDto = TEntity>(repository: Repository<TEntity>, params: PaginationParams, options?: TypeOrmPaginateOptions<TEntity, TDto>): Promise<PaginatedResult<TEntity | TDto>>;
|
|
114
|
+
declare function paginateWithQueryBuilder<TEntity extends ObjectLiteral, TDto = TEntity>(queryBuilder: SelectQueryBuilder<TEntity>, params: PaginationParams, mapper?: EntityMapper<TEntity, TDto>): Promise<PaginatedResult<TEntity | TDto>>;
|
|
115
|
+
declare function createPaginationQueryBuilder<TEntity extends ObjectLiteral>(repository: Repository<TEntity>, alias?: string): SelectQueryBuilder<TEntity>;
|
|
116
|
+
//#endregion
|
|
117
|
+
export { type CursorPaginatedResult, type CursorPaginationParams, type EntityMapper, type MultiSortParams, type OffsetPaginatedResult, type OffsetPaginationParams, type OffsetPaginationResult, type OffsetPaginationValidationResult, PAGINATION_DEFAULTS, type PagePaginationResult, type PaginatedResult, type PaginationDefaults, type PaginationParams, type PaginationValidationResult, type SortItem, type SortOrder, type SortParams, type TypeOrmPaginateOptions, calculateOffset, calculateTotalPages, createPaginatedResult, createPaginationQueryBuilder, hasNextPage, hasPreviousPage, isValidLimit, isValidOffset, isValidOffsetPagination, isValidPage, isValidPageSize, isValidPagination, normalizeOffsetPagination, normalizePagination, offsetToPage, pageToOffset, paginateWithQueryBuilder, paginateWithRepository };
|