@nx-ddd/firestore 0.0.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.
- package/README.md +7 -0
- package/admin/index.d.ts +1 -0
- package/admin/index.js +5 -0
- package/admin/index.js.map +1 -0
- package/admin/interfaces.d.ts +9 -0
- package/admin/interfaces.js +3 -0
- package/admin/interfaces.js.map +1 -0
- package/admin/repository.d.ts +33 -0
- package/admin/repository.js +85 -0
- package/admin/repository.js.map +1 -0
- package/client/index.d.ts +2 -0
- package/client/index.js +6 -0
- package/client/index.js.map +1 -0
- package/client/interfaces.d.ts +8 -0
- package/client/interfaces.js +3 -0
- package/client/interfaces.js.map +1 -0
- package/client/repository.d.ts +18 -0
- package/client/repository.js +27 -0
- package/client/repository.js.map +1 -0
- package/common/adapters/date.adapter.d.ts +15 -0
- package/common/adapters/date.adapter.js +30 -0
- package/common/adapters/date.adapter.js.map +1 -0
- package/common/adapters/fields.adapter.d.ts +3 -0
- package/common/adapters/fields.adapter.js +3 -0
- package/common/adapters/fields.adapter.js.map +1 -0
- package/common/adapters/firestore.adapter.d.ts +6 -0
- package/common/adapters/firestore.adapter.js +3 -0
- package/common/adapters/firestore.adapter.js.map +1 -0
- package/common/adapters/index.d.ts +3 -0
- package/common/adapters/index.js +7 -0
- package/common/adapters/index.js.map +1 -0
- package/common/entity.d.ts +24 -0
- package/common/entity.js +27 -0
- package/common/entity.js.map +1 -0
- package/common/index.d.ts +4 -0
- package/common/index.js +9 -0
- package/common/index.js.map +1 -0
- package/common/interfaces.d.ts +51 -0
- package/common/interfaces.js +4 -0
- package/common/interfaces.js.map +1 -0
- package/common/repository.d.ts +43 -0
- package/common/repository.js +116 -0
- package/common/repository.js.map +1 -0
- package/common/utilities/generate-id.d.ts +1 -0
- package/common/utilities/generate-id.js +22 -0
- package/common/utilities/generate-id.js.map +1 -0
- package/dayjs/dayjs.adapter.d.ts +7 -0
- package/dayjs/dayjs.adapter.js +18 -0
- package/dayjs/dayjs.adapter.js.map +1 -0
- package/dayjs/index.d.ts +1 -0
- package/dayjs/index.js +5 -0
- package/dayjs/index.js.map +1 -0
- package/nest/adapter.d.ts +17 -0
- package/nest/adapter.js +41 -0
- package/nest/adapter.js.map +1 -0
- package/nest/index.d.ts +1 -0
- package/nest/index.js +5 -0
- package/nest/index.js.map +1 -0
- package/nest/repository.d.ts +10 -0
- package/nest/repository.js +26 -0
- package/nest/repository.js.map +1 -0
- package/package.json +15 -0
package/README.md
ADDED
package/admin/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './repository';
|
package/admin/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/firestore/src/admin/index.ts"],"names":[],"mappings":";;;AAAA,uDAA6B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CommonFirestoreDocument } from '../common/interfaces';
|
|
2
|
+
import { FirestoreAdapter } from '../common/adapters';
|
|
3
|
+
export interface BulkWriter<Data> {
|
|
4
|
+
update: (doc: CommonFirestoreDocument<Data>, data: Data) => any;
|
|
5
|
+
close: () => void;
|
|
6
|
+
}
|
|
7
|
+
export interface AdminFirestoreAdapter<Data> extends FirestoreAdapter {
|
|
8
|
+
bulkWriter: () => BulkWriter<Data>;
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../libs/firestore/src/admin/interfaces.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as dayjs from 'dayjs';
|
|
2
|
+
import { CommonFirestoreRepository } from '../common/repository';
|
|
3
|
+
import { FirestoreFieldsAdapter } from '../common/adapters';
|
|
4
|
+
import { FirestoreDayJsAdapter as _FirestoreDayJsAdapter } from '../dayjs';
|
|
5
|
+
import { AdminFirestoreAdapter as IAdminFirestoreAdapter } from './interfaces';
|
|
6
|
+
import { CommonFirestoreDocument, CommonFirestoreCollection, CommonFirestoreCollectionGroup } from '../common/interfaces';
|
|
7
|
+
export declare const convertDocRef: <Data>(docRef: FirebaseFirestore.DocumentReference<Data>) => CommonFirestoreDocument<Data>;
|
|
8
|
+
export declare const convertCollectionRef: <Data>(collectionRef: FirebaseFirestore.CollectionReference<Data>) => CommonFirestoreCollection<Data>;
|
|
9
|
+
export declare const convertCollectionGroupRef: <Data>(collectionRef: FirebaseFirestore.CollectionGroup<Data>) => CommonFirestoreCollectionGroup<Data>;
|
|
10
|
+
export declare class FirestoreDayJsAdapter extends _FirestoreDayJsAdapter {
|
|
11
|
+
Timestamp: typeof FirebaseFirestore.Timestamp;
|
|
12
|
+
}
|
|
13
|
+
export declare class FieldsFirestoreAdapter implements FirestoreFieldsAdapter {
|
|
14
|
+
FieldValue: typeof FirebaseFirestore.FieldValue;
|
|
15
|
+
}
|
|
16
|
+
export declare class AdminFirestoreAdapter<Date> implements IAdminFirestoreAdapter<Date> {
|
|
17
|
+
private _firestore;
|
|
18
|
+
setFirestore(firestore: any): void;
|
|
19
|
+
doc<Data>(path: string): CommonFirestoreDocument<Data>;
|
|
20
|
+
collection<Data>(path: string): CommonFirestoreCollection<Data>;
|
|
21
|
+
collectionGroup<Data>(path: string): CommonFirestoreCollectionGroup<Data>;
|
|
22
|
+
bulkWriter: <Data>() => {
|
|
23
|
+
update: (doc: CommonFirestoreDocument<Data>, data: Data) => void;
|
|
24
|
+
close: () => any;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export declare abstract class AdminFirestoreRepository<Entity extends {
|
|
28
|
+
id: string;
|
|
29
|
+
}, Data extends object> extends CommonFirestoreRepository<Entity, Data, dayjs.Dayjs> {
|
|
30
|
+
protected firestore: AdminFirestoreAdapter<Data>;
|
|
31
|
+
constructor(firestore: AdminFirestoreAdapter<Data>);
|
|
32
|
+
bulkUpdate(entities: (Partial<Entity>)[]): Promise<void>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AdminFirestoreRepository = exports.AdminFirestoreAdapter = exports.FieldsFirestoreAdapter = exports.FirestoreDayJsAdapter = exports.convertCollectionGroupRef = exports.convertCollectionRef = exports.convertDocRef = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const admin = require("firebase-admin");
|
|
6
|
+
const repository_1 = require("../common/repository");
|
|
7
|
+
const dayjs_1 = require("../dayjs");
|
|
8
|
+
const rxjs_1 = require("rxjs");
|
|
9
|
+
exports.convertDocRef = (docRef) => {
|
|
10
|
+
return {
|
|
11
|
+
__ref: docRef,
|
|
12
|
+
set: (data, options) => {
|
|
13
|
+
return docRef.set(data, options).then(() => { });
|
|
14
|
+
},
|
|
15
|
+
get: () => rxjs_1.from(docRef.get())
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
exports.convertCollectionRef = (collectionRef) => {
|
|
19
|
+
return {
|
|
20
|
+
stateChanges: () => rxjs_1.of(),
|
|
21
|
+
get: () => rxjs_1.from(collectionRef.get()),
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
exports.convertCollectionGroupRef = (collectionRef) => {
|
|
25
|
+
return {
|
|
26
|
+
stateChanges: () => rxjs_1.of(),
|
|
27
|
+
get: () => rxjs_1.from(collectionRef.get()),
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
class FirestoreDayJsAdapter extends dayjs_1.FirestoreDayJsAdapter {
|
|
31
|
+
constructor() {
|
|
32
|
+
super(...arguments);
|
|
33
|
+
this.Timestamp = admin.firestore.Timestamp;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.FirestoreDayJsAdapter = FirestoreDayJsAdapter;
|
|
37
|
+
class FieldsFirestoreAdapter {
|
|
38
|
+
constructor() {
|
|
39
|
+
this.FieldValue = admin.firestore.FieldValue;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.FieldsFirestoreAdapter = FieldsFirestoreAdapter;
|
|
43
|
+
class AdminFirestoreAdapter {
|
|
44
|
+
constructor() {
|
|
45
|
+
this.bulkWriter = () => ({
|
|
46
|
+
update: (doc, data) => {
|
|
47
|
+
this._firestore.bulkWriter().update(doc.__ref, data);
|
|
48
|
+
},
|
|
49
|
+
close: () => this._firestore.bulkWriter().close(),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
setFirestore(firestore) {
|
|
53
|
+
this._firestore = firestore;
|
|
54
|
+
}
|
|
55
|
+
doc(path) {
|
|
56
|
+
return exports.convertDocRef(this._firestore.doc(path));
|
|
57
|
+
}
|
|
58
|
+
collection(path) {
|
|
59
|
+
return exports.convertCollectionRef(this._firestore.collection(path));
|
|
60
|
+
}
|
|
61
|
+
collectionGroup(path) {
|
|
62
|
+
return exports.convertCollectionGroupRef(this._firestore.collectionGroup(path));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.AdminFirestoreAdapter = AdminFirestoreAdapter;
|
|
66
|
+
class AdminFirestoreRepository extends repository_1.CommonFirestoreRepository {
|
|
67
|
+
constructor(firestore) {
|
|
68
|
+
super(firestore, new FieldsFirestoreAdapter(), new FirestoreDayJsAdapter());
|
|
69
|
+
this.firestore = firestore;
|
|
70
|
+
}
|
|
71
|
+
;
|
|
72
|
+
bulkUpdate(entities) {
|
|
73
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
74
|
+
return entities.reduce((bulkWriter, entity) => {
|
|
75
|
+
const path = this.buildDocPath(entity);
|
|
76
|
+
const doc = this.firestore.doc(path);
|
|
77
|
+
this.firestore.bulkWriter();
|
|
78
|
+
bulkWriter.update(doc, Object.assign(Object.assign({}, this.converter.toFirestore(entity)), this.buildServerTimestampObject(['updatedAt'])));
|
|
79
|
+
return bulkWriter;
|
|
80
|
+
}, this.firestore.bulkWriter()).close();
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.AdminFirestoreRepository = AdminFirestoreRepository;
|
|
85
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../../libs/firestore/src/admin/repository.ts"],"names":[],"mappings":"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"}
|
package/client/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/firestore/src/client/index.ts"],"names":[],"mappings":";;;AAAA,uDAA6B;AAC7B,uDAA6B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as dayjs from 'dayjs';
|
|
2
|
+
import firebase from 'firebase';
|
|
3
|
+
import Timestamp = firebase.firestore.Timestamp;
|
|
4
|
+
import FieldValue = firebase.firestore.FieldValue;
|
|
5
|
+
export declare type FirestoreData<T> = {
|
|
6
|
+
[K in keyof T]: T[K] extends dayjs.Dayjs ? Timestamp | FieldValue : T[K];
|
|
7
|
+
};
|
|
8
|
+
export declare type _FirestoreData<T, K extends keyof T> = FirestoreData<Pick<T, K>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../libs/firestore/src/client/interfaces.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AngularFirestore } from '@angular/fire/firestore';
|
|
2
|
+
import firebase from 'firebase';
|
|
3
|
+
import { Dayjs } from 'dayjs';
|
|
4
|
+
import { CommonFirestoreRepository } from '../common/repository';
|
|
5
|
+
import { FirestoreFieldsAdapter } from '../common/adapters';
|
|
6
|
+
import { FirestoreDayJsAdapter as _FirestoreDayJsAdapter } from '../dayjs';
|
|
7
|
+
export declare class FirestoreDayJsAdapter extends _FirestoreDayJsAdapter {
|
|
8
|
+
Timestamp: typeof firebase.firestore.Timestamp;
|
|
9
|
+
}
|
|
10
|
+
export declare class FieldsFirestoreAdapter implements FirestoreFieldsAdapter {
|
|
11
|
+
FieldValue: typeof firebase.firestore.FieldValue;
|
|
12
|
+
}
|
|
13
|
+
export declare abstract class FirestoreRepository<Firestore extends AngularFirestore, Entity extends {
|
|
14
|
+
id: string;
|
|
15
|
+
}, Data extends object> extends CommonFirestoreRepository<Entity, Data, Dayjs> {
|
|
16
|
+
protected firestore: Firestore;
|
|
17
|
+
constructor(firestore: Firestore);
|
|
18
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FirestoreRepository = exports.FieldsFirestoreAdapter = exports.FirestoreDayJsAdapter = void 0;
|
|
4
|
+
const firebase_1 = require("firebase");
|
|
5
|
+
const repository_1 = require("../common/repository");
|
|
6
|
+
const dayjs_1 = require("../dayjs");
|
|
7
|
+
class FirestoreDayJsAdapter extends dayjs_1.FirestoreDayJsAdapter {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.Timestamp = firebase_1.default.firestore.Timestamp;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.FirestoreDayJsAdapter = FirestoreDayJsAdapter;
|
|
14
|
+
class FieldsFirestoreAdapter {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.FieldValue = firebase_1.default.firestore.FieldValue;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.FieldsFirestoreAdapter = FieldsFirestoreAdapter;
|
|
20
|
+
class FirestoreRepository extends repository_1.CommonFirestoreRepository {
|
|
21
|
+
constructor(firestore) {
|
|
22
|
+
super(firestore, new FieldsFirestoreAdapter(), new FirestoreDayJsAdapter());
|
|
23
|
+
this.firestore = firestore;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.FirestoreRepository = FirestoreRepository;
|
|
27
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../../libs/firestore/src/client/repository.ts"],"names":[],"mappings":";;;AACA,uCAAgC;AAEhC,qDAAiE;AAEjE,oCAA2E;AAE3E,MAAa,qBAAsB,SAAQ,6BAAsB;IAAjE;;QACE,cAAS,GAAG,kBAAQ,CAAC,SAAS,CAAC,SAAS,CAAC;IAC3C,CAAC;CAAA;AAFD,sDAEC;AAED,MAAa,sBAAsB;IAAnC;QACE,eAAU,GAAG,kBAAQ,CAAC,SAAS,CAAC,UAAU,CAAC;IAC7C,CAAC;CAAA;AAFD,wDAEC;AAGD,MAAsB,mBAIpB,SAAQ,sCAA8C;IAEtD,YAAsB,SAAoB;QACxC,KAAK,CACH,SAAS,EACT,IAAI,sBAAsB,EAAE,EAC5B,IAAI,qBAAqB,EAAE,CAC5B,CAAC;QALkB,cAAS,GAAT,SAAS,CAAW;IAM1C,CAAC;CACF;AAbD,kDAaC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { FirestoreData, Timestamp, TimestampConstructor } from "../interfaces";
|
|
2
|
+
export declare abstract class BaseFirestoreDateAdapter<D> {
|
|
3
|
+
abstract Timestamp: TimestampConstructor;
|
|
4
|
+
abstract fromTimestampToDate(timestamp: Timestamp): D;
|
|
5
|
+
abstract fromDateToTimestamp(date: D): Timestamp;
|
|
6
|
+
protected abstract isDate(v: any): v is D;
|
|
7
|
+
protected isTimestamp(v: any): v is Timestamp;
|
|
8
|
+
toFirestore<T>(data: T): FirestoreData<T, D>;
|
|
9
|
+
fromFirestore<T>(data: FirestoreData<T, D>): T;
|
|
10
|
+
}
|
|
11
|
+
export declare abstract class FirestoreDateAdapter extends BaseFirestoreDateAdapter<Date> {
|
|
12
|
+
protected isDate(v: any): v is Date;
|
|
13
|
+
fromTimestampToDate(timestamp: Timestamp): Date;
|
|
14
|
+
fromDateToTimestamp(date: Date): Timestamp;
|
|
15
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FirestoreDateAdapter = exports.BaseFirestoreDateAdapter = void 0;
|
|
4
|
+
class BaseFirestoreDateAdapter {
|
|
5
|
+
isTimestamp(v) {
|
|
6
|
+
const res = v instanceof this.Timestamp;
|
|
7
|
+
return res;
|
|
8
|
+
}
|
|
9
|
+
;
|
|
10
|
+
toFirestore(data) {
|
|
11
|
+
return Object.entries(data).reduce((pre, [k, v]) => (Object.assign(Object.assign({}, pre), { [k]: this.isDate(v) ? this.fromDateToTimestamp(v) : v })), {});
|
|
12
|
+
}
|
|
13
|
+
fromFirestore(data) {
|
|
14
|
+
return Object.entries(data).reduce((pre, [k, v]) => (Object.assign(Object.assign({}, pre), { [k]: this.isTimestamp(v) ? this.fromTimestampToDate(v) : v })), {});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.BaseFirestoreDateAdapter = BaseFirestoreDateAdapter;
|
|
18
|
+
class FirestoreDateAdapter extends BaseFirestoreDateAdapter {
|
|
19
|
+
isDate(v) {
|
|
20
|
+
return v instanceof Date;
|
|
21
|
+
}
|
|
22
|
+
fromTimestampToDate(timestamp) {
|
|
23
|
+
return timestamp.toDate();
|
|
24
|
+
}
|
|
25
|
+
fromDateToTimestamp(date) {
|
|
26
|
+
return this.Timestamp.fromDate(date);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.FirestoreDateAdapter = FirestoreDateAdapter;
|
|
30
|
+
//# sourceMappingURL=date.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.adapter.js","sourceRoot":"","sources":["../../../../../libs/firestore/src/common/adapters/date.adapter.ts"],"names":[],"mappings":";;;AAEA,MAAsB,wBAAwB;IAMlC,WAAW,CAAC,CAAM;QAC1B,MAAM,GAAG,GAAG,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC;QACxC,OAAO,GAAG,CAAC;IACb,CAAC;IAAA,CAAC;IAEF,WAAW,CAAI,IAAO;QACpB,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iCAC/C,GAAG,KAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAC7D,EAAE,EAAyB,CAAC,CAAC;IACjC,CAAC;IAED,aAAa,CAAI,IAAyB;QACxC,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iCAC/C,GAAG,KAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAClE,EAAE,EAAO,CAAC,CAAC;IACf,CAAC;CACF;AAtBD,4DAsBC;AAED,MAAsB,oBAAqB,SAAQ,wBAA8B;IACrE,MAAM,CAAC,CAAM;QACrB,OAAO,CAAC,YAAY,IAAI,CAAC;IAC3B,CAAC;IAED,mBAAmB,CAAC,SAAoB;QACtC,OAAO,SAAS,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,mBAAmB,CAAC,IAAU;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;CACF;AAZD,oDAYC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.adapter.js","sourceRoot":"","sources":["../../../../../libs/firestore/src/common/adapters/fields.adapter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CommonFirestoreCollection, CommonFirestoreCollectionGroup, CommonFirestoreDocument } from "../interfaces";
|
|
2
|
+
export interface FirestoreAdapter {
|
|
3
|
+
doc: <Data>(path: string) => CommonFirestoreDocument<Data>;
|
|
4
|
+
collection: <Data>(path: string) => CommonFirestoreCollection<Data>;
|
|
5
|
+
collectionGroup: <Data>(path: string) => CommonFirestoreCollectionGroup<Data>;
|
|
6
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firestore.adapter.js","sourceRoot":"","sources":["../../../../../libs/firestore/src/common/adapters/firestore.adapter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./date.adapter"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./fields.adapter"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./firestore.adapter"), exports);
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/firestore/src/common/adapters/index.ts"],"names":[],"mappings":";;;AAAA,yDAA+B;AAC/B,2DAAiC;AACjC,8DAAoC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Dayjs } from 'dayjs';
|
|
2
|
+
import { DocumentSnapshot } from './interfaces';
|
|
3
|
+
export declare type DomainLangMap<Entity> = Partial<{
|
|
4
|
+
[K in keyof Entity]: string;
|
|
5
|
+
}>;
|
|
6
|
+
export interface FirestoreEntityConstructor<Entity, FirestoreData> {
|
|
7
|
+
new (): Entity;
|
|
8
|
+
FIELDS: any;
|
|
9
|
+
fromFirestoreDoc: (doc: DocumentSnapshot<any>) => Entity;
|
|
10
|
+
fromFirestoreDocs: (docs: DocumentSnapshot<any>[]) => Entity[];
|
|
11
|
+
}
|
|
12
|
+
export interface FirestoreEntity {
|
|
13
|
+
id: string | null;
|
|
14
|
+
createdAt: Dayjs | null;
|
|
15
|
+
updatedAt: Dayjs | null;
|
|
16
|
+
}
|
|
17
|
+
export declare class FirestoreEntity {
|
|
18
|
+
static FIELDS: any;
|
|
19
|
+
static fromObject<T>(obj: object): T;
|
|
20
|
+
static fromFirestoreDoc<T>(doc: DocumentSnapshot<any>): T;
|
|
21
|
+
static fromFirestoreDocs<T>(docs: DocumentSnapshot<any>[]): T[];
|
|
22
|
+
static toObject<T extends object, D>(entity: T): D;
|
|
23
|
+
static toFlattenObject<T extends object, D>(entity: T): D;
|
|
24
|
+
}
|
package/common/entity.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FirestoreEntity = void 0;
|
|
4
|
+
const to_object_1 = require("@nx-ddd/common/utilities/to-object");
|
|
5
|
+
const dayjs_1 = require("dayjs");
|
|
6
|
+
const lodash_1 = require("lodash");
|
|
7
|
+
const flat_1 = require("flat");
|
|
8
|
+
class FirestoreEntity {
|
|
9
|
+
static fromObject(obj) {
|
|
10
|
+
return Object.assign(new this(), obj);
|
|
11
|
+
}
|
|
12
|
+
static fromFirestoreDoc(doc) {
|
|
13
|
+
return this.fromObject(Object.assign(Object.assign({}, doc.data()), { id: doc.id }));
|
|
14
|
+
}
|
|
15
|
+
static fromFirestoreDocs(docs) {
|
|
16
|
+
return docs.map(doc => this.fromFirestoreDoc(doc));
|
|
17
|
+
}
|
|
18
|
+
static toObject(entity) {
|
|
19
|
+
return to_object_1.toObject(entity);
|
|
20
|
+
}
|
|
21
|
+
static toFlattenObject(entity) {
|
|
22
|
+
const keys = Object.entries(entity).filter(([_, v]) => dayjs_1.isDayjs(v)).map(([k]) => k);
|
|
23
|
+
return Object.assign(Object.assign({}, flat_1.flatten(this.toObject(lodash_1.omit(entity, keys)))), this.toObject(lodash_1.pick(entity, keys)));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.FirestoreEntity = FirestoreEntity;
|
|
27
|
+
//# sourceMappingURL=entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../../../libs/firestore/src/common/entity.ts"],"names":[],"mappings":";;;AAAA,kEAA8D;AAC9D,iCAAuC;AACvC,mCAAoC;AACpC,+BAA+B;AAuB/B,MAAa,eAAe;IAG1B,MAAM,CAAC,UAAU,CAAI,GAAW;QAC9B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAe,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAI,GAA0B;QACnD,OAAO,IAAI,CAAC,UAAU,iCAAK,GAAG,CAAC,IAAI,EAAE,KAAE,EAAE,EAAE,GAAG,CAAC,EAAE,IAAE,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAI,IAA6B;QACvD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAQ,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,QAAQ,CAAsB,MAAS;QAC5C,OAAO,oBAAQ,CAAC,MAAM,CAAe,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,eAAe,CAAsB,MAAS;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACnF,OAAO,gCACF,cAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,GAC1C,IAAI,CAAC,QAAQ,CAAC,aAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAChC,CAAC;IACT,CAAC;CACF;AA1BD,0CA0BC"}
|
package/common/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./adapters"), exports);
|
|
5
|
+
// export * from './utilities';
|
|
6
|
+
tslib_1.__exportStar(require("./entity"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./interfaces"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./repository"), exports);
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/firestore/src/common/index.ts"],"names":[],"mappings":";;;AAAA,qDAA2B;AAC3B,+BAA+B;AAC/B,mDAAyB;AACzB,uDAA6B;AAC7B,uDAA6B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
export interface GetOptions {
|
|
3
|
+
readonly source?: 'default' | 'server' | 'cache';
|
|
4
|
+
}
|
|
5
|
+
export interface DocumentChangeAction<T> {
|
|
6
|
+
type: any;
|
|
7
|
+
payload: {
|
|
8
|
+
doc: DocumentSnapshot<T>;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export interface DocumentSnapshot<T> {
|
|
12
|
+
id: string;
|
|
13
|
+
ref: {
|
|
14
|
+
path: string;
|
|
15
|
+
};
|
|
16
|
+
data: () => T;
|
|
17
|
+
}
|
|
18
|
+
export interface QuerySnapshot<T> {
|
|
19
|
+
docs: DocumentSnapshot<T>[];
|
|
20
|
+
}
|
|
21
|
+
export interface Timestamp {
|
|
22
|
+
readonly seconds: number;
|
|
23
|
+
readonly nanoseconds: number;
|
|
24
|
+
toDate(): Date;
|
|
25
|
+
toMillis(): number;
|
|
26
|
+
isEqual(other: Timestamp): boolean;
|
|
27
|
+
valueOf(): string;
|
|
28
|
+
}
|
|
29
|
+
export interface TimestampConstructor {
|
|
30
|
+
new (seconds: number, nanoseconds: number): Timestamp;
|
|
31
|
+
now(): Timestamp;
|
|
32
|
+
fromDate(date: Date): Timestamp;
|
|
33
|
+
fromMillis(milliseconds: number): Timestamp;
|
|
34
|
+
}
|
|
35
|
+
export declare type FieldValue = any;
|
|
36
|
+
export declare type FirestoreData<T, D> = {
|
|
37
|
+
[K in keyof T]: T[K] extends D ? Timestamp | FieldValue : T[K];
|
|
38
|
+
};
|
|
39
|
+
export interface CommonFirestoreDocument<Data> {
|
|
40
|
+
__ref?: any;
|
|
41
|
+
set(data: Data, options?: any): Promise<void>;
|
|
42
|
+
get(): Observable<DocumentSnapshot<Data>>;
|
|
43
|
+
}
|
|
44
|
+
export interface CommonFirestoreCollection<Data> {
|
|
45
|
+
stateChanges(): Observable<DocumentChangeAction<Data>[]>;
|
|
46
|
+
get(options?: GetOptions): Observable<QuerySnapshot<Data>>;
|
|
47
|
+
}
|
|
48
|
+
export interface CommonFirestoreCollectionGroup<Data> {
|
|
49
|
+
stateChanges(): Observable<DocumentChangeAction<Data>[]>;
|
|
50
|
+
get(options?: GetOptions): Observable<QuerySnapshot<Data>>;
|
|
51
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../libs/firestore/src/common/interfaces.ts"],"names":[],"mappings":";;AAmBC,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { FirestoreEntityConstructor } from './entity';
|
|
3
|
+
import { CommonFirestoreCollection, CommonFirestoreCollectionGroup, CommonFirestoreDocument, DocumentSnapshot } from './interfaces';
|
|
4
|
+
import { BaseFirestoreDateAdapter, FirestoreAdapter, FirestoreFieldsAdapter } from './adapters';
|
|
5
|
+
export declare abstract class CommonFirestoreRepository<Entity extends {
|
|
6
|
+
id: string;
|
|
7
|
+
}, Data extends object, Date> {
|
|
8
|
+
private _firestore;
|
|
9
|
+
private _fields;
|
|
10
|
+
private _date;
|
|
11
|
+
protected abstract Entity: FirestoreEntityConstructor<Entity, Data>;
|
|
12
|
+
protected abstract buildCollectionPath: (paramMap?: Partial<Entity>) => string;
|
|
13
|
+
protected abstract buildCollectionGroupPath: (paramMap?: Partial<Entity>) => string;
|
|
14
|
+
protected abstract buildDocPath: (paramMap: Partial<Entity>) => string;
|
|
15
|
+
constructor(_firestore: FirestoreAdapter, _fields: FirestoreFieldsAdapter, _date: BaseFirestoreDateAdapter<Date>);
|
|
16
|
+
private _list$;
|
|
17
|
+
get list$(): Observable<Entity[]>;
|
|
18
|
+
getV2(_id: string): Observable<Entity>;
|
|
19
|
+
listV2(): Observable<Entity[]>;
|
|
20
|
+
listChanges(): Observable<Entity[]>;
|
|
21
|
+
changes({ id }: Partial<Entity>): Observable<Entity>;
|
|
22
|
+
list(paramMap?: Partial<Entity>): Observable<Entity[]>;
|
|
23
|
+
get(paramMap: Partial<Entity>): Observable<Entity>;
|
|
24
|
+
save(entity: Entity): Promise<[Entity, boolean]>;
|
|
25
|
+
create(entity: Entity): Promise<Entity>;
|
|
26
|
+
update(entity: Entity): Promise<void>;
|
|
27
|
+
protected genId: () => string;
|
|
28
|
+
protected collection(paramMap?: Partial<Entity>): CommonFirestoreCollection<Data>;
|
|
29
|
+
protected collectionGroup(paramMap?: Partial<Entity>): CommonFirestoreCollectionGroup<Data>;
|
|
30
|
+
protected doc(paramMap: Partial<Entity>): CommonFirestoreDocument<Data>;
|
|
31
|
+
protected _listChanges(collection: CommonFirestoreCollection<Data> | CommonFirestoreCollectionGroup<Data>): Observable<Entity[]>;
|
|
32
|
+
protected _list(collection: CommonFirestoreCollection<Data>): Observable<Entity[]>;
|
|
33
|
+
protected _get(doc: CommonFirestoreDocument<Data>): Observable<Entity>;
|
|
34
|
+
protected _save(doc: CommonFirestoreDocument<Data>, entity: Entity): Promise<[Entity, boolean]>;
|
|
35
|
+
protected _create(doc: CommonFirestoreDocument<Data>, entity: Entity): Promise<Entity>;
|
|
36
|
+
protected _update(doc: CommonFirestoreDocument<Data>, entity: Entity): Promise<void>;
|
|
37
|
+
protected _set(doc: CommonFirestoreDocument<Data>, entity: Entity, isUpdate?: boolean): Promise<DocumentSnapshot<Data>>;
|
|
38
|
+
protected buildServerTimestampObject(keys?: string[]): {};
|
|
39
|
+
protected get converter(): {
|
|
40
|
+
fromFirestore: (doc: DocumentSnapshot<Data>) => Entity;
|
|
41
|
+
toFirestore: (entity: Entity) => Data;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommonFirestoreRepository = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const generate_id_1 = require("@nx-ddd/firestore/common/utilities/generate-id");
|
|
6
|
+
const operators_1 = require("rxjs/operators");
|
|
7
|
+
const lodash_1 = require("lodash");
|
|
8
|
+
const action = (map, type, entity) => type === 'removed'
|
|
9
|
+
? (map.delete(entity.id), map)
|
|
10
|
+
: map.set(entity.id, entity);
|
|
11
|
+
const toPromise = callback => new Promise((resolve, reject) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
12
|
+
try {
|
|
13
|
+
resolve(callback());
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
reject(error);
|
|
17
|
+
}
|
|
18
|
+
}));
|
|
19
|
+
class CommonFirestoreRepository {
|
|
20
|
+
constructor(_firestore, _fields, _date) {
|
|
21
|
+
this._firestore = _firestore;
|
|
22
|
+
this._fields = _fields;
|
|
23
|
+
this._date = _date;
|
|
24
|
+
this.genId = () => generate_id_1.generateId();
|
|
25
|
+
}
|
|
26
|
+
get list$() {
|
|
27
|
+
var _a;
|
|
28
|
+
return (_a = this._list$) !== null && _a !== void 0 ? _a : (this._list$ = this.listChanges().pipe(operators_1.shareReplay(1)));
|
|
29
|
+
}
|
|
30
|
+
getV2(_id) {
|
|
31
|
+
return this.listV2().pipe(operators_1.map(entities => entities.find(({ id }) => id === _id)));
|
|
32
|
+
}
|
|
33
|
+
listV2() {
|
|
34
|
+
return this.list$.pipe(operators_1.take(1));
|
|
35
|
+
}
|
|
36
|
+
listChanges() {
|
|
37
|
+
return this._listChanges(this.collection());
|
|
38
|
+
}
|
|
39
|
+
changes({ id }) {
|
|
40
|
+
return this.list$.pipe(operators_1.map(entities => entities.find(entity => entity.id === id)), operators_1.distinctUntilChanged((pre, cur) => JSON.stringify(pre) === JSON.stringify(cur)));
|
|
41
|
+
}
|
|
42
|
+
list(paramMap) {
|
|
43
|
+
return this._list(this.collection(paramMap));
|
|
44
|
+
}
|
|
45
|
+
get(paramMap) {
|
|
46
|
+
return this._get(this.doc(paramMap));
|
|
47
|
+
}
|
|
48
|
+
save(entity) {
|
|
49
|
+
// TODO(nontangent): なんでここの型定義でasがいるのか考える。
|
|
50
|
+
return this._save(this.doc({ id: entity.id || this.genId() }), entity);
|
|
51
|
+
}
|
|
52
|
+
create(entity) {
|
|
53
|
+
const id = (entity === null || entity === void 0 ? void 0 : entity.id) || this.genId();
|
|
54
|
+
return toPromise(() => this.doc(Object.assign(Object.assign({}, entity), { id }))).then(doc => this._create(doc, entity));
|
|
55
|
+
}
|
|
56
|
+
update(entity) {
|
|
57
|
+
return toPromise(() => this.doc(entity)).then(doc => this._update(doc, entity));
|
|
58
|
+
}
|
|
59
|
+
collection(paramMap) {
|
|
60
|
+
const path = this.buildCollectionPath(paramMap);
|
|
61
|
+
return this._firestore.collection(path);
|
|
62
|
+
}
|
|
63
|
+
collectionGroup(paramMap) {
|
|
64
|
+
const path = this.buildCollectionGroupPath(paramMap);
|
|
65
|
+
return this._firestore.collectionGroup(path);
|
|
66
|
+
}
|
|
67
|
+
doc(paramMap) {
|
|
68
|
+
const path = this.buildDocPath(paramMap);
|
|
69
|
+
return this._firestore.doc(path);
|
|
70
|
+
}
|
|
71
|
+
_listChanges(collection) {
|
|
72
|
+
return collection.stateChanges().pipe(operators_1.scan((map, actions) => actions.reduce((_map, { type, payload: { doc } }) => {
|
|
73
|
+
return action(_map, type, this.converter.fromFirestore(doc));
|
|
74
|
+
}, map), new Map()), operators_1.map(map => [...map.values()]));
|
|
75
|
+
}
|
|
76
|
+
_list(collection) {
|
|
77
|
+
return collection.get()
|
|
78
|
+
.pipe(operators_1.map(({ docs }) => docs.map(doc => this.converter.fromFirestore(doc))));
|
|
79
|
+
}
|
|
80
|
+
_get(doc) {
|
|
81
|
+
return doc.get().pipe(operators_1.map(doc => this.converter.fromFirestore(doc)));
|
|
82
|
+
}
|
|
83
|
+
_save(doc, entity) {
|
|
84
|
+
return this._set(doc, entity, !(entity === null || entity === void 0 ? void 0 : entity.id))
|
|
85
|
+
.then(doc => this.converter.fromFirestore(doc)).then(e => [e, !!(entity === null || entity === void 0 ? void 0 : entity.id)]);
|
|
86
|
+
}
|
|
87
|
+
_create(doc, entity) {
|
|
88
|
+
return this._set(doc, entity, false).then(doc => this.converter.fromFirestore(doc));
|
|
89
|
+
}
|
|
90
|
+
_update(doc, entity) {
|
|
91
|
+
return this._set(doc, entity, true).then(() => { });
|
|
92
|
+
}
|
|
93
|
+
_set(doc, entity, isUpdate = true) {
|
|
94
|
+
return doc.set(Object.assign(Object.assign({}, this.converter.toFirestore(entity)), this.buildServerTimestampObject(isUpdate ? ['updatedAt'] : undefined))).then(() => doc.get().toPromise());
|
|
95
|
+
}
|
|
96
|
+
buildServerTimestampObject(keys = ['createdAt', 'updatedAt']) {
|
|
97
|
+
return keys.reduce((m, k) => (Object.assign(Object.assign({}, m), { [k]: this._fields.FieldValue.serverTimestamp() })), {});
|
|
98
|
+
}
|
|
99
|
+
get converter() {
|
|
100
|
+
return {
|
|
101
|
+
fromFirestore: (doc) => {
|
|
102
|
+
const data = this.Entity.fromFirestoreDoc(({
|
|
103
|
+
id: doc.id, ref: { path: doc.ref.path },
|
|
104
|
+
data: () => this._date.fromFirestore(doc.data()),
|
|
105
|
+
}));
|
|
106
|
+
return data;
|
|
107
|
+
},
|
|
108
|
+
toFirestore: (entity) => {
|
|
109
|
+
const data = lodash_1.pick(this._date.toFirestore(entity), this.Entity.FIELDS);
|
|
110
|
+
return data;
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.CommonFirestoreRepository = CommonFirestoreRepository;
|
|
116
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../../libs/firestore/src/common/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const generateId: (n?: number) => string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateId = void 0;
|
|
4
|
+
const defaultOptions = {
|
|
5
|
+
letters: true,
|
|
6
|
+
upperCase: true,
|
|
7
|
+
numbers: true,
|
|
8
|
+
symbols: false,
|
|
9
|
+
};
|
|
10
|
+
const CHARACTERS = {
|
|
11
|
+
letters: 'abcdefghijklmnopqrstuvwxyz',
|
|
12
|
+
upperCase: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
|
|
13
|
+
numbers: '0123456789',
|
|
14
|
+
symbols: '!#$%&()',
|
|
15
|
+
};
|
|
16
|
+
const generateRandomString = (n, options = defaultOptions) => {
|
|
17
|
+
const characters = Object.entries(CHARACTERS).filter(([k]) => options[k]).map(([_, v]) => v).join('');
|
|
18
|
+
const genChar = () => characters.charAt(Math.floor(Math.random() * characters.length));
|
|
19
|
+
return [...Array(n)].map(() => genChar()).join('');
|
|
20
|
+
};
|
|
21
|
+
exports.generateId = (n = 20) => generateRandomString(n);
|
|
22
|
+
//# sourceMappingURL=generate-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-id.js","sourceRoot":"","sources":["../../../../../libs/firestore/src/common/utilities/generate-id.ts"],"names":[],"mappings":";;;AAOA,MAAM,cAAc,GAAY;IAC9B,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,KAAK;CACf,CAAA;AAED,MAAM,UAAU,GAAG;IACjB,OAAO,EAAE,4BAA4B;IACrC,SAAS,EAAE,4BAA4B;IACvC,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,CAAS,EAAE,UAAmB,cAAc,EAAU,EAAE;IACpF,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtG,MAAM,OAAO,GAAG,GAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAE/F,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrD,CAAC,CAAA;AAEY,QAAA,UAAU,GAAG,CAAC,IAAY,EAAE,EAAU,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as dayjs from "dayjs";
|
|
2
|
+
import { BaseFirestoreDateAdapter, Timestamp } from "../common";
|
|
3
|
+
export declare abstract class FirestoreDayJsAdapter extends BaseFirestoreDateAdapter<dayjs.Dayjs> {
|
|
4
|
+
isDate(v: any): v is dayjs.Dayjs;
|
|
5
|
+
fromTimestampToDate(timestamp: Timestamp): dayjs.Dayjs;
|
|
6
|
+
fromDateToTimestamp(date: dayjs.Dayjs): Timestamp;
|
|
7
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FirestoreDayJsAdapter = void 0;
|
|
4
|
+
const dayjs = require("dayjs");
|
|
5
|
+
const common_1 = require("../common");
|
|
6
|
+
class FirestoreDayJsAdapter extends common_1.BaseFirestoreDateAdapter {
|
|
7
|
+
isDate(v) {
|
|
8
|
+
return dayjs.isDayjs(v);
|
|
9
|
+
}
|
|
10
|
+
fromTimestampToDate(timestamp) {
|
|
11
|
+
return dayjs(timestamp.toDate());
|
|
12
|
+
}
|
|
13
|
+
fromDateToTimestamp(date) {
|
|
14
|
+
return this.Timestamp.fromDate(date.toDate());
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.FirestoreDayJsAdapter = FirestoreDayJsAdapter;
|
|
18
|
+
//# sourceMappingURL=dayjs.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dayjs.adapter.js","sourceRoot":"","sources":["../../../../libs/firestore/src/dayjs/dayjs.adapter.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,sCAAgE;AAEhE,MAAsB,qBAAsB,SAAQ,iCAAqC;IACvF,MAAM,CAAC,CAAM;QACX,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,mBAAmB,CAAC,SAAoB;QACtC,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,mBAAmB,CAAC,IAAiB;QACnC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;CACF;AAZD,sDAYC"}
|
package/dayjs/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './dayjs.adapter';
|
package/dayjs/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/firestore/src/dayjs/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { FirebaseFirestoreService } from '@aginix/nestjs-firebase-admin';
|
|
2
|
+
import { CommonFirestoreDocument, CommonFirestoreCollection, CommonFirestoreCollectionGroup } from '../common/interfaces';
|
|
3
|
+
import { AdminFirestoreAdapter } from '../admin/interfaces';
|
|
4
|
+
export declare const convertDocRef: <Data>(docRef: FirebaseFirestore.DocumentReference<Data>) => CommonFirestoreDocument<Data>;
|
|
5
|
+
export declare const convertCollectionRef: <Data>(collectionRef: FirebaseFirestore.CollectionReference<Data>) => CommonFirestoreCollection<Data>;
|
|
6
|
+
export declare const convertCollectionGroupRef: <Data>(collectionRef: FirebaseFirestore.CollectionGroup<Data>) => CommonFirestoreCollectionGroup<Data>;
|
|
7
|
+
export declare class NestFirestoreAdapter<Data> implements AdminFirestoreAdapter<Data> {
|
|
8
|
+
nestFire: FirebaseFirestoreService;
|
|
9
|
+
constructor(nestFire: FirebaseFirestoreService);
|
|
10
|
+
doc: <Data_1>(path: string) => CommonFirestoreDocument<Data_1>;
|
|
11
|
+
collection: <Data_1>(path: string) => CommonFirestoreCollection<Data_1>;
|
|
12
|
+
collectionGroup: <Data_1>(path: string) => CommonFirestoreCollectionGroup<Data_1>;
|
|
13
|
+
bulkWriter: () => {
|
|
14
|
+
update: (doc: CommonFirestoreDocument<Data>, data: Data) => void;
|
|
15
|
+
close: () => Promise<void>;
|
|
16
|
+
};
|
|
17
|
+
}
|
package/nest/adapter.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NestFirestoreAdapter = exports.convertCollectionGroupRef = exports.convertCollectionRef = exports.convertDocRef = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
exports.convertDocRef = (docRef) => {
|
|
6
|
+
return {
|
|
7
|
+
__ref: docRef,
|
|
8
|
+
set: (data, options) => {
|
|
9
|
+
return docRef.set(data, options).then(() => { });
|
|
10
|
+
},
|
|
11
|
+
get: () => rxjs_1.from(docRef.get())
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
exports.convertCollectionRef = (collectionRef) => {
|
|
15
|
+
return {
|
|
16
|
+
stateChanges: () => rxjs_1.of(),
|
|
17
|
+
get: () => rxjs_1.from(collectionRef.get()),
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
exports.convertCollectionGroupRef = (collectionRef) => {
|
|
21
|
+
return {
|
|
22
|
+
stateChanges: () => rxjs_1.of(),
|
|
23
|
+
get: () => rxjs_1.from(collectionRef.get()),
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
class NestFirestoreAdapter {
|
|
27
|
+
constructor(nestFire) {
|
|
28
|
+
this.nestFire = nestFire;
|
|
29
|
+
this.doc = (path) => exports.convertDocRef(this.nestFire.doc(path));
|
|
30
|
+
this.collection = (path) => exports.convertCollectionRef(this.nestFire.collection(path));
|
|
31
|
+
this.collectionGroup = (path) => exports.convertCollectionGroupRef(this.nestFire.collectionGroup(path));
|
|
32
|
+
this.bulkWriter = () => ({
|
|
33
|
+
update: (doc, data) => {
|
|
34
|
+
this.nestFire.bulkWriter().update(doc.__ref, data);
|
|
35
|
+
},
|
|
36
|
+
close: () => this.nestFire.bulkWriter().close(),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.NestFirestoreAdapter = NestFirestoreAdapter;
|
|
41
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../libs/firestore/src/nest/adapter.ts"],"names":[],"mappings":";;;AACA,+BAA4C;AAS/B,QAAA,aAAa,GAAG,CAC3B,MAAiD,EAClB,EAAE;IACjC,OAAO;QACL,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,CAAC,IAAU,EAAE,OAAa,EAAiB,EAAE;YAChD,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,GAAG,EAAE,GAAuC,EAAE,CAAC,WAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;KAClE,CAAA;AACH,CAAC,CAAA;AAEY,QAAA,oBAAoB,GAAG,CAClC,aAA0D,EACzB,EAAE;IACnC,OAAO;QACL,YAAY,EAAE,GAA6C,EAAE,CAAC,SAAE,EAAE;QAClE,GAAG,EAAE,GAAoC,EAAE,CAAC,WAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;KACtE,CAAA;AACH,CAAC,CAAA;AAEY,QAAA,yBAAyB,GAAG,CACvC,aAAsD,EAChB,EAAE;IACxC,OAAO;QACL,YAAY,EAAE,GAA6C,EAAE,CAAC,SAAE,EAAE;QAClE,GAAG,EAAE,GAAoC,EAAE,CAAC,WAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;KACtE,CAAA;AACH,CAAC,CAAA;AAED,MAAa,oBAAoB;IAC/B,YAAmB,QAAkC;QAAlC,aAAQ,GAAR,QAAQ,CAA0B;QAErD,QAAG,GAAG,CAAO,IAAY,EAAE,EAAE,CAAC,qBAAa,CAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAQ,CAAC,CAAC;QAClF,eAAU,GAAG,CAAO,IAAY,EAAE,EAAE,CAAC,4BAAoB,CAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAQ,CAAC,CAAC;QACvG,oBAAe,GAAG,CAAO,IAAY,EAAE,EAAE,CAAC,iCAAyB,CAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAQ,CAAC,CAAC;QACtH,eAAU,GAAG,GAAG,EAAE,CAAC,CAAC;YAClB,MAAM,EAAE,CAAC,GAAkC,EAAE,IAAW,EAAE,EAAE;gBAC1D,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YACpD,CAAC;YACD,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE;SAChD,CAAC,CAAC;IAVsD,CAAC;CAW3D;AAZD,oDAYC"}
|
package/nest/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './repository';
|
package/nest/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/firestore/src/nest/index.ts"],"names":[],"mappings":";;;AAAA,uDAA6B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as dayjs from 'dayjs';
|
|
2
|
+
import { CommonFirestoreRepository } from '../common/repository';
|
|
3
|
+
import { AdminFirestoreAdapter } from '../admin/interfaces';
|
|
4
|
+
export declare abstract class AdminFirestoreRepository<Entity extends {
|
|
5
|
+
id: string;
|
|
6
|
+
}, Data extends object> extends CommonFirestoreRepository<Entity, Data, dayjs.Dayjs> {
|
|
7
|
+
protected firestore: AdminFirestoreAdapter<Data>;
|
|
8
|
+
constructor(firestore: AdminFirestoreAdapter<Data>);
|
|
9
|
+
bulkUpdate(entities: (Partial<Entity>)[]): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AdminFirestoreRepository = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const repository_1 = require("../common/repository");
|
|
6
|
+
const admin_1 = require("../admin");
|
|
7
|
+
class AdminFirestoreRepository extends repository_1.CommonFirestoreRepository {
|
|
8
|
+
constructor(firestore) {
|
|
9
|
+
super(firestore, new admin_1.FieldsFirestoreAdapter(), new admin_1.FirestoreDayJsAdapter());
|
|
10
|
+
this.firestore = firestore;
|
|
11
|
+
}
|
|
12
|
+
;
|
|
13
|
+
bulkUpdate(entities) {
|
|
14
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
15
|
+
return entities.reduce((bulkWriter, entity) => {
|
|
16
|
+
const path = this.buildDocPath(entity);
|
|
17
|
+
const doc = this.firestore.doc(path);
|
|
18
|
+
this.firestore.bulkWriter();
|
|
19
|
+
bulkWriter.update(doc, Object.assign(Object.assign({}, this.converter.toFirestore(entity)), this.buildServerTimestampObject(['updatedAt'])));
|
|
20
|
+
return bulkWriter;
|
|
21
|
+
}, this.firestore.bulkWriter()).close();
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.AdminFirestoreRepository = AdminFirestoreRepository;
|
|
26
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../../libs/firestore/src/nest/repository.ts"],"names":[],"mappings":";;;;AACA,qDAAiE;AAGjE,oCAAyE;AAEzE,MAAsB,wBAGpB,SAAQ,sCAAoD;IAE5D,YAAsB,SAAsC;QAC1D,KAAK,CAAC,SAAS,EAAE,IAAI,8BAAsB,EAAE,EAAE,IAAI,6BAAqB,EAAE,CAAC,CAAC;QADxD,cAAS,GAAT,SAAS,CAA6B;IAE5D,CAAC;IAAA,CAAC;IAEI,UAAU,CAAC,QAA6B;;YAC5C,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE;gBAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAO,IAAI,CAAC,CAAC;gBAG3C,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAA;gBAG3B,UAAU,CAAC,MAAM,CAAC,GAAG,kCAEhB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAgB,CAAC,GAC5C,IAAI,CAAC,0BAA0B,CAAC,CAAC,WAAW,CAAC,CAAC,EACjD,CAAC;gBACH,OAAO,UAAU,CAAC;YACpB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC1C,CAAC;KAAA;CACF;AA1BD,4DA0BC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@nx-ddd/firestore",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"main": "src/index.js",
|
|
5
|
+
"typings": "src/index.d.ts",
|
|
6
|
+
"dependencies": {},
|
|
7
|
+
"peerDependencies": {
|
|
8
|
+
"firebase-admin": "^9.12.0",
|
|
9
|
+
"rxjs": "~6.6.3",
|
|
10
|
+
"firebase": "^8.10.1",
|
|
11
|
+
"@angular/fire": "6.1",
|
|
12
|
+
"@nx-ddd/common": "0.0.1",
|
|
13
|
+
"@aginix/nestjs-firebase-admin": "^2.2.0"
|
|
14
|
+
}
|
|
15
|
+
}
|