Skip to content

Commit 476be6e

Browse files
authored
fix: Add defaults to generics to fallback to old behaviour (#220)
1 parent dbbf15c commit 476be6e

File tree

2 files changed

+34
-19
lines changed

2 files changed

+34
-19
lines changed

source/operation.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
* @namespace operation
55
*/
66

7-
export interface CreateOperation<TEntityType> {
7+
import type { DefaultEntityTypeMap } from "./types.js";
8+
9+
export interface CreateOperation<TEntityType = keyof DefaultEntityTypeMap> {
810
action: "create";
911
entity_type: TEntityType;
1012
entity_data: any;
@@ -15,15 +17,17 @@ export interface QueryOperation {
1517
expression: string;
1618
}
1719

18-
export interface SearchOperationOptions<TEntityType> {
20+
export interface SearchOperationOptions<
21+
TEntityType = keyof DefaultEntityTypeMap,
22+
> {
1923
expression?: string;
2024
entityType?: TEntityType;
2125
terms?: string[];
2226
contextId?: string;
2327
objectTypeIds?: string[];
2428
}
2529

26-
export interface SearchOperation<TEntityType> {
30+
export interface SearchOperation<TEntityType = keyof DefaultEntityTypeMap> {
2731
action: "search";
2832
expression?: string;
2933
entity_type?: TEntityType;
@@ -32,14 +36,14 @@ export interface SearchOperation<TEntityType> {
3236
object_type_ids?: string[];
3337
}
3438

35-
export interface UpdateOperation<TEntityType> {
39+
export interface UpdateOperation<TEntityType = keyof DefaultEntityTypeMap> {
3640
action: "update";
3741
entity_type: TEntityType;
3842
entity_key: string[] | string;
3943
entity_data: any;
4044
}
4145

42-
export interface DeleteOperation<TEntityType> {
46+
export interface DeleteOperation<TEntityType = keyof DefaultEntityTypeMap> {
4347
action: "delete";
4448
entity_type: TEntityType;
4549
entity_key: string[] | string;
@@ -61,7 +65,7 @@ export interface GetUploadMetadataOperation {
6165
component_id: string;
6266
}
6367

64-
export type Operation<TEntityType> =
68+
export type Operation<TEntityType = keyof DefaultEntityTypeMap> =
6569
| CreateOperation<TEntityType>
6670
| QueryOperation
6771
| SearchOperation<TEntityType>
@@ -81,7 +85,7 @@ export type Operation<TEntityType> =
8185
* @param {Object} data Entity data to use for creation
8286
* @return {Object} API operation
8387
*/
84-
export function create<TEntityType>(
88+
export function create<TEntityType = keyof DefaultEntityTypeMap>(
8589
type: TEntityType,
8690
data: any,
8791
): CreateOperation<TEntityType> {
@@ -112,7 +116,7 @@ export function query(expression: string): QueryOperation {
112116
* @param {string} expression API query expression
113117
* @return {Object} API operation
114118
*/
115-
export function search<TEntityType>({
119+
export function search<TEntityType = keyof DefaultEntityTypeMap>({
116120
expression,
117121
entityType,
118122
terms,
@@ -139,7 +143,7 @@ export function search<TEntityType>({
139143
* @param {Object} data values to update
140144
* @return {Object} API operation
141145
*/
142-
export function update<TEntityType>(
146+
export function update<TEntityType = keyof DefaultEntityTypeMap>(
143147
type: TEntityType,
144148
keys: string[] | string,
145149
data: any,
@@ -161,7 +165,7 @@ export function update<TEntityType>(
161165
* @param {Array} keys Identifying keys, typically [<entity id>]
162166
* @return {Object} API operation
163167
*/
164-
function deleteOperation<TEntityType>(
168+
function deleteOperation<TEntityType = keyof DefaultEntityTypeMap>(
165169
type: TEntityType,
166170
keys: string[] | string,
167171
): DeleteOperation<TEntityType> {

source/types.ts

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,33 +30,41 @@ interface ResponseMetadata {
3030
offset: number | null;
3131
};
3232
}
33-
export interface SearchOptions<TEntityType> {
33+
export interface SearchOptions<TEntityType = keyof DefaultEntityTypeMap> {
3434
expression: string;
3535
entityType: TEntityType;
3636
terms?: string[];
3737
contextId?: string;
3838
objectTypeIds?: string[];
3939
}
4040

41-
export interface QueryResponse<TEntityData> {
41+
export interface QueryResponse<
42+
TEntityData = DefaultEntityTypeMap[keyof DefaultEntityTypeMap],
43+
> {
4244
data: TEntityData[];
4345
action: "query";
4446
metadata: ResponseMetadata;
4547
}
4648

47-
export interface CreateResponse<TEntityData> {
49+
export interface CreateResponse<
50+
TEntityData = DefaultEntityTypeMap[keyof DefaultEntityTypeMap],
51+
> {
4852
data: TEntityData;
4953
action: "create";
5054
}
51-
export interface UpdateResponse<TEntityData> {
55+
export interface UpdateResponse<
56+
TEntityData = DefaultEntityTypeMap[keyof DefaultEntityTypeMap],
57+
> {
5258
data: TEntityData;
5359
action: "update";
5460
}
5561
export interface DeleteResponse {
5662
data: true;
5763
action: "delete";
5864
}
59-
export interface SearchResponse<TEntityData> {
65+
export interface SearchResponse<
66+
TEntityData = DefaultEntityTypeMap[keyof DefaultEntityTypeMap],
67+
> {
6068
data: TEntityData[];
6169
action: "search";
6270
metadata: ResponseMetadata;
@@ -65,7 +73,8 @@ export interface ResetRemoteResponse {
6573
action: "reset_remote";
6674
data: Data;
6775
}
68-
export type QuerySchemasResponse<TEntityTypeMap> = Schema<TEntityTypeMap>[];
76+
export type QuerySchemasResponse<TEntityTypeMap = DefaultEntityTypeMap> =
77+
Schema<TEntityTypeMap>[];
6978

7079
export type QueryServerInformationResponse = ServerInformation;
7180
export interface ServerInformation {
@@ -146,7 +155,7 @@ export interface PermissionsResponse {
146155
}
147156

148157
export type ActionResponse<
149-
TEntityTypeMap,
158+
TEntityTypeMap = DefaultEntityTypeMap,
150159
TEntityType extends keyof TEntityTypeMap = keyof TEntityTypeMap,
151160
TEntityData = TEntityTypeMap[TEntityType],
152161
> =
@@ -201,15 +210,17 @@ export type TypedSchemaProperty =
201210
export type RefSchemaProperty = {
202211
["$ref"]: string;
203212
};
204-
export type SchemaProperties<TEntityData> = {
213+
export type SchemaProperties<
214+
TEntityData = DefaultEntityTypeMap[keyof DefaultEntityTypeMap],
215+
> = {
205216
[key in keyof TEntityData]: TypedSchemaProperty | RefSchemaProperty;
206217
};
207218
export type SchemaMixin = {
208219
$ref: string;
209220
};
210221
export type SchemaMetadata = { entity_event: boolean };
211222
export interface Schema<
212-
TEntityTypeMap,
223+
TEntityTypeMap = DefaultEntityTypeMap,
213224
TEntityType extends keyof TEntityTypeMap = keyof TEntityTypeMap,
214225
> {
215226
properties: SchemaProperties<TEntityTypeMap[TEntityType]>;

0 commit comments

Comments
 (0)