@sofiakb/fireblaze-ts 1.0.0-dev.8 → 2.0.0-dev.1

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.
Files changed (52) hide show
  1. package/lib/commons/index.d.ts +1 -0
  2. package/lib/commons/index.js +14 -0
  3. package/lib/commons/index.js.map +1 -0
  4. package/lib/core/firebase-config.d.ts +7 -0
  5. package/lib/core/firebase-config.js +1 -1
  6. package/lib/core/firebase.d.ts +4 -4
  7. package/lib/core/firebase.js +9 -3
  8. package/lib/core/firebase.js.map +1 -1
  9. package/lib/core/firestore-repository.d.ts +324 -0
  10. package/lib/core/firestore-repository.js +660 -0
  11. package/lib/core/firestore-repository.js.map +1 -0
  12. package/lib/core/prepared-data.d.ts +27 -0
  13. package/lib/core/prepared-data.js +30 -0
  14. package/lib/core/prepared-data.js.map +1 -0
  15. package/lib/exceptions/empty-snapshot-exception.d.ts +3 -0
  16. package/lib/exceptions/empty-snapshot-exception.js +17 -0
  17. package/lib/exceptions/empty-snapshot-exception.js.map +1 -0
  18. package/lib/exceptions/no-document-found-exception.d.ts +11 -0
  19. package/lib/exceptions/no-document-found-exception.js +25 -0
  20. package/lib/exceptions/no-document-found-exception.js.map +1 -0
  21. package/lib/exceptions/no-firebase-instance-exception.js +3 -3
  22. package/lib/exceptions/no-firestore-instance-exception.d.ts +3 -0
  23. package/lib/exceptions/no-firestore-instance-exception.js +17 -0
  24. package/lib/exceptions/no-firestore-instance-exception.js.map +1 -0
  25. package/lib/exceptions/unique-constraint-exception.d.ts +11 -0
  26. package/lib/exceptions/unique-constraint-exception.js +25 -0
  27. package/lib/exceptions/unique-constraint-exception.js.map +1 -0
  28. package/lib/index.d.ts +4 -4
  29. package/lib/index.js +4 -4
  30. package/lib/index.js.map +1 -1
  31. package/lib/types/class-constructor.js +1 -1
  32. package/lib/types/nullable.d.ts +1 -1
  33. package/lib/types/nullable.js +1 -1
  34. package/lib/utils/date.d.ts +12 -1
  35. package/lib/utils/date.js +27 -14
  36. package/lib/utils/date.js.map +1 -1
  37. package/lib/utils/ignored-keys.d.ts +2 -0
  38. package/lib/utils/ignored-keys.js +12 -0
  39. package/lib/utils/ignored-keys.js.map +1 -0
  40. package/lib/utils/index.d.ts +0 -1
  41. package/lib/utils/index.js +4 -6
  42. package/lib/utils/index.js.map +1 -1
  43. package/lib/utils/paginated-data.d.ts +35 -0
  44. package/lib/utils/paginated-data.js +49 -0
  45. package/lib/utils/paginated-data.js.map +1 -0
  46. package/lib/utils/to-json.d.ts +1 -0
  47. package/lib/utils/to-json.js +35 -0
  48. package/lib/utils/to-json.js.map +1 -0
  49. package/package.json +26 -24
  50. package/lib/core/firebase-repository.d.ts +0 -60
  51. package/lib/core/firebase-repository.js +0 -316
  52. package/lib/core/firebase-repository.js.map +0 -1
