@po-ui/ng-storage 19.28.0 → 20.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -531,7 +531,7 @@ class PoStorageService {
531
531
  /**
532
532
  * Determina se o processo de inicialização do *driver* assíncrono foi concluído.
533
533
  *
534
- * @returns {Promise<LocalForage>} Promessa que é resolvida quando o processo de inicialização do *driver* assíncrono
534
+ * @returns {Promise<any>} Promessa que é resolvida quando o processo de inicialização do *driver* assíncrono
535
535
  * for concluído.
536
536
  */
537
537
  ready() {
@@ -721,10 +721,10 @@ class PoStorageService {
721
721
  throw new Error(`Cannot use this drivers: ${actualConfig.driverOrder.join(', ')}.`);
722
722
  }
723
723
  }
724
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: PoStorageService, deps: [{ token: PO_STORAGE_CONFIG_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
725
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: PoStorageService, providedIn: 'root' });
724
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: PoStorageService, deps: [{ token: PO_STORAGE_CONFIG_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
725
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: PoStorageService, providedIn: 'root' });
726
726
  }
727
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: PoStorageService, decorators: [{
727
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: PoStorageService, decorators: [{
728
728
  type: Injectable,
729
729
  args: [{
730
730
  providedIn: 'root'
@@ -756,11 +756,11 @@ class PoStorageModule {
756
756
  ]
757
757
  };
758
758
  }
759
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: PoStorageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
760
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.7", ngImport: i0, type: PoStorageModule });
761
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: PoStorageModule });
759
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: PoStorageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
760
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.7", ngImport: i0, type: PoStorageModule });
761
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: PoStorageModule });
762
762
  }
763
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: PoStorageModule, decorators: [{
763
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: PoStorageModule, decorators: [{
764
764
  type: NgModule
765
765
  }] });
766
766
 
