@cranberry-money/shared-constants 8.11.0 → 8.13.0

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 (49) hide show
  1. package/dist/config.d.ts +108 -0
  2. package/dist/config.d.ts.map +1 -0
  3. package/dist/config.js +136 -0
  4. package/dist/config.js.map +1 -0
  5. package/dist/utilities.d.ts +209 -0
  6. package/dist/utilities.d.ts.map +1 -0
  7. package/dist/utilities.js +215 -0
  8. package/dist/utilities.js.map +1 -0
  9. package/package.json +1 -1
  10. package/dist/config/defaults.d.ts +0 -49
  11. package/dist/config/defaults.d.ts.map +0 -1
  12. package/dist/config/defaults.js +0 -48
  13. package/dist/config/defaults.js.map +0 -1
  14. package/dist/config/index.d.ts +0 -4
  15. package/dist/config/index.d.ts.map +0 -1
  16. package/dist/config/index.js +0 -4
  17. package/dist/config/index.js.map +0 -1
  18. package/dist/config/pagination.d.ts +0 -12
  19. package/dist/config/pagination.d.ts.map +0 -1
  20. package/dist/config/pagination.js +0 -21
  21. package/dist/config/pagination.js.map +0 -1
  22. package/dist/config/thresholds.d.ts +0 -49
  23. package/dist/config/thresholds.d.ts.map +0 -1
  24. package/dist/config/thresholds.js +0 -60
  25. package/dist/config/thresholds.js.map +0 -1
  26. package/dist/utilities/common.d.ts +0 -25
  27. package/dist/utilities/common.d.ts.map +0 -1
  28. package/dist/utilities/common.js +0 -17
  29. package/dist/utilities/common.js.map +0 -1
  30. package/dist/utilities/defaults.d.ts +0 -42
  31. package/dist/utilities/defaults.d.ts.map +0 -1
  32. package/dist/utilities/defaults.js +0 -43
  33. package/dist/utilities/defaults.js.map +0 -1
  34. package/dist/utilities/index.d.ts +0 -6
  35. package/dist/utilities/index.d.ts.map +0 -1
  36. package/dist/utilities/index.js +0 -6
  37. package/dist/utilities/index.js.map +0 -1
  38. package/dist/utilities/sorting.d.ts +0 -42
  39. package/dist/utilities/sorting.d.ts.map +0 -1
  40. package/dist/utilities/sorting.js +0 -40
  41. package/dist/utilities/sorting.js.map +0 -1
  42. package/dist/utilities/time.d.ts +0 -50
  43. package/dist/utilities/time.d.ts.map +0 -1
  44. package/dist/utilities/time.js +0 -51
  45. package/dist/utilities/time.js.map +0 -1
  46. package/dist/utilities/validation.d.ts +0 -54
  47. package/dist/utilities/validation.d.ts.map +0 -1
  48. package/dist/utilities/validation.js +0 -54
  49. package/dist/utilities/validation.js.map +0 -1