@@ -1,60 +0,0 @@
1
- import { FirebaseApp } from 'firebase/app';
2
- import { CollectionReference, DocumentReference, FieldPath, Firestore, FirestoreError, OrderByDirection, Query, QueryConstraint, QuerySnapshot, WhereFilterOp } from 'firebase/firestore';
3
- import { ClassConstructor } from '../types/class-constructor';
4
- import Nullable from '../types/nullable';
5
- export interface FirebaseRepositoryAttributes {
6
- collectionName: string;
7
- options?: FirebaseRepositoryOptions;
8
- firebase?: FirebaseApp;
9
- }
10
- export interface FirebaseRepositoryOptions {
11
- cache: {
12
- use: boolean;
13
- until: number;
14
- };
15
- }
16
- export default class FirebaseRepository<T> {
17
- #private;
18
- model: ClassConstructor<T> | null;
19
- options?: FirebaseRepositoryOptions;
20
- _firestoreLocalStoragePrefix: string;
21
- constructor(attributes: FirebaseRepositoryAttributes);
22
- clearLocalStorage(): boolean;
23
- cleanup(data: any): any;
24
- casting(data: any): Promise<T | null>;
25
- castingAll(values: any): Promise<T | (Awaited<T> | null)[] | null>;
26
- _castData(querySnapshot: QuerySnapshot): Promise<(Awaited<T> | null)[]>;
27
- all(): this;
28
- where(column: string, value: string | string[] | number | boolean | null, operator?: WhereFilterOp): this;
29
- whereSnapshot(column: string, value: string | string[] | number | boolean | null, operator?: WhereFilterOp): this;
30
- findOneById(id: string): Promise<any[] | null>;
31
- documentReference(docID: string): null | DocumentReference;
32
- doc(docID: string, cast?: boolean): Promise<any>;
33
- orderBy(fieldPath: string | FieldPath, directionStr?: OrderByDirection): this;
34
- limit(_limit?: number): this;
35
- first(): Promise<any>;
36
- offset(_offset?: number): this;
37
- prepareData(data: any): {
38
- documentReference: DocumentReference<import("firebase/firestore").DocumentData>;
39
- data: any;
40
- };
41
- store(data: any): Promise<T | null>;
42
- storeMultiple(values: any[]): Promise<void>;
43
- update(docID: string, data: any, force?: boolean): Promise<any>;
44
- delete(docID: string): Promise<any>;
45
- deleteMultiple(values: any[]): Promise<void>;
46
- count(_where?: QueryConstraint): Promise<number>;
47
- get(cast?: boolean, snapshot?: QuerySnapshot): Promise<any | null>;
48
- snapshots(callback?: (value: any) => any, cast?: boolean): Promise<import("firebase/firestore").Unsubscribe | null>;
49
- static verifyLogin(error: FirestoreError): null | Promise<any> | FirestoreError;
50
- static _now(): Date;
51
- get collection(): CollectionReference;
52
- set collection(collection: CollectionReference);
53
- get collectionName(): string;
54
- set collectionName(collectionName: string);
55
- get snapshot(): Nullable<Query>;
56
- set snapshot(snapshot: Nullable<Query>);
57
- get firestore(): Firestore;
58
- set firestore(firestore: Firestore);
59
- get instance(): FirebaseApp;
60
- }
@@ -1,316 +0,0 @@
1
- 'use strict';
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const firestore_1 = require("firebase/firestore");
7
- const lodash_1 = require("lodash");
8
- const moment_1 = __importDefault(require("moment"));
9
- const jquery_1 = __importDefault(require("jquery"));
10
- const local_storage_1 = __importDefault(require("@sofiakb/local-storage"));
11
- const utils_1 = require("../utils");
12
- const date_1 = require("../utils/date");
13
- const no_firebase_instance_exception_1 = __importDefault(require("../exceptions/no-firebase-instance-exception"));
14
- const firebase_1 = __importDefault(require("./firebase"));
15
- class FirebaseRepository {
16
- #instance;
17
- #firestore;
18
- #collection;
19
- #collectionName;
20
- #snapshot;
21
- model = null;
22
- options;
23
- _firestoreLocalStoragePrefix = 'firestore:query:';
24
- constructor(attributes) {
25
- if (!attributes.firebase && !firebase_1.default.getApp())
26
- throw new no_firebase_instance_exception_1.default();
27
- this.#instance = attributes.firebase ?? firebase_1.default.getApp();
28
- this.#firestore = (0, firestore_1.getFirestore)();
29
- this.#collectionName = attributes.collectionName;
30
- this.#collection = (0, firestore_1.collection)(this.#firestore, attributes.collectionName);
31
- this.options = attributes.options;
32
- this._firestoreLocalStoragePrefix = `${this._firestoreLocalStoragePrefix}${this.collection.path}:`;
33
- this.#snapshot = null;
34
- const self = this;
35
- if (this.options?.cache.use) {
36
- (0, jquery_1.default)(window).on('unload', function () {
37
- return self.clearLocalStorage();
38
- });
39
- }
40
- }
41
- clearLocalStorage() {
42
- const localStorageKeys = Object.keys(localStorage), _firestoreLocalStoragePrefix = this._firestoreLocalStoragePrefix;
43
- for (const localStorageKey of localStorageKeys)
44
- if (localStorageKey.startsWith(_firestoreLocalStoragePrefix))
45
- local_storage_1.default.delete(localStorageKey);
46
- return true;
47
- }
48
- cleanup(data) {
49
- const object = this.model ? new this.model(data) : null;
50
- const item = ['collection', 'instance', 'firestore', 'model'];
51
- item.forEach((attribute) => delete object[attribute]);
52
- return object;
53
- }
54
- async casting(data) {
55
- return this.model ? new this.model(data) : null;
56
- }
57
- async castingAll(values) {
58
- return Array.isArray(values)
59
- ? await Promise.all((0, lodash_1.map)(values, async (item) => await this.casting(item)))
60
- : await this.casting(values);
61
- }
62
- async _castData(querySnapshot) {
63
- return await Promise.all(querySnapshot.docs.map(async (doc) => await this.casting(doc.data())));
64
- }
65
- all() {
66
- this.#snapshot = (0, firestore_1.query)(this.#collection);
67
- return this;
68
- }
69
- where(column, value, operator = '==') {
70
- return this.whereSnapshot(column, value, operator);
71
- }
72
- whereSnapshot(column, value, operator = '==') {
73
- this.#snapshot = (0, firestore_1.query)(this.#snapshot ?? this.#collection, (0, firestore_1.where)(column, operator, value));
74
- return this;
75
- }
76
- async findOneById(id) {
77
- return this.doc(id);
78
- }
79
- documentReference(docID) {
80
- if (docID.trim() === '')
81
- return null;
82
- return (0, firestore_1.doc)(this.#collection, docID);
83
- }
84
- async doc(docID, cast = true) {
85
- if (docID.trim() === '')
86
- return null;
87
- return new Promise(async (resolve, reject) => {
88
- const documentData = await (0, firestore_1.getDoc)(this.documentReference(docID)).catch((error) => reject(FirebaseRepository.verifyLogin(error)));
89
- if (documentData instanceof firestore_1.DocumentSnapshot) {
90
- return documentData.exists()
91
- ? resolve(cast ? await this.casting(documentData.data()) : documentData)
92
- : resolve(null);
93
- }
94
- else
95
- reject(null);
96
- });
97
- }
98
- orderBy(fieldPath, directionStr) {
99
- this.#snapshot = (0, firestore_1.query)(this.#snapshot ?? this.#collection, (0, firestore_1.orderBy)(fieldPath, directionStr));
100
- return this;
101
- }
102
- limit(_limit = 1) {
103
- this.#snapshot = (0, firestore_1.query)(this.#snapshot ?? this.#collection, (0, firestore_1.limit)(_limit));
104
- return this;
105
- }
106
- first() {
107
- return this.limit(1).get();
108
- }
109
- offset(_offset = 1) {
110
- this.#snapshot = (0, firestore_1.query)(this.#snapshot ?? this.#collection, (0, firestore_1.startAt)(_offset));
111
- return this;
112
- }
113
- prepareData(data) {
114
- if (!data.id) {
115
- data.id = '';
116
- }
117
- data.createdAt = (0, date_1.toMoment)(data.createdAt ?? FirebaseRepository._now());
118
- data.updatedAt = (0, date_1.toMoment)(data.updatedAt ?? FirebaseRepository._now());
119
- data = (0, lodash_1.pickBy)(data, (v) => v !== undefined);
120
- Object.keys(data).map((key) => (data[key] =
121
- data[key] !== null && typeof data[key] === 'object'
122
- ? data[key]?.constructor?.name?.toLowerCase() === 'moment'
123
- ? data[key].toDate()
124
- : (0, utils_1.toJSON)(data[key])
125
- : data[key]));
126
- const documentReference = data.id && data.id.trim() !== '' ? (0, firestore_1.doc)(this.collection, data.id) : (0, firestore_1.doc)(this.collection);
127
- return { documentReference, data: { ...data, id: documentReference.id } };
128
- }
129
- async store(data) {
130
- const prepared = this.prepareData(data);
131
- await (0, firestore_1.setDoc)(prepared.documentReference, { ...prepared.data, id: prepared.documentReference.id });
132
- return await this.casting({ ...data, id: prepared.documentReference.id });
133
- }
134
- async storeMultiple(values) {
135
- const chunkValues = (0, lodash_1.chunk)(values, 500);
136
- for await (const chunkValue of chunkValues) {
137
- const batch = (0, firestore_1.writeBatch)(this.firestore);
138
- (0, lodash_1.each)(chunkValue, (data) => {
139
- const prepared = this.prepareData(data);
140
- batch.set(prepared.documentReference, {
141
- ...prepared.data,
142
- id: prepared.documentReference.id,
143
- });
144
- });
145
- await batch.commit();
146
- }
147
- }
148
- async update(docID, data, force = false) {
149
- if (docID.trim() === '')
150
- return null;
151
- const documentReference = this.documentReference(docID);
152
- if (documentReference) {
153
- data.updatedAt = FirebaseRepository._now();
154
- delete data.createdAt;
155
- if (force) {
156
- await (0, firestore_1.setDoc)(documentReference, data);
157
- }
158
- else {
159
- await (0, firestore_1.updateDoc)(documentReference, data);
160
- }
161
- }
162
- this.clearLocalStorage();
163
- return this.doc(docID);
164
- }
165
- async delete(docID) {
166
- if (docID.trim() === '')
167
- return null;
168
- const documentReference = this.documentReference(docID);
169
- this.clearLocalStorage();
170
- if (documentReference) {
171
- await (0, firestore_1.deleteDoc)(documentReference);
172
- return true;
173
- }
174
- return false;
175
- }
176
- async deleteMultiple(values) {
177
- const chunkValues = (0, lodash_1.chunk)(values, 500);
178
- this.clearLocalStorage();
179
- for await (const chunkValue of chunkValues) {
180
- const batch = (0, firestore_1.writeBatch)(this.#firestore);
181
- for await (const data of chunkValue) {
182
- const _documentReference = typeof data === 'string' ? await this.documentReference(data) : data;
183
- if (_documentReference)
184
- batch.delete(_documentReference);
185
- }
186
- await batch.commit();
187
- }
188
- }
189
- async count(_where) {
190
- const _limit = 500;
191
- let count = 0;
192
- const _query = _where
193
- ? (0, firestore_1.query)(this.#collection, _where, (0, firestore_1.orderBy)('id', 'desc'), (0, firestore_1.limit)(_limit))
194
- : (0, firestore_1.query)(this.#collection, (0, firestore_1.orderBy)('id', 'desc'), (0, firestore_1.limit)(_limit));
195
- let snapshot = await (0, firestore_1.getDocs)(_query);
196
- if (snapshot.docs != null) {
197
- while (snapshot.size > 0 && !snapshot.empty) {
198
- count += snapshot.size;
199
- snapshot = await (0, firestore_1.getDocs)((0, firestore_1.query)(_query, (0, firestore_1.startAfter)(snapshot.docs[snapshot.size - 1])));
200
- }
201
- }
202
- return count;
203
- }
204
- async get(cast, snapshot) {
205
- return new Promise((resolve, reject) => {
206
- if (!this.#snapshot) {
207
- return reject(null);
208
- }
209
- const _query = this.#snapshot;
210
- // @ts-ignore
211
- const queryObject = _query._query;
212
- let queryString = utils_1.base64.encode(JSON.stringify({
213
- collectionGroup: queryObject.collectionGroup,
214
- endAt: queryObject.endAt,
215
- explicitOrderBy: queryObject.explicitOrderBy,
216
- filters: queryObject.filters,
217
- limit: queryObject.limit,
218
- limitType: queryObject.limitType,
219
- path: queryObject.path,
220
- startAt: queryObject.startAt,
221
- }));
222
- if (this.options?.cache.use) {
223
- queryString = utils_1.base64.encode(JSON.stringify({
224
- collectionGroup: queryObject.collectionGroup,
225
- endAt: queryObject.endAt,
226
- explicitOrderBy: queryObject.explicitOrderBy,
227
- filters: queryObject.filters,
228
- limit: queryObject.limit,
229
- limitType: queryObject.limitType,
230
- path: queryObject.path,
231
- startAt: queryObject.startAt,
232
- }));
233
- const cacheStorage = local_storage_1.default.get(`${this._firestoreLocalStoragePrefix}${queryString}`);
234
- if (cacheStorage?.data && cacheStorage?.until && (0, moment_1.default)().unix() < (0, moment_1.default)(cacheStorage.until)?.unix()) {
235
- return resolve(this.castingAll(cacheStorage?.data));
236
- }
237
- }
238
- (0, firestore_1.getDocs)(_query)
239
- .then(async (querySnapshot) => {
240
- this.#snapshot = null;
241
- const result = cast
242
- ? await this._castData(querySnapshot)
243
- : await Promise.all(querySnapshot.docs.map(async (doc) => await doc.data()));
244
- if (this.options?.cache.use) {
245
- const firestoreStorage = {
246
- data: await Promise.all(querySnapshot.docs.map(async (doc) => doc.data())),
247
- until: (0, moment_1.default)().add(this.options?.cache.until, 'seconds'),
248
- };
249
- // @ts-ignore
250
- local_storage_1.default.set(`${this._firestoreLocalStoragePrefix}${queryString}`, firestoreStorage);
251
- }
252
- resolve(result);
253
- })
254
- .catch((error) => reject(FirebaseRepository.verifyLogin(error)))
255
- .finally(() => (this.#snapshot = null));
256
- });
257
- }
258
- async snapshots(callback, cast) {
259
- if (!this.snapshot) {
260
- return null;
261
- }
262
- const _query = this.snapshot;
263
- return (0, firestore_1.onSnapshot)(_query, { includeMetadataChanges: true }, async (querySnapshot) => {
264
- this.snapshot = null;
265
- const results = cast
266
- ? await this._castData(querySnapshot)
267
- : await Promise.all(querySnapshot.docs.map(async (doc) => await doc.data()));
268
- if (callback) {
269
- callback(results);
270
- }
271
- return results;
272
- }, (error) => FirebaseRepository.verifyLogin(error), () => (this.snapshot = null));
273
- }
274
- static verifyLogin(error) {
275
- if (error.code === 'permission-denied') {
276
- return null;
277
- /*cookie.delete(store.getters.TOKEN_NAME)
278
- return redirect.login.view()*/
279
- }
280
- else {
281
- return error;
282
- }
283
- }
284
- static _now() {
285
- return firestore_1.Timestamp.now().toDate();
286
- }
287
- get collection() {
288
- return this.#collection;
289
- }
290
- set collection(collection) {
291
- this.#collection = collection;
292
- }
293
- get collectionName() {
294
- return this.#collectionName;
295
- }
296
- set collectionName(collectionName) {
297
- this.#collectionName = collectionName;
298
- }
299
- get snapshot() {
300
- return this.#snapshot;
301
- }
302
- set snapshot(snapshot) {
303
- this.#snapshot = snapshot;
304
- }
305
- get firestore() {
306
- return this.#firestore;
307
- }
308
- set firestore(firestore) {
309
- this.#firestore = firestore;
310
- }
311
- get instance() {
312
- return this.#instance;
313
- }
314
- }
315
- exports.default = FirebaseRepository;
316
- //# sourceMappingURL=firebase-repository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"firebase-repository.js","sourceRoot":"","sources":["../../src/core/firebase-repository.ts"],"names":[],"mappings":"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"}