@@ -1 +1 @@
1
- {"version":3,"file":"po-ui-ng-storage.mjs","sources":["../../../projects/storage/src/lib/drivers/lokijs/po-loki-driver.ts","../../../projects/storage/src/lib/services/po-storage.service.ts","../../../projects/storage/src/lib/po-storage.module.ts","../../../projects/storage/src/po-ui-ng-storage.ts"],"sourcesContent":["import Loki from 'lokijs';\nimport LokiIndexedAdapter from 'lokijs/src/loki-indexed-adapter';\n\nconst keyField = 'key';\n\nexport class PoLokiDriver {\n private collection;\n private db: any;\n private driver: any;\n\n constructor() {\n const self = this;\n this.driver = {\n _driver: 'lokijs',\n _initStorage: function (options: any) {\n return self.initStorage(options);\n },\n clear: function () {\n return self.clear(this);\n },\n getItem: function (key: any) {\n return self.getItem(this, key);\n },\n iterate: function (iteratorCallback: any) {\n return self.iterate(this, iteratorCallback);\n },\n key: function (n: any) {\n return self.key(this, n);\n },\n keys: function () {\n return self.keys(this);\n },\n length: function () {\n return self.length(this);\n },\n removeItem: function (key: any) {\n return self.removeItem(this, key);\n },\n setItem: function (key: any, value: any) {\n return self.setItem(this, key, value);\n }\n };\n }\n\n // Funções de iteração\n\n private clear(localforage: any) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollectionAndDataInCollection()) {\n this.clearCollection();\n }\n resolve(null);\n });\n });\n }\n\n private getItem(localforage: any, key: any) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollectionAndDataInCollection()) {\n const item = this.getItemInCollectionBy(keyField, key);\n if (item) {\n resolve(item.value);\n }\n }\n resolve(null);\n });\n });\n }\n\n private initStorage(options: any) {\n return new Promise(resolve => {\n try {\n this.configureLokiStorage(options, this.databaseInitialize.bind(this, options, resolve));\n } catch {\n throw new Error(`Cannot configure Loki Storage`);\n }\n });\n }\n\n private iterate(localforage: any, iteratorCallback: Function) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollectionAndDataInCollection()) {\n this.iterateWithDataItem(iteratorCallback);\n }\n resolve(null);\n });\n });\n }\n\n private key(localforage: any, n: string | number) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollection()) {\n const map = this.getLokiMap();\n resolve(map[n]);\n }\n resolve(null);\n });\n });\n }\n\n private keys(localforage: any) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollection()) {\n const keys = [];\n const map = this.getLokiMap();\n for (const key of Object.keys(map)) {\n keys.push(map[key]);\n }\n resolve(keys);\n }\n resolve(null);\n });\n });\n }\n\n private length(localforage: any) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollection()) {\n resolve(this.getNumberItensInCollection());\n }\n resolve(0);\n });\n });\n }\n\n private removeItem(localforage: any, key: any) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollection()) {\n this.findAndRemoveItem(key);\n }\n resolve(null);\n });\n });\n }\n\n private setItem(localforage: any, key: any, value: any) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollection()) {\n let item: any;\n if (this.hasDataInCollection()) {\n item = this.getItemInCollectionBy(keyField, key);\n }\n this.insertOrUpdate(item, value, key);\n }\n resolve(value);\n });\n });\n }\n\n // Funções de acesso ao storage\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n getDriver() {\n return this.driver;\n }\n\n private addCollection(options: any): any {\n return this.db.addCollection(options.storeName, { unique: [keyField] });\n }\n\n private clearCollection() {\n this.collection.clear({ removeIndices: false });\n }\n\n private configureLokiStorage(options: any, databaseInitialize: any) {\n const idbAdapter = new LokiIndexedAdapter();\n this.db = new Loki(options.name, {\n adapter: idbAdapter,\n autoload: true,\n autoloadCallback: databaseInitialize,\n autosave: true,\n autosaveInterval: 4000\n });\n }\n\n private findAndRemoveItem(key: any) {\n this.collection.findAndRemove({ [keyField]: key });\n }\n\n private getCollection(options: any): any {\n return this.db.getCollection(options.storeName);\n }\n\n private databaseInitialize(options: any, resolve: Function) {\n this.collection = this.getCollection(options);\n if (!this.hasCollection()) {\n this.collection = this.addCollection(options);\n }\n resolve();\n }\n\n private getItemInCollectionBy(fieldKey: string, key: any) {\n return this.collection.by(fieldKey, key);\n }\n\n private getLokiMap() {\n return this.collection.constraints.unique[keyField].lokiMap;\n }\n\n private hasCollection() {\n return this.collection;\n }\n\n private hasDataInCollection() {\n return this.collection.data && this.collection.data.length;\n }\n\n private hasCollectionAndDataInCollection() {\n return this.hasCollection() && this.hasDataInCollection();\n }\n\n private insertOrUpdate(item: any, value: any, key: any) {\n if (item) {\n item.value = value;\n this.collection.update(item);\n } else {\n this.collection.insert({ [keyField]: key, value: value });\n }\n }\n\n private iterateWithDataItem(iteratorcallback: Function) {\n this.collection.data.forEach(element => {\n iteratorcallback(element.value, element[keyField], element.$loki);\n });\n }\n\n private getNumberItensInCollection(): number {\n return this.collection.count();\n }\n}\n","import { Inject, Injectable, InjectionToken } from '@angular/core';\n\nimport * as LocalForage from 'localforage';\nimport 'localforage';\n\nimport { IdleQueue } from 'custom-idle-queue';\n\nimport { PoLokiDriver } from '../drivers/lokijs/po-loki-driver';\nimport { PoStorageConfig } from './po-storage-config.interface';\n\nexport const PO_STORAGE_CONFIG_TOKEN = new InjectionToken('PO_STORAGE_CONFIG_TOKEN');\n\n/**\n * @description\n *\n * O PO Storage é uma biblioteca que fornece um serviço para armazenamento de dados no dispositivo local, sendo semelhante\n * ao funcionamento do [IonicStorage](https://ionicframework.com/docs/storage/).\n * É possível utilizar os drivers [Websql](https://dev.w3.org/html5/webdatabase/), [Indexeddb](https://www.w3.org/TR/IndexedDB/),\n * [LocalStorage](https://html.spec.whatwg.org/multipage/webstorage.html) e também [LokiJS](https://github.com/techfort/LokiJS/wiki).\n *\n * Para um melhor ganho de performance ao buscar e salvar dados, recomendamos a utilização do `LokiJS`, um *database*\n * orientado a documento semelhante ao MongoDB, que além de permitir a persistência dos dados no dispositivo possibilita\n * também o armazenamento dos dados em memória. Outra vantagem, é o aumento do limite de armazenamento para\n * aproximadamente `300mb`.\n *\n * A estrutura utilizada para armazenar os dados é a de chave/valor, onde uma chave funciona como um identificador exclusivo.\n *\n * #### Instalando o PO Storage\n *\n * Para instalar o `po-storage` em sua aplicação execute o seguinte comando:\n *\n * ```shell\n * ng add @po-ui/ng-storage\n * ```\n * Será instalado o pacote `@po-ui/ng-storage` e também já importará `PoStorageModule` no módulo principal da sua aplicação, conforme abaixo:\n *\n * ```typescript\n * import { PoStorageModule } from '@po-ui/ng-storage';\n *\n * @NgModule({\n * declarations: [...],\n * imports: [\n * // Importação do módulo PoStorageModule\n * PoStorageModule.forRoot(),\n * ],\n * bootstrap: [IonicApp],\n * providers: [...]\n * })\n * export class AppModule {}\n * ```\n *\n * Com a declaração do módulo, é criada uma base de dados no armazenamento local e o serviço `PoStorageService` estará\n * pronto para ser utilizada na sua aplicação.\n *\n * #### Configurando as opções de armazenamento\n *\n * Na importação do módulo, o método `PoStorageModule.forRoot()` pode receber como parâmetro um objeto do tipo\n * [`PoStorageConfig`](documentation/po-storage#po-storage-config),\n * que serve para configurar as opções personalizadas do armazenamento, como por exemplo: o tipo de armazenamento\n * preferêncial.\n *\n * Caso não seja passada nenhuma configuração a ordem padrão será: ['websql', 'indexeddb', 'localstorage', 'lokijs'].\n *\n * Abaixo segue um exemplo de configuração onde o storage preferencial passa a ser o `lokijs`:\n *\n * ```typescript\n * import { PoStorageModule } from '@po-ui/ng-storage';\n *\n * @NgModule({\n * declarations: [...],\n * imports: [\n * // Importação do módulo PoStorageModule com a configuração personalizada\n * PoStorageModule.forRoot({\n * name: 'mystorage',\n * storeName: '_mystore',\n * driverOrder: ['lokijs', 'websql', 'indexeddb', 'localstorage']\n * }),\n * ],\n * bootstrap: [IonicApp],\n * providers: [...]\n * })\n * export class AppModule {}\n * ```\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PoStorageService {\n private driver: string = null;\n private idleQueue = new IdleQueue();\n private storagePromise: Promise<LocalForage>;\n private lokijsDriver: PoLokiDriver;\n\n constructor(@Inject(PO_STORAGE_CONFIG_TOKEN) config?: PoStorageConfig) {\n this.lokijsDriver = new PoLokiDriver();\n this.setStoragePromise(config);\n }\n\n /**\n * Retorna a configuração padrão para o armazenamento. Caso nenhuma configuração seja inserida,\n * essa configuração será utilizada.\n *\n * @returns {PoStorageConfig} Objeto com a configuração padrão do armazenamento.\n */\n static getDefaultConfig(): PoStorageConfig {\n return {\n name: '_postorage',\n storeName: '_pokv',\n driverOrder: ['websql', 'indexeddb', 'localstorage', 'lokijs']\n };\n }\n\n /**\n * Cria uma instância do `PoStorageService` com a configuração de armazenamento passada como parâmetro.\n *\n * @param {PoStorageConfig} storageConfig Configuração para o armazenamento.\n * @returns {PoStorageService} Instância do `PoStorageService`.\n */\n static providePoStorage(storageConfig?: PoStorageConfig): PoStorageService {\n return new PoStorageService(PoStorageService.getConfig(storageConfig));\n }\n\n private static getConfig(storageConfig?: PoStorageConfig) {\n return storageConfig || PoStorageService.getDefaultConfig();\n }\n\n /**\n * Busca uma lista armazenada pela chave e concatena com a lista passada por parâmetro.\n *\n * Por exemplo:\n *\n * ``` typescript\n * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];\n *\n * this.poStorageService.set('clientKey', clients).then(() => {});\n *\n * ...\n *\n * const newClients = [ { name: 'Lisa', age: 36 }, { name: 'Bruce', age: 18 } ];\n *\n * this.poStorageService.appendArrayToArray('clientKey', newClients).then(() => {\n * // A lista agora será:\n * // [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }, { name: 'Lisa', age: 36 }, { name: 'Bruce', age: 18 }];\n * });\n * ```\n *\n * @param {string} key Chave da lista armazenada.\n * @param {Array} value Lista que será concatenada.\n *\n * @returns {Promise<any>} Promessa que é resolvida após as duas listas serem concatenadas e armazenadas localmente.\n */\n async appendArrayToArray(key: string, value: Array<any>): Promise<any> {\n const data = await this.getArrayOfStorage(key);\n\n const newData = [...data, ...value];\n return this.set(key, newData);\n }\n\n /**\n * Acrescenta um item em uma lista armazenada pela chave.\n *\n * @param {string} key Chave da lista armazenada.\n * @param {Array} value Item que será acrescentado na lista.\n *\n * @returns {Promise<any>} Promessa que é resolvida após o item ser acrescentado na lista armazenada.\n */\n async appendItemToArray(key: string, value: any): Promise<any> {\n const data = await this.getArrayOfStorage(key);\n\n data.push(value);\n return this.set(key, data);\n }\n\n /**\n * Remove todos os itens da base de dados local configurada na declaração do módulo `PoStorageModule`.\n *\n * > Utilize este método com cautela, para evitar a perda indesejada de dados.\n *\n * @returns {Promise<void>} Promessa que é resolvida após todos os itens da base de dados local serem removidos.\n */\n clear(): Promise<void> {\n return this.storagePromise.then(store => store.clear());\n }\n\n /**\n * Verifica se existe um valor dentro de uma determinada chave.\n *\n * @param {string} key Chave que será verificada.\n *\n * @returns {Promise<boolean>} Promessa que é resolvida quando a verificação da existência do valor na chave é concluída.\n */\n exists(key: string): Promise<boolean> {\n return this.get(key).then(data => Promise.resolve(data !== null));\n }\n\n /**\n * Itera sobre todas as chaves armazenadas.\n *\n * @param {any} iteratorCallback Função de `callback` que é chamada a cada iteração, com os seguintes parâmetros:\n * valor, chave e número da iteração.\n *\n * Exemplo de utilização:\n *\n * ``` typescript\n * this.poStorageService.forEach((value: any, key: string, iterationNumber: number) => {\n * // Iteração sobre cada chave armazenada.\n * });\n * ```\n *\n * @returns {Promise<void>} Promessa que é resolvida após a iteração sobre todas as chaves armazenadas.\n */\n forEach(iteratorCallback: (value: any, key: string, iterationNumber: number) => any): Promise<void> {\n return this.storagePromise.then(store => store.iterate(iteratorCallback));\n }\n\n /**\n * Retorna o valor armazenado em uma determinada chave.\n *\n * @param {string} key Chave que identifica o item.\n * @param {boolean} lock Define se irá travar a leitura e a escrita da base de dados para não ser acessada de forma paralela.\n * Caso outra leitura/escrita já tenha sido iniciada, este método irá esperar o outro terminar para então começar.\n *\n * Padrão: `false`.\n *\n * > Esta definição só será válida se o outro acesso paralelo a este método também estiver com o parâmetro *lock* ativado.\n * @returns {Promise<any>} Promessa que é resolvida após o item ser buscado.\n */\n async get(key: string, lock: boolean = false): Promise<any> {\n if (lock) {\n await this.requestIdlePromise();\n return await this.idleQueue.wrapCall(async () => {\n await this.getImmutableItem(key);\n });\n }\n return await this.getImmutableItem(key);\n }\n\n /**\n * Retorna o nome do *driver* que está sendo usado para armazenar os dados, por exemplo: localStorage.\n *\n * @returns {string | null} Nome do *driver*.\n */\n getDriver(): string {\n return this.driver;\n }\n\n /**\n * Retorna o primeiro item de uma lista para uma determinada chave.\n *\n * @param {string} key Chave da lista.\n * @returns {Promise<any>} Promessa que é resolvida após o primeiro item ser encontrado.\n */\n getFirstItem(key: string): Promise<any> {\n return this.get(key).then((data: Array<any>) => Promise.resolve(data ? data[0] : null));\n }\n\n /**\n * Remove o primeiro item de uma lista a partir da chave.\n *\n * @param {string} key Chave da lista que será removido o primeiro item.\n * @returns {Promise<any>} Promessa que é resolvida após o primeiro item da lista ser removido.\n */\n getItemAndRemove(key: string): Promise<any> {\n return this.get(key).then((data: Array<any>) => {\n if (data === null) {\n return null;\n }\n\n const item = data.shift();\n return this.set(key, data).then(() => Promise.resolve(item));\n });\n }\n\n /**\n * Busca o primeiro objeto encontrado dentro de uma lista pelo do valor de um campo.\n *\n * Por exemplo:\n *\n * ``` typescript\n * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];\n *\n * this.poStorageService.set('clientKey', clients).then(() => {});\n *\n * ...\n *\n * this.poStorageService.getItemByField('clientKey', 'name', 'Marie').then(client => {\n * // Resultado do console.log: { name: 'Marie', age: 23 }\n * console.log(client);\n * });\n * ```\n *\n * @param {string} key Chave da lista.\n * @param {string} fieldName O campo a ser filtrado.\n * @param {any} fieldValue O valor do campo.\n * @returns {Promise<any>} Promessa que é resolvida com o item que foi encontrado.\n */\n getItemByField(key: string, fieldName: string, fieldValue: any): Promise<any> {\n return this.get(key).then((storageRecords: Array<any>) => {\n let storageRecordsFiltered = storageRecords.find(storageRecord => storageRecord[fieldName] === fieldValue);\n storageRecordsFiltered = storageRecordsFiltered || null;\n\n return Promise.resolve(storageRecordsFiltered);\n });\n }\n\n /**\n * Lista com todas as chaves armazenadas.\n *\n * @returns {Promise<Array<string>>} Promessa que é resolvida com todas as chaves armazenadas.\n */\n keys(): Promise<Array<string>> {\n return this.storagePromise.then(store => store.keys());\n }\n\n /**\n * Quantidade de chaves armazenadas.\n *\n * @returns {Promise<number>} Promessa que é resolvida com o número de chaves armazenadas.\n */\n length(): Promise<number> {\n return this.storagePromise.then(store => store.length());\n }\n\n /**\n * Utilizado para gerenciar o bloqueio e desbloqueio de recursos no `PoStorageService`.\n * Aguardando a liberação da utilização dos recursos que participam deste comportamento e posteriormente envolve o recurso\n * passado como parâmetro em um comportamento de bloqueio e desbloqueio.\n *\n * Este método se comporta igual a utilização em conjunta dos métodos: `PoStorageService.requestIdlePromise()`,\n * `PoStorageService.lock()` e `PoStorageService.unlook()`.\n *\n * Veja mais no método: [`PoStorage.requestIdlePromise()`](documentation/po-storage#request-idle-promise).\n *\n * @param {Function} limitedResource Função que será envolvida no comportamento de bloqueio e desbloqueio.\n */\n async limitedCallWrap(limitedResource: Function): Promise<any> {\n await this.requestIdlePromise();\n return this.idleQueue.wrapCall(limitedResource);\n }\n\n /**\n * Incrementa um valor na fila de bloqueio do `PoStorageService`. Utilizado juntamente com o método `unlock` para poder\n * controlar a execução de uma determinada tarefa com o `PoStorage.requestIdlePromise()`.\n *\n * Veja mais no método: [`PoStorage.requestIdlePromise()`](documentation/po-storage#request-idle-promise).\n */\n lock() {\n this.idleQueue.lock();\n }\n\n /**\n * Determina se o processo de inicialização do *driver* assíncrono foi concluído.\n *\n * @returns {Promise<LocalForage>} Promessa que é resolvida quando o processo de inicialização do *driver* assíncrono\n * for concluído.\n */\n ready(): Promise<LocalForage> {\n return this.storagePromise;\n }\n\n /**\n * Remove um valor associado a uma chave.\n *\n * @param {key} key Chave do valor que será removido.\n * @returns {Promise<any>} Promessa que é resolvida após o valor ser removido.\n */\n remove(key: string): Promise<any> {\n return this.storagePromise.then(store => store.removeItem(key));\n }\n\n /**\n * Remove uma propriedade de um objeto armazenado.\n *\n * @param {string} key Chave do objeto armazenado.\n * @param {string} property Propriedade que será removida.\n *\n * @returns {Promise<any>} Promessa que é resolvida após a propriedade ser removida.\n */\n async removeIndexFromObject(key: string, property: string): Promise<any> {\n const data = await this.getObjectOfStorage(key);\n\n delete data[property];\n return this.set(key, data);\n }\n\n /**\n * Remove um objeto de uma lista armazenada pelo valor de uma propriedade.\n *\n * Por exemplo:\n *\n * ``` typescript\n * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];\n *\n * this.poStorageService.set('clientKey', clients).then(() => {});\n *\n * ...\n *\n * this.poStorageService.removeItemFromArray('clientKey', 'name', 'Marie').then(() => {\n * // O objeto { name: 'Marie', age: 23 } foi removido da lista que está na chave 'clientKey'\n * });\n * ```\n *\n * @param {string} key Chave da lista que contém o item que será removido.\n * @param {string} field O campo a ser filtrado no item.\n * @param {string} value O valor do filtro.\n * @returns {Promise<any>} Promessa que é resolvida quando o objeto for removido da lista.\n */\n async removeItemFromArray(key: string, field: string, value: any): Promise<any> {\n let data = await this.getArrayOfStorage(key);\n\n data = data.filter(item => item[field] !== value);\n return this.set(key, data);\n }\n\n /**\n * <a id=\"request-idle-promise\"></a>\n * Método que verifica se o acesso a base de dados configurada está liberado.\n *\n * Utilizado em conjunto com os métodos `lock()` e `unlock()` entre tarefas que não podem ser executadas de forma\n * paralela, para não causar inconsistências nos dados.\n *\n * Exemplo de utilização:\n *\n * ```\n * // Aguarda a liberação para continuar\n * await this.poStorage.requestIdlePromise();\n *\n * this.poStorage.lock();\n *\n * // Executa uma tarefa que irá ler e/ou escrever na base de dados configurada.\n *\n * this.poStorage.unlock();\n * ```\n *\n * > É importante sempre utilizá-lo antes de executar os métodos `lock()` e `unlock()` para garantir que a tarefa só\n * será executada caso o acesso esteja livre.\n *\n * @returns {Promise<any>} Promessa que é resolvida quando o acesso a base de dados configurada estiver liberado.\n */\n requestIdlePromise(): Promise<any> {\n return this.idleQueue.requestIdlePromise();\n }\n\n /**\n * Grava um valor em uma determinada chave.\n *\n * @param {string} key Chave para o valor que será gravado.\n * @param {any} value Valor que será gravado.\n * @param {boolean} lock Define se irá travar a leitura e a escrita da base de dados para não ser acessada de forma paralela.\n * Caso outra leitura/escrita já tenha sido iniciada, este método irá esperar o outro terminar para então começar.\n *\n * Padrão: `false`.\n *\n * > Esta definição só será válida se o outro acesso paralelo a este método também estiver com o parâmetro *lock* ativado.\n * @returns {Promise<any>} Promessa que é resolvida após o valor ter sido gravado.\n */\n async set(key: string, value: any, lock: boolean = false): Promise<any> {\n const store = await this.storagePromise;\n const newValue = typeof value === 'object' ? JSON.parse(JSON.stringify(value)) : value;\n\n if (lock) {\n await this.requestIdlePromise();\n return this.idleQueue.wrapCall(() => store.setItem(key, newValue));\n }\n\n return store.setItem(key, newValue);\n }\n\n /**\n * Atribui um valor a uma propriedade de um objeto armazenado pela chave.\n *\n * Por exemplo:\n *\n * ``` typescript\n * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];\n *\n * this.poStorageService.set('clientKey', clients).then(() => {});\n *\n * ...\n *\n * this.poStorageService.setIndexToObject('clientKey', 'name', 'Clare').then(() => {\n * // O objeto { name: 'Marie', age: 23 } passa a ser { name: 'Clare', age: 23 }\n * });\n * ```\n *\n * @param {string} key Chave do objeto.\n * @param {string} property Nome da propriedade do objeto.\n * @param {any} value Valor que será gravado na propriedade do objeto.\n */\n async setIndexToObject(key: string, property: string, value: any): Promise<any> {\n const data = await this.getObjectOfStorage(key);\n\n data[property] = value;\n return this.set(key, data);\n }\n\n /**\n * Decrementa um valor na fila de bloqueio. Utilizado juntamente com o método `lock` para poder\n * controlar a execução de uma determinada tarefa com o `PoStorage.requestIdlePromise()`.\n *\n * Veja mais no método: [`PoStorage.requestIdlePromise()`](documentation/po-storage#request-idle-promise).\n */\n unlock() {\n this.idleQueue.unlock();\n }\n\n private async getArrayOfStorage(key: string) {\n const data = await this.get(key);\n return data || [];\n }\n\n private async getImmutableItem(key: string) {\n const store = await this.storagePromise;\n const items = await store.getItem(key);\n return items ? JSON.parse(JSON.stringify(items)) : null;\n }\n\n private async defineLocalForageDriver(localForageInstance: any, driverOrder) {\n await localForageInstance.defineDriver(this.lokijsDriver.getDriver());\n await this.setDriver(localForageInstance, driverOrder);\n return localForageInstance;\n }\n\n private getDriverOrder(driverOrder: Array<string>): Array<string> {\n return driverOrder.map(driver => {\n switch (driver) {\n case 'indexeddb':\n return LocalForage.INDEXEDDB;\n case 'websql':\n return LocalForage.WEBSQL;\n case 'localstorage':\n return LocalForage.LOCALSTORAGE;\n default:\n return driver;\n }\n });\n }\n\n private async getObjectOfStorage(key: string) {\n const data = await this.get(key);\n return data || {};\n }\n\n private async setDriver(localForageInstance: LocalForage, driverOrder) {\n await localForageInstance.setDriver(this.getDriverOrder(driverOrder));\n this.driver = localForageInstance.driver();\n }\n\n private setStoragePromise(config: PoStorageConfig) {\n this.storagePromise = this.getStorageInstance(config);\n }\n\n private async getStorageInstance(config: PoStorageConfig) {\n const defaultConfig = PoStorageService.getDefaultConfig();\n const actualConfig = Object.assign(defaultConfig, config || {});\n\n const localForageInstance = LocalForage.createInstance(actualConfig);\n\n try {\n return await this.defineLocalForageDriver(localForageInstance, actualConfig.driverOrder);\n } catch {\n throw new Error(`Cannot use this drivers: ${actualConfig.driverOrder.join(', ')}.`);\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { PoStorageConfig } from './services/po-storage-config.interface';\nimport { PoStorageService, PO_STORAGE_CONFIG_TOKEN } from './services/po-storage.service';\n\n/**\n * @description\n *\n * Módulo do componente PoStorage responsável por manipular o storage do browser.\n */\n\n@NgModule()\nexport class PoStorageModule {\n static forRoot(storageConfig?: PoStorageConfig): ModuleWithProviders<PoStorageModule> {\n return {\n ngModule: PoStorageModule,\n providers: [\n {\n provide: PO_STORAGE_CONFIG_TOKEN,\n useValue: storageConfig || PoStorageService.getDefaultConfig()\n },\n {\n provide: PoStorageService,\n useFactory: PoStorageService.providePoStorage,\n deps: [PO_STORAGE_CONFIG_TOKEN]\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"po-ui-ng-storage.mjs","sources":["../../../projects/storage/src/lib/drivers/lokijs/po-loki-driver.ts","../../../projects/storage/src/lib/services/po-storage.service.ts","../../../projects/storage/src/lib/po-storage.module.ts","../../../projects/storage/src/po-ui-ng-storage.ts"],"sourcesContent":["import Loki from 'lokijs';\nimport LokiIndexedAdapter from 'lokijs/src/loki-indexed-adapter';\n\nconst keyField = 'key';\n\nexport class PoLokiDriver {\n private collection;\n private db: any;\n private driver: any;\n\n constructor() {\n const self = this;\n this.driver = {\n _driver: 'lokijs',\n _initStorage: function (options: any) {\n return self.initStorage(options);\n },\n clear: function () {\n return self.clear(this);\n },\n getItem: function (key: any) {\n return self.getItem(this, key);\n },\n iterate: function (iteratorCallback: any) {\n return self.iterate(this, iteratorCallback);\n },\n key: function (n: any) {\n return self.key(this, n);\n },\n keys: function () {\n return self.keys(this);\n },\n length: function () {\n return self.length(this);\n },\n removeItem: function (key: any) {\n return self.removeItem(this, key);\n },\n setItem: function (key: any, value: any) {\n return self.setItem(this, key, value);\n }\n };\n }\n\n // Funções de iteração\n\n private clear(localforage: any) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollectionAndDataInCollection()) {\n this.clearCollection();\n }\n resolve(null);\n });\n });\n }\n\n private getItem(localforage: any, key: any) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollectionAndDataInCollection()) {\n const item = this.getItemInCollectionBy(keyField, key);\n if (item) {\n resolve(item.value);\n }\n }\n resolve(null);\n });\n });\n }\n\n private initStorage(options: any) {\n return new Promise(resolve => {\n try {\n this.configureLokiStorage(options, this.databaseInitialize.bind(this, options, resolve));\n } catch {\n throw new Error(`Cannot configure Loki Storage`);\n }\n });\n }\n\n private iterate(localforage: any, iteratorCallback: Function) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollectionAndDataInCollection()) {\n this.iterateWithDataItem(iteratorCallback);\n }\n resolve(null);\n });\n });\n }\n\n private key(localforage: any, n: string | number) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollection()) {\n const map = this.getLokiMap();\n resolve(map[n]);\n }\n resolve(null);\n });\n });\n }\n\n private keys(localforage: any) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollection()) {\n const keys = [];\n const map = this.getLokiMap();\n for (const key of Object.keys(map)) {\n keys.push(map[key]);\n }\n resolve(keys);\n }\n resolve(null);\n });\n });\n }\n\n private length(localforage: any) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollection()) {\n resolve(this.getNumberItensInCollection());\n }\n resolve(0);\n });\n });\n }\n\n private removeItem(localforage: any, key: any) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollection()) {\n this.findAndRemoveItem(key);\n }\n resolve(null);\n });\n });\n }\n\n private setItem(localforage: any, key: any, value: any) {\n return new Promise(resolve => {\n localforage.ready().then(() => {\n if (this.hasCollection()) {\n let item: any;\n if (this.hasDataInCollection()) {\n item = this.getItemInCollectionBy(keyField, key);\n }\n this.insertOrUpdate(item, value, key);\n }\n resolve(value);\n });\n });\n }\n\n // Funções de acesso ao storage\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n getDriver() {\n return this.driver;\n }\n\n private addCollection(options: any): any {\n return this.db.addCollection(options.storeName, { unique: [keyField] });\n }\n\n private clearCollection() {\n this.collection.clear({ removeIndices: false });\n }\n\n private configureLokiStorage(options: any, databaseInitialize: any) {\n const idbAdapter = new LokiIndexedAdapter();\n this.db = new Loki(options.name, {\n adapter: idbAdapter,\n autoload: true,\n autoloadCallback: databaseInitialize,\n autosave: true,\n autosaveInterval: 4000\n });\n }\n\n private findAndRemoveItem(key: any) {\n this.collection.findAndRemove({ [keyField]: key });\n }\n\n private getCollection(options: any): any {\n return this.db.getCollection(options.storeName);\n }\n\n private databaseInitialize(options: any, resolve: Function) {\n this.collection = this.getCollection(options);\n if (!this.hasCollection()) {\n this.collection = this.addCollection(options);\n }\n resolve();\n }\n\n private getItemInCollectionBy(fieldKey: string, key: any) {\n return this.collection.by(fieldKey, key);\n }\n\n private getLokiMap() {\n return this.collection.constraints.unique[keyField].lokiMap;\n }\n\n private hasCollection() {\n return this.collection;\n }\n\n private hasDataInCollection() {\n return this.collection.data && this.collection.data.length;\n }\n\n private hasCollectionAndDataInCollection() {\n return this.hasCollection() && this.hasDataInCollection();\n }\n\n private insertOrUpdate(item: any, value: any, key: any) {\n if (item) {\n item.value = value;\n this.collection.update(item);\n } else {\n this.collection.insert({ [keyField]: key, value: value });\n }\n }\n\n private iterateWithDataItem(iteratorcallback: Function) {\n this.collection.data.forEach(element => {\n iteratorcallback(element.value, element[keyField], element.$loki);\n });\n }\n\n private getNumberItensInCollection(): number {\n return this.collection.count();\n }\n}\n","import { Inject, Injectable, InjectionToken } from '@angular/core';\n\nimport * as LocalForage from 'localforage';\nimport 'localforage';\n\nimport { IdleQueue } from 'custom-idle-queue';\n\nimport { PoLokiDriver } from '../drivers/lokijs/po-loki-driver';\nimport { PoStorageConfig } from './po-storage-config.interface';\n\nexport const PO_STORAGE_CONFIG_TOKEN = new InjectionToken('PO_STORAGE_CONFIG_TOKEN');\n\n/**\n * @description\n *\n * O PO Storage é uma biblioteca que fornece um serviço para armazenamento de dados no dispositivo local, sendo semelhante\n * ao funcionamento do [IonicStorage](https://ionicframework.com/docs/storage/).\n * É possível utilizar os drivers [Websql](https://dev.w3.org/html5/webdatabase/), [Indexeddb](https://www.w3.org/TR/IndexedDB/),\n * [LocalStorage](https://html.spec.whatwg.org/multipage/webstorage.html) e também [LokiJS](https://github.com/techfort/LokiJS/wiki).\n *\n * Para um melhor ganho de performance ao buscar e salvar dados, recomendamos a utilização do `LokiJS`, um *database*\n * orientado a documento semelhante ao MongoDB, que além de permitir a persistência dos dados no dispositivo possibilita\n * também o armazenamento dos dados em memória. Outra vantagem, é o aumento do limite de armazenamento para\n * aproximadamente `300mb`.\n *\n * A estrutura utilizada para armazenar os dados é a de chave/valor, onde uma chave funciona como um identificador exclusivo.\n *\n * #### Instalando o PO Storage\n *\n * Para instalar o `po-storage` em sua aplicação execute o seguinte comando:\n *\n * ```shell\n * ng add @po-ui/ng-storage\n * ```\n * Será instalado o pacote `@po-ui/ng-storage` e também já importará `PoStorageModule` no módulo principal da sua aplicação, conforme abaixo:\n *\n * ```typescript\n * import { PoStorageModule } from '@po-ui/ng-storage';\n *\n * @NgModule({\n * declarations: [...],\n * imports: [\n * // Importação do módulo PoStorageModule\n * PoStorageModule.forRoot(),\n * ],\n * bootstrap: [IonicApp],\n * providers: [...]\n * })\n * export class AppModule {}\n * ```\n *\n * Com a declaração do módulo, é criada uma base de dados no armazenamento local e o serviço `PoStorageService` estará\n * pronto para ser utilizada na sua aplicação.\n *\n * #### Configurando as opções de armazenamento\n *\n * Na importação do módulo, o método `PoStorageModule.forRoot()` pode receber como parâmetro um objeto do tipo\n * [`PoStorageConfig`](documentation/po-storage#po-storage-config),\n * que serve para configurar as opções personalizadas do armazenamento, como por exemplo: o tipo de armazenamento\n * preferêncial.\n *\n * Caso não seja passada nenhuma configuração a ordem padrão será: ['websql', 'indexeddb', 'localstorage', 'lokijs'].\n *\n * Abaixo segue um exemplo de configuração onde o storage preferencial passa a ser o `lokijs`:\n *\n * ```typescript\n * import { PoStorageModule } from '@po-ui/ng-storage';\n *\n * @NgModule({\n * declarations: [...],\n * imports: [\n * // Importação do módulo PoStorageModule com a configuração personalizada\n * PoStorageModule.forRoot({\n * name: 'mystorage',\n * storeName: '_mystore',\n * driverOrder: ['lokijs', 'websql', 'indexeddb', 'localstorage']\n * }),\n * ],\n * bootstrap: [IonicApp],\n * providers: [...]\n * })\n * export class AppModule {}\n * ```\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PoStorageService {\n private driver: string = null;\n private idleQueue = new IdleQueue();\n private storagePromise: Promise<any>;\n private lokijsDriver: PoLokiDriver;\n\n constructor(@Inject(PO_STORAGE_CONFIG_TOKEN) config?: PoStorageConfig) {\n this.lokijsDriver = new PoLokiDriver();\n this.setStoragePromise(config);\n }\n\n /**\n * Retorna a configuração padrão para o armazenamento. Caso nenhuma configuração seja inserida,\n * essa configuração será utilizada.\n *\n * @returns {PoStorageConfig} Objeto com a configuração padrão do armazenamento.\n */\n static getDefaultConfig(): PoStorageConfig {\n return {\n name: '_postorage',\n storeName: '_pokv',\n driverOrder: ['websql', 'indexeddb', 'localstorage', 'lokijs']\n };\n }\n\n /**\n * Cria uma instância do `PoStorageService` com a configuração de armazenamento passada como parâmetro.\n *\n * @param {PoStorageConfig} storageConfig Configuração para o armazenamento.\n * @returns {PoStorageService} Instância do `PoStorageService`.\n */\n static providePoStorage(storageConfig?: PoStorageConfig): PoStorageService {\n return new PoStorageService(PoStorageService.getConfig(storageConfig));\n }\n\n private static getConfig(storageConfig?: PoStorageConfig) {\n return storageConfig || PoStorageService.getDefaultConfig();\n }\n\n /**\n * Busca uma lista armazenada pela chave e concatena com a lista passada por parâmetro.\n *\n * Por exemplo:\n *\n * ``` typescript\n * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];\n *\n * this.poStorageService.set('clientKey', clients).then(() => {});\n *\n * ...\n *\n * const newClients = [ { name: 'Lisa', age: 36 }, { name: 'Bruce', age: 18 } ];\n *\n * this.poStorageService.appendArrayToArray('clientKey', newClients).then(() => {\n * // A lista agora será:\n * // [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }, { name: 'Lisa', age: 36 }, { name: 'Bruce', age: 18 }];\n * });\n * ```\n *\n * @param {string} key Chave da lista armazenada.\n * @param {Array} value Lista que será concatenada.\n *\n * @returns {Promise<any>} Promessa que é resolvida após as duas listas serem concatenadas e armazenadas localmente.\n */\n async appendArrayToArray(key: string, value: Array<any>): Promise<any> {\n const data = await this.getArrayOfStorage(key);\n\n const newData = [...data, ...value];\n return this.set(key, newData);\n }\n\n /**\n * Acrescenta um item em uma lista armazenada pela chave.\n *\n * @param {string} key Chave da lista armazenada.\n * @param {Array} value Item que será acrescentado na lista.\n *\n * @returns {Promise<any>} Promessa que é resolvida após o item ser acrescentado na lista armazenada.\n */\n async appendItemToArray(key: string, value: any): Promise<any> {\n const data = await this.getArrayOfStorage(key);\n\n data.push(value);\n return this.set(key, data);\n }\n\n /**\n * Remove todos os itens da base de dados local configurada na declaração do módulo `PoStorageModule`.\n *\n * > Utilize este método com cautela, para evitar a perda indesejada de dados.\n *\n * @returns {Promise<void>} Promessa que é resolvida após todos os itens da base de dados local serem removidos.\n */\n clear(): Promise<void> {\n return this.storagePromise.then(store => store.clear());\n }\n\n /**\n * Verifica se existe um valor dentro de uma determinada chave.\n *\n * @param {string} key Chave que será verificada.\n *\n * @returns {Promise<boolean>} Promessa que é resolvida quando a verificação da existência do valor na chave é concluída.\n */\n exists(key: string): Promise<boolean> {\n return this.get(key).then(data => Promise.resolve(data !== null));\n }\n\n /**\n * Itera sobre todas as chaves armazenadas.\n *\n * @param {any} iteratorCallback Função de `callback` que é chamada a cada iteração, com os seguintes parâmetros:\n * valor, chave e número da iteração.\n *\n * Exemplo de utilização:\n *\n * ``` typescript\n * this.poStorageService.forEach((value: any, key: string, iterationNumber: number) => {\n * // Iteração sobre cada chave armazenada.\n * });\n * ```\n *\n * @returns {Promise<void>} Promessa que é resolvida após a iteração sobre todas as chaves armazenadas.\n */\n forEach(iteratorCallback: (value: any, key: string, iterationNumber: number) => any): Promise<void> {\n return this.storagePromise.then(store => store.iterate(iteratorCallback));\n }\n\n /**\n * Retorna o valor armazenado em uma determinada chave.\n *\n * @param {string} key Chave que identifica o item.\n * @param {boolean} lock Define se irá travar a leitura e a escrita da base de dados para não ser acessada de forma paralela.\n * Caso outra leitura/escrita já tenha sido iniciada, este método irá esperar o outro terminar para então começar.\n *\n * Padrão: `false`.\n *\n * > Esta definição só será válida se o outro acesso paralelo a este método também estiver com o parâmetro *lock* ativado.\n * @returns {Promise<any>} Promessa que é resolvida após o item ser buscado.\n */\n async get(key: string, lock: boolean = false): Promise<any> {\n if (lock) {\n await this.requestIdlePromise();\n return await this.idleQueue.wrapCall(async () => {\n await this.getImmutableItem(key);\n });\n }\n return await this.getImmutableItem(key);\n }\n\n /**\n * Retorna o nome do *driver* que está sendo usado para armazenar os dados, por exemplo: localStorage.\n *\n * @returns {string | null} Nome do *driver*.\n */\n getDriver(): string {\n return this.driver;\n }\n\n /**\n * Retorna o primeiro item de uma lista para uma determinada chave.\n *\n * @param {string} key Chave da lista.\n * @returns {Promise<any>} Promessa que é resolvida após o primeiro item ser encontrado.\n */\n getFirstItem(key: string): Promise<any> {\n return this.get(key).then((data: Array<any>) => Promise.resolve(data ? data[0] : null));\n }\n\n /**\n * Remove o primeiro item de uma lista a partir da chave.\n *\n * @param {string} key Chave da lista que será removido o primeiro item.\n * @returns {Promise<any>} Promessa que é resolvida após o primeiro item da lista ser removido.\n */\n getItemAndRemove(key: string): Promise<any> {\n return this.get(key).then((data: Array<any>) => {\n if (data === null) {\n return null;\n }\n\n const item = data.shift();\n return this.set(key, data).then(() => Promise.resolve(item));\n });\n }\n\n /**\n * Busca o primeiro objeto encontrado dentro de uma lista pelo do valor de um campo.\n *\n * Por exemplo:\n *\n * ``` typescript\n * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];\n *\n * this.poStorageService.set('clientKey', clients).then(() => {});\n *\n * ...\n *\n * this.poStorageService.getItemByField('clientKey', 'name', 'Marie').then(client => {\n * // Resultado do console.log: { name: 'Marie', age: 23 }\n * console.log(client);\n * });\n * ```\n *\n * @param {string} key Chave da lista.\n * @param {string} fieldName O campo a ser filtrado.\n * @param {any} fieldValue O valor do campo.\n * @returns {Promise<any>} Promessa que é resolvida com o item que foi encontrado.\n */\n getItemByField(key: string, fieldName: string, fieldValue: any): Promise<any> {\n return this.get(key).then((storageRecords: Array<any>) => {\n let storageRecordsFiltered = storageRecords.find(storageRecord => storageRecord[fieldName] === fieldValue);\n storageRecordsFiltered = storageRecordsFiltered || null;\n\n return Promise.resolve(storageRecordsFiltered);\n });\n }\n\n /**\n * Lista com todas as chaves armazenadas.\n *\n * @returns {Promise<Array<string>>} Promessa que é resolvida com todas as chaves armazenadas.\n */\n keys(): Promise<Array<string>> {\n return this.storagePromise.then(store => store.keys());\n }\n\n /**\n * Quantidade de chaves armazenadas.\n *\n * @returns {Promise<number>} Promessa que é resolvida com o número de chaves armazenadas.\n */\n length(): Promise<number> {\n return this.storagePromise.then(store => store.length());\n }\n\n /**\n * Utilizado para gerenciar o bloqueio e desbloqueio de recursos no `PoStorageService`.\n * Aguardando a liberação da utilização dos recursos que participam deste comportamento e posteriormente envolve o recurso\n * passado como parâmetro em um comportamento de bloqueio e desbloqueio.\n *\n * Este método se comporta igual a utilização em conjunta dos métodos: `PoStorageService.requestIdlePromise()`,\n * `PoStorageService.lock()` e `PoStorageService.unlook()`.\n *\n * Veja mais no método: [`PoStorage.requestIdlePromise()`](documentation/po-storage#request-idle-promise).\n *\n * @param {Function} limitedResource Função que será envolvida no comportamento de bloqueio e desbloqueio.\n */\n async limitedCallWrap(limitedResource: Function): Promise<any> {\n await this.requestIdlePromise();\n return this.idleQueue.wrapCall(limitedResource);\n }\n\n /**\n * Incrementa um valor na fila de bloqueio do `PoStorageService`. Utilizado juntamente com o método `unlock` para poder\n * controlar a execução de uma determinada tarefa com o `PoStorage.requestIdlePromise()`.\n *\n * Veja mais no método: [`PoStorage.requestIdlePromise()`](documentation/po-storage#request-idle-promise).\n */\n lock() {\n this.idleQueue.lock();\n }\n\n /**\n * Determina se o processo de inicialização do *driver* assíncrono foi concluído.\n *\n * @returns {Promise<any>} Promessa que é resolvida quando o processo de inicialização do *driver* assíncrono\n * for concluído.\n */\n ready(): Promise<any> {\n return this.storagePromise;\n }\n\n /**\n * Remove um valor associado a uma chave.\n *\n * @param {key} key Chave do valor que será removido.\n * @returns {Promise<any>} Promessa que é resolvida após o valor ser removido.\n */\n remove(key: string): Promise<any> {\n return this.storagePromise.then(store => store.removeItem(key));\n }\n\n /**\n * Remove uma propriedade de um objeto armazenado.\n *\n * @param {string} key Chave do objeto armazenado.\n * @param {string} property Propriedade que será removida.\n *\n * @returns {Promise<any>} Promessa que é resolvida após a propriedade ser removida.\n */\n async removeIndexFromObject(key: string, property: string): Promise<any> {\n const data = await this.getObjectOfStorage(key);\n\n delete data[property];\n return this.set(key, data);\n }\n\n /**\n * Remove um objeto de uma lista armazenada pelo valor de uma propriedade.\n *\n * Por exemplo:\n *\n * ``` typescript\n * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];\n *\n * this.poStorageService.set('clientKey', clients).then(() => {});\n *\n * ...\n *\n * this.poStorageService.removeItemFromArray('clientKey', 'name', 'Marie').then(() => {\n * // O objeto { name: 'Marie', age: 23 } foi removido da lista que está na chave 'clientKey'\n * });\n * ```\n *\n * @param {string} key Chave da lista que contém o item que será removido.\n * @param {string} field O campo a ser filtrado no item.\n * @param {string} value O valor do filtro.\n * @returns {Promise<any>} Promessa que é resolvida quando o objeto for removido da lista.\n */\n async removeItemFromArray(key: string, field: string, value: any): Promise<any> {\n let data = await this.getArrayOfStorage(key);\n\n data = data.filter(item => item[field] !== value);\n return this.set(key, data);\n }\n\n /**\n * <a id=\"request-idle-promise\"></a>\n * Método que verifica se o acesso a base de dados configurada está liberado.\n *\n * Utilizado em conjunto com os métodos `lock()` e `unlock()` entre tarefas que não podem ser executadas de forma\n * paralela, para não causar inconsistências nos dados.\n *\n * Exemplo de utilização:\n *\n * ```\n * // Aguarda a liberação para continuar\n * await this.poStorage.requestIdlePromise();\n *\n * this.poStorage.lock();\n *\n * // Executa uma tarefa que irá ler e/ou escrever na base de dados configurada.\n *\n * this.poStorage.unlock();\n * ```\n *\n * > É importante sempre utilizá-lo antes de executar os métodos `lock()` e `unlock()` para garantir que a tarefa só\n * será executada caso o acesso esteja livre.\n *\n * @returns {Promise<any>} Promessa que é resolvida quando o acesso a base de dados configurada estiver liberado.\n */\n requestIdlePromise(): Promise<any> {\n return this.idleQueue.requestIdlePromise();\n }\n\n /**\n * Grava um valor em uma determinada chave.\n *\n * @param {string} key Chave para o valor que será gravado.\n * @param {any} value Valor que será gravado.\n * @param {boolean} lock Define se irá travar a leitura e a escrita da base de dados para não ser acessada de forma paralela.\n * Caso outra leitura/escrita já tenha sido iniciada, este método irá esperar o outro terminar para então começar.\n *\n * Padrão: `false`.\n *\n * > Esta definição só será válida se o outro acesso paralelo a este método também estiver com o parâmetro *lock* ativado.\n * @returns {Promise<any>} Promessa que é resolvida após o valor ter sido gravado.\n */\n async set(key: string, value: any, lock: boolean = false): Promise<any> {\n const store = await this.storagePromise;\n const newValue = typeof value === 'object' ? JSON.parse(JSON.stringify(value)) : value;\n\n if (lock) {\n await this.requestIdlePromise();\n return this.idleQueue.wrapCall(() => store.setItem(key, newValue));\n }\n\n return store.setItem(key, newValue);\n }\n\n /**\n * Atribui um valor a uma propriedade de um objeto armazenado pela chave.\n *\n * Por exemplo:\n *\n * ``` typescript\n * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];\n *\n * this.poStorageService.set('clientKey', clients).then(() => {});\n *\n * ...\n *\n * this.poStorageService.setIndexToObject('clientKey', 'name', 'Clare').then(() => {\n * // O objeto { name: 'Marie', age: 23 } passa a ser { name: 'Clare', age: 23 }\n * });\n * ```\n *\n * @param {string} key Chave do objeto.\n * @param {string} property Nome da propriedade do objeto.\n * @param {any} value Valor que será gravado na propriedade do objeto.\n */\n async setIndexToObject(key: string, property: string, value: any): Promise<any> {\n const data = await this.getObjectOfStorage(key);\n\n data[property] = value;\n return this.set(key, data);\n }\n\n /**\n * Decrementa um valor na fila de bloqueio. Utilizado juntamente com o método `lock` para poder\n * controlar a execução de uma determinada tarefa com o `PoStorage.requestIdlePromise()`.\n *\n * Veja mais no método: [`PoStorage.requestIdlePromise()`](documentation/po-storage#request-idle-promise).\n */\n unlock() {\n this.idleQueue.unlock();\n }\n\n private async getArrayOfStorage(key: string) {\n const data = await this.get(key);\n return data || [];\n }\n\n private async getImmutableItem(key: string) {\n const store = await this.storagePromise;\n const items = await store.getItem(key);\n return items ? JSON.parse(JSON.stringify(items)) : null;\n }\n\n private async defineLocalForageDriver(localForageInstance: any, driverOrder) {\n await localForageInstance.defineDriver(this.lokijsDriver.getDriver());\n await this.setDriver(localForageInstance, driverOrder);\n return localForageInstance;\n }\n\n private getDriverOrder(driverOrder: Array<string>): Array<string> {\n return driverOrder.map(driver => {\n switch (driver) {\n case 'indexeddb':\n return LocalForage.INDEXEDDB;\n case 'websql':\n return LocalForage.WEBSQL;\n case 'localstorage':\n return LocalForage.LOCALSTORAGE;\n default:\n return driver;\n }\n });\n }\n\n private async getObjectOfStorage(key: string) {\n const data = await this.get(key);\n return data || {};\n }\n\n private async setDriver(localForageInstance: LocalForage, driverOrder) {\n await localForageInstance.setDriver(this.getDriverOrder(driverOrder));\n this.driver = localForageInstance.driver();\n }\n\n private setStoragePromise(config: PoStorageConfig) {\n this.storagePromise = this.getStorageInstance(config);\n }\n\n private async getStorageInstance(config: PoStorageConfig) {\n const defaultConfig = PoStorageService.getDefaultConfig();\n const actualConfig = Object.assign(defaultConfig, config || {});\n\n const localForageInstance = LocalForage.createInstance(actualConfig);\n\n try {\n return await this.defineLocalForageDriver(localForageInstance, actualConfig.driverOrder);\n } catch {\n throw new Error(`Cannot use this drivers: ${actualConfig.driverOrder.join(', ')}.`);\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { PoStorageConfig } from './services/po-storage-config.interface';\nimport { PoStorageService, PO_STORAGE_CONFIG_TOKEN } from './services/po-storage.service';\n\n/**\n * @description\n *\n * Módulo do componente PoStorage responsável por manipular o storage do browser.\n */\n\n@NgModule()\nexport class PoStorageModule {\n static forRoot(storageConfig?: PoStorageConfig): ModuleWithProviders<PoStorageModule> {\n return {\n ngModule: PoStorageModule,\n providers: [\n {\n provide: PO_STORAGE_CONFIG_TOKEN,\n useValue: storageConfig || PoStorageService.getDefaultConfig()\n },\n {\n provide: PoStorageService,\n useFactory: PoStorageService.providePoStorage,\n deps: [PO_STORAGE_CONFIG_TOKEN]\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,5 +1,422 @@
1
+ import * as i0 from '@angular/core';
2
+ import { ModuleWithProviders } from '@angular/core';
3
+
1
4
  /**
2
- * Generated bundle index. Do not edit.
5
+ * @usedBy PoStorageService
6
+ *
7
+ * @description
8
+ *
9
+ * <a id="po-storage-config"></a>
10
+ *
11
+ * Interface para as configurações da base de dados local do `PoStorageService`.
3
12
  */
4
- /// <amd-module name="@po-ui/ng-storage" />
5
- export * from './public-api';
13
+ interface PoStorageConfig {
14
+ /**
15
+ * Ordem de preferência dos *drivers* para gravação dos dados.
16
+ *
17
+ * Os *drivers* utilizados pelo `PoStorageService` são:
18
+ * - `indexeddb`;
19
+ * - `websql`;
20
+ * - `localstorage`;
21
+ * - `lokijs`.
22
+ *
23
+ * Exemplo de ordem de preferência: `['lokijs', 'websql', 'indexeddb', 'localstorage']`.
24
+ */
25
+ driverOrder?: Array<string>;
26
+ /** Nome da base de dados. */
27
+ name?: string;
28
+ /** Nome da coleção onde os dados serão armazenados. Deve ser alfanumérico e conter "_"(underscores). */
29
+ storeName?: string;
30
+ }
31
+
32
+ /**
33
+ * @description
34
+ *
35
+ * O PO Storage é uma biblioteca que fornece um serviço para armazenamento de dados no dispositivo local, sendo semelhante
36
+ * ao funcionamento do [IonicStorage](https://ionicframework.com/docs/storage/).
37
+ * É possível utilizar os drivers [Websql](https://dev.w3.org/html5/webdatabase/), [Indexeddb](https://www.w3.org/TR/IndexedDB/),
38
+ * [LocalStorage](https://html.spec.whatwg.org/multipage/webstorage.html) e também [LokiJS](https://github.com/techfort/LokiJS/wiki).
39
+ *
40
+ * Para um melhor ganho de performance ao buscar e salvar dados, recomendamos a utilização do `LokiJS`, um *database*
41
+ * orientado a documento semelhante ao MongoDB, que além de permitir a persistência dos dados no dispositivo possibilita
42
+ * também o armazenamento dos dados em memória. Outra vantagem, é o aumento do limite de armazenamento para
43
+ * aproximadamente `300mb`.
44
+ *
45
+ * A estrutura utilizada para armazenar os dados é a de chave/valor, onde uma chave funciona como um identificador exclusivo.
46
+ *
47
+ * #### Instalando o PO Storage
48
+ *
49
+ * Para instalar o `po-storage` em sua aplicação execute o seguinte comando:
50
+ *
51
+ * ```shell
52
+ * ng add @po-ui/ng-storage
53
+ * ```
54
+ * Será instalado o pacote `@po-ui/ng-storage` e também já importará `PoStorageModule` no módulo principal da sua aplicação, conforme abaixo:
55
+ *
56
+ * ```typescript
57
+ * import { PoStorageModule } from '@po-ui/ng-storage';
58
+ *
59
+ * @NgModule({
60
+ * declarations: [...],
61
+ * imports: [
62
+ * // Importação do módulo PoStorageModule
63
+ * PoStorageModule.forRoot(),
64
+ * ],
65
+ * bootstrap: [IonicApp],
66
+ * providers: [...]
67
+ * })
68
+ * export class AppModule {}
69
+ * ```
70
+ *
71
+ * Com a declaração do módulo, é criada uma base de dados no armazenamento local e o serviço `PoStorageService` estará
72
+ * pronto para ser utilizada na sua aplicação.
73
+ *
74
+ * #### Configurando as opções de armazenamento
75
+ *
76
+ * Na importação do módulo, o método `PoStorageModule.forRoot()` pode receber como parâmetro um objeto do tipo
77
+ * [`PoStorageConfig`](documentation/po-storage#po-storage-config),
78
+ * que serve para configurar as opções personalizadas do armazenamento, como por exemplo: o tipo de armazenamento
79
+ * preferêncial.
80
+ *
81
+ * Caso não seja passada nenhuma configuração a ordem padrão será: ['websql', 'indexeddb', 'localstorage', 'lokijs'].
82
+ *
83
+ * Abaixo segue um exemplo de configuração onde o storage preferencial passa a ser o `lokijs`:
84
+ *
85
+ * ```typescript
86
+ * import { PoStorageModule } from '@po-ui/ng-storage';
87
+ *
88
+ * @NgModule({
89
+ * declarations: [...],
90
+ * imports: [
91
+ * // Importação do módulo PoStorageModule com a configuração personalizada
92
+ * PoStorageModule.forRoot({
93
+ * name: 'mystorage',
94
+ * storeName: '_mystore',
95
+ * driverOrder: ['lokijs', 'websql', 'indexeddb', 'localstorage']
96
+ * }),
97
+ * ],
98
+ * bootstrap: [IonicApp],
99
+ * providers: [...]
100
+ * })
101
+ * export class AppModule {}
102
+ * ```
103
+ */
104
+ declare class PoStorageService {
105
+ private driver;
106
+ private idleQueue;
107
+ private storagePromise;
108
+ private lokijsDriver;
109
+ constructor(config?: PoStorageConfig);
110
+ /**
111
+ * Retorna a configuração padrão para o armazenamento. Caso nenhuma configuração seja inserida,
112
+ * essa configuração será utilizada.
113
+ *
114
+ * @returns {PoStorageConfig} Objeto com a configuração padrão do armazenamento.
115
+ */
116
+ static getDefaultConfig(): PoStorageConfig;
117
+ /**
118
+ * Cria uma instância do `PoStorageService` com a configuração de armazenamento passada como parâmetro.
119
+ *
120
+ * @param {PoStorageConfig} storageConfig Configuração para o armazenamento.
121
+ * @returns {PoStorageService} Instância do `PoStorageService`.
122
+ */
123
+ static providePoStorage(storageConfig?: PoStorageConfig): PoStorageService;
124
+ private static getConfig;
125
+ /**
126
+ * Busca uma lista armazenada pela chave e concatena com a lista passada por parâmetro.
127
+ *
128
+ * Por exemplo:
129
+ *
130
+ * ``` typescript
131
+ * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];
132
+ *
133
+ * this.poStorageService.set('clientKey', clients).then(() => {});
134
+ *
135
+ * ...
136
+ *
137
+ * const newClients = [ { name: 'Lisa', age: 36 }, { name: 'Bruce', age: 18 } ];
138
+ *
139
+ * this.poStorageService.appendArrayToArray('clientKey', newClients).then(() => {
140
+ * // A lista agora será:
141
+ * // [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }, { name: 'Lisa', age: 36 }, { name: 'Bruce', age: 18 }];
142
+ * });
143
+ * ```
144
+ *
145
+ * @param {string} key Chave da lista armazenada.
146
+ * @param {Array} value Lista que será concatenada.
147
+ *
148
+ * @returns {Promise<any>} Promessa que é resolvida após as duas listas serem concatenadas e armazenadas localmente.
149
+ */
150
+ appendArrayToArray(key: string, value: Array<any>): Promise<any>;
151
+ /**
152
+ * Acrescenta um item em uma lista armazenada pela chave.
153
+ *
154
+ * @param {string} key Chave da lista armazenada.
155
+ * @param {Array} value Item que será acrescentado na lista.
156
+ *
157
+ * @returns {Promise<any>} Promessa que é resolvida após o item ser acrescentado na lista armazenada.
158
+ */
159
+ appendItemToArray(key: string, value: any): Promise<any>;
160
+ /**
161
+ * Remove todos os itens da base de dados local configurada na declaração do módulo `PoStorageModule`.
162
+ *
163
+ * > Utilize este método com cautela, para evitar a perda indesejada de dados.
164
+ *
165
+ * @returns {Promise<void>} Promessa que é resolvida após todos os itens da base de dados local serem removidos.
166
+ */
167
+ clear(): Promise<void>;
168
+ /**
169
+ * Verifica se existe um valor dentro de uma determinada chave.
170
+ *
171
+ * @param {string} key Chave que será verificada.
172
+ *
173
+ * @returns {Promise<boolean>} Promessa que é resolvida quando a verificação da existência do valor na chave é concluída.
174
+ */
175
+ exists(key: string): Promise<boolean>;
176
+ /**
177
+ * Itera sobre todas as chaves armazenadas.
178
+ *
179
+ * @param {any} iteratorCallback Função de `callback` que é chamada a cada iteração, com os seguintes parâmetros:
180
+ * valor, chave e número da iteração.
181
+ *
182
+ * Exemplo de utilização:
183
+ *
184
+ * ``` typescript
185
+ * this.poStorageService.forEach((value: any, key: string, iterationNumber: number) => {
186
+ * // Iteração sobre cada chave armazenada.
187
+ * });
188
+ * ```
189
+ *
190
+ * @returns {Promise<void>} Promessa que é resolvida após a iteração sobre todas as chaves armazenadas.
191
+ */
192
+ forEach(iteratorCallback: (value: any, key: string, iterationNumber: number) => any): Promise<void>;
193
+ /**
194
+ * Retorna o valor armazenado em uma determinada chave.
195
+ *
196
+ * @param {string} key Chave que identifica o item.
197
+ * @param {boolean} lock Define se irá travar a leitura e a escrita da base de dados para não ser acessada de forma paralela.
198
+ * Caso outra leitura/escrita já tenha sido iniciada, este método irá esperar o outro terminar para então começar.
199
+ *
200
+ * Padrão: `false`.
201
+ *
202
+ * > Esta definição só será válida se o outro acesso paralelo a este método também estiver com o parâmetro *lock* ativado.
203
+ * @returns {Promise<any>} Promessa que é resolvida após o item ser buscado.
204
+ */
205
+ get(key: string, lock?: boolean): Promise<any>;
206
+ /**
207
+ * Retorna o nome do *driver* que está sendo usado para armazenar os dados, por exemplo: localStorage.
208
+ *
209
+ * @returns {string | null} Nome do *driver*.
210
+ */
211
+ getDriver(): string;
212
+ /**
213
+ * Retorna o primeiro item de uma lista para uma determinada chave.
214
+ *
215
+ * @param {string} key Chave da lista.
216
+ * @returns {Promise<any>} Promessa que é resolvida após o primeiro item ser encontrado.
217
+ */
218
+ getFirstItem(key: string): Promise<any>;
219
+ /**
220
+ * Remove o primeiro item de uma lista a partir da chave.
221
+ *
222
+ * @param {string} key Chave da lista que será removido o primeiro item.
223
+ * @returns {Promise<any>} Promessa que é resolvida após o primeiro item da lista ser removido.
224
+ */
225
+ getItemAndRemove(key: string): Promise<any>;
226
+ /**
227
+ * Busca o primeiro objeto encontrado dentro de uma lista pelo do valor de um campo.
228
+ *
229
+ * Por exemplo:
230
+ *
231
+ * ``` typescript
232
+ * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];
233
+ *
234
+ * this.poStorageService.set('clientKey', clients).then(() => {});
235
+ *
236
+ * ...
237
+ *
238
+ * this.poStorageService.getItemByField('clientKey', 'name', 'Marie').then(client => {
239
+ * // Resultado do console.log: { name: 'Marie', age: 23 }
240
+ * console.log(client);
241
+ * });
242
+ * ```
243
+ *
244
+ * @param {string} key Chave da lista.
245
+ * @param {string} fieldName O campo a ser filtrado.
246
+ * @param {any} fieldValue O valor do campo.
247
+ * @returns {Promise<any>} Promessa que é resolvida com o item que foi encontrado.
248
+ */
249
+ getItemByField(key: string, fieldName: string, fieldValue: any): Promise<any>;
250
+ /**
251
+ * Lista com todas as chaves armazenadas.
252
+ *
253
+ * @returns {Promise<Array<string>>} Promessa que é resolvida com todas as chaves armazenadas.
254
+ */
255
+ keys(): Promise<Array<string>>;
256
+ /**
257
+ * Quantidade de chaves armazenadas.
258
+ *
259
+ * @returns {Promise<number>} Promessa que é resolvida com o número de chaves armazenadas.
260
+ */
261
+ length(): Promise<number>;
262
+ /**
263
+ * Utilizado para gerenciar o bloqueio e desbloqueio de recursos no `PoStorageService`.
264
+ * Aguardando a liberação da utilização dos recursos que participam deste comportamento e posteriormente envolve o recurso
265
+ * passado como parâmetro em um comportamento de bloqueio e desbloqueio.
266
+ *
267
+ * Este método se comporta igual a utilização em conjunta dos métodos: `PoStorageService.requestIdlePromise()`,
268
+ * `PoStorageService.lock()` e `PoStorageService.unlook()`.
269
+ *
270
+ * Veja mais no método: [`PoStorage.requestIdlePromise()`](documentation/po-storage#request-idle-promise).
271
+ *
272
+ * @param {Function} limitedResource Função que será envolvida no comportamento de bloqueio e desbloqueio.
273
+ */
274
+ limitedCallWrap(limitedResource: Function): Promise<any>;
275
+ /**
276
+ * Incrementa um valor na fila de bloqueio do `PoStorageService`. Utilizado juntamente com o método `unlock` para poder
277
+ * controlar a execução de uma determinada tarefa com o `PoStorage.requestIdlePromise()`.
278
+ *
279
+ * Veja mais no método: [`PoStorage.requestIdlePromise()`](documentation/po-storage#request-idle-promise).
280
+ */
281
+ lock(): void;
282
+ /**
283
+ * Determina se o processo de inicialização do *driver* assíncrono foi concluído.
284
+ *
285
+ * @returns {Promise<any>} Promessa que é resolvida quando o processo de inicialização do *driver* assíncrono
286
+ * for concluído.
287
+ */
288
+ ready(): Promise<any>;
289
+ /**
290
+ * Remove um valor associado a uma chave.
291
+ *
292
+ * @param {key} key Chave do valor que será removido.
293
+ * @returns {Promise<any>} Promessa que é resolvida após o valor ser removido.
294
+ */
295
+ remove(key: string): Promise<any>;
296
+ /**
297
+ * Remove uma propriedade de um objeto armazenado.
298
+ *
299
+ * @param {string} key Chave do objeto armazenado.
300
+ * @param {string} property Propriedade que será removida.
301
+ *
302
+ * @returns {Promise<any>} Promessa que é resolvida após a propriedade ser removida.
303
+ */
304
+ removeIndexFromObject(key: string, property: string): Promise<any>;
305
+ /**
306
+ * Remove um objeto de uma lista armazenada pelo valor de uma propriedade.
307
+ *
308
+ * Por exemplo:
309
+ *
310
+ * ``` typescript
311
+ * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];
312
+ *
313
+ * this.poStorageService.set('clientKey', clients).then(() => {});
314
+ *
315
+ * ...
316
+ *
317
+ * this.poStorageService.removeItemFromArray('clientKey', 'name', 'Marie').then(() => {
318
+ * // O objeto { name: 'Marie', age: 23 } foi removido da lista que está na chave 'clientKey'
319
+ * });
320
+ * ```
321
+ *
322
+ * @param {string} key Chave da lista que contém o item que será removido.
323
+ * @param {string} field O campo a ser filtrado no item.
324
+ * @param {string} value O valor do filtro.
325
+ * @returns {Promise<any>} Promessa que é resolvida quando o objeto for removido da lista.
326
+ */
327
+ removeItemFromArray(key: string, field: string, value: any): Promise<any>;
328
+ /**
329
+ * <a id="request-idle-promise"></a>
330
+ * Método que verifica se o acesso a base de dados configurada está liberado.
331
+ *
332
+ * Utilizado em conjunto com os métodos `lock()` e `unlock()` entre tarefas que não podem ser executadas de forma
333
+ * paralela, para não causar inconsistências nos dados.
334
+ *
335
+ * Exemplo de utilização:
336
+ *
337
+ * ```
338
+ * // Aguarda a liberação para continuar
339
+ * await this.poStorage.requestIdlePromise();
340
+ *
341
+ * this.poStorage.lock();
342
+ *
343
+ * // Executa uma tarefa que irá ler e/ou escrever na base de dados configurada.
344
+ *
345
+ * this.poStorage.unlock();
346
+ * ```
347
+ *
348
+ * > É importante sempre utilizá-lo antes de executar os métodos `lock()` e `unlock()` para garantir que a tarefa só
349
+ * será executada caso o acesso esteja livre.
350
+ *
351
+ * @returns {Promise<any>} Promessa que é resolvida quando o acesso a base de dados configurada estiver liberado.
352
+ */
353
+ requestIdlePromise(): Promise<any>;
354
+ /**
355
+ * Grava um valor em uma determinada chave.
356
+ *
357
+ * @param {string} key Chave para o valor que será gravado.
358
+ * @param {any} value Valor que será gravado.
359
+ * @param {boolean} lock Define se irá travar a leitura e a escrita da base de dados para não ser acessada de forma paralela.
360
+ * Caso outra leitura/escrita já tenha sido iniciada, este método irá esperar o outro terminar para então começar.
361
+ *
362
+ * Padrão: `false`.
363
+ *
364
+ * > Esta definição só será válida se o outro acesso paralelo a este método também estiver com o parâmetro *lock* ativado.
365
+ * @returns {Promise<any>} Promessa que é resolvida após o valor ter sido gravado.
366
+ */
367
+ set(key: string, value: any, lock?: boolean): Promise<any>;
368
+ /**
369
+ * Atribui um valor a uma propriedade de um objeto armazenado pela chave.
370
+ *
371
+ * Por exemplo:
372
+ *
373
+ * ``` typescript
374
+ * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];
375
+ *
376
+ * this.poStorageService.set('clientKey', clients).then(() => {});
377
+ *
378
+ * ...
379
+ *
380
+ * this.poStorageService.setIndexToObject('clientKey', 'name', 'Clare').then(() => {
381
+ * // O objeto { name: 'Marie', age: 23 } passa a ser { name: 'Clare', age: 23 }
382
+ * });
383
+ * ```
384
+ *
385
+ * @param {string} key Chave do objeto.
386
+ * @param {string} property Nome da propriedade do objeto.
387
+ * @param {any} value Valor que será gravado na propriedade do objeto.
388
+ */
389
+ setIndexToObject(key: string, property: string, value: any): Promise<any>;
390
+ /**
391
+ * Decrementa um valor na fila de bloqueio. Utilizado juntamente com o método `lock` para poder
392
+ * controlar a execução de uma determinada tarefa com o `PoStorage.requestIdlePromise()`.
393
+ *
394
+ * Veja mais no método: [`PoStorage.requestIdlePromise()`](documentation/po-storage#request-idle-promise).
395
+ */
396
+ unlock(): void;
397
+ private getArrayOfStorage;
398
+ private getImmutableItem;
399
+ private defineLocalForageDriver;
400
+ private getDriverOrder;
401
+ private getObjectOfStorage;
402
+ private setDriver;
403
+ private setStoragePromise;
404
+ private getStorageInstance;
405
+ static ɵfac: i0.ɵɵFactoryDeclaration<PoStorageService, never>;
406
+ static ɵprov: i0.ɵɵInjectableDeclaration<PoStorageService>;
407
+ }
408
+
409
+ /**
410
+ * @description
411
+ *
412
+ * Módulo do componente PoStorage responsável por manipular o storage do browser.
413
+ */
414
+ declare class PoStorageModule {
415
+ static forRoot(storageConfig?: PoStorageConfig): ModuleWithProviders<PoStorageModule>;
416
+ static ɵfac: i0.ɵɵFactoryDeclaration<PoStorageModule, never>;
417
+ static ɵmod: i0.ɵɵNgModuleDeclaration<PoStorageModule, never, never, never>;
418
+ static ɵinj: i0.ɵɵInjectorDeclaration<PoStorageModule>;
419
+ }
420
+
421
+ export { PoStorageModule, PoStorageService };
422
+ export type { PoStorageConfig };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@po-ui/ng-storage",
3
- "version": "19.28.0",
3
+ "version": "20.1.0",
4
4
  "description": "PO UI - Storage",
5
5
  "author": "PO UI",
6
6
  "license": "MIT",
@@ -11,14 +11,14 @@
11
11
  },
12
12
  "schematics": "./schematics/collection.json",
13
13
  "dependencies": {
14
- "@po-ui/ng-schematics": "19.28.0",
14
+ "@po-ui/ng-schematics": "20.1.0",
15
15
  "custom-idle-queue": "3.0.1",
16
16
  "localforage": "1.10.0",
17
17
  "lokijs": "1.5.12",
18
- "tslib": "^2.6.2"
18
+ "tslib": "^2.3.0"
19
19
  },
20
20
  "peerDependencies": {
21
- "@angular/core": "^19",
21
+ "@angular/core": "^20",
22
22
  "custom-idle-queue": "3.0.1",
23
23
  "localforage": "1.10.0",
24
24
  "lokijs": "1.5.12",
Binary file
@@ -23,7 +23,7 @@ function default_1(options) {
23
23
  }
24
24
  function addPoPackageAndInstall() {
25
25
  return (tree, context) => {
26
- (0, package_config_1.addPackageToPackageJson)(tree, '@po-ui/ng-storage', '19.28.0');
26
+ (0, package_config_1.addPackageToPackageJson)(tree, '@po-ui/ng-storage', '20.1.0');
27
27
  // install packages
28
28
  context.addTask(new tasks_1.NodePackageInstallTask());
29
29
  };
@@ -1,30 +0,0 @@
1
- export declare class PoLokiDriver {
2
- private collection;
3
- private db;
4
- private driver;
5
- constructor();
6
- private clear;
7
- private getItem;
8
- private initStorage;
9
- private iterate;
10
- private key;
11
- private keys;
12
- private length;
13
- private removeItem;
14
- private setItem;
15
- getDriver(): any;
16
- private addCollection;
17
- private clearCollection;
18
- private configureLokiStorage;
19
- private findAndRemoveItem;
20
- private getCollection;
21
- private databaseInitialize;
22
- private getItemInCollectionBy;
23
- private getLokiMap;
24
- private hasCollection;
25
- private hasDataInCollection;
26
- private hasCollectionAndDataInCollection;
27
- private insertOrUpdate;
28
- private iterateWithDataItem;
29
- private getNumberItensInCollection;
30
- }
package/lib/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export { PoStorageConfig } from './services/po-storage-config.interface';
2
- export { PoStorageService } from './services/po-storage.service';
3
- export { PoStorageModule } from './po-storage.module';
@@ -1,14 +0,0 @@
1
- import { ModuleWithProviders } from '@angular/core';
2
- import { PoStorageConfig } from './services/po-storage-config.interface';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * @description
6
- *
7
- * Módulo do componente PoStorage responsável por manipular o storage do browser.
8
- */
9
- export declare class PoStorageModule {
10
- static forRoot(storageConfig?: PoStorageConfig): ModuleWithProviders<PoStorageModule>;
11
- static ɵfac: i0.ɵɵFactoryDeclaration<PoStorageModule, never>;
12
- static ɵmod: i0.ɵɵNgModuleDeclaration<PoStorageModule, never, never, never>;
13
- static ɵinj: i0.ɵɵInjectorDeclaration<PoStorageModule>;
14
- }
@@ -1,27 +0,0 @@
1
- /**
2
- * @usedBy PoStorageService
3
- *
4
- * @description
5
- *
6
- * <a id="po-storage-config"></a>
7
- *
8
- * Interface para as configurações da base de dados local do `PoStorageService`.
9
- */
10
- export interface PoStorageConfig {
11
- /**
12
- * Ordem de preferência dos *drivers* para gravação dos dados.
13
- *
14
- * Os *drivers* utilizados pelo `PoStorageService` são:
15
- * - `indexeddb`;
16
- * - `websql`;
17
- * - `localstorage`;
18
- * - `lokijs`.
19
- *
20
- * Exemplo de ordem de preferência: `['lokijs', 'websql', 'indexeddb', 'localstorage']`.
21
- */
22
- driverOrder?: Array<string>;
23
- /** Nome da base de dados. */
24
- name?: string;
25
- /** Nome da coleção onde os dados serão armazenados. Deve ser alfanumérico e conter "_"(underscores). */
26
- storeName?: string;
27
- }
@@ -1,381 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- import 'localforage';
3
- import { PoStorageConfig } from './po-storage-config.interface';
4
- import * as i0 from "@angular/core";
5
- export declare const PO_STORAGE_CONFIG_TOKEN: InjectionToken<unknown>;
6
- /**
7
- * @description
8
- *
9
- * O PO Storage é uma biblioteca que fornece um serviço para armazenamento de dados no dispositivo local, sendo semelhante
10
- * ao funcionamento do [IonicStorage](https://ionicframework.com/docs/storage/).
11
- * É possível utilizar os drivers [Websql](https://dev.w3.org/html5/webdatabase/), [Indexeddb](https://www.w3.org/TR/IndexedDB/),
12
- * [LocalStorage](https://html.spec.whatwg.org/multipage/webstorage.html) e também [LokiJS](https://github.com/techfort/LokiJS/wiki).
13
- *
14
- * Para um melhor ganho de performance ao buscar e salvar dados, recomendamos a utilização do `LokiJS`, um *database*
15
- * orientado a documento semelhante ao MongoDB, que além de permitir a persistência dos dados no dispositivo possibilita
16
- * também o armazenamento dos dados em memória. Outra vantagem, é o aumento do limite de armazenamento para
17
- * aproximadamente `300mb`.
18
- *
19
- * A estrutura utilizada para armazenar os dados é a de chave/valor, onde uma chave funciona como um identificador exclusivo.
20
- *
21
- * #### Instalando o PO Storage
22
- *
23
- * Para instalar o `po-storage` em sua aplicação execute o seguinte comando:
24
- *
25
- * ```shell
26
- * ng add @po-ui/ng-storage
27
- * ```
28
- * Será instalado o pacote `@po-ui/ng-storage` e também já importará `PoStorageModule` no módulo principal da sua aplicação, conforme abaixo:
29
- *
30
- * ```typescript
31
- * import { PoStorageModule } from '@po-ui/ng-storage';
32
- *
33
- * @NgModule({
34
- * declarations: [...],
35
- * imports: [
36
- * // Importação do módulo PoStorageModule
37
- * PoStorageModule.forRoot(),
38
- * ],
39
- * bootstrap: [IonicApp],
40
- * providers: [...]
41
- * })
42
- * export class AppModule {}
43
- * ```
44
- *
45
- * Com a declaração do módulo, é criada uma base de dados no armazenamento local e o serviço `PoStorageService` estará
46
- * pronto para ser utilizada na sua aplicação.
47
- *
48
- * #### Configurando as opções de armazenamento
49
- *
50
- * Na importação do módulo, o método `PoStorageModule.forRoot()` pode receber como parâmetro um objeto do tipo
51
- * [`PoStorageConfig`](documentation/po-storage#po-storage-config),
52
- * que serve para configurar as opções personalizadas do armazenamento, como por exemplo: o tipo de armazenamento
53
- * preferêncial.
54
- *
55
- * Caso não seja passada nenhuma configuração a ordem padrão será: ['websql', 'indexeddb', 'localstorage', 'lokijs'].
56
- *
57
- * Abaixo segue um exemplo de configuração onde o storage preferencial passa a ser o `lokijs`:
58
- *
59
- * ```typescript
60
- * import { PoStorageModule } from '@po-ui/ng-storage';
61
- *
62
- * @NgModule({
63
- * declarations: [...],
64
- * imports: [
65
- * // Importação do módulo PoStorageModule com a configuração personalizada
66
- * PoStorageModule.forRoot({
67
- * name: 'mystorage',
68
- * storeName: '_mystore',
69
- * driverOrder: ['lokijs', 'websql', 'indexeddb', 'localstorage']
70
- * }),
71
- * ],
72
- * bootstrap: [IonicApp],
73
- * providers: [...]
74
- * })
75
- * export class AppModule {}
76
- * ```
77
- */
78
- export declare class PoStorageService {
79
- private driver;
80
- private idleQueue;
81
- private storagePromise;
82
- private lokijsDriver;
83
- constructor(config?: PoStorageConfig);
84
- /**
85
- * Retorna a configuração padrão para o armazenamento. Caso nenhuma configuração seja inserida,
86
- * essa configuração será utilizada.
87
- *
88
- * @returns {PoStorageConfig} Objeto com a configuração padrão do armazenamento.
89
- */
90
- static getDefaultConfig(): PoStorageConfig;
91
- /**
92
- * Cria uma instância do `PoStorageService` com a configuração de armazenamento passada como parâmetro.
93
- *
94
- * @param {PoStorageConfig} storageConfig Configuração para o armazenamento.
95
- * @returns {PoStorageService} Instância do `PoStorageService`.
96
- */
97
- static providePoStorage(storageConfig?: PoStorageConfig): PoStorageService;
98
- private static getConfig;
99
- /**
100
- * Busca uma lista armazenada pela chave e concatena com a lista passada por parâmetro.
101
- *
102
- * Por exemplo:
103
- *
104
- * ``` typescript
105
- * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];
106
- *
107
- * this.poStorageService.set('clientKey', clients).then(() => {});
108
- *
109
- * ...
110
- *
111
- * const newClients = [ { name: 'Lisa', age: 36 }, { name: 'Bruce', age: 18 } ];
112
- *
113
- * this.poStorageService.appendArrayToArray('clientKey', newClients).then(() => {
114
- * // A lista agora será:
115
- * // [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }, { name: 'Lisa', age: 36 }, { name: 'Bruce', age: 18 }];
116
- * });
117
- * ```
118
- *
119
- * @param {string} key Chave da lista armazenada.
120
- * @param {Array} value Lista que será concatenada.
121
- *
122
- * @returns {Promise<any>} Promessa que é resolvida após as duas listas serem concatenadas e armazenadas localmente.
123
- */
124
- appendArrayToArray(key: string, value: Array<any>): Promise<any>;
125
- /**
126
- * Acrescenta um item em uma lista armazenada pela chave.
127
- *
128
- * @param {string} key Chave da lista armazenada.
129
- * @param {Array} value Item que será acrescentado na lista.
130
- *
131
- * @returns {Promise<any>} Promessa que é resolvida após o item ser acrescentado na lista armazenada.
132
- */
133
- appendItemToArray(key: string, value: any): Promise<any>;
134
- /**
135
- * Remove todos os itens da base de dados local configurada na declaração do módulo `PoStorageModule`.
136
- *
137
- * > Utilize este método com cautela, para evitar a perda indesejada de dados.
138
- *
139
- * @returns {Promise<void>} Promessa que é resolvida após todos os itens da base de dados local serem removidos.
140
- */
141
- clear(): Promise<void>;
142
- /**
143
- * Verifica se existe um valor dentro de uma determinada chave.
144
- *
145
- * @param {string} key Chave que será verificada.
146
- *
147
- * @returns {Promise<boolean>} Promessa que é resolvida quando a verificação da existência do valor na chave é concluída.
148
- */
149
- exists(key: string): Promise<boolean>;
150
- /**
151
- * Itera sobre todas as chaves armazenadas.
152
- *
153
- * @param {any} iteratorCallback Função de `callback` que é chamada a cada iteração, com os seguintes parâmetros:
154
- * valor, chave e número da iteração.
155
- *
156
- * Exemplo de utilização:
157
- *
158
- * ``` typescript
159
- * this.poStorageService.forEach((value: any, key: string, iterationNumber: number) => {
160
- * // Iteração sobre cada chave armazenada.
161
- * });
162
- * ```
163
- *
164
- * @returns {Promise<void>} Promessa que é resolvida após a iteração sobre todas as chaves armazenadas.
165
- */
166
- forEach(iteratorCallback: (value: any, key: string, iterationNumber: number) => any): Promise<void>;
167
- /**
168
- * Retorna o valor armazenado em uma determinada chave.
169
- *
170
- * @param {string} key Chave que identifica o item.
171
- * @param {boolean} lock Define se irá travar a leitura e a escrita da base de dados para não ser acessada de forma paralela.
172
- * Caso outra leitura/escrita já tenha sido iniciada, este método irá esperar o outro terminar para então começar.
173
- *
174
- * Padrão: `false`.
175
- *
176
- * > Esta definição só será válida se o outro acesso paralelo a este método também estiver com o parâmetro *lock* ativado.
177
- * @returns {Promise<any>} Promessa que é resolvida após o item ser buscado.
178
- */
179
- get(key: string, lock?: boolean): Promise<any>;
180
- /**
181
- * Retorna o nome do *driver* que está sendo usado para armazenar os dados, por exemplo: localStorage.
182
- *
183
- * @returns {string | null} Nome do *driver*.
184
- */
185
- getDriver(): string;
186
- /**
187
- * Retorna o primeiro item de uma lista para uma determinada chave.
188
- *
189
- * @param {string} key Chave da lista.
190
- * @returns {Promise<any>} Promessa que é resolvida após o primeiro item ser encontrado.
191
- */
192
- getFirstItem(key: string): Promise<any>;
193
- /**
194
- * Remove o primeiro item de uma lista a partir da chave.
195
- *
196
- * @param {string} key Chave da lista que será removido o primeiro item.
197
- * @returns {Promise<any>} Promessa que é resolvida após o primeiro item da lista ser removido.
198
- */
199
- getItemAndRemove(key: string): Promise<any>;
200
- /**
201
- * Busca o primeiro objeto encontrado dentro de uma lista pelo do valor de um campo.
202
- *
203
- * Por exemplo:
204
- *
205
- * ``` typescript
206
- * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];
207
- *
208
- * this.poStorageService.set('clientKey', clients).then(() => {});
209
- *
210
- * ...
211
- *
212
- * this.poStorageService.getItemByField('clientKey', 'name', 'Marie').then(client => {
213
- * // Resultado do console.log: { name: 'Marie', age: 23 }
214
- * console.log(client);
215
- * });
216
- * ```
217
- *
218
- * @param {string} key Chave da lista.
219
- * @param {string} fieldName O campo a ser filtrado.
220
- * @param {any} fieldValue O valor do campo.
221
- * @returns {Promise<any>} Promessa que é resolvida com o item que foi encontrado.
222
- */
223
- getItemByField(key: string, fieldName: string, fieldValue: any): Promise<any>;
224
- /**
225
- * Lista com todas as chaves armazenadas.
226
- *
227
- * @returns {Promise<Array<string>>} Promessa que é resolvida com todas as chaves armazenadas.
228
- */
229
- keys(): Promise<Array<string>>;
230
- /**
231
- * Quantidade de chaves armazenadas.
232
- *
233
- * @returns {Promise<number>} Promessa que é resolvida com o número de chaves armazenadas.
234
- */
235
- length(): Promise<number>;
236
- /**
237
- * Utilizado para gerenciar o bloqueio e desbloqueio de recursos no `PoStorageService`.
238
- * Aguardando a liberação da utilização dos recursos que participam deste comportamento e posteriormente envolve o recurso
239
- * passado como parâmetro em um comportamento de bloqueio e desbloqueio.
240
- *
241
- * Este método se comporta igual a utilização em conjunta dos métodos: `PoStorageService.requestIdlePromise()`,
242
- * `PoStorageService.lock()` e `PoStorageService.unlook()`.
243
- *
244
- * Veja mais no método: [`PoStorage.requestIdlePromise()`](documentation/po-storage#request-idle-promise).
245
- *
246
- * @param {Function} limitedResource Função que será envolvida no comportamento de bloqueio e desbloqueio.
247
- */
248
- limitedCallWrap(limitedResource: Function): Promise<any>;
249
- /**
250
- * Incrementa um valor na fila de bloqueio do `PoStorageService`. Utilizado juntamente com o método `unlock` para poder
251
- * controlar a execução de uma determinada tarefa com o `PoStorage.requestIdlePromise()`.
252
- *
253
- * Veja mais no método: [`PoStorage.requestIdlePromise()`](documentation/po-storage#request-idle-promise).
254
- */
255
- lock(): void;
256
- /**
257
- * Determina se o processo de inicialização do *driver* assíncrono foi concluído.
258
- *
259
- * @returns {Promise<LocalForage>} Promessa que é resolvida quando o processo de inicialização do *driver* assíncrono
260
- * for concluído.
261
- */
262
- ready(): Promise<LocalForage>;
263
- /**
264
- * Remove um valor associado a uma chave.
265
- *
266
- * @param {key} key Chave do valor que será removido.
267
- * @returns {Promise<any>} Promessa que é resolvida após o valor ser removido.
268
- */
269
- remove(key: string): Promise<any>;
270
- /**
271
- * Remove uma propriedade de um objeto armazenado.
272
- *
273
- * @param {string} key Chave do objeto armazenado.
274
- * @param {string} property Propriedade que será removida.
275
- *
276
- * @returns {Promise<any>} Promessa que é resolvida após a propriedade ser removida.
277
- */
278
- removeIndexFromObject(key: string, property: string): Promise<any>;
279
- /**
280
- * Remove um objeto de uma lista armazenada pelo valor de uma propriedade.
281
- *
282
- * Por exemplo:
283
- *
284
- * ``` typescript
285
- * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];
286
- *
287
- * this.poStorageService.set('clientKey', clients).then(() => {});
288
- *
289
- * ...
290
- *
291
- * this.poStorageService.removeItemFromArray('clientKey', 'name', 'Marie').then(() => {
292
- * // O objeto { name: 'Marie', age: 23 } foi removido da lista que está na chave 'clientKey'
293
- * });
294
- * ```
295
- *
296
- * @param {string} key Chave da lista que contém o item que será removido.
297
- * @param {string} field O campo a ser filtrado no item.
298
- * @param {string} value O valor do filtro.
299
- * @returns {Promise<any>} Promessa que é resolvida quando o objeto for removido da lista.
300
- */
301
- removeItemFromArray(key: string, field: string, value: any): Promise<any>;
302
- /**
303
- * <a id="request-idle-promise"></a>
304
- * Método que verifica se o acesso a base de dados configurada está liberado.
305
- *
306
- * Utilizado em conjunto com os métodos `lock()` e `unlock()` entre tarefas que não podem ser executadas de forma
307
- * paralela, para não causar inconsistências nos dados.
308
- *
309
- * Exemplo de utilização:
310
- *
311
- * ```
312
- * // Aguarda a liberação para continuar
313
- * await this.poStorage.requestIdlePromise();
314
- *
315
- * this.poStorage.lock();
316
- *
317
- * // Executa uma tarefa que irá ler e/ou escrever na base de dados configurada.
318
- *
319
- * this.poStorage.unlock();
320
- * ```
321
- *
322
- * > É importante sempre utilizá-lo antes de executar os métodos `lock()` e `unlock()` para garantir que a tarefa só
323
- * será executada caso o acesso esteja livre.
324
- *
325
- * @returns {Promise<any>} Promessa que é resolvida quando o acesso a base de dados configurada estiver liberado.
326
- */
327
- requestIdlePromise(): Promise<any>;
328
- /**
329
- * Grava um valor em uma determinada chave.
330
- *
331
- * @param {string} key Chave para o valor que será gravado.
332
- * @param {any} value Valor que será gravado.
333
- * @param {boolean} lock Define se irá travar a leitura e a escrita da base de dados para não ser acessada de forma paralela.
334
- * Caso outra leitura/escrita já tenha sido iniciada, este método irá esperar o outro terminar para então começar.
335
- *
336
- * Padrão: `false`.
337
- *
338
- * > Esta definição só será válida se o outro acesso paralelo a este método também estiver com o parâmetro *lock* ativado.
339
- * @returns {Promise<any>} Promessa que é resolvida após o valor ter sido gravado.
340
- */
341
- set(key: string, value: any, lock?: boolean): Promise<any>;
342
- /**
343
- * Atribui um valor a uma propriedade de um objeto armazenado pela chave.
344
- *
345
- * Por exemplo:
346
- *
347
- * ``` typescript
348
- * const clients = [ { name: 'Marie', age: 23 }, { name: 'Pether', age: 39 }];
349
- *
350
- * this.poStorageService.set('clientKey', clients).then(() => {});
351
- *
352
- * ...
353
- *
354
- * this.poStorageService.setIndexToObject('clientKey', 'name', 'Clare').then(() => {
355
- * // O objeto { name: 'Marie', age: 23 } passa a ser { name: 'Clare', age: 23 }
356
- * });
357
- * ```
358
- *
359
- * @param {string} key Chave do objeto.
360
- * @param {string} property Nome da propriedade do objeto.
361
- * @param {any} value Valor que será gravado na propriedade do objeto.
362
- */
363
- setIndexToObject(key: string, property: string, value: any): Promise<any>;
364
- /**
365
- * Decrementa um valor na fila de bloqueio. Utilizado juntamente com o método `lock` para poder
366
- * controlar a execução de uma determinada tarefa com o `PoStorage.requestIdlePromise()`.
367
- *
368
- * Veja mais no método: [`PoStorage.requestIdlePromise()`](documentation/po-storage#request-idle-promise).
369
- */
370
- unlock(): void;
371
- private getArrayOfStorage;
372
- private getImmutableItem;
373
- private defineLocalForageDriver;
374
- private getDriverOrder;
375
- private getObjectOfStorage;
376
- private setDriver;
377
- private setStoragePromise;
378
- private getStorageInstance;
379
- static ɵfac: i0.ɵɵFactoryDeclaration<PoStorageService, never>;
380
- static ɵprov: i0.ɵɵInjectableDeclaration<PoStorageService>;
381
- }
Binary file
package/public-api.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from './lib/index';