@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.
Files changed (163) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +651 -449
  3. package/dist/esm/client/batch-builder.d.ts +10 -9
  4. package/dist/esm/client/batch-builder.js +119 -56
  5. package/dist/esm/client/batch-builder.js.map +1 -1
  6. package/dist/esm/client/batch-request.js +16 -21
  7. package/dist/esm/client/batch-request.js.map +1 -1
  8. package/dist/esm/client/builders/default-select.d.ts +10 -0
  9. package/dist/esm/client/builders/default-select.js +41 -0
  10. package/dist/esm/client/builders/default-select.js.map +1 -0
  11. package/dist/esm/client/builders/expand-builder.d.ts +45 -0
  12. package/dist/esm/client/builders/expand-builder.js +185 -0
  13. package/dist/esm/client/builders/expand-builder.js.map +1 -0
  14. package/dist/esm/client/builders/index.d.ts +9 -0
  15. package/dist/esm/client/builders/query-string-builder.d.ts +18 -0
  16. package/dist/esm/client/builders/query-string-builder.js +21 -0
  17. package/dist/esm/client/builders/query-string-builder.js.map +1 -0
  18. package/dist/esm/client/builders/response-processor.d.ts +43 -0
  19. package/dist/esm/client/builders/response-processor.js +175 -0
  20. package/dist/esm/client/builders/response-processor.js.map +1 -0
  21. package/dist/esm/client/builders/select-mixin.d.ts +25 -0
  22. package/dist/esm/client/builders/select-mixin.js +28 -0
  23. package/dist/esm/client/builders/select-mixin.js.map +1 -0
  24. package/dist/esm/client/builders/select-utils.d.ts +18 -0
  25. package/dist/esm/client/builders/select-utils.js +30 -0
  26. package/dist/esm/client/builders/select-utils.js.map +1 -0
  27. package/dist/esm/client/builders/shared-types.d.ts +40 -0
  28. package/dist/esm/client/builders/table-utils.d.ts +35 -0
  29. package/dist/esm/client/builders/table-utils.js +44 -0
  30. package/dist/esm/client/builders/table-utils.js.map +1 -0
  31. package/dist/esm/client/database.d.ts +34 -22
  32. package/dist/esm/client/database.js +48 -84
  33. package/dist/esm/client/database.js.map +1 -1
  34. package/dist/esm/client/delete-builder.d.ts +25 -30
  35. package/dist/esm/client/delete-builder.js +45 -30
  36. package/dist/esm/client/delete-builder.js.map +1 -1
  37. package/dist/esm/client/entity-set.d.ts +35 -43
  38. package/dist/esm/client/entity-set.js +110 -52
  39. package/dist/esm/client/entity-set.js.map +1 -1
  40. package/dist/esm/client/error-parser.d.ts +12 -0
  41. package/dist/esm/client/error-parser.js +25 -0
  42. package/dist/esm/client/error-parser.js.map +1 -0
  43. package/dist/esm/client/filemaker-odata.d.ts +26 -7
  44. package/dist/esm/client/filemaker-odata.js +65 -42
  45. package/dist/esm/client/filemaker-odata.js.map +1 -1
  46. package/dist/esm/client/insert-builder.d.ts +19 -24
  47. package/dist/esm/client/insert-builder.js +94 -58
  48. package/dist/esm/client/insert-builder.js.map +1 -1
  49. package/dist/esm/client/query/expand-builder.d.ts +35 -0
  50. package/dist/esm/client/query/index.d.ts +4 -0
  51. package/dist/esm/client/query/query-builder.d.ts +132 -0
  52. package/dist/esm/client/query/query-builder.js +456 -0
  53. package/dist/esm/client/query/query-builder.js.map +1 -0
  54. package/dist/esm/client/query/response-processor.d.ts +25 -0
  55. package/dist/esm/client/query/types.d.ts +77 -0
  56. package/dist/esm/client/query/url-builder.d.ts +71 -0
  57. package/dist/esm/client/query/url-builder.js +100 -0
  58. package/dist/esm/client/query/url-builder.js.map +1 -0
  59. package/dist/esm/client/query-builder.d.ts +2 -115
  60. package/dist/esm/client/record-builder.d.ts +108 -36
  61. package/dist/esm/client/record-builder.js +284 -119
  62. package/dist/esm/client/record-builder.js.map +1 -1
  63. package/dist/esm/client/response-processor.d.ts +4 -9
  64. package/dist/esm/client/sanitize-json.d.ts +35 -0
  65. package/dist/esm/client/sanitize-json.js +27 -0
  66. package/dist/esm/client/sanitize-json.js.map +1 -0
  67. package/dist/esm/client/schema-manager.d.ts +5 -5
  68. package/dist/esm/client/schema-manager.js +45 -31
  69. package/dist/esm/client/schema-manager.js.map +1 -1
  70. package/dist/esm/client/update-builder.d.ts +34 -40
  71. package/dist/esm/client/update-builder.js +99 -58
  72. package/dist/esm/client/update-builder.js.map +1 -1
  73. package/dist/esm/client/webhook-builder.d.ts +126 -0
  74. package/dist/esm/client/webhook-builder.js +189 -0
  75. package/dist/esm/client/webhook-builder.js.map +1 -0
  76. package/dist/esm/errors.d.ts +19 -2
  77. package/dist/esm/errors.js +39 -4
  78. package/dist/esm/errors.js.map +1 -1
  79. package/dist/esm/index.d.ts +10 -8
  80. package/dist/esm/index.js +40 -10
  81. package/dist/esm/index.js.map +1 -1
  82. package/dist/esm/logger.d.ts +47 -0
  83. package/dist/esm/logger.js +69 -0
  84. package/dist/esm/logger.js.map +1 -0
  85. package/dist/esm/logger.test.d.ts +1 -0
  86. package/dist/esm/orm/column.d.ts +62 -0
  87. package/dist/esm/orm/column.js +63 -0
  88. package/dist/esm/orm/column.js.map +1 -0
  89. package/dist/esm/orm/field-builders.d.ts +164 -0
  90. package/dist/esm/orm/field-builders.js +158 -0
  91. package/dist/esm/orm/field-builders.js.map +1 -0
  92. package/dist/esm/orm/index.d.ts +5 -0
  93. package/dist/esm/orm/operators.d.ts +173 -0
  94. package/dist/esm/orm/operators.js +260 -0
  95. package/dist/esm/orm/operators.js.map +1 -0
  96. package/dist/esm/orm/table.d.ts +355 -0
  97. package/dist/esm/orm/table.js +202 -0
  98. package/dist/esm/orm/table.js.map +1 -0
  99. package/dist/esm/transform.d.ts +20 -21
  100. package/dist/esm/transform.js +44 -45
  101. package/dist/esm/transform.js.map +1 -1
  102. package/dist/esm/types.d.ts +96 -30
  103. package/dist/esm/types.js +7 -0
  104. package/dist/esm/types.js.map +1 -0
  105. package/dist/esm/validation.d.ts +22 -12
  106. package/dist/esm/validation.js +132 -85
  107. package/dist/esm/validation.js.map +1 -1
  108. package/package.json +28 -20
  109. package/src/client/batch-builder.ts +153 -89
  110. package/src/client/batch-request.ts +25 -41
  111. package/src/client/builders/default-select.ts +75 -0
  112. package/src/client/builders/expand-builder.ts +246 -0
  113. package/src/client/builders/index.ts +11 -0
  114. package/src/client/builders/query-string-builder.ts +46 -0
  115. package/src/client/builders/response-processor.ts +279 -0
  116. package/src/client/builders/select-mixin.ts +65 -0
  117. package/src/client/builders/select-utils.ts +59 -0
  118. package/src/client/builders/shared-types.ts +45 -0
  119. package/src/client/builders/table-utils.ts +83 -0
  120. package/src/client/database.ts +89 -183
  121. package/src/client/delete-builder.ts +74 -84
  122. package/src/client/entity-set.ts +266 -293
  123. package/src/client/error-parser.ts +41 -0
  124. package/src/client/filemaker-odata.ts +98 -66
  125. package/src/client/insert-builder.ts +157 -118
  126. package/src/client/query/expand-builder.ts +160 -0
  127. package/src/client/query/index.ts +14 -0
  128. package/src/client/query/query-builder.ts +729 -0
  129. package/src/client/query/response-processor.ts +226 -0
  130. package/src/client/query/types.ts +126 -0
  131. package/src/client/query/url-builder.ts +151 -0
  132. package/src/client/query-builder.ts +10 -1455
  133. package/src/client/record-builder.ts +575 -240
  134. package/src/client/response-processor.ts +15 -42
  135. package/src/client/sanitize-json.ts +64 -0
  136. package/src/client/schema-manager.ts +61 -76
  137. package/src/client/update-builder.ts +161 -143
  138. package/src/client/webhook-builder.ts +265 -0
  139. package/src/errors.ts +49 -16
  140. package/src/index.ts +99 -54
  141. package/src/logger.test.ts +34 -0
  142. package/src/logger.ts +116 -0
  143. package/src/orm/column.ts +106 -0
  144. package/src/orm/field-builders.ts +250 -0
  145. package/src/orm/index.ts +61 -0
  146. package/src/orm/operators.ts +473 -0
  147. package/src/orm/table.ts +741 -0
  148. package/src/transform.ts +90 -70
  149. package/src/types.ts +154 -113
  150. package/src/validation.ts +200 -115
  151. package/dist/esm/client/base-table.d.ts +0 -125
  152. package/dist/esm/client/base-table.js +0 -57
  153. package/dist/esm/client/base-table.js.map +0 -1
  154. package/dist/esm/client/query-builder.js +0 -896
  155. package/dist/esm/client/query-builder.js.map +0 -1
  156. package/dist/esm/client/table-occurrence.d.ts +0 -72
  157. package/dist/esm/client/table-occurrence.js +0 -74
  158. package/dist/esm/client/table-occurrence.js.map +0 -1
  159. package/dist/esm/filter-types.d.ts +0 -76
  160. package/src/client/base-table.ts +0 -166
  161. package/src/client/query-builder.ts.bak +0 -1457
  162. package/src/client/table-occurrence.ts +0 -175
  163. package/src/filter-types.ts +0 -97
