{"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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"}