@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 +1 -1
- package/src/data-provider.ts +15 -15
package/package.json
CHANGED
package/src/data-provider.ts
CHANGED
|
@@ -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
|
}
|