@svadmin/firebase 0.6.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/firebase",
3
- "version": "0.6.0",
3
+ "version": "0.9.0",
4
4
  "description": "Firebase DataProvider for svadmin",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -2,7 +2,7 @@ import type {
2
2
  DataProvider, GetListParams, GetListResult, GetOneParams, GetOneResult,
3
3
  CreateParams, CreateResult, UpdateParams, UpdateResult, DeleteParams, DeleteResult,
4
4
  GetManyParams, GetManyResult, CustomParams, CustomResult, Filter
5
- } from '@svadmin/core';
5
+ , BaseRecord } from '@svadmin/core';
6
6
 
7
7
  interface FirestoreFieldValue {
8
8
  stringValue?: string;
@@ -66,57 +66,57 @@ export function createFirebaseDataProvider(projectId: string, apiKey: string): D
66
66
  return {
67
67
  getApiUrl: () => `https://firestore.googleapis.com/v1/projects/${projectId}`,
68
68
 
69
- async getList<T>({ resource, pagination }: GetListParams): Promise<GetListResult<T>> {
69
+ async getList<T extends BaseRecord = BaseRecord>({ resource, pagination }: GetListParams): Promise<GetListResult<T>> {
70
70
  const { pageSize = 20 } = pagination ?? {};
71
71
  const url = `${buildFirestoreUrl(projectId, resource)}?pageSize=${pageSize}&key=${apiKey}`;
72
72
  const res = await fetch(url, { headers: authHeaders });
73
73
  if (!res.ok) throw new Error(`Firebase error: ${res.status}`);
74
74
  const data = await res.json();
75
75
  const docs = (data.documents ?? []).map(parseFirestoreDoc);
76
- return { data: docs as T[], total: docs.length };
76
+ return { data: docs as unknown as T[], total: docs.length };
77
77
  },
78
78
 
79
- async getOne<T>({ resource, id }: GetOneParams): Promise<GetOneResult<T>> {
79
+ async getOne<T extends BaseRecord = BaseRecord>({ resource, id }: GetOneParams): Promise<GetOneResult<T>> {
80
80
  const res = await fetch(`${buildFirestoreUrl(projectId, resource, id)}?key=${apiKey}`, { headers: authHeaders });
81
81
  if (!res.ok) throw new Error(`Firebase error: ${res.status}`);
82
- return { data: parseFirestoreDoc(await res.json()) as T };
82
+ return { data: parseFirestoreDoc(await res.json()) as unknown as T };
83
83
  },
84
84
 
85
- async create<T>({ resource, variables }: CreateParams): Promise<CreateResult<T>> {
85
+ async create<T extends BaseRecord = BaseRecord>({ resource, variables }: CreateParams): Promise<CreateResult<T>> {
86
86
  const res = await fetch(`${buildFirestoreUrl(projectId, resource)}?key=${apiKey}`, {
87
87
  method: 'POST', headers: authHeaders, body: JSON.stringify({ fields: toFirestoreFields(variables as Record<string, unknown>) }),
88
88
  });
89
89
  if (!res.ok) throw new Error(`Firebase error: ${res.status}`);
90
- return { data: parseFirestoreDoc(await res.json()) as T };
90
+ return { data: parseFirestoreDoc(await res.json()) as unknown as T };
91
91
  },
92
92
 
93
- async update<T>({ resource, id, variables }: UpdateParams): Promise<UpdateResult<T>> {
93
+ async update<T extends BaseRecord = BaseRecord>({ resource, id, variables }: UpdateParams): Promise<UpdateResult<T>> {
94
94
  const res = await fetch(`${buildFirestoreUrl(projectId, resource, id)}?key=${apiKey}`, {
95
95
  method: 'PATCH', headers: authHeaders, body: JSON.stringify({ fields: toFirestoreFields(variables as Record<string, unknown>) }),
96
96
  });
97
97
  if (!res.ok) throw new Error(`Firebase error: ${res.status}`);
98
- return { data: parseFirestoreDoc(await res.json()) as T };
98
+ return { data: parseFirestoreDoc(await res.json()) as unknown as T };
99
99
  },
100
100
 
101
- async deleteOne<T>({ resource, id }: DeleteParams): Promise<DeleteResult<T>> {
101
+ async deleteOne<T extends BaseRecord = BaseRecord>({ resource, id }: DeleteParams): Promise<DeleteResult<T>> {
102
102
  const res = await fetch(`${buildFirestoreUrl(projectId, resource, id)}?key=${apiKey}`, { method: 'DELETE', headers: authHeaders });
103
103
  if (!res.ok) throw new Error(`Firebase error: ${res.status}`);
104
- return { data: { id } as T };
104
+ return { data: { id } as unknown as T };
105
105
  },
106
106
 
107
- async getMany<T>({ resource, ids }: GetManyParams): Promise<GetManyResult<T>> {
107
+ async getMany<T extends BaseRecord = BaseRecord>({ resource, ids }: GetManyParams): Promise<GetManyResult<T>> {
108
108
  const results = await Promise.all(ids.map(async (id: string | number) => {
109
109
  const res = await fetch(`${buildFirestoreUrl(projectId, resource, id)}?key=${apiKey}`, { headers: authHeaders });
110
110
  if (!res.ok) throw new Error(`Firebase error: ${res.status}`);
111
- return parseFirestoreDoc(await res.json()) as T;
111
+ return parseFirestoreDoc(await res.json()) as unknown as T;
112
112
  }));
113
113
  return { data: results };
114
114
  },
115
115
 
116
- async custom<T>({ url, method, payload, headers: h }: CustomParams): Promise<CustomResult<T>> {
116
+ async custom<T = unknown>({ url, method, payload, headers: h }: CustomParams): Promise<CustomResult<T>> {
117
117
  const res = await fetch(url, { method: method.toUpperCase(), headers: { ...authHeaders, ...h }, body: payload ? JSON.stringify(payload) : undefined });
118
118
  if (!res.ok) throw new Error(`Custom request failed: ${res.status}`);
119
- return { data: (await res.json()) as T };
119
+ return { data: (await res.json()) as unknown as T };
120
120
  },
121
121
  };
122
122
  }