@@ -0,0 +1,108 @@
1
+ export declare const DEFAULT_STRINGS: {
2
+ readonly EMPTY: "";
3
+ readonly UNKNOWN: "Unknown";
4
+ readonly NOT_APPLICABLE: "N/A";
5
+ readonly ERROR_MESSAGE: "An error occurred";
6
+ readonly ZERO: "0";
7
+ readonly NULL_UUID: "00000000-0000-0000-0000-000000000000";
8
+ };
9
+ export declare const DEFAULT_NUMBERS: {
10
+ readonly ZERO: 0;
11
+ readonly PRECISION: 2;
12
+ readonly PERCENTAGE_PRECISION: 2;
13
+ readonly QUANTITY_PRECISION: 6;
14
+ };
15
+ export declare const LOCALE_CONFIG: {
16
+ readonly DEFAULT: "en-AU";
17
+ readonly FALLBACK: "en-US";
18
+ readonly SUPPORTED: readonly ["en-AU", "en-US", "en-GB"];
19
+ };
20
+ export type SupportedLocale = (typeof LOCALE_CONFIG.SUPPORTED)[number];
21
+ export declare const CONFIG_ALLOCATION_DEFAULTS: {
22
+ readonly DEFAULT_PERCENTAGE: 10;
23
+ readonly PERCENTAGE_PRECISION: 0.01;
24
+ readonly TARGET_TOTAL: 100;
25
+ };
26
+ export declare const DEFAULT_FORMAT_OPTIONS: {
27
+ readonly CURRENCY: {
28
+ readonly style: "currency";
29
+ readonly minimumFractionDigits: 2;
30
+ readonly maximumFractionDigits: 2;
31
+ };
32
+ readonly CURRENCY_SIGNED: {
33
+ readonly style: "currency";
34
+ readonly minimumFractionDigits: 2;
35
+ readonly maximumFractionDigits: 2;
36
+ readonly signDisplay: "always";
37
+ };
38
+ readonly PERCENTAGE: {
39
+ readonly style: "percent";
40
+ readonly minimumFractionDigits: 0;
41
+ readonly maximumFractionDigits: 2;
42
+ };
43
+ readonly DECIMAL: {
44
+ readonly style: "decimal";
45
+ readonly minimumFractionDigits: 0;
46
+ readonly maximumFractionDigits: 8;
47
+ };
48
+ };
49
+ export declare const PAGINATION_CONFIG: {
50
+ readonly DEFAULT_PAGE: 1;
51
+ readonly DEFAULT_PAGE_SIZE: 20;
52
+ readonly MIN_PAGE_SIZE: 1;
53
+ readonly MAX_PAGE_SIZE: 100;
54
+ readonly PAGE_SIZE_OPTIONS: readonly [10, 20, 50, 100];
55
+ readonly DEFAULT_SORT_ORDER: "desc";
56
+ };
57
+ export type PageSizeOption = (typeof PAGINATION_CONFIG.PAGE_SIZE_OPTIONS)[number];
58
+ export declare const getValidPageSize: (pageSize: number) => number;
59
+ export declare const getValidPageNumber: (page: number) => number;
60
+ export declare const COMMON_THRESHOLDS: {
61
+ readonly THOUSAND: 1000;
62
+ readonly MILLION: 1000000;
63
+ readonly BILLION: 1000000000;
64
+ readonly DEFAULT_DECIMALS: 2;
65
+ readonly CURRENCY_DECIMALS: 2;
66
+ readonly PERCENTAGE_DECIMALS: 2;
67
+ readonly QUANTITY_DECIMALS: 6;
68
+ readonly PRICE_DECIMALS: 4;
69
+ readonly MAX_NAME_LENGTH: 100;
70
+ readonly MAX_DESCRIPTION_LENGTH: 500;
71
+ readonly MAX_NOTES_LENGTH: 1000;
72
+ readonly MIN_PASSWORD_LENGTH: 8;
73
+ readonly MAX_FILE_SIZE_MB: 10;
74
+ readonly MAX_FILE_NAME_LENGTH: 255;
75
+ readonly MIN_PORTFOLIO_VALUE: 1000;
76
+ readonly MIN_TRADE_AMOUNT: 10;
77
+ readonly MIN_WITHDRAWAL_AMOUNT: 100;
78
+ readonly MAX_PORTFOLIOS_PER_USER: 10;
79
+ readonly MAX_TRADES_PER_DAY: 100;
80
+ readonly MIN_DISPLAY_AMOUNT: 0.01;
81
+ readonly MIN_DISPLAY_PERCENTAGE: 0.01;
82
+ readonly DEFAULT_TIMEOUT_MS: 30000;
83
+ readonly DEFAULT_RETRY_ATTEMPTS: 3;
84
+ readonly DEFAULT_RETRY_DELAY_MS: 1000;
85
+ readonly MAX_RETRY_DELAY_MS: 10000;
86
+ readonly REQUEST_DEBOUNCE_MS: 300;
87
+ };
88
+ export declare const NUMERIC_RANGES: {
89
+ readonly AMOUNT: {
90
+ readonly MIN: 0;
91
+ readonly MAX: 999999999.99;
92
+ };
93
+ readonly PERCENTAGE: {
94
+ readonly MIN: 0;
95
+ readonly MAX: 100;
96
+ };
97
+ readonly QUANTITY: {
98
+ readonly MIN: 0;
99
+ readonly MAX: 999999999.999999;
100
+ };
101
+ };
102
+ export declare const formatWithThousandSeparator: (value: number) => string;
103
+ export declare const NUMBER_ABBREVIATIONS: {
104
+ readonly THOUSAND: "K";
105
+ readonly MILLION: "M";
106
+ readonly BILLION: "B";
107
+ };
108
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe;;;;;;;CAOlB,CAAC;AAEX,eAAO,MAAM,eAAe;;;;;CAKlB,CAAC;AAEX,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvE,eAAO,MAAM,0BAA0B;;;;CAI7B,CAAC;AAEX,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;CAsBzB,CAAC;AAMX,eAAO,MAAM,iBAAiB;;;;;;;CAUpB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,KAAG,MAQnD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,MAEjD,CAAC;AAMF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCpB,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;;;;;;;;CAajB,CAAC;AAEX,eAAO,MAAM,2BAA2B,GAAI,OAAO,MAAM,KAAG,MAW3D,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;CAIvB,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,136 @@
1
+ // ============================================
2
+ // Default Values
3
+ // ============================================
4
+ export const DEFAULT_STRINGS = {
5
+ EMPTY: '',
6
+ UNKNOWN: 'Unknown',
7
+ NOT_APPLICABLE: 'N/A',
8
+ ERROR_MESSAGE: 'An error occurred',
9
+ ZERO: '0',
10
+ NULL_UUID: '00000000-0000-0000-0000-000000000000',
11
+ };
12
+ export const DEFAULT_NUMBERS = {
13
+ ZERO: 0,
14
+ PRECISION: 2,
15
+ PERCENTAGE_PRECISION: 2,
16
+ QUANTITY_PRECISION: 6,
17
+ };
18
+ export const LOCALE_CONFIG = {
19
+ DEFAULT: 'en-AU',
20
+ FALLBACK: 'en-US',
21
+ SUPPORTED: ['en-AU', 'en-US', 'en-GB'],
22
+ };
23
+ export const CONFIG_ALLOCATION_DEFAULTS = {
24
+ DEFAULT_PERCENTAGE: 10,
25
+ PERCENTAGE_PRECISION: 0.01,
26
+ TARGET_TOTAL: 100,
27
+ };
28
+ export const DEFAULT_FORMAT_OPTIONS = {
29
+ CURRENCY: {
30
+ style: 'currency',
31
+ minimumFractionDigits: DEFAULT_NUMBERS.PRECISION,
32
+ maximumFractionDigits: DEFAULT_NUMBERS.PRECISION,
33
+ },
34
+ CURRENCY_SIGNED: {
35
+ style: 'currency',
36
+ minimumFractionDigits: DEFAULT_NUMBERS.PRECISION,
37
+ maximumFractionDigits: DEFAULT_NUMBERS.PRECISION,
38
+ signDisplay: 'always',
39
+ },
40
+ PERCENTAGE: {
41
+ style: 'percent',
42
+ minimumFractionDigits: 0,
43
+ maximumFractionDigits: DEFAULT_NUMBERS.PERCENTAGE_PRECISION,
44
+ },
45
+ DECIMAL: {
46
+ style: 'decimal',
47
+ minimumFractionDigits: 0,
48
+ maximumFractionDigits: 8,
49
+ },
50
+ };
51
+ // ============================================
52
+ // Pagination
53
+ // ============================================
54
+ export const PAGINATION_CONFIG = {
55
+ DEFAULT_PAGE: 1,
56
+ DEFAULT_PAGE_SIZE: 20,
57
+ MIN_PAGE_SIZE: 1,
58
+ MAX_PAGE_SIZE: 100,
59
+ PAGE_SIZE_OPTIONS: [10, 20, 50, 100],
60
+ DEFAULT_SORT_ORDER: 'desc',
61
+ };
62
+ export const getValidPageSize = (pageSize) => {
63
+ if (pageSize < PAGINATION_CONFIG.MIN_PAGE_SIZE) {
64
+ return PAGINATION_CONFIG.MIN_PAGE_SIZE;
65
+ }
66
+ if (pageSize > PAGINATION_CONFIG.MAX_PAGE_SIZE) {
67
+ return PAGINATION_CONFIG.MAX_PAGE_SIZE;
68
+ }
69
+ return pageSize;
70
+ };
71
+ export const getValidPageNumber = (page) => {
72
+ return Math.max(PAGINATION_CONFIG.DEFAULT_PAGE, page);
73
+ };
74
+ // ============================================
75
+ // Thresholds and Limits
76
+ // ============================================
77
+ export const COMMON_THRESHOLDS = {
78
+ THOUSAND: 1000,
79
+ MILLION: 1000000,
80
+ BILLION: 1000000000,
81
+ DEFAULT_DECIMALS: 2,
82
+ CURRENCY_DECIMALS: 2,
83
+ PERCENTAGE_DECIMALS: 2,
84
+ QUANTITY_DECIMALS: 6,
85
+ PRICE_DECIMALS: 4,
86
+ MAX_NAME_LENGTH: 100,
87
+ MAX_DESCRIPTION_LENGTH: 500,
88
+ MAX_NOTES_LENGTH: 1000,
89
+ MIN_PASSWORD_LENGTH: 8,
90
+ MAX_FILE_SIZE_MB: 10,
91
+ MAX_FILE_NAME_LENGTH: 255,
92
+ MIN_PORTFOLIO_VALUE: 1000,
93
+ MIN_TRADE_AMOUNT: 10,
94
+ MIN_WITHDRAWAL_AMOUNT: 100,
95
+ MAX_PORTFOLIOS_PER_USER: 10,
96
+ MAX_TRADES_PER_DAY: 100,
97
+ MIN_DISPLAY_AMOUNT: 0.01,
98
+ MIN_DISPLAY_PERCENTAGE: 0.01,
99
+ DEFAULT_TIMEOUT_MS: 30000,
100
+ DEFAULT_RETRY_ATTEMPTS: 3,
101
+ DEFAULT_RETRY_DELAY_MS: 1000,
102
+ MAX_RETRY_DELAY_MS: 10000,
103
+ REQUEST_DEBOUNCE_MS: 300,
104
+ };
105
+ export const NUMERIC_RANGES = {
106
+ AMOUNT: {
107
+ MIN: 0,
108
+ MAX: 999999999.99,
109
+ },
110
+ PERCENTAGE: {
111
+ MIN: 0,
112
+ MAX: 100,
113
+ },
114
+ QUANTITY: {
115
+ MIN: 0,
116
+ MAX: 999999999.999999,
117
+ },
118
+ };
119
+ export const formatWithThousandSeparator = (value) => {
120
+ if (value >= COMMON_THRESHOLDS.BILLION) {
121
+ return `${(value / COMMON_THRESHOLDS.BILLION).toFixed(1)}B`;
122
+ }
123
+ if (value >= COMMON_THRESHOLDS.MILLION) {
124
+ return `${(value / COMMON_THRESHOLDS.MILLION).toFixed(1)}M`;
125
+ }
126
+ if (value >= COMMON_THRESHOLDS.THOUSAND) {
127
+ return `${(value / COMMON_THRESHOLDS.THOUSAND).toFixed(1)}K`;
128
+ }
129
+ return value.toString();
130
+ };
131
+ export const NUMBER_ABBREVIATIONS = {
132
+ THOUSAND: 'K',
133
+ MILLION: 'M',
134
+ BILLION: 'B',
135
+ };
136
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,209 @@
1
+ export declare const DECIMAL_PLACES: 2;
2
+ export declare const DEFAULT_NUMERIC_ZERO: 0;
3
+ export declare const DEFAULT_EMPTY_STRING: "";
4
+ export declare const QUANTITY_FORMAT_THRESHOLD_MILLION: 1000000;
5
+ export declare const QUANTITY_FORMAT_THRESHOLD_THOUSAND: 1000;
6
+ export declare const ERROR_TYPE_BUSINESS_LOGIC = "business_logic";
7
+ export declare const ERROR_TYPE_PERMISSION = "permission";
8
+ export declare const ERROR_TYPE_SERVER = "server";
9
+ export declare const LOCALE_AUSTRALIA: "en-AU";
10
+ export declare const NUMBER_FORMAT_OPTIONS_CURRENCY: {
11
+ readonly style: "currency";
12
+ readonly minimumFractionDigits: 2;
13
+ readonly maximumFractionDigits: 2;
14
+ };
15
+ export declare const NUMBER_FORMAT_OPTIONS_CURRENCY_SIGNED: {
16
+ readonly style: "currency";
17
+ readonly minimumFractionDigits: 2;
18
+ readonly maximumFractionDigits: 2;
19
+ readonly signDisplay: "always";
20
+ };
21
+ export declare const QUERY_PARAM_ORDER_BY = "order_by";
22
+ export declare const ORDER_BY_CREATED_AT = "created_at";
23
+ export declare const DEFAULT_UNKNOWN_VALUE: "Unknown";
24
+ export declare const DEFAULT_ERROR_MESSAGE: "An error occurred";
25
+ export declare const DEFAULT_VALUES: {
26
+ readonly ZERO: "0";
27
+ readonly EMPTY_STRING: "";
28
+ readonly UNKNOWN: "UNKNOWN";
29
+ readonly NOT_APPLICABLE: "N/A";
30
+ readonly NULL_UUID: "00000000-0000-0000-0000-000000000000";
31
+ };
32
+ export declare const NUMERIC_DEFAULTS: {
33
+ readonly MIN_AMOUNT: 0;
34
+ readonly MAX_AMOUNT: 999999999.99;
35
+ readonly DEFAULT_PRECISION: 2;
36
+ readonly PERCENTAGE_PRECISION: 2;
37
+ readonly QUANTITY_PRECISION: 6;
38
+ };
39
+ export declare const THRESHOLDS: {
40
+ readonly MIN_PORTFOLIO_VALUE: 1000;
41
+ readonly MIN_TRADE_AMOUNT: 10;
42
+ readonly MIN_WITHDRAWAL_AMOUNT: 100;
43
+ readonly MAX_PORTFOLIOS_PER_USER: 10;
44
+ readonly MAX_TRADES_PER_DAY: 100;
45
+ };
46
+ export declare const DISPLAY_LIMITS: {
47
+ readonly MAX_NAME_LENGTH: 100;
48
+ readonly MAX_DESCRIPTION_LENGTH: 500;
49
+ readonly MAX_NOTES_LENGTH: 1000;
50
+ readonly MAX_FILE_SIZE_MB: 10;
51
+ readonly MAX_FILE_NAME_LENGTH: 255;
52
+ readonly DASHBOARD_RECENT_TRADES: 5;
53
+ readonly DASHBOARD_TARGET_TRADES: 5;
54
+ readonly DASHBOARD_TRANSACTIONS: 5;
55
+ readonly DASHBOARD_WITHDRAWALS: 5;
56
+ readonly DEFAULT_PAGE_SIZE: 20;
57
+ readonly PAGE_SIZE_OPTIONS: readonly [10, 20, 50, 100];
58
+ readonly AUTOCOMPLETE_MAX_RESULTS: 10;
59
+ readonly RECENT_SEARCHES_MAX: 5;
60
+ };
61
+ export declare const ALLOCATION_DEFAULTS: {
62
+ readonly DEFAULT_PERCENTAGE: 10;
63
+ readonly PERCENTAGE_PRECISION: 0.01;
64
+ readonly TARGET_TOTAL: 100;
65
+ };
66
+ export declare const SORT_DIRECTION: {
67
+ readonly ASC: "asc";
68
+ readonly DESC: "desc";
69
+ };
70
+ export type SortDirection = (typeof SORT_DIRECTION)[keyof typeof SORT_DIRECTION];
71
+ export declare const SORT_FIELDS: {
72
+ readonly CREATED_AT: "created_at";
73
+ readonly UPDATED_AT: "updated_at";
74
+ readonly DATE: "date";
75
+ readonly NAME: "name";
76
+ readonly TITLE: "title";
77
+ readonly AMOUNT: "amount";
78
+ readonly VALUE: "value";
79
+ readonly PRICE: "price";
80
+ readonly QUANTITY: "quantity";
81
+ readonly STATUS: "status";
82
+ readonly PRIORITY: "priority";
83
+ readonly SYMBOL: "symbol";
84
+ readonly TYPE: "type";
85
+ };
86
+ export type SortField = (typeof SORT_FIELDS)[keyof typeof SORT_FIELDS];
87
+ export declare const DEFAULT_SORT_CONFIG: {
88
+ readonly PORTFOLIOS: {
89
+ readonly field: "updated_at";
90
+ readonly direction: "desc";
91
+ };
92
+ readonly TRADES: {
93
+ readonly field: "created_at";
94
+ readonly direction: "desc";
95
+ };
96
+ readonly WITHDRAWALS: {
97
+ readonly field: "created_at";
98
+ readonly direction: "desc";
99
+ };
100
+ readonly TRANSACTIONS: {
101
+ readonly field: "date";
102
+ readonly direction: "desc";
103
+ };
104
+ };
105
+ export declare const SORT_DIRECTION_ASC: "asc";
106
+ export declare const SORT_DIRECTION_DESC: "desc";
107
+ export declare const MILLISECONDS: {
108
+ readonly SECOND: 1000;
109
+ readonly MINUTE: number;
110
+ readonly HOUR: number;
111
+ readonly DAY: number;
112
+ readonly WEEK: number;
113
+ };
114
+ export declare const SECONDS: {
115
+ readonly MINUTE: 60;
116
+ readonly HOUR: number;
117
+ readonly DAY: number;
118
+ readonly WEEK: number;
119
+ };
120
+ export declare const DATE_FORMATS: {
121
+ readonly DISPLAY_DATE: "MMM dd, yyyy";
122
+ readonly DISPLAY_DATE_TIME: "MMM dd, yyyy HH:mm";
123
+ readonly DISPLAY_DATE_TIME_SECONDS: "MMM dd, yyyy HH:mm:ss";
124
+ readonly DISPLAY_SHORT: "MM/dd/yy";
125
+ readonly API_DATE: "yyyy-MM-dd";
126
+ readonly API_DATETIME: "yyyy-MM-dd'T'HH:mm:ss";
127
+ readonly API_DATETIME_WITH_TIMEZONE: "yyyy-MM-dd'T'HH:mm:ss'Z'";
128
+ readonly MONTH_YEAR: "MMM yyyy";
129
+ readonly YEAR: "yyyy";
130
+ readonly TIME: "HH:mm";
131
+ readonly TIME_WITH_SECONDS: "HH:mm:ss";
132
+ };
133
+ export declare const TIME_ZONES: {
134
+ readonly UTC: "UTC";
135
+ readonly EST: "America/New_York";
136
+ readonly PST: "America/Los_Angeles";
137
+ readonly SYDNEY: "Australia/Sydney";
138
+ readonly MELBOURNE: "Australia/Melbourne";
139
+ };
140
+ export type TimeZone = (typeof TIME_ZONES)[keyof typeof TIME_ZONES];
141
+ export declare const SESSION_DURATIONS: {
142
+ readonly DEFAULT: number;
143
+ readonly EXTENDED: number;
144
+ readonly REMEMBER_ME: number;
145
+ };
146
+ export declare const MILLISECONDS_PER_DAY: number;
147
+ export declare const DEFAULT_RECENT_TRANSACTIONS_DAYS = 30;
148
+ export declare const DATE_ISO_TIME_SEPARATOR = "T";
149
+ export type TimeRange = '1W' | '1M' | '6M' | '1Y' | '3Y' | '5Y' | '10Y';
150
+ export interface TimeRangeConfig {
151
+ label: string;
152
+ value: TimeRange;
153
+ days: number;
154
+ }
155
+ export declare const TIME_RANGES: TimeRangeConfig[];
156
+ export declare const REGEX_PATTERNS: {
157
+ readonly EMAIL: RegExp;
158
+ readonly PHONE: RegExp;
159
+ readonly USERNAME: RegExp;
160
+ readonly PASSWORD: RegExp;
161
+ readonly UUID: RegExp;
162
+ readonly NUMERIC: RegExp;
163
+ readonly DECIMAL: RegExp;
164
+ readonly ALPHA_ONLY: RegExp;
165
+ readonly ALPHANUMERIC: RegExp;
166
+ readonly URL: RegExp;
167
+ };
168
+ export declare const VALIDATION_RULES: {
169
+ readonly MIN_USERNAME_LENGTH: 3;
170
+ readonly MAX_USERNAME_LENGTH: 30;
171
+ readonly MIN_PASSWORD_LENGTH: 8;
172
+ readonly MAX_PASSWORD_LENGTH: 128;
173
+ readonly MIN_NAME_LENGTH: 2;
174
+ readonly MAX_NAME_LENGTH: 50;
175
+ readonly MIN_PORTFOLIO_NAME_LENGTH: 3;
176
+ readonly MAX_PORTFOLIO_NAME_LENGTH: 100;
177
+ readonly MIN_PORTFOLIO_DESCRIPTION_LENGTH: 0;
178
+ readonly MAX_PORTFOLIO_DESCRIPTION_LENGTH: 500;
179
+ readonly MIN_TRADE_AMOUNT: 0.01;
180
+ readonly MAX_TRADE_AMOUNT: 1000000;
181
+ readonly MIN_TRADE_QUANTITY: 0.001;
182
+ readonly MAX_TRADE_QUANTITY: 1000000;
183
+ readonly MIN_PRICE: 0.01;
184
+ readonly MAX_PRICE: 1000000;
185
+ readonly MIN_WITHDRAWAL_AMOUNT: 100;
186
+ readonly MAX_WITHDRAWAL_AMOUNT: 1000000;
187
+ readonly MAX_DESCRIPTION_LENGTH: 500;
188
+ readonly MAX_NOTES_LENGTH: 1000;
189
+ readonly MAX_FILE_SIZE_MB: 10;
190
+ readonly MAX_FILE_NAME_LENGTH: 255;
191
+ readonly MIN_ADDRESS_LENGTH: 10;
192
+ readonly MAX_ADDRESS_LENGTH: 200;
193
+ readonly MIN_POSTAL_CODE_LENGTH: 3;
194
+ readonly MAX_POSTAL_CODE_LENGTH: 10;
195
+ };
196
+ export declare const VALIDATION_ERRORS: {
197
+ readonly REQUIRED: "This field is required";
198
+ readonly INVALID_EMAIL: "Please enter a valid email address";
199
+ readonly INVALID_PHONE: "Please enter a valid phone number";
200
+ readonly INVALID_USERNAME: "Username must be 3-30 characters, letters, numbers, underscores, and hyphens only";
201
+ readonly INVALID_PASSWORD: "Password must be at least 8 characters with uppercase, lowercase, and numbers";
202
+ readonly MIN_LENGTH: (field: string, min: number) => string;
203
+ readonly MAX_LENGTH: (field: string, max: number) => string;
204
+ readonly MIN_VALUE: (field: string, min: number) => string;
205
+ readonly MAX_VALUE: (field: string, max: number) => string;
206
+ readonly INVALID_FORMAT: (field: string) => string;
207
+ readonly PASSWORDS_DONT_MATCH: "Passwords do not match";
208
+ };
209
+ //# sourceMappingURL=utilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,cAAc,GAAqC,CAAC;AAEjE,eAAO,MAAM,oBAAoB,GAAuB,CAAC;AACzD,eAAO,MAAM,oBAAoB,IAAwB,CAAC;AAE1D,eAAO,MAAM,iCAAiC,SAA4B,CAAC;AAC3E,eAAO,MAAM,kCAAkC,MAA6B,CAAC;AAE7E,eAAO,MAAM,yBAAyB,mBAAmB,CAAC;AAC1D,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAClD,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,eAAO,MAAM,gBAAgB,SAAwB,CAAC;AAEtD,eAAO,MAAM,8BAA8B;;;;CAAkC,CAAC;AAE9E,eAAO,MAAM,qCAAqC;;;;;CAAyC,CAAC;AAE5F,eAAO,MAAM,oBAAoB,aAAa,CAAC;AAC/C,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAEhD,eAAO,MAAM,qBAAqB,WAA0B,CAAC;AAC7D,eAAO,MAAM,qBAAqB,qBAAgC,CAAC;AAMnE,eAAO,MAAM,cAAc;;;;;;CAMjB,CAAC;AAEX,eAAO,MAAM,gBAAgB;;;;;;CAMnB,CAAC;AAEX,eAAO,MAAM,UAAU;;;;;;CAMb,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;;;;;;;;;CAiBjB,CAAC;AAEX,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC;AAMX,eAAO,MAAM,cAAc;;;CAGjB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAEjF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;CAkBd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEvE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;CAiBtB,CAAC;AAEX,eAAO,MAAM,kBAAkB,OAAqB,CAAC;AACrD,eAAO,MAAM,mBAAmB,QAAsB,CAAC;AAMvD,eAAO,MAAM,YAAY;;;;;;CAMf,CAAC;AAEX,eAAO,MAAM,OAAO;;;;;CAKV,CAAC;AAEX,eAAO,MAAM,YAAY;;;;;;;;;;;;CAcf,CAAC;AAEX,eAAO,MAAM,UAAU;;;;;;CAMb,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAEpE,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX,eAAO,MAAM,oBAAoB,QAAsB,CAAC;AAExD,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AAExE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,WAAW,EAAE,eAAe,EAQxC,CAAC;AAMF,eAAO,MAAM,cAAc;;;;;;;;;;;CAWjB,CAAC;AAEX,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCnB,CAAC;AAEX,eAAO,MAAM,iBAAiB;;;;;;iCAMR,MAAM,OAAO,MAAM;iCACnB,MAAM,OAAO,MAAM;gCACpB,MAAM,OAAO,MAAM;gCACnB,MAAM,OAAO,MAAM;qCACd,MAAM;;CAEtB,CAAC"}
@@ -0,0 +1,215 @@
1
+ import { COMMON_THRESHOLDS, DEFAULT_STRINGS, DEFAULT_NUMBERS, LOCALE_CONFIG, DEFAULT_FORMAT_OPTIONS, CONFIG_ALLOCATION_DEFAULTS } from './config';
2
+ // ============================================
3
+ // Common Utilities
4
+ // ============================================
5
+ export const DECIMAL_PLACES = COMMON_THRESHOLDS.DEFAULT_DECIMALS;
6
+ export const DEFAULT_NUMERIC_ZERO = DEFAULT_NUMBERS.ZERO;
7
+ export const DEFAULT_EMPTY_STRING = DEFAULT_STRINGS.EMPTY;
8
+ export const QUANTITY_FORMAT_THRESHOLD_MILLION = COMMON_THRESHOLDS.MILLION;
9
+ export const QUANTITY_FORMAT_THRESHOLD_THOUSAND = COMMON_THRESHOLDS.THOUSAND;
10
+ export const ERROR_TYPE_BUSINESS_LOGIC = 'business_logic';
11
+ export const ERROR_TYPE_PERMISSION = 'permission';
12
+ export const ERROR_TYPE_SERVER = 'server';
13
+ export const LOCALE_AUSTRALIA = LOCALE_CONFIG.DEFAULT;
14
+ export const NUMBER_FORMAT_OPTIONS_CURRENCY = DEFAULT_FORMAT_OPTIONS.CURRENCY;
15
+ export const NUMBER_FORMAT_OPTIONS_CURRENCY_SIGNED = DEFAULT_FORMAT_OPTIONS.CURRENCY_SIGNED;
16
+ export const QUERY_PARAM_ORDER_BY = 'order_by';
17
+ export const ORDER_BY_CREATED_AT = 'created_at';
18
+ export const DEFAULT_UNKNOWN_VALUE = DEFAULT_STRINGS.UNKNOWN;
19
+ export const DEFAULT_ERROR_MESSAGE = DEFAULT_STRINGS.ERROR_MESSAGE;
20
+ // ============================================
21
+ // Default Values
22
+ // ============================================
23
+ export const DEFAULT_VALUES = {
24
+ ZERO: DEFAULT_STRINGS.ZERO,
25
+ EMPTY_STRING: DEFAULT_STRINGS.EMPTY,
26
+ UNKNOWN: 'UNKNOWN',
27
+ NOT_APPLICABLE: DEFAULT_STRINGS.NOT_APPLICABLE,
28
+ NULL_UUID: DEFAULT_STRINGS.NULL_UUID,
29
+ };
30
+ export const NUMERIC_DEFAULTS = {
31
+ MIN_AMOUNT: DEFAULT_NUMBERS.ZERO,
32
+ MAX_AMOUNT: 999999999.99,
33
+ DEFAULT_PRECISION: DEFAULT_NUMBERS.PRECISION,
34
+ PERCENTAGE_PRECISION: DEFAULT_NUMBERS.PERCENTAGE_PRECISION,
35
+ QUANTITY_PRECISION: DEFAULT_NUMBERS.QUANTITY_PRECISION,
36
+ };
37
+ export const THRESHOLDS = {
38
+ MIN_PORTFOLIO_VALUE: COMMON_THRESHOLDS.MIN_PORTFOLIO_VALUE,
39
+ MIN_TRADE_AMOUNT: COMMON_THRESHOLDS.MIN_TRADE_AMOUNT,
40
+ MIN_WITHDRAWAL_AMOUNT: COMMON_THRESHOLDS.MIN_WITHDRAWAL_AMOUNT,
41
+ MAX_PORTFOLIOS_PER_USER: COMMON_THRESHOLDS.MAX_PORTFOLIOS_PER_USER,
42
+ MAX_TRADES_PER_DAY: COMMON_THRESHOLDS.MAX_TRADES_PER_DAY,
43
+ };
44
+ export const DISPLAY_LIMITS = {
45
+ MAX_NAME_LENGTH: COMMON_THRESHOLDS.MAX_NAME_LENGTH,
46
+ MAX_DESCRIPTION_LENGTH: COMMON_THRESHOLDS.MAX_DESCRIPTION_LENGTH,
47
+ MAX_NOTES_LENGTH: COMMON_THRESHOLDS.MAX_NOTES_LENGTH,
48
+ MAX_FILE_SIZE_MB: COMMON_THRESHOLDS.MAX_FILE_SIZE_MB,
49
+ MAX_FILE_NAME_LENGTH: COMMON_THRESHOLDS.MAX_FILE_NAME_LENGTH,
50
+ DASHBOARD_RECENT_TRADES: 5,
51
+ DASHBOARD_TARGET_TRADES: 5,
52
+ DASHBOARD_TRANSACTIONS: 5,
53
+ DASHBOARD_WITHDRAWALS: 5,
54
+ DEFAULT_PAGE_SIZE: 20,
55
+ PAGE_SIZE_OPTIONS: [10, 20, 50, 100],
56
+ AUTOCOMPLETE_MAX_RESULTS: 10,
57
+ RECENT_SEARCHES_MAX: 5,
58
+ };
59
+ export const ALLOCATION_DEFAULTS = {
60
+ DEFAULT_PERCENTAGE: CONFIG_ALLOCATION_DEFAULTS.DEFAULT_PERCENTAGE,
61
+ PERCENTAGE_PRECISION: CONFIG_ALLOCATION_DEFAULTS.PERCENTAGE_PRECISION,
62
+ TARGET_TOTAL: CONFIG_ALLOCATION_DEFAULTS.TARGET_TOTAL,
63
+ };
64
+ // ============================================
65
+ // Sorting
66
+ // ============================================
67
+ export const SORT_DIRECTION = {
68
+ ASC: 'asc',
69
+ DESC: 'desc',
70
+ };
71
+ export const SORT_FIELDS = {
72
+ CREATED_AT: 'created_at',
73
+ UPDATED_AT: 'updated_at',
74
+ DATE: 'date',
75
+ NAME: 'name',
76
+ TITLE: 'title',
77
+ AMOUNT: 'amount',
78
+ VALUE: 'value',
79
+ PRICE: 'price',
80
+ QUANTITY: 'quantity',
81
+ STATUS: 'status',
82
+ PRIORITY: 'priority',
83
+ SYMBOL: 'symbol',
84
+ TYPE: 'type',
85
+ };
86
+ export const DEFAULT_SORT_CONFIG = {
87
+ PORTFOLIOS: {
88
+ field: SORT_FIELDS.UPDATED_AT,
89
+ direction: SORT_DIRECTION.DESC,
90
+ },
91
+ TRADES: {
92
+ field: SORT_FIELDS.CREATED_AT,
93
+ direction: SORT_DIRECTION.DESC,
94
+ },
95
+ WITHDRAWALS: {
96
+ field: SORT_FIELDS.CREATED_AT,
97
+ direction: SORT_DIRECTION.DESC,
98
+ },
99
+ TRANSACTIONS: {
100
+ field: SORT_FIELDS.DATE,
101
+ direction: SORT_DIRECTION.DESC,
102
+ },
103
+ };
104
+ export const SORT_DIRECTION_ASC = SORT_DIRECTION.ASC;
105
+ export const SORT_DIRECTION_DESC = SORT_DIRECTION.DESC;
106
+ // ============================================
107
+ // Time and Date
108
+ // ============================================
109
+ export const MILLISECONDS = {
110
+ SECOND: 1000,
111
+ MINUTE: 60 * 1000,
112
+ HOUR: 60 * 60 * 1000,
113
+ DAY: 24 * 60 * 60 * 1000,
114
+ WEEK: 7 * 24 * 60 * 60 * 1000,
115
+ };
116
+ export const SECONDS = {
117
+ MINUTE: 60,
118
+ HOUR: 60 * 60,
119
+ DAY: 24 * 60 * 60,
120
+ WEEK: 7 * 24 * 60 * 60,
121
+ };
122
+ export const DATE_FORMATS = {
123
+ DISPLAY_DATE: 'MMM dd, yyyy',
124
+ DISPLAY_DATE_TIME: 'MMM dd, yyyy HH:mm',
125
+ DISPLAY_DATE_TIME_SECONDS: 'MMM dd, yyyy HH:mm:ss',
126
+ DISPLAY_SHORT: 'MM/dd/yy',
127
+ API_DATE: 'yyyy-MM-dd',
128
+ API_DATETIME: "yyyy-MM-dd'T'HH:mm:ss",
129
+ API_DATETIME_WITH_TIMEZONE: "yyyy-MM-dd'T'HH:mm:ss'Z'",
130
+ MONTH_YEAR: 'MMM yyyy',
131
+ YEAR: 'yyyy',
132
+ TIME: 'HH:mm',
133
+ TIME_WITH_SECONDS: 'HH:mm:ss',
134
+ };
135
+ export const TIME_ZONES = {
136
+ UTC: 'UTC',
137
+ EST: 'America/New_York',
138
+ PST: 'America/Los_Angeles',
139
+ SYDNEY: 'Australia/Sydney',
140
+ MELBOURNE: 'Australia/Melbourne',
141
+ };
142
+ export const SESSION_DURATIONS = {
143
+ DEFAULT: 30 * 60 * 1000,
144
+ EXTENDED: 24 * 60 * 60 * 1000,
145
+ REMEMBER_ME: 30 * 24 * 60 * 60 * 1000,
146
+ };
147
+ export const MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000;
148
+ export const DEFAULT_RECENT_TRANSACTIONS_DAYS = 30;
149
+ export const DATE_ISO_TIME_SEPARATOR = 'T';
150
+ export const TIME_RANGES = [
151
+ { label: '1W', value: '1W', days: 7 },
152
+ { label: '1M', value: '1M', days: 30 },
153
+ { label: '6M', value: '6M', days: 180 },
154
+ { label: '1Y', value: '1Y', days: 365 },
155
+ { label: '3Y', value: '3Y', days: 1095 },
156
+ { label: '5Y', value: '5Y', days: 1825 },
157
+ { label: '10Y', value: '10Y', days: 3650 },
158
+ ];
159
+ // ============================================
160
+ // Validation
161
+ // ============================================
162
+ export const REGEX_PATTERNS = {
163
+ EMAIL: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
164
+ PHONE: /^\+?[\d\s-()]+$/,
165
+ USERNAME: /^[a-zA-Z0-9_-]{3,30}$/,
166
+ PASSWORD: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{8,}$/,
167
+ UUID: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,
168
+ NUMERIC: /^\d+$/,
169
+ DECIMAL: /^\d+(\.\d{1,2})?$/,
170
+ ALPHA_ONLY: /^[a-zA-Z]+$/,
171
+ ALPHANUMERIC: /^[a-zA-Z0-9]+$/,
172
+ URL: /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)$/,
173
+ };
174
+ export const VALIDATION_RULES = {
175
+ MIN_USERNAME_LENGTH: 3,
176
+ MAX_USERNAME_LENGTH: 30,
177
+ MIN_PASSWORD_LENGTH: 8,
178
+ MAX_PASSWORD_LENGTH: 128,
179
+ MIN_NAME_LENGTH: 2,
180
+ MAX_NAME_LENGTH: 50,
181
+ MIN_PORTFOLIO_NAME_LENGTH: 3,
182
+ MAX_PORTFOLIO_NAME_LENGTH: 100,
183
+ MIN_PORTFOLIO_DESCRIPTION_LENGTH: 0,
184
+ MAX_PORTFOLIO_DESCRIPTION_LENGTH: 500,
185
+ MIN_TRADE_AMOUNT: 0.01,
186
+ MAX_TRADE_AMOUNT: 1000000,
187
+ MIN_TRADE_QUANTITY: 0.001,
188
+ MAX_TRADE_QUANTITY: 1000000,
189
+ MIN_PRICE: 0.01,
190
+ MAX_PRICE: 1000000,
191
+ MIN_WITHDRAWAL_AMOUNT: 100,
192
+ MAX_WITHDRAWAL_AMOUNT: 1000000,
193
+ MAX_DESCRIPTION_LENGTH: 500,
194
+ MAX_NOTES_LENGTH: 1000,
195
+ MAX_FILE_SIZE_MB: 10,
196
+ MAX_FILE_NAME_LENGTH: 255,
197
+ MIN_ADDRESS_LENGTH: 10,
198
+ MAX_ADDRESS_LENGTH: 200,
199
+ MIN_POSTAL_CODE_LENGTH: 3,
200
+ MAX_POSTAL_CODE_LENGTH: 10,
201
+ };
202
+ export const VALIDATION_ERRORS = {
203
+ REQUIRED: 'This field is required',
204
+ INVALID_EMAIL: 'Please enter a valid email address',
205
+ INVALID_PHONE: 'Please enter a valid phone number',
206
+ INVALID_USERNAME: 'Username must be 3-30 characters, letters, numbers, underscores, and hyphens only',
207
+ INVALID_PASSWORD: 'Password must be at least 8 characters with uppercase, lowercase, and numbers',
208
+ MIN_LENGTH: (field, min) => `${field} must be at least ${min} characters`,
209
+ MAX_LENGTH: (field, max) => `${field} must be no more than ${max} characters`,
210
+ MIN_VALUE: (field, min) => `${field} must be at least ${min}`,
211
+ MAX_VALUE: (field, max) => `${field} must be no more than ${max}`,
212
+ INVALID_FORMAT: (field) => `${field} has an invalid format`,
213
+ PASSWORDS_DONT_MATCH: 'Passwords do not match',
214
+ };
215
+ //# sourceMappingURL=utilities.js.map