bytekit 0.1.12

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 (200) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2241 -0
  3. package/bin/sutils.js +9 -0
  4. package/dist/api-client.d.ts +2 -0
  5. package/dist/api-client.d.ts.map +1 -0
  6. package/dist/api-client.js +2 -0
  7. package/dist/api-client.js.map +1 -0
  8. package/dist/cli/index.d.ts +2 -0
  9. package/dist/cli/index.d.ts.map +1 -0
  10. package/dist/cli/index.js +401 -0
  11. package/dist/cli/index.js.map +1 -0
  12. package/dist/cli/type-generator.d.ts +12 -0
  13. package/dist/cli/type-generator.d.ts.map +1 -0
  14. package/dist/cli/type-generator.js +152 -0
  15. package/dist/cli/type-generator.js.map +1 -0
  16. package/dist/date-utils.d.ts +2 -0
  17. package/dist/date-utils.d.ts.map +1 -0
  18. package/dist/date-utils.js +2 -0
  19. package/dist/date-utils.js.map +1 -0
  20. package/dist/debug.d.ts +2 -0
  21. package/dist/debug.d.ts.map +1 -0
  22. package/dist/debug.js +2 -0
  23. package/dist/debug.js.map +1 -0
  24. package/dist/env-manager.d.ts +2 -0
  25. package/dist/env-manager.d.ts.map +1 -0
  26. package/dist/env-manager.js +2 -0
  27. package/dist/env-manager.js.map +1 -0
  28. package/dist/file-upload.d.ts +2 -0
  29. package/dist/file-upload.d.ts.map +1 -0
  30. package/dist/file-upload.js +2 -0
  31. package/dist/file-upload.js.map +1 -0
  32. package/dist/index.d.ts +2 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +2 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/logger.d.ts +2 -0
  37. package/dist/logger.d.ts.map +1 -0
  38. package/dist/logger.js +2 -0
  39. package/dist/logger.js.map +1 -0
  40. package/dist/profiler.d.ts +2 -0
  41. package/dist/profiler.d.ts.map +1 -0
  42. package/dist/profiler.js +2 -0
  43. package/dist/profiler.js.map +1 -0
  44. package/dist/response-validator.d.ts +2 -0
  45. package/dist/response-validator.d.ts.map +1 -0
  46. package/dist/response-validator.js +2 -0
  47. package/dist/response-validator.js.map +1 -0
  48. package/dist/retry-policy.d.ts +2 -0
  49. package/dist/retry-policy.d.ts.map +1 -0
  50. package/dist/retry-policy.js +2 -0
  51. package/dist/retry-policy.js.map +1 -0
  52. package/dist/storage-utils.d.ts +2 -0
  53. package/dist/storage-utils.d.ts.map +1 -0
  54. package/dist/storage-utils.js +2 -0
  55. package/dist/storage-utils.js.map +1 -0
  56. package/dist/streaming.d.ts +2 -0
  57. package/dist/streaming.d.ts.map +1 -0
  58. package/dist/streaming.js +2 -0
  59. package/dist/streaming.js.map +1 -0
  60. package/dist/string-utils.d.ts +2 -0
  61. package/dist/string-utils.d.ts.map +1 -0
  62. package/dist/string-utils.js +2 -0
  63. package/dist/string-utils.js.map +1 -0
  64. package/dist/utils/core/ApiClient.d.ts +94 -0
  65. package/dist/utils/core/ApiClient.d.ts.map +1 -0
  66. package/dist/utils/core/ApiClient.js +291 -0
  67. package/dist/utils/core/ApiClient.js.map +1 -0
  68. package/dist/utils/core/ErrorBoundary.d.ts +141 -0
  69. package/dist/utils/core/ErrorBoundary.d.ts.map +1 -0
  70. package/dist/utils/core/ErrorBoundary.js +322 -0
  71. package/dist/utils/core/ErrorBoundary.js.map +1 -0
  72. package/dist/utils/core/Logger.d.ts +39 -0
  73. package/dist/utils/core/Logger.d.ts.map +1 -0
  74. package/dist/utils/core/Logger.js +154 -0
  75. package/dist/utils/core/Logger.js.map +1 -0
  76. package/dist/utils/core/Profiler.d.ts +8 -0
  77. package/dist/utils/core/Profiler.d.ts.map +1 -0
  78. package/dist/utils/core/Profiler.js +18 -0
  79. package/dist/utils/core/Profiler.js.map +1 -0
  80. package/dist/utils/core/RateLimiter.d.ts +74 -0
  81. package/dist/utils/core/RateLimiter.d.ts.map +1 -0
  82. package/dist/utils/core/RateLimiter.js +170 -0
  83. package/dist/utils/core/RateLimiter.js.map +1 -0
  84. package/dist/utils/core/RequestCache.d.ts +64 -0
  85. package/dist/utils/core/RequestCache.d.ts.map +1 -0
  86. package/dist/utils/core/RequestCache.js +139 -0
  87. package/dist/utils/core/RequestCache.js.map +1 -0
  88. package/dist/utils/core/RequestDeduplicator.d.ts +41 -0
  89. package/dist/utils/core/RequestDeduplicator.d.ts.map +1 -0
  90. package/dist/utils/core/RequestDeduplicator.js +83 -0
  91. package/dist/utils/core/RequestDeduplicator.js.map +1 -0
  92. package/dist/utils/core/ResponseValidator.d.ts +26 -0
  93. package/dist/utils/core/ResponseValidator.d.ts.map +1 -0
  94. package/dist/utils/core/ResponseValidator.js +140 -0
  95. package/dist/utils/core/ResponseValidator.js.map +1 -0
  96. package/dist/utils/core/RetryPolicy.d.ts +43 -0
  97. package/dist/utils/core/RetryPolicy.d.ts.map +1 -0
  98. package/dist/utils/core/RetryPolicy.js +119 -0
  99. package/dist/utils/core/RetryPolicy.js.map +1 -0
  100. package/dist/utils/core/debug.d.ts +46 -0
  101. package/dist/utils/core/debug.d.ts.map +1 -0
  102. package/dist/utils/core/debug.js +83 -0
  103. package/dist/utils/core/debug.js.map +1 -0
  104. package/dist/utils/core/index.d.ts +11 -0
  105. package/dist/utils/core/index.d.ts.map +1 -0
  106. package/dist/utils/core/index.js +11 -0
  107. package/dist/utils/core/index.js.map +1 -0
  108. package/dist/utils/helpers/ArrayUtils.d.ts +134 -0
  109. package/dist/utils/helpers/ArrayUtils.d.ts.map +1 -0
  110. package/dist/utils/helpers/ArrayUtils.js +301 -0
  111. package/dist/utils/helpers/ArrayUtils.js.map +1 -0
  112. package/dist/utils/helpers/CacheManager.d.ts +67 -0
  113. package/dist/utils/helpers/CacheManager.d.ts.map +1 -0
  114. package/dist/utils/helpers/CacheManager.js +222 -0
  115. package/dist/utils/helpers/CacheManager.js.map +1 -0
  116. package/dist/utils/helpers/CompressionUtils.d.ts +80 -0
  117. package/dist/utils/helpers/CompressionUtils.d.ts.map +1 -0
  118. package/dist/utils/helpers/CompressionUtils.js +224 -0
  119. package/dist/utils/helpers/CompressionUtils.js.map +1 -0
  120. package/dist/utils/helpers/CryptoUtils.d.ts +70 -0
  121. package/dist/utils/helpers/CryptoUtils.d.ts.map +1 -0
  122. package/dist/utils/helpers/CryptoUtils.js +215 -0
  123. package/dist/utils/helpers/CryptoUtils.js.map +1 -0
  124. package/dist/utils/helpers/DateUtils.d.ts +31 -0
  125. package/dist/utils/helpers/DateUtils.d.ts.map +1 -0
  126. package/dist/utils/helpers/DateUtils.js +104 -0
  127. package/dist/utils/helpers/DateUtils.js.map +1 -0
  128. package/dist/utils/helpers/DiffUtils.d.ts +61 -0
  129. package/dist/utils/helpers/DiffUtils.d.ts.map +1 -0
  130. package/dist/utils/helpers/DiffUtils.js +249 -0
  131. package/dist/utils/helpers/DiffUtils.js.map +1 -0
  132. package/dist/utils/helpers/EnvManager.d.ts +7 -0
  133. package/dist/utils/helpers/EnvManager.d.ts.map +1 -0
  134. package/dist/utils/helpers/EnvManager.js +19 -0
  135. package/dist/utils/helpers/EnvManager.js.map +1 -0
  136. package/dist/utils/helpers/EventEmitter.d.ts +78 -0
  137. package/dist/utils/helpers/EventEmitter.d.ts.map +1 -0
  138. package/dist/utils/helpers/EventEmitter.js +208 -0
  139. package/dist/utils/helpers/EventEmitter.js.map +1 -0
  140. package/dist/utils/helpers/FileUploadHelper.d.ts +44 -0
  141. package/dist/utils/helpers/FileUploadHelper.d.ts.map +1 -0
  142. package/dist/utils/helpers/FileUploadHelper.js +127 -0
  143. package/dist/utils/helpers/FileUploadHelper.js.map +1 -0
  144. package/dist/utils/helpers/FormUtils.d.ts +162 -0
  145. package/dist/utils/helpers/FormUtils.d.ts.map +1 -0
  146. package/dist/utils/helpers/FormUtils.js +378 -0
  147. package/dist/utils/helpers/FormUtils.js.map +1 -0
  148. package/dist/utils/helpers/ObjectUtils.d.ts +102 -0
  149. package/dist/utils/helpers/ObjectUtils.d.ts.map +1 -0
  150. package/dist/utils/helpers/ObjectUtils.js +297 -0
  151. package/dist/utils/helpers/ObjectUtils.js.map +1 -0
  152. package/dist/utils/helpers/PaginationHelper.d.ts +127 -0
  153. package/dist/utils/helpers/PaginationHelper.d.ts.map +1 -0
  154. package/dist/utils/helpers/PaginationHelper.js +259 -0
  155. package/dist/utils/helpers/PaginationHelper.js.map +1 -0
  156. package/dist/utils/helpers/PollingHelper.d.ts +64 -0
  157. package/dist/utils/helpers/PollingHelper.d.ts.map +1 -0
  158. package/dist/utils/helpers/PollingHelper.js +131 -0
  159. package/dist/utils/helpers/PollingHelper.js.map +1 -0
  160. package/dist/utils/helpers/StorageUtils.d.ts +9 -0
  161. package/dist/utils/helpers/StorageUtils.d.ts.map +1 -0
  162. package/dist/utils/helpers/StorageUtils.js +33 -0
  163. package/dist/utils/helpers/StorageUtils.js.map +1 -0
  164. package/dist/utils/helpers/StreamingHelper.d.ts +35 -0
  165. package/dist/utils/helpers/StreamingHelper.d.ts.map +1 -0
  166. package/dist/utils/helpers/StreamingHelper.js +167 -0
  167. package/dist/utils/helpers/StreamingHelper.js.map +1 -0
  168. package/dist/utils/helpers/StringUtils.d.ts +42 -0
  169. package/dist/utils/helpers/StringUtils.d.ts.map +1 -0
  170. package/dist/utils/helpers/StringUtils.js +173 -0
  171. package/dist/utils/helpers/StringUtils.js.map +1 -0
  172. package/dist/utils/helpers/TimeUtils.d.ts +87 -0
  173. package/dist/utils/helpers/TimeUtils.d.ts.map +1 -0
  174. package/dist/utils/helpers/TimeUtils.js +234 -0
  175. package/dist/utils/helpers/TimeUtils.js.map +1 -0
  176. package/dist/utils/helpers/Validator.d.ts +31 -0
  177. package/dist/utils/helpers/Validator.d.ts.map +1 -0
  178. package/dist/utils/helpers/Validator.js +156 -0
  179. package/dist/utils/helpers/Validator.js.map +1 -0
  180. package/dist/utils/helpers/WebSocketHelper.d.ts +63 -0
  181. package/dist/utils/helpers/WebSocketHelper.d.ts.map +1 -0
  182. package/dist/utils/helpers/WebSocketHelper.js +200 -0
  183. package/dist/utils/helpers/WebSocketHelper.js.map +1 -0
  184. package/dist/utils/helpers/index.d.ts +20 -0
  185. package/dist/utils/helpers/index.d.ts.map +1 -0
  186. package/dist/utils/helpers/index.js +20 -0
  187. package/dist/utils/helpers/index.js.map +1 -0
  188. package/dist/utils/index.d.ts +21 -0
  189. package/dist/utils/index.d.ts.map +1 -0
  190. package/dist/utils/index.js +21 -0
  191. package/dist/utils/index.js.map +1 -0
  192. package/dist/validator.d.ts +2 -0
  193. package/dist/validator.d.ts.map +1 -0
  194. package/dist/validator.js +2 -0
  195. package/dist/validator.js.map +1 -0
  196. package/dist/websocket.d.ts +2 -0
  197. package/dist/websocket.d.ts.map +1 -0
  198. package/dist/websocket.js +2 -0
  199. package/dist/websocket.js.map +1 -0
  200. package/package.json +189 -0
