ts-client-lib 0.0.7
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/README.md +76 -0
- package/auth/TSJWT.d.ts +29 -0
- package/auth/TSJWT.js +44 -0
- package/auth/TSOAuth.d.ts +132 -0
- package/auth/TSOAuth.js +230 -0
- package/devices/TSCordova.d.ts +5 -0
- package/devices/TSCordova.js +52 -0
- package/entities/TSCountries.d.ts +14 -0
- package/entities/TSCountries.js +1188 -0
- package/entities/TSCurrencies.d.ts +35 -0
- package/entities/TSCurrencies.js +604 -0
- package/entities/TSMobilePhones.d.ts +167 -0
- package/entities/TSMobilePhones.js +206 -0
- package/entities/TSMoney.d.ts +149 -0
- package/entities/TSMoney.js +311 -0
- package/entities/currency-amount.d.ts +13 -0
- package/entities/currency-amount.js +43 -0
- package/finance/TSBonus.d.ts +197 -0
- package/finance/TSBonus.js +530 -0
- package/finance/TSKYC.d.ts +563 -0
- package/finance/TSKYC.js +1066 -0
- package/finance/TSTax.d.ts +49 -0
- package/finance/TSTax.js +106 -0
- package/finance/bonus-money.d.ts +41 -0
- package/finance/bonus-money.js +61 -0
- package/games/TSBetSlip.d.ts +72 -0
- package/games/TSBetSlip.js +179 -0
- package/games/TSBetSystem.d.ts +4 -0
- package/games/TSBetSystem.js +48 -0
- package/games/TSLotto.d.ts +35 -0
- package/games/TSLotto.js +205 -0
- package/games/TSPool.d.ts +28 -0
- package/games/TSPool.js +88 -0
- package/package.json +93 -0
- package/utils/TSArray.d.ts +9 -0
- package/utils/TSArray.js +87 -0
- package/utils/TSBoolean.d.ts +4 -0
- package/utils/TSBoolean.js +24 -0
- package/utils/TSCache.d.ts +167 -0
- package/utils/TSCache.js +531 -0
- package/utils/TSDate.d.ts +8 -0
- package/utils/TSDate.js +67 -0
- package/utils/TSHeuristic.d.ts +20 -0
- package/utils/TSHeuristic.js +197 -0
- package/utils/TSLZS.d.ts +42 -0
- package/utils/TSLZS.js +343 -0
- package/utils/TSLog.d.ts +40 -0
- package/utils/TSLog.js +110 -0
- package/utils/TSNumber.d.ts +6 -0
- package/utils/TSNumber.js +68 -0
- package/utils/TSObject.d.ts +29 -0
- package/utils/TSObject.js +312 -0
- package/utils/TSPagination.d.ts +282 -0
- package/utils/TSPagination.js +425 -0
- package/utils/TSPaginationMulti.d.ts +77 -0
- package/utils/TSPaginationMulti.js +356 -0
- package/utils/TSString.d.ts +10 -0
- package/utils/TSString.js +107 -0
- package/utils/TSValidator.d.ts +16 -0
- package/utils/TSValidator.js +74 -0
- package/utils/TSWorker.d.ts +3 -0
- package/utils/TSWorker.js +32 -0
- package/utils/diacritics-removal-map.d.ts +5 -0
- package/utils/diacritics-removal-map.js +341 -0
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pagination – shared source of truth for cursor-based pagination.
|
|
3
|
+
* Use on server (Node) and client (React, Angular, etc.) for consistent types and helpers.
|
|
4
|
+
* No framework or DB dependencies; pure TypeScript.
|
|
5
|
+
*
|
|
6
|
+
* Cursor pagination is O(1) per request (no offset). Navigation uses first/after (forward)
|
|
7
|
+
* or last/before (backward). "Last page" is requested with last=N and no before.
|
|
8
|
+
*/
|
|
9
|
+
/** Cursor pagination request state (first/after or last/before). */
|
|
10
|
+
export interface CursorPaginationState {
|
|
11
|
+
first?: number;
|
|
12
|
+
after?: string;
|
|
13
|
+
last?: number;
|
|
14
|
+
before?: string;
|
|
15
|
+
}
|
|
16
|
+
/** Page info returned by the server after a paginated query. */
|
|
17
|
+
export interface CursorPageInfo {
|
|
18
|
+
hasNextPage: boolean;
|
|
19
|
+
hasPreviousPage: boolean;
|
|
20
|
+
startCursor?: string | null;
|
|
21
|
+
endCursor?: string | null;
|
|
22
|
+
}
|
|
23
|
+
/** Connection response shape: nodes + totalCount + pageInfo. */
|
|
24
|
+
export interface CursorConnection<T> {
|
|
25
|
+
nodes: T[];
|
|
26
|
+
totalCount: number;
|
|
27
|
+
pageInfo: CursorPageInfo;
|
|
28
|
+
}
|
|
29
|
+
export declare const DEFAULT_PAGE_SIZE = 25;
|
|
30
|
+
export declare const MAX_PAGE_SIZE = 100;
|
|
31
|
+
/**
|
|
32
|
+
* Clamp page size to [1, max]. Use when building API inputs.
|
|
33
|
+
*/
|
|
34
|
+
export declare function clampPageSize(size: number, max?: number): number;
|
|
35
|
+
/**
|
|
36
|
+
* 1-based current page number from rangeStart and page size.
|
|
37
|
+
* rangeStart: 1-based index of the first item on the current page.
|
|
38
|
+
*/
|
|
39
|
+
export declare function getCurrentPage(rangeStart: number, pageSize: number): number;
|
|
40
|
+
/**
|
|
41
|
+
* Total number of pages for a given total count and page size.
|
|
42
|
+
* Use for "Page X of Y" and to disable "Last" when on last page.
|
|
43
|
+
*/
|
|
44
|
+
export declare function getTotalPages(totalCount: number, pageSize: number): number;
|
|
45
|
+
/**
|
|
46
|
+
* Range start (1-based) for the last page, given total count and number of nodes on that page.
|
|
47
|
+
* Call this after loading the last page (request with last=N, no before) and set rangeStart
|
|
48
|
+
* so "Showing X – Y of Z" is correct.
|
|
49
|
+
*/
|
|
50
|
+
export declare function getLastPageRangeStart(totalCount: number, nodesLength: number): number;
|
|
51
|
+
/**
|
|
52
|
+
* True when the request was for the last page (last=N, no before).
|
|
53
|
+
* Use to decide whether to set rangeStart from getLastPageRangeStart after the response.
|
|
54
|
+
* When false, the request may be "previous" (last + before) and rangeStart is already set by the client.
|
|
55
|
+
*/
|
|
56
|
+
export declare function isLastPageRequest(pagination: CursorPaginationState): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Single source of truth: returns the rangeStart to set after a paginated response, or null.
|
|
59
|
+
* Use in one place after every cursor-paginated load: if (v != null) setRangeStart(v).
|
|
60
|
+
* Encodes "when" (only for last-page request) and "value" (getLastPageRangeStart).
|
|
61
|
+
*/
|
|
62
|
+
export declare function getRangeStartToApplyAfterLoad(pagination: CursorPaginationState, totalCount: number, nodesLength: number): number | null;
|
|
63
|
+
/**
|
|
64
|
+
* Effective page size from pagination state (first or last, or default).
|
|
65
|
+
*/
|
|
66
|
+
export declare function getPageSize(pagination: CursorPaginationState, defaultSize?: number): number;
|
|
67
|
+
/**
|
|
68
|
+
* Range start after "Next": current + pageSize.
|
|
69
|
+
* Use in pagination lib only; hook passes (prev, pageSize).
|
|
70
|
+
*/
|
|
71
|
+
export declare function getRangeStartAfterNext(currentRangeStart: number, pageSize: number): number;
|
|
72
|
+
/**
|
|
73
|
+
* Range start after "Previous": go back one page, not below 1.
|
|
74
|
+
* Use in pagination lib only; hook passes (prev, pageSize).
|
|
75
|
+
*/
|
|
76
|
+
export declare function getRangeStartAfterPrevious(currentRangeStart: number, pageSize: number): number;
|
|
77
|
+
/**
|
|
78
|
+
* Clamp value for setRangeStart: use value if >= 1, else keep current (avoid 0 or negative).
|
|
79
|
+
* Use when applying last-page range or external fixes.
|
|
80
|
+
*/
|
|
81
|
+
export declare function clampRangeStartForSet(value: number, currentRangeStart: number): number;
|
|
82
|
+
/**
|
|
83
|
+
* True when the "Last" button should be disabled (on last page or no data).
|
|
84
|
+
* Pass hasNextPage from server when available so Last disables even if rangeStart lags.
|
|
85
|
+
*/
|
|
86
|
+
export declare function isLastPageDisabled(totalCount: number, currentPage: number, pageSize: number, hasNextPage?: boolean): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Segment for page-number strip: First | Prev | 1 ... 59 [60] 61 ... 100 | Next | Last.
|
|
89
|
+
* Only first/previous/next/last are O(1) with cursor; page numbers are clickable only when they map to one of those.
|
|
90
|
+
*/
|
|
91
|
+
export type PageStripAction = 'first' | 'previous' | 'next' | 'last';
|
|
92
|
+
export type PageStripSegment = {
|
|
93
|
+
type: 'number';
|
|
94
|
+
page: number;
|
|
95
|
+
action: PageStripAction | null;
|
|
96
|
+
} | {
|
|
97
|
+
type: 'ellipsis';
|
|
98
|
+
};
|
|
99
|
+
/** Options for getPageNumberStrip: how many page numbers at start, around current (middle), and end. */
|
|
100
|
+
export interface PageStripOptions {
|
|
101
|
+
/** Pages at start (default 1). E.g. 1 => show page 1. */
|
|
102
|
+
start?: number;
|
|
103
|
+
/**
|
|
104
|
+
* Middle: when start=0 and end=0, this is the **total** count (e.g. 3 => show only current-1, current, current+1).
|
|
105
|
+
* Otherwise it's the radius (pages on each side). E.g. 1 => show current-1, current, current+1.
|
|
106
|
+
*/
|
|
107
|
+
middle?: number;
|
|
108
|
+
/** Pages at end (default 1). E.g. 1 => show last page. */
|
|
109
|
+
end?: number;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Build page strip segments for cursor-safe UI: 1 ... current-1 [current] current+1 ... totalPages.
|
|
113
|
+
* Only segments with action first/previous/next/last are clickable (one O(1) request each).
|
|
114
|
+
* No duplicate page numbers (e.g. when on page 2 you get 1 2 3 ... not 1 1 2 3).
|
|
115
|
+
*/
|
|
116
|
+
export declare function getPageNumberStrip(currentPage: number, totalPages: number, options?: PageStripOptions): PageStripSegment[];
|
|
117
|
+
/**
|
|
118
|
+
* Format range as wordless numeric string for i18n: "X – Y / Z" or "0 / Z".
|
|
119
|
+
* Append optional itemLabel so the only translatable part is the label.
|
|
120
|
+
* Example: "1 – 25 / 100" or "1 – 25 / 100 users".
|
|
121
|
+
*/
|
|
122
|
+
export declare function formatShowingRange(rangeStart: number, nodesLength: number, totalCount: number, itemLabel?: string): string;
|
|
123
|
+
/** Which parts of the pagination bar to show. Omitted or true = show, false = hide. strip can be options (e.g. start:0 middle:3 end:0). */
|
|
124
|
+
export interface BarLayout {
|
|
125
|
+
first?: boolean;
|
|
126
|
+
previous?: boolean;
|
|
127
|
+
/** true = default strip, or PageStripOptions (e.g. { start: 0, middle: 3, end: 0 }), false = hide */
|
|
128
|
+
strip?: boolean | PageStripOptions;
|
|
129
|
+
next?: boolean;
|
|
130
|
+
last?: boolean;
|
|
131
|
+
}
|
|
132
|
+
/** Presets for common bar layouts. Single source of truth for app and any other consumer. */
|
|
133
|
+
export declare const BAR_PRESETS: Record<string, BarLayout>;
|
|
134
|
+
export type BarPresetName = keyof typeof BAR_PRESETS;
|
|
135
|
+
/** Resolve layout from preset name or custom layout. Defaults to full. */
|
|
136
|
+
export declare function resolveBarLayout(preset?: BarPresetName, layout?: BarLayout): BarLayout;
|
|
137
|
+
/** Strip options to pass to getDisplay/getPageNumberStrip from a bar layout and optional prop override. */
|
|
138
|
+
export declare function getBarLayoutStripOptions(barLayout: BarLayout, propStripOptions?: PageStripOptions): PageStripOptions | undefined;
|
|
139
|
+
/** Which parts of the bar are visible. Only explicitly true (or strip as object) = show. */
|
|
140
|
+
export interface BarVisibility {
|
|
141
|
+
showFirst: boolean;
|
|
142
|
+
showPrevious: boolean;
|
|
143
|
+
showStrip: boolean;
|
|
144
|
+
showNext: boolean;
|
|
145
|
+
showLast: boolean;
|
|
146
|
+
}
|
|
147
|
+
export declare function getBarVisibility(barLayout: BarLayout): BarVisibility;
|
|
148
|
+
/** Strip segment with computed disabled/isCurrent so bar doesn't duplicate logic. */
|
|
149
|
+
export type BarStripSegment = {
|
|
150
|
+
type: 'ellipsis';
|
|
151
|
+
} | {
|
|
152
|
+
type: 'number';
|
|
153
|
+
page: number;
|
|
154
|
+
action: PageStripAction | null;
|
|
155
|
+
disabled: boolean;
|
|
156
|
+
isCurrent: boolean;
|
|
157
|
+
};
|
|
158
|
+
/** Input to compute bar control state (display already has currentPage, totalPages, pageStrip). */
|
|
159
|
+
export interface BarStateInput {
|
|
160
|
+
display: PaginationDisplay;
|
|
161
|
+
pageInfo: CursorPageInfo;
|
|
162
|
+
loading: boolean;
|
|
163
|
+
isLastDisabled: boolean;
|
|
164
|
+
}
|
|
165
|
+
/** First/Previous/Next/Last button state. */
|
|
166
|
+
export interface BarButtonState {
|
|
167
|
+
disabled: boolean;
|
|
168
|
+
}
|
|
169
|
+
/** Full bar state: visibility + disabled for each control + strip segments with disabled/isCurrent. */
|
|
170
|
+
export interface BarState {
|
|
171
|
+
visibility: BarVisibility;
|
|
172
|
+
first: BarButtonState;
|
|
173
|
+
previous: BarButtonState;
|
|
174
|
+
next: BarButtonState;
|
|
175
|
+
last: BarButtonState;
|
|
176
|
+
strip: {
|
|
177
|
+
visible: boolean;
|
|
178
|
+
segments: BarStripSegment[];
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
export declare function getBarState(barLayout: BarLayout, input: BarStateInput): BarState;
|
|
182
|
+
/** Input for getDisplay: everything needed to compute UI state. */
|
|
183
|
+
export interface PaginationDisplayInput {
|
|
184
|
+
rangeStart: number;
|
|
185
|
+
nodesLength: number;
|
|
186
|
+
totalCount: number;
|
|
187
|
+
pageSize: number;
|
|
188
|
+
/** From server; when false, Last is disabled even if rangeStart lags. */
|
|
189
|
+
hasNextPage?: boolean;
|
|
190
|
+
/** Optional label for showing text (e.g. "users"). Wordless if omitted. */
|
|
191
|
+
itemLabel?: string;
|
|
192
|
+
/** Optional strip layout: start / middle / end chunk sizes. */
|
|
193
|
+
stripOptions?: PageStripOptions;
|
|
194
|
+
/** When provided, used to only treat as last page when the request was last+N (no before). Avoids wrong page after clicking previous. */
|
|
195
|
+
pagination?: CursorPaginationState;
|
|
196
|
+
}
|
|
197
|
+
/** Everything the pagination UI needs in one object. */
|
|
198
|
+
export interface PaginationDisplay {
|
|
199
|
+
currentPage: number;
|
|
200
|
+
totalPages: number;
|
|
201
|
+
showingText: string;
|
|
202
|
+
isLastDisabled: boolean;
|
|
203
|
+
/** Segments for page strip: First | Prev | 1 ... 59 [60] 61 ... 100 | Next | Last (cursor-safe). */
|
|
204
|
+
pageStrip: PageStripSegment[];
|
|
205
|
+
}
|
|
206
|
+
/** When getDisplay is called with barLayout option, it returns display + barState in one go. */
|
|
207
|
+
export type PaginationDisplayWithBarState = PaginationDisplay & {
|
|
208
|
+
barState: BarState;
|
|
209
|
+
};
|
|
210
|
+
/** Optional second arg: pass preset/layout (getDisplay resolves) or barLayout; when set, getDisplay also returns barState (plug-and-play). */
|
|
211
|
+
export interface GetDisplayBarOptions {
|
|
212
|
+
/** Resolved layout; if omitted, resolved from preset/layout below. */
|
|
213
|
+
barLayout?: BarLayout;
|
|
214
|
+
preset?: BarPresetName;
|
|
215
|
+
layout?: BarLayout;
|
|
216
|
+
loading?: boolean;
|
|
217
|
+
hasPreviousPage?: boolean;
|
|
218
|
+
}
|
|
219
|
+
/** Build display from input (used by both Orchestra and Function mode). */
|
|
220
|
+
export declare function getDisplayFromInput(input: PaginationDisplayInput): PaginationDisplay;
|
|
221
|
+
/** Add barState to display when options (preset/layout/barLayout) are provided. Use in Orchestra and Function mode. */
|
|
222
|
+
export declare function addBarStateIfRequested(display: PaginationDisplay, options: GetDisplayBarOptions | undefined, hasNextPage?: boolean): PaginationDisplay | PaginationDisplayWithBarState;
|
|
223
|
+
/**
|
|
224
|
+
* Minimal facade: call a few methods for common flows.
|
|
225
|
+
* For one-off calculations use the top-level functions (getCurrentPage, formatShowingRange, etc.).
|
|
226
|
+
*
|
|
227
|
+
* @example
|
|
228
|
+
* import { TSPagination } from 'ts-client-lib/utils/TSPagaination';
|
|
229
|
+
*
|
|
230
|
+
* // 1) UI: one call for all display values
|
|
231
|
+
* const display = TSPagination.getDisplay({
|
|
232
|
+
* rangeStart, nodesLength: nodes.length, totalCount, pageSize,
|
|
233
|
+
* hasNextPage: pageInfo.hasNextPage, itemLabel: 'users'
|
|
234
|
+
* });
|
|
235
|
+
* // use display.currentPage, display.showingText, display.isLastDisabled
|
|
236
|
+
*
|
|
237
|
+
* // 2) After response: should we update rangeStart?
|
|
238
|
+
* const rangeStartToApply = TSPagination.getRangeStartAfterResponse(pagination, totalCount, nodes.length);
|
|
239
|
+
* if (rangeStartToApply != null) setRangeStart(rangeStartToApply);
|
|
240
|
+
*
|
|
241
|
+
* // 3) Next/Previous: new rangeStart for a direction
|
|
242
|
+
* const nextRangeStart = TSPagination.getRangeStartAfterMove('next', rangeStart, pageSize);
|
|
243
|
+
*/
|
|
244
|
+
export declare class TSPagination {
|
|
245
|
+
/**
|
|
246
|
+
* One call for display (+ optional barState via addBarStateIfRequested). Uses getDisplayFromInput + addBarStateIfRequested.
|
|
247
|
+
*/
|
|
248
|
+
static getDisplay(input: PaginationDisplayInput, options?: GetDisplayBarOptions): PaginationDisplay | PaginationDisplayWithBarState;
|
|
249
|
+
/**
|
|
250
|
+
* After a paginated response: returns rangeStart to set when the request was "last page", else null.
|
|
251
|
+
*/
|
|
252
|
+
static getRangeStartAfterResponse(pagination: CursorPaginationState, totalCount: number, nodesLength: number): number | null;
|
|
253
|
+
/**
|
|
254
|
+
* New rangeStart after moving one page in a direction (for next or previous).
|
|
255
|
+
*/
|
|
256
|
+
static getRangeStartAfterMove(direction: 'next' | 'previous', currentRangeStart: number, pageSize: number): number;
|
|
257
|
+
/** Effective page size from pagination state. Use this so you never need to call getPageSize from the lib. */
|
|
258
|
+
static getPageSize(pagination: CursorPaginationState, defaultSize?: number): number;
|
|
259
|
+
/** Clamp value for setRangeStart (use value if >= 1, else keep current). */
|
|
260
|
+
static clampRangeStartForSet(value: number, currentRangeStart: number): number;
|
|
261
|
+
/** 1-based current page from rangeStart and page size. */
|
|
262
|
+
static getCurrentPage(rangeStart: number, pageSize: number): number;
|
|
263
|
+
/** Total pages for "Page X of Y". */
|
|
264
|
+
static getTotalPages(totalCount: number, pageSize: number): number;
|
|
265
|
+
/** Whether the Last button should be disabled. */
|
|
266
|
+
static isLastDisabled(totalCount: number, currentPage: number, pageSize: number, hasNextPage?: boolean): boolean;
|
|
267
|
+
/**
|
|
268
|
+
* Execute a navigation (first | previous | next | last). Use this in Orchestra mode so the
|
|
269
|
+
* orchestrator owns all behavior; the hook only holds state and calls this.
|
|
270
|
+
* When going 'previous' from the last page, pass totalCount so we don't use stale rangeStart.
|
|
271
|
+
*/
|
|
272
|
+
static executeGo(direction: 'first' | 'previous' | 'next' | 'last', state: {
|
|
273
|
+
pagination: CursorPaginationState;
|
|
274
|
+
pageInfo: CursorPageInfo;
|
|
275
|
+
rangeStart: number;
|
|
276
|
+
/** When on last page and going 'previous', use this to compute correct rangeStart (avoids jump to page-2). */
|
|
277
|
+
totalCount?: number;
|
|
278
|
+
}, setters: {
|
|
279
|
+
setPagination: (p: CursorPaginationState) => void;
|
|
280
|
+
setRangeStartState: (value: number) => void;
|
|
281
|
+
}, defaultPageSize: number): void;
|
|
282
|
+
}
|