{"version":3,"file":"simplyfire-ngx.mjs","sources":["../../packages/ngx/db/AbstractFirestoreApi.ts","../../packages/ngx/db/QueryBuilder.ts","../../packages/ngx/utils/arrays.ts","../../packages/ngx/utils/index.ts","../../packages/ngx/services/firestore.service.ts","../../packages/ngx/simplyfire-ngx.ts"],"sourcesContent":["import type {\r\n  DocumentData,\r\n  DocumentReference,\r\n  DocumentSnapshot,\r\n  FieldValue,\r\n  QuerySnapshot,\r\n  SetOptions,\r\n  Transaction,\r\n  WriteBatch\r\n} from '@firebase/firestore-types';\r\nimport { QueryBuilder } from './QueryBuilder';\r\n\r\nexport abstract class AbstractFirestoreApi {\r\n  // Maximum number of writes that can be passed to a Commit operation\r\n  // or performed in a transaction\r\n  // https://cloud.google.com/firestore/quotas#writes_and_transactions\r\n  BATCH_MAX_WRITES = 500;\r\n\r\n  abstract collection<T = any>(path: string, qb?: QueryBuilder, maxAge?: number): Promise<T[]>;\r\n  abstract collectionGroup<T = any>(collectionId: string, qb?: QueryBuilder, maxAge?: number): Promise<T[]>;\r\n  abstract collectionSnapshot(path: string, qb?: QueryBuilder): Promise<QuerySnapshot<DocumentData>>;\r\n  abstract doc<T = any>(path: string, maxAge?: number): Promise<T>;\r\n  abstract docRef(docPath: string): DocumentReference<DocumentData>;\r\n\r\n  abstract upsert(collection: string, data: { [key: string]: any }, opts?: SetOptions): Promise<string>;\r\n  abstract update(docPath: string, data: { [key: string]: any }): Promise<void>;\r\n  abstract delete(docPath: string): Promise<void>;\r\n\r\n  abstract bulkUpsert(\r\n    collection: string,\r\n    data: DocumentData[] | { data: DocumentData; qb?: QueryBuilder },\r\n    opts?: SetOptions\r\n  ): Promise<string[]>;\r\n  abstract bulkDelete(collection: string, qb?: QueryBuilder): Promise<string[]>;\r\n  abstract runTransaction(updateFunction: (transaction: Transaction) => Promise<unknown>): Promise<unknown>;\r\n\r\n  abstract get batch(): WriteBatch;\r\n  abstract get serverTimestamp(): FieldValue;\r\n\r\n  abstract increment(n?: number): FieldValue;\r\n\r\n  abstract createId(collection?: string): string;\r\n\r\n  getValueFromSnapshot<T = any>(snapshot: DocumentSnapshot): T {\r\n    return (snapshot.exists ? snapshot.data() : null) as T;\r\n  }\r\n}\r\n","import type {\r\n  CollectionReference,\r\n  DocumentData,\r\n  DocumentSnapshot,\r\n  FieldPath,\r\n  OrderByDirection,\r\n  Query,\r\n  WhereFilterOp\r\n} from '@firebase/firestore-types';\r\n\r\ntype QueryWhere = [fieldPath: string | FieldPath, opStr: WhereFilterOp, value: unknown];\r\ntype QueryOrderBy = [fieldPath: string | FieldPath, directionStr?: OrderByDirection];\r\ntype QueryLeftJoin = [idField: string, collection: string, alias: string];\r\ntype QueryCursor = [snapshot: DocumentSnapshot<unknown>] | unknown[];\r\n\r\ndeclare const window: any;\r\n\r\nexport class QueryBuilder {\r\n  private _where: QueryWhere[] = [];\r\n  private _orderBy: QueryOrderBy[] = [];\r\n  private _leftJoins: QueryLeftJoin[] = [];\r\n  private _limit?: number;\r\n  private _limitToLast?: number;\r\n  private _startAt?: QueryCursor;\r\n  private _startAfter?: QueryCursor;\r\n  private _endAt?: QueryCursor;\r\n  private _endBefore?: QueryCursor;\r\n\r\n  get joins() {\r\n    return this._leftJoins;\r\n  }\r\n\r\n  where(...where: QueryWhere) {\r\n    this._where.push(where);\r\n\r\n    return this;\r\n  }\r\n\r\n  orderBy(...orderBy: QueryOrderBy) {\r\n    this._orderBy.push(orderBy);\r\n\r\n    return this;\r\n  }\r\n\r\n  leftJoin(...leftJoin: QueryLeftJoin) {\r\n    this._leftJoins.push(leftJoin);\r\n  }\r\n\r\n  limit(limit: number) {\r\n    this._limit = limit;\r\n    return this;\r\n  }\r\n\r\n  limitToLast(limitToLast: number) {\r\n    this._limitToLast = limitToLast;\r\n    return this;\r\n  }\r\n\r\n  startAt(...startAt: QueryCursor) {\r\n    this._startAt = startAt;\r\n    return this;\r\n  }\r\n\r\n  startAfter(...startAfter: QueryCursor) {\r\n    this._startAfter = startAfter;\r\n    return this;\r\n  }\r\n\r\n  endAt(...endAt: QueryCursor) {\r\n    this._endAt = endAt;\r\n    return this;\r\n  }\r\n\r\n  endBefore(...endBefore: QueryCursor) {\r\n    this._endBefore = endBefore;\r\n    return this;\r\n  }\r\n\r\n  // Still have to use <any> type due to most interfaces of @google-cloud/firestore\r\n  // are not compatible with @firebase/firestore's interfaces.\r\n  exec(ref: CollectionReference<DocumentData> | any, queryOps?: { [key: string]: any }): Query<DocumentData> | any {\r\n    if (typeof window === 'undefined') {\r\n      return this.execQueryForCloud(ref);\r\n    }\r\n\r\n    if (!queryOps) {\r\n      throw Error('invalid arguments');\r\n    }\r\n\r\n    const { query, where, orderBy, limit, limitToLast, startAt, startAfter, endAt, endBefore } = queryOps;\r\n\r\n    const queryConstraints = [\r\n      ...this._where.map((w) => where(...w)),\r\n      ...this._orderBy.map((o) => orderBy(...o)),\r\n      ...(this._limit ? [limit(this._limit)] : []),\r\n      ...(this._limitToLast ? [limitToLast(this._limitToLast)] : []),\r\n      ...(this._startAt?.every((i) => !!i) ? [startAt(...this._startAt)] : []),\r\n      ...(this._startAfter?.every((i) => !!i) ? [startAfter(...this._startAfter)] : []),\r\n      ...(this._endAt?.every((i) => !!i) ? [endAt(...this._endAt)] : []),\r\n      ...(this._endBefore?.every((i) => !!i) ? [endBefore(...this._endBefore)] : [])\r\n    ];\r\n\r\n    return query(ref, ...queryConstraints);\r\n  }\r\n\r\n  private execQueryForCloud(ref: CollectionReference<DocumentData>): Query<DocumentData> {\r\n    let query = this._where.reduce((q, wh) => q.where(...wh), ref);\r\n    query = this._orderBy.reduce((q, ob) => q.orderBy(...ob), query);\r\n\r\n    if (this._limit) {\r\n      query = query.limit(this._limit);\r\n    }\r\n\r\n    if (this._limitToLast) {\r\n      query = query.limitToLast(this._limitToLast);\r\n    }\r\n\r\n    if (this._startAt) {\r\n      query = query.startAt(this._startAt);\r\n    }\r\n\r\n    if (this._startAfter) {\r\n      query = query.startAfter(this._startAfter);\r\n    }\r\n\r\n    if (this._endAt) {\r\n      query = query.endAt(this._endAt);\r\n    }\r\n\r\n    if (this._endBefore) {\r\n      query = query.endBefore(this._endBefore);\r\n    }\r\n\r\n    return query;\r\n  }\r\n}\r\n","// chunk array to a certain size\r\nexport const arrayToChunks = (list: any[], size: number) => {\r\n  list = [...list];\r\n\r\n  return [...Array(Math.ceil(list.length / size))].map((_) => list.splice(0, size));\r\n};\r\n","import { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport * from './arrays';\r\n\r\n// flatten the array of observables to one level deep\r\nexport const flatten = (source: Observable<any[]>) => {\r\n  return source.pipe(map((arr) => arr.reduce((acc: any[], cur: any[]) => acc.concat(cur))));\r\n};\r\n","import { Injectable, EnvironmentInjector, inject, runInInjectionContext } from '@angular/core';\r\nimport {\r\n  getFirestore,\r\n  doc,\r\n  docData,\r\n  addDoc,\r\n  setDoc,\r\n  updateDoc,\r\n  deleteDoc,\r\n  collection,\r\n  collectionData,\r\n  collectionGroup,\r\n  collectionChanges,\r\n  getDocs,\r\n  increment,\r\n  writeBatch,\r\n  serverTimestamp,\r\n  query,\r\n  where,\r\n  orderBy,\r\n  limit,\r\n  limitToLast,\r\n  startAt,\r\n  startAfter,\r\n  endAt,\r\n  endBefore,\r\n  runTransaction,\r\n  documentId\r\n} from '@angular/fire/firestore';\r\nimport type {\r\n  Firestore,\r\n  DocumentChangeType,\r\n  DocumentData,\r\n  QuerySnapshot,\r\n  SetOptions,\r\n  Transaction\r\n} from '@angular/fire/firestore';\r\n\r\nimport { combineLatest, defer, lastValueFrom, Observable, of } from 'rxjs';\r\nimport { map, switchMap, take } from 'rxjs/operators';\r\n\r\nimport { QueryBuilder, AbstractFirestoreApi } from '../db';\r\nimport { arrayToChunks } from '../utils';\r\n\r\nconst queryOps = {\r\n  query,\r\n  where,\r\n  orderBy,\r\n  limit,\r\n  limitToLast,\r\n  startAt,\r\n  startAfter,\r\n  endAt,\r\n  endBefore\r\n};\r\n\r\nconst CACHE_MAX_AGE = 5 * 60 * 1000;\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class FirestoreService extends AbstractFirestoreApi {\r\n  private injector = inject(EnvironmentInjector);\r\n\r\n  private run<T>(fn: () => T): T {\r\n    return runInInjectionContext(this.injector, fn);\r\n  }\r\n\r\n  get firestore(): Firestore {\r\n    return this.run(() => getFirestore());\r\n  }\r\n\r\n  private cache = new Map<string, any>();\r\n\r\n  // -----------------------------------------------------------------------------------------------------\r\n  // @ Abstract members\r\n  // -----------------------------------------------------------------------------------------------------\r\n\r\n  collection<T = any>(path: string, qb?: QueryBuilder, maxAge = CACHE_MAX_AGE): Promise<T[]> {\r\n    return lastValueFrom(this.collectionWithCache(path, qb, maxAge).pipe(take(1)));\r\n  }\r\n\r\n  collectionGroup<T = any>(collectionId: string, qb?: QueryBuilder, maxAge = CACHE_MAX_AGE): Promise<T[]> {\r\n    return lastValueFrom(this.collectionGroupWithCache(collectionId, qb, maxAge).pipe(take(1)));\r\n  }\r\n\r\n  doc<T = any>(path: string, maxAge = CACHE_MAX_AGE): Promise<T> {\r\n    return lastValueFrom(this.docWithCache(path, maxAge).pipe(take(1)));\r\n  }\r\n\r\n  docRef(path: string) {\r\n    return this.run(() => doc(this.firestore, path) as any);\r\n  }\r\n\r\n  async upsert(\r\n    collectionPath: string,\r\n    data: { [key: string]: any },\r\n    opts: SetOptions = { merge: true }\r\n  ): Promise<string> {\r\n    const timestamp = this.serverTimestamp;\r\n\r\n    let { id, ...updata } = data;\r\n    updata.createdTs ??= timestamp;\r\n    updata.updatedTs = timestamp;\r\n\r\n    if (id) {\r\n      await this.run(() =>\r\n        setDoc(this.docRef(`${collectionPath}/${id}`), Object.assign({}, updata), opts)\r\n      );\r\n    } else {\r\n      id = (await this.run(() =>\r\n        addDoc(collection(this.firestore, collectionPath), updata)\r\n      )).id;\r\n    }\r\n\r\n    return id;\r\n  }\r\n\r\n  update(docPath: string, data: { [key: string]: any }) {\r\n    const updatedTs = this.serverTimestamp;\r\n\r\n    // ignore id\r\n    delete data['id'];\r\n\r\n    return this.run(() =>\r\n      updateDoc(this.docRef(docPath), Object.assign({}, data, { updatedTs }))\r\n    );\r\n  }\r\n\r\n  delete(docPath: string) {\r\n    return this.run(() => deleteDoc(this.docRef(docPath)));\r\n  }\r\n\r\n  async bulkUpsert(\r\n    path: string,\r\n    data: DocumentData[] | { data: DocumentData; qb?: QueryBuilder },\r\n    opts: SetOptions = { merge: true }\r\n  ): Promise<string[]> {\r\n    const bulkIds = [];\r\n    const promises = [];\r\n\r\n    if (Array.isArray(data)) {\r\n      // Due to a batch limitation, need to split docs array into chunks\r\n      for (const chunks of arrayToChunks(data, this.BATCH_MAX_WRITES)) {\r\n        const batch = this.batch;\r\n        const timestamp = this.serverTimestamp;\r\n\r\n        chunks.forEach(({ id, ...updata }) => {\r\n          updata.createdTs ??= timestamp;\r\n          updata.updatedTs = timestamp;\r\n\r\n          let docRef: any;\r\n\r\n          if (id) {\r\n            docRef = this.docRef(`${path}/${id}`);\r\n          } else {\r\n            docRef = doc(collection(this.firestore, path));\r\n          }\r\n\r\n          bulkIds.push(docRef.id);\r\n          batch.set(docRef, updata, opts);\r\n        });\r\n\r\n        const p = batch.commit();\r\n        promises.push(p);\r\n      }\r\n    } else {\r\n      const snapshot = await this.collectionSnapshot(path, data.qb);\r\n\r\n      // Due to a batch limitation, need to split docs array into chunks\r\n      for (const chunks of arrayToChunks(snapshot.docs, this.BATCH_MAX_WRITES)) {\r\n        const batch = this.batch;\r\n        const timestamp = this.serverTimestamp;\r\n\r\n        chunks.forEach((d) =>\r\n          batch.set(d.ref, { updatedTs: timestamp, ...data.data }, opts) && bulkIds.push(d.id)\r\n        );\r\n\r\n        const p = batch.commit();\r\n        promises.push(p);\r\n      }\r\n    }\r\n\r\n    await Promise.all(promises);\r\n\r\n    return bulkIds;\r\n  }\r\n\r\n  async bulkDelete(path: string, qb?: QueryBuilder, maxSize = 1000): Promise<string[]> {\r\n    qb ??= new QueryBuilder();\r\n    qb.limit(maxSize);\r\n\r\n    const bulkIds = [];\r\n    const promises = [];\r\n\r\n    const snapshot: QuerySnapshot<DocumentData> = await this.collectionSnapshot(path, qb);\r\n\r\n    // Due to a batch limitation, need to split docs array into chunks\r\n    for (const chunks of arrayToChunks(snapshot.docs, this.BATCH_MAX_WRITES)) {\r\n      const batch = this.batch;\r\n\r\n      chunks.forEach((d) => batch.delete(d.ref) && bulkIds.push(d.id));\r\n      const p = batch.commit();\r\n      promises.push(p);\r\n    }\r\n\r\n    await Promise.all(promises);\r\n\r\n    return bulkIds;\r\n  }\r\n\r\n  /**\r\n   * write batch\r\n   */\r\n  get batch() {\r\n    return this.run(() => writeBatch(this.firestore) as any);\r\n  }\r\n\r\n  /**\r\n   * firestore timestamp\r\n   */\r\n  get serverTimestamp() {\r\n    return this.run(() => serverTimestamp());\r\n  }\r\n\r\n  /**\r\n   * FieldValue increment\r\n   */\r\n  increment(n = 1) {\r\n    return this.run(() => increment(n));\r\n  }\r\n\r\n  /**\r\n   * Returns a generated Firestore Document Id.\r\n   */\r\n  createId(colPath?: string) {\r\n    return this.run(() => doc(collection(this.firestore, colPath ?? '_')).id);\r\n  }\r\n\r\n  runTransaction(updateFunction: (transaction: Transaction | any) => Promise<unknown>): Promise<unknown> {\r\n    return this.run(() => runTransaction(this.firestore, updateFunction));\r\n  }\r\n\r\n  // -----------------------------------------------------------------------------------------------------\r\n  // @ Custom methods\r\n  // -----------------------------------------------------------------------------------------------------\r\n\r\n  collectionValueChanges<T = any>(path: string, qb?: QueryBuilder): Observable<T[]> {\r\n    qb ??= new QueryBuilder();\r\n\r\n    return this.run(() => {\r\n      const collectionRef = collection(this.firestore, path);\r\n      return collectionData(qb.exec(collectionRef, queryOps), { idField: 'id' } as any).pipe((s) =>\r\n        (qb?.joins ?? []).map((j) => leftJoin(this, ...j)).reduce((ss, o) => o(ss), s)\r\n      );\r\n    }) as Observable<T[]>;\r\n  }\r\n\r\n  collectionGroupValueChanges<T = any>(collectionId: string, qb?: QueryBuilder): Observable<T[]> {\r\n    qb ??= new QueryBuilder();\r\n    \r\n    return this.run(() => {\r\n      const collectionRef = collectionGroup(this.firestore, collectionId);\r\n      return collectionData(qb.exec(collectionRef, queryOps), { idField: 'id' } as any).pipe((s) =>\r\n        (qb?.joins ?? []).map((j) => leftJoin(this, ...j)).reduce((ss, o) => o(ss), s)\r\n      );\r\n    }) as Observable<T[]>;\r\n  }\r\n\r\n  collectionSnapshot(path: string, qb?: QueryBuilder): Promise<QuerySnapshot<any> | any> {\r\n    qb ??= new QueryBuilder();\r\n\r\n    return this.run(() => {\r\n      const collectionRef = collection(this.firestore, path);\r\n      return getDocs(qb.exec(collectionRef, queryOps));\r\n    });\r\n  }\r\n\r\n  collectionSnapshotChanges<T = any>(path: string, qb?: QueryBuilder, events?: DocumentChangeType[]): Observable<T[]> {\r\n    qb ??= new QueryBuilder();\r\n    \r\n    return this.run(() => {\r\n      const collectionRef: any = collection(this.firestore, path);\r\n      return collectionChanges(qb.exec(collectionRef, queryOps), { events }).pipe(\r\n        map((changes) => changes.map((c) => Object.assign({}, c.doc.data(), { id: c.doc.id } as any))),\r\n        (s) => (qb?.joins ?? []).map((j) => leftJoin(this, ...j)).reduce((ss, o) => o(ss), s)\r\n      );\r\n    })\r\n  }\r\n\r\n  collectionGroupSnapshotChanges<T = any>(\r\n    collectionId: string,\r\n    qb?: QueryBuilder,\r\n    events?: DocumentChangeType[]\r\n  ): Observable<T[]> {\r\n    qb ??= new QueryBuilder();\r\n\r\n    return this.run(() => {\r\n      const collectionRef: any = collectionGroup(this.firestore, collectionId);\r\n\r\n      return collectionChanges(qb.exec(collectionRef, queryOps), { events }).pipe(\r\n        map((changes) => changes.map((c) => Object.assign({}, c.doc.data(), { id: c.doc.id } as any))),\r\n        (s) => (qb?.joins ?? []).map((j) => leftJoin(this, ...j)).reduce((ss, o) => o(ss), s)\r\n      );\r\n    });\r\n  }\r\n\r\n  docValueChanges<T = any>(path: string): Observable<T> {\r\n    return this.run(() => {\r\n      const docRef: any = doc(this.firestore, path);\r\n      return docData<T>(docRef, { idField: 'id' } as any) as Observable<T>;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * @experimental\r\n   *\r\n   * Cache collection data in memory\r\n   */\r\n  collectionWithCache<T = any>(path: string, qb?: QueryBuilder, maxAge?: number): Observable<T[]> {\r\n    return this.fetchFromCache(path + (qb ? JSON.stringify(qb) : ''), this.collectionValueChanges<T>(path, qb), maxAge);\r\n  }\r\n\r\n  /**\r\n   * @experimental\r\n   *\r\n   * Cache collectionGroup data in memory\r\n   */\r\n  collectionGroupWithCache<T = any>(collectionId: string, qb?: QueryBuilder, maxAge?: number): Observable<T[]> {\r\n    return this.fetchFromCache(\r\n      collectionId + (qb ? JSON.stringify(qb) : ''),\r\n      this.collectionGroupValueChanges<T>(collectionId, qb),\r\n      maxAge\r\n    );\r\n  }\r\n\r\n  /**\r\n   * @experimental\r\n   *\r\n   * Cache document data in memory\r\n   */\r\n  docWithCache(path: string, maxAge?: number) {\r\n    return this.fetchFromCache(path, this.docValueChanges(path), maxAge);\r\n  }\r\n\r\n  /**\r\n   * @experimental\r\n   *\r\n   * Delete cached data from the memory\r\n   */\r\n  deleteCache(path: string, qb?: QueryBuilder) {\r\n    const key = path + (qb ? JSON.stringify(qb) : '');\r\n    return this.cache.delete(key);\r\n  }\r\n\r\n  private fetchFromCache(key: string, source: Observable<any>, maxAge: number) {\r\n    const cached = this.cache.get(key);\r\n\r\n    if (maxAge === 0 || !cached || (maxAge && Date.now() - cached.lastRead > maxAge)) {\r\n      return source.pipe(map((data) => this.cache.set(key, { lastRead: Date.now(), data }) && data));\r\n    }\r\n\r\n    return of(cached.data);\r\n  }\r\n}\r\n\r\nconst leftJoin = (fs: FirestoreService, key: string, collection: string, alias: string, maxAge?: number) => {\r\n  if (key === alias) {\r\n    throw Error('Due to use of Cache, you must use different alias for a key.');\r\n  }\r\n\r\n  return (source: Observable<any | any[]>) =>\r\n    defer(() => {\r\n      let ret: any;\r\n\r\n      return source.pipe(\r\n        switchMap((data) => {\r\n          ret = data;\r\n\r\n          const fetchJoinData = (id: string | string[]) => {\r\n            if (Array.isArray(id)) {\r\n              const qb = new QueryBuilder();\r\n              qb.where(documentId(), 'in', id);\r\n              return fs.collectionWithCache(collection, qb, maxAge);\r\n            }\r\n\r\n            return fs.docWithCache(`${collection}/${id}`, maxAge);\r\n          };\r\n\r\n          if (Array.isArray(data)) {\r\n            const docs$ = (ret as any[]).filter((i) => i[key]).map((i) => fetchJoinData(i[key]));\r\n            return docs$.length ? combineLatest(docs$) : of([]);\r\n          }\r\n\r\n          return data && data[key] ? fetchJoinData(data[key]) : of(null);\r\n        }),\r\n        map((joins) => {\r\n          if (Array.isArray(ret)) {\r\n            return ret.map((r) => {\r\n              const id = r[key];\r\n              if (id) {\r\n                if (Array.isArray(id)) {\r\n                  r[alias] = joins\r\n                    .filter(\r\n                      (j: any) =>\r\n                        Array.isArray(j) && JSON.stringify(j.map((jj) => jj.id).sort()) === JSON.stringify(id.sort())\r\n                    )\r\n                    .pop();\r\n                } else {\r\n                  r[alias] = joins.filter((j: any) => j?.id === id).pop();\r\n                }\r\n              }\r\n\r\n              return r;\r\n            });\r\n          }\r\n\r\n          if (ret) {\r\n            ret[alias] = joins;\r\n          }\r\n\r\n          return ret;\r\n        })\r\n      );\r\n    });\r\n};\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}