@@ -0,0 +1,297 @@
1
+ /**
2
+ * Object manipulation utilities for everyday development tasks
3
+ */
4
+ export class ObjectUtils {
5
+ /**
6
+ * Check if value is empty (null, undefined, empty string, empty array, empty object)
7
+ */
8
+ static isEmpty(value) {
9
+ if (value === null || value === undefined)
10
+ return true;
11
+ if (typeof value === "string")
12
+ return value.trim().length === 0;
13
+ if (Array.isArray(value))
14
+ return value.length === 0;
15
+ if (value instanceof Map || value instanceof Set)
16
+ return value.size === 0;
17
+ if (typeof value === "object") {
18
+ return Object.keys(value).length === 0;
19
+ }
20
+ return false;
21
+ }
22
+ /**
23
+ * Check if value is NOT empty
24
+ */
25
+ static isNotEmpty(value) {
26
+ return !this.isEmpty(value);
27
+ }
28
+ /**
29
+ * Deep clone an object
30
+ */
31
+ static deepClone(obj) {
32
+ if (obj === null || typeof obj !== "object")
33
+ return obj;
34
+ if (obj instanceof Date)
35
+ return new Date(obj.getTime());
36
+ if (obj instanceof Array) {
37
+ return obj.map((item) => this.deepClone(item));
38
+ }
39
+ if (obj instanceof Object) {
40
+ const cloned = {};
41
+ for (const key in obj) {
42
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
43
+ cloned[key] = this.deepClone(obj[key]);
44
+ }
45
+ }
46
+ return cloned;
47
+ }
48
+ return obj;
49
+ }
50
+ /**
51
+ * Shallow merge objects (right overwrites left)
52
+ */
53
+ static merge(...objects) {
54
+ return objects.reduce((acc, obj) => ({ ...acc, ...obj }), {});
55
+ }
56
+ /**
57
+ * Deep merge objects (recursive)
58
+ */
59
+ static deepMerge(...objects) {
60
+ return objects.reduce((acc, obj) => {
61
+ for (const key in obj) {
62
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
63
+ const accValue = acc[key];
64
+ const objValue = obj[key];
65
+ if (typeof accValue === "object" &&
66
+ accValue !== null &&
67
+ !Array.isArray(accValue) &&
68
+ typeof objValue === "object" &&
69
+ objValue !== null &&
70
+ !Array.isArray(objValue)) {
71
+ acc[key] = this.deepMerge(accValue, objValue);
72
+ }
73
+ else {
74
+ acc[key] = objValue;
75
+ }
76
+ }
77
+ }
78
+ return acc;
79
+ }, {});
80
+ }
81
+ /**
82
+ * Pick specific keys from object
83
+ */
84
+ static pick(obj, keys) {
85
+ const result = {};
86
+ for (const key of keys) {
87
+ if (key in obj) {
88
+ result[key] = obj[key];
89
+ }
90
+ }
91
+ return result;
92
+ }
93
+ /**
94
+ * Omit specific keys from object
95
+ */
96
+ static omit(obj, keys) {
97
+ const result = { ...obj };
98
+ for (const key of keys) {
99
+ delete result[key];
100
+ }
101
+ return result;
102
+ }
103
+ /**
104
+ * Get nested value using dot notation
105
+ */
106
+ static get(obj, path, defaultValue) {
107
+ const keys = path.split(".");
108
+ let value = obj;
109
+ for (const key of keys) {
110
+ if (value && typeof value === "object" && key in value) {
111
+ value = value[key];
112
+ }
113
+ else {
114
+ return defaultValue;
115
+ }
116
+ }
117
+ return value;
118
+ }
119
+ /**
120
+ * Set nested value using dot notation
121
+ */
122
+ static set(obj, path, value) {
123
+ const keys = path.split(".");
124
+ let current = obj;
125
+ for (let i = 0; i < keys.length - 1; i++) {
126
+ const key = keys[i];
127
+ if (!(key in current) || typeof current[key] !== "object") {
128
+ current[key] = {};
129
+ }
130
+ current = current[key];
131
+ }
132
+ current[keys[keys.length - 1]] = value;
133
+ return obj;
134
+ }
135
+ /**
136
+ * Flatten nested object
137
+ */
138
+ static flatten(obj, prefix = "") {
139
+ const result = {};
140
+ for (const key in obj) {
141
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
142
+ const value = obj[key];
143
+ const newKey = prefix ? `${prefix}.${key}` : key;
144
+ if (value &&
145
+ typeof value === "object" &&
146
+ !Array.isArray(value) &&
147
+ !(value instanceof Date)) {
148
+ Object.assign(result, this.flatten(value, newKey));
149
+ }
150
+ else {
151
+ result[newKey] = value;
152
+ }
153
+ }
154
+ }
155
+ return result;
156
+ }
157
+ /**
158
+ * Unflatten object (reverse of flatten)
159
+ */
160
+ static unflatten(obj) {
161
+ const result = {};
162
+ for (const key in obj) {
163
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
164
+ this.set(result, key, obj[key]);
165
+ }
166
+ }
167
+ return result;
168
+ }
169
+ /**
170
+ * Filter object by predicate
171
+ */
172
+ static filter(obj, predicate) {
173
+ const result = {};
174
+ for (const key in obj) {
175
+ if (Object.prototype.hasOwnProperty.call(obj, key) &&
176
+ predicate(key, obj[key])) {
177
+ result[key] = obj[key];
178
+ }
179
+ }
180
+ return result;
181
+ }
182
+ /**
183
+ * Map object values
184
+ */
185
+ static mapValues(obj, mapper) {
186
+ const result = {};
187
+ for (const key in obj) {
188
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
189
+ result[key] = mapper(obj[key], key);
190
+ }
191
+ }
192
+ return result;
193
+ }
194
+ /**
195
+ * Check if object has all keys
196
+ */
197
+ static hasKeys(obj, keys) {
198
+ return keys.every((key) => key in obj);
199
+ }
200
+ /**
201
+ * Check if object has any of the keys
202
+ */
203
+ static hasAnyKey(obj, keys) {
204
+ return keys.some((key) => key in obj);
205
+ }
206
+ /**
207
+ * Invert object keys and values
208
+ */
209
+ static invert(obj) {
210
+ const result = {};
211
+ for (const key in obj) {
212
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
213
+ result[obj[key]] = key;
214
+ }
215
+ }
216
+ return result;
217
+ }
218
+ /**
219
+ * Group array of objects by key
220
+ */
221
+ static groupBy(arr, key) {
222
+ return arr.reduce((acc, item) => {
223
+ const groupKey = String(item[key]);
224
+ if (!acc[groupKey]) {
225
+ acc[groupKey] = [];
226
+ }
227
+ acc[groupKey].push(item);
228
+ return acc;
229
+ }, {});
230
+ }
231
+ /**
232
+ * Index array of objects by key
233
+ */
234
+ static indexBy(arr, key) {
235
+ return arr.reduce((acc, item) => {
236
+ acc[String(item[key])] = item;
237
+ return acc;
238
+ }, {});
239
+ }
240
+ /**
241
+ * Check if two objects are deeply equal
242
+ */
243
+ static deepEqual(a, b) {
244
+ if (a === b)
245
+ return true;
246
+ if (a === null || b === null)
247
+ return a === b;
248
+ if (typeof a !== "object" || typeof b !== "object")
249
+ return false;
250
+ const aKeys = Object.keys(a);
251
+ const bKeys = Object.keys(b);
252
+ if (aKeys.length !== bKeys.length)
253
+ return false;
254
+ for (const key of aKeys) {
255
+ if (!bKeys.includes(key))
256
+ return false;
257
+ if (!this.deepEqual(a[key], b[key])) {
258
+ return false;
259
+ }
260
+ }
261
+ return true;
262
+ }
263
+ /**
264
+ * Get object size (number of keys)
265
+ */
266
+ static size(obj) {
267
+ return Object.keys(obj).length;
268
+ }
269
+ /**
270
+ * Convert object to array of [key, value] pairs
271
+ */
272
+ static entries(obj) {
273
+ return Object.entries(obj);
274
+ }
275
+ /**
276
+ * Convert array of [key, value] pairs to object
277
+ */
278
+ static fromEntries(entries) {
279
+ return Object.fromEntries(entries);
280
+ }
281
+ /**
282
+ * Assign properties from source to target (like Object.assign)
283
+ */
284
+ static assign(target, ...sources) {
285
+ return Object.assign(target, ...sources);
286
+ }
287
+ /**
288
+ * Create object from keys with same value
289
+ */
290
+ static fromKeys(keys, value) {
291
+ return keys.reduce((acc, key) => {
292
+ acc[key] = value;
293
+ return acc;
294
+ }, {});
295
+ }
296
+ }
297
+ //# sourceMappingURL=ObjectUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectUtils.js","sourceRoot":"","sources":["../../../src/utils/helpers/ObjectUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Pagination helper for managing paginated data
3
+ * Supports offset-limit and cursor-based pagination
4
+ */
5
+ export type PaginationMode = "offset" | "cursor";
6
+ export interface PaginationState {
7
+ currentPage: number;
8
+ pageSize: number;
9
+ total: number;
10
+ totalPages: number;
11
+ hasNextPage: boolean;
12
+ hasPreviousPage: boolean;
13
+ }
14
+ export interface CursorPaginationState {
15
+ cursor?: string;
16
+ nextCursor?: string;
17
+ previousCursor?: string;
18
+ hasNextPage: boolean;
19
+ hasPreviousPage: boolean;
20
+ }
21
+ /**
22
+ * Pagination helper for managing paginated data
23
+ */
24
+ export declare class PaginationHelper<T = unknown> {
25
+ private items;
26
+ private pageSize;
27
+ private mode;
28
+ private currentPage;
29
+ private currentCursor?;
30
+ private cursorMap;
31
+ constructor(items: T[], options?: {
32
+ pageSize?: number;
33
+ mode?: PaginationMode;
34
+ });
35
+ /**
36
+ * Get current page (offset mode)
37
+ */
38
+ getCurrentPage(): T[];
39
+ /**
40
+ * Get current page by cursor (cursor mode)
41
+ */
42
+ getCurrentPageByCursor(): T[];
43
+ /**
44
+ * Go to next page (offset mode)
45
+ */
46
+ next(): T[];
47
+ /**
48
+ * Go to next page by cursor (cursor mode)
49
+ */
50
+ nextByCursor(): T[];
51
+ /**
52
+ * Go to previous page (offset mode)
53
+ */
54
+ previous(): T[];
55
+ /**
56
+ * Go to previous page by cursor (cursor mode)
57
+ */
58
+ previousByCursor(): T[];
59
+ /**
60
+ * Go to specific page (offset mode)
61
+ */
62
+ goToPage(page: number): T[];
63
+ /**
64
+ * Go to specific cursor (cursor mode)
65
+ */
66
+ goToCursor(cursor: string): T[];
67
+ /**
68
+ * Check if has next page
69
+ */
70
+ hasNextPage(): boolean;
71
+ /**
72
+ * Check if has previous page
73
+ */
74
+ hasPreviousPage(): boolean;
75
+ /**
76
+ * Get total pages (offset mode)
77
+ */
78
+ getTotalPages(): number;
79
+ /**
80
+ * Get total items
81
+ */
82
+ getTotalItems(): number;
83
+ /**
84
+ * Get current page number (offset mode)
85
+ */
86
+ getCurrentPageNumber(): number;
87
+ /**
88
+ * Get pagination state (offset mode)
89
+ */
90
+ getState(): PaginationState;
91
+ /**
92
+ * Get cursor pagination state (cursor mode)
93
+ */
94
+ getCursorState(): CursorPaginationState;
95
+ /**
96
+ * Reset to first page
97
+ */
98
+ reset(): void;
99
+ /**
100
+ * Set page size
101
+ */
102
+ setPageSize(size: number): void;
103
+ /**
104
+ * Generate cursor from index
105
+ */
106
+ private generateCursor;
107
+ /**
108
+ * Decode cursor to index
109
+ */
110
+ private decodeCursor;
111
+ /**
112
+ * Get all items
113
+ */
114
+ getAllItems(): T[];
115
+ /**
116
+ * Update items
117
+ */
118
+ setItems(items: T[]): void;
119
+ }
120
+ /**
121
+ * Factory function for creating paginators
122
+ */
123
+ export declare function createPaginator<T = unknown>(items: T[], options?: {
124
+ pageSize?: number;
125
+ mode?: PaginationMode;
126
+ }): PaginationHelper<T>;
127
+ //# sourceMappingURL=PaginationHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaginationHelper.d.ts","sourceRoot":"","sources":["../../../src/utils/helpers/PaginationHelper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,gBAAgB,CAAC,CAAC,GAAG,OAAO;IACrC,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAkC;gBAG/C,KAAK,EAAE,CAAC,EAAE,EACV,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,cAAc,CAAA;KAAO;IAO9D;;OAEG;IACH,cAAc,IAAI,CAAC,EAAE;IAUrB;;OAEG;IACH,sBAAsB,IAAI,CAAC,EAAE;IAa7B;;OAEG;IACH,IAAI,IAAI,CAAC,EAAE;IAWX;;OAEG;IACH,YAAY,IAAI,CAAC,EAAE;IAkBnB;;OAEG;IACH,QAAQ,IAAI,CAAC,EAAE;IAWf;;OAEG;IACH,gBAAgB,IAAI,CAAC,EAAE;IAkBvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE;IAW3B;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE;IAW/B;;OAEG;IACH,WAAW,IAAI,OAAO;IAWtB;;OAEG;IACH,eAAe,IAAI,OAAO;IAW1B;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAI9B;;OAEG;IACH,QAAQ,IAAI,eAAe;IAW3B;;OAEG;IACH,cAAc,IAAI,qBAAqB;IAsBvC;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,WAAW,IAAI,CAAC,EAAE;IAIlB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI;CAI7B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,EACvC,KAAK,EAAE,CAAC,EAAE,EACV,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,cAAc,CAAA;CAAE,GACvD,gBAAgB,CAAC,CAAC,CAAC,CAErB"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Pagination helper for managing paginated data
3
+ * Supports offset-limit and cursor-based pagination
4
+ */
5
+ /**
6
+ * Pagination helper for managing paginated data
7
+ */
8
+ export class PaginationHelper {
9
+ items;
10
+ pageSize;
11
+ mode;
12
+ currentPage = 1;
13
+ currentCursor;
14
+ cursorMap = new Map();
15
+ constructor(items, options = {}) {
16
+ this.items = items;
17
+ this.pageSize = options.pageSize ?? 10;
18
+ this.mode = options.mode ?? "offset";
19
+ }
20
+ /**
21
+ * Get current page (offset mode)
22
+ */
23
+ getCurrentPage() {
24
+ if (this.mode === "cursor") {
25
+ throw new Error("Use getCurrentPageByCursor() in cursor mode");
26
+ }
27
+ const start = (this.currentPage - 1) * this.pageSize;
28
+ const end = start + this.pageSize;
29
+ return this.items.slice(start, end);
30
+ }
31
+ /**
32
+ * Get current page by cursor (cursor mode)
33
+ */
34
+ getCurrentPageByCursor() {
35
+ if (this.mode === "offset") {
36
+ throw new Error("Use getCurrentPage() in offset mode");
37
+ }
38
+ const cursorIndex = this.currentCursor
39
+ ? this.cursorMap.get(this.currentCursor) ?? 0
40
+ : 0;
41
+ const start = cursorIndex;
42
+ const end = start + this.pageSize;
43
+ return this.items.slice(start, end);
44
+ }
45
+ /**
46
+ * Go to next page (offset mode)
47
+ */
48
+ next() {
49
+ if (this.mode === "cursor") {
50
+ throw new Error("Use nextByCursor() in cursor mode");
51
+ }
52
+ if (this.hasNextPage()) {
53
+ this.currentPage++;
54
+ }
55
+ return this.getCurrentPage();
56
+ }
57
+ /**
58
+ * Go to next page by cursor (cursor mode)
59
+ */
60
+ nextByCursor() {
61
+ if (this.mode === "offset") {
62
+ throw new Error("Use next() in offset mode");
63
+ }
64
+ const currentIndex = this.currentCursor
65
+ ? this.cursorMap.get(this.currentCursor) ?? 0
66
+ : 0;
67
+ const nextIndex = currentIndex + this.pageSize;
68
+ if (nextIndex < this.items.length) {
69
+ this.currentCursor = this.generateCursor(nextIndex);
70
+ this.cursorMap.set(this.currentCursor, nextIndex);
71
+ }
72
+ return this.getCurrentPageByCursor();
73
+ }
74
+ /**
75
+ * Go to previous page (offset mode)
76
+ */
77
+ previous() {
78
+ if (this.mode === "cursor") {
79
+ throw new Error("Use previousByCursor() in cursor mode");
80
+ }
81
+ if (this.hasPreviousPage()) {
82
+ this.currentPage--;
83
+ }
84
+ return this.getCurrentPage();
85
+ }
86
+ /**
87
+ * Go to previous page by cursor (cursor mode)
88
+ */
89
+ previousByCursor() {
90
+ if (this.mode === "offset") {
91
+ throw new Error("Use previous() in offset mode");
92
+ }
93
+ const currentIndex = this.currentCursor
94
+ ? this.cursorMap.get(this.currentCursor) ?? 0
95
+ : 0;
96
+ const previousIndex = Math.max(0, currentIndex - this.pageSize);
97
+ if (previousIndex >= 0) {
98
+ this.currentCursor = this.generateCursor(previousIndex);
99
+ this.cursorMap.set(this.currentCursor, previousIndex);
100
+ }
101
+ return this.getCurrentPageByCursor();
102
+ }
103
+ /**
104
+ * Go to specific page (offset mode)
105
+ */
106
+ goToPage(page) {
107
+ if (this.mode === "cursor") {
108
+ throw new Error("Use goToCursor() in cursor mode");
109
+ }
110
+ if (page < 1)
111
+ page = 1;
112
+ if (page > this.getTotalPages())
113
+ page = this.getTotalPages();
114
+ this.currentPage = page;
115
+ return this.getCurrentPage();
116
+ }
117
+ /**
118
+ * Go to specific cursor (cursor mode)
119
+ */
120
+ goToCursor(cursor) {
121
+ if (this.mode === "offset") {
122
+ throw new Error("Use goToPage() in offset mode");
123
+ }
124
+ if (this.cursorMap.has(cursor)) {
125
+ this.currentCursor = cursor;
126
+ }
127
+ return this.getCurrentPageByCursor();
128
+ }
129
+ /**
130
+ * Check if has next page
131
+ */
132
+ hasNextPage() {
133
+ if (this.mode === "offset") {
134
+ return this.currentPage < this.getTotalPages();
135
+ }
136
+ const currentIndex = this.currentCursor
137
+ ? this.cursorMap.get(this.currentCursor) ?? 0
138
+ : 0;
139
+ return currentIndex + this.pageSize < this.items.length;
140
+ }
141
+ /**
142
+ * Check if has previous page
143
+ */
144
+ hasPreviousPage() {
145
+ if (this.mode === "offset") {
146
+ return this.currentPage > 1;
147
+ }
148
+ const currentIndex = this.currentCursor
149
+ ? this.cursorMap.get(this.currentCursor) ?? 0
150
+ : 0;
151
+ return currentIndex > 0;
152
+ }
153
+ /**
154
+ * Get total pages (offset mode)
155
+ */
156
+ getTotalPages() {
157
+ return Math.ceil(this.items.length / this.pageSize);
158
+ }
159
+ /**
160
+ * Get total items
161
+ */
162
+ getTotalItems() {
163
+ return this.items.length;
164
+ }
165
+ /**
166
+ * Get current page number (offset mode)
167
+ */
168
+ getCurrentPageNumber() {
169
+ return this.currentPage;
170
+ }
171
+ /**
172
+ * Get pagination state (offset mode)
173
+ */
174
+ getState() {
175
+ return {
176
+ currentPage: this.currentPage,
177
+ pageSize: this.pageSize,
178
+ total: this.items.length,
179
+ totalPages: this.getTotalPages(),
180
+ hasNextPage: this.hasNextPage(),
181
+ hasPreviousPage: this.hasPreviousPage(),
182
+ };
183
+ }
184
+ /**
185
+ * Get cursor pagination state (cursor mode)
186
+ */
187
+ getCursorState() {
188
+ const currentIndex = this.currentCursor
189
+ ? this.cursorMap.get(this.currentCursor) ?? 0
190
+ : 0;
191
+ const nextIndex = currentIndex + this.pageSize;
192
+ const previousIndex = Math.max(0, currentIndex - this.pageSize);
193
+ return {
194
+ cursor: this.currentCursor,
195
+ nextCursor: nextIndex < this.items.length
196
+ ? this.generateCursor(nextIndex)
197
+ : undefined,
198
+ previousCursor: previousIndex > 0
199
+ ? this.generateCursor(previousIndex)
200
+ : undefined,
201
+ hasNextPage: nextIndex < this.items.length,
202
+ hasPreviousPage: currentIndex > 0,
203
+ };
204
+ }
205
+ /**
206
+ * Reset to first page
207
+ */
208
+ reset() {
209
+ this.currentPage = 1;
210
+ this.currentCursor = undefined;
211
+ this.cursorMap.clear();
212
+ }
213
+ /**
214
+ * Set page size
215
+ */
216
+ setPageSize(size) {
217
+ if (size <= 0)
218
+ throw new Error("Page size must be greater than 0");
219
+ this.pageSize = size;
220
+ this.reset();
221
+ }
222
+ /**
223
+ * Generate cursor from index
224
+ */
225
+ generateCursor(index) {
226
+ return Buffer.from(index.toString()).toString("base64");
227
+ }
228
+ /**
229
+ * Decode cursor to index
230
+ */
231
+ decodeCursor(cursor) {
232
+ try {
233
+ return parseInt(Buffer.from(cursor, "base64").toString(), 10);
234
+ }
235
+ catch {
236
+ return 0;
237
+ }
238
+ }
239
+ /**
240
+ * Get all items
241
+ */
242
+ getAllItems() {
243
+ return [...this.items];
244
+ }
245
+ /**
246
+ * Update items
247
+ */
248
+ setItems(items) {
249
+ this.items = items;
250
+ this.reset();
251
+ }
252
+ }
253
+ /**
254
+ * Factory function for creating paginators
255
+ */
256
+ export function createPaginator(items, options) {
257
+ return new PaginationHelper(items, options);
258
+ }
259
+ //# sourceMappingURL=PaginationHelper.js.map