package/src/transform.ts CHANGED
@@ -1,24 +1,30 @@
1
- import type { BaseTable } from "./client/base-table";
2
- import type { TableOccurrence } from "./client/table-occurrence";
3
- import type { StandardSchemaV1 } from "@standard-schema/spec";
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 baseTable - BaseTable instance to get field IDs from
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
- baseTable: BaseTable<any, any, any, any>,
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
- if (!baseTable.isUsingFieldIds()) {
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 = baseTable.getFieldId(fieldName as any);
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 baseTable - BaseTable instance to get field names from
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
- baseTable: BaseTable<any, any, any, any>,
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
- if (!baseTable.isUsingFieldIds()) {
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 = baseTable.getFieldName(key);
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 baseTable - BaseTable instance to get field ID from
69
+ * @param table - FMTable instance to get field ID from
59
70
  * @returns The FMFID or field name
60
71
  */
61
- export function transformFieldName(
62
- fieldName: string,
63
- baseTable: BaseTable<any, any, any, any>,
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 occurrence name to FMTID or returns the name if not using IDs
70
- * @param occurrence - TableOccurrence instance to get table ID from
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
- export function transformTableName(
74
- occurrence: TableOccurrence<any, any, any, any>,
75
- ): string {
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 an occurrence
81
- * @param occurrence - TableOccurrence instance
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
- export function getTableIdentifiers(
85
- occurrence: TableOccurrence<any, any, any, any>,
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: occurrence.getTableName(),
89
- id: occurrence.isUsingTableId() ? occurrence.getTableId() : undefined,
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 baseTable - BaseTable instance for the main table
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
- baseTable: BaseTable<any, any, any, any>,
112
+ // biome-ignore lint/suspicious/noExplicitAny: Accepts any FMTable configuration
113
+ table: FMTable<any, any>,
105
114
  expandConfigs?: Array<{
106
115
  relation: string;
107
- occurrence?: TableOccurrence<any, any, any, any>;
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
- if (!baseTable.isUsingFieldIds()) {
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
- value: data.value.map((record: any) =>
124
- transformSingleRecord(record, baseTable, expandConfigs),
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, baseTable, expandConfigs);
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
- baseTable: BaseTable<any, any, any, any>,
155
+ // biome-ignore lint/suspicious/noExplicitAny: Accepts any FMTable configuration
156
+ table: FMTable<any, any>,
146
157
  expandConfigs?: Array<{
147
158
  relation: string;
148
- occurrence?: TableOccurrence<any, any, any, any>;
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 && expandConfig.occurrence) {
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
- expandConfig.occurrence!.baseTable,
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
- transformed[relationKey] = transformSingleRecord(
193
- value,
194
- expandConfig.occurrence.baseTable,
195
- undefined,
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 = baseTable.getFieldName(key);
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 baseTable - BaseTable instance to get field IDs from
230
+ * @param table - FMTable instance to get field IDs from
215
231
  * @returns Array of FMFIDs or field names
216
232
  */
217
- export function transformFieldNamesArray(
218
- fieldNames: string[],
219
- baseTable: BaseTable<any, any, any, any>,
220
- ): string[] {
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) => baseTable.getFieldId(fieldName as any));
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 baseTable - BaseTable instance to get field ID from
246
+ * @param table - FMTable instance to get field ID from
232
247
  * @returns Transformed orderBy string with FMFID
233
248
  */
234
- export function transformOrderByField(
235
- orderByString: string,
236
- baseTable: BaseTable<any, any, any, any>,
237
- ): string {
238
- if (!baseTable.isUsingFieldIds()) {
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(/\s+/);
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 = baseTable.getFieldId(fieldName as any);
267
+ const fieldId = getFieldId(table, fieldName);
248
268
  return direction ? `${fieldId} ${direction}` : fieldId;
249
269
  }