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.
@@ -1,89 +1,220 @@
1
+ // ============================================================================
2
+ // FILTER OPERATION DEFINITIONS
3
+ // ============================================================================
1
4
  /**
2
- * Valid text filter operations as const array
5
+ * Text-only filter operations for string-based filtering
3
6
  */
4
- export const TEXT_FILTER_OPERATIONS = [
7
+ export const TEXT_ONLY_OPERATIONS = [
5
8
  'contains',
6
- 'eq',
7
9
  'notContains',
8
- 'notEqual',
9
10
  'startsWith',
10
- 'endsWith',
11
- 'blank',
12
- 'notBlank'
11
+ 'endsWith'
13
12
  ];
14
13
  /**
15
- * Valid number filter operations as const array
14
+ * Number-only filter operations for numeric comparisons
16
15
  */
17
- export const NUMBER_FILTER_OPERATIONS = [
18
- 'eq',
19
- 'notEqual',
16
+ export const NUMBER_ONLY_OPERATIONS = [
20
17
  'lessThan',
21
18
  'lessThanOrEqual',
22
19
  'greaterThan',
23
20
  'greaterThanOrEqual',
24
- 'inRange',
21
+ 'inRange'
22
+ ];
23
+ /**
24
+ * Date-specific filter operations for temporal comparisons
25
+ */
26
+ export const DATE_ONLY_OPERATIONS = [
27
+ 'dateBefore',
28
+ 'dateBeforeOrEqual',
29
+ 'dateAfter',
30
+ 'dateAfterOrEqual',
31
+ 'dateRange'
32
+ ];
33
+ /**
34
+ * Operations shared across multiple filter types
35
+ */
36
+ export const SHARED_OPERATIONS = [
37
+ 'eq',
38
+ 'notEqual',
25
39
  'blank',
26
40
  'notBlank'
27
41
  ];
28
42
  /**
29
- * Error types for URL sync operations
43
+ * Complete list of valid text filter operations
44
+ */
45
+ export const TEXT_FILTER_OPERATIONS = [
46
+ ...TEXT_ONLY_OPERATIONS,
47
+ ...SHARED_OPERATIONS
48
+ ];
49
+ /**
50
+ * Complete list of valid number filter operations
51
+ */
52
+ export const NUMBER_FILTER_OPERATIONS = [
53
+ ...NUMBER_ONLY_OPERATIONS,
54
+ ...SHARED_OPERATIONS
55
+ ];
56
+ /**
57
+ * Valid date filter operations as const array
58
+ */
59
+ export const DATE_FILTER_OPERATIONS = [
60
+ ...DATE_ONLY_OPERATIONS,
61
+ ...SHARED_OPERATIONS
62
+ ];
63
+ // ============================================================================
64
+ // TYPE GUARDS
65
+ // ============================================================================
66
+ /**
67
+ * Type guard to check if an operation is text-specific
68
+ */
69
+ export function isTextFilterOperation(op) {
70
+ return TEXT_FILTER_OPERATIONS.includes(op);
71
+ }
72
+ /**
73
+ * Type guard to check if an operation is number-specific
74
+ */
75
+ export function isNumberFilterOperation(op) {
76
+ return NUMBER_FILTER_OPERATIONS.includes(op);
77
+ }
78
+ /**
79
+ * Type guard to check if an operation is date-specific
80
+ */
81
+ export function isDateFilterOperation(op) {
82
+ return DATE_FILTER_OPERATIONS.includes(op);
83
+ }
84
+ /**
85
+ * Type guard to check if an operation requires a range (two values)
86
+ */
87
+ export function isRangeOperation(op) {
88
+ return op === 'inRange' || op === 'dateRange';
89
+ }
90
+ /**
91
+ * Type guard to check if an operation is a blank operation
92
+ */
93
+ export function isBlankOperation(op) {
94
+ return op === 'blank' || op === 'notBlank';
95
+ }
96
+ /**
97
+ * Type guard to check if a filter is a text filter
98
+ */
99
+ export function isTextFilter(filter) {
100
+ return filter.filterType === 'text';
101
+ }
102
+ /**
103
+ * Type guard to check if a filter is a number filter
104
+ */
105
+ export function isNumberFilter(filter) {
106
+ return filter.filterType === 'number';
107
+ }
108
+ /**
109
+ * Type guard to check if a filter is a date filter
110
+ */
111
+ export function isDateFilter(filter) {
112
+ return filter.filterType === 'date';
113
+ }
114
+ // ============================================================================
115
+ // ERROR TYPES
116
+ // ============================================================================
117
+ /**
118
+ * Base error class for all URL sync operations
30
119
  */
31
120
  export class URLSyncError extends Error {
32
- constructor(message) {
121
+ cause;
122
+ constructor(message, cause) {
33
123
  super(message);
124
+ this.cause = cause;
34
125
  this.name = 'URLSyncError';
35
126
  }
36
127
  }
128
+ /**
129
+ * Error thrown when filter validation fails
130
+ */
37
131
  export class InvalidFilterError extends URLSyncError {
38
- constructor(message) {
39
- super(message);
132
+ constructor(message, cause) {
133
+ super(message, cause);
40
134
  this.name = 'InvalidFilterError';
41
135
  }
42
136
  }
137
+ /**
138
+ * Error thrown when URL parsing fails
139
+ */
43
140
  export class InvalidURLError extends URLSyncError {
44
- constructor(message) {
45
- super(message);
141
+ constructor(message, cause) {
142
+ super(message, cause);
46
143
  this.name = 'InvalidURLError';
47
144
  }
48
145
  }
146
+ /**
147
+ * Error thrown when date validation fails
148
+ */
149
+ export class InvalidDateError extends InvalidFilterError {
150
+ constructor(message, cause) {
151
+ super(message, cause);
152
+ this.name = 'InvalidDateError';
153
+ }
154
+ }
155
+ // ============================================================================
156
+ // OPERATION MAPPINGS
157
+ // ============================================================================
49
158
  /**
50
159
  * Operation Mapping Strategy:
51
160
  *
52
161
  * We use three different naming conventions for better user experience:
53
162
  *
54
- * 1. URL Parameters: Short, clean names for URLs (e.g., 'eq', 'neq', 'lt', 'gt')
163
+ * 1. URL Parameters: Short, clean names for URLs (e.g., 'eq', 'neq', 'before', 'after')
55
164
  * 2. Internal Types: Consistent naming for our FilterOperation type
56
- * 3. AG Grid Operations: Exact names expected by AG Grid API (e.g., 'equals', 'notEqual')
165
+ * 3. AG Grid Operations: Exact names expected by AG Grid API (e.g., 'equals', 'notEqual', 'lessThan')
57
166
  *
58
167
  * This approach keeps URLs readable while maintaining compatibility with AG Grid.
59
168
  */
60
169
  /**
61
- * Define special URL shorthand mappings (internal -> URL)
62
- * Operations not listed here use their internal name as URL param
170
+ * URL shorthand mappings for cleaner URLs.
171
+ * Maps internal operation names to shorter URL parameter names.
172
+ * Operations not listed here use their internal name as URL param.
63
173
  */
64
174
  const URL_SHORTHAND_MAPPINGS = {
175
+ // Shared operations
65
176
  notEqual: 'neq',
177
+ // Number operations
66
178
  lessThan: 'lt',
67
179
  lessThanOrEqual: 'lte',
68
180
  greaterThan: 'gt',
69
181
  greaterThanOrEqual: 'gte',
70
- inRange: 'range'
182
+ inRange: 'range',
183
+ // Date operations
184
+ dateBefore: 'before',
185
+ dateBeforeOrEqual: 'beforeEq',
186
+ dateAfter: 'after',
187
+ dateAfterOrEqual: 'afterEq',
188
+ dateRange: 'daterange'
71
189
  };
72
190
  /**
73
- * Define special AG Grid name mappings (internal -> AG Grid)
74
- * Operations not listed here use their internal name for AG Grid
191
+ * AG Grid operation name mappings.
192
+ * Maps internal operation names to AG Grid API operation names.
193
+ * Operations not listed here use their internal name for AG Grid.
75
194
  */
76
195
  const AG_GRID_NAME_MAPPINGS = {
77
- eq: 'equals'
196
+ // Shared operations
197
+ eq: 'equals',
198
+ // Date operations (AG Grid uses generic names)
199
+ dateBefore: 'lessThan',
200
+ dateBeforeOrEqual: 'lessThanOrEqual',
201
+ dateAfter: 'greaterThan',
202
+ dateAfterOrEqual: 'greaterThanOrEqual',
203
+ dateRange: 'inRange'
78
204
  };
79
205
  /**
80
- * Helper function to create operation mappings dynamically
206
+ * Creates operation mapping tables for URL and AG Grid integration
81
207
  */
82
208
  function createOperationMaps() {
83
- const allOperations = [...TEXT_FILTER_OPERATIONS, ...NUMBER_FILTER_OPERATIONS];
84
- // Remove duplicates (like 'eq', 'blank', etc. that appear in both arrays)
209
+ // Get all unique operations across filter types
210
+ const allOperations = [
211
+ ...TEXT_FILTER_OPERATIONS,
212
+ ...NUMBER_FILTER_OPERATIONS,
213
+ ...DATE_FILTER_OPERATIONS
214
+ ];
215
+ // Remove duplicates (operations like 'eq', 'blank' appear in multiple arrays)
85
216
  const uniqueOperations = [...new Set(allOperations)];
86
- // Generate URL mappings
217
+ // Generate URL mappings (bidirectional)
87
218
  const operationMap = {};
88
219
  const internalToUrlMap = {};
89
220
  uniqueOperations.forEach(operation => {
@@ -91,7 +222,7 @@ function createOperationMaps() {
91
222
  operationMap[urlName] = operation;
92
223
  internalToUrlMap[operation] = urlName;
93
224
  });
94
- // Generate AG Grid mappings
225
+ // Generate AG Grid mappings (bidirectional)
95
226
  const agGridMap = {};
96
227
  const reverseAgGridMap = {};
97
228
  uniqueOperations.forEach(operation => {
@@ -108,10 +239,21 @@ function createOperationMaps() {
108
239
  };
109
240
  }
110
241
  // Generate all mappings dynamically
111
- const { operationMap, internalToUrlMap, agGridMap, reverseAgGridMap } = createOperationMaps();
112
- // Export the dynamically generated maps
113
- export const OPERATION_MAP = operationMap;
114
- export const INTERNAL_TO_URL_OPERATION_MAP = internalToUrlMap;
115
- export const AG_GRID_OPERATION_NAMES = agGridMap;
116
- export const REVERSE_AG_GRID_OPERATION_NAMES = reverseAgGridMap;
242
+ const mappings = createOperationMaps();
243
+ /**
244
+ * Maps URL operation names to internal operation types
245
+ */
246
+ export const OPERATION_MAP = mappings.operationMap;
247
+ /**
248
+ * Maps internal operation types to URL operation names
249
+ */
250
+ export const INTERNAL_TO_URL_OPERATION_MAP = mappings.internalToUrlMap;
251
+ /**
252
+ * Maps internal operation types to AG Grid operation names
253
+ */
254
+ export const AG_GRID_OPERATION_NAMES = mappings.agGridMap;
255
+ /**
256
+ * Maps AG Grid operation names to internal operation types
257
+ */
258
+ export const REVERSE_AG_GRID_OPERATION_NAMES = mappings.reverseAgGridMap;
117
259
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,10 @@
1
1
  import { validateFilterValue } from './validation.js';
2
2
  import { INTERNAL_TO_URL_OPERATION_MAP } from './types.js';
3
+ const FILTER_TYPES = {
4
+ TEXT: 'text',
5
+ NUMBER: 'number',
6
+ DATE: 'date'
7
+ };
3
8
  /**
4
9
  * Serializes a single column filter to URL parameter
5
10
  */
@@ -8,8 +13,17 @@ function serializeColumnFilter(columnName, filter, paramPrefix) {
8
13
  if (!urlOperation)
9
14
  return '';
10
15
  const paramName = `${paramPrefix}${columnName}_${urlOperation}`;
11
- // Handle range operations
12
- if (filter.type === 'inRange' && filter.filterType === 'number') {
16
+ // Handle date range operations
17
+ if (filter.type === 'dateRange' && filter.filterType === FILTER_TYPES.DATE) {
18
+ // Type guard: ensure this is a DateColumnFilter with dateRange operation
19
+ if ('filterTo' in filter && filter.filterTo !== undefined) {
20
+ // Don't encode the comma for range values - handle this directly
21
+ return `${paramName}=${filter.filter},${filter.filterTo}`;
22
+ }
23
+ return '';
24
+ }
25
+ // Handle number range operations
26
+ if (filter.type === 'inRange' && filter.filterType === FILTER_TYPES.NUMBER) {
13
27
  // Type guard: ensure this is a NumberColumnFilter with inRange operation
14
28
  if ('filterTo' in filter && filter.filterTo !== undefined) {
15
29
  // Don't encode the comma for range values - handle this directly
@@ -17,16 +31,20 @@ function serializeColumnFilter(columnName, filter, paramPrefix) {
17
31
  }
18
32
  return '';
19
33
  }
20
- // Handle blank operations
34
+ // Handle blank operations (shared across text, number, and date)
21
35
  if (filter.type === 'blank' || filter.type === 'notBlank') {
22
36
  return `${paramName}=true`;
23
37
  }
38
+ // Handle date operations (ISO date format preservation)
39
+ if (filter.filterType === FILTER_TYPES.DATE) {
40
+ return `${paramName}=${filter.filter}`; // ISO dates don't need URL encoding
41
+ }
24
42
  // Handle number operations
25
- if (filter.filterType === 'number') {
43
+ if (filter.filterType === FILTER_TYPES.NUMBER) {
26
44
  return `${paramName}=${filter.filter}`;
27
45
  }
28
46
  // Handle text operations (existing logic)
29
- if (filter.filterType === 'text' && filter.filter) {
47
+ if (filter.filterType === FILTER_TYPES.TEXT && filter.filter) {
30
48
  // Note: Validation should be done at the serializeFilters level, not here
31
49
  return `${paramName}=${encodeURIComponent(filter.filter.toString())}`;
32
50
  }
@@ -35,11 +53,17 @@ function serializeColumnFilter(columnName, filter, paramPrefix) {
35
53
  /**
36
54
  * Helper function to append a serialized parameter to URLSearchParams
37
55
  */
38
- function appendSerializedParam(serialized, params) {
56
+ function appendSerializedParam(serialized, params, isRangeOperation = false) {
39
57
  const [paramName, paramValue] = serialized.split('=');
40
58
  if (paramName && paramValue) {
41
- // Decode the parameter value to handle commas correctly
42
- params.append(paramName, decodeURIComponent(paramValue));
59
+ if (isRangeOperation) {
60
+ // For range operations (which contain commas), don't decode
61
+ params.append(paramName, paramValue);
62
+ }
63
+ else {
64
+ // For regular operations, decode special characters for text filters
65
+ params.append(paramName, decodeURIComponent(paramValue));
66
+ }
43
67
  }
44
68
  }
45
69
  /**
@@ -48,23 +72,27 @@ function appendSerializedParam(serialized, params) {
48
72
  export function serializeFilters(filterState, config) {
49
73
  const params = new URLSearchParams();
50
74
  for (const [column, filter] of Object.entries(filterState)) {
51
- // Support both text and number filters
52
- if (filter.filterType !== 'text' && filter.filterType !== 'number')
75
+ // Support text, number, and date filters
76
+ if (filter.filterType !== FILTER_TYPES.TEXT &&
77
+ filter.filterType !== FILTER_TYPES.NUMBER &&
78
+ filter.filterType !== FILTER_TYPES.DATE)
53
79
  continue;
54
80
  // Apply validation for text filters before serialization
55
- if (filter.filterType === 'text') {
81
+ if (filter.filterType === FILTER_TYPES.TEXT) {
56
82
  const validatedValue = validateFilterValue(filter.filter, config, filter.type);
57
83
  const updatedFilter = { ...filter, filter: validatedValue };
58
84
  const serialized = serializeColumnFilter(column, updatedFilter, config.paramPrefix);
59
85
  if (serialized) {
60
- appendSerializedParam(serialized, params);
86
+ appendSerializedParam(serialized, params, false); // Text filters are not range operations
61
87
  }
62
88
  }
63
89
  else {
64
- // Number filters don't need additional validation as they're already validated
90
+ // Number and date filters don't need additional validation as they're already validated
65
91
  const serialized = serializeColumnFilter(column, filter, config.paramPrefix);
66
92
  if (serialized) {
67
- appendSerializedParam(serialized, params);
93
+ // Check if this is a range operation
94
+ const isRangeOp = filter.type === 'inRange' || filter.type === 'dateRange';
95
+ appendSerializedParam(serialized, params, isRangeOp);
68
96
  }
69
97
  }
70
98
  }
@@ -82,7 +110,17 @@ export function generateUrl(baseUrl, filterState, config) {
82
110
  filterParams.append(key, value);
83
111
  }
84
112
  }
85
- url.search = filterParams.toString();
113
+ const queryString = filterParams.toString();
114
+ // If no filters, return the base URL without query string or trailing slash
115
+ if (!queryString) {
116
+ let result = url.toString().replace(/\?$/, '');
117
+ // Remove trailing slash for root paths when no query parameters
118
+ if (result.endsWith('/') && result === url.origin + '/') {
119
+ result = result.slice(0, -1);
120
+ }
121
+ return result;
122
+ }
123
+ url.search = queryString;
86
124
  return url.toString();
87
125
  }
88
126
  //# sourceMappingURL=url-generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url-generator.js","sourceRoot":"","sources":["../../src/core/url-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"url-generator.js","sourceRoot":"","sources":["../../src/core/url-generator.ts"],"names":[],"mappings":"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"}