@goatlab/fluent-firebase 0.7.23 → 0.7.25
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/dist/Firebase.d.ts +9 -0
- package/dist/Firebase.js +11 -0
- package/dist/Firebase.js.map +1 -0
- package/dist/FirebaseConnector.d.ts +66 -0
- package/dist/FirebaseConnector.js +500 -0
- package/dist/FirebaseConnector.js.map +1 -0
- package/dist/FirebaseInit.d.ts +10 -0
- package/dist/FirebaseInit.js +41 -0
- package/dist/FirebaseInit.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +12 -7
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as admin from 'firebase-admin';
|
|
2
|
+
import { getAuth as firebaseGetAuth } from 'firebase-admin/auth';
|
|
3
|
+
export declare type FirebaseUser = admin.auth.DecodedIdToken;
|
|
4
|
+
declare class FirebaseClass {
|
|
5
|
+
verifyIdToken: (token: string) => Promise<import("firebase-admin/auth").DecodedIdToken>;
|
|
6
|
+
getAuth: typeof firebaseGetAuth;
|
|
7
|
+
}
|
|
8
|
+
export declare const Firebase: FirebaseClass;
|
|
9
|
+
export {};
|
package/dist/Firebase.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Firebase = void 0;
|
|
4
|
+
const admin = require("firebase-admin");
|
|
5
|
+
const auth_1 = require("firebase-admin/auth");
|
|
6
|
+
class FirebaseClass {
|
|
7
|
+
verifyIdToken = (token) => admin.auth().verifyIdToken(token);
|
|
8
|
+
getAuth = auth_1.getAuth;
|
|
9
|
+
}
|
|
10
|
+
exports.Firebase = new FirebaseClass();
|
|
11
|
+
//# sourceMappingURL=Firebase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Firebase.js","sourceRoot":"","sources":["../src/Firebase.ts"],"names":[],"mappings":";;;AAAA,wCAAuC;AACvC,8CAAgE;AAGhE,MAAM,aAAa;IACjB,aAAa,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAEpE,OAAO,GAAG,cAAe,CAAA;CAC1B;AAEY,QAAA,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAA"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as admin from 'firebase-admin';
|
|
2
|
+
import { AnyObject, FluentQuery, LoadedResult, QueryOutput } from '@goatlab/fluent';
|
|
3
|
+
import { BaseConnector, FluentConnectorInterface } from '@goatlab/fluent';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export interface FirebaseConnectorParams<Input, Output> {
|
|
6
|
+
entity: any;
|
|
7
|
+
inputSchema: z.ZodType<Input>;
|
|
8
|
+
outputSchema?: z.ZodType<Output>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
*
|
|
12
|
+
*/
|
|
13
|
+
export declare class FirebaseConnector<ModelDTO extends admin.firestore.DocumentData = AnyObject, InputDTO = ModelDTO, OutputDTO = InputDTO> extends BaseConnector<ModelDTO, InputDTO, OutputDTO> implements FluentConnectorInterface<ModelDTO, InputDTO, OutputDTO> {
|
|
14
|
+
private readonly inputSchema;
|
|
15
|
+
private readonly outputSchema;
|
|
16
|
+
private collection;
|
|
17
|
+
private readonly entity;
|
|
18
|
+
constructor({ entity, inputSchema, outputSchema }: FirebaseConnectorParams<InputDTO, OutputDTO>);
|
|
19
|
+
initDB(): number;
|
|
20
|
+
/**
|
|
21
|
+
* Insert the data object into the database.
|
|
22
|
+
* @param data
|
|
23
|
+
*/
|
|
24
|
+
insert(data: InputDTO): Promise<OutputDTO>;
|
|
25
|
+
insertMany(data: InputDTO[]): Promise<OutputDTO[]>;
|
|
26
|
+
findMany<T extends FluentQuery<ModelDTO>>(query?: T): Promise<QueryOutput<T, ModelDTO>[]>;
|
|
27
|
+
/**
|
|
28
|
+
* PATCH operation
|
|
29
|
+
* @param data
|
|
30
|
+
*/
|
|
31
|
+
updateById(id: string, data: InputDTO): Promise<OutputDTO>;
|
|
32
|
+
/**
|
|
33
|
+
*
|
|
34
|
+
* PUT operation. All fields not included in the data
|
|
35
|
+
* param will be set to null
|
|
36
|
+
*
|
|
37
|
+
* @param id
|
|
38
|
+
* @param data
|
|
39
|
+
*/
|
|
40
|
+
replaceById(id: string, data: InputDTO): Promise<OutputDTO>;
|
|
41
|
+
deleteById(id: string): Promise<string>;
|
|
42
|
+
clear(): Promise<boolean>;
|
|
43
|
+
loadFirst(query?: FluentQuery<ModelDTO>): LoadedResult<this>;
|
|
44
|
+
loadById(id: string): LoadedResult<this>;
|
|
45
|
+
/**
|
|
46
|
+
*
|
|
47
|
+
* Returns the firebase-admin collection, you can use it
|
|
48
|
+
* for more complex queries that require the base library
|
|
49
|
+
*
|
|
50
|
+
* @param query
|
|
51
|
+
*/
|
|
52
|
+
raw(): admin.firestore.CollectionReference<ModelDTO>;
|
|
53
|
+
rawFirebase(): admin.firestore.Firestore;
|
|
54
|
+
private deleteQueryBatch;
|
|
55
|
+
/**
|
|
56
|
+
* Creates a Clone of the current instance of the class
|
|
57
|
+
* @returns
|
|
58
|
+
*/
|
|
59
|
+
protected clone(): any;
|
|
60
|
+
protected loadRelatedData(data: any[], loadedKeys: AnyObject): Promise<admin.firestore.DocumentData[]>;
|
|
61
|
+
/**
|
|
62
|
+
*
|
|
63
|
+
*/
|
|
64
|
+
private getGeneratedQueries;
|
|
65
|
+
private getFirebaseWhereQuery;
|
|
66
|
+
}
|
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FirebaseConnector = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const admin = require("firebase-admin");
|
|
6
|
+
const fluent_1 = require("@goatlab/fluent");
|
|
7
|
+
const fluent_2 = require("@goatlab/fluent");
|
|
8
|
+
const js_utils_1 = require("@goatlab/js-utils");
|
|
9
|
+
/**
|
|
10
|
+
*
|
|
11
|
+
*/
|
|
12
|
+
class FirebaseConnector extends fluent_2.BaseConnector {
|
|
13
|
+
inputSchema;
|
|
14
|
+
outputSchema;
|
|
15
|
+
collection;
|
|
16
|
+
entity;
|
|
17
|
+
constructor({ entity, inputSchema, outputSchema }) {
|
|
18
|
+
super();
|
|
19
|
+
this.inputSchema = inputSchema;
|
|
20
|
+
this.outputSchema =
|
|
21
|
+
outputSchema || inputSchema;
|
|
22
|
+
this.entity = entity;
|
|
23
|
+
}
|
|
24
|
+
initDB() {
|
|
25
|
+
const relationShipBuilder = fluent_1.modelGeneratorDataSource.getRepository(this.entity);
|
|
26
|
+
const name = relationShipBuilder.metadata.givenTableName;
|
|
27
|
+
if (!name) {
|
|
28
|
+
throw new Error(`Could not find table by name. Did you include @f.entity in your model?`);
|
|
29
|
+
}
|
|
30
|
+
this.collection = admin
|
|
31
|
+
.firestore()
|
|
32
|
+
.collection(name);
|
|
33
|
+
const { relations } = (0, fluent_1.getRelationsFromModelGenerator)(relationShipBuilder);
|
|
34
|
+
this.modelRelations = relations;
|
|
35
|
+
this.outputKeys = (0, fluent_2.getOutputKeys)(relationShipBuilder) || [];
|
|
36
|
+
return 1;
|
|
37
|
+
}
|
|
38
|
+
// CREATE
|
|
39
|
+
/**
|
|
40
|
+
* Insert the data object into the database.
|
|
41
|
+
* @param data
|
|
42
|
+
*/
|
|
43
|
+
async insert(data) {
|
|
44
|
+
this.initDB();
|
|
45
|
+
// Validate Input
|
|
46
|
+
const validatedData = this.inputSchema.parse(data);
|
|
47
|
+
if (data['id']) {
|
|
48
|
+
const found = await this.findById(data['id']);
|
|
49
|
+
if (found) {
|
|
50
|
+
throw new Error(`A document with id ${found[0]['id']} already exists.`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const id = data['id'] || js_utils_1.Ids.uuid();
|
|
54
|
+
const item = {
|
|
55
|
+
id,
|
|
56
|
+
...validatedData
|
|
57
|
+
};
|
|
58
|
+
await this.collection.doc(id).set(item);
|
|
59
|
+
// Validate Output
|
|
60
|
+
return this.outputSchema.parse(js_utils_1.Objects.clearEmpties(js_utils_1.Objects.deleteNulls(item)));
|
|
61
|
+
}
|
|
62
|
+
async insertMany(data) {
|
|
63
|
+
this.initDB();
|
|
64
|
+
const validatedData = this.inputSchema.array().parse(data);
|
|
65
|
+
const batch = admin.firestore().batch();
|
|
66
|
+
const batchInserted = [];
|
|
67
|
+
validatedData.forEach(d => {
|
|
68
|
+
const id = d['id'] || js_utils_1.Ids.uuid();
|
|
69
|
+
const item = { id, ...d };
|
|
70
|
+
const insert = this.collection.doc(id);
|
|
71
|
+
batch.set(insert, item);
|
|
72
|
+
batchInserted.push(item);
|
|
73
|
+
});
|
|
74
|
+
await batch.commit();
|
|
75
|
+
return this.outputSchema.array().parse(batchInserted.map(d => {
|
|
76
|
+
return js_utils_1.Objects.clearEmpties(js_utils_1.Objects.deleteNulls(d));
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
// READ
|
|
80
|
+
async findMany(query) {
|
|
81
|
+
this.initDB();
|
|
82
|
+
const [andQuery, orQueries] = this.getGeneratedQueries(query);
|
|
83
|
+
const results = [];
|
|
84
|
+
if (andQuery) {
|
|
85
|
+
const snapshot = await andQuery.get();
|
|
86
|
+
snapshot.forEach(doc => {
|
|
87
|
+
results.push(doc.data());
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const promises = [];
|
|
91
|
+
for (const orQuery of orQueries) {
|
|
92
|
+
promises.push(orQuery.get());
|
|
93
|
+
}
|
|
94
|
+
const orSnapshots = await Promise.all(promises);
|
|
95
|
+
for (const orSnapshot of orSnapshots) {
|
|
96
|
+
orSnapshot.forEach(doc => {
|
|
97
|
+
results.push(doc.data());
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
// As there might be duplicated results from the queries,
|
|
101
|
+
// we will deduplicate by ID
|
|
102
|
+
let found = [...new Map(results.map(v => [v.id, v])).values()];
|
|
103
|
+
found.map(d => {
|
|
104
|
+
js_utils_1.Objects.clearEmpties(js_utils_1.Objects.deleteNulls(d));
|
|
105
|
+
});
|
|
106
|
+
if (query?.include) {
|
|
107
|
+
found = await this.loadRelatedData(found, js_utils_1.Objects.flatten(query?.include || {}));
|
|
108
|
+
}
|
|
109
|
+
if (query?.paginated) {
|
|
110
|
+
const paginationInfo = {
|
|
111
|
+
total: 0,
|
|
112
|
+
perPage: query.paginated.perPage,
|
|
113
|
+
currentPage: query.paginated.page,
|
|
114
|
+
nextPage: query.paginated.page + 1,
|
|
115
|
+
firstPage: 1,
|
|
116
|
+
lastPage: Math.ceil(0 / query.paginated.perPage),
|
|
117
|
+
prevPage: query.paginated.page === 1 ? null : query.paginated.page - 1,
|
|
118
|
+
from: (query.paginated.page - 1) * query.paginated.perPage + 1,
|
|
119
|
+
to: query.paginated.perPage * query.paginated.page,
|
|
120
|
+
data: found
|
|
121
|
+
};
|
|
122
|
+
return paginationInfo;
|
|
123
|
+
}
|
|
124
|
+
if (query?.select) {
|
|
125
|
+
// TODO: validate based on the select properties
|
|
126
|
+
return found;
|
|
127
|
+
}
|
|
128
|
+
// Validate Output against schema
|
|
129
|
+
return this.outputSchema?.array().parse(found);
|
|
130
|
+
}
|
|
131
|
+
// UPDATE
|
|
132
|
+
/**
|
|
133
|
+
* PATCH operation
|
|
134
|
+
* @param data
|
|
135
|
+
*/
|
|
136
|
+
async updateById(id, data) {
|
|
137
|
+
this.initDB();
|
|
138
|
+
const dataToInsert = this.outputKeys.includes('updated')
|
|
139
|
+
? {
|
|
140
|
+
...data,
|
|
141
|
+
...{ updated: new Date() }
|
|
142
|
+
}
|
|
143
|
+
: data;
|
|
144
|
+
const validatedData = this.inputSchema.parse(dataToInsert);
|
|
145
|
+
await this.collection.doc(id).update({
|
|
146
|
+
...validatedData,
|
|
147
|
+
id
|
|
148
|
+
});
|
|
149
|
+
const dbResult = await this.findById(id);
|
|
150
|
+
if (!dbResult) {
|
|
151
|
+
throw new Error(`Object not found: ${id}`);
|
|
152
|
+
}
|
|
153
|
+
// Validate Output
|
|
154
|
+
return this.outputSchema?.parse(js_utils_1.Objects.clearEmpties(js_utils_1.Objects.deleteNulls(dbResult)));
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
*
|
|
158
|
+
* PUT operation. All fields not included in the data
|
|
159
|
+
* param will be set to null
|
|
160
|
+
*
|
|
161
|
+
* @param id
|
|
162
|
+
* @param data
|
|
163
|
+
*/
|
|
164
|
+
async replaceById(id, data) {
|
|
165
|
+
this.initDB();
|
|
166
|
+
const value = await this.findById(id);
|
|
167
|
+
const flatValue = js_utils_1.Objects.flatten(JSON.parse(JSON.stringify(value)));
|
|
168
|
+
Object.keys(flatValue).forEach(key => {
|
|
169
|
+
flatValue[key] = null;
|
|
170
|
+
});
|
|
171
|
+
const nullObject = js_utils_1.Objects.nest(flatValue);
|
|
172
|
+
const newValue = { ...nullObject, ...data };
|
|
173
|
+
delete newValue._id;
|
|
174
|
+
delete newValue.id;
|
|
175
|
+
delete newValue.created;
|
|
176
|
+
delete newValue.updated;
|
|
177
|
+
const dataToInsert = this.outputKeys.includes('updated')
|
|
178
|
+
? {
|
|
179
|
+
...data,
|
|
180
|
+
...{ updated: new Date() }
|
|
181
|
+
}
|
|
182
|
+
: data;
|
|
183
|
+
const validatedData = this.inputSchema.parse(dataToInsert);
|
|
184
|
+
await this.collection
|
|
185
|
+
.doc(id)
|
|
186
|
+
.update(validatedData);
|
|
187
|
+
// TODO: do we need to pull the info again?
|
|
188
|
+
const val = await this.requireById(id);
|
|
189
|
+
return this.outputSchema.parse(js_utils_1.Objects.clearEmpties(js_utils_1.Objects.deleteNulls(val)));
|
|
190
|
+
}
|
|
191
|
+
// DELETE
|
|
192
|
+
async deleteById(id) {
|
|
193
|
+
this.initDB();
|
|
194
|
+
await this.collection.doc(id).delete();
|
|
195
|
+
return id;
|
|
196
|
+
}
|
|
197
|
+
async clear() {
|
|
198
|
+
this.initDB();
|
|
199
|
+
const query = this.collection.orderBy('__name__').limit(300);
|
|
200
|
+
return new Promise((resolve, reject) => {
|
|
201
|
+
this.deleteQueryBatch(admin.firestore(), query, 300, resolve, reject);
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
// RELATIONS
|
|
205
|
+
loadFirst(query) {
|
|
206
|
+
this.initDB();
|
|
207
|
+
// Create a clone of the original class
|
|
208
|
+
// to avoid polluting attributes (relatedQuery)
|
|
209
|
+
const newInstance = this.clone();
|
|
210
|
+
newInstance.setRelatedQuery({
|
|
211
|
+
entity: this.entity,
|
|
212
|
+
repository: this,
|
|
213
|
+
query: {
|
|
214
|
+
...query,
|
|
215
|
+
limit: 1
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
return newInstance;
|
|
219
|
+
}
|
|
220
|
+
loadById(id) {
|
|
221
|
+
this.initDB();
|
|
222
|
+
// Create a new instance to avoid polluting the original one
|
|
223
|
+
const newInstance = this.clone();
|
|
224
|
+
newInstance.setRelatedQuery({
|
|
225
|
+
entity: this.entity,
|
|
226
|
+
repository: this,
|
|
227
|
+
query: {
|
|
228
|
+
where: {
|
|
229
|
+
id
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
return newInstance;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
*
|
|
237
|
+
* Returns the firebase-admin collection, you can use it
|
|
238
|
+
* for more complex queries that require the base library
|
|
239
|
+
*
|
|
240
|
+
* @param query
|
|
241
|
+
*/
|
|
242
|
+
raw() {
|
|
243
|
+
this.initDB();
|
|
244
|
+
return this.collection;
|
|
245
|
+
}
|
|
246
|
+
rawFirebase() {
|
|
247
|
+
this.initDB();
|
|
248
|
+
return admin.firestore();
|
|
249
|
+
}
|
|
250
|
+
deleteQueryBatch(db, query, batchSize, resolve, reject) {
|
|
251
|
+
this.initDB();
|
|
252
|
+
query
|
|
253
|
+
.get()
|
|
254
|
+
.then(snapshot => {
|
|
255
|
+
// When there are no documents left, we are done
|
|
256
|
+
if (snapshot.size == 0) {
|
|
257
|
+
return 0;
|
|
258
|
+
}
|
|
259
|
+
// Delete documents in a batch
|
|
260
|
+
const batch = db.batch();
|
|
261
|
+
snapshot.docs.forEach(doc => {
|
|
262
|
+
batch.delete(doc.ref);
|
|
263
|
+
});
|
|
264
|
+
return batch.commit().then(() => snapshot.size);
|
|
265
|
+
})
|
|
266
|
+
.then(numDeleted => {
|
|
267
|
+
if (numDeleted === 0) {
|
|
268
|
+
resolve();
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
// Recurse on the next process tick, to avoid
|
|
272
|
+
// exploding the stack.
|
|
273
|
+
process.nextTick(() => {
|
|
274
|
+
this.deleteQueryBatch(db, query, batchSize, resolve, reject);
|
|
275
|
+
});
|
|
276
|
+
})
|
|
277
|
+
.catch(reject);
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Creates a Clone of the current instance of the class
|
|
281
|
+
* @returns
|
|
282
|
+
*/
|
|
283
|
+
clone() {
|
|
284
|
+
this.initDB();
|
|
285
|
+
return new this.constructor();
|
|
286
|
+
}
|
|
287
|
+
//////////////////////////////////////////////////////////////
|
|
288
|
+
// ALL OF THESE METHODS PROBABLY SHOULD BE IN SOMEWHERE ELSE
|
|
289
|
+
//////////////////////////////////////////////////////////////
|
|
290
|
+
async loadRelatedData(data, loadedKeys) {
|
|
291
|
+
const result = await (0, fluent_2.loadRelations)({
|
|
292
|
+
data,
|
|
293
|
+
relations: loadedKeys,
|
|
294
|
+
modelRelations: this.modelRelations,
|
|
295
|
+
provider: 'firebase',
|
|
296
|
+
self: this,
|
|
297
|
+
returnPivot: false
|
|
298
|
+
});
|
|
299
|
+
return result;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
*
|
|
303
|
+
*/
|
|
304
|
+
getGeneratedQueries(query) {
|
|
305
|
+
let { andWhere, orWhere } = this.getFirebaseWhereQuery(query?.where);
|
|
306
|
+
let mergedQueries = [];
|
|
307
|
+
if (andWhere) {
|
|
308
|
+
mergedQueries = [andWhere, ...orWhere];
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
mergedQueries = orWhere;
|
|
312
|
+
}
|
|
313
|
+
const select = Object.keys(js_utils_1.Objects.flatten(query?.select || {}));
|
|
314
|
+
for (const [index] of mergedQueries.entries()) {
|
|
315
|
+
if (select?.length > 0) {
|
|
316
|
+
// Force select the ID
|
|
317
|
+
mergedQueries[index] = mergedQueries[index].select(...['id', ...select]);
|
|
318
|
+
}
|
|
319
|
+
mergedQueries[index] = mergedQueries[index].limit(query?.limit || 10);
|
|
320
|
+
mergedQueries[index] = mergedQueries[index].offset(query?.offset || 0);
|
|
321
|
+
if (query?.orderBy) {
|
|
322
|
+
for (const order of query?.orderBy) {
|
|
323
|
+
const flattenObject = js_utils_1.Objects.flatten(order);
|
|
324
|
+
for (const attribute of Object.keys(flattenObject)) {
|
|
325
|
+
mergedQueries[index] = mergedQueries[index].orderBy(attribute, flattenObject[attribute]);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
const cloned = [...mergedQueries];
|
|
331
|
+
if (andWhere) {
|
|
332
|
+
cloned.shift();
|
|
333
|
+
}
|
|
334
|
+
return [andWhere ? mergedQueries[0] : undefined, cloned];
|
|
335
|
+
}
|
|
336
|
+
getFirebaseWhereQuery(where) {
|
|
337
|
+
if (!where || Object.keys(where).length === 0) {
|
|
338
|
+
return { andWhere: this.collection, orWhere: [] };
|
|
339
|
+
}
|
|
340
|
+
// Every element of the array is an OR
|
|
341
|
+
let andWhereQuery = this.collection;
|
|
342
|
+
let orWhereQueries = [];
|
|
343
|
+
const orConditions = (0, fluent_1.extractConditions)((where['OR'] || []));
|
|
344
|
+
const andConditions = (0, fluent_1.extractConditions)((where['AND'] || []));
|
|
345
|
+
const copy = js_utils_1.Objects.clone(where);
|
|
346
|
+
if (!!copy['AND']) {
|
|
347
|
+
delete copy['AND'];
|
|
348
|
+
}
|
|
349
|
+
if (!!copy['OR']) {
|
|
350
|
+
delete copy['OR'];
|
|
351
|
+
}
|
|
352
|
+
const rootLevelConditions = (0, fluent_1.extractConditions)([copy]);
|
|
353
|
+
// We can merge root level and And conditions in the same query
|
|
354
|
+
for (const condition of andConditions) {
|
|
355
|
+
const { element, operator, value } = condition;
|
|
356
|
+
switch (operator) {
|
|
357
|
+
case fluent_1.LogicOperator.equals:
|
|
358
|
+
andWhereQuery = andWhereQuery.where(element, '==', value);
|
|
359
|
+
break;
|
|
360
|
+
case fluent_1.LogicOperator.isNot:
|
|
361
|
+
andWhereQuery = andWhereQuery.where(element, '!=', value);
|
|
362
|
+
break;
|
|
363
|
+
case fluent_1.LogicOperator.greaterThan:
|
|
364
|
+
andWhereQuery = andWhereQuery.where(element, '>', value);
|
|
365
|
+
break;
|
|
366
|
+
case fluent_1.LogicOperator.greaterOrEqualThan:
|
|
367
|
+
andWhereQuery = andWhereQuery.where(element, '>=', value);
|
|
368
|
+
break;
|
|
369
|
+
case fluent_1.LogicOperator.lessThan:
|
|
370
|
+
andWhereQuery = andWhereQuery.where(element, '<', value);
|
|
371
|
+
break;
|
|
372
|
+
case fluent_1.LogicOperator.lessOrEqualThan:
|
|
373
|
+
andWhereQuery = andWhereQuery.where(element, '<=', value);
|
|
374
|
+
break;
|
|
375
|
+
case fluent_1.LogicOperator.in:
|
|
376
|
+
andWhereQuery = andWhereQuery.where(element, 'in', value);
|
|
377
|
+
break;
|
|
378
|
+
case fluent_1.LogicOperator.arrayContains:
|
|
379
|
+
andWhereQuery = andWhereQuery.where(element, 'array-contains', value);
|
|
380
|
+
break;
|
|
381
|
+
case fluent_1.LogicOperator.notIn:
|
|
382
|
+
andWhereQuery = andWhereQuery.where(element, 'not-in', value);
|
|
383
|
+
break;
|
|
384
|
+
case fluent_1.LogicOperator.exists:
|
|
385
|
+
throw new Error('The nin Operator cannot be used in Firabase');
|
|
386
|
+
case fluent_1.LogicOperator.notExists:
|
|
387
|
+
throw new Error('The !exists Operator cannot be used in Firabase');
|
|
388
|
+
case fluent_1.LogicOperator.regexp:
|
|
389
|
+
throw new Error('The regexp Operator cannot be used in Firabase');
|
|
390
|
+
default:
|
|
391
|
+
throw new Error('The regexp Operator cannot be used in Firabase');
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
for (const condition of rootLevelConditions) {
|
|
395
|
+
const { element, operator, value } = condition;
|
|
396
|
+
switch (operator) {
|
|
397
|
+
case fluent_1.LogicOperator.equals:
|
|
398
|
+
andWhereQuery = andWhereQuery.where(element, '==', value);
|
|
399
|
+
break;
|
|
400
|
+
case fluent_1.LogicOperator.isNot:
|
|
401
|
+
andWhereQuery = andWhereQuery.where(element, '!=', value);
|
|
402
|
+
break;
|
|
403
|
+
case fluent_1.LogicOperator.greaterThan:
|
|
404
|
+
andWhereQuery = andWhereQuery.where(element, '>', value);
|
|
405
|
+
break;
|
|
406
|
+
case fluent_1.LogicOperator.greaterOrEqualThan:
|
|
407
|
+
andWhereQuery = andWhereQuery.where(element, '>=', value);
|
|
408
|
+
break;
|
|
409
|
+
case fluent_1.LogicOperator.lessThan:
|
|
410
|
+
andWhereQuery = andWhereQuery.where(element, '<', value);
|
|
411
|
+
break;
|
|
412
|
+
case fluent_1.LogicOperator.lessOrEqualThan:
|
|
413
|
+
andWhereQuery = andWhereQuery.where(element, '<=', value);
|
|
414
|
+
break;
|
|
415
|
+
case fluent_1.LogicOperator.in:
|
|
416
|
+
andWhereQuery = andWhereQuery.where(element, 'in', value);
|
|
417
|
+
break;
|
|
418
|
+
case fluent_1.LogicOperator.arrayContains:
|
|
419
|
+
andWhereQuery = andWhereQuery.where(element, 'array-contains', value);
|
|
420
|
+
break;
|
|
421
|
+
case fluent_1.LogicOperator.notIn:
|
|
422
|
+
andWhereQuery = andWhereQuery.where(element, 'not-in', value);
|
|
423
|
+
break;
|
|
424
|
+
case fluent_1.LogicOperator.exists:
|
|
425
|
+
throw new Error('The nin Operator cannot be used in Firabase');
|
|
426
|
+
case fluent_1.LogicOperator.notExists:
|
|
427
|
+
throw new Error('The !exists Operator cannot be used in Firabase');
|
|
428
|
+
case fluent_1.LogicOperator.regexp:
|
|
429
|
+
throw new Error('The regexp Operator cannot be used in Firabase');
|
|
430
|
+
default:
|
|
431
|
+
throw new Error('The regexp Operator cannot be used in Firabase');
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
// Each or query needs to be an independent query in Firebase
|
|
435
|
+
for (const condition of orConditions) {
|
|
436
|
+
const { element, operator, value } = condition;
|
|
437
|
+
let orQuery = this.collection;
|
|
438
|
+
switch (operator) {
|
|
439
|
+
case fluent_1.LogicOperator.equals:
|
|
440
|
+
orQuery = orQuery.where(element, '==', value);
|
|
441
|
+
break;
|
|
442
|
+
case fluent_1.LogicOperator.isNot:
|
|
443
|
+
orQuery = orQuery.where(element, '!=', value);
|
|
444
|
+
break;
|
|
445
|
+
case fluent_1.LogicOperator.greaterThan:
|
|
446
|
+
orQuery = orQuery.where(element, '>', value);
|
|
447
|
+
break;
|
|
448
|
+
case fluent_1.LogicOperator.greaterOrEqualThan:
|
|
449
|
+
orQuery = orQuery.where(element, '>=', value);
|
|
450
|
+
break;
|
|
451
|
+
case fluent_1.LogicOperator.lessThan:
|
|
452
|
+
orQuery = orQuery.where(element, '<', value);
|
|
453
|
+
break;
|
|
454
|
+
case fluent_1.LogicOperator.lessOrEqualThan:
|
|
455
|
+
orQuery = orQuery.where(element, '<=', value);
|
|
456
|
+
break;
|
|
457
|
+
case fluent_1.LogicOperator.in:
|
|
458
|
+
orQuery = orQuery.where(element, 'in', value);
|
|
459
|
+
break;
|
|
460
|
+
case fluent_1.LogicOperator.arrayContains:
|
|
461
|
+
orQuery = orQuery.where(element, 'array-contains', value);
|
|
462
|
+
break;
|
|
463
|
+
case fluent_1.LogicOperator.notIn:
|
|
464
|
+
orQuery = orQuery.where(element, 'not-in', value);
|
|
465
|
+
break;
|
|
466
|
+
case fluent_1.LogicOperator.exists:
|
|
467
|
+
throw new Error('The nin Operator cannot be used in Firabase');
|
|
468
|
+
case fluent_1.LogicOperator.notExists:
|
|
469
|
+
throw new Error('The !exists Operator cannot be used in Firabase');
|
|
470
|
+
case fluent_1.LogicOperator.regexp:
|
|
471
|
+
throw new Error('The regexp Operator cannot be used in Firabase');
|
|
472
|
+
default:
|
|
473
|
+
throw new Error('The regexp Operator cannot be used in Firabase');
|
|
474
|
+
}
|
|
475
|
+
orWhereQueries.push(orQuery);
|
|
476
|
+
}
|
|
477
|
+
let andWhereCondition = undefined;
|
|
478
|
+
// If there is no query, just return the collection
|
|
479
|
+
if (!andConditions?.length &&
|
|
480
|
+
!rootLevelConditions?.length &&
|
|
481
|
+
!orConditions?.length) {
|
|
482
|
+
andWhereCondition = this.collection;
|
|
483
|
+
}
|
|
484
|
+
if (andConditions?.length || rootLevelConditions?.length) {
|
|
485
|
+
andWhereCondition = andWhereQuery;
|
|
486
|
+
}
|
|
487
|
+
return {
|
|
488
|
+
andWhere: andWhereCondition,
|
|
489
|
+
orWhere: orWhereQueries
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
exports.FirebaseConnector = FirebaseConnector;
|
|
494
|
+
tslib_1.__decorate([
|
|
495
|
+
js_utils_1.Memo.syncMethod(),
|
|
496
|
+
tslib_1.__metadata("design:type", Function),
|
|
497
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
498
|
+
tslib_1.__metadata("design:returntype", void 0)
|
|
499
|
+
], FirebaseConnector.prototype, "initDB", null);
|
|
500
|
+
//# sourceMappingURL=FirebaseConnector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FirebaseConnector.js","sourceRoot":"","sources":["../src/FirebaseConnector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface ConnectionOptions {
|
|
2
|
+
host?: string;
|
|
3
|
+
port?: number;
|
|
4
|
+
databaseName?: string;
|
|
5
|
+
serviceAccount?: string;
|
|
6
|
+
emulator?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const FirebaseInit: ({ host, port, databaseName, serviceAccount, emulator }: ConnectionOptions) => void;
|
|
9
|
+
export declare const deleteFirebaseApps: () => Promise<(void | undefined)[]>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deleteFirebaseApps = exports.FirebaseInit = void 0;
|
|
4
|
+
const admin = require("firebase-admin");
|
|
5
|
+
const FirebaseInit = ({ host, port, databaseName, serviceAccount, emulator = false }) => {
|
|
6
|
+
if (admin.apps.length) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
// Set up emulator environment if specified
|
|
10
|
+
if (emulator || (host && port)) {
|
|
11
|
+
const emulatorHost = host || 'localhost';
|
|
12
|
+
const emulatorPort = port || 8080;
|
|
13
|
+
process.env['FIRESTORE_EMULATOR_HOST'] = `${emulatorHost}:${emulatorPort}`;
|
|
14
|
+
// Also set auth emulator for completeness
|
|
15
|
+
if (!process.env['FIREBASE_AUTH_EMULATOR_HOST']) {
|
|
16
|
+
process.env['FIREBASE_AUTH_EMULATOR_HOST'] = `${emulatorHost}:9099`;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const initOptions = {
|
|
20
|
+
projectId: databaseName || 'fluent-firebase-test'
|
|
21
|
+
};
|
|
22
|
+
// Only add credentials if not using emulator and serviceAccount is provided
|
|
23
|
+
if (!emulator && serviceAccount) {
|
|
24
|
+
initOptions.credential = admin.credential.cert(serviceAccount);
|
|
25
|
+
}
|
|
26
|
+
else if (!emulator) {
|
|
27
|
+
initOptions.credential = admin.credential.applicationDefault();
|
|
28
|
+
}
|
|
29
|
+
admin.initializeApp(initOptions);
|
|
30
|
+
const fireStore = admin.firestore();
|
|
31
|
+
fireStore.settings({ ignoreUndefinedProperties: true });
|
|
32
|
+
if (!fireStore) {
|
|
33
|
+
throw new Error('Could not initialize FireStore');
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.FirebaseInit = FirebaseInit;
|
|
37
|
+
const deleteFirebaseApps = () => {
|
|
38
|
+
return Promise.all(admin.apps.map(app => app?.delete()));
|
|
39
|
+
};
|
|
40
|
+
exports.deleteFirebaseApps = deleteFirebaseApps;
|
|
41
|
+
//# sourceMappingURL=FirebaseInit.js.map
|