ag-grid-url-sync 0.2.2 → 0.2.3
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 +45 -22
- package/dist/core/grid-integration.d.ts +1 -1
- package/dist/core/grid-integration.js +101 -6
- package/dist/core/grid-integration.js.map +1 -1
- package/dist/core/types.d.ts +174 -36
- package/dist/core/types.js +179 -37
- package/dist/core/types.js.map +1 -1
- package/dist/core/url-generator.js +53 -15
- package/dist/core/url-generator.js.map +1 -1
- package/dist/core/url-parser.js +164 -35
- package/dist/core/url-parser.js.map +1 -1
- package/dist/core/validation.d.ts +38 -5
- package/dist/core/validation.js +115 -3
- package/dist/core/validation.js.map +1 -1
- package/dist/react/types.d.ts +5 -0
- package/dist/react/use-ag-grid-url-sync.js +42 -27
- package/dist/react/use-ag-grid-url-sync.js.map +1 -1
- package/package.json +2 -2
package/dist/core/url-parser.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { InvalidFilterError, InvalidURLError, OPERATION_MAP } from './types.js';
|
|
2
|
-
import { validateFilterValue, validateAndParseNumber, validateNumberRange, validateNumberFilter, DEFAULT_CONFIG } from './validation.js';
|
|
2
|
+
import { validateFilterValue, validateAndParseNumber, validateNumberRange, validateNumberFilter, validateAndParseDate, validateAndParseDateRange, validateDateFilter, DEFAULT_CONFIG } from './validation.js';
|
|
3
3
|
/**
|
|
4
4
|
* Detects if an operation is number-specific
|
|
5
5
|
*/
|
|
@@ -13,11 +13,69 @@ function isNumberOperation(operation) {
|
|
|
13
13
|
].includes(operation);
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
* Detects if an operation
|
|
16
|
+
* Detects if an operation is date-specific
|
|
17
|
+
*/
|
|
18
|
+
function isDateOperation(operation) {
|
|
19
|
+
return [
|
|
20
|
+
'dateBefore',
|
|
21
|
+
'dateBeforeOrEqual',
|
|
22
|
+
'dateAfter',
|
|
23
|
+
'dateAfterOrEqual',
|
|
24
|
+
'dateRange'
|
|
25
|
+
].includes(operation);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Detects if an operation works across multiple filter types (shared operations)
|
|
17
29
|
*/
|
|
18
30
|
function isSharedOperation(operation) {
|
|
19
31
|
return ['eq', 'notEqual', 'blank', 'notBlank'].includes(operation);
|
|
20
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Attempts to parse a value as a date and returns the filter type
|
|
35
|
+
* This is used for shared operations to determine if they should be treated as date filters
|
|
36
|
+
*/
|
|
37
|
+
function tryParseAsDate(value) {
|
|
38
|
+
try {
|
|
39
|
+
validateAndParseDate(value);
|
|
40
|
+
return 'date';
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Detects the most appropriate filter type for a shared operation based on the value
|
|
48
|
+
* Priority: Date > Number > Text (if the value can be parsed as date/number, prefer that type)
|
|
49
|
+
*/
|
|
50
|
+
function detectFilterTypeForSharedOperation(operation, value) {
|
|
51
|
+
// Blank operations default to text (most common case)
|
|
52
|
+
if (operation === 'blank' || operation === 'notBlank') {
|
|
53
|
+
return 'text';
|
|
54
|
+
}
|
|
55
|
+
// For eq/notEqual operations, try to detect the most specific type
|
|
56
|
+
if (operation === 'eq' || operation === 'notEqual') {
|
|
57
|
+
// Try date first (most specific format)
|
|
58
|
+
if (tryParseAsDate(value) === 'date') {
|
|
59
|
+
return 'date';
|
|
60
|
+
}
|
|
61
|
+
// Try number second
|
|
62
|
+
try {
|
|
63
|
+
const numValue = parseFloat(value);
|
|
64
|
+
if (!isNaN(numValue) && Number.isFinite(numValue)) {
|
|
65
|
+
const validation = validateNumberFilter(numValue);
|
|
66
|
+
if (validation.valid) {
|
|
67
|
+
return 'number';
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Fall through to text
|
|
73
|
+
}
|
|
74
|
+
// Default to text
|
|
75
|
+
return 'text';
|
|
76
|
+
}
|
|
77
|
+
return 'text';
|
|
78
|
+
}
|
|
21
79
|
/**
|
|
22
80
|
* Extracts column name and operation from a filter parameter
|
|
23
81
|
*/
|
|
@@ -52,7 +110,22 @@ export function parseFilterParam(param, value, expectedPrefix) {
|
|
|
52
110
|
if (!filterOp) {
|
|
53
111
|
throw new InvalidFilterError(`Unsupported filter operation: ${operation}`);
|
|
54
112
|
}
|
|
55
|
-
// Handle range operations
|
|
113
|
+
// Handle date range operations
|
|
114
|
+
if (filterOp === 'dateRange') {
|
|
115
|
+
try {
|
|
116
|
+
const [startDate, endDate] = validateAndParseDateRange(value);
|
|
117
|
+
return {
|
|
118
|
+
filterType: 'date',
|
|
119
|
+
type: filterOp,
|
|
120
|
+
filter: startDate,
|
|
121
|
+
filterTo: endDate
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
throw new InvalidFilterError(error instanceof Error ? error.message : 'Invalid date range');
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Handle number range operations
|
|
56
129
|
if (filterOp === 'inRange') {
|
|
57
130
|
const rangeParts = value.split(',');
|
|
58
131
|
if (rangeParts.length !== 2) {
|
|
@@ -71,7 +144,25 @@ export function parseFilterParam(param, value, expectedPrefix) {
|
|
|
71
144
|
filterTo: max
|
|
72
145
|
};
|
|
73
146
|
}
|
|
74
|
-
// Handle
|
|
147
|
+
// Handle date-specific operations
|
|
148
|
+
if (isDateOperation(filterOp)) {
|
|
149
|
+
try {
|
|
150
|
+
const dateValue = validateAndParseDate(value);
|
|
151
|
+
const validation = validateDateFilter(dateValue, filterOp);
|
|
152
|
+
if (!validation.valid) {
|
|
153
|
+
throw new InvalidFilterError(validation.error || 'Invalid date filter');
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
filterType: 'date',
|
|
157
|
+
type: filterOp,
|
|
158
|
+
filter: dateValue
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
throw new InvalidFilterError(error instanceof Error ? error.message : 'Invalid date filter');
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Handle number-specific operations
|
|
75
166
|
if (isNumberOperation(filterOp)) {
|
|
76
167
|
const numValue = validateAndParseNumber(value);
|
|
77
168
|
return {
|
|
@@ -80,40 +171,48 @@ export function parseFilterParam(param, value, expectedPrefix) {
|
|
|
80
171
|
filter: numValue
|
|
81
172
|
};
|
|
82
173
|
}
|
|
83
|
-
// Handle
|
|
84
|
-
if (filterOp === 'blank' || filterOp === 'notBlank') {
|
|
85
|
-
return {
|
|
86
|
-
filterType: 'text',
|
|
87
|
-
type: filterOp,
|
|
88
|
-
filter: '' // Blank operations don't use the value
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
// Handle shared operations (eq, notEqual) - detect if they should be number based on value
|
|
174
|
+
// Handle shared operations (eq, notEqual, blank, notBlank)
|
|
92
175
|
if (isSharedOperation(filterOp)) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
176
|
+
const detectedType = detectFilterTypeForSharedOperation(filterOp, value);
|
|
177
|
+
if (detectedType === 'date') {
|
|
178
|
+
try {
|
|
179
|
+
const dateValue = validateAndParseDate(value);
|
|
180
|
+
return {
|
|
181
|
+
filterType: 'date',
|
|
182
|
+
type: filterOp,
|
|
183
|
+
filter: dateValue
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
// If date parsing fails, fall back to text
|
|
105
188
|
}
|
|
106
189
|
}
|
|
107
|
-
|
|
108
|
-
|
|
190
|
+
if (detectedType === 'number') {
|
|
191
|
+
try {
|
|
192
|
+
const numValue = parseFloat(value);
|
|
193
|
+
if (!isNaN(numValue) && Number.isFinite(numValue)) {
|
|
194
|
+
const validation = validateNumberFilter(numValue);
|
|
195
|
+
if (validation.valid) {
|
|
196
|
+
return {
|
|
197
|
+
filterType: 'number',
|
|
198
|
+
type: filterOp,
|
|
199
|
+
filter: numValue
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
// Fall through to text handling
|
|
206
|
+
}
|
|
109
207
|
}
|
|
208
|
+
// Handle as text filter (default for shared operations)
|
|
110
209
|
return {
|
|
111
210
|
filterType: 'text',
|
|
112
211
|
type: filterOp,
|
|
113
|
-
filter: value || ''
|
|
212
|
+
filter: filterOp === 'blank' || filterOp === 'notBlank' ? '' : value || ''
|
|
114
213
|
};
|
|
115
214
|
}
|
|
116
|
-
// Handle text operations (existing logic)
|
|
215
|
+
// Handle text-specific operations (existing logic)
|
|
117
216
|
return {
|
|
118
217
|
filterType: 'text',
|
|
119
218
|
type: filterOp,
|
|
@@ -125,7 +224,32 @@ export function parseFilterParam(param, value, expectedPrefix) {
|
|
|
125
224
|
*/
|
|
126
225
|
export function parseUrlFilters(url, config) {
|
|
127
226
|
try {
|
|
128
|
-
|
|
227
|
+
// Handle empty or whitespace-only URLs gracefully
|
|
228
|
+
if (!url || url.trim() === '') {
|
|
229
|
+
return {};
|
|
230
|
+
}
|
|
231
|
+
// Check for obviously malformed URLs that should throw errors
|
|
232
|
+
if (url === 'not-a-url' ||
|
|
233
|
+
url.startsWith('://') ||
|
|
234
|
+
(!url.includes('://') &&
|
|
235
|
+
!url.startsWith('/') &&
|
|
236
|
+
!url.startsWith('?') &&
|
|
237
|
+
url.includes('.'))) {
|
|
238
|
+
throw new Error('Invalid URL format');
|
|
239
|
+
}
|
|
240
|
+
// If URL starts with '?' treat as query string only
|
|
241
|
+
let urlToProcess = url;
|
|
242
|
+
if (url.startsWith('?')) {
|
|
243
|
+
urlToProcess = `http://example.com${url}`;
|
|
244
|
+
}
|
|
245
|
+
else if (!url.includes('://') && !url.startsWith('/')) {
|
|
246
|
+
// For other cases without protocol, try to handle as query string
|
|
247
|
+
urlToProcess = `http://example.com?${url}`;
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
urlToProcess = url;
|
|
251
|
+
}
|
|
252
|
+
const urlObj = new URL(urlToProcess);
|
|
129
253
|
const filterState = {};
|
|
130
254
|
for (const [param, value] of urlObj.searchParams.entries()) {
|
|
131
255
|
if (!param.startsWith(config.paramPrefix))
|
|
@@ -142,23 +266,28 @@ export function parseUrlFilters(url, config) {
|
|
|
142
266
|
filter: validatedValue
|
|
143
267
|
};
|
|
144
268
|
}
|
|
269
|
+
else if (filterParam.filterType === 'date') {
|
|
270
|
+
// Date filters are already validated in parseFilterParam
|
|
271
|
+
filterState[columnName] = filterParam;
|
|
272
|
+
}
|
|
145
273
|
else {
|
|
146
274
|
// Number filters are already validated in parseFilterParam
|
|
147
275
|
filterState[columnName] = filterParam;
|
|
148
276
|
}
|
|
149
277
|
}
|
|
150
|
-
catch (
|
|
278
|
+
catch (error) {
|
|
279
|
+
// Log parsing errors through the configured error handler
|
|
151
280
|
if (config.onParseError) {
|
|
152
|
-
config.onParseError(
|
|
281
|
+
config.onParseError(error);
|
|
153
282
|
}
|
|
154
|
-
//
|
|
283
|
+
// Continue processing other parameters instead of failing completely
|
|
155
284
|
continue;
|
|
156
285
|
}
|
|
157
286
|
}
|
|
158
287
|
return filterState;
|
|
159
288
|
}
|
|
160
|
-
catch (
|
|
161
|
-
throw new InvalidURLError(`Failed to parse URL: ${
|
|
289
|
+
catch (error) {
|
|
290
|
+
throw new InvalidURLError(`Failed to parse URL: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
162
291
|
}
|
|
163
292
|
}
|
|
164
293
|
//# sourceMappingURL=url-parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-parser.js","sourceRoot":"","sources":["../../src/core/url-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/E,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACf,MAAM,iBAAiB,CAAA;AAExB;;GAEG;AACH,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,OAAO;QACL,UAAU;QACV,iBAAiB;QACjB,aAAa;QACb,oBAAoB;QACpB,SAAS;KACV,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;AACpE,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAChC,KAAa,EACb,cAAuB;IAEvB,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAU,EAAE,CAC1D,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAA;IAE9C,MAAM,eAAe,GAAG,cAAc;QACpC,CAAC,CAAC,wBAAwB,CAAC,cAAc,CAAC;QAC1C,CAAC,CAAC,wBAAwB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;IAExD,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAClD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,GAAG,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,kBAAkB,CAAC,uCAAuC,KAAK,EAAE,CAAC,CAAA;IAC9E,CAAC;IAED,+EAA+E;IAC/E,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC/D,MAAM,mBAAmB,GAAG,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IAE1D,IAAI,mBAAmB,KAAK,CAAC,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,kBAAkB,CAAC,oCAAoC,KAAK,EAAE,CAAC,CAAA;IAC3E,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAA;IAC9D,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAA;IAElE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,kBAAkB,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAA;IAC1E,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,KAAa,EACb,cAAuB;IAEvB,MAAM,EAAE,SAAS,EAAE,GAAG,yBAAyB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;IAEtE,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAuC,CAAC,CAAA;IACvE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,kBAAkB,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAA;IAC5E,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"url-parser.js","sourceRoot":"","sources":["../../src/core/url-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { InternalConfig, FilterOperation } from './types.js';
|
|
1
|
+
import type { InternalConfig, FilterOperation, DateFilterOperation } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Default configuration values
|
|
4
4
|
*/
|
|
@@ -9,10 +9,12 @@ export declare const DEFAULT_CONFIG: {
|
|
|
9
9
|
/**
|
|
10
10
|
* Validation result interface
|
|
11
11
|
*/
|
|
12
|
-
export
|
|
13
|
-
valid:
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
export type ValidationResult = {
|
|
13
|
+
valid: true;
|
|
14
|
+
} | {
|
|
15
|
+
valid: false;
|
|
16
|
+
error: string;
|
|
17
|
+
};
|
|
16
18
|
/**
|
|
17
19
|
* Validates a text filter value against configuration constraints
|
|
18
20
|
*
|
|
@@ -45,3 +47,34 @@ export declare function validateNumberRange(min: number, max: number): Validatio
|
|
|
45
47
|
* @returns Parsed number or throws InvalidFilterError
|
|
46
48
|
*/
|
|
47
49
|
export declare function validateAndParseNumber(value: string): number;
|
|
50
|
+
/**
|
|
51
|
+
* Validates and parses a date string in ISO format (YYYY-MM-DD)
|
|
52
|
+
*
|
|
53
|
+
* @param value - String representation of date in ISO format
|
|
54
|
+
* @returns Validated ISO date string
|
|
55
|
+
* @throws InvalidDateError if date format is invalid or date doesn't exist
|
|
56
|
+
*/
|
|
57
|
+
export declare function validateAndParseDate(value: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* Validates a date filter value
|
|
60
|
+
*
|
|
61
|
+
* @param value - The date value to validate
|
|
62
|
+
* @param operation - The date filter operation
|
|
63
|
+
* @returns Validation result
|
|
64
|
+
*/
|
|
65
|
+
export declare function validateDateFilter(value: string, operation: DateFilterOperation): ValidationResult;
|
|
66
|
+
/**
|
|
67
|
+
* Validates a date range filter
|
|
68
|
+
*
|
|
69
|
+
* @param startDate - The start date (ISO format)
|
|
70
|
+
* @param endDate - The end date (ISO format)
|
|
71
|
+
* @returns Validation result
|
|
72
|
+
*/
|
|
73
|
+
export declare function validateDateRange(startDate: string, endDate: string): ValidationResult;
|
|
74
|
+
/**
|
|
75
|
+
* Validates a date range from comma-separated string input
|
|
76
|
+
*
|
|
77
|
+
* @param rangeValue - Comma-separated date range (e.g., "2024-01-01,2024-12-31")
|
|
78
|
+
* @returns Tuple of [startDate, endDate] or throws InvalidDateError
|
|
79
|
+
*/
|
|
80
|
+
export declare function validateAndParseDateRange(rangeValue: string): [string, string];
|
package/dist/core/validation.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { InvalidFilterError } from './types.js';
|
|
1
|
+
import { InvalidFilterError, InvalidDateError } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Default configuration values
|
|
4
4
|
*/
|
|
@@ -71,10 +71,17 @@ export function validateNumberRange(min, max) {
|
|
|
71
71
|
* @returns Parsed number or throws InvalidFilterError
|
|
72
72
|
*/
|
|
73
73
|
export function validateAndParseNumber(value) {
|
|
74
|
-
|
|
74
|
+
const trimmedValue = value?.trim();
|
|
75
|
+
if (!trimmedValue) {
|
|
75
76
|
throw new InvalidFilterError('Number filter value cannot be empty');
|
|
76
77
|
}
|
|
77
|
-
|
|
78
|
+
// Use a regex to validate proper number format before parsing
|
|
79
|
+
// This prevents parseFloat from accepting partial numbers like "42abc" -> 42
|
|
80
|
+
const numberRegex = /^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/;
|
|
81
|
+
if (!numberRegex.test(trimmedValue)) {
|
|
82
|
+
throw new InvalidFilterError(`Invalid number format: ${value}`);
|
|
83
|
+
}
|
|
84
|
+
const numValue = parseFloat(trimmedValue);
|
|
78
85
|
if (isNaN(numValue)) {
|
|
79
86
|
throw new InvalidFilterError(`Invalid number format: ${value}`);
|
|
80
87
|
}
|
|
@@ -84,4 +91,109 @@ export function validateAndParseNumber(value) {
|
|
|
84
91
|
}
|
|
85
92
|
return numValue;
|
|
86
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Validates and parses a date string in ISO format (YYYY-MM-DD)
|
|
96
|
+
*
|
|
97
|
+
* @param value - String representation of date in ISO format
|
|
98
|
+
* @returns Validated ISO date string
|
|
99
|
+
* @throws InvalidDateError if date format is invalid or date doesn't exist
|
|
100
|
+
*/
|
|
101
|
+
export function validateAndParseDate(value) {
|
|
102
|
+
const trimmedValue = value?.trim();
|
|
103
|
+
if (!trimmedValue) {
|
|
104
|
+
throw new InvalidDateError('Date filter value cannot be empty');
|
|
105
|
+
}
|
|
106
|
+
// Validate ISO date format (YYYY-MM-DD)
|
|
107
|
+
const isoDateRegex = /^\d{4}-\d{2}-\d{2}$/;
|
|
108
|
+
if (!isoDateRegex.test(trimmedValue)) {
|
|
109
|
+
throw new InvalidDateError(`Invalid date format '${value}'. Expected ISO format YYYY-MM-DD (e.g., 2024-01-15)`);
|
|
110
|
+
}
|
|
111
|
+
// Validate that it's a real date by parsing
|
|
112
|
+
const date = new Date(trimmedValue + 'T00:00:00.000Z'); // Force UTC to avoid timezone issues
|
|
113
|
+
if (isNaN(date.getTime())) {
|
|
114
|
+
throw new InvalidDateError(`Invalid date '${value}'. Date does not exist in the calendar`);
|
|
115
|
+
}
|
|
116
|
+
// Additional validation: ensure the parsed date matches the input
|
|
117
|
+
// This catches edge cases like February 30th that might parse differently
|
|
118
|
+
const [year, month, day] = trimmedValue.split('-').map(Number);
|
|
119
|
+
if (date.getUTCFullYear() !== year ||
|
|
120
|
+
date.getUTCMonth() + 1 !== month ||
|
|
121
|
+
date.getUTCDate() !== day) {
|
|
122
|
+
throw new InvalidDateError(`Invalid date '${value}'. Date components don't match calendar date`);
|
|
123
|
+
}
|
|
124
|
+
return trimmedValue;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Validates a date filter value
|
|
128
|
+
*
|
|
129
|
+
* @param value - The date value to validate
|
|
130
|
+
* @param operation - The date filter operation
|
|
131
|
+
* @returns Validation result
|
|
132
|
+
*/
|
|
133
|
+
export function validateDateFilter(value, operation) {
|
|
134
|
+
// Blank operations don't require date validation
|
|
135
|
+
if (operation === 'blank' || operation === 'notBlank') {
|
|
136
|
+
return { valid: true };
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
validateAndParseDate(value);
|
|
140
|
+
return { valid: true };
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
return {
|
|
144
|
+
valid: false,
|
|
145
|
+
error: error instanceof Error ? error.message : 'Invalid date'
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Validates a date range filter
|
|
151
|
+
*
|
|
152
|
+
* @param startDate - The start date (ISO format)
|
|
153
|
+
* @param endDate - The end date (ISO format)
|
|
154
|
+
* @returns Validation result
|
|
155
|
+
*/
|
|
156
|
+
export function validateDateRange(startDate, endDate) {
|
|
157
|
+
try {
|
|
158
|
+
const validStartDate = validateAndParseDate(startDate);
|
|
159
|
+
const validEndDate = validateAndParseDate(endDate);
|
|
160
|
+
// Check that start date <= end date
|
|
161
|
+
if (validStartDate > validEndDate) {
|
|
162
|
+
return {
|
|
163
|
+
valid: false,
|
|
164
|
+
error: `Date range invalid: start date '${startDate}' must be before or equal to end date '${endDate}'`
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
return { valid: true };
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
return {
|
|
171
|
+
valid: false,
|
|
172
|
+
error: error instanceof Error ? error.message : 'Invalid date range'
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Validates a date range from comma-separated string input
|
|
178
|
+
*
|
|
179
|
+
* @param rangeValue - Comma-separated date range (e.g., "2024-01-01,2024-12-31")
|
|
180
|
+
* @returns Tuple of [startDate, endDate] or throws InvalidDateError
|
|
181
|
+
*/
|
|
182
|
+
export function validateAndParseDateRange(rangeValue) {
|
|
183
|
+
const trimmedValue = rangeValue?.trim();
|
|
184
|
+
if (!trimmedValue) {
|
|
185
|
+
throw new InvalidDateError('Date range value cannot be empty');
|
|
186
|
+
}
|
|
187
|
+
const rangeParts = trimmedValue.split(',');
|
|
188
|
+
if (rangeParts.length !== 2) {
|
|
189
|
+
throw new InvalidDateError('Date range must contain exactly two dates separated by comma (e.g., "2024-01-01,2024-12-31")');
|
|
190
|
+
}
|
|
191
|
+
const startDate = validateAndParseDate(rangeParts[0]?.trim() ?? '');
|
|
192
|
+
const endDate = validateAndParseDate(rangeParts[1]?.trim() ?? '');
|
|
193
|
+
const rangeValidation = validateDateRange(startDate, endDate);
|
|
194
|
+
if (!rangeValidation.valid) {
|
|
195
|
+
throw new InvalidDateError(rangeValidation.error ?? 'Invalid date range');
|
|
196
|
+
}
|
|
197
|
+
return [startDate, endDate];
|
|
198
|
+
}
|
|
87
199
|
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEjE;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,GAAG;CACX,CAAA;AAYV;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,MAAsB,EACtB,SAA2B;IAE3B,kDAAkD;IAClD,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QACtD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QACzC,MAAM,IAAI,kBAAkB,CAC1B,0CAA0C,MAAM,CAAC,cAAc,aAAa,CAC7E,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,0BAA0B;IAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAA;IACxE,CAAC;IAED,iCAAiC;IACjC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC9C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAA;IAC3E,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;AACxB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAAW,EACX,GAAW;IAEX,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAA;IAC3C,IAAI,CAAC,SAAS,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAEtC,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAA;IAC3C,IAAI,CAAC,SAAS,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAEtC,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;QACd,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,qDAAqD;SAC7D,CAAA;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;AACxB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,MAAM,YAAY,GAAG,KAAK,EAAE,IAAI,EAAE,CAAA;IAClC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,kBAAkB,CAAC,qCAAqC,CAAC,CAAA;IACrE,CAAC;IAED,8DAA8D;IAC9D,6EAA6E;IAC7E,MAAM,WAAW,GAAG,yCAAyC,CAAA;IAC7D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,kBAAkB,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAA;IACjE,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;IACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,kBAAkB,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAA;IACjE,CAAC;IAED,MAAM,UAAU,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;IACjD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,kBAAkB,CAAC,UAAU,CAAC,KAAK,IAAI,sBAAsB,CAAC,CAAA;IAC1E,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,YAAY,GAAG,KAAK,EAAE,IAAI,EAAE,CAAA;IAClC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,gBAAgB,CAAC,mCAAmC,CAAC,CAAA;IACjE,CAAC;IAED,wCAAwC;IACxC,MAAM,YAAY,GAAG,qBAAqB,CAAA;IAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,gBAAgB,CACxB,wBAAwB,KAAK,sDAAsD,CACpF,CAAA;IACH,CAAC;IAED,4CAA4C;IAC5C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,CAAA,CAAC,qCAAqC;IAC5F,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,gBAAgB,CACxB,iBAAiB,KAAK,wCAAwC,CAC/D,CAAA;IACH,CAAC;IAED,kEAAkE;IAClE,0EAA0E;IAC1E,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9D,IACE,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI;QAC9B,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,KAAK;QAChC,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,EACzB,CAAC;QACD,MAAM,IAAI,gBAAgB,CACxB,iBAAiB,KAAK,8CAA8C,CACrE,CAAA;IACH,CAAC;IAED,OAAO,YAAY,CAAA;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAa,EACb,SAA8B;IAE9B,iDAAiD;IACjD,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QACtD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACxB,CAAC;IAED,IAAI,CAAC;QACH,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc;SAC/D,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,OAAe;IAEf,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAA;QACtD,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAA;QAElD,oCAAoC;QACpC,IAAI,cAAc,GAAG,YAAY,EAAE,CAAC;YAClC,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,mCAAmC,SAAS,0CAA0C,OAAO,GAAG;aACxG,CAAA;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB;SACrE,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACvC,UAAkB;IAElB,MAAM,YAAY,GAAG,UAAU,EAAE,IAAI,EAAE,CAAA;IACvC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,gBAAgB,CAAC,kCAAkC,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,gBAAgB,CACxB,8FAA8F,CAC/F,CAAA;IACH,CAAC;IAED,MAAM,SAAS,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IACnE,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAEjE,MAAM,eAAe,GAAG,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC7D,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,IAAI,gBAAgB,CAAC,eAAe,CAAC,KAAK,IAAI,oBAAoB,CAAC,CAAA;IAC3E,CAAC;IAED,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC7B,CAAC"}
|
package/dist/react/types.d.ts
CHANGED
|
@@ -13,6 +13,11 @@ export interface UseAGGridUrlSyncOptions extends AGGridUrlSyncConfig {
|
|
|
13
13
|
* Default: true
|
|
14
14
|
*/
|
|
15
15
|
enabledWhenReady?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Optional error handler for hook-level errors (initialization, URL operations, etc.)
|
|
18
|
+
* This supplements the core onParseError callback for comprehensive error handling
|
|
19
|
+
*/
|
|
20
|
+
onError?: (error: Error, context: string) => void;
|
|
16
21
|
}
|
|
17
22
|
/**
|
|
18
23
|
* Return type for the useAGGridUrlSync hook
|