@svadmin/hasura 0.8.0 → 0.9.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@svadmin/hasura",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Hasura GraphQL DataProvider for svadmin",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -1,7 +1,7 @@
1
1
  import type {
2
2
  DataProvider, GetListParams, GetListResult, GetOneParams, GetOneResult,
3
3
  CreateParams, CreateResult, UpdateParams, UpdateResult, DeleteParams, DeleteResult,
4
- GetManyParams, GetManyResult, CustomParams, CustomResult, Sort, Filter
4
+ GetManyParams, GetManyResult, CustomParams, CustomResult, Sort, Filter, BaseRecord
5
5
  } from '@svadmin/core';
6
6
 
7
7
  // Maps core filter operators to Hasura GraphQL query operators
@@ -38,7 +38,7 @@ export function createHasuraDataProvider(endpoint: string, defaultHeaders: Recor
38
38
  return {
39
39
  getApiUrl: () => endpoint,
40
40
 
41
- async getList<T>({ resource, pagination, sorters, filters, meta }: GetListParams): Promise<GetListResult<T>> {
41
+ async getList<T extends BaseRecord = BaseRecord>({ resource, pagination, sorters, filters, meta }: GetListParams): Promise<GetListResult<T>> {
42
42
  const { current = 1, pageSize = 10, mode } = pagination ?? {};
43
43
  const offset = mode === 'server' ? (current - 1) * pageSize : 0;
44
44
  const limit = mode === 'server' ? pageSize : undefined;
@@ -75,7 +75,7 @@ export function createHasuraDataProvider(endpoint: string, defaultHeaders: Recor
75
75
  `;
76
76
 
77
77
  const data = await executeGraphQL(endpoint, query, variables, defaultHeaders);
78
- const resourceData = data[resource] as T[] | undefined;
78
+ const resourceData = data[resource] as unknown as unknown as T[] | undefined;
79
79
  const aggregateData = data[`${resource}_aggregate`] as { aggregate?: { count?: number } } | undefined;
80
80
  return {
81
81
  data: resourceData || [],
@@ -83,7 +83,7 @@ export function createHasuraDataProvider(endpoint: string, defaultHeaders: Recor
83
83
  };
84
84
  },
85
85
 
86
- async getOne<T>({ resource, id, meta }: GetOneParams): Promise<GetOneResult<T>> {
86
+ async getOne<T extends BaseRecord = BaseRecord>({ resource, id, meta }: GetOneParams): Promise<GetOneResult<T>> {
87
87
  const fields = (meta?.fields as string[])?.join(' ') || 'id';
88
88
  const query = `
89
89
  query getOne($id: uuid!) {
@@ -93,10 +93,10 @@ export function createHasuraDataProvider(endpoint: string, defaultHeaders: Recor
93
93
  }
94
94
  `;
95
95
  const data = await executeGraphQL(endpoint, query, { id }, defaultHeaders);
96
- return { data: data[`${resource}_by_pk`] as T };
96
+ return { data: data[`${resource}_by_pk`] as unknown as unknown as T };
97
97
  },
98
98
 
99
- async create<T>({ resource, variables, meta }: CreateParams): Promise<CreateResult<T>> {
99
+ async create<T extends BaseRecord = BaseRecord>({ resource, variables, meta }: CreateParams): Promise<CreateResult<T>> {
100
100
  const fields = (meta?.fields as string[])?.join(' ') || 'id';
101
101
  const query = `
102
102
  mutation create($object: ${resource}_insert_input!) {
@@ -106,10 +106,10 @@ export function createHasuraDataProvider(endpoint: string, defaultHeaders: Recor
106
106
  }
107
107
  `;
108
108
  const data = await executeGraphQL(endpoint, query, { object: variables }, defaultHeaders);
109
- return { data: data[`insert_${resource}_one`] as T };
109
+ return { data: data[`insert_${resource}_one`] as unknown as unknown as T };
110
110
  },
111
111
 
112
- async update<T>({ resource, id, variables, meta }: UpdateParams): Promise<UpdateResult<T>> {
112
+ async update<T extends BaseRecord = BaseRecord>({ resource, id, variables, meta }: UpdateParams): Promise<UpdateResult<T>> {
113
113
  const fields = (meta?.fields as string[])?.join(' ') || 'id';
114
114
  const query = `
115
115
  mutation update($id: uuid!, $set: ${resource}_set_input!) {
@@ -119,10 +119,10 @@ export function createHasuraDataProvider(endpoint: string, defaultHeaders: Recor
119
119
  }
120
120
  `;
121
121
  const data = await executeGraphQL(endpoint, query, { id, set: variables }, defaultHeaders);
122
- return { data: data[`update_${resource}_by_pk`] as T };
122
+ return { data: data[`update_${resource}_by_pk`] as unknown as unknown as T };
123
123
  },
124
124
 
125
- async deleteOne<T>({ resource, id, meta }: DeleteParams): Promise<DeleteResult<T>> {
125
+ async deleteOne<T extends BaseRecord = BaseRecord>({ resource, id, meta }: DeleteParams): Promise<DeleteResult<T>> {
126
126
  const fields = (meta?.fields as string[])?.join(' ') || 'id';
127
127
  const query = `
128
128
  mutation deleteOne($id: uuid!) {
@@ -132,10 +132,10 @@ export function createHasuraDataProvider(endpoint: string, defaultHeaders: Recor
132
132
  }
133
133
  `;
134
134
  const data = await executeGraphQL(endpoint, query, { id }, defaultHeaders);
135
- return { data: data[`delete_${resource}_by_pk`] as T };
135
+ return { data: data[`delete_${resource}_by_pk`] as unknown as unknown as T };
136
136
  },
137
137
 
138
- async getMany<T>({ resource, ids, meta }: GetManyParams): Promise<GetManyResult<T>> {
138
+ async getMany<T extends BaseRecord = BaseRecord>({ resource, ids, meta }: GetManyParams): Promise<GetManyResult<T>> {
139
139
  const fields = (meta?.fields as string[])?.join(' ') || 'id';
140
140
  const query = `
141
141
  query getMany($ids: [uuid!]!) {
@@ -145,10 +145,10 @@ export function createHasuraDataProvider(endpoint: string, defaultHeaders: Recor
145
145
  }
146
146
  `;
147
147
  const data = await executeGraphQL(endpoint, query, { ids }, defaultHeaders);
148
- return { data: (data[resource] as T[]) || [] };
148
+ return { data: (data[resource] as unknown as unknown as T[]) || [] };
149
149
  },
150
150
 
151
- async custom<T>({ url, method, payload, headers }: CustomParams): Promise<CustomResult<T>> {
151
+ async custom<T = unknown>({ url, method, payload, headers }: CustomParams): Promise<CustomResult<T>> {
152
152
  // By default Hasura only understands GraphQL via POST, but arbitrary custom calls might be used for REST endpoints mapping.
153
153
  const response = await fetch(url, {
154
154
  method: method.toUpperCase(),
@@ -157,7 +157,7 @@ export function createHasuraDataProvider(endpoint: string, defaultHeaders: Recor
157
157
  });
158
158
  if (!response.ok) throw new Error(`Custom request failed: ${response.status}`);
159
159
  const data = await response.json();
160
- return { data: data as T };
160
+ return { data: data as unknown as unknown as T };
161
161
  },
162
162
  };
163
163
  }