@proofkit/fmodata 0.1.0-alpha.4 → 0.1.0-alpha.6
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 +357 -28
- package/dist/esm/client/base-table.d.ts +122 -5
- package/dist/esm/client/base-table.js +46 -5
- package/dist/esm/client/base-table.js.map +1 -1
- package/dist/esm/client/database.d.ts +20 -3
- package/dist/esm/client/database.js +62 -13
- package/dist/esm/client/database.js.map +1 -1
- package/dist/esm/client/delete-builder.js +24 -27
- package/dist/esm/client/delete-builder.js.map +1 -1
- package/dist/esm/client/entity-set.d.ts +9 -6
- package/dist/esm/client/entity-set.js +5 -1
- package/dist/esm/client/entity-set.js.map +1 -1
- package/dist/esm/client/filemaker-odata.d.ts +17 -4
- package/dist/esm/client/filemaker-odata.js +90 -27
- package/dist/esm/client/filemaker-odata.js.map +1 -1
- package/dist/esm/client/insert-builder.js +45 -34
- package/dist/esm/client/insert-builder.js.map +1 -1
- package/dist/esm/client/query-builder.d.ts +7 -2
- package/dist/esm/client/query-builder.js +273 -202
- package/dist/esm/client/query-builder.js.map +1 -1
- package/dist/esm/client/record-builder.d.ts +2 -2
- package/dist/esm/client/record-builder.js +50 -40
- package/dist/esm/client/record-builder.js.map +1 -1
- package/dist/esm/client/table-occurrence.d.ts +66 -2
- package/dist/esm/client/table-occurrence.js +36 -1
- package/dist/esm/client/table-occurrence.js.map +1 -1
- package/dist/esm/client/update-builder.js +39 -35
- package/dist/esm/client/update-builder.js.map +1 -1
- package/dist/esm/errors.d.ts +60 -0
- package/dist/esm/errors.js +122 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.d.ts +5 -2
- package/dist/esm/index.js +25 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/transform.d.ts +56 -0
- package/dist/esm/transform.js +107 -0
- package/dist/esm/transform.js.map +1 -0
- package/dist/esm/types.d.ts +21 -5
- package/dist/esm/validation.d.ts +6 -3
- package/dist/esm/validation.js +104 -33
- package/dist/esm/validation.js.map +1 -1
- package/package.json +10 -1
- package/src/client/base-table.ts +155 -8
- package/src/client/database.ts +116 -13
- package/src/client/delete-builder.ts +42 -43
- package/src/client/entity-set.ts +21 -11
- package/src/client/filemaker-odata.ts +132 -34
- package/src/client/insert-builder.ts +69 -37
- package/src/client/query-builder.ts +345 -233
- package/src/client/record-builder.ts +84 -59
- package/src/client/table-occurrence.ts +118 -4
- package/src/client/update-builder.ts +77 -49
- package/src/errors.ts +185 -0
- package/src/index.ts +30 -1
- package/src/transform.ts +236 -0
- package/src/types.ts +112 -34
- package/src/validation.ts +120 -36
|
@@ -8,6 +8,11 @@ import type {
|
|
|
8
8
|
import type { TableOccurrence } from "./table-occurrence";
|
|
9
9
|
import { validateSingleResponse } from "../validation";
|
|
10
10
|
import { type FFetchOptions } from "@fetchkit/ffetch";
|
|
11
|
+
import {
|
|
12
|
+
transformFieldNamesToIds,
|
|
13
|
+
transformTableName,
|
|
14
|
+
transformResponseFields,
|
|
15
|
+
} from "../transform";
|
|
11
16
|
|
|
12
17
|
export class InsertBuilder<
|
|
13
18
|
T extends Record<string, any>,
|
|
@@ -37,57 +42,84 @@ export class InsertBuilder<
|
|
|
37
42
|
async execute(
|
|
38
43
|
options?: RequestInit & FFetchOptions,
|
|
39
44
|
): Promise<Result<T & ODataRecordMetadata>> {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
45
|
+
// Transform table name to FMTID if using entity IDs
|
|
46
|
+
const tableId = this.occurrence
|
|
47
|
+
? transformTableName(this.occurrence)
|
|
48
|
+
: this.tableName;
|
|
49
|
+
const url = `/${this.databaseName}/${tableId}`;
|
|
50
|
+
|
|
51
|
+
// Transform field names to FMFIDs if using entity IDs
|
|
52
|
+
const transformedData = this.occurrence?.baseTable
|
|
53
|
+
? transformFieldNamesToIds(this.data, this.occurrence.baseTable)
|
|
54
|
+
: this.data;
|
|
55
|
+
|
|
56
|
+
// Make POST request with JSON body
|
|
57
|
+
const result = await this.context._makeRequest(url, {
|
|
58
|
+
method: "POST",
|
|
59
|
+
headers: {
|
|
60
|
+
"Content-Type": "application/json",
|
|
61
|
+
},
|
|
62
|
+
body: JSON.stringify(transformedData),
|
|
63
|
+
...options,
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
if (result.error) {
|
|
67
|
+
return { data: undefined, error: result.error };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
let response = result.data;
|
|
71
|
+
|
|
72
|
+
// Transform response field IDs back to names if using entity IDs
|
|
73
|
+
if (this.occurrence?.baseTable) {
|
|
74
|
+
response = transformResponseFields(
|
|
58
75
|
response,
|
|
59
|
-
|
|
60
|
-
undefined, // No
|
|
61
|
-
undefined, // No expand configs
|
|
62
|
-
"exact", // Expect exactly one record
|
|
76
|
+
this.occurrence.baseTable,
|
|
77
|
+
undefined, // No expand configs for insert
|
|
63
78
|
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Get schema from occurrence if available
|
|
82
|
+
const schema = this.occurrence?.baseTable?.schema;
|
|
64
83
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
84
|
+
// Validate the response (FileMaker returns the created record)
|
|
85
|
+
const validation = await validateSingleResponse<T>(
|
|
86
|
+
response,
|
|
87
|
+
schema,
|
|
88
|
+
undefined, // No selected fields for insert
|
|
89
|
+
undefined, // No expand configs
|
|
90
|
+
"exact", // Expect exactly one record
|
|
91
|
+
);
|
|
68
92
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
data: undefined,
|
|
73
|
-
error: new Error("Insert operation returned null response"),
|
|
74
|
-
};
|
|
75
|
-
}
|
|
93
|
+
if (!validation.valid) {
|
|
94
|
+
return { data: undefined, error: validation.error };
|
|
95
|
+
}
|
|
76
96
|
|
|
77
|
-
|
|
78
|
-
|
|
97
|
+
// Handle null response (shouldn't happen for insert, but handle it)
|
|
98
|
+
if (validation.data === null) {
|
|
79
99
|
return {
|
|
80
100
|
data: undefined,
|
|
81
|
-
error:
|
|
101
|
+
error: new Error("Insert operation returned null response"),
|
|
82
102
|
};
|
|
83
103
|
}
|
|
104
|
+
|
|
105
|
+
return { data: validation.data, error: undefined };
|
|
84
106
|
}
|
|
85
107
|
|
|
86
108
|
getRequestConfig(): { method: string; url: string; body?: any } {
|
|
109
|
+
// Transform table name to FMTID if using entity IDs
|
|
110
|
+
const tableId = this.occurrence
|
|
111
|
+
? transformTableName(this.occurrence)
|
|
112
|
+
: this.tableName;
|
|
113
|
+
|
|
114
|
+
// Transform field names to FMFIDs if using entity IDs
|
|
115
|
+
const transformedData = this.occurrence?.baseTable
|
|
116
|
+
? transformFieldNamesToIds(this.data, this.occurrence.baseTable)
|
|
117
|
+
: this.data;
|
|
118
|
+
|
|
87
119
|
return {
|
|
88
120
|
method: "POST",
|
|
89
|
-
url: `/${this.databaseName}/${
|
|
90
|
-
body: JSON.stringify(
|
|
121
|
+
url: `/${this.databaseName}/${tableId}`,
|
|
122
|
+
body: JSON.stringify(transformedData),
|
|
91
123
|
};
|
|
92
124
|
}
|
|
93
125
|
}
|