{"version":3,"file":"irshadali-ngx-indexed-db.mjs","sources":["../../../projects/ngx-indexed-db/src/lib/ngx-indexed-db.meta.ts","../../../projects/ngx-indexed-db/src/utils/index.ts","../../../projects/ngx-indexed-db/src/lib/ngx-indexed-db.ts","../../../projects/ngx-indexed-db/src/lib/decorators.ts","../../../projects/ngx-indexed-db/src/lib/ngx-indexed-db.service.ts","../../../projects/ngx-indexed-db/src/ssr/server-indexed-db.ts","../../../projects/ngx-indexed-db/src/ssr/index.ts","../../../projects/ngx-indexed-db/src/lib/provide-indexed-db.ts","../../../projects/ngx-indexed-db/src/lib/ngxindexeddb.module.ts","../../../projects/ngx-indexed-db/src/irshadali-ngx-indexed-db.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface DBConfig {\n  name: string;\n  version?: number;\n  objectStoresMeta: ObjectStoreMeta[];\n  migrationFactory?: () => { [key: number]: (db: IDBDatabase, transaction: IDBTransaction) => void };\n  isDefault?: boolean;\n}\n\nexport interface ObjectStoreMeta {\n  store: string;\n  storeConfig: { keyPath: string | string[]; autoIncrement: boolean; [key: string]: any };\n  storeSchema: ObjectStoreSchema[];\n}\n\nexport interface ObjectStoreSchema {\n  name: string;\n  keypath: string | string[];\n  options: { unique: boolean; [key: string]: any };\n}\n\nexport interface IndexDetails {\n  indexName: string;\n  order: string;\n}\n\nexport interface RequestEvent<T> extends Event {\n  target: RequestEventTarget<T>;\n}\n\nexport interface RequestEventTarget<T> extends EventTarget {\n  result: T | T[];\n}\n\nexport enum DBMode {\n  readonly = 'readonly',\n  readwrite = 'readwrite',\n}\n\nexport type Key = string | number | Date | ArrayBufferView | ArrayBuffer | IDBValidKey | IDBKeyRange;\n\nexport type WithID = { id: number };\n\nexport const CONFIG_TOKEN = new InjectionToken<Record<string, DBConfig>>(null);\nexport const INDEXED_DB = new InjectionToken<IDBFactory>('Indexed DB');\n/**\n * Token used to inject the indexed db implementation on the server\n */\nexport const SERVER_INDEXED_DB = new InjectionToken<IDBFactory>('Server Indexed DB');\n","export interface Options {\n  storeName: string;\n  dbMode: IDBTransactionMode;\n  error: (e: Event) => any;\n  complete?: (e: Event) => any;\n  abort?: any;\n}\n\nexport function validateStoreName(db: IDBDatabase, storeName: string): boolean {\n  return db.objectStoreNames.contains(storeName);\n}\n\nexport function validateBeforeTransaction(db: IDBDatabase, storeName: string, reject: (message: string) => void): void {\n  if (!db) {\n    reject('You need to use the openDatabase function to create a database before you query it!');\n    return; // Stop further execution\n  }\n  if (!validateStoreName(db, storeName)) {\n    reject(`objectStore does not exists: ${storeName}`);\n  }\n}\n\nexport function createTransaction(db: IDBDatabase, options: Options): IDBTransaction {\n  const trans: IDBTransaction = db.transaction(options.storeName, options.dbMode);\n  trans.onerror = options.error;\n  trans.onabort = options.abort;\n  return trans;\n}\n\nexport function optionsGenerator(\n  type: any,\n  storeName: any,\n  reject: (reason?: any) => void,\n  resolve?: (e: any) => void\n): Options {\n  return {\n    storeName,\n    dbMode: type,\n    error: (e: Event) => {\n      reject(e);\n    },\n    abort: (e: Event) => {\n      reject(e);\n    },\n  };\n}\n","import { ObjectStoreMeta } from './ngx-indexed-db.meta';\nimport { Observable, Subscriber } from 'rxjs';\n\nexport const openedDatabases: IDBDatabase[] = [];\n\nexport function openDatabase(\n  indexedDB: IDBFactory,\n  dbName: string,\n  version?: number,\n  upgradeCallback?: (a: Event, b: IDBDatabase) => void\n): Promise<IDBDatabase> {\n  return new Promise<IDBDatabase>((resolve, reject) => {\n    if (!indexedDB) {\n      reject('IndexedDB not available');\n    }\n    const request = indexedDB.open(dbName, version);\n    let db: IDBDatabase;\n    request.onsuccess = (event: Event) => {\n      db = request.result;\n      openedDatabases.push(db);\n      resolve(db);\n    };\n    request.onerror = (event: Event) => {\n      reject(`IndexedDB error: ${request.error}`);\n    };\n    if (typeof upgradeCallback === 'function') {\n      request.onupgradeneeded = (event: Event) => {\n        upgradeCallback(event, db);\n      };\n    }\n  });\n}\n\nexport async function CreateObjectStore(\n  indexedDB: IDBFactory,\n  dbName: string,\n  version: number,\n  storeSchemas: ObjectStoreMeta[],\n  migrationFactory?: () => { [key: number]: (db: IDBDatabase, transaction: IDBTransaction) => void }\n): Promise<void> {\n  return new Promise<void>((resolve, reject) => {\n    if (!indexedDB) {\n      return;\n    }\n    const request: IDBOpenDBRequest = indexedDB.open(dbName, version);\n    request.onupgradeneeded = async (event: IDBVersionChangeEvent) => {\n      const database: IDBDatabase = (event.target as any).result;\n\n      const storeCreationPromises = storeSchemas.map(async (storeSchema) => {\n        if (!database.objectStoreNames.contains(storeSchema.store)) {\n          const objectStore = database.createObjectStore(storeSchema.store, storeSchema.storeConfig);\n          for (const schema of storeSchema.storeSchema) {\n            objectStore.createIndex(schema.name, schema.keypath, schema.options);\n          }\n        }\n      });\n\n      await Promise.all(storeCreationPromises);\n\n      const storeMigrations = migrationFactory && migrationFactory();\n      if (storeMigrations) {\n        const migrationKeys = Object.keys(storeMigrations)\n          .map((k) => parseInt(k, 10))\n          .filter((v) => v > event.oldVersion)\n          .sort((a, b) => a - b);\n\n        for (const v of migrationKeys) {\n          storeMigrations[v](database, request.transaction);\n        }\n      }\n\n      database.close();\n      resolve();\n    };\n\n    request.onsuccess = (e: any) => {\n      e.target.result.close();\n      resolve();\n    };\n\n    request.onerror = (error: Event) => {\n      reject(error);\n    };\n  });\n}\n\nexport function DeleteObjectStore(dbName: string, version: number, storeName: string): Observable<boolean> {\n  if (!dbName || !version || !storeName) {\n    throw Error('Params: \"dbName\", \"version\", \"storeName\" are mandatory.');\n  }\n\n  return new Observable<boolean>((obs: Subscriber<boolean>) => {\n    try {\n      const newVersion = version + 1;\n      const request: IDBOpenDBRequest = indexedDB.open(dbName, newVersion);\n      request.onupgradeneeded = (event: IDBVersionChangeEvent) => {\n        const database: IDBDatabase = (event.target as any).result;\n\n        database.deleteObjectStore(storeName);\n        database.close();\n        console.log('onupgradeneeded');\n        obs.next(true);\n        obs.complete();\n      };\n\n      request.onerror = (e) => obs.error(e);\n    } catch (error) {\n      obs.error(error);\n    }\n  });\n}\n\nexport function closeDatabase(db: IDBDatabase): Promise<void> {\n  return new Promise<void>((resolve, reject) => {\n    if (!db) {\n      reject(new Error('No database to close'));\n      return;\n    }\n\n    try {\n      db.close();\n      resolve();\n    } catch (error) {\n      reject(`Error closing database: ${error}`);\n    }\n  });\n}\n","import { Observable } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { closeDatabase, openedDatabases } from './ngx-indexed-db';\n\nexport function CloseDbConnection(): MethodDecorator {\n  return function (_target: object, _propertyKey: string, descriptor: PropertyDescriptor): PropertyDescriptor {\n    const originalMethod = descriptor.value;\n    descriptor.value = function (...args: unknown[]) {\n      const result = originalMethod.apply(this, args);\n\n      if (result instanceof Observable) {\n        return result.pipe(\n          finalize(async () => {\n            const promises = openedDatabases.map(async (db: IDBDatabase) => {\n              await closeDatabase(db);\n              console.log('Database connection closed: ', db.name);\n            });\n            await Promise.all(promises);\n            openedDatabases.length = 0;\n          })\n        );\n      }\n      return result;\n    };\n    return descriptor;\n  };\n}\n","import { Inject, Injectable, isDevMode } from '@angular/core';\nimport { Observable, Subject, Subscriber, combineLatest, from } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { createTransaction, optionsGenerator, validateBeforeTransaction, validateStoreName } from '../utils';\nimport { CloseDbConnection } from './decorators';\nimport { CreateObjectStore, DeleteObjectStore, openDatabase } from './ngx-indexed-db';\nimport {\n  CONFIG_TOKEN,\n  DBConfig,\n  DBMode,\n  INDEXED_DB,\n  Key,\n  ObjectStoreMeta,\n  RequestEvent,\n  WithID,\n} from './ngx-indexed-db.meta';\n\n@Injectable()\nexport class NgxIndexedDBService {\n  private defaultDatabaseName?: string = null;\n  private selectedDb: string;\n\n  constructor(\n    @Inject(CONFIG_TOKEN) private dbConfigs: Record<string, DBConfig>,\n    @Inject(INDEXED_DB) private indexedDB: IDBFactory\n  ) {\n    Object.values(this.dbConfigs).forEach((dbConfig, _, ref) => this.instanciateConfig(dbConfig, ref.length === 1));\n  }\n\n  private async instanciateConfig(dbConfig: DBConfig, isOnlyConfig: boolean): Promise<void> {\n    if (!dbConfig.name) {\n      throw new Error('NgxIndexedDB: Please, provide the dbName in the configuration');\n    }\n    // if (!dbConfig.version) {\n    //   throw new Error('NgxIndexedDB: Please, provide the db version in the configuration');\n    // }\n    if ((dbConfig.isDefault ?? false) && this.defaultDatabaseName) {\n      // A default DB is already configured, throw an error\n      throw new Error('NgxIndexedDB: Only one database can be set as default');\n    }\n    if (((dbConfig.isDefault ?? false) && !this.defaultDatabaseName) || isOnlyConfig) {\n      this.defaultDatabaseName = dbConfig.name;\n      this.selectedDb = dbConfig.name;\n    }\n\n    await CreateObjectStore(\n      this.indexedDB,\n      dbConfig.name,\n      dbConfig.version,\n      dbConfig.objectStoresMeta,\n      dbConfig.migrationFactory\n    );\n\n    openDatabase(this.indexedDB, dbConfig.name).then((db) => {\n      if (db.version !== dbConfig.version) {\n        if (isDevMode()) {\n          console.warn(`\n            Your DB Config doesn't match the most recent version of the DB with name ${dbConfig.name}, please update it\n            DB current version: ${db.version};\n            Your configuration: ${dbConfig.version};\n            `);\n          console.warn(`Using latest version ${db.version}`);\n        }\n        this.dbConfigs[dbConfig.name].version = db.version;\n      }\n\n      db.close();\n    });\n  }\n\n  private get dbConfig(): DBConfig {\n    return this.dbConfigs[this.selectedDb];\n  }\n\n  /**\n   * The function return the current version of database\n   *\n   * @Return the current version of database as number\n   */\n  @CloseDbConnection()\n  getDatabaseVersion(): Observable<number | string> {\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db: IDBDatabase) => {\n          obs.next(db.version);\n          obs.complete();\n        })\n        .catch((err) => obs.error(`error during get version of database => ${err} `));\n    });\n  }\n\n  /**\n   * Selects a database for the current context.\n   * @param {string} [databaseName=undefined] Database name to select.\n   */\n  public selectDb(databaseName?: string): void {\n    databaseName = databaseName ?? this.defaultDatabaseName;\n    if (!databaseName) {\n      // Name is still null, it means that there is no default database set\n      // and the database name was not specified while calling a method\n      throw new Error(`No database name specified and no default database set.`);\n    }\n    if (!Object.keys(this.dbConfigs).includes(databaseName)) {\n      throw new Error(`NgxIndexedDB: Database ${databaseName} is not initialized.`);\n    }\n\n    this.selectedDb = databaseName;\n  }\n\n  /**\n   * Allows to create a new object store ad-hoc\n   * @param storeName The name of the store to be created\n   * @param migrationFactory The migration factory if exists\n   */\n  async createObjectStore(\n    storeSchema: ObjectStoreMeta,\n    migrationFactory?: () => { [key: number]: (db: IDBDatabase, transaction: IDBTransaction) => void }\n  ): Promise<void> {\n    const storeSchemas: ObjectStoreMeta[] = [storeSchema];\n    await CreateObjectStore(\n      this.indexedDB,\n      this.dbConfig.name,\n      ++this.dbConfig.version,\n      storeSchemas,\n      migrationFactory\n    );\n  }\n\n  /**\n  * Create dynamic store if not already without incrementing version\n  * For Dynamic store\n  * @param storeName The name of the store to create\n  */\n  addDynamicStore(\n    storeSchema: ObjectStoreMeta,\n    migrationFactory?: () => { [key: number]: (db: IDBDatabase, transaction: IDBTransaction) => void }\n  ): void {\n    const storeSchemas: ObjectStoreMeta[] = [storeSchema];\n    CreateObjectStore(this.indexedDB, this.dbConfig.name, this.dbConfig.version, storeSchemas, migrationFactory);\n  }\n\n  /**\n   * Adds new entry in the store and returns its key\n   * @param storeName The name of the store to add the item\n   * @param value The entry to be added\n   * @param key The optional key for the entry\n   */\n  @CloseDbConnection()\n  add<T>(storeName: string, value: T, key?: any): Observable<T & WithID> {\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db: IDBDatabase) => {\n          const transaction = createTransaction(\n            db,\n            optionsGenerator(DBMode.readwrite, storeName, (e) => obs.error(e))\n          );\n          const objectStore = transaction.objectStore(storeName);\n          const request: IDBRequest<IDBValidKey> = Boolean(key) ? objectStore.add(value, key) : objectStore.add(value);\n\n          request.onsuccess = async (evt: Event) => {\n            const result: any = (evt.target as IDBOpenDBRequest).result;\n            const getRequest: IDBRequest = objectStore.get(result) as IDBRequest<T>;\n            getRequest.onsuccess = (event: Event) => {\n              obs.next((event.target as IDBRequest<T & WithID>).result);\n              obs.complete();\n            };\n\n            getRequest.onerror = (event: Event) => {\n              obs.error(event);\n            };\n          };\n\n          request.onerror = (event: Event) => {\n            obs.error(event);\n          };\n        })\n        .catch((error) => obs.error(error));\n    });\n  }\n\n  /**\n   * Adds new entries in the store and returns its key\n   * @param storeName The name of the store to add the item\n   * @param values The entries to be added containing optional key attribute\n   */\n  @CloseDbConnection()\n  bulkAdd<T>(storeName: string, values: Array<T & { key?: any }>): Observable<number[]> {\n    const promises = new Promise<number[]>((resolve, reject) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db: IDBDatabase) => {\n          const transaction = createTransaction(db, optionsGenerator(DBMode.readwrite, storeName, resolve, reject));\n          const objectStore = transaction.objectStore(storeName);\n\n          const results = values.map((value) => {\n            return new Promise<number>((resolve1, reject1) => {\n              const key = value.key;\n              delete value.key;\n\n              const request: IDBRequest<IDBValidKey> = Boolean(key)\n                ? objectStore.add(value, key)\n                : objectStore.add(value);\n\n              request.onsuccess = (evt: Event) => {\n                const result = (evt.target as IDBOpenDBRequest).result;\n                resolve1((result as unknown) as number);\n              };\n            });\n          });\n\n          resolve(Promise.all(results));\n        })\n        .catch((reason) => reject(reason));\n    });\n\n    return from(promises);\n  }\n\n  /**\n   * Delete entries in the store and returns current entries in the store\n   * @param storeName The name of the store to add the item\n   * @param keys The keys to be deleted\n   */\n  @CloseDbConnection()\n  bulkDelete(storeName: string, keys: Key[]): Observable<number[]> {\n    const promises = keys.map((key) => {\n      return new Promise<number>((resolve, reject) => {\n        openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n          .then((db: IDBDatabase) => {\n            const transaction = createTransaction(db, optionsGenerator(DBMode.readwrite, storeName, reject, resolve));\n            const objectStore = transaction.objectStore(storeName);\n            objectStore.delete(key);\n\n            transaction.oncomplete = () => {\n              this.getAll(storeName)\n                .pipe(take(1))\n                .subscribe((newValues) => {\n                  resolve(newValues as any);\n                });\n            };\n          })\n          .catch((reason) => reject(reason));\n      });\n    });\n    return from(Promise.all(promises));\n  }\n\n  /**\n   * Returns entry by key.\n   * @param storeName The name of the store to query\n   * @param key The entry key\n   */\n  @CloseDbConnection()\n  getByKey<T>(storeName: string, key: IDBValidKey): Observable<T> {\n    return new Observable<T>((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db: IDBDatabase) => {\n          const transaction = createTransaction(db, optionsGenerator(DBMode.readonly, storeName, obs.error));\n          const objectStore = transaction.objectStore(storeName);\n          const request = objectStore.get(key) as IDBRequest<T>;\n          request.onsuccess = (event: Event) => {\n            obs.next((event.target as IDBRequest<T>).result);\n            obs.complete();\n          };\n          request.onerror = (event: Event) => {\n            obs.error(event);\n          };\n        })\n        .catch((error) => obs.error(error));\n    });\n  }\n\n  /**\n   * Retrieve multiple entries in the store\n   * @param storeName The name of the store to retrieve the items\n   * @param keys The ids entries to be retrieve\n   */\n  @CloseDbConnection()\n  bulkGet<T>(storeName: string, keys: Array<IDBValidKey>): Observable<T[]> {\n    const observables = keys.map((key) => this.getByKey<T>(storeName, key));\n\n    return new Observable((obs) => {\n      combineLatest(observables).subscribe((values) => {\n        obs.next(values);\n        obs.complete();\n      });\n    });\n  }\n\n  /**\n   * Returns entry by id.\n   * @param storeName The name of the store to query\n   * @param id The entry id\n   */\n  @CloseDbConnection()\n  getByID<T>(storeName: string, id: string | number): Observable<T> {\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db: IDBDatabase) => {\n          validateBeforeTransaction(db, storeName, (e) => obs.error(e));\n          const transaction = createTransaction(db, optionsGenerator(DBMode.readonly, storeName, obs.error, obs.next));\n          const objectStore = transaction.objectStore(storeName);\n          const request: IDBRequest = objectStore.get(id) as IDBRequest<T>;\n          request.onsuccess = (event: Event) => {\n            obs.next((event.target as IDBRequest<T>).result);\n          };\n        })\n        .catch((error) => obs.error(error));\n    });\n  }\n\n  /**\n   * Returns entry by index.\n   * @param storeName The name of the store to query\n   * @param indexName The index name to filter\n   * @param key The entry key.\n   */\n  @CloseDbConnection()\n  getByIndex<T>(storeName: string, indexName: string, key: IDBValidKey): Observable<T> {\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db) => {\n          validateBeforeTransaction(db, storeName, (e) => obs.error(e));\n          const transaction = createTransaction(db, optionsGenerator(DBMode.readonly, storeName, obs.error));\n          const objectStore = transaction.objectStore(storeName);\n          const index = objectStore.index(indexName);\n          const request = index.get(key) as IDBRequest<T>;\n          request.onsuccess = (event: Event) => {\n            obs.next((event.target as IDBRequest<T>).result);\n            obs.complete();\n          };\n        })\n        .catch((reason) => obs.error(reason));\n    });\n  }\n\n  /**\n   * Return all elements from one store\n   * @param storeName The name of the store to select the items\n   */\n  @CloseDbConnection()\n  getAll<T>(storeName: string): Observable<T[]> {\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db) => {\n          validateBeforeTransaction(db, storeName, (e) => obs.error(e));\n          const transaction = createTransaction(db, optionsGenerator(DBMode.readonly, storeName, obs.error, obs.next));\n          const objectStore = transaction.objectStore(storeName);\n\n          const request: IDBRequest = objectStore.getAll();\n\n          request.onerror = (evt: Event) => {\n            obs.error(evt);\n          };\n\n          request.onsuccess = ({ target: { result: ResultAll } }: RequestEvent<T>) => {\n            obs.next(ResultAll as T[]);\n            obs.complete();\n          };\n        })\n        .catch((error) => obs.error(error));\n    });\n  }\n\n  /**\n   * Adds or updates a record in store with the given value and key. Return all items present in the store\n   * @param storeName The name of the store to update\n   * @param value The new value for the entry\n   */\n  @CloseDbConnection()\n  update<T>(storeName: string, value: T): Observable<T> {\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db) => {\n          validateBeforeTransaction(db, storeName, (e) => obs.error(e));\n          const transaction = createTransaction(\n            db,\n            optionsGenerator(DBMode.readwrite, storeName, (e) => obs.error(e))\n          );\n          const objectStore = transaction.objectStore(storeName);\n\n          const request: IDBRequest<IDBValidKey> = objectStore.put(value);\n\n          request.onsuccess = async (evt: Event) => {\n            const result: any = (evt.target as IDBOpenDBRequest).result;\n\n            const getRequest: IDBRequest = objectStore.get(result) as IDBRequest<T>;\n            getRequest.onsuccess = (event: Event) => {\n              obs.next((event.target as IDBRequest<T & WithID>).result);\n              obs.complete();\n            };\n          };\n        })\n        .catch((reason) => obs.error(reason));\n    });\n  }\n\n  /**\n   * Adds or updates a record in store with the given value and key. Return all items present in the store\n   * @param storeName The name of the store to update\n   * @param value The new value for the entry\n   * @param key The key of the entry to update\n   */\n  @CloseDbConnection()\n  updateByKey<T>(storeName: string, value: T, key?: IDBValidKey): Observable<T> {\n    let transaction: IDBTransaction;\n    return new Observable<T>((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db) => {\n          validateBeforeTransaction(db, storeName, (e) => obs.error(e));\n          transaction = createTransaction(\n            db,\n            optionsGenerator(DBMode.readwrite, storeName, (e) => obs.error(e))\n          );\n          const objectStore = transaction.objectStore(storeName);\n\n          const request: IDBRequest<IDBValidKey> = objectStore.put(value, key);\n\n          request.onsuccess = async (evt: Event) => {\n            const getRequest: IDBRequest = objectStore.get(request.result) as IDBRequest<T>;\n            getRequest.onsuccess = (event: Event) => {\n              obs.next((event.target as IDBRequest<T & WithID>).result);\n              obs.complete();\n            };\n          };\n        })\n        .catch((reason) => {\n          transaction?.abort();\n          obs.error(reason);\n        });\n    });\n  }\n\n  /**\n  * Adds or updates a record in store with the given value and key. Return all items present in the store\n  * @param storeName The name of the store to update\n  * @param items The values to update in the DB\n  *\n  * @Return The return value is an Observable with the primary key of the object that was last in given array\n  *\n  * @error If the call to bulkPut fails the transaction will be aborted and previously inserted entities will be deleted\n  */\n  @CloseDbConnection()\n  public bulkPut<T>(storeName: string, items: Array<T>): Observable<Key> {\n    let transaction: IDBTransaction;\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db) => {\n          validateBeforeTransaction(db, storeName, (e) => obs.error(e));\n          transaction = createTransaction(\n            db,\n            optionsGenerator(DBMode.readwrite, storeName, (e) => obs.error(e))\n          );\n          const objectStore = transaction.objectStore(storeName);\n\n          items.forEach((item, index: number) => {\n            const request: IDBRequest<IDBValidKey> = objectStore.put(item);\n\n            if (index === items.length - 1) {\n              request.onsuccess = (evt: Event) => {\n                transaction.commit();\n                obs.next((evt.target as IDBRequest<Key>).result);\n                obs.complete();\n              };\n            }\n\n            request.onerror = (evt: Event) => {\n              transaction.abort();\n              obs.error(evt);\n            };\n          });\n        })\n        .catch((reason) => {\n          transaction?.abort();\n          obs.error(reason);\n        });\n    });\n  }\n\n  /**\n   * Returns all items from the store after delete.\n   * @param storeName The name of the store to have the entry deleted\n   * @param key The key of the entry to be deleted\n   */\n  @CloseDbConnection()\n  delete<T>(storeName: string, key: Key): Observable<T[]> {\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db) => {\n          validateBeforeTransaction(db, storeName, (e) => obs.error(e));\n          const transaction = createTransaction(\n            db,\n            optionsGenerator(DBMode.readwrite, storeName, (e) => obs.error(e))\n          );\n          const objectStore = transaction.objectStore(storeName);\n          objectStore.delete(key);\n\n          transaction.oncomplete = () => {\n            this.getAll(storeName)\n              .pipe(take(1))\n              .subscribe((newValues) => {\n                obs.next(newValues as T[]);\n                obs.complete();\n              });\n          };\n        })\n        .catch((reason) => obs.error(reason));\n    });\n  }\n\n  /**\n   * Returns true from the store after a successful delete.\n   * @param storeName The name of the store to have the entry deleted\n   * @param key The key of the entry to be deleted\n   */\n  @CloseDbConnection()\n  deleteByKey(storeName: string, key: Key): Observable<boolean> {\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db) => {\n          validateBeforeTransaction(db, storeName, (e) => obs.error(e));\n          const transaction = createTransaction(\n            db,\n            optionsGenerator(DBMode.readwrite, storeName, (e) => obs.error(e))\n          );\n          const objectStore = transaction.objectStore(storeName);\n\n          transaction.oncomplete = () => {\n            obs.next(true);\n            obs.complete();\n          };\n\n          objectStore.delete(key);\n        })\n        .catch((reason) => obs.error(reason));\n    });\n  }\n\n  /**\n   * Returns true if successfully delete all entries from the store.\n   * @param storeName The name of the store to have the entries deleted\n   */\n  @CloseDbConnection()\n  clear(storeName: string): Observable<boolean> {\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db) => {\n          validateBeforeTransaction(db, storeName, (e) => obs.error(e));\n          const transaction = createTransaction(\n            db,\n            optionsGenerator(DBMode.readwrite, storeName, (e) => obs.error(e))\n          );\n          const objectStore = transaction.objectStore(storeName);\n          objectStore.clear();\n          transaction.oncomplete = () => {\n            obs.next(true);\n            obs.complete();\n          };\n        })\n        .catch((reason) => obs.error(reason));\n    });\n  }\n\n  /**\n   * Returns true if successfully delete the DB.\n   */\n  @CloseDbConnection()\n  deleteDatabase(): Observable<boolean> {\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then(async (db) => {\n          await db.close();\n          const deleteDBRequest = this.indexedDB.deleteDatabase(this.dbConfig.name);\n          deleteDBRequest.onsuccess = () => {\n            obs.next(true);\n            obs.complete();\n          };\n          deleteDBRequest.onerror = (error) => obs.error(error);\n          deleteDBRequest.onblocked = () => {\n            console.warn(\n              'Delete blocked: Ensure all tabs, instances, or connections are closed. Database name:',\n              this.dbConfig.name\n            );\n            obs.error(new Error(\"Unable to delete database because it's blocked\"));\n          };\n        })\n        .catch((error) => obs.error(error));\n    });\n  }\n\n  /**\n   * Returns the open cursor event\n   * @param storeName The name of the store to have the entries deleted\n   * @param keyRange The key range which the cursor should be open on\n   * @param direction A string telling the cursor which direction to travel. The default is next\n   */\n  @CloseDbConnection()\n  openCursor(storeName: string, keyRange?: IDBKeyRange, direction: IDBCursorDirection = 'next'): Observable<Event> {\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db) => {\n          validateBeforeTransaction(db, storeName, (e) => obs.error(e));\n          const transaction = createTransaction(db, optionsGenerator(DBMode.readwrite, storeName, obs.error));\n          const objectStore = transaction.objectStore(storeName);\n          const request =\n            keyRange === undefined ? objectStore.openCursor() : objectStore.openCursor(keyRange, direction);\n\n          request.onsuccess = (event: Event) => {\n            obs.next(event);\n            obs.complete();\n          };\n        })\n        .catch((reason) => obs.error(reason));\n    });\n  }\n\n  /**\n   * Open a cursor by index filter.\n   * @param storeName The name of the store to query.\n   * @param indexName The index name to filter.\n   * @param keyRange The range value and criteria to apply on the index.\n   */\n  @CloseDbConnection()\n  openCursorByIndex(\n    storeName: string,\n    indexName: string,\n    keyRange: IDBKeyRange,\n    direction: IDBCursorDirection = 'next',\n    mode: DBMode = DBMode.readonly\n  ): Observable<Event> {\n    const obs = new Subject<Event>();\n\n    openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n      .then((db) => {\n        validateBeforeTransaction(db, storeName, (reason) => {\n          obs.error(reason);\n        });\n        const transaction = createTransaction(\n          db,\n          optionsGenerator(\n            mode,\n            storeName,\n            (reason) => {\n              obs.error(reason);\n            },\n            () => {\n              obs.next();\n            }\n          )\n        );\n        const objectStore = transaction.objectStore(storeName);\n        const index = objectStore.index(indexName);\n        const request = index.openCursor(keyRange, direction);\n\n        request.onsuccess = (event: Event) => {\n          obs.next(event);\n        };\n      })\n      .catch((reason) => obs.error(reason));\n\n    return obs;\n  }\n\n  /**\n   * Returns all items by an index.\n   * @param storeName The name of the store to query\n   * @param indexName The index name to filter\n   * @param keyRange  The range value and criteria to apply on the index.\n   */\n  @CloseDbConnection()\n  getAllByIndex<T>(storeName: string, indexName: string, keyRange: IDBKeyRange): Observable<T[]> {\n    const data: T[] = [];\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db) => {\n          validateBeforeTransaction(db, storeName, (e) => obs.error(e));\n          const transaction = createTransaction(db, optionsGenerator(DBMode.readonly, storeName, obs.error));\n          const objectStore = transaction.objectStore(storeName);\n          const index = objectStore.index(indexName);\n          const request = index.openCursor(keyRange);\n          request.onsuccess = (event) => {\n            const cursor: IDBCursorWithValue = (event.target as IDBRequest<IDBCursorWithValue>).result;\n            if (cursor) {\n              data.push(cursor.value);\n              cursor.continue();\n            } else {\n              obs.next(data);\n              obs.complete();\n            }\n          };\n        })\n        .catch((reason) => obs.error(reason));\n    });\n  }\n\n  /**\n   * Returns all primary keys by an index.\n   * @param storeName The name of the store to query\n   * @param indexName The index name to filter\n   * @param keyRange  The range value and criteria to apply on the index.\n   */\n  @CloseDbConnection()\n  getAllKeysByIndex(\n    storeName: string,\n    indexName: string,\n    keyRange: IDBKeyRange\n  ): Observable<{ primaryKey: any; key: any }[]> {\n    const data: { primaryKey: any; key: any }[] = [];\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db) => {\n          validateBeforeTransaction(db, storeName, (e) => obs.error(e));\n          const transaction = createTransaction(db, optionsGenerator(DBMode.readonly, storeName, obs.error));\n          const objectStore = transaction.objectStore(storeName);\n          const index = objectStore.index(indexName);\n          const request = index.openKeyCursor(keyRange);\n          request.onsuccess = (event) => {\n            const cursor: IDBCursor = (event.target as IDBRequest<IDBCursor>).result;\n            if (cursor) {\n              data.push({ primaryKey: cursor.primaryKey, key: cursor.key });\n              cursor.continue();\n            } else {\n              obs.next(data);\n              obs.complete();\n            }\n          };\n        })\n        .catch((reason) => obs.error(reason));\n    });\n  }\n\n  /**\n   * Returns the number of rows in a store.\n   * @param storeName The name of the store to query\n   * @param keyRange  The range value and criteria to apply.\n   */\n  @CloseDbConnection()\n  count(storeName: string, keyRange?: IDBValidKey | IDBKeyRange): Observable<number> {\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db) => {\n          validateBeforeTransaction(db, storeName, (e) => obs.error(e));\n          const transaction = createTransaction(db, optionsGenerator(DBMode.readonly, storeName, obs.error));\n          const objectStore = transaction.objectStore(storeName);\n          const request: IDBRequest = objectStore.count(keyRange);\n          request.onerror = (e) => obs.error(e);\n          request.onsuccess = (e) => {\n            obs.next(((e.target as IDBOpenDBRequest).result as unknown) as number);\n            obs.complete();\n          };\n        })\n        .catch((reason) => obs.error(reason));\n    });\n  }\n\n  /**\n   * Returns the number of rows in a store.\n   * @param storeName The name of the store to query\n   * @param keyRange  The range value and criteria to apply.\n   */\n  @CloseDbConnection()\n  countByIndex(storeName: string, indexName: string, keyRange?: IDBValidKey | IDBKeyRange): Observable<number> {\n    return new Observable((obs) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db) => {\n          validateBeforeTransaction(db, storeName, (e) => obs.error(e));\n          const transaction = createTransaction(db, optionsGenerator(DBMode.readonly, storeName, obs.error));\n          const objectStore = transaction.objectStore(storeName);\n          const index = objectStore.index(indexName);\n          const request: IDBRequest = index.count(keyRange);\n          request.onerror = (e) => obs.error(e);\n          request.onsuccess = (e) => {\n            obs.next(((e.target as IDBOpenDBRequest).result as unknown) as number);\n            obs.complete();\n          };\n        })\n        .catch((reason) => obs.error(reason));\n    });\n  }\n\n  /**\n   * Checks if a store exists in the database.\n   * @param storeName The name of the store to check.\n   */\n  @CloseDbConnection()\n  isStoreExist(storeName: string): Observable<boolean> {\n    return new Observable<boolean>((observer) => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db: IDBDatabase) => {\n          try {\n            if (validateStoreName(db, storeName)) {\n              observer.next(true);\n            } else {\n              observer.next(false);\n            }\n            observer.complete();\n          } catch (error) {\n            observer.error(error); // Emit an error if something unexpected happens\n          }\n        })\n        .catch(() => {\n          observer.next(false); // If the database fails to open, assume the store does not exist\n          observer.complete();\n        });\n    });\n  }\n\n\n  /**\n   * Delete the store by name.\n   * @param storeName The name of the store to query\n   */\n  deleteObjectStore(storeName: string): Observable<boolean> {\n    return DeleteObjectStore(this.dbConfig.name, ++this.dbConfig.version, storeName);\n  }\n\n  /**\n   * Get all object store names.\n   */\n  @CloseDbConnection()\n  getAllObjectStoreNames(): Observable<string[]> {\n    return new Observable((obs: Subscriber<string[]>): void => {\n      openDatabase(this.indexedDB, this.dbConfig.name, this.dbConfig.version)\n        .then((db: IDBDatabase): void => {\n          obs.next([...((db.objectStoreNames as unknown) as Iterable<string>)]);\n          obs.complete();\n        })\n        .catch((reason: unknown): void => obs.error(reason));\n    });\n  }\n}\n","/**\n *\n * A class that implements the IDBFactory interface, but only for the server.\n * All methods return a mocked value.\n *\n */\nexport class ServerIndexedDB implements IDBFactory {\n  cmp(): number {\n    return 0;\n  }\n  databases(): Promise<IDBDatabaseInfo[]> {\n    return Promise.resolve([]);\n  }\n\n  deleteDatabase(): IDBOpenDBRequest {\n    return {\n      onupgradeneeded: null,\n      onblocked: null,\n      onerror: null,\n      onsuccess: null,\n      error: null,\n    } as IDBOpenDBRequest;\n  }\n\n  open(): IDBOpenDBRequest {\n    return {\n      onupgradeneeded: null,\n      onblocked: null,\n      onerror: null,\n      onsuccess: null,\n      error: null,\n    } as IDBOpenDBRequest;\n  }\n}\n","import { assertInInjectionContext, inject, PLATFORM_ID } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { SERVER_INDEXED_DB } from '../lib/ngx-indexed-db.meta';\nimport { ServerIndexedDB } from './server-indexed-db';\n\n/**\n * Factory function for creating an instance of IDBFactory.\n *\n * It determines the platform using the {@link PLATFORM_ID} to decide whether to use the\n * browser's IndexedDB or a server-side implementation.\n *\n * @returns {IDBFactory} IDBFactory.\n */\nexport function indexedDbFactory(): IDBFactory {\n  assertInInjectionContext(indexedDbFactory);\n  const platformId = inject(PLATFORM_ID);\n  const serverIndexedDB = inject(SERVER_INDEXED_DB, { optional: true }) ?? new ServerIndexedDB();\n  return isPlatformBrowser(platformId) ? inject(DOCUMENT).defaultView.indexedDB : serverIndexedDB;\n}\n","import { makeEnvironmentProviders, Provider } from '@angular/core';\nimport { DBConfig, CONFIG_TOKEN, INDEXED_DB, SERVER_INDEXED_DB } from './ngx-indexed-db.meta';\nimport { NgxIndexedDBService } from './ngx-indexed-db.service';\nimport { indexedDbFactory } from '../ssr';\n\nexport const provideIndexedDb = (...dbConfigs: DBConfig[]) => {\n  return makeEnvironmentProviders([..._provideIndexedDb(...dbConfigs)]);\n};\n\nexport const _provideIndexedDb = (...dbConfigs: DBConfig[]): Provider[] => {\n  const configs = dbConfigs.reduce<Record<string, DBConfig>>((acc, curr) => {\n    acc[curr.name] = curr;\n    return acc;\n  }, {});\n  return [\n    NgxIndexedDBService,\n    { provide: CONFIG_TOKEN, useValue: configs },\n    { provide: INDEXED_DB, useFactory: indexedDbFactory },\n  ];\n};\n","import { NgModule, ModuleWithProviders, InjectionToken } from '@angular/core';\nimport { DBConfig } from './ngx-indexed-db.meta';\nimport { _provideIndexedDb } from './provide-indexed-db';\n\n@NgModule()\nexport class NgxIndexedDBModule {\n  static forRoot(...dbConfigs: DBConfig[]): ModuleWithProviders<NgxIndexedDBModule> {\n    return {\n      ngModule: NgxIndexedDBModule,\n      providers: [..._provideIndexedDb(...dbConfigs)],\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}