@nx-ddd/firestore 19.34.0 → 19.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"nx-ddd-firestore-adapters-admin.mjs","sources":["../../../../../packages/@nx-ddd/firestore/src/lib/adapters/admin/admin.adapter.ts","../../../../../packages/@nx-ddd/firestore/src/lib/adapters/admin/nx-ddd-firestore-adapters-admin.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport admin from 'firebase-admin';\nimport { Subject } from 'rxjs';\nimport { DocumentData, Transaction } from 'firebase-admin/firestore';\nimport {\n DocumentChangeAction,\n DocumentReference,\n CollectionReference as _CollectionReference,\n CollectionGroup as _CollectionGroup,\n Query as _Query } from '@nx-ddd/firestore';\nimport { FirestoreAdapter, QueryFn as _QueryFn, WhereFilterOp, provideFirestoreAdapter as _provideFirestoreAdapter } from '@nx-ddd/firestore';\n\ntype CollectionReference<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n> = _CollectionReference<AppModelType, DbModelType, admin.firestore.CollectionReference<AppModelType, DbModelType>>;\n\ntype CollectionGroup<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n> = _CollectionGroup<AppModelType, DbModelType, admin.firestore.CollectionGroup<AppModelType, DbModelType>>;\n\ntype Query<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n> = _Query<AppModelType, DbModelType, admin.firestore.Query<AppModelType, DbModelType>>;\n\ntype QueryFn<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n> = _QueryFn<AppModelType, DbModelType, admin.firestore.Query>\n\ntype Origin<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n> = admin.firestore.CollectionReference<AppModelType, DbModelType>\n | admin.firestore.CollectionGroup<AppModelType, DbModelType>\n | admin.firestore.Query<AppModelType, DbModelType>;\n\ntype CollectionLike<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n> = CollectionReference<AppModelType, DbModelType> \n | CollectionGroup<AppModelType, DbModelType>\n | Query<AppModelType, DbModelType>;\n\n// Utility type to map Origin to CollectionLike\ntype InferCollectionLike<O extends Origin> = \n O extends admin.firestore.CollectionReference<infer A, infer B> ? CollectionReference<A, B> :\n O extends admin.firestore.CollectionGroup<infer A, infer B> ? CollectionGroup<A, B> :\n O extends admin.firestore.Query<infer A, infer B> ? Query<A, B> :\n never;\n\nexport function wrapCollectionLike<O extends Origin>(origin: O): InferCollectionLike<O> {\n return {\n __ref: origin,\n stateChanges: () => {\n const subject = new Subject<DocumentChangeAction<any>[]>();\n origin.onSnapshot(snapshot => {\n const actions = snapshot.docChanges().map(change => ({\n type: change.type, payload: {doc: change.doc},\n }));\n subject.next(actions);\n });\n return subject.asObservable();\n },\n get: () => origin.get(),\n count: () => origin.get().then(snapshot => snapshot.size),\n } as never as InferCollectionLike<O>;\n}\n\nexport function unwrapCollectionLike<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n>(\n collection: CollectionLike<AppModelType, DbModelType>\n): Origin<AppModelType, DbModelType> {\n return collection.__ref;\n}\n\n@Injectable()\nexport class AdminFirestoreAdapter<Date> extends FirestoreAdapter<Date> {\n protected firestore = admin.firestore();\n\n get FieldValue(): typeof admin.firestore.FieldValue {\n return admin.firestore.FieldValue; \n }\n\n get Timestamp(): typeof admin.firestore.Timestamp {\n return admin.firestore.Timestamp; \n }\n\n get FieldPath(): typeof admin.firestore.FieldPath {\n return admin.firestore.FieldPath;\n }\n\n protected isTimestamp(v: any): v is admin.firestore.Timestamp {\n return v instanceof this.Timestamp;\n }\n\n protected isFieldValue(v: any): v is admin.firestore.FieldValue {\n return v instanceof this.FieldValue;\n }\n\n convertDateToTimestamp(date: Date): admin.firestore.Timestamp {\n if (this.dateAdapter.isDate(date) && this.dateAdapter.isValid(date)) {\n return admin.firestore.Timestamp.fromDate(this.dateAdapter.getJsDate(date));\n }\n throw new Error(`Invalid date: ${date}`);\n }\n\n doc(path: string): DocumentReference<any, admin.firestore.DocumentReference> {\n const docRef = this.firestore.doc(path);\n return {\n __ref: docRef,\n exists: () => docRef.get().then(snapshot => snapshot.exists),\n set: (data, options?) => docRef.set(data, options),\n get: () => docRef.get(),\n update: (data) => docRef.update(data),\n delete: () => docRef.delete(),\n };\n }\n\n collection<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(path: string): CollectionReference<AppModelType, DbModelType> {\n const collectionRef = this.firestore.collection(path);\n return wrapCollectionLike(collectionRef) as CollectionReference<AppModelType, DbModelType>;\n }\n\n collectionGroup<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(collectionId: string): CollectionGroup<AppModelType, DbModelType> {\n const collectionRef = this.firestore.collectionGroup(collectionId);\n return wrapCollectionLike(collectionRef) as CollectionGroup<AppModelType, DbModelType>;\n }\n \n runTransaction<T>(updateFunction: (transaction: Transaction) => Promise<T>) {\n return this.firestore.runTransaction(updateFunction);\n }\n\n query<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(\n collection: CollectionLike<AppModelType, DbModelType>,\n ...queryFnArray: QueryFn<AppModelType, DbModelType>[]\n ): Query<AppModelType, DbModelType> {\n const ref = unwrapCollectionLike<AppModelType, DbModelType>(collection);\n const query = queryFnArray.reduce((_ref, queryFn) => queryFn(_ref), ref);\n return wrapCollectionLike(query) as Query<AppModelType, DbModelType>;\n }\n\n where<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(key: string, evaluation: WhereFilterOp, value: unknown): QueryFn<AppModelType, DbModelType> {\n return (collection: Origin<AppModelType, DbModelType>) => collection.where(key, evaluation, value); \n }\n\n orderBy<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(key: string, order: 'asc' | 'desc' = 'asc'): QueryFn<AppModelType, DbModelType> {\n return (collection: Origin<AppModelType, DbModelType>) => collection.orderBy(key, order);\n }\n\n limit<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(n: number): QueryFn<AppModelType, DbModelType> {\n return (collection: Origin<AppModelType, DbModelType>) => collection.limit(n);\n }\n\n batch() {\n return this.firestore.batch();\n }\n}\n\nexport function provideFirestoreAdapter() {\n return _provideFirestoreAdapter(AdminFirestoreAdapter);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_provideFirestoreAdapter"],"mappings":"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"}
1
+ {"version":3,"file":"nx-ddd-firestore-adapters-admin.mjs","sources":["../../../../../packages/@nx-ddd/firestore/src/lib/adapters/admin/admin.adapter.ts","../../../../../packages/@nx-ddd/firestore/src/lib/adapters/admin/nx-ddd-firestore-adapters-admin.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport admin from 'firebase-admin';\nimport { Subject } from 'rxjs';\nimport { DocumentData, Transaction } from 'firebase-admin/firestore';\nimport {\n DocumentChangeAction,\n DocumentReference,\n CollectionReference as _CollectionReference,\n CollectionGroup as _CollectionGroup,\n Query as _Query } from '@nx-ddd/firestore';\nimport { FirestoreAdapter, QueryFn as _QueryFn, WhereFilterOp, provideFirestoreAdapter as _provideFirestoreAdapter } from '@nx-ddd/firestore';\n\ntype CollectionReference<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n> = _CollectionReference<AppModelType, DbModelType, admin.firestore.CollectionReference<AppModelType, DbModelType>>;\n\ntype CollectionGroup<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n> = _CollectionGroup<AppModelType, DbModelType, admin.firestore.CollectionGroup<AppModelType, DbModelType>>;\n\ntype Query<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n> = _Query<AppModelType, DbModelType, admin.firestore.Query<AppModelType, DbModelType>>;\n\ntype QueryFn<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n> = _QueryFn<AppModelType, DbModelType, admin.firestore.Query>\n\ntype Origin<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n> = admin.firestore.CollectionReference<AppModelType, DbModelType>\n | admin.firestore.CollectionGroup<AppModelType, DbModelType>\n | admin.firestore.Query<AppModelType, DbModelType>;\n\ntype CollectionLike<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n> = CollectionReference<AppModelType, DbModelType> \n | CollectionGroup<AppModelType, DbModelType>\n | Query<AppModelType, DbModelType>;\n\n// Utility type to map Origin to CollectionLike\ntype InferCollectionLike<O extends Origin> = \n O extends admin.firestore.CollectionReference<infer A, infer B> ? CollectionReference<A, B> :\n O extends admin.firestore.CollectionGroup<infer A, infer B> ? CollectionGroup<A, B> :\n O extends admin.firestore.Query<infer A, infer B> ? Query<A, B> :\n never;\n\nexport function wrapCollectionLike<O extends Origin>(origin: O): InferCollectionLike<O> {\n return {\n __ref: origin,\n stateChanges: () => {\n const subject = new Subject<DocumentChangeAction<any>[]>();\n origin.onSnapshot(snapshot => {\n const actions = snapshot.docChanges().map(change => ({\n type: change.type, payload: {doc: change.doc},\n }));\n subject.next(actions);\n });\n return subject.asObservable();\n },\n get: () => origin.get(),\n count: () => origin.get().then(snapshot => snapshot.size),\n } as never as InferCollectionLike<O>;\n}\n\nexport function unwrapCollectionLike<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n>(\n collection: CollectionLike<AppModelType, DbModelType>\n): Origin<AppModelType, DbModelType> {\n return collection.__ref!;\n}\n\n@Injectable()\nexport class AdminFirestoreAdapter<Date> extends FirestoreAdapter<Date> {\n protected firestore = admin.firestore();\n\n get FieldValue(): typeof admin.firestore.FieldValue {\n return admin.firestore.FieldValue; \n }\n\n get Timestamp(): typeof admin.firestore.Timestamp {\n return admin.firestore.Timestamp; \n }\n\n get FieldPath(): typeof admin.firestore.FieldPath {\n return admin.firestore.FieldPath;\n }\n\n protected isTimestamp(v: any): v is admin.firestore.Timestamp {\n return v instanceof this.Timestamp;\n }\n\n protected isFieldValue(v: any): v is admin.firestore.FieldValue {\n return v instanceof this.FieldValue;\n }\n\n convertDateToTimestamp(date: Date): admin.firestore.Timestamp {\n if (this.dateAdapter.isDate(date) && this.dateAdapter.isValid(date)) {\n return admin.firestore.Timestamp.fromDate(this.dateAdapter.getJsDate(date));\n }\n throw new Error(`Invalid date: ${date}`);\n }\n\n doc(path: string): DocumentReference<any, admin.firestore.DocumentReference> {\n const docRef = this.firestore.doc(path);\n return {\n __ref: docRef,\n exists: () => docRef.get().then(snapshot => snapshot.exists),\n set: (data, options?) => docRef.set(data, options),\n get: () => docRef.get(),\n update: (data) => docRef.update(data),\n delete: () => docRef.delete(),\n };\n }\n\n collection<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(path: string): CollectionReference<AppModelType, DbModelType> {\n const collectionRef = this.firestore.collection(path);\n return wrapCollectionLike(collectionRef) as CollectionReference<AppModelType, DbModelType>;\n }\n\n collectionGroup<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(collectionId: string): CollectionGroup<AppModelType, DbModelType> {\n const collectionRef = this.firestore.collectionGroup(collectionId);\n return wrapCollectionLike(collectionRef) as CollectionGroup<AppModelType, DbModelType>;\n }\n \n runTransaction<T>(updateFunction: (transaction: Transaction) => Promise<T>) {\n return this.firestore.runTransaction(updateFunction);\n }\n\n query<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(\n collection: CollectionLike<AppModelType, DbModelType>,\n ...queryFnArray: QueryFn<AppModelType, DbModelType>[]\n ): Query<AppModelType, DbModelType> {\n const ref = unwrapCollectionLike<AppModelType, DbModelType>(collection);\n const query = queryFnArray.reduce((_ref, queryFn) => queryFn(_ref), ref);\n return wrapCollectionLike(query) as Query<AppModelType, DbModelType>;\n }\n\n where<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(key: string, evaluation: WhereFilterOp, value: unknown): QueryFn<AppModelType, DbModelType> {\n return (collection: Origin<AppModelType, DbModelType>) => collection.where(key, evaluation, value); \n }\n\n orderBy<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(key: string, order: 'asc' | 'desc' = 'asc'): QueryFn<AppModelType, DbModelType> {\n return (collection: Origin<AppModelType, DbModelType>) => collection.orderBy(key, order);\n }\n\n limit<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(n: number): QueryFn<AppModelType, DbModelType> {\n return (collection: Origin<AppModelType, DbModelType>) => collection.limit(n);\n }\n\n batch() {\n return this.firestore.batch();\n }\n}\n\nexport function provideFirestoreAdapter() {\n return _provideFirestoreAdapter(AdminFirestoreAdapter);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_provideFirestoreAdapter"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"nx-ddd-firestore-adapters-firebase.mjs","sources":["../../../../../packages/@nx-ddd/firestore/src/lib/adapters/firebase/firebase.adapter.ts","../../../../../packages/@nx-ddd/firestore/src/lib/adapters/firebase/nx-ddd-firestore-adapters-firebase.ts"],"sourcesContent":["import { doc, collection, collectionGroup, FieldValue, Timestamp, setDoc, getDoc, getDocs, getFirestore, onSnapshot, deleteDoc, writeBatch, query, orderBy, limit, updateDoc, where, FieldPath, getCountFromServer } from 'firebase/firestore';\nimport { Subject } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport type firestore from 'firebase/firestore';\nimport {\n FirestoreAdapter,\n QueryFn as _QueryFn,\n WhereFilterOp,\n DocumentChangeAction,\n DocumentSnapshot,\n CollectionReference as _CollectionReference,\n CollectionGroup as _CollectionGroup,\n Query as _Query,\n DocumentReference,\n DocumentData\n} from '@nx-ddd/firestore';\n\ntype CollectionReference<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n> = _CollectionReference<AppModelType, DbModelType, firestore.CollectionReference<AppModelType, DbModelType>>;\n\ntype CollectionGroup<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n> = _CollectionGroup<AppModelType, DbModelType, firestore.Query<AppModelType, DbModelType>>;\n\ntype Query<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n> = _Query<AppModelType, DbModelType, firestore.Query<AppModelType, DbModelType>>;\n\ntype QueryFn<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n> = _QueryFn<AppModelType, DbModelType, firestore.QueryConstraint>\n\ntype Origin<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n> = firestore.CollectionReference<AppModelType, DbModelType>\n | firestore.Query<AppModelType, DbModelType>\n | firestore.Query<AppModelType, DbModelType>;\n\ntype CollectionLike<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n> = CollectionReference<AppModelType, DbModelType> \n | CollectionGroup<AppModelType, DbModelType>\n | Query<AppModelType, DbModelType>;\n\n// Utility type to map Origin to CollectionLike\ntype InferCollectionLike<O extends Origin> = \n O extends firestore.CollectionReference<infer A, infer B> ? CollectionReference<A, B> :\n O extends firestore.Query<infer A, infer B> ? CollectionGroup<A, B> :\n O extends firestore.Query<infer A, infer B> ? Query<A, B> :\n never;\n\nexport function wrapCollectionLike<O extends Origin>(origin: O): InferCollectionLike<O> {\n return {\n __ref: origin,\n stateChanges: () => {\n const subject = new Subject<DocumentChangeAction<any>[]>();\n onSnapshot(origin, (snapshot) => subject.next(snapshot.docChanges().map(change => ({\n type: change.type,\n payload: {\n doc: change.doc\n },\n }))));\n return subject.asObservable();\n },\n get: () => getDocs(origin),\n count: () => getDocs(origin).then(snapshot => snapshot.size),\n } as never as InferCollectionLike<O>;\n}\n\nexport function unwrapCollectionLike<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n>(\n collection: CollectionLike<AppModelType, DbModelType>\n): Origin<AppModelType, DbModelType> {\n return collection.__ref;\n}\n\n@Injectable()\nexport class FirebaseFirestoreAdapter<D> extends FirestoreAdapter<D> {\n\n constructor(public firestore = getFirestore()) { super() }\n\n get FieldValue(): typeof FieldValue {\n return FieldValue; \n }\n\n get Timestamp(): typeof Timestamp {\n return Timestamp; \n }\n\n get FieldPath(): FieldPath {\n return new FieldPath();\n }\n\n protected isTimestamp(v: any): v is Timestamp {\n return v instanceof Timestamp;\n }\n\n protected isFieldValue(v: any): v is FieldValue {\n return v instanceof this.FieldValue;\n }\n\n doc(path: string): DocumentReference<any> {\n const docRef = doc(this.firestore, path);\n return {\n __ref: docRef,\n exists: () => getDoc(docRef).then(doc => doc.exists()),\n set: (data) => setDoc(docRef, data),\n get: () => getDoc(docRef),\n update: (data) => updateDoc(docRef, data),\n delete: () => deleteDoc(docRef),\n stateChanges: () => {\n const subject = new Subject<DocumentSnapshot<any>>();\n onSnapshot(docRef, (doc) => subject.next({\n id: doc.id,\n ref: doc.ref,\n data: () => doc.data(),\n get: (fieldPath: string) => doc.get(fieldPath),\n }));\n return subject.asObservable();\n },\n }\n }\n\n collection<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(path: string): CollectionReference<AppModelType, DbModelType> {\n const ref = collection(this.firestore, path);\n return wrapCollectionLike(ref) as CollectionReference<AppModelType, DbModelType>;\n }\n\n collectionGroup<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(collectionId: string): CollectionGroup<AppModelType, DbModelType> {\n const ref = collectionGroup(this.firestore, collectionId);\n return wrapCollectionLike(ref) as CollectionReference<AppModelType, DbModelType>;\n }\n\n query<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(\n collection: CollectionReference<AppModelType, DbModelType>,\n ...queryFnArray: QueryFn[]\n ): Query<AppModelType, DbModelType> {\n const ref = unwrapCollectionLike(collection);\n return wrapCollectionLike(query(ref, ...queryFnArray.map(queryFn => queryFn())));\n }\n\n where<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(fieldPath: string, opStr: WhereFilterOp, value: unknown): QueryFn {\n return () => where(fieldPath, opStr, value);\n }\n\n orderBy<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(key: string, order: 'asc' | 'desc' = 'asc'): QueryFn {\n return () => orderBy(key, order);\n }\n\n limit<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(n: number): QueryFn {\n return () => limit(n);\n }\n\n runTransaction() {\n throw new Error('FirebaseFirestoreAdapter#runTransaction is not implemented');\n }\n\n batch() {\n return writeBatch(this.firestore);\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nx-ddd-firestore-adapters-firebase.mjs","sources":["../../../../../packages/@nx-ddd/firestore/src/lib/adapters/firebase/firebase.adapter.ts","../../../../../packages/@nx-ddd/firestore/src/lib/adapters/firebase/nx-ddd-firestore-adapters-firebase.ts"],"sourcesContent":["import { doc, collection, collectionGroup, FieldValue, Timestamp, setDoc, getDoc, getDocs, getFirestore, onSnapshot, deleteDoc, writeBatch, query, orderBy, limit, updateDoc, where, FieldPath, getCountFromServer } from 'firebase/firestore';\nimport { Subject } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport type firestore from 'firebase/firestore';\nimport {\n FirestoreAdapter,\n QueryFn as _QueryFn,\n WhereFilterOp,\n DocumentChangeAction,\n DocumentSnapshot,\n CollectionReference as _CollectionReference,\n CollectionGroup as _CollectionGroup,\n Query as _Query,\n DocumentReference,\n DocumentData\n} from '@nx-ddd/firestore';\n\ntype CollectionReference<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n> = _CollectionReference<AppModelType, DbModelType, firestore.CollectionReference<AppModelType, DbModelType>>;\n\ntype CollectionGroup<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n> = _CollectionGroup<AppModelType, DbModelType, firestore.Query<AppModelType, DbModelType>>;\n\ntype Query<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n> = _Query<AppModelType, DbModelType, firestore.Query<AppModelType, DbModelType>>;\n\ntype QueryFn<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n> = _QueryFn<AppModelType, DbModelType, firestore.QueryConstraint>\n\ntype Origin<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n> = firestore.CollectionReference<AppModelType, DbModelType>\n | firestore.Query<AppModelType, DbModelType>\n | firestore.Query<AppModelType, DbModelType>;\n\ntype CollectionLike<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n> = CollectionReference<AppModelType, DbModelType> \n | CollectionGroup<AppModelType, DbModelType>\n | Query<AppModelType, DbModelType>;\n\n// Utility type to map Origin to CollectionLike\ntype InferCollectionLike<O extends Origin> = \n O extends firestore.CollectionReference<infer A, infer B> ? CollectionReference<A, B> :\n O extends firestore.Query<infer A, infer B> ? CollectionGroup<A, B> :\n O extends firestore.Query<infer A, infer B> ? Query<A, B> :\n never;\n\nexport function wrapCollectionLike<O extends Origin>(origin: O): InferCollectionLike<O> {\n return {\n __ref: origin,\n stateChanges: () => {\n const subject = new Subject<DocumentChangeAction<any>[]>();\n onSnapshot(origin, (snapshot) => subject.next(snapshot.docChanges().map(change => ({\n type: change.type,\n payload: {\n doc: change.doc\n },\n }))));\n return subject.asObservable();\n },\n get: () => getDocs(origin),\n count: () => getDocs(origin).then(snapshot => snapshot.size),\n } as never as InferCollectionLike<O>;\n}\n\nexport function unwrapCollectionLike<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n>(\n collection: CollectionLike<AppModelType, DbModelType>\n): Origin<AppModelType, DbModelType> {\n return collection.__ref!;\n}\n\n@Injectable()\nexport class FirebaseFirestoreAdapter<D> extends FirestoreAdapter<D> {\n\n constructor(public firestore = getFirestore()) { super() }\n\n get FieldValue(): typeof FieldValue {\n return FieldValue; \n }\n\n get Timestamp(): typeof Timestamp {\n return Timestamp; \n }\n\n get FieldPath(): FieldPath {\n return new FieldPath();\n }\n\n protected isTimestamp(v: any): v is Timestamp {\n return v instanceof Timestamp;\n }\n\n protected isFieldValue(v: any): v is FieldValue {\n return v instanceof this.FieldValue;\n }\n\n doc(path: string): DocumentReference<any> {\n const docRef = doc(this.firestore, path);\n return {\n __ref: docRef,\n exists: () => getDoc(docRef).then(doc => doc.exists()),\n set: (data) => setDoc(docRef, data),\n get: () => getDoc(docRef),\n update: (data) => updateDoc(docRef, data),\n delete: () => deleteDoc(docRef),\n stateChanges: () => {\n const subject = new Subject<DocumentSnapshot<any>>();\n onSnapshot(docRef, (doc) => subject.next({\n id: doc.id,\n ref: doc.ref,\n data: () => doc.data(),\n get: (fieldPath: string) => doc.get(fieldPath),\n }));\n return subject.asObservable();\n },\n }\n }\n\n collection<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(path: string): CollectionReference<AppModelType, DbModelType> {\n const ref = collection(this.firestore, path);\n return wrapCollectionLike(ref) as CollectionReference<AppModelType, DbModelType>;\n }\n\n collectionGroup<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(collectionId: string): CollectionGroup<AppModelType, DbModelType> {\n const ref = collectionGroup(this.firestore, collectionId);\n return wrapCollectionLike(ref) as CollectionReference<AppModelType, DbModelType>;\n }\n\n query<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(\n collection: CollectionReference<AppModelType, DbModelType>,\n ...queryFnArray: QueryFn[]\n ): Query<AppModelType, DbModelType> {\n const ref = unwrapCollectionLike(collection);\n return wrapCollectionLike(query(ref as any, ...queryFnArray.map(queryFn => queryFn())) as any) as Query<AppModelType, DbModelType>;\n }\n\n where<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(fieldPath: string, opStr: WhereFilterOp, value: unknown): QueryFn {\n return () => where(fieldPath, opStr, value);\n }\n\n orderBy<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(key: string, order: 'asc' | 'desc' = 'asc'): QueryFn {\n return () => orderBy(key, order);\n }\n\n limit<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(n: number): QueryFn {\n return () => limit(n);\n }\n\n runTransaction() {\n throw new Error('FirebaseFirestoreAdapter#runTransaction is not implemented');\n }\n\n batch() {\n return writeBatch(this.firestore);\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -210,7 +210,7 @@ class FirestoreAdapter {
210
210
  }
211
211
  else {
212
212
  const Type = annotation.childType();
213
- const value = _value.map(v => {
213
+ const value = _value.map((v) => {
214
214
  switch (Type) {
215
215
  case String:
216
216
  case Number:
@@ -323,7 +323,7 @@ class FirestoreDAO {
323
323
  return this.adapter.doc(path);
324
324
  }
325
325
  getCollection(paramMap) {
326
- return paramMap ? this.collection(paramMap) : this.collectionGroup();
326
+ return (paramMap ? this.collection(paramMap) : this.collectionGroup());
327
327
  }
328
328
  }
329
329
 
@@ -602,7 +602,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
602
602
  type: Injectable
603
603
  }] });
604
604
 
605
- const toPromise = callback => new Promise((resolve, reject) => {
605
+ const toPromise = (callback) => new Promise((resolve, reject) => {
606
606
  try {
607
607
  resolve(callback());
608
608
  }
@@ -617,7 +617,7 @@ function doesExist(doc) {
617
617
  return doc.exists;
618
618
  }
619
619
  class BaseFirestoreRepository extends Repository {
620
- async list(paramMap, query = q => q) {
620
+ async list(paramMap, query = (q) => q) {
621
621
  const collection = paramMap ? this.collection(paramMap) : this.collectionGroup();
622
622
  return this._list(query(collection));
623
623
  }
@@ -627,6 +627,8 @@ class BaseFirestoreRepository extends Repository {
627
627
  async count(paramMap) {
628
628
  return this.collection(paramMap).count();
629
629
  }
630
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
631
+ // @ts-ignore -- overrides base class with extended params and nullable return
630
632
  async get(paramMap) {
631
633
  return this._get(this.doc(paramMap));
632
634
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nx-ddd-firestore.mjs","sources":["../../../../../packages/@nx-ddd/firestore/src/lib/decorators/decorators.ts","../../../../../packages/@nx-ddd/firestore/src/lib/adapters/dayjs/dayjs.adatper.ts","../../../../../packages/@nx-ddd/firestore/src/lib/adapters/base/base.adapter.ts","../../../../../packages/@nx-ddd/firestore/src/lib/converter/converter.ts","../../../../../packages/@nx-ddd/firestore/src/lib/dao/firestore.dao.ts","../../../../../packages/@nx-ddd/firestore/src/lib/path-builder/path-builder.ts","../../../../../packages/@nx-ddd/firestore/src/lib/query/firestore.query.ts","../../../../../packages/@nx-ddd/firestore/src/lib/query/v2/query.ts","../../../../../packages/@nx-ddd/firestore/src/lib/query/v2/cached-query.ts","../../../../../packages/@nx-ddd/firestore/src/lib/repository/repository.ts","../../../../../packages/@nx-ddd/firestore/src/lib/nx-ddd-firestore.ts"],"sourcesContent":["import { makeDecoratorFactories } from '@nx-ddd/core';\n\nexport const FIRESTORE_ANNOTATIONS = 'firestore_annotations';\nexport type FirestoreFieldType = 'id' | 'boolean' | 'number' \n | 'timestamp' | 'string' | 'geopoint' | 'null' \n | 'map' | 'array' | 'reference';\nexport interface FirestoreAnnotation {\n type: FirestoreFieldType;\n fieldName: string;\n propName: string;\n childType: any;\n}\n\nexport const {\n createDecorator,\n createPropsDecorator,\n createClassDecorator,\n getAnnotations,\n} = makeDecoratorFactories<\n FirestoreFieldType,\n FirestoreAnnotation,\n {childType?: any}\n>(\n (type, fieldName, propName, options) => ({type, fieldName, propName, childType: options.childType}),\n FIRESTORE_ANNOTATIONS\n);\n\n/** @deprecated use getAnnotations */\nexport function getFirestoreAnnotations(target: any): FirestoreAnnotation[] {\n return getAnnotations(target);\n}\n\nexport const ID = createDecorator('id');\nexport const String = createDecorator('string');\nexport const Null = createDecorator('null');\nexport const Geopoint = createDecorator('geopoint');\nexport const Boolean = createDecorator('boolean');\nexport const Timestamp = createDecorator('timestamp');\nexport const Number = createDecorator('number');\nexport const Map = (childType?: () => any, props?: {name?: string}) => createDecorator('map', {childType})(props);\nexport const Array = (childType?: () => any, props?: {name?: string}) => createDecorator('array', {childType})(props);\nexport const Reference = createDecorator('reference');\n\nexport function getCollection(target: any): string {\n const annotations = getAnnotations(target);\n const annotation = annotations.find((annotation: any) => annotation.type === 'collection');\n return (annotation as any).name;\n}\n\nexport const Firestore = {\n Collection: createClassDecorator<{ name: string }>('collection'),\n ID: ID,\n String: String,\n Null: Null,\n Geopoint: Geopoint,\n Boolean: Boolean,\n Timestamp: Timestamp,\n Number: Number,\n Map: Map,\n Array: Array,\n Reference: Reference,\n};\n","import { Injectable } from '@angular/core';\nimport dayjs from 'dayjs';\n\n@Injectable({ providedIn: 'root' })\nexport class DateAdapter {\n isDate<D>(value: any): value is D {\n return value instanceof Date || dayjs.isDayjs(value);\n }\n\n isValid(value: any): boolean {\n return this.isDate<Date>(value) && !isNaN(value.getTime());\n }\n\n getJsDate<D>(value: any): D {\n return value as D;\n }\n\n convertToDate<D>(value: Date): D {\n return value as D;\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class DayjsAdapter {\n constructor(private readonly dateAdapter: DateAdapter) {}\n\n isDayjs(value: any): value is dayjs.Dayjs {\n return dayjs.isDayjs(value);\n }\n\n isValid(value: any): boolean {\n return this.isDayjs(value) && value.isValid();\n }\n\n getJsDate(value: dayjs.Dayjs): Date {\n return value.toDate();\n }\n\n convertToDayjs<D>(value: any): D {\n return dayjs(value) as D;\n }\n}\n","import { inject } from '@angular/core';\nimport { getFirestoreAnnotations } from '../../decorators/decorators';\nimport { walkObj } from '@nx-ddd/core';\nimport { get } from 'lodash-es';\nimport type {\n CollectionReference,\n CollectionGroup,\n DocumentReference,\n ToFirestoreData,\n Timestamp,\n Query,\n FieldValue,\n DocumentData\n} from '../../interfaces';\nimport { DateAdapter } from '../dayjs';\n\nexport type QueryFn<AppModelType, DbModelType, R> = (\n collection?: any\n) => R;\nexport type WhereFilterOp = '<' | '<=' | '==' | '!=' | '>=' | '>' | 'array-contains' | 'in' | 'array-contains-any' | 'not-in';\n\n\nexport abstract class FirestoreAdapter<Date = any> {\n protected dateAdapter = inject(DateAdapter);\n\n protected abstract isTimestamp(v: any): v is Timestamp;\n protected abstract isFieldValue(v: any): v is FieldValue;\n\n abstract get Timestamp(): any\n abstract get FieldValue(): any\n abstract get FieldPath(): any\n\n abstract doc<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(path: string): DocumentReference<AppModelType>;\n\n abstract collection<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(path: string): CollectionReference<AppModelType, DbModelType>;\n\n abstract collectionGroup<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(collectionId: string): CollectionGroup<AppModelType, DbModelType>;\n\n abstract query<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(\n collection: CollectionReference<AppModelType, DbModelType>,\n ...queryFnArray: QueryFn<AppModelType, DbModelType, any>[]\n ): Query<AppModelType, DbModelType>;\n\n abstract where<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(key: string, evaluation: WhereFilterOp, value: unknown): QueryFn<AppModelType, DbModelType, any>;\n\n abstract orderBy<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(key: string, order: 'asc' | 'desc'): QueryFn<AppModelType, DbModelType, any>;\n\n abstract limit<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(n: number): QueryFn<AppModelType, DbModelType, any>;\n\n abstract runTransaction(fn: any): any;\n abstract batch(): any;\n\n //** @deprecated */\n toFirestoreData<Entity>(entity: Entity): ToFirestoreData<Entity, Date> {\n return Object.entries(entity).reduce((pre, [k, v]) => ({\n ...pre, [k]: this.dateAdapter.isDate<Date>(v) ? this.convertDateToTimestamp(v) : v,\n }), {} as ToFirestoreData<Entity, Date>);\n }\n\n //** @deprecated */\n fromFirestoreData<Entity>(data: ToFirestoreData<Entity, Date>): Entity {\n return Object.entries(data).reduce((pre, [k, v]) => ({\n ...pre, [k]: this.isTimestamp(v) ? this.convertTimestampToDate(v) : v,\n }), {} as Entity);\n }\n\n toFirestore<T>(obj: object, Entity: new () => T): object {\n const newObj = {};\n for (const annotation of getFirestoreAnnotations(Entity)) {\n const _value = get(obj, annotation.propName);\n if (_value === null) {\n newObj[annotation.fieldName] = null;\n continue;\n }\n switch(annotation.type) {\n case 'id':\n case 'string':\n case 'number': \n case 'boolean': {\n if (typeof _value === 'undefined') break;\n newObj[annotation.fieldName] = _value;\n break;\n }\n case 'timestamp': {\n if (typeof _value === 'undefined') break;\n if (!this.dateAdapter.isDate<Date>(_value)) {\n console.error('[FirestoreAdapter] _value:', _value);\n throw new Error(`Invalid Date Type: ${_value}`);\n }\n newObj[annotation.fieldName] = this.convertDateToTimestamp(_value);\n break;\n }\n case 'array': {\n if (typeof annotation?.childType === 'undefined') {\n if (_value) newObj[annotation.fieldName] = _value;\n } else {\n const Type = (annotation as any).childType();\n if (typeof _value === 'undefined') break;\n if (!Array.isArray(_value)) {\n newObj[annotation.fieldName] = [];\n break;\n }\n const value = (_value ?? []).map(v => {\n switch (Type) {\n case String:\n case Number:\n return v\n default: \n return this.toFirestore(v, Type);\n }\n });\n if (value) newObj[annotation.fieldName] = value\n }\n break;\n }\n case 'map': {\n if (typeof _value === 'undefined') break;\n if (typeof (annotation as any)?.childType === 'undefined') {\n if (_value) newObj[annotation.fieldName] = _value;\n } else {\n const Type = (annotation as any).childType();\n const value = this.toFirestore(_value, Type);\n if (value) newObj[annotation.fieldName] = value;\n }\n break;\n }\n }\n }\n return newObj;\n }\n \n fromFirestore<T = any>(data: any, Entity: new() => T): T {\n const newObj = {};\n for (const annotation of getFirestoreAnnotations(Entity)) {\n const _value = data[annotation.fieldName];\n if (typeof _value === 'undefined') continue;\n if (_value === null) {\n newObj[annotation.propName] = null;\n continue;\n }\n\n switch(annotation.type) {\n case 'id':\n case 'string':\n case 'number':\n case 'boolean': {\n newObj[annotation.propName] = _value;\n break;\n }\n case 'timestamp': {\n try {\n newObj[annotation.propName] = this.convertTimestampToDate(_value);\n } catch (e) {\n newObj[annotation.propName] = _value;\n }\n break;\n }\n case 'array': {\n if (typeof annotation?.childType === 'undefined') {\n newObj[annotation.propName] = _value;\n } else {\n const Type = (annotation as any).childType();\n const value = _value.map(v => {\n switch (Type) {\n case String:\n case Number:\n return v\n default:\n return this.fromFirestore(v, Type);\n }\n });\n if (value) newObj[annotation.propName] = value\n }\n break;\n }\n case 'map': {\n if (typeof annotation?.childType === 'undefined') {\n newObj[annotation.propName] = _value;\n } else {\n const Type = (annotation as any).childType();\n const value = this.fromFirestore(_value, Type);\n if (value) newObj[annotation.propName] = value;\n }\n break;\n }\n }\n }\n return newObj as T;\n }\n\n /**\n * @description FirestoreのUpdateは通常のオブジェクトでは孫以下のプロパティが既存データとマージされないので、パスに変換する必要がある。\n */\n flattenForUpdate(obj: any): any {\n const newObj = {};\n walkObj(obj, {\n callback: (paths, value) => newObj[paths.join('.')] = value,\n overwrite: (_, value) => {\n if (Array.isArray(value)) return [true, value];\n if (this.isTimestamp(value)) return [true, value as any];\n if (this.isFieldValue(value)) return [true, value];\n return [false]\n }\n });\n return newObj;\n }\n\n convertDateToTimestamp(date: Date): Timestamp {\n return this.Timestamp.fromDate(date);\n }\n\n convertTimestampToDate(timestamp: Timestamp): Date {\n return this.dateAdapter.convertToDate(timestamp.toDate())\n }\n \n}\n\nexport function provideFirestoreAdapter(useClass: new () => FirestoreAdapter) {\n return { provide: FirestoreAdapter, useClass };\n}\n","import { inject } from '@angular/core';\nimport { plainToInstanceWithValid } from '@nx-ddd/core';\nimport { FirestoreAdapter } from '../adapters/base';\nimport { DocumentSnapshot } from '../interfaces';\n\nexport interface IFirestoreConverter<E extends {id: string}> {\n fromFirestore(doc: DocumentSnapshot<object>): E;\n fromFirestoreMany(docs: DocumentSnapshot<object>[]): E[];\n toFirestore(entity: Partial<E>): object;\n fromObject?(obj: object): E;\n toObject?(entity: E): object;\n}\n\nclass FirestoreHelper {\n static fromFirestore<E extends {id: string}>(doc: DocumentSnapshot<object>, Entity: new () => E, adapter: FirestoreAdapter): E {\n const data = adapter.fromFirestore({...doc.data(), id: doc.id}, Entity);\n return plainToInstanceWithValid(Entity, data);\n }\n}\n\nclass BasicConverter<E extends {id: string}> {\n constructor(\n protected readonly Entity: new () => E,\n protected readonly adapter: FirestoreAdapter,\n ) { }\n\n fromFirestore(doc: DocumentSnapshot<any>): E {\n return this.adapter.fromFirestore({\n ...doc.data(),\n id: doc.id\n }, this.Entity);\n }\n\n fromFirestoreMany(docs: DocumentSnapshot<any>[]): E[] {\n return docs.map(doc => this.fromFirestore(doc));\n }\n\n toFirestore(entity: E): object {\n return this.adapter.toFirestore(entity, this.Entity);\n }\n}\n\nexport function getConverter<Entity extends {id: string}>(\n Entity: new () => Entity,\n adapter: FirestoreAdapter = inject(FirestoreAdapter),\n): IFirestoreConverter<Entity> {\n return new BasicConverter(Entity, adapter);\n}\n\nexport function injectConverter<Entity extends {id: string}>(Entity: new () => Entity): IFirestoreConverter<Entity> {\n return getConverter(Entity, inject(FirestoreAdapter));\n}\n","import dayjs from 'dayjs';\nimport { FirestoreAdapter } from '../adapters/base';\nimport { CollectionReference, CollectionGroup, DocumentReference, ToFirestoreData, CollectionLike } from '../interfaces';\nimport { FirestorePathBuilder } from '../path-builder';\n\n\nexport class FirestoreDAO<\n Entity extends {id: string}, \n FirestoreData = ToFirestoreData<Entity, dayjs.Dayjs>,\n> {\n\n constructor(\n protected adapter: FirestoreAdapter,\n protected pathBuilder: FirestorePathBuilder<Entity>,\n ) { }\n\n collection(paramMap?: Partial<Entity>): CollectionReference<FirestoreData> {\n const path = this.pathBuilder.collection(paramMap)\n return this.adapter.collection<FirestoreData>(path);\n }\n\n collectionGroup():CollectionGroup<FirestoreData> {\n const path = this.pathBuilder.collectionGroup();\n return this.adapter.collectionGroup<FirestoreData>(path);\n }\n\n doc(paramMap: Partial<Entity> & {id: string}): DocumentReference<FirestoreData> {\n const path = this.pathBuilder.doc(paramMap);\n return this.adapter.doc<FirestoreData>(path);\n }\n\n getCollection(paramMap?: Partial<Entity>): CollectionLike {\n return paramMap ? this.collection(paramMap) : this.collectionGroup();\n }\n}\n","type CollectionParamMap<Entity extends {id: string}> = Partial<Entity>;\ntype DocParamMap<Entity extends {id: string}> = CollectionParamMap<Entity> & Pick<Entity, 'id'>;\n\nexport type ExtractParams<T extends string> = \n T extends `${infer _Start}:${infer Param}/${infer Rest}`\n ? { [K in Param | keyof ExtractParams<Rest>]: string }\n : T extends `${infer _Start}:${infer Param}`\n ? { [K in Param]: string }\n : {};\n\ntype Params = ExtractParams<'users/:userId/images/:id'>;\n\nexport type ColParam<T extends {readonly collectionPath: string}> = Omit<ExtractParams<T['collectionPath']>, 'id'>;\nexport type DocParam<T extends {readonly collectionPath: string}> = ColParam<T> & {id: string}; \n\nexport class FirestorePathBuilder<\n Entity extends { id: string },\n Path extends string = string,\n> {\n doc(param: DocParamMap<Entity>) {\n return resolvePaths(param, this.paths);\n }\n\n collection(param: Omit<ExtractParams<Path>, 'id'> | {} = {}) {\n return resolvePaths(param, this.paths.slice(0, -1));\n }\n\n collectionGroup() {\n return this.paths[this.paths.length-2];\n }\n\n constructor(private paths: string[]) { }\n}\n\nexport function pathBuilderFactory<\n E extends { id: string },\n Path extends string = string\n>(\n path: Path\n): FirestorePathBuilder<E, Path> {\n const paths = parsePath<Path>(path);\n return new FirestorePathBuilder(paths);\n}\n\nexport function parsePath<Path extends string = string>(path: Path): string[] {\n const paths = path.split('/').filter(p => p.length);\n if (!paths[paths.length-1].startsWith(':')) paths.push(':id');\n return paths;\n}\n\nexport const resolvePaths = (obj: object, paths: string[]): string => {\n return paths.map((path) => path.startsWith(':') ? resolvePath(obj, path.slice(1)) : path).join('/');\n}\n\nconst resolvePath = (obj: object, key: string) => {\n if (!obj?.[key]) throw new Error(`Invalid key is detected in resolving paths, key: \\`${key}\\`, obj: \\`${JSON.stringify(obj)}\\``);\n return obj?.[key];\n}\n","import dayjs from 'dayjs';\nimport { Observable, ReplaySubject, lastValueFrom, of, throwError } from 'rxjs';\nimport { catchError, distinctUntilChanged, map, shareReplay, switchMap, take, tap } from 'rxjs/operators';\nimport { FirestoreAdapter } from '../adapters/base';\nimport { IFirestoreConverter } from '../converter';\nimport { FirestoreDAO } from '../dao';\nimport { FirestorePathBuilder } from '../path-builder';\nimport { DocumentSnapshot, CollectionReference, CollectionGroup, ToFirestoreData, CollectionLike } from '../interfaces';\n\nexport class FirestoreQuery<\n Entity extends {id: string} = any, \n FirestoreData = ToFirestoreData<Entity, dayjs.Dayjs>,\n> extends FirestoreDAO<Entity, FirestoreData> {\n constructor(\n adapter: FirestoreAdapter,\n protected converter: IFirestoreConverter<Entity>,\n protected pathBuilder: FirestorePathBuilder<Entity>\n ) {\n super(adapter, pathBuilder);\n this.switchCollectionRef();\n }\n\n protected readonly collection$ = new ReplaySubject<CollectionLike<FirestoreData>>(1);\n protected readonly list$ = this.collection$.pipe(\n switchMap((collection) => this.listChangesByCollectionRef(collection).pipe(\n catchError(error => throwError(() => error)),\n )),\n shareReplay(1),\n )\n\n /** @deprecated */\n listChanges(paramMap?: Partial<Entity>, options: {switch?: boolean} = {switch: true}): Observable<Entity[]> {\n return of(paramMap).pipe(\n tap((paramMap) => options?.switch && this.switchCollectionRef(paramMap)),\n switchMap(() => this.list$),\n );\n }\n\n listChangesV2(paramMap?: Partial<Entity>): Observable<Entity[]> {\n return of(paramMap).pipe(\n tap((paramMap) => paramMap && this.switchCollectionRef(paramMap)),\n switchMap(() => this.list$),\n );\n }\n\n listChangesAfter(updatedAt: dayjs.Dayjs, {limit}: {limit?: number} = {}) {\n const entitiesMap = new Map<string, Entity>();\n const _updatedAt = dayjs.isDayjs(updatedAt) ? this.adapter.convertDateToTimestamp(updatedAt) : updatedAt\n return this.adapter.query(\n this.collection(),\n ...[\n this.adapter.where('updatedAt', '>', _updatedAt),\n this.adapter.orderBy('updatedAt', 'asc'),\n limit ? this.adapter.limit(limit) : undefined,\n ].filter(Boolean),\n ).stateChanges().pipe(\n // bufferTime(1_000),\n // map(zippedActions => zippedActions.flat()),\n tap(actions => actions.forEach(({type, payload: {doc}}) => {\n if (new Set(['added', 'modified']).has(type)) {\n entitiesMap.set(doc.id, this.converter.fromFirestore(doc as DocumentSnapshot<any>));\n } else if (type === 'removed') {\n entitiesMap.delete(doc.id);\n }\n })),\n map(() => [...entitiesMap.values()]),\n );\n }\n\n changes({id}: Partial<Entity>) {\n if (!id) throw new Error(`Invalid Id. it must be Truthy`);\n return this.list$.pipe(\n map(entities => entities.find(entity => entity.id === id)),\n distinctUntilChanged((pre, cur) => JSON.stringify(pre) === JSON.stringify(cur)),\n );\n }\n\n changesV2(params: Partial<Entity>): Observable<Entity> {\n const docRef = this.doc(params as any);\n return docRef.stateChanges().pipe(\n map((doc) => this.converter.fromFirestore((doc as any))),\n );\n }\n\n get({id}: Partial<Entity> & {id: string}) {\n return lastValueFrom(this.list$.pipe(\n take(1),\n map(entities => entities.find(entity => entity.id === id)),\n ));\n }\n\n list(paramMap?: Partial<Entity>) {\n this.switchCollectionRef(paramMap);\n return lastValueFrom(this.list$.pipe(take(1)));\n }\n\n protected listChangesByCollectionRef(\n collection: CollectionReference<FirestoreData> | CollectionGroup<FirestoreData>\n ): Observable<Entity[]> {\n const entitiesMap = new Map<string, any>();\n return collection.stateChanges().pipe(\n tap(actions => actions.forEach(({type, payload: {doc}}) => {\n if (new Set(['added', 'modified']).has(type)) {\n entitiesMap.set(doc.id, this.converter.fromFirestore((doc as any)));\n } else if (type === 'removed') {\n entitiesMap.delete(doc.id);\n }\n })),\n map(() => [...entitiesMap.values()]),\n );\n }\n\n protected switchCollectionRef(paramMap?: Partial<Entity>) {\n const collection = this.getCollection(paramMap);\n this.switchCollection(collection);\n }\n\n switchCollection(collection: CollectionLike<any>) {\n this.collection$.next(collection);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FirestoreAdapter } from '../../adapters';\nimport { getConverter, IFirestoreConverter } from '../../converter';\nimport { FirestoreDAO } from '../../dao';\nimport { getCollection } from '../../decorators';\nimport { CollectionLike, DocumentReference } from '../../interfaces';\nimport { ExtractParams, FirestorePathBuilder, pathBuilderFactory } from '../../path-builder';\nimport { catchError, lastValueFrom, map, NEVER, Observable, of, switchMap, take, tap } from 'rxjs';\n\ntype ColParam<T extends BaseFirestoreQuery<any>> = Omit<ExtractParams<T['collectionPath']>, 'id'>;\ntype DocParam<T extends BaseFirestoreQuery<any>> = ColParam<T> & {id: string}; \n\nexport abstract class BaseFirestoreQuery<Entity extends {id: string} = any> {\n protected abstract readonly adapter: FirestoreAdapter;\n protected abstract readonly converter: IFirestoreConverter<Entity>;\n abstract readonly collectionPath: string;\n protected abstract pathBuilder: FirestorePathBuilder<Entity, typeof this.collectionPath>;\n protected abstract dao: FirestoreDAO<Entity>;\n\n count(paramMap?: ColParam<this>): Promise<number> {\n return this.dao.getCollection(paramMap as any).count();\n }\n\n changes(params: DocParam<this>): Observable<Entity> {\n const docRef = this.dao.doc(params as any);\n return docRef.stateChanges().pipe(\n map((doc) => this.converter.fromFirestore((doc as any))),\n );\n }\n\n get(paramMap: DocParam<this>): Promise<Entity> {\n return lastValueFrom(this.changes(paramMap).pipe(take(1)));\n }\n\n list(paramMap?: ColParam<this>): Promise<Entity[]> {\n return lastValueFrom(this.listChanges(paramMap as any).pipe(take(1)));\n }\n\n listChanges(paramMap?: ColParam<this>): Observable<Entity[]> {\n return of(paramMap).pipe(\n map((paramMap) => this.dao.getCollection(paramMap as any)),\n switchMap((collection) => {\n return this.getListChanges$ByCollectionLike(collection)\n }),\n );\n }\n\n protected getChanges$ByDocument(\n doc: DocumentReference\n ): Observable<Entity> {\n return doc.stateChanges().pipe(\n map((doc) => this.converter.fromFirestore(doc)),\n catchError((error) => {\n console.error(error);\n return NEVER;\n }),\n );\n }\n\n protected getListChanges$ByCollectionLike(\n collection: CollectionLike\n ): Observable<Entity[]> {\n const entitiesMap = new Map<string, any>();\n return collection.stateChanges().pipe(\n tap(actions => actions.forEach(({type, payload: {doc}}) => {\n if (new Set(['added', 'modified']).has(type)) {\n entitiesMap.set(doc.id, this.converter.fromFirestore((doc as any)));\n } else if (type === 'removed') {\n entitiesMap.delete(doc.id);\n }\n })),\n map(() => [...entitiesMap.values()]),\n catchError((error) => {\n console.error(error);\n return NEVER;\n }),\n );\n }\n}\n\n@Injectable()\nexport abstract class FirestoreQuery<Entity extends {id: string} = any> extends BaseFirestoreQuery<Entity> {\n protected readonly adapter = inject(FirestoreAdapter);\n abstract readonly collectionPath: string;\n protected abstract readonly converter: IFirestoreConverter<Entity>;\n\n get pathBuilder(): FirestorePathBuilder<Entity, typeof this.collectionPath> {\n return pathBuilderFactory(this.collectionPath);\n }\n\n protected get dao() {\n return new FirestoreDAO<Entity>(this.adapter, this.pathBuilder);\n } \n}\n\n\nexport function getFirestoreQuery<Entity extends {id: string}>(\n entity: { new(): Entity },\n adapter: FirestoreAdapter = inject(FirestoreAdapter),\n): BaseFirestoreQuery<Entity> {\n\n class FirestoreQuery extends BaseFirestoreQuery<Entity> {\n constructor(\n protected readonly converter: IFirestoreConverter<Entity>,\n public readonly collectionPath: string,\n public pathBuilder: FirestorePathBuilder<Entity, any>,\n protected readonly adapter: FirestoreAdapter,\n protected readonly dao: FirestoreDAO<Entity>,\n ) { super(); }\n }\n\n return new FirestoreQuery(\n getConverter(entity, adapter),\n getCollection(entity),\n pathBuilderFactory(getCollection(entity)),\n adapter,\n new FirestoreDAO<Entity>(adapter, pathBuilderFactory(getCollection(entity))),\n );\n}\n\nexport function injectFirestoreQuery<Entity extends {id: string}>(entity: { new(): Entity }): BaseFirestoreQuery<Entity> {\n return getFirestoreQuery(entity, inject(FirestoreAdapter));\n}\n","import { Injectable } from \"@angular/core\";\nimport { FirestoreQuery } from \"./query\";\nimport { ExtractParams } from \"../../path-builder\";\nimport Dexie, { liveQuery, Observable as DexieObservable } from 'dexie';\nimport { catchError, combineLatest, distinctUntilChanged, map, NEVER, Observable, of, retry, switchMap, tap, throttleTime } from 'rxjs';\nimport dayjs from \"dayjs\";\nimport { CollectionLike } from \"../../interfaces\";\n\ntype ColParam<T extends {readonly collectionPath: string}> = Omit<ExtractParams<T['collectionPath']>, 'id'>;\ntype DocParam<T extends {readonly collectionPath: string}> = ColParam<T> & {id: string}; \n\nfunction fromDexie<T>(observable: DexieObservable<T>): Observable<T> {\n return new Observable(subscriber => observable.subscribe(subscriber));\n}\n\ninterface EntityData {\n id: string;\n value: string;\n collectionPath: string;\n updatedAt: string;\n}\n\nclass DexieAdapter<E extends {id: string, updatedAt: dayjs.Dayjs}> extends Dexie {\n entities!: Dexie.Table<EntityData, string>;\n\n constructor() {\n super('@nx-ddd/firestore/cached-query');\n this.version(3).stores({ entities: '++id' });\n }\n\n count$() {\n return fromDexie(liveQuery(() => this.entities.count()));\n }\n\n getLastUpdatedAt$(collectionPath: string) {\n return of(null).pipe(\n switchMap((() => fromDexie(liveQuery(() => this.entities.toArray())))),\n map((entities) => entities.filter(entity => entity.collectionPath === collectionPath)),\n map(entities => entities.sort((a, b) => {\n if (!a?.updatedAt) return -1;\n if (!b?.updatedAt) return 1;\n return dayjs(a?.updatedAt).diff(dayjs(b?.updatedAt));\n }).at(-1)),\n map(entity => entity?.updatedAt ? dayjs(entity?.updatedAt) : dayjs('1970-01-01')),\n distinctUntilChanged((pre, cur) => pre.isSame(cur)),\n );\n }\n\n async bulkPut(collectionPath: string, entities: E[]) {\n return this.entities.bulkPut(entities.map(entity => {\n const key = `${entity.id}`;\n return {\n id: key,\n collectionPath,\n value: JSON.stringify(entity),\n updatedAt: entity.updatedAt.toISOString(),\n };\n }));\n }\n\n listChanges(collectionPath: string): Observable<E[]> {\n return of(null).pipe(\n switchMap(() => fromDexie(liveQuery(() => this.entities.toArray()))),\n map((entities) => entities.filter(entity => entity.collectionPath === collectionPath)),\n map((entities) => entities.map(entity => JSON.parse(entity.value) as E)),\n );\n }\n}\n\nclass FirestoreIndexedDbCached<E extends {id: string, updatedAt: dayjs.Dayjs}> {\n constructor(protected collectionPath: string) { }\n\n readonly adapter = new DexieAdapter<E>();\n\n getLastUpdatedAt$() {\n return this.adapter.getLastUpdatedAt$(this.collectionPath);\n }\n\n async setMany(entities: E[]) {\n return this.adapter.bulkPut(this.collectionPath, entities);\n }\n\n listChanges() {\n return this.adapter.listChanges(this.collectionPath);\n }\n}\n\n@Injectable()\nexport abstract class CachedFirestoreQuery<E extends {id: string, updatedAt: dayjs.Dayjs} = any> extends FirestoreQuery<E> {\n protected _cached: FirestoreIndexedDbCached<E>;\n protected get cached() {\n return this._cached ??= new FirestoreIndexedDbCached<E>(this.collectionPath);\n }\n\n protected readonly config = {\n throttleTime: 5_000,\n loadChunkSize: 1_000,\n };\n\n override listChanges(paramMap?: ColParam<this>): Observable<E[]> {\n const collection = this.dao.getCollection(paramMap as any);\n return this.cached.getLastUpdatedAt$().pipe(\n switchMap((lastUpdatedAt) => this._listChangesAfter(collection, lastUpdatedAt, {\n limit: this.config.loadChunkSize,\n }).pipe(\n retry(3),\n tap((updated) => this.cached.setMany(updated)),\n tap((updated) => console.log('updated:', updated)),\n catchError((error) => (console.error(error), NEVER)),\n )),\n switchMap(() => this.cached.listChanges()),\n map((entities) => entities.map(entity => this.converter.fromObject(entity))),\n throttleTime(this.config.throttleTime),\n );\n }\n\n protected _listChange(paramMap?: ColParam<this>): Observable<E[]> {\n return of(paramMap).pipe(\n map((paramMap) => this.dao.getCollection(paramMap as any)),\n map((collection) => this.adapter.query(collection, this.adapter.limit(10))),\n switchMap((collection) => this.getListChanges$ByCollectionLike(collection)),\n );\n }\n\n protected _listChangesAfter(collection: CollectionLike, updatedAt: dayjs.Dayjs, {limit}: {limit?: number} = {}) {\n const updatedAtTs = dayjs.isDayjs(updatedAt) ? this.adapter.convertDateToTimestamp(updatedAt) : updatedAt\n const query = this.adapter.query(\n collection,\n ...[\n this.adapter.where('updatedAt', '>', updatedAtTs),\n this.adapter.orderBy('updatedAt', 'asc'),\n limit ? this.adapter.limit(limit) : undefined,\n ].filter(Boolean),\n );\n return this.getListChanges$ByCollectionLike(query);\n }\n\n progressChanges() {\n return combineLatest({\n cloud: this.count(),\n local: this.listChanges().pipe(map(items => items.length)),\n });\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Repository } from '@nx-ddd/common/domain';\nimport { toObject } from '@nx-ddd/common';\nimport { generateId } from '@nx-ddd/common';\nimport { FirestoreAdapter } from '../adapters/base';\nimport { getConverter, IFirestoreConverter } from '../converter';\nimport { ExtractParams, FirestorePathBuilder, pathBuilderFactory } from '../path-builder';\nimport { CollectionReference, CollectionGroup, DocumentReference, DocumentSnapshot } from '../interfaces';\nimport { Observable } from 'rxjs';\nimport { getCollection } from '../decorators/decorators';\n\nconst toPromise = callback => new Promise<ReturnType<typeof callback>>((resolve, reject) => {\n try { resolve(callback()); } catch (error) { reject(error); }\n});\n\nfunction doesExist(doc: DocumentSnapshot): boolean {\n if (typeof doc.exists === 'function') {\n return doc.exists();\n }\n return doc.exists;\n}\n\n// FirestoreRepositoryからEnriryを取得するinfer\nexport type ExtractEntity<T extends BaseFirestoreRepository<any, any>> = T extends BaseFirestoreRepository<infer Entity, any> ? Entity : never;\ntype ColParam<T extends BaseFirestoreRepository<any, any>> = Omit<ExtractParams<T['collectionPath']>, 'id'>;\ntype DocParam<T extends BaseFirestoreRepository<any, any>, TExtra = {}> = ColParam<T> & { id: string } & TExtra; \n\nexport abstract class BaseFirestoreRepository<Entity extends { id: string }, TExtraParams = {}> extends Repository<Entity> {\n abstract readonly collectionPath: string;\n protected abstract readonly adapter: FirestoreAdapter;\n protected abstract converter: IFirestoreConverter<Entity>;\n abstract readonly pathBuilder: FirestorePathBuilder<Entity, typeof this.collectionPath>;\n\n async list(paramMap?: ColParam<this>, query: any = q => q): Promise<Entity[]> {\n const collection = paramMap ? this.collection(paramMap) : this.collectionGroup();\n return this._list(query(collection));\n }\n\n listChanges(): Observable<Entity[]> {\n throw new Error('Method not implemented.');\n }\n\n async count(paramMap?: ColParam<this>): Promise<number> {\n return this.collection(paramMap).count();\n }\n\n async get(paramMap?: DocParam<this, TExtraParams>) {\n return this._get(this.doc(paramMap as any));\n }\n\n async save(entity: DocParam<this, TExtraParams> & Entity): Promise<[Entity, boolean]> {\n const docRef = this.doc({...entity, id: entity?.id || this.genId()});\n return this._save(docRef, entity);\n }\n\n async saveMany(entities: Entity[]): Promise<void> {\n return this.bulkWrite(entities as any);\n }\n\n async create(entity: DocParam<this, TExtraParams> & Entity): Promise<Entity> {\n const obj = toObject(entity) as DocParam<this, TExtraParams> & Entity;\n const id = obj?.id || this.genId();\n return toPromise(() => this.doc({...obj, id})).then(doc => this._create(doc, entity));\n }\n\n async createMany(entities: (DocParam<this, TExtraParams> & Entity)[]): Promise<Entity[]> {\n return Promise.all(entities.map(entity => this.create(entity)));\n }\n\n async update(entity: DocParam<this, TExtraParams> & Partial<Entity>): Promise<void> {\n return this.doc(entity).update(this.adapter.flattenForUpdate({\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(['updatedAt']),\n })).then(() => {}); \n }\n\n async updateMany(data: Partial<Entity>[]): Promise<void> {\n return this.bulkUpdate(data as any);\n }\n\n delete(paramMap: DocParam<this, TExtraParams>): Promise<void> {\n return this.doc(paramMap as any).delete();\n }\n\n async deleteMany(params: { id: string; }[]): Promise<number> {\n return params.reduce((batch, param) => {\n const doc = this.doc(param as any).__ref;\n return batch.delete(doc);\n }, this.adapter.batch()).commit().then(() => params.length);\n }\n\n async deleteAll(): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n async bulkWrite(entities: (DocParam<this, TExtraParams> & Entity)[], timestamps: string[] = []): Promise<void> {\n return entities.reduce((batch, entity) => {\n const doc = this.doc(entity).__ref;\n return batch.set(doc, {\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(timestamps),\n });\n }, this.adapter.batch()).commit();\n }\n\n async bulkCreate(entities: (DocParam<this, TExtraParams> & Entity)[]): Promise<void> {\n // TODO(nontangent): add maximum 500 record validation\n return entities.reduce((batch, entity) => {\n const doc = this.doc(entity).__ref;\n return batch.create(doc, {\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(['createdAt', 'updatedAt']),\n });\n }, this.adapter.batch()).commit();\n }\n\n async bulkUpdate(entities: (DocParam<this, TExtraParams> & Partial<Entity>)[]): Promise<void> {\n // TODO(nontangent): add maximum 500 record validation\n return entities.reduce((batch, entity) => {\n const doc = this.doc(entity).__ref;\n return batch.update(doc, {\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(['updatedAt']),\n });\n }, this.adapter.batch()).commit();\n }\n\n async bulkDelete(paramMaps: DocParam<this, TExtraParams>[]): Promise<void> {\n // MEMO(@nontangent): 500件以上の削除は未対応\n return paramMaps.reduce((batch, paramMap) => {\n const doc = this.doc(paramMap as any).__ref;\n return batch.delete(doc);\n }, this.adapter.batch()).commit();\n }\n\n protected collection(paramMap?: Omit<ExtractParams<typeof this.collectionPath>, 'id'>): CollectionReference<object> {\n const path = this.pathBuilder.collection(paramMap)\n return this.adapter.collection<object>(path);\n }\n\n protected collectionGroup(): CollectionGroup<object> {\n const path = this.pathBuilder.collectionGroup();\n return this.adapter.collectionGroup<object>(path);\n }\n\n protected doc(paramMap: DocParam<this, TExtraParams>): DocumentReference<object> {\n const path = this.pathBuilder.doc(paramMap as any);\n return this.adapter.doc<object>(path);\n }\n\n protected genId = (): string => generateId();\n\n protected _list(collection: CollectionReference<object>) {\n return collection.get().then(({docs}) => docs.map(doc => {\n if (!doesExist(doc)) return null;\n return this.converter.fromFirestore(doc);\n }));\n }\n\n protected _get(doc: DocumentReference<object>) {\n return doc.get().then((doc => {\n if (!doc.data()) return null;\n return this.converter.fromFirestore(doc)\n }));\n }\n\n protected async _save(doc: DocumentReference<object>, entity: Entity): Promise<[Entity, boolean]> {\n const exists = await doc.exists();\n if (exists) {\n return this._set(doc, entity).then(doc => [this.converter.fromFirestore(doc), false]);\n } else {\n return this._create(doc, entity).then(entity => [entity, true]);\n }\n }\n\n protected async _create(doc: DocumentReference<object>, entity: Entity): Promise<Entity> {\n const exists = await doc.exists().catch((error) => {\n // MEMO(@nontangent): bunで実行するときだけこのエラーがでるかもしれない。\n if (`${error}`.startsWith('Error: Did not receive document for')) return false;\n throw error;\n });\n if (exists) throw new Error('Document already exists');\n return doc.set({\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(['createdAt', 'updatedAt']),\n } as any).then(() => doc.get()).then(doc => this.converter.fromFirestore(doc));\n }\n\n protected _set(doc: DocumentReference<object>, entity: Partial<Entity>, isUpdate = true) {\n const data = this.converter.toFirestore(entity);\n return doc.set({\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(isUpdate ? ['updatedAt'] : []),\n } as any, {merge: isUpdate}).then(() => doc.get());\n }\n\n protected buildServerTimestampObject(keys: string[] = ['createdAt', 'updatedAt']) {\n return keys.reduce((m, k) => ({...m, [k]: this.adapter.FieldValue.serverTimestamp()}), {});\n }\n}\n\n@Injectable()\nexport abstract class FirestoreRepository<Entity extends { id: string }, TExtraParams = {}> extends BaseFirestoreRepository<Entity, TExtraParams> {\n protected readonly adapter = inject(FirestoreAdapter);\n get pathBuilder(): FirestorePathBuilder<Entity, typeof this.collectionPath> {\n return pathBuilderFactory(this.collectionPath);\n }\n}\n\nexport function getFirestoreRepository<Entity extends { id: string }, TExtraParams = {}>(\n entity: { new(): Entity },\n adapter: FirestoreAdapter = inject(FirestoreAdapter),\n): BaseFirestoreRepository<Entity, TExtraParams> {\n class FirestoreRepository extends BaseFirestoreRepository<Entity, TExtraParams> {\n constructor(\n protected readonly converter: IFirestoreConverter<Entity>,\n public readonly collectionPath: string,\n public pathBuilder: FirestorePathBuilder<Entity, any>,\n protected readonly adapter: FirestoreAdapter,\n ) { super(); }\n }\n\n return new FirestoreRepository(\n getConverter(entity, adapter),\n getCollection(entity),\n pathBuilderFactory(getCollection(entity)),\n adapter\n );\n}\n\nexport function injectFirestoreRepository<Entity extends { id: string }, TExtraParams = {}>(entity: { new(): Entity }): BaseFirestoreRepository<Entity, TExtraParams> {\n return getFirestoreRepository(entity, inject(FirestoreAdapter));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["String","Boolean","Number","Map","Array","map","take","switchMap","catchError","tap","distinctUntilChanged"],"mappings":"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"}
1
+ {"version":3,"file":"nx-ddd-firestore.mjs","sources":["../../../../../packages/@nx-ddd/firestore/src/lib/decorators/decorators.ts","../../../../../packages/@nx-ddd/firestore/src/lib/adapters/dayjs/dayjs.adatper.ts","../../../../../packages/@nx-ddd/firestore/src/lib/adapters/base/base.adapter.ts","../../../../../packages/@nx-ddd/firestore/src/lib/converter/converter.ts","../../../../../packages/@nx-ddd/firestore/src/lib/dao/firestore.dao.ts","../../../../../packages/@nx-ddd/firestore/src/lib/path-builder/path-builder.ts","../../../../../packages/@nx-ddd/firestore/src/lib/query/firestore.query.ts","../../../../../packages/@nx-ddd/firestore/src/lib/query/v2/query.ts","../../../../../packages/@nx-ddd/firestore/src/lib/query/v2/cached-query.ts","../../../../../packages/@nx-ddd/firestore/src/lib/repository/repository.ts","../../../../../packages/@nx-ddd/firestore/src/lib/nx-ddd-firestore.ts"],"sourcesContent":["import { makeDecoratorFactories } from '@nx-ddd/core';\n\nexport const FIRESTORE_ANNOTATIONS = 'firestore_annotations';\nexport type FirestoreFieldType = 'id' | 'boolean' | 'number' \n | 'timestamp' | 'string' | 'geopoint' | 'null' \n | 'map' | 'array' | 'reference';\nexport interface FirestoreAnnotation {\n type: FirestoreFieldType;\n fieldName: string;\n propName: string;\n childType: any;\n}\n\nexport const {\n createDecorator,\n createPropsDecorator,\n createClassDecorator,\n getAnnotations,\n} = makeDecoratorFactories<\n FirestoreFieldType,\n FirestoreAnnotation,\n {childType?: any}\n>(\n (type, fieldName, propName, options) => ({type, fieldName, propName, childType: options.childType}),\n FIRESTORE_ANNOTATIONS\n);\n\n/** @deprecated use getAnnotations */\nexport function getFirestoreAnnotations(target: any): FirestoreAnnotation[] {\n return getAnnotations(target);\n}\n\nexport const ID = createDecorator('id');\nexport const String = createDecorator('string');\nexport const Null = createDecorator('null');\nexport const Geopoint = createDecorator('geopoint');\nexport const Boolean = createDecorator('boolean');\nexport const Timestamp = createDecorator('timestamp');\nexport const Number = createDecorator('number');\nexport const Map = (childType?: () => any, props?: {name?: string}) => createDecorator('map', {childType})(props);\nexport const Array = (childType?: () => any, props?: {name?: string}) => createDecorator('array', {childType})(props);\nexport const Reference = createDecorator('reference');\n\nexport function getCollection(target: any): string {\n const annotations = getAnnotations(target);\n const annotation = annotations.find((annotation: any) => annotation.type === 'collection');\n return (annotation as any).name;\n}\n\nexport const Firestore = {\n Collection: createClassDecorator<{ name: string }>('collection'),\n ID: ID,\n String: String,\n Null: Null,\n Geopoint: Geopoint,\n Boolean: Boolean,\n Timestamp: Timestamp,\n Number: Number,\n Map: Map,\n Array: Array,\n Reference: Reference,\n};\n","import { Injectable } from '@angular/core';\nimport dayjs from 'dayjs';\n\n@Injectable({ providedIn: 'root' })\nexport class DateAdapter {\n isDate<D>(value: any): value is D {\n return value instanceof Date || dayjs.isDayjs(value);\n }\n\n isValid(value: any): boolean {\n return this.isDate<Date>(value) && !isNaN(value.getTime());\n }\n\n getJsDate<D>(value: any): D {\n return value as D;\n }\n\n convertToDate<D>(value: Date): D {\n return value as D;\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class DayjsAdapter {\n constructor(private readonly dateAdapter: DateAdapter) {}\n\n isDayjs(value: any): value is dayjs.Dayjs {\n return dayjs.isDayjs(value);\n }\n\n isValid(value: any): boolean {\n return this.isDayjs(value) && value.isValid();\n }\n\n getJsDate(value: dayjs.Dayjs): Date {\n return value.toDate();\n }\n\n convertToDayjs<D>(value: any): D {\n return dayjs(value) as D;\n }\n}\n","import { inject } from '@angular/core';\nimport { getFirestoreAnnotations } from '../../decorators/decorators';\nimport { walkObj } from '@nx-ddd/core';\nimport { get } from 'lodash-es';\nimport type {\n CollectionReference,\n CollectionGroup,\n DocumentReference,\n ToFirestoreData,\n Timestamp,\n Query,\n FieldValue,\n DocumentData\n} from '../../interfaces';\nimport { DateAdapter } from '../dayjs';\n\nexport type QueryFn<AppModelType, DbModelType, R> = (\n collection?: any\n) => R;\nexport type WhereFilterOp = '<' | '<=' | '==' | '!=' | '>=' | '>' | 'array-contains' | 'in' | 'array-contains-any' | 'not-in';\n\n\nexport abstract class FirestoreAdapter<Date = any> {\n protected dateAdapter = inject(DateAdapter);\n\n protected abstract isTimestamp(v: any): v is Timestamp;\n protected abstract isFieldValue(v: any): v is FieldValue;\n\n abstract get Timestamp(): any\n abstract get FieldValue(): any\n abstract get FieldPath(): any\n\n abstract doc<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(path: string): DocumentReference<AppModelType>;\n\n abstract collection<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(path: string): CollectionReference<AppModelType, DbModelType>;\n\n abstract collectionGroup<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(collectionId: string): CollectionGroup<AppModelType, DbModelType>;\n\n abstract query<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(\n collection: CollectionReference<AppModelType, DbModelType>,\n ...queryFnArray: QueryFn<AppModelType, DbModelType, any>[]\n ): Query<AppModelType, DbModelType>;\n\n abstract where<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(key: string, evaluation: WhereFilterOp, value: unknown): QueryFn<AppModelType, DbModelType, any>;\n\n abstract orderBy<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(key: string, order: 'asc' | 'desc'): QueryFn<AppModelType, DbModelType, any>;\n\n abstract limit<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(n: number): QueryFn<AppModelType, DbModelType, any>;\n\n abstract runTransaction(fn: any): any;\n abstract batch(): any;\n\n //** @deprecated */\n toFirestoreData<Entity>(entity: Entity): ToFirestoreData<Entity, Date> {\n return Object.entries(entity as Record<string, unknown>).reduce((pre, [k, v]) => ({\n ...pre, [k]: this.dateAdapter.isDate<Date>(v) ? this.convertDateToTimestamp(v) : v,\n }), {} as ToFirestoreData<Entity, Date>);\n }\n\n //** @deprecated */\n fromFirestoreData<Entity>(data: ToFirestoreData<Entity, Date>): Entity {\n return Object.entries(data as Record<string, unknown>).reduce((pre, [k, v]) => ({\n ...pre, [k]: this.isTimestamp(v) ? this.convertTimestampToDate(v) : v,\n }), {} as Entity);\n }\n\n toFirestore<T>(obj: object, Entity: new () => T): object {\n const newObj: Record<string, any> = {};\n for (const annotation of getFirestoreAnnotations(Entity)) {\n const _value = get(obj, annotation.propName);\n if (_value === null) {\n newObj[annotation.fieldName] = null;\n continue;\n }\n switch(annotation.type) {\n case 'id':\n case 'string':\n case 'number': \n case 'boolean': {\n if (typeof _value === 'undefined') break;\n newObj[annotation.fieldName] = _value;\n break;\n }\n case 'timestamp': {\n if (typeof _value === 'undefined') break;\n if (!this.dateAdapter.isDate<Date>(_value)) {\n console.error('[FirestoreAdapter] _value:', _value);\n throw new Error(`Invalid Date Type: ${_value}`);\n }\n newObj[annotation.fieldName] = this.convertDateToTimestamp(_value);\n break;\n }\n case 'array': {\n if (typeof annotation?.childType === 'undefined') {\n if (_value) newObj[annotation.fieldName] = _value;\n } else {\n const Type = (annotation as any).childType();\n if (typeof _value === 'undefined') break;\n if (!Array.isArray(_value)) {\n newObj[annotation.fieldName] = [];\n break;\n }\n const value = (_value ?? []).map(v => {\n switch (Type) {\n case String:\n case Number:\n return v\n default: \n return this.toFirestore(v, Type);\n }\n });\n if (value) newObj[annotation.fieldName] = value\n }\n break;\n }\n case 'map': {\n if (typeof _value === 'undefined') break;\n if (typeof (annotation as any)?.childType === 'undefined') {\n if (_value) newObj[annotation.fieldName] = _value;\n } else {\n const Type = (annotation as any).childType();\n const value = this.toFirestore(_value, Type);\n if (value) newObj[annotation.fieldName] = value;\n }\n break;\n }\n }\n }\n return newObj;\n }\n \n fromFirestore<T = any>(data: any, Entity: new() => T): T {\n const newObj: Record<string, any> = {};\n for (const annotation of getFirestoreAnnotations(Entity)) {\n const _value = data[annotation.fieldName];\n if (typeof _value === 'undefined') continue;\n if (_value === null) {\n newObj[annotation.propName] = null;\n continue;\n }\n\n switch(annotation.type) {\n case 'id':\n case 'string':\n case 'number':\n case 'boolean': {\n newObj[annotation.propName] = _value;\n break;\n }\n case 'timestamp': {\n try {\n newObj[annotation.propName] = this.convertTimestampToDate(_value);\n } catch (e) {\n newObj[annotation.propName] = _value;\n }\n break;\n }\n case 'array': {\n if (typeof annotation?.childType === 'undefined') {\n newObj[annotation.propName] = _value;\n } else {\n const Type = (annotation as any).childType();\n const value = _value.map((v: any) => {\n switch (Type) {\n case String:\n case Number:\n return v\n default:\n return this.fromFirestore(v, Type);\n }\n });\n if (value) newObj[annotation.propName] = value\n }\n break;\n }\n case 'map': {\n if (typeof annotation?.childType === 'undefined') {\n newObj[annotation.propName] = _value;\n } else {\n const Type = (annotation as any).childType();\n const value = this.fromFirestore(_value, Type);\n if (value) newObj[annotation.propName] = value;\n }\n break;\n }\n }\n }\n return newObj as T;\n }\n\n /**\n * @description FirestoreのUpdateは通常のオブジェクトでは孫以下のプロパティが既存データとマージされないので、パスに変換する必要がある。\n */\n flattenForUpdate(obj: any): any {\n const newObj: Record<string, any> = {};\n walkObj(obj, {\n callback: (paths, value) => newObj[paths.join('.')] = value,\n overwrite: (_, value) => {\n if (Array.isArray(value)) return [true, value];\n if (this.isTimestamp(value)) return [true, value as any];\n if (this.isFieldValue(value)) return [true, value];\n return [false]\n }\n });\n return newObj;\n }\n\n convertDateToTimestamp(date: Date): Timestamp {\n return this.Timestamp.fromDate(date);\n }\n\n convertTimestampToDate(timestamp: Timestamp): Date {\n return this.dateAdapter.convertToDate(timestamp.toDate())\n }\n \n}\n\nexport function provideFirestoreAdapter(useClass: new () => FirestoreAdapter) {\n return { provide: FirestoreAdapter, useClass };\n}\n","import { inject } from '@angular/core';\nimport { plainToInstanceWithValid } from '@nx-ddd/core';\nimport { FirestoreAdapter } from '../adapters/base';\nimport { DocumentSnapshot } from '../interfaces';\n\nexport interface IFirestoreConverter<E extends {id: string}> {\n fromFirestore(doc: DocumentSnapshot<object>): E;\n fromFirestoreMany(docs: DocumentSnapshot<object>[]): E[];\n toFirestore(entity: Partial<E>): object;\n fromObject?(obj: object): E;\n toObject?(entity: E): object;\n}\n\nclass FirestoreHelper {\n static fromFirestore<E extends {id: string}>(doc: DocumentSnapshot<object>, Entity: new () => E, adapter: FirestoreAdapter): E {\n const data = adapter.fromFirestore({...doc.data(), id: doc.id}, Entity);\n return plainToInstanceWithValid(Entity, data);\n }\n}\n\nclass BasicConverter<E extends {id: string}> {\n constructor(\n protected readonly Entity: new () => E,\n protected readonly adapter: FirestoreAdapter,\n ) { }\n\n fromFirestore(doc: DocumentSnapshot<any>): E {\n return this.adapter.fromFirestore({\n ...doc.data(),\n id: doc.id\n }, this.Entity);\n }\n\n fromFirestoreMany(docs: DocumentSnapshot<any>[]): E[] {\n return docs.map(doc => this.fromFirestore(doc));\n }\n\n toFirestore(entity: E): object {\n return this.adapter.toFirestore(entity, this.Entity);\n }\n}\n\nexport function getConverter<Entity extends {id: string}>(\n Entity: new () => Entity,\n adapter: FirestoreAdapter = inject(FirestoreAdapter),\n): IFirestoreConverter<Entity> {\n return new BasicConverter(Entity, adapter);\n}\n\nexport function injectConverter<Entity extends {id: string}>(Entity: new () => Entity): IFirestoreConverter<Entity> {\n return getConverter(Entity, inject(FirestoreAdapter));\n}\n","import dayjs from 'dayjs';\nimport { FirestoreAdapter } from '../adapters/base';\nimport { CollectionReference, CollectionGroup, DocumentReference, ToFirestoreData, CollectionLike } from '../interfaces';\nimport { FirestorePathBuilder } from '../path-builder';\n\n\nexport class FirestoreDAO<\n Entity extends {id: string}, \n FirestoreData = ToFirestoreData<Entity, dayjs.Dayjs>,\n> {\n\n constructor(\n protected adapter: FirestoreAdapter,\n protected pathBuilder: FirestorePathBuilder<Entity>,\n ) { }\n\n collection(paramMap?: Partial<Entity>): CollectionReference<FirestoreData> {\n const path = this.pathBuilder.collection(paramMap)\n return this.adapter.collection<FirestoreData>(path);\n }\n\n collectionGroup():CollectionGroup<FirestoreData> {\n const path = this.pathBuilder.collectionGroup();\n return this.adapter.collectionGroup<FirestoreData>(path);\n }\n\n doc(paramMap: Partial<Entity> & {id: string}): DocumentReference<FirestoreData> {\n const path = this.pathBuilder.doc(paramMap);\n return this.adapter.doc<FirestoreData>(path);\n }\n\n getCollection(paramMap?: Partial<Entity>): CollectionLike {\n return (paramMap ? this.collection(paramMap) : this.collectionGroup()) as CollectionLike;\n }\n}\n","type CollectionParamMap<Entity extends {id: string}> = Partial<Entity>;\ntype DocParamMap<Entity extends {id: string}> = CollectionParamMap<Entity> & Pick<Entity, 'id'>;\n\nexport type ExtractParams<T extends string> = \n T extends `${infer _Start}:${infer Param}/${infer Rest}`\n ? { [K in Param | keyof ExtractParams<Rest>]: string }\n : T extends `${infer _Start}:${infer Param}`\n ? { [K in Param]: string }\n : {};\n\ntype Params = ExtractParams<'users/:userId/images/:id'>;\n\nexport type ColParam<T extends {readonly collectionPath: string}> = Omit<ExtractParams<T['collectionPath']>, 'id'>;\nexport type DocParam<T extends {readonly collectionPath: string}> = ColParam<T> & {id: string}; \n\nexport class FirestorePathBuilder<\n Entity extends { id: string },\n Path extends string = string,\n> {\n doc(param: DocParamMap<Entity>) {\n return resolvePaths(param, this.paths);\n }\n\n collection(param: Omit<ExtractParams<Path>, 'id'> | {} = {}) {\n return resolvePaths(param, this.paths.slice(0, -1));\n }\n\n collectionGroup() {\n return this.paths[this.paths.length-2];\n }\n\n constructor(private paths: string[]) { }\n}\n\nexport function pathBuilderFactory<\n E extends { id: string },\n Path extends string = string\n>(\n path: Path\n): FirestorePathBuilder<E, Path> {\n const paths = parsePath<Path>(path);\n return new FirestorePathBuilder(paths);\n}\n\nexport function parsePath<Path extends string = string>(path: Path): string[] {\n const paths = path.split('/').filter(p => p.length);\n if (!paths[paths.length-1].startsWith(':')) paths.push(':id');\n return paths;\n}\n\nexport const resolvePaths = (obj: object, paths: string[]): string => {\n return paths.map((path) => path.startsWith(':') ? resolvePath(obj, path.slice(1)) : path).join('/');\n}\n\nconst resolvePath = (obj: object, key: string) => {\n if (!(obj as Record<string, unknown>)?.[key]) throw new Error(`Invalid key is detected in resolving paths, key: \\`${key}\\`, obj: \\`${JSON.stringify(obj)}\\``);\n return (obj as Record<string, unknown>)?.[key];\n}\n","import dayjs from 'dayjs';\nimport { Observable, ReplaySubject, lastValueFrom, of, throwError } from 'rxjs';\nimport { catchError, distinctUntilChanged, map, shareReplay, switchMap, take, tap } from 'rxjs/operators';\nimport { FirestoreAdapter } from '../adapters/base';\nimport { IFirestoreConverter } from '../converter';\nimport { FirestoreDAO } from '../dao';\nimport { FirestorePathBuilder } from '../path-builder';\nimport { DocumentSnapshot, CollectionReference, CollectionGroup, ToFirestoreData, CollectionLike } from '../interfaces';\n\nexport class FirestoreQuery<\n Entity extends {id: string} = any, \n FirestoreData = ToFirestoreData<Entity, dayjs.Dayjs>,\n> extends FirestoreDAO<Entity, FirestoreData> {\n constructor(\n adapter: FirestoreAdapter,\n protected converter: IFirestoreConverter<Entity>,\n protected pathBuilder: FirestorePathBuilder<Entity>\n ) {\n super(adapter, pathBuilder);\n this.switchCollectionRef();\n }\n\n protected readonly collection$ = new ReplaySubject<CollectionLike<FirestoreData>>(1);\n protected readonly list$ = this.collection$.pipe(\n switchMap((collection) => this.listChangesByCollectionRef(collection).pipe(\n catchError(error => throwError(() => error)),\n )),\n shareReplay(1),\n )\n\n /** @deprecated */\n listChanges(paramMap?: Partial<Entity>, options: {switch?: boolean} = {switch: true}): Observable<Entity[]> {\n return of(paramMap).pipe(\n tap((paramMap) => options?.switch && this.switchCollectionRef(paramMap)),\n switchMap(() => this.list$),\n );\n }\n\n listChangesV2(paramMap?: Partial<Entity>): Observable<Entity[]> {\n return of(paramMap).pipe(\n tap((paramMap) => paramMap && this.switchCollectionRef(paramMap)),\n switchMap(() => this.list$),\n );\n }\n\n listChangesAfter(updatedAt: dayjs.Dayjs, {limit}: {limit?: number} = {}) {\n const entitiesMap = new Map<string, Entity>();\n const _updatedAt = dayjs.isDayjs(updatedAt) ? this.adapter.convertDateToTimestamp(updatedAt) : updatedAt\n return this.adapter.query(\n this.collection(),\n ...[\n this.adapter.where('updatedAt', '>', _updatedAt),\n this.adapter.orderBy('updatedAt', 'asc'),\n limit ? this.adapter.limit(limit) : undefined,\n ].filter(Boolean) as any[],\n ).stateChanges!().pipe(\n // bufferTime(1_000),\n // map(zippedActions => zippedActions.flat()),\n tap(actions => actions.forEach(({type, payload: {doc}}) => {\n if (new Set(['added', 'modified']).has(type)) {\n entitiesMap.set(doc.id, this.converter.fromFirestore(doc as DocumentSnapshot<any>));\n } else if (type === 'removed') {\n entitiesMap.delete(doc.id);\n }\n })),\n map(() => [...entitiesMap.values()]),\n );\n }\n\n changes({id}: Partial<Entity>) {\n if (!id) throw new Error(`Invalid Id. it must be Truthy`);\n return this.list$.pipe(\n map(entities => entities.find(entity => entity.id === id)),\n distinctUntilChanged((pre, cur) => JSON.stringify(pre) === JSON.stringify(cur)),\n );\n }\n\n changesV2(params: Partial<Entity>): Observable<Entity> {\n const docRef = this.doc(params as any);\n return docRef.stateChanges!().pipe(\n map((doc) => this.converter.fromFirestore((doc as any))),\n );\n }\n\n get({id}: Partial<Entity> & {id: string}) {\n return lastValueFrom(this.list$.pipe(\n take(1),\n map(entities => entities.find(entity => entity.id === id)),\n ));\n }\n\n list(paramMap?: Partial<Entity>) {\n this.switchCollectionRef(paramMap);\n return lastValueFrom(this.list$.pipe(take(1)));\n }\n\n protected listChangesByCollectionRef(\n collection: CollectionReference<FirestoreData> | CollectionGroup<FirestoreData>\n ): Observable<Entity[]> {\n const entitiesMap = new Map<string, any>();\n return collection.stateChanges!().pipe(\n tap(actions => actions.forEach(({type, payload: {doc}}) => {\n if (new Set(['added', 'modified']).has(type)) {\n entitiesMap.set(doc.id, this.converter.fromFirestore((doc as any)));\n } else if (type === 'removed') {\n entitiesMap.delete(doc.id);\n }\n })),\n map(() => [...entitiesMap.values()]),\n );\n }\n\n protected switchCollectionRef(paramMap?: Partial<Entity>) {\n const collection = this.getCollection(paramMap);\n this.switchCollection(collection);\n }\n\n switchCollection(collection: CollectionLike<any>) {\n this.collection$.next(collection);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { FirestoreAdapter } from '../../adapters';\nimport { getConverter, IFirestoreConverter } from '../../converter';\nimport { FirestoreDAO } from '../../dao';\nimport { getCollection } from '../../decorators';\nimport { CollectionLike, DocumentReference } from '../../interfaces';\nimport { ExtractParams, FirestorePathBuilder, pathBuilderFactory } from '../../path-builder';\nimport { catchError, lastValueFrom, map, NEVER, Observable, of, switchMap, take, tap } from 'rxjs';\n\ntype ColParam<T extends BaseFirestoreQuery<any>> = Omit<ExtractParams<T['collectionPath']>, 'id'>;\ntype DocParam<T extends BaseFirestoreQuery<any>> = ColParam<T> & {id: string}; \n\nexport abstract class BaseFirestoreQuery<Entity extends {id: string} = any> {\n protected abstract readonly adapter: FirestoreAdapter;\n protected abstract readonly converter: IFirestoreConverter<Entity>;\n abstract readonly collectionPath: string;\n protected abstract pathBuilder: FirestorePathBuilder<Entity, typeof this.collectionPath>;\n protected abstract dao: FirestoreDAO<Entity>;\n\n count(paramMap?: ColParam<this>): Promise<number> {\n return this.dao.getCollection(paramMap as any).count();\n }\n\n changes(params: DocParam<this>): Observable<Entity> {\n const docRef = this.dao.doc(params as any);\n return docRef.stateChanges!().pipe(\n map((doc) => this.converter.fromFirestore((doc as any))),\n );\n }\n\n get(paramMap: DocParam<this>): Promise<Entity> {\n return lastValueFrom(this.changes(paramMap).pipe(take(1)));\n }\n\n list(paramMap?: ColParam<this>): Promise<Entity[]> {\n return lastValueFrom(this.listChanges(paramMap as any).pipe(take(1)));\n }\n\n listChanges(paramMap?: ColParam<this>): Observable<Entity[]> {\n return of(paramMap).pipe(\n map((paramMap) => this.dao.getCollection(paramMap as any)),\n switchMap((collection) => {\n return this.getListChanges$ByCollectionLike(collection)\n }),\n );\n }\n\n protected getChanges$ByDocument(\n doc: DocumentReference\n ): Observable<Entity> {\n return doc.stateChanges!().pipe(\n map((doc) => this.converter.fromFirestore(doc)),\n catchError((error) => {\n console.error(error);\n return NEVER;\n }),\n );\n }\n\n protected getListChanges$ByCollectionLike(\n collection: CollectionLike\n ): Observable<Entity[]> {\n const entitiesMap = new Map<string, any>();\n return collection.stateChanges!().pipe(\n tap(actions => actions.forEach(({type, payload: {doc}}) => {\n if (new Set(['added', 'modified']).has(type)) {\n entitiesMap.set(doc.id, this.converter.fromFirestore((doc as any)));\n } else if (type === 'removed') {\n entitiesMap.delete(doc.id);\n }\n })),\n map(() => [...entitiesMap.values()]),\n catchError((error) => {\n console.error(error);\n return NEVER;\n }),\n );\n }\n}\n\n@Injectable()\nexport abstract class FirestoreQuery<Entity extends {id: string} = any> extends BaseFirestoreQuery<Entity> {\n protected readonly adapter = inject(FirestoreAdapter);\n abstract readonly collectionPath: string;\n protected abstract readonly converter: IFirestoreConverter<Entity>;\n\n get pathBuilder(): FirestorePathBuilder<Entity, typeof this.collectionPath> {\n return pathBuilderFactory(this.collectionPath);\n }\n\n protected get dao() {\n return new FirestoreDAO<Entity>(this.adapter, this.pathBuilder);\n } \n}\n\n\nexport function getFirestoreQuery<Entity extends {id: string}>(\n entity: { new(): Entity },\n adapter: FirestoreAdapter = inject(FirestoreAdapter),\n): BaseFirestoreQuery<Entity> {\n\n class FirestoreQuery extends BaseFirestoreQuery<Entity> {\n constructor(\n protected readonly converter: IFirestoreConverter<Entity>,\n public readonly collectionPath: string,\n public pathBuilder: FirestorePathBuilder<Entity, any>,\n protected readonly adapter: FirestoreAdapter,\n protected readonly dao: FirestoreDAO<Entity>,\n ) { super(); }\n }\n\n return new FirestoreQuery(\n getConverter(entity, adapter),\n getCollection(entity),\n pathBuilderFactory(getCollection(entity)),\n adapter,\n new FirestoreDAO<Entity>(adapter, pathBuilderFactory(getCollection(entity))),\n );\n}\n\nexport function injectFirestoreQuery<Entity extends {id: string}>(entity: { new(): Entity }): BaseFirestoreQuery<Entity> {\n return getFirestoreQuery(entity, inject(FirestoreAdapter));\n}\n","import { Injectable } from \"@angular/core\";\nimport { FirestoreQuery } from \"./query\";\nimport { ExtractParams } from \"../../path-builder\";\nimport Dexie, { liveQuery, Observable as DexieObservable } from 'dexie';\nimport { catchError, combineLatest, distinctUntilChanged, map, NEVER, Observable, of, retry, switchMap, tap, throttleTime } from 'rxjs';\nimport dayjs from \"dayjs\";\nimport { CollectionLike } from \"../../interfaces\";\n\ntype ColParam<T extends {readonly collectionPath: string}> = Omit<ExtractParams<T['collectionPath']>, 'id'>;\ntype DocParam<T extends {readonly collectionPath: string}> = ColParam<T> & {id: string}; \n\nfunction fromDexie<T>(observable: DexieObservable<T>): Observable<T> {\n return new Observable(subscriber => observable.subscribe(subscriber));\n}\n\ninterface EntityData {\n id: string;\n value: string;\n collectionPath: string;\n updatedAt: string;\n}\n\nclass DexieAdapter<E extends {id: string, updatedAt: dayjs.Dayjs}> extends Dexie {\n entities!: Dexie.Table<EntityData, string>;\n\n constructor() {\n super('@nx-ddd/firestore/cached-query');\n this.version(3).stores({ entities: '++id' });\n }\n\n count$() {\n return fromDexie(liveQuery(() => this.entities.count()));\n }\n\n getLastUpdatedAt$(collectionPath: string) {\n return of(null).pipe(\n switchMap((() => fromDexie(liveQuery(() => this.entities.toArray())))),\n map((entities) => entities.filter(entity => entity.collectionPath === collectionPath)),\n map(entities => entities.sort((a, b) => {\n if (!a?.updatedAt) return -1;\n if (!b?.updatedAt) return 1;\n return dayjs(a?.updatedAt).diff(dayjs(b?.updatedAt));\n }).at(-1)),\n map(entity => entity?.updatedAt ? dayjs(entity?.updatedAt) : dayjs('1970-01-01')),\n distinctUntilChanged((pre, cur) => pre.isSame(cur)),\n );\n }\n\n async bulkPut(collectionPath: string, entities: E[]) {\n return this.entities.bulkPut(entities.map(entity => {\n const key = `${entity.id}`;\n return {\n id: key,\n collectionPath,\n value: JSON.stringify(entity),\n updatedAt: entity.updatedAt.toISOString(),\n };\n }));\n }\n\n listChanges(collectionPath: string): Observable<E[]> {\n return of(null).pipe(\n switchMap(() => fromDexie(liveQuery(() => this.entities.toArray()))),\n map((entities) => entities.filter(entity => entity.collectionPath === collectionPath)),\n map((entities) => entities.map(entity => JSON.parse(entity.value) as E)),\n );\n }\n}\n\nclass FirestoreIndexedDbCached<E extends {id: string, updatedAt: dayjs.Dayjs}> {\n constructor(protected collectionPath: string) { }\n\n readonly adapter = new DexieAdapter<E>();\n\n getLastUpdatedAt$() {\n return this.adapter.getLastUpdatedAt$(this.collectionPath);\n }\n\n async setMany(entities: E[]) {\n return this.adapter.bulkPut(this.collectionPath, entities);\n }\n\n listChanges() {\n return this.adapter.listChanges(this.collectionPath);\n }\n}\n\n@Injectable()\nexport abstract class CachedFirestoreQuery<E extends {id: string, updatedAt: dayjs.Dayjs} = any> extends FirestoreQuery<E> {\n protected _cached!: FirestoreIndexedDbCached<E>;\n protected get cached() {\n return this._cached ??= new FirestoreIndexedDbCached<E>(this.collectionPath);\n }\n\n protected readonly config = {\n throttleTime: 5_000,\n loadChunkSize: 1_000,\n };\n\n override listChanges(paramMap?: ColParam<this>): Observable<E[]> {\n const collection = this.dao.getCollection(paramMap as any);\n return this.cached.getLastUpdatedAt$().pipe(\n switchMap((lastUpdatedAt) => this._listChangesAfter(collection, lastUpdatedAt, {\n limit: this.config.loadChunkSize,\n }).pipe(\n retry(3),\n tap((updated) => this.cached.setMany(updated)),\n tap((updated) => console.log('updated:', updated)),\n catchError((error) => (console.error(error), NEVER)),\n )),\n switchMap(() => this.cached.listChanges()),\n map((entities) => entities.map(entity => this.converter.fromObject!(entity))),\n throttleTime(this.config.throttleTime),\n );\n }\n\n protected _listChange(paramMap?: ColParam<this>): Observable<E[]> {\n return of(paramMap).pipe(\n map((paramMap) => this.dao.getCollection(paramMap as any)),\n map((collection) => this.adapter.query(collection, this.adapter.limit(10))),\n switchMap((collection) => this.getListChanges$ByCollectionLike(collection)),\n );\n }\n\n protected _listChangesAfter(collection: CollectionLike, updatedAt: dayjs.Dayjs, {limit}: {limit?: number} = {}) {\n const updatedAtTs = dayjs.isDayjs(updatedAt) ? this.adapter.convertDateToTimestamp(updatedAt) : updatedAt\n const query = this.adapter.query(\n collection,\n ...[\n this.adapter.where('updatedAt', '>', updatedAtTs),\n this.adapter.orderBy('updatedAt', 'asc'),\n limit ? this.adapter.limit(limit) : undefined,\n ].filter(Boolean) as any[],\n );\n return this.getListChanges$ByCollectionLike(query);\n }\n\n progressChanges() {\n return combineLatest({\n cloud: this.count(),\n local: this.listChanges().pipe(map(items => items.length)),\n });\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Repository } from '@nx-ddd/common/domain';\nimport { toObject } from '@nx-ddd/common';\nimport { generateId } from '@nx-ddd/common';\nimport { FirestoreAdapter } from '../adapters/base';\nimport { getConverter, IFirestoreConverter } from '../converter';\nimport { ExtractParams, FirestorePathBuilder, pathBuilderFactory } from '../path-builder';\nimport { CollectionReference, CollectionGroup, DocumentReference, DocumentSnapshot } from '../interfaces';\nimport { Observable } from 'rxjs';\nimport { getCollection } from '../decorators/decorators';\n\nconst toPromise = (callback: () => any) => new Promise<ReturnType<typeof callback>>((resolve, reject) => {\n try { resolve(callback()); } catch (error) { reject(error); }\n});\n\nfunction doesExist(doc: DocumentSnapshot): boolean {\n if (typeof doc.exists === 'function') {\n return doc.exists();\n }\n return doc.exists as boolean;\n}\n\n// FirestoreRepositoryからEnriryを取得するinfer\nexport type ExtractEntity<T extends BaseFirestoreRepository<any, any>> = T extends BaseFirestoreRepository<infer Entity, any> ? Entity : never;\ntype ColParam<T extends BaseFirestoreRepository<any, any>> = Omit<ExtractParams<T['collectionPath']>, 'id'>;\ntype DocParam<T extends BaseFirestoreRepository<any, any>, TExtra = {}> = ColParam<T> & { id: string } & TExtra; \n\nexport abstract class BaseFirestoreRepository<Entity extends { id: string }, TExtraParams = {}> extends Repository<Entity> {\n abstract readonly collectionPath: string;\n protected abstract readonly adapter: FirestoreAdapter;\n protected abstract converter: IFirestoreConverter<Entity>;\n abstract readonly pathBuilder: FirestorePathBuilder<Entity, typeof this.collectionPath>;\n\n async list(paramMap?: ColParam<this>, query: any = (q: any) => q): Promise<Entity[]> {\n const collection = paramMap ? this.collection(paramMap) : this.collectionGroup();\n return this._list(query(collection)) as Promise<Entity[]>;\n }\n\n listChanges(): Observable<Entity[]> {\n throw new Error('Method not implemented.');\n }\n\n async count(paramMap?: ColParam<this>): Promise<number> {\n return this.collection(paramMap).count();\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore -- overrides base class with extended params and nullable return\n async get(paramMap?: DocParam<this, TExtraParams>): Promise<Entity | null> {\n return this._get(this.doc(paramMap as any));\n }\n\n async save(entity: DocParam<this, TExtraParams> & Entity): Promise<[Entity, boolean]> {\n const docRef = this.doc({...entity, id: entity?.id || this.genId()});\n return this._save(docRef, entity);\n }\n\n async saveMany(entities: Entity[]): Promise<void> {\n return this.bulkWrite(entities as any);\n }\n\n async create(entity: DocParam<this, TExtraParams> & Entity): Promise<Entity> {\n const obj = toObject(entity) as DocParam<this, TExtraParams> & Entity;\n const id = obj?.id || this.genId();\n return toPromise(() => this.doc({...obj, id})).then(doc => this._create(doc, entity));\n }\n\n async createMany(entities: (DocParam<this, TExtraParams> & Entity)[]): Promise<Entity[]> {\n return Promise.all(entities.map(entity => this.create(entity)));\n }\n\n async update(entity: DocParam<this, TExtraParams> & Partial<Entity>): Promise<void> {\n return this.doc(entity).update(this.adapter.flattenForUpdate({\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(['updatedAt']),\n })).then(() => {}); \n }\n\n async updateMany(data: Partial<Entity>[]): Promise<void> {\n return this.bulkUpdate(data as any);\n }\n\n delete(paramMap: DocParam<this, TExtraParams>): Promise<void> {\n return this.doc(paramMap as any).delete();\n }\n\n async deleteMany(params: { id: string; }[]): Promise<number> {\n return params.reduce((batch, param) => {\n const doc = this.doc(param as any).__ref;\n return batch.delete(doc);\n }, this.adapter.batch()).commit().then(() => params.length);\n }\n\n async deleteAll(): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n async bulkWrite(entities: (DocParam<this, TExtraParams> & Entity)[], timestamps: string[] = []): Promise<void> {\n return entities.reduce((batch, entity) => {\n const doc = this.doc(entity).__ref;\n return batch.set(doc, {\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(timestamps),\n });\n }, this.adapter.batch()).commit();\n }\n\n async bulkCreate(entities: (DocParam<this, TExtraParams> & Entity)[]): Promise<void> {\n // TODO(nontangent): add maximum 500 record validation\n return entities.reduce((batch, entity) => {\n const doc = this.doc(entity).__ref;\n return batch.create(doc, {\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(['createdAt', 'updatedAt']),\n });\n }, this.adapter.batch()).commit();\n }\n\n async bulkUpdate(entities: (DocParam<this, TExtraParams> & Partial<Entity>)[]): Promise<void> {\n // TODO(nontangent): add maximum 500 record validation\n return entities.reduce((batch, entity) => {\n const doc = this.doc(entity).__ref;\n return batch.update(doc, {\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(['updatedAt']),\n });\n }, this.adapter.batch()).commit();\n }\n\n async bulkDelete(paramMaps: DocParam<this, TExtraParams>[]): Promise<void> {\n // MEMO(@nontangent): 500件以上の削除は未対応\n return paramMaps.reduce((batch, paramMap) => {\n const doc = this.doc(paramMap as any).__ref;\n return batch.delete(doc);\n }, this.adapter.batch()).commit();\n }\n\n protected collection(paramMap?: Omit<ExtractParams<typeof this.collectionPath>, 'id'>): CollectionReference<object> {\n const path = this.pathBuilder.collection(paramMap)\n return this.adapter.collection<object>(path);\n }\n\n protected collectionGroup(): CollectionGroup<object> {\n const path = this.pathBuilder.collectionGroup();\n return this.adapter.collectionGroup<object>(path);\n }\n\n protected doc(paramMap: DocParam<this, TExtraParams>): DocumentReference<object> {\n const path = this.pathBuilder.doc(paramMap as any);\n return this.adapter.doc<object>(path);\n }\n\n protected genId = (): string => generateId();\n\n protected _list(collection: CollectionReference<object>) {\n return collection.get().then(({docs}) => docs.map(doc => {\n if (!doesExist(doc)) return null;\n return this.converter.fromFirestore(doc);\n }));\n }\n\n protected _get(doc: DocumentReference<object>) {\n return doc.get().then((doc => {\n if (!doc.data()) return null;\n return this.converter.fromFirestore(doc)\n }));\n }\n\n protected async _save(doc: DocumentReference<object>, entity: Entity): Promise<[Entity, boolean]> {\n const exists = await doc.exists();\n if (exists) {\n return this._set(doc, entity).then(doc => [this.converter.fromFirestore(doc), false]);\n } else {\n return this._create(doc, entity).then(entity => [entity, true]);\n }\n }\n\n protected async _create(doc: DocumentReference<object>, entity: Entity): Promise<Entity> {\n const exists = await doc.exists().catch((error) => {\n // MEMO(@nontangent): bunで実行するときだけこのエラーがでるかもしれない。\n if (`${error}`.startsWith('Error: Did not receive document for')) return false;\n throw error;\n });\n if (exists) throw new Error('Document already exists');\n return doc.set({\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(['createdAt', 'updatedAt']),\n } as any).then(() => doc.get()).then(doc => this.converter.fromFirestore(doc));\n }\n\n protected _set(doc: DocumentReference<object>, entity: Partial<Entity>, isUpdate = true) {\n const data = this.converter.toFirestore(entity);\n return doc.set({\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(isUpdate ? ['updatedAt'] : []),\n } as any, {merge: isUpdate}).then(() => doc.get());\n }\n\n protected buildServerTimestampObject(keys: string[] = ['createdAt', 'updatedAt']) {\n return keys.reduce((m, k) => ({...m, [k]: this.adapter.FieldValue.serverTimestamp()}), {});\n }\n}\n\n@Injectable()\nexport abstract class FirestoreRepository<Entity extends { id: string }, TExtraParams = {}> extends BaseFirestoreRepository<Entity, TExtraParams> {\n protected readonly adapter = inject(FirestoreAdapter);\n get pathBuilder(): FirestorePathBuilder<Entity, typeof this.collectionPath> {\n return pathBuilderFactory(this.collectionPath);\n }\n}\n\nexport function getFirestoreRepository<Entity extends { id: string }, TExtraParams = {}>(\n entity: { new(): Entity },\n adapter: FirestoreAdapter = inject(FirestoreAdapter),\n): BaseFirestoreRepository<Entity, TExtraParams> {\n class FirestoreRepository extends BaseFirestoreRepository<Entity, TExtraParams> {\n constructor(\n protected readonly converter: IFirestoreConverter<Entity>,\n public readonly collectionPath: string,\n public pathBuilder: FirestorePathBuilder<Entity, any>,\n protected readonly adapter: FirestoreAdapter,\n ) { super(); }\n }\n\n return new FirestoreRepository(\n getConverter(entity, adapter),\n getCollection(entity),\n pathBuilderFactory(getCollection(entity)),\n adapter\n );\n}\n\nexport function injectFirestoreRepository<Entity extends { id: string }, TExtraParams = {}>(entity: { new(): Entity }): BaseFirestoreRepository<Entity, TExtraParams> {\n return getFirestoreRepository(entity, inject(FirestoreAdapter));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["String","Boolean","Number","Map","Array","map","take","switchMap","catchError","tap","distinctUntilChanged"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx-ddd/firestore",
3
- "version": "19.34.0",
3
+ "version": "19.36.0",
4
4
  "main": "./index.js",
5
5
  "types": "./index.d.ts",
6
6
  "homepage": "https://github.com/xx-machina/plaform/tree/main/packages/@nx-ddd/firestore",
@@ -9,8 +9,8 @@
9
9
  "url": "https://github.com/xx-machina/plaform.git"
10
10
  },
11
11
  "peerDependencies": {
12
- "@nx-ddd/common": "19.34.0",
13
- "@nx-ddd/core": "19.34.0"
12
+ "@nx-ddd/common": "19.36.0",
13
+ "@nx-ddd/core": "19.36.0"
14
14
  },
15
15
  "dependencies": {
16
16
  "tslib": "^2.3.0"
@@ -186,12 +186,12 @@ interface FirestoreAnnotation {
186
186
  }
187
187
  declare const createDecorator: (type: FirestoreFieldType, options?: {
188
188
  childType?: any;
189
- }) => (nameOrProps?: {
189
+ } | undefined) => (nameOrProps?: {
190
190
  name?: string;
191
191
  } | string) => (target: any, propName: string) => void;
192
192
  declare const createPropsDecorator: (type: FirestoreFieldType, options?: {
193
193
  childType?: any;
194
- }) => (nameOrProps?: {
194
+ } | undefined) => (nameOrProps?: {
195
195
  name?: string;
196
196
  } | string) => (target: any, propName: string) => void;
197
197
  declare const createClassDecorator: <Props extends {
@@ -253,11 +253,11 @@ declare class FirestoreQuery$1<Entity extends {
253
253
  listChangesAfter(updatedAt: dayjs__default.Dayjs, { limit }?: {
254
254
  limit?: number;
255
255
  }): Observable<Entity[]>;
256
- changes({ id }: Partial<Entity>): Observable<Entity>;
256
+ changes({ id }: Partial<Entity>): Observable<Entity | undefined>;
257
257
  changesV2(params: Partial<Entity>): Observable<Entity>;
258
258
  get({ id }: Partial<Entity> & {
259
259
  id: string;
260
- }): Promise<Entity>;
260
+ }): Promise<Entity | undefined>;
261
261
  list(paramMap?: Partial<Entity>): Promise<Entity[]>;
262
262
  protected listChangesByCollectionRef(collection: CollectionReference<FirestoreData> | CollectionGroup<FirestoreData>): Observable<Entity[]>;
263
263
  protected switchCollectionRef(paramMap?: Partial<Entity>): void;
@@ -375,7 +375,7 @@ declare abstract class BaseFirestoreRepository<Entity extends {
375
375
  list(paramMap?: ColParam<this>, query?: any): Promise<Entity[]>;
376
376
  listChanges(): Observable<Entity[]>;
377
377
  count(paramMap?: ColParam<this>): Promise<number>;
378
- get(paramMap?: DocParam<this, TExtraParams>): Promise<Entity>;
378
+ get(paramMap?: DocParam<this, TExtraParams>): Promise<Entity | null>;
379
379
  save(entity: DocParam<this, TExtraParams> & Entity): Promise<[Entity, boolean]>;
380
380
  saveMany(entities: Entity[]): Promise<void>;
381
381
  create(entity: DocParam<this, TExtraParams> & Entity): Promise<Entity>;
@@ -395,8 +395,8 @@ declare abstract class BaseFirestoreRepository<Entity extends {
395
395
  protected collectionGroup(): CollectionGroup<object>;
396
396
  protected doc(paramMap: DocParam<this, TExtraParams>): DocumentReference<object>;
397
397
  protected genId: () => string;
398
- protected _list(collection: CollectionReference<object>): Promise<Entity[]>;
399
- protected _get(doc: DocumentReference<object>): Promise<Entity>;
398
+ protected _list(collection: CollectionReference<object>): Promise<(Entity | null)[]>;
399
+ protected _get(doc: DocumentReference<object>): Promise<Entity | null>;
400
400
  protected _save(doc: DocumentReference<object>, entity: Entity): Promise<[Entity, boolean]>;
401
401
  protected _create(doc: DocumentReference<object>, entity: Entity): Promise<Entity>;
402
402
  protected _set(doc: DocumentReference<object>, entity: Partial<Entity>, isUpdate?: boolean): Promise<DocumentSnapshot<object, _nx_ddd_firestore.DocumentData>>;