@proofkit/fmodata 0.1.0-alpha.8 → 0.1.0-beta.23
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/LICENSE.md +21 -0
- package/README.md +651 -449
- package/dist/esm/client/batch-builder.d.ts +10 -9
- package/dist/esm/client/batch-builder.js +119 -56
- package/dist/esm/client/batch-builder.js.map +1 -1
- package/dist/esm/client/batch-request.js +16 -21
- package/dist/esm/client/batch-request.js.map +1 -1
- package/dist/esm/client/builders/default-select.d.ts +10 -0
- package/dist/esm/client/builders/default-select.js +41 -0
- package/dist/esm/client/builders/default-select.js.map +1 -0
- package/dist/esm/client/builders/expand-builder.d.ts +45 -0
- package/dist/esm/client/builders/expand-builder.js +185 -0
- package/dist/esm/client/builders/expand-builder.js.map +1 -0
- package/dist/esm/client/builders/index.d.ts +9 -0
- package/dist/esm/client/builders/query-string-builder.d.ts +18 -0
- package/dist/esm/client/builders/query-string-builder.js +21 -0
- package/dist/esm/client/builders/query-string-builder.js.map +1 -0
- package/dist/esm/client/builders/response-processor.d.ts +43 -0
- package/dist/esm/client/builders/response-processor.js +175 -0
- package/dist/esm/client/builders/response-processor.js.map +1 -0
- package/dist/esm/client/builders/select-mixin.d.ts +25 -0
- package/dist/esm/client/builders/select-mixin.js +28 -0
- package/dist/esm/client/builders/select-mixin.js.map +1 -0
- package/dist/esm/client/builders/select-utils.d.ts +18 -0
- package/dist/esm/client/builders/select-utils.js +30 -0
- package/dist/esm/client/builders/select-utils.js.map +1 -0
- package/dist/esm/client/builders/shared-types.d.ts +40 -0
- package/dist/esm/client/builders/table-utils.d.ts +35 -0
- package/dist/esm/client/builders/table-utils.js +44 -0
- package/dist/esm/client/builders/table-utils.js.map +1 -0
- package/dist/esm/client/database.d.ts +34 -22
- package/dist/esm/client/database.js +48 -84
- package/dist/esm/client/database.js.map +1 -1
- package/dist/esm/client/delete-builder.d.ts +25 -30
- package/dist/esm/client/delete-builder.js +45 -30
- package/dist/esm/client/delete-builder.js.map +1 -1
- package/dist/esm/client/entity-set.d.ts +35 -43
- package/dist/esm/client/entity-set.js +110 -52
- package/dist/esm/client/entity-set.js.map +1 -1
- package/dist/esm/client/error-parser.d.ts +12 -0
- package/dist/esm/client/error-parser.js +25 -0
- package/dist/esm/client/error-parser.js.map +1 -0
- package/dist/esm/client/filemaker-odata.d.ts +26 -7
- package/dist/esm/client/filemaker-odata.js +65 -42
- package/dist/esm/client/filemaker-odata.js.map +1 -1
- package/dist/esm/client/insert-builder.d.ts +19 -24
- package/dist/esm/client/insert-builder.js +94 -58
- package/dist/esm/client/insert-builder.js.map +1 -1
- package/dist/esm/client/query/expand-builder.d.ts +35 -0
- package/dist/esm/client/query/index.d.ts +4 -0
- package/dist/esm/client/query/query-builder.d.ts +132 -0
- package/dist/esm/client/query/query-builder.js +456 -0
- package/dist/esm/client/query/query-builder.js.map +1 -0
- package/dist/esm/client/query/response-processor.d.ts +25 -0
- package/dist/esm/client/query/types.d.ts +77 -0
- package/dist/esm/client/query/url-builder.d.ts +71 -0
- package/dist/esm/client/query/url-builder.js +100 -0
- package/dist/esm/client/query/url-builder.js.map +1 -0
- package/dist/esm/client/query-builder.d.ts +2 -115
- package/dist/esm/client/record-builder.d.ts +108 -36
- package/dist/esm/client/record-builder.js +284 -119
- package/dist/esm/client/record-builder.js.map +1 -1
- package/dist/esm/client/response-processor.d.ts +4 -9
- package/dist/esm/client/sanitize-json.d.ts +35 -0
- package/dist/esm/client/sanitize-json.js +27 -0
- package/dist/esm/client/sanitize-json.js.map +1 -0
- package/dist/esm/client/schema-manager.d.ts +5 -5
- package/dist/esm/client/schema-manager.js +45 -31
- package/dist/esm/client/schema-manager.js.map +1 -1
- package/dist/esm/client/update-builder.d.ts +34 -40
- package/dist/esm/client/update-builder.js +99 -58
- package/dist/esm/client/update-builder.js.map +1 -1
- package/dist/esm/client/webhook-builder.d.ts +126 -0
- package/dist/esm/client/webhook-builder.js +189 -0
- package/dist/esm/client/webhook-builder.js.map +1 -0
- package/dist/esm/errors.d.ts +19 -2
- package/dist/esm/errors.js +39 -4
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/index.d.ts +10 -8
- package/dist/esm/index.js +40 -10
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/logger.d.ts +47 -0
- package/dist/esm/logger.js +69 -0
- package/dist/esm/logger.js.map +1 -0
- package/dist/esm/logger.test.d.ts +1 -0
- package/dist/esm/orm/column.d.ts +62 -0
- package/dist/esm/orm/column.js +63 -0
- package/dist/esm/orm/column.js.map +1 -0
- package/dist/esm/orm/field-builders.d.ts +164 -0
- package/dist/esm/orm/field-builders.js +158 -0
- package/dist/esm/orm/field-builders.js.map +1 -0
- package/dist/esm/orm/index.d.ts +5 -0
- package/dist/esm/orm/operators.d.ts +173 -0
- package/dist/esm/orm/operators.js +260 -0
- package/dist/esm/orm/operators.js.map +1 -0
- package/dist/esm/orm/table.d.ts +355 -0
- package/dist/esm/orm/table.js +202 -0
- package/dist/esm/orm/table.js.map +1 -0
- package/dist/esm/transform.d.ts +20 -21
- package/dist/esm/transform.js +44 -45
- package/dist/esm/transform.js.map +1 -1
- package/dist/esm/types.d.ts +96 -30
- package/dist/esm/types.js +7 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/validation.d.ts +22 -12
- package/dist/esm/validation.js +132 -85
- package/dist/esm/validation.js.map +1 -1
- package/package.json +28 -20
- package/src/client/batch-builder.ts +153 -89
- package/src/client/batch-request.ts +25 -41
- package/src/client/builders/default-select.ts +75 -0
- package/src/client/builders/expand-builder.ts +246 -0
- package/src/client/builders/index.ts +11 -0
- package/src/client/builders/query-string-builder.ts +46 -0
- package/src/client/builders/response-processor.ts +279 -0
- package/src/client/builders/select-mixin.ts +65 -0
- package/src/client/builders/select-utils.ts +59 -0
- package/src/client/builders/shared-types.ts +45 -0
- package/src/client/builders/table-utils.ts +83 -0
- package/src/client/database.ts +89 -183
- package/src/client/delete-builder.ts +74 -84
- package/src/client/entity-set.ts +266 -293
- package/src/client/error-parser.ts +41 -0
- package/src/client/filemaker-odata.ts +98 -66
- package/src/client/insert-builder.ts +157 -118
- package/src/client/query/expand-builder.ts +160 -0
- package/src/client/query/index.ts +14 -0
- package/src/client/query/query-builder.ts +729 -0
- package/src/client/query/response-processor.ts +226 -0
- package/src/client/query/types.ts +126 -0
- package/src/client/query/url-builder.ts +151 -0
- package/src/client/query-builder.ts +10 -1455
- package/src/client/record-builder.ts +575 -240
- package/src/client/response-processor.ts +15 -42
- package/src/client/sanitize-json.ts +64 -0
- package/src/client/schema-manager.ts +61 -76
- package/src/client/update-builder.ts +161 -143
- package/src/client/webhook-builder.ts +265 -0
- package/src/errors.ts +49 -16
- package/src/index.ts +99 -54
- package/src/logger.test.ts +34 -0
- package/src/logger.ts +116 -0
- package/src/orm/column.ts +106 -0
- package/src/orm/field-builders.ts +250 -0
- package/src/orm/index.ts +61 -0
- package/src/orm/operators.ts +473 -0
- package/src/orm/table.ts +741 -0
- package/src/transform.ts +90 -70
- package/src/types.ts +154 -113
- package/src/validation.ts +200 -115
- package/dist/esm/client/base-table.d.ts +0 -125
- package/dist/esm/client/base-table.js +0 -57
- package/dist/esm/client/base-table.js.map +0 -1
- package/dist/esm/client/query-builder.js +0 -896
- package/dist/esm/client/query-builder.js.map +0 -1
- package/dist/esm/client/table-occurrence.d.ts +0 -72
- package/dist/esm/client/table-occurrence.js +0 -74
- package/dist/esm/client/table-occurrence.js.map +0 -1
- package/dist/esm/filter-types.d.ts +0 -76
- package/src/client/base-table.ts +0 -166
- package/src/client/query-builder.ts.bak +0 -1457
- package/src/client/table-occurrence.ts +0 -175
- package/src/filter-types.ts +0 -97
package/src/transform.ts
CHANGED
|
@@ -1,24 +1,30 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import
|
|
3
|
-
|
|
1
|
+
import type { FMTable } from "./orm/table";
|
|
2
|
+
import { getBaseTableConfig, getFieldId, getFieldName, getTableId, getTableName, isUsingEntityIds } from "./orm/table";
|
|
3
|
+
|
|
4
|
+
const WHITESPACE_SPLIT_REGEX = /\s+/;
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Transforms field names to FileMaker field IDs (FMFID) in an object
|
|
7
8
|
* @param data - Object with field names as keys
|
|
8
|
-
* @param
|
|
9
|
+
* @param table - FMTable instance to get field IDs from
|
|
9
10
|
* @returns Object with FMFID keys instead of field names
|
|
10
11
|
*/
|
|
12
|
+
// biome-ignore lint/suspicious/noExplicitAny: Generic constraint accepting any record shape
|
|
11
13
|
export function transformFieldNamesToIds<T extends Record<string, any>>(
|
|
12
14
|
data: T,
|
|
13
|
-
|
|
15
|
+
// biome-ignore lint/suspicious/noExplicitAny: Accepts any FMTable configuration
|
|
16
|
+
table: FMTable<any, any>,
|
|
17
|
+
// biome-ignore lint/suspicious/noExplicitAny: Dynamic field transformation
|
|
14
18
|
): Record<string, any> {
|
|
15
|
-
|
|
19
|
+
const config = getBaseTableConfig(table);
|
|
20
|
+
if (!config.fmfIds) {
|
|
16
21
|
return data;
|
|
17
22
|
}
|
|
18
23
|
|
|
24
|
+
// biome-ignore lint/suspicious/noExplicitAny: Dynamic field transformation
|
|
19
25
|
const transformed: Record<string, any> = {};
|
|
20
26
|
for (const [fieldName, value] of Object.entries(data)) {
|
|
21
|
-
const fieldId =
|
|
27
|
+
const fieldId = getFieldId(table, fieldName);
|
|
22
28
|
transformed[fieldId] = value;
|
|
23
29
|
}
|
|
24
30
|
return transformed;
|
|
@@ -27,17 +33,22 @@ export function transformFieldNamesToIds<T extends Record<string, any>>(
|
|
|
27
33
|
/**
|
|
28
34
|
* Transforms FileMaker field IDs (FMFID) to field names in an object
|
|
29
35
|
* @param data - Object with FMFID keys
|
|
30
|
-
* @param
|
|
36
|
+
* @param table - FMTable instance to get field names from
|
|
31
37
|
* @returns Object with field names as keys instead of FMFIDs
|
|
32
38
|
*/
|
|
39
|
+
// biome-ignore lint/suspicious/noExplicitAny: Generic constraint accepting any record shape
|
|
33
40
|
export function transformFieldIdsToNames<T extends Record<string, any>>(
|
|
34
41
|
data: T,
|
|
35
|
-
|
|
42
|
+
// biome-ignore lint/suspicious/noExplicitAny: Accepts any FMTable configuration
|
|
43
|
+
table: FMTable<any, any>,
|
|
44
|
+
// biome-ignore lint/suspicious/noExplicitAny: Dynamic field transformation
|
|
36
45
|
): Record<string, any> {
|
|
37
|
-
|
|
46
|
+
const config = getBaseTableConfig(table);
|
|
47
|
+
if (!config.fmfIds) {
|
|
38
48
|
return data;
|
|
39
49
|
}
|
|
40
50
|
|
|
51
|
+
// biome-ignore lint/suspicious/noExplicitAny: Dynamic field transformation
|
|
41
52
|
const transformed: Record<string, any> = {};
|
|
42
53
|
for (const [key, value] of Object.entries(data)) {
|
|
43
54
|
// Check if this is an OData metadata field (starts with @)
|
|
@@ -46,7 +57,7 @@ export function transformFieldIdsToNames<T extends Record<string, any>>(
|
|
|
46
57
|
continue;
|
|
47
58
|
}
|
|
48
59
|
|
|
49
|
-
const fieldName =
|
|
60
|
+
const fieldName = getFieldName(table, key);
|
|
50
61
|
transformed[fieldName] = value;
|
|
51
62
|
}
|
|
52
63
|
return transformed;
|
|
@@ -55,38 +66,34 @@ export function transformFieldIdsToNames<T extends Record<string, any>>(
|
|
|
55
66
|
/**
|
|
56
67
|
* Transforms a field name to FMFID or returns the field name if not using IDs
|
|
57
68
|
* @param fieldName - The field name to transform
|
|
58
|
-
* @param
|
|
69
|
+
* @param table - FMTable instance to get field ID from
|
|
59
70
|
* @returns The FMFID or field name
|
|
60
71
|
*/
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
): string {
|
|
65
|
-
return baseTable.getFieldId(fieldName as any);
|
|
72
|
+
// biome-ignore lint/suspicious/noExplicitAny: Accepts any FMTable configuration
|
|
73
|
+
export function transformFieldName(fieldName: string, table: FMTable<any, any>): string {
|
|
74
|
+
return getFieldId(table, fieldName);
|
|
66
75
|
}
|
|
67
76
|
|
|
68
77
|
/**
|
|
69
|
-
* Transforms a table
|
|
70
|
-
* @param
|
|
78
|
+
* Transforms a table name to FMTID or returns the name if not using IDs
|
|
79
|
+
* @param table - FMTable instance to get table ID from
|
|
71
80
|
* @returns The FMTID or table name
|
|
72
81
|
*/
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
)
|
|
76
|
-
return occurrence.getTableId();
|
|
82
|
+
// biome-ignore lint/suspicious/noExplicitAny: Accepts any FMTable configuration
|
|
83
|
+
export function transformTableName(table: FMTable<any, any>): string {
|
|
84
|
+
return getTableId(table);
|
|
77
85
|
}
|
|
78
86
|
|
|
79
87
|
/**
|
|
80
|
-
* Gets both table name and ID from
|
|
81
|
-
* @param
|
|
88
|
+
* Gets both table name and ID from a table
|
|
89
|
+
* @param table - FMTable instance
|
|
82
90
|
* @returns Object with name (always present) and id (may be undefined if not using IDs)
|
|
83
91
|
*/
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
): { name: string; id: string | undefined } {
|
|
92
|
+
// biome-ignore lint/suspicious/noExplicitAny: Accepts any FMTable configuration
|
|
93
|
+
export function getTableIdentifiers(table: FMTable<any, any>): { name: string; id: string | undefined } {
|
|
87
94
|
return {
|
|
88
|
-
name:
|
|
89
|
-
id:
|
|
95
|
+
name: getTableName(table),
|
|
96
|
+
id: isUsingEntityIds(table) ? getTableId(table) : undefined,
|
|
90
97
|
};
|
|
91
98
|
}
|
|
92
99
|
|
|
@@ -95,19 +102,24 @@ export function getTableIdentifiers(
|
|
|
95
102
|
* Handles both single records and arrays of records, as well as nested expand relationships.
|
|
96
103
|
*
|
|
97
104
|
* @param data - Response data from FileMaker (can be single record, array, or wrapped in value property)
|
|
98
|
-
* @param
|
|
105
|
+
* @param table - FMTable instance for the main table
|
|
99
106
|
* @param expandConfigs - Configuration for expanded relations (optional)
|
|
100
107
|
* @returns Transformed data with field names instead of IDs
|
|
101
108
|
*/
|
|
102
109
|
export function transformResponseFields(
|
|
110
|
+
// biome-ignore lint/suspicious/noExplicitAny: Dynamic response data transformation
|
|
103
111
|
data: any,
|
|
104
|
-
|
|
112
|
+
// biome-ignore lint/suspicious/noExplicitAny: Accepts any FMTable configuration
|
|
113
|
+
table: FMTable<any, any>,
|
|
105
114
|
expandConfigs?: Array<{
|
|
106
115
|
relation: string;
|
|
107
|
-
|
|
116
|
+
// biome-ignore lint/suspicious/noExplicitAny: Accepts any FMTable configuration
|
|
117
|
+
table?: FMTable<any, any>;
|
|
108
118
|
}>,
|
|
119
|
+
// biome-ignore lint/suspicious/noExplicitAny: Dynamic response data transformation
|
|
109
120
|
): any {
|
|
110
|
-
|
|
121
|
+
const config = getBaseTableConfig(table);
|
|
122
|
+
if (!config.fmfIds) {
|
|
111
123
|
return data;
|
|
112
124
|
}
|
|
113
125
|
|
|
@@ -120,38 +132,40 @@ export function transformResponseFields(
|
|
|
120
132
|
if (data.value && Array.isArray(data.value)) {
|
|
121
133
|
return {
|
|
122
134
|
...data,
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
),
|
|
135
|
+
// biome-ignore lint/suspicious/noExplicitAny: Dynamic record transformation
|
|
136
|
+
value: data.value.map((record: any) => transformSingleRecord(record, table, expandConfigs)),
|
|
126
137
|
};
|
|
127
138
|
}
|
|
128
139
|
|
|
129
140
|
// Handle array of records
|
|
130
141
|
if (Array.isArray(data)) {
|
|
131
|
-
return data.map((record) =>
|
|
132
|
-
transformSingleRecord(record, baseTable, expandConfigs),
|
|
133
|
-
);
|
|
142
|
+
return data.map((record) => transformSingleRecord(record, table, expandConfigs));
|
|
134
143
|
}
|
|
135
144
|
|
|
136
145
|
// Handle single record
|
|
137
|
-
return transformSingleRecord(data,
|
|
146
|
+
return transformSingleRecord(data, table, expandConfigs);
|
|
138
147
|
}
|
|
139
148
|
|
|
140
149
|
/**
|
|
141
150
|
* Transforms a single record, converting field IDs to names and handling nested expands
|
|
142
151
|
*/
|
|
143
152
|
function transformSingleRecord(
|
|
153
|
+
// biome-ignore lint/suspicious/noExplicitAny: Dynamic record transformation
|
|
144
154
|
record: any,
|
|
145
|
-
|
|
155
|
+
// biome-ignore lint/suspicious/noExplicitAny: Accepts any FMTable configuration
|
|
156
|
+
table: FMTable<any, any>,
|
|
146
157
|
expandConfigs?: Array<{
|
|
147
158
|
relation: string;
|
|
148
|
-
|
|
159
|
+
// biome-ignore lint/suspicious/noExplicitAny: Accepts any FMTable configuration
|
|
160
|
+
table?: FMTable<any, any>;
|
|
149
161
|
}>,
|
|
162
|
+
// biome-ignore lint/suspicious/noExplicitAny: Dynamic record transformation
|
|
150
163
|
): any {
|
|
151
164
|
if (!record || typeof record !== "object") {
|
|
152
165
|
return record;
|
|
153
166
|
}
|
|
154
167
|
|
|
168
|
+
// biome-ignore lint/suspicious/noExplicitAny: Dynamic field transformation
|
|
155
169
|
const transformed: Record<string, any> = {};
|
|
156
170
|
|
|
157
171
|
for (const [key, value] of Object.entries(record)) {
|
|
@@ -168,32 +182,34 @@ function transformSingleRecord(
|
|
|
168
182
|
// (FileMaker returns expanded relations with FMTID keys when using entity IDs)
|
|
169
183
|
if (!expandConfig && key.startsWith("FMTID:")) {
|
|
170
184
|
expandConfig = expandConfigs?.find(
|
|
171
|
-
(ec) =>
|
|
172
|
-
ec.occurrence &&
|
|
173
|
-
ec.occurrence.isUsingTableId() &&
|
|
174
|
-
ec.occurrence.getTableId() === key,
|
|
185
|
+
(ec) => ec.table && isUsingEntityIds(ec.table) && getTableId(ec.table) === key,
|
|
175
186
|
);
|
|
176
187
|
}
|
|
177
188
|
|
|
178
|
-
if (expandConfig
|
|
189
|
+
if (expandConfig?.table) {
|
|
179
190
|
// Transform the expanded relation data recursively
|
|
180
191
|
// Use the relation name (not the FMTID) as the key
|
|
181
192
|
const relationKey = expandConfig.relation;
|
|
182
193
|
|
|
183
194
|
if (Array.isArray(value)) {
|
|
195
|
+
if (!expandConfig.table) {
|
|
196
|
+
transformed[relationKey] = value;
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
const nestedTable = expandConfig.table;
|
|
184
200
|
transformed[relationKey] = value.map((nestedRecord) =>
|
|
185
201
|
transformSingleRecord(
|
|
186
202
|
nestedRecord,
|
|
187
|
-
|
|
203
|
+
nestedTable,
|
|
188
204
|
undefined, // Don't pass nested expand configs for now
|
|
189
205
|
),
|
|
190
206
|
);
|
|
191
207
|
} else if (value && typeof value === "object") {
|
|
192
|
-
|
|
193
|
-
value
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
);
|
|
208
|
+
if (!expandConfig.table) {
|
|
209
|
+
transformed[relationKey] = value;
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
transformed[relationKey] = transformSingleRecord(value, expandConfig.table, undefined);
|
|
197
213
|
} else {
|
|
198
214
|
transformed[relationKey] = value;
|
|
199
215
|
}
|
|
@@ -201,7 +217,7 @@ function transformSingleRecord(
|
|
|
201
217
|
}
|
|
202
218
|
|
|
203
219
|
// Transform field ID to field name
|
|
204
|
-
const fieldName =
|
|
220
|
+
const fieldName = getFieldName(table, key);
|
|
205
221
|
transformed[fieldName] = value;
|
|
206
222
|
}
|
|
207
223
|
|
|
@@ -211,39 +227,43 @@ function transformSingleRecord(
|
|
|
211
227
|
/**
|
|
212
228
|
* Transforms an array of field names to FMFIDs
|
|
213
229
|
* @param fieldNames - Array of field names
|
|
214
|
-
* @param
|
|
230
|
+
* @param table - FMTable instance to get field IDs from
|
|
215
231
|
* @returns Array of FMFIDs or field names
|
|
216
232
|
*/
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
)
|
|
221
|
-
if (!baseTable.isUsingFieldIds()) {
|
|
233
|
+
// biome-ignore lint/suspicious/noExplicitAny: Accepts any FMTable configuration
|
|
234
|
+
export function transformFieldNamesArray(fieldNames: string[], table: FMTable<any, any>): string[] {
|
|
235
|
+
const config = getBaseTableConfig(table);
|
|
236
|
+
if (!config.fmfIds) {
|
|
222
237
|
return fieldNames;
|
|
223
238
|
}
|
|
224
239
|
|
|
225
|
-
return fieldNames.map((fieldName) =>
|
|
240
|
+
return fieldNames.map((fieldName) => getFieldId(table, fieldName));
|
|
226
241
|
}
|
|
227
242
|
|
|
228
243
|
/**
|
|
229
244
|
* Transforms a field name in an orderBy string (e.g., "name desc" -> "FMFID:1 desc")
|
|
230
245
|
* @param orderByString - The orderBy string (field name with optional asc/desc)
|
|
231
|
-
* @param
|
|
246
|
+
* @param table - FMTable instance to get field ID from
|
|
232
247
|
* @returns Transformed orderBy string with FMFID
|
|
233
248
|
*/
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
249
|
+
// biome-ignore lint/suspicious/noExplicitAny: Accepts any FMTable configuration
|
|
250
|
+
export function transformOrderByField(orderByString: string, table: FMTable<any, any> | undefined): string {
|
|
251
|
+
if (!table) {
|
|
252
|
+
return orderByString;
|
|
253
|
+
}
|
|
254
|
+
const config = getBaseTableConfig(table);
|
|
255
|
+
if (!config?.fmfIds) {
|
|
239
256
|
return orderByString;
|
|
240
257
|
}
|
|
241
258
|
|
|
242
259
|
// Parse the orderBy string to extract field name and direction
|
|
243
|
-
const parts = orderByString.trim().split(
|
|
260
|
+
const parts = orderByString.trim().split(WHITESPACE_SPLIT_REGEX);
|
|
244
261
|
const fieldName = parts[0];
|
|
262
|
+
if (!fieldName) {
|
|
263
|
+
return orderByString;
|
|
264
|
+
}
|
|
245
265
|
const direction = parts[1]; // "asc" or "desc" or undefined
|
|
246
266
|
|
|
247
|
-
const fieldId =
|
|
267
|
+
const fieldId = getFieldId(table, fieldName);
|
|
248
268
|
return direction ? `${fieldId} ${direction}` : fieldId;
|
|
249
269
|
}
|