@zengrid/core 1.0.1
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 +55 -0
- package/dist/README.md +55 -0
- package/dist/index.cjs.default.js +1 -0
- package/dist/index.cjs.js +9882 -0
- package/dist/index.cjs.mjs +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +9847 -0
- package/dist/package.json +49 -0
- package/dist/src/a11y/aria-manager.d.ts +171 -0
- package/dist/src/a11y/aria-manager.d.ts.map +1 -0
- package/dist/src/a11y/focus-manager.d.ts +124 -0
- package/dist/src/a11y/focus-manager.d.ts.map +1 -0
- package/dist/src/a11y/index.d.ts +8 -0
- package/dist/src/a11y/index.d.ts.map +1 -0
- package/dist/src/data/data-accessor/array-accessor.d.ts +38 -0
- package/dist/src/data/data-accessor/array-accessor.d.ts.map +1 -0
- package/dist/src/data/data-accessor/column-store-accessor.d.ts +41 -0
- package/dist/src/data/data-accessor/column-store-accessor.d.ts.map +1 -0
- package/dist/src/data/data-accessor/data-accessor.interface.d.ts +41 -0
- package/dist/src/data/data-accessor/data-accessor.interface.d.ts.map +1 -0
- package/dist/src/data/data-accessor/index.d.ts +9 -0
- package/dist/src/data/data-accessor/index.d.ts.map +1 -0
- package/dist/src/data/data-accessor/sparse-matrix-accessor.d.ts +39 -0
- package/dist/src/data/data-accessor/sparse-matrix-accessor.d.ts.map +1 -0
- package/dist/src/data/data-manager.d.ts +161 -0
- package/dist/src/data/data-manager.d.ts.map +1 -0
- package/dist/src/data/data-source.interface.d.ts +82 -0
- package/dist/src/data/data-source.interface.d.ts.map +1 -0
- package/dist/src/data/grid-data-model.d.ts +102 -0
- package/dist/src/data/grid-data-model.d.ts.map +1 -0
- package/dist/src/data/index-map/index-map.d.ts +30 -0
- package/dist/src/data/index-map/index-map.d.ts.map +1 -0
- package/dist/src/data/index-map/index-map.interface.d.ts +49 -0
- package/dist/src/data/index-map/index-map.interface.d.ts.map +1 -0
- package/dist/src/data/index-map/index.d.ts +7 -0
- package/dist/src/data/index-map/index.d.ts.map +1 -0
- package/dist/src/data/index.d.ts +9 -0
- package/dist/src/data/index.d.ts.map +1 -0
- package/dist/src/editing/cell-editor.interface.d.ts +87 -0
- package/dist/src/editing/cell-editor.interface.d.ts.map +1 -0
- package/dist/src/editing/date-editor.d.ts +67 -0
- package/dist/src/editing/date-editor.d.ts.map +1 -0
- package/dist/src/editing/editor-manager.d.ts +141 -0
- package/dist/src/editing/editor-manager.d.ts.map +1 -0
- package/dist/src/editing/index.d.ts +15 -0
- package/dist/src/editing/index.d.ts.map +1 -0
- package/dist/src/editing/number-editor.d.ts +68 -0
- package/dist/src/editing/number-editor.d.ts.map +1 -0
- package/dist/src/editing/select-editor.d.ts +53 -0
- package/dist/src/editing/select-editor.d.ts.map +1 -0
- package/dist/src/editing/text-editor.d.ts +69 -0
- package/dist/src/editing/text-editor.d.ts.map +1 -0
- package/dist/src/events/event-emitter.d.ts +90 -0
- package/dist/src/events/event-emitter.d.ts.map +1 -0
- package/dist/src/events/grid-events.d.ts +277 -0
- package/dist/src/events/grid-events.d.ts.map +1 -0
- package/dist/src/events/index.d.ts +6 -0
- package/dist/src/events/index.d.ts.map +1 -0
- package/dist/src/features/autofill/autofill-manager.d.ts +103 -0
- package/dist/src/features/autofill/autofill-manager.d.ts.map +1 -0
- package/dist/src/features/autofill/index.d.ts +6 -0
- package/dist/src/features/autofill/index.d.ts.map +1 -0
- package/dist/src/features/column-resize/auto-fit-calculator.d.ts +52 -0
- package/dist/src/features/column-resize/auto-fit-calculator.d.ts.map +1 -0
- package/dist/src/features/column-resize/column-resize-manager.d.ts +114 -0
- package/dist/src/features/column-resize/column-resize-manager.d.ts.map +1 -0
- package/dist/src/features/column-resize/column-resize-manager.interface.d.ts +167 -0
- package/dist/src/features/column-resize/column-resize-manager.interface.d.ts.map +1 -0
- package/dist/src/features/column-resize/column-resize.styles.css +30 -0
- package/dist/src/features/column-resize/index.d.ts +15 -0
- package/dist/src/features/column-resize/index.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-constraint-manager.d.ts +52 -0
- package/dist/src/features/column-resize/resize-constraint-manager.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-handle-renderer.d.ts +41 -0
- package/dist/src/features/column-resize/resize-handle-renderer.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-preview.d.ts +32 -0
- package/dist/src/features/column-resize/resize-preview.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-state-manager.d.ts +75 -0
- package/dist/src/features/column-resize/resize-state-manager.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-strategies.d.ts +26 -0
- package/dist/src/features/column-resize/resize-strategies.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-test-helper.d.ts +71 -0
- package/dist/src/features/column-resize/resize-test-helper.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-zone-detector.d.ts +32 -0
- package/dist/src/features/column-resize/resize-zone-detector.d.ts.map +1 -0
- package/dist/src/features/copy-paste/clipboard-manager.d.ts +116 -0
- package/dist/src/features/copy-paste/clipboard-manager.d.ts.map +1 -0
- package/dist/src/features/copy-paste/index.d.ts +6 -0
- package/dist/src/features/copy-paste/index.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/adapter.interface.d.ts +100 -0
- package/dist/src/features/filtering/adapters/adapter.interface.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/graphql-adapter.d.ts +124 -0
- package/dist/src/features/filtering/adapters/graphql-adapter.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/index.d.ts +11 -0
- package/dist/src/features/filtering/adapters/index.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/rest-adapter.d.ts +108 -0
- package/dist/src/features/filtering/adapters/rest-adapter.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/sql-adapter.d.ts +123 -0
- package/dist/src/features/filtering/adapters/sql-adapter.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/types.d.ts +201 -0
- package/dist/src/features/filtering/adapters/types.d.ts.map +1 -0
- package/dist/src/features/filtering/column-filter.d.ts +117 -0
- package/dist/src/features/filtering/column-filter.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-autocomplete.d.ts +78 -0
- package/dist/src/features/filtering/filter-autocomplete.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-cache.d.ts +113 -0
- package/dist/src/features/filtering/filter-cache.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-compiler.d.ts +66 -0
- package/dist/src/features/filtering/filter-compiler.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-export-manager.d.ts +131 -0
- package/dist/src/features/filtering/filter-export-manager.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-index-manager.d.ts +126 -0
- package/dist/src/features/filtering/filter-index-manager.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-manager.d.ts +408 -0
- package/dist/src/features/filtering/filter-manager.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-optimizer.d.ts +101 -0
- package/dist/src/features/filtering/filter-optimizer.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-query-parser.d.ts +69 -0
- package/dist/src/features/filtering/filter-query-parser.d.ts.map +1 -0
- package/dist/src/features/filtering/index.d.ts +20 -0
- package/dist/src/features/filtering/index.d.ts.map +1 -0
- package/dist/src/features/filtering/range-filter-optimizer.d.ts +138 -0
- package/dist/src/features/filtering/range-filter-optimizer.d.ts.map +1 -0
- package/dist/src/features/filtering/substring-filter.d.ts +90 -0
- package/dist/src/features/filtering/substring-filter.d.ts.map +1 -0
- package/dist/src/features/filtering/types.d.ts +204 -0
- package/dist/src/features/filtering/types.d.ts.map +1 -0
- package/dist/src/features/formulas/formula-calculator.d.ts +151 -0
- package/dist/src/features/formulas/formula-calculator.d.ts.map +1 -0
- package/dist/src/features/formulas/index.d.ts +6 -0
- package/dist/src/features/formulas/index.d.ts.map +1 -0
- package/dist/src/features/hit-testing/index.d.ts +7 -0
- package/dist/src/features/hit-testing/index.d.ts.map +1 -0
- package/dist/src/features/hit-testing/spatial-hit-tester.d.ts +137 -0
- package/dist/src/features/hit-testing/spatial-hit-tester.d.ts.map +1 -0
- package/dist/src/features/loading/index.d.ts +5 -0
- package/dist/src/features/loading/index.d.ts.map +1 -0
- package/dist/src/features/loading/loading-indicator.d.ts +79 -0
- package/dist/src/features/loading/loading-indicator.d.ts.map +1 -0
- package/dist/src/features/loading/loading.styles.css +413 -0
- package/dist/src/features/pagination/index.d.ts +5 -0
- package/dist/src/features/pagination/index.d.ts.map +1 -0
- package/dist/src/features/pagination/pagination.styles.css +288 -0
- package/dist/src/features/pagination/paginator.d.ts +89 -0
- package/dist/src/features/pagination/paginator.d.ts.map +1 -0
- package/dist/src/features/selection/index.d.ts +7 -0
- package/dist/src/features/selection/index.d.ts.map +1 -0
- package/dist/src/features/selection/selection-manager.d.ts +167 -0
- package/dist/src/features/selection/selection-manager.d.ts.map +1 -0
- package/dist/src/features/sorting/index.d.ts +13 -0
- package/dist/src/features/sorting/index.d.ts.map +1 -0
- package/dist/src/features/sorting/row-sorter.interface.d.ts +63 -0
- package/dist/src/features/sorting/row-sorter.interface.d.ts.map +1 -0
- package/dist/src/features/sorting/single-column-sorter.d.ts +75 -0
- package/dist/src/features/sorting/single-column-sorter.d.ts.map +1 -0
- package/dist/src/features/sorting/sort-manager.d.ts +132 -0
- package/dist/src/features/sorting/sort-manager.d.ts.map +1 -0
- package/dist/src/features/undo-redo/index.d.ts +8 -0
- package/dist/src/features/undo-redo/index.d.ts.map +1 -0
- package/dist/src/features/undo-redo/undo-redo-manager.d.ts +215 -0
- package/dist/src/features/undo-redo/undo-redo-manager.d.ts.map +1 -0
- package/dist/src/grid.d.ts +412 -0
- package/dist/src/grid.d.ts.map +1 -0
- package/dist/src/i18n/index.d.ts +8 -0
- package/dist/src/i18n/index.d.ts.map +1 -0
- package/dist/src/i18n/locale-manager.d.ts +123 -0
- package/dist/src/i18n/locale-manager.d.ts.map +1 -0
- package/dist/src/i18n/rtl-support.d.ts +120 -0
- package/dist/src/i18n/rtl-support.d.ts.map +1 -0
- package/dist/src/index.d.ts +38 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/keyboard/index.d.ts +6 -0
- package/dist/src/keyboard/index.d.ts.map +1 -0
- package/dist/src/keyboard/keyboard-navigator.d.ts +171 -0
- package/dist/src/keyboard/keyboard-navigator.d.ts.map +1 -0
- package/dist/src/rendering/cache/index.d.ts +3 -0
- package/dist/src/rendering/cache/index.d.ts.map +1 -0
- package/dist/src/rendering/cache/renderer-cache.d.ts +100 -0
- package/dist/src/rendering/cache/renderer-cache.d.ts.map +1 -0
- package/dist/src/rendering/cache/renderer-cache.interface.d.ts +89 -0
- package/dist/src/rendering/cache/renderer-cache.interface.d.ts.map +1 -0
- package/dist/src/rendering/cell-pool/cell-pool.d.ts +36 -0
- package/dist/src/rendering/cell-pool/cell-pool.d.ts.map +1 -0
- package/dist/src/rendering/cell-pool/cell-pool.interface.d.ts +76 -0
- package/dist/src/rendering/cell-pool/cell-pool.interface.d.ts.map +1 -0
- package/dist/src/rendering/cell-pool/index.d.ts +6 -0
- package/dist/src/rendering/cell-pool/index.d.ts.map +1 -0
- package/dist/src/rendering/cell-positioner/cell-positioner.d.ts +46 -0
- package/dist/src/rendering/cell-positioner/cell-positioner.d.ts.map +1 -0
- package/dist/src/rendering/cell-positioner/cell-positioner.interface.d.ts +86 -0
- package/dist/src/rendering/cell-positioner/cell-positioner.interface.d.ts.map +1 -0
- package/dist/src/rendering/cell-positioner/index.d.ts +6 -0
- package/dist/src/rendering/cell-positioner/index.d.ts.map +1 -0
- package/dist/src/rendering/height-provider/height-provider.interface.d.ts +62 -0
- package/dist/src/rendering/height-provider/height-provider.interface.d.ts.map +1 -0
- package/dist/src/rendering/height-provider/index.d.ts +7 -0
- package/dist/src/rendering/height-provider/index.d.ts.map +1 -0
- package/dist/src/rendering/height-provider/uniform-height-provider.d.ts +31 -0
- package/dist/src/rendering/height-provider/uniform-height-provider.d.ts.map +1 -0
- package/dist/src/rendering/height-provider/variable-height-provider.d.ts +33 -0
- package/dist/src/rendering/height-provider/variable-height-provider.d.ts.map +1 -0
- package/dist/src/rendering/renderers/advanced-cell-renderer.d.ts +105 -0
- package/dist/src/rendering/renderers/advanced-cell-renderer.d.ts.map +1 -0
- package/dist/src/rendering/renderers/image-renderer.d.ts +60 -0
- package/dist/src/rendering/renderers/image-renderer.d.ts.map +1 -0
- package/dist/src/rendering/renderers/index.d.ts +13 -0
- package/dist/src/rendering/renderers/index.d.ts.map +1 -0
- package/dist/src/rendering/renderers/number-renderer.d.ts +71 -0
- package/dist/src/rendering/renderers/number-renderer.d.ts.map +1 -0
- package/dist/src/rendering/renderers/renderer-registry.d.ts +55 -0
- package/dist/src/rendering/renderers/renderer-registry.d.ts.map +1 -0
- package/dist/src/rendering/renderers/renderer.interface.d.ts +79 -0
- package/dist/src/rendering/renderers/renderer.interface.d.ts.map +1 -0
- package/dist/src/rendering/renderers/text-renderer.d.ts +20 -0
- package/dist/src/rendering/renderers/text-renderer.d.ts.map +1 -0
- package/dist/src/rendering/spatial-hit-tester.d.ts +108 -0
- package/dist/src/rendering/spatial-hit-tester.d.ts.map +1 -0
- package/dist/src/rendering/virtual-scroller/index.d.ts +6 -0
- package/dist/src/rendering/virtual-scroller/index.d.ts.map +1 -0
- package/dist/src/rendering/virtual-scroller/virtual-scroller.d.ts +56 -0
- package/dist/src/rendering/virtual-scroller/virtual-scroller.d.ts.map +1 -0
- package/dist/src/rendering/virtual-scroller/virtual-scroller.interface.d.ts +170 -0
- package/dist/src/rendering/virtual-scroller/virtual-scroller.interface.d.ts.map +1 -0
- package/dist/src/rendering/width-provider/index.d.ts +7 -0
- package/dist/src/rendering/width-provider/index.d.ts.map +1 -0
- package/dist/src/rendering/width-provider/uniform-width-provider.d.ts +31 -0
- package/dist/src/rendering/width-provider/uniform-width-provider.d.ts.map +1 -0
- package/dist/src/rendering/width-provider/variable-width-provider.d.ts +33 -0
- package/dist/src/rendering/width-provider/variable-width-provider.d.ts.map +1 -0
- package/dist/src/rendering/width-provider/width-provider.interface.d.ts +62 -0
- package/dist/src/rendering/width-provider/width-provider.interface.d.ts.map +1 -0
- package/dist/src/selection/hit-tester.d.ts +168 -0
- package/dist/src/selection/hit-tester.d.ts.map +1 -0
- package/dist/src/selection/hit-tester.interface.d.ts +108 -0
- package/dist/src/selection/hit-tester.interface.d.ts.map +1 -0
- package/dist/src/selection/index.d.ts +9 -0
- package/dist/src/selection/index.d.ts.map +1 -0
- package/dist/src/selection/range-utils.d.ts +219 -0
- package/dist/src/selection/range-utils.d.ts.map +1 -0
- package/dist/src/selection/range-utils.interface.d.ts +51 -0
- package/dist/src/selection/range-utils.interface.d.ts.map +1 -0
- package/dist/src/styles/grid.css +356 -0
- package/dist/src/styles.css +273 -0
- package/dist/src/touch/index.d.ts +6 -0
- package/dist/src/touch/index.d.ts.map +1 -0
- package/dist/src/touch/touch-handler.d.ts +167 -0
- package/dist/src/touch/touch-handler.d.ts.map +1 -0
- package/dist/src/types/index.d.ts +133 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types.d.ts +559 -0
- package/dist/src/types.d.ts.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { CellRange } from '../../types';
|
|
2
|
+
import type { EventEmitter } from '../../events/event-emitter';
|
|
3
|
+
import type { GridEvents } from '../../events/grid-events';
|
|
4
|
+
/**
|
|
5
|
+
* Clipboard manager options
|
|
6
|
+
*/
|
|
7
|
+
export interface ClipboardManagerOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Event emitter for grid events
|
|
10
|
+
*/
|
|
11
|
+
events?: EventEmitter<GridEvents>;
|
|
12
|
+
/**
|
|
13
|
+
* Callback to get cell value
|
|
14
|
+
*/
|
|
15
|
+
getValue: (row: number, col: number) => any;
|
|
16
|
+
/**
|
|
17
|
+
* Callback to set cell value
|
|
18
|
+
*/
|
|
19
|
+
setValue: (row: number, col: number, value: any) => void;
|
|
20
|
+
/**
|
|
21
|
+
* Callback to delete cell value
|
|
22
|
+
*/
|
|
23
|
+
deleteValue?: (row: number, col: number) => void;
|
|
24
|
+
/**
|
|
25
|
+
* Include headers in copy
|
|
26
|
+
* @default false
|
|
27
|
+
*/
|
|
28
|
+
includeHeaders?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Callback to get column header
|
|
31
|
+
*/
|
|
32
|
+
getColumnHeader?: (col: number) => string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* ClipboardManager - Handles copy/cut/paste operations
|
|
36
|
+
*
|
|
37
|
+
* Supports multiple formats:
|
|
38
|
+
* - text/plain: TSV (tab-separated values)
|
|
39
|
+
* - text/html: HTML table format
|
|
40
|
+
*
|
|
41
|
+
* Compatible with Excel and Google Sheets.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* const clipboard = new ClipboardManager({
|
|
46
|
+
* getValue: (row, col) => data[row][col],
|
|
47
|
+
* setValue: (row, col, value) => { data[row][col] = value; },
|
|
48
|
+
* });
|
|
49
|
+
*
|
|
50
|
+
* // Copy selection
|
|
51
|
+
* await clipboard.copy([
|
|
52
|
+
* { startRow: 0, startCol: 0, endRow: 2, endCol: 2 },
|
|
53
|
+
* ]);
|
|
54
|
+
*
|
|
55
|
+
* // Paste at location
|
|
56
|
+
* await clipboard.paste(5, 0);
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare class ClipboardManager {
|
|
60
|
+
private events?;
|
|
61
|
+
private getValue;
|
|
62
|
+
private setValue;
|
|
63
|
+
private deleteValue?;
|
|
64
|
+
private includeHeaders;
|
|
65
|
+
private getColumnHeader?;
|
|
66
|
+
constructor(options: ClipboardManagerOptions);
|
|
67
|
+
/**
|
|
68
|
+
* Copy selected ranges to clipboard
|
|
69
|
+
* @param ranges - Ranges to copy
|
|
70
|
+
*/
|
|
71
|
+
copy(ranges: CellRange[]): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Cut selected ranges to clipboard (copy + delete)
|
|
74
|
+
* @param ranges - Ranges to cut
|
|
75
|
+
*/
|
|
76
|
+
cut(ranges: CellRange[]): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Paste from clipboard at target location
|
|
79
|
+
* @param targetRow - Target row
|
|
80
|
+
* @param targetCol - Target column
|
|
81
|
+
*/
|
|
82
|
+
paste(targetRow: number, targetCol: number): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Extract data from a range
|
|
85
|
+
*/
|
|
86
|
+
private extractRangeData;
|
|
87
|
+
/**
|
|
88
|
+
* Convert data to TSV format
|
|
89
|
+
*/
|
|
90
|
+
private toTSV;
|
|
91
|
+
/**
|
|
92
|
+
* Format cell value for TSV
|
|
93
|
+
*/
|
|
94
|
+
private formatCellForTSV;
|
|
95
|
+
/**
|
|
96
|
+
* Convert data to HTML table format
|
|
97
|
+
*/
|
|
98
|
+
private toHTML;
|
|
99
|
+
/**
|
|
100
|
+
* Escape HTML special characters
|
|
101
|
+
*/
|
|
102
|
+
private escapeHTML;
|
|
103
|
+
/**
|
|
104
|
+
* Parse TSV text to 2D array
|
|
105
|
+
*/
|
|
106
|
+
private parseTSV;
|
|
107
|
+
/**
|
|
108
|
+
* Parse HTML table to 2D array
|
|
109
|
+
*/
|
|
110
|
+
private parseHTML;
|
|
111
|
+
/**
|
|
112
|
+
* Paste data at target location
|
|
113
|
+
*/
|
|
114
|
+
private pasteData;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=clipboard-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard-manager.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/features/copy-paste/clipboard-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IAElC;;OAEG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;IAE5C;;OAEG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAEjD;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,CAA2B;IAC1C,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,QAAQ,CAAiD;IACjE,OAAO,CAAC,WAAW,CAAC,CAAqC;IACzD,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,eAAe,CAAC,CAA0B;gBAEtC,OAAO,EAAE,uBAAuB;IAS5C;;;OAGG;IACG,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC9C;;;OAGG;IACG,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B7C;;;;OAIG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsChE;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;OAEG;IACH,OAAO,CAAC,KAAK;IAMb;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,OAAO,CAAC,MAAM;IAkBd;;OAEG;IACH,OAAO,CAAC,UAAU;IASlB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAKhB;;OAEG;IACH,OAAO,CAAC,SAAS;IA6BjB;;OAEG;IACH,OAAO,CAAC,SAAS;CAiBlB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/features/copy-paste/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter Adapter Interface
|
|
3
|
+
*
|
|
4
|
+
* Base interface for all filter export adapters.
|
|
5
|
+
* Adapters transform field-based filter state into specific output formats.
|
|
6
|
+
*/
|
|
7
|
+
import type { FieldFilterState, CustomOperator } from '../types';
|
|
8
|
+
/**
|
|
9
|
+
* Base configuration for all adapters
|
|
10
|
+
*/
|
|
11
|
+
export interface AdapterConfig {
|
|
12
|
+
/**
|
|
13
|
+
* Custom operator definitions
|
|
14
|
+
* Extends built-in operators with domain-specific ones
|
|
15
|
+
*/
|
|
16
|
+
customOperators?: CustomOperator[];
|
|
17
|
+
/**
|
|
18
|
+
* Field name transformation function
|
|
19
|
+
* Useful for converting between naming conventions
|
|
20
|
+
*
|
|
21
|
+
* @example camelCase to snake_case
|
|
22
|
+
* ```typescript
|
|
23
|
+
* fieldTransform: (field) => field.replace(/[A-Z]/g, m => `_${m.toLowerCase()}`)
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @example Add table prefix
|
|
27
|
+
* ```typescript
|
|
28
|
+
* fieldTransform: (field) => `users.${field}`
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
fieldTransform?: (field: string) => string;
|
|
32
|
+
/**
|
|
33
|
+
* Value serialization function
|
|
34
|
+
* Transforms filter values before export
|
|
35
|
+
*
|
|
36
|
+
* @example Date to ISO string
|
|
37
|
+
* ```typescript
|
|
38
|
+
* valueSerializer: (value) => value instanceof Date ? value.toISOString() : value
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
valueSerializer?: (value: any) => any;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Filter Adapter Interface
|
|
45
|
+
*
|
|
46
|
+
* All adapters must implement this interface to transform
|
|
47
|
+
* filter state into their specific output format.
|
|
48
|
+
*
|
|
49
|
+
* @template TOutput - The output type of this adapter
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* class CustomAdapter implements FilterAdapter<MyCustomFormat> {
|
|
54
|
+
* readonly name = 'custom';
|
|
55
|
+
*
|
|
56
|
+
* transform(state: FieldFilterState, options?: any): MyCustomFormat {
|
|
57
|
+
* // Transform logic here
|
|
58
|
+
* return customFormat;
|
|
59
|
+
* }
|
|
60
|
+
*
|
|
61
|
+
* parse(input: MyCustomFormat): FieldFilterState {
|
|
62
|
+
* // Reverse parse logic (optional)
|
|
63
|
+
* return fieldState;
|
|
64
|
+
* }
|
|
65
|
+
* }
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export interface FilterAdapter<TOutput> {
|
|
69
|
+
/**
|
|
70
|
+
* Adapter name (unique identifier)
|
|
71
|
+
* @example 'rest', 'graphql', 'sql'
|
|
72
|
+
*/
|
|
73
|
+
readonly name: string;
|
|
74
|
+
/**
|
|
75
|
+
* Transform field-based filter state to output format
|
|
76
|
+
*
|
|
77
|
+
* @param state - Field-based filter state
|
|
78
|
+
* @param options - Adapter-specific options (optional)
|
|
79
|
+
* @returns Transformed output in adapter's format
|
|
80
|
+
*/
|
|
81
|
+
transform(state: FieldFilterState, options?: any): TOutput;
|
|
82
|
+
/**
|
|
83
|
+
* Parse output format back to field-based filter state (optional)
|
|
84
|
+
*
|
|
85
|
+
* Enables bidirectional transformation for use cases like:
|
|
86
|
+
* - URL-based filter state hydration
|
|
87
|
+
* - Storing/loading filter presets
|
|
88
|
+
* - Syncing filter state across tabs
|
|
89
|
+
*
|
|
90
|
+
* @param input - Output format to parse
|
|
91
|
+
* @returns Field-based filter state
|
|
92
|
+
*/
|
|
93
|
+
parse?(input: TOutput): FieldFilterState;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Adapter registry type
|
|
97
|
+
* Maps adapter names to adapter instances
|
|
98
|
+
*/
|
|
99
|
+
export type AdapterRegistry = Map<string, FilterAdapter<any>>;
|
|
100
|
+
//# sourceMappingURL=adapter.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.interface.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/features/filtering/adapters/adapter.interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IAEnC;;;;;;;;;;;;;OAaG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAE3C;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,aAAa,CAAC,OAAO;IACpC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC;IAE3D;;;;;;;;;;OAUG;IACH,KAAK,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphQL Filter Adapter
|
|
3
|
+
*
|
|
4
|
+
* Transforms field-based filters into GraphQL where clauses.
|
|
5
|
+
* Supports Prisma, Hasura, and Apollo/custom schemas.
|
|
6
|
+
*/
|
|
7
|
+
import type { FilterAdapter, AdapterConfig } from './adapter.interface';
|
|
8
|
+
import type { GraphQLFilterExport } from './types';
|
|
9
|
+
import type { FieldFilterState, FieldFilterCondition } from '../types';
|
|
10
|
+
/**
|
|
11
|
+
* GraphQL schema styles
|
|
12
|
+
*/
|
|
13
|
+
export type GraphQLStyle = 'prisma' | 'hasura' | 'apollo' | 'custom';
|
|
14
|
+
/**
|
|
15
|
+
* GraphQL adapter configuration
|
|
16
|
+
*/
|
|
17
|
+
export interface GraphQLAdapterOptions extends AdapterConfig {
|
|
18
|
+
/**
|
|
19
|
+
* GraphQL schema style
|
|
20
|
+
* - prisma: { age: { gt: 18 }, status: { equals: "active" } }
|
|
21
|
+
* - hasura: { age: { _gt: 18 }, status: { _eq: "active" } }
|
|
22
|
+
* - apollo: Similar to Prisma but with different conventions
|
|
23
|
+
* - custom: Use customWhereBuilder
|
|
24
|
+
*
|
|
25
|
+
* @default 'prisma'
|
|
26
|
+
*/
|
|
27
|
+
style?: GraphQLStyle;
|
|
28
|
+
/**
|
|
29
|
+
* Custom where clause builder
|
|
30
|
+
* Only used when style is 'custom'
|
|
31
|
+
*/
|
|
32
|
+
customWhereBuilder?: (conditions: FieldFilterCondition[]) => Record<string, any>;
|
|
33
|
+
/**
|
|
34
|
+
* Generate GraphQL variables instead of inline values
|
|
35
|
+
* Recommended for security and performance
|
|
36
|
+
*
|
|
37
|
+
* @default true
|
|
38
|
+
*/
|
|
39
|
+
useVariables?: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* GraphQL Filter Adapter
|
|
43
|
+
*
|
|
44
|
+
* @example Prisma style
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const adapter = new GraphQLFilterAdapter({ style: 'prisma' });
|
|
47
|
+
* const result = adapter.transform(filterState);
|
|
48
|
+
* // result.where: {
|
|
49
|
+
* // age: { gt: 18 },
|
|
50
|
+
* // status: { equals: "active" }
|
|
51
|
+
* // }
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* @example Hasura style
|
|
55
|
+
* ```typescript
|
|
56
|
+
* const adapter = new GraphQLFilterAdapter({ style: 'hasura' });
|
|
57
|
+
* const result = adapter.transform(filterState);
|
|
58
|
+
* // result.where: {
|
|
59
|
+
* // age: { _gt: 18 },
|
|
60
|
+
* // status: { _eq: "active" }
|
|
61
|
+
* // }
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* @example With variables
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const adapter = new GraphQLFilterAdapter({
|
|
67
|
+
* style: 'prisma',
|
|
68
|
+
* useVariables: true
|
|
69
|
+
* });
|
|
70
|
+
* const result = adapter.transform(filterState);
|
|
71
|
+
* // result.where: { age: { gt: $age }, status: { equals: $status } }
|
|
72
|
+
* // result.variables: { age: 18, status: "active" }
|
|
73
|
+
* // result.variablesTypeDef: "$age: Int, $status: String"
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export declare class GraphQLFilterAdapter implements FilterAdapter<GraphQLFilterExport> {
|
|
77
|
+
readonly name = "graphql";
|
|
78
|
+
private options;
|
|
79
|
+
private variables;
|
|
80
|
+
private variableCounter;
|
|
81
|
+
constructor(options?: GraphQLAdapterOptions);
|
|
82
|
+
/**
|
|
83
|
+
* Transform field-based filter state to GraphQL format
|
|
84
|
+
*/
|
|
85
|
+
transform(state: FieldFilterState): GraphQLFilterExport;
|
|
86
|
+
/**
|
|
87
|
+
* Process a filter group
|
|
88
|
+
*/
|
|
89
|
+
private processGroup;
|
|
90
|
+
/**
|
|
91
|
+
* Build where clause for a single condition
|
|
92
|
+
*/
|
|
93
|
+
private buildConditionWhere;
|
|
94
|
+
/**
|
|
95
|
+
* Build operator object { op: value } or { op: $variable }
|
|
96
|
+
*/
|
|
97
|
+
private buildOperatorObject;
|
|
98
|
+
/**
|
|
99
|
+
* Map standard operator to GraphQL operator
|
|
100
|
+
*/
|
|
101
|
+
private mapOperatorToGraphQL;
|
|
102
|
+
/**
|
|
103
|
+
* Map to Prisma style operators
|
|
104
|
+
*/
|
|
105
|
+
private mapToPrisma;
|
|
106
|
+
/**
|
|
107
|
+
* Map to Hasura style operators (with underscore prefix)
|
|
108
|
+
*/
|
|
109
|
+
private mapToHasura;
|
|
110
|
+
/**
|
|
111
|
+
* Create a GraphQL variable and return its name
|
|
112
|
+
*/
|
|
113
|
+
private createVariable;
|
|
114
|
+
/**
|
|
115
|
+
* Build GraphQL variables type definition
|
|
116
|
+
* @example "$var1: Int, $var2: String"
|
|
117
|
+
*/
|
|
118
|
+
private buildVariablesTypeDef;
|
|
119
|
+
/**
|
|
120
|
+
* Infer GraphQL type from JavaScript value
|
|
121
|
+
*/
|
|
122
|
+
private inferGraphQLType;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=graphql-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql-adapter.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/features/filtering/adapters/graphql-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAoB,oBAAoB,EAA0B,MAAM,UAAU,CAAC;AAEjH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;IAErB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,oBAAoB,EAAE,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEjF;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,oBAAqB,YAAW,aAAa,CAAC,mBAAmB,CAAC;IAC7E,QAAQ,CAAC,IAAI,aAAa;IAE1B,OAAO,CAAC,OAAO,CAAkH;IACjI,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,eAAe,CAAK;gBAEhB,OAAO,GAAE,qBAA0B;IAW/C;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,gBAAgB,GAAG,mBAAmB;IAgCvD;;OAEG;IACH,OAAO,CAAC,YAAY;IA2BpB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyD3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,OAAO,CAAC,WAAW;IAuBnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAuBnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAwBzB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter Adapters
|
|
3
|
+
*
|
|
4
|
+
* Export all filter adapters and related types
|
|
5
|
+
*/
|
|
6
|
+
export * from './types';
|
|
7
|
+
export * from './adapter.interface';
|
|
8
|
+
export * from './rest-adapter';
|
|
9
|
+
export * from './graphql-adapter';
|
|
10
|
+
export * from './sql-adapter';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/features/filtering/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AAGpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* REST Filter Adapter
|
|
3
|
+
*
|
|
4
|
+
* Transforms field-based filters into REST API query parameters.
|
|
5
|
+
* Supports three query string styles: brackets, dots, and flat.
|
|
6
|
+
*/
|
|
7
|
+
import type { FilterAdapter, AdapterConfig } from './adapter.interface';
|
|
8
|
+
import type { RESTFilterExport } from './types';
|
|
9
|
+
import type { FieldFilterState } from '../types';
|
|
10
|
+
/**
|
|
11
|
+
* REST adapter configuration
|
|
12
|
+
*/
|
|
13
|
+
export interface RESTAdapterOptions extends AdapterConfig {
|
|
14
|
+
/**
|
|
15
|
+
* Query string style
|
|
16
|
+
* - brackets: ?filter[age][gt]=18
|
|
17
|
+
* - dots: ?filter.age.gt=18
|
|
18
|
+
* - flat: ?age_gt=18
|
|
19
|
+
*
|
|
20
|
+
* @default 'brackets'
|
|
21
|
+
*/
|
|
22
|
+
style?: 'brackets' | 'dots' | 'flat';
|
|
23
|
+
/**
|
|
24
|
+
* Array format for 'in' operator
|
|
25
|
+
* - brackets: ?status[]=active&status[]=pending
|
|
26
|
+
* - comma: ?status=active,pending
|
|
27
|
+
* - repeat: ?status=active&status=pending
|
|
28
|
+
*
|
|
29
|
+
* @default 'brackets'
|
|
30
|
+
*/
|
|
31
|
+
arrayFormat?: 'brackets' | 'comma' | 'repeat';
|
|
32
|
+
/**
|
|
33
|
+
* URL-encode parameter values
|
|
34
|
+
* @default true
|
|
35
|
+
*/
|
|
36
|
+
encode?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Prefix for filter parameters (used in brackets/dots styles)
|
|
39
|
+
* @default 'filter'
|
|
40
|
+
*/
|
|
41
|
+
prefix?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* REST Filter Adapter
|
|
45
|
+
*
|
|
46
|
+
* @example Brackets style (default)
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const adapter = new RESTFilterAdapter({ style: 'brackets' });
|
|
49
|
+
* const result = adapter.transform(filterState);
|
|
50
|
+
* // result.queryString: "?filter[age][gt]=18&filter[status][eq]=active"
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @example Dots style
|
|
54
|
+
* ```typescript
|
|
55
|
+
* const adapter = new RESTFilterAdapter({ style: 'dots' });
|
|
56
|
+
* const result = adapter.transform(filterState);
|
|
57
|
+
* // result.queryString: "?filter.age.gt=18&filter.status.eq=active"
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* @example Flat style
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const adapter = new RESTFilterAdapter({ style: 'flat' });
|
|
63
|
+
* const result = adapter.transform(filterState);
|
|
64
|
+
* // result.queryString: "?age_gt=18&status_eq=active"
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare class RESTFilterAdapter implements FilterAdapter<RESTFilterExport> {
|
|
68
|
+
readonly name = "rest";
|
|
69
|
+
private options;
|
|
70
|
+
constructor(options?: RESTAdapterOptions);
|
|
71
|
+
/**
|
|
72
|
+
* Transform field-based filter state to REST format
|
|
73
|
+
*/
|
|
74
|
+
transform(state: FieldFilterState): RESTFilterExport;
|
|
75
|
+
/**
|
|
76
|
+
* Process a filter group and add parameters
|
|
77
|
+
*/
|
|
78
|
+
private processGroup;
|
|
79
|
+
/**
|
|
80
|
+
* Add a single condition to params
|
|
81
|
+
*/
|
|
82
|
+
private addConditionToParams;
|
|
83
|
+
/**
|
|
84
|
+
* Build parameter key based on style
|
|
85
|
+
*/
|
|
86
|
+
private buildParamKey;
|
|
87
|
+
/**
|
|
88
|
+
* Add array parameter based on arrayFormat
|
|
89
|
+
*/
|
|
90
|
+
private addArrayParam;
|
|
91
|
+
/**
|
|
92
|
+
* Serialize value to string
|
|
93
|
+
*/
|
|
94
|
+
private serializeValue;
|
|
95
|
+
/**
|
|
96
|
+
* Build query string from params
|
|
97
|
+
*/
|
|
98
|
+
private buildQueryString;
|
|
99
|
+
/**
|
|
100
|
+
* Encode a key-value pair
|
|
101
|
+
*/
|
|
102
|
+
private encodePair;
|
|
103
|
+
/**
|
|
104
|
+
* Parse REST query string back to field-based filter state (optional)
|
|
105
|
+
*/
|
|
106
|
+
parse(input: RESTFilterExport): FieldFilterState;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=rest-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest-adapter.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/features/filtering/adapters/rest-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAkE,MAAM,UAAU,CAAC;AAEjH;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;IAErC;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;IAE9C;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,iBAAkB,YAAW,aAAa,CAAC,gBAAgB,CAAC;IACvE,QAAQ,CAAC,IAAI,UAAU;IAEvB,OAAO,CAAC,OAAO,CAA+B;gBAElC,OAAO,GAAE,kBAAuB;IAY5C;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB;IAqBpD;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyC5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,aAAa;IAoCrB;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB;CASjD"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQL Filter Adapter
|
|
3
|
+
*
|
|
4
|
+
* Transforms field-based filters into parameterized SQL WHERE clauses.
|
|
5
|
+
* Supports positional (?), named (:name), and dollar ($1) parameter styles.
|
|
6
|
+
*/
|
|
7
|
+
import type { FilterAdapter, AdapterConfig } from './adapter.interface';
|
|
8
|
+
import type { SQLFilterExport } from './types';
|
|
9
|
+
import type { FieldFilterState } from '../types';
|
|
10
|
+
/**
|
|
11
|
+
* SQL parameter styles
|
|
12
|
+
*/
|
|
13
|
+
export type SQLParamStyle = 'positional' | 'named' | 'dollar';
|
|
14
|
+
/**
|
|
15
|
+
* SQL adapter configuration
|
|
16
|
+
*/
|
|
17
|
+
export interface SQLAdapterOptions extends AdapterConfig {
|
|
18
|
+
/**
|
|
19
|
+
* Parameter style
|
|
20
|
+
* - positional: WHERE age > ? AND status = ?
|
|
21
|
+
* - named: WHERE age > :age AND status = :status
|
|
22
|
+
* - dollar: WHERE age > $1 AND status = $2 (PostgreSQL)
|
|
23
|
+
*
|
|
24
|
+
* @default 'positional'
|
|
25
|
+
*/
|
|
26
|
+
paramStyle?: SQLParamStyle;
|
|
27
|
+
/**
|
|
28
|
+
* Named parameter prefix
|
|
29
|
+
* Only used when paramStyle is 'named'
|
|
30
|
+
*
|
|
31
|
+
* @default ':'
|
|
32
|
+
*/
|
|
33
|
+
namedPrefix?: string;
|
|
34
|
+
/**
|
|
35
|
+
* Quote identifiers (field names)
|
|
36
|
+
* - true: "age" (double quotes)
|
|
37
|
+
* - false: age (no quotes)
|
|
38
|
+
*
|
|
39
|
+
* @default false
|
|
40
|
+
*/
|
|
41
|
+
quoteIdentifiers?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Identifier quote character
|
|
44
|
+
* - '"' for PostgreSQL, SQL Server
|
|
45
|
+
* - '`' for MySQL, MariaDB
|
|
46
|
+
* - '[' for SQL Server (uses ]' for closing)
|
|
47
|
+
*
|
|
48
|
+
* @default '"'
|
|
49
|
+
*/
|
|
50
|
+
identifierQuote?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Case sensitivity for string operations
|
|
53
|
+
* - true: Use LOWER() for case-insensitive comparisons
|
|
54
|
+
* - false: Use operators as-is
|
|
55
|
+
*
|
|
56
|
+
* @default false
|
|
57
|
+
*/
|
|
58
|
+
caseInsensitive?: boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* SQL Filter Adapter
|
|
62
|
+
*
|
|
63
|
+
* @example Positional parameters (default)
|
|
64
|
+
* ```typescript
|
|
65
|
+
* const adapter = new SQLFilterAdapter({ paramStyle: 'positional' });
|
|
66
|
+
* const result = adapter.transform(filterState);
|
|
67
|
+
* // result.whereClause: "age > ? AND status = ?"
|
|
68
|
+
* // result.positionalParams: [18, "active"]
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* @example Named parameters
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const adapter = new SQLFilterAdapter({ paramStyle: 'named' });
|
|
74
|
+
* const result = adapter.transform(filterState);
|
|
75
|
+
* // result.namedSql: "age > :age AND status = :status"
|
|
76
|
+
* // result.namedParams: { age: 18, status: "active" }
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* @example Dollar parameters (PostgreSQL)
|
|
80
|
+
* ```typescript
|
|
81
|
+
* const adapter = new SQLFilterAdapter({ paramStyle: 'dollar' });
|
|
82
|
+
* const result = adapter.transform(filterState);
|
|
83
|
+
* // result.whereClause: "age > $1 AND status = $2"
|
|
84
|
+
* // result.positionalParams: [18, "active"]
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export declare class SQLFilterAdapter implements FilterAdapter<SQLFilterExport> {
|
|
88
|
+
readonly name = "sql";
|
|
89
|
+
private options;
|
|
90
|
+
private positionalParams;
|
|
91
|
+
private namedParams;
|
|
92
|
+
private paramCounter;
|
|
93
|
+
constructor(options?: SQLAdapterOptions);
|
|
94
|
+
/**
|
|
95
|
+
* Transform field-based filter state to SQL format
|
|
96
|
+
*/
|
|
97
|
+
transform(state: FieldFilterState): SQLFilterExport;
|
|
98
|
+
/**
|
|
99
|
+
* Process a filter group
|
|
100
|
+
*/
|
|
101
|
+
private processGroup;
|
|
102
|
+
/**
|
|
103
|
+
* Build SQL clause for a single condition
|
|
104
|
+
*/
|
|
105
|
+
private buildConditionClause;
|
|
106
|
+
/**
|
|
107
|
+
* Map standard operator to SQL operator
|
|
108
|
+
*/
|
|
109
|
+
private mapOperatorToSQL;
|
|
110
|
+
/**
|
|
111
|
+
* Add parameter and return placeholder
|
|
112
|
+
*/
|
|
113
|
+
private addParam;
|
|
114
|
+
/**
|
|
115
|
+
* Quote field identifier
|
|
116
|
+
*/
|
|
117
|
+
private quoteField;
|
|
118
|
+
/**
|
|
119
|
+
* Build named SQL version
|
|
120
|
+
*/
|
|
121
|
+
private buildNamedSQL;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=sql-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-adapter.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/features/filtering/adapters/sql-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAkE,MAAM,UAAU,CAAC;AAEjH;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC;IAE3B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,gBAAiB,YAAW,aAAa,CAAC,eAAe,CAAC;IACrE,QAAQ,CAAC,IAAI,SAAS;IAEtB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,YAAY,CAAK;gBAEb,OAAO,GAAE,iBAAsB;IAa3C;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,gBAAgB,GAAG,eAAe;IA4BnD;;OAEG;IACH,OAAO,CAAC,YAAY;IA2BpB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqD5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAqChB;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACH,OAAO,CAAC,aAAa;CAiBtB"}
|