@po-ui/ng-storage 21.0.0-rc.0 → 21.0.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.
package/README.md CHANGED
@@ -6,12 +6,12 @@ O **PO Storage** é uma biblioteca para aplicações Angular que fornece um serv
6
6
 
7
7
  Instalando com npm:
8
8
  ```
9
- npm install @po-ui/ng-storage@next
9
+ npm install @po-ui/ng-storage
10
10
  ```
11
11
 
12
12
  Caso prefira instalar com o yarn:
13
13
  ```
14
- yarn add @po-ui/ng-storage@next
14
+ yarn add @po-ui/ng-storage
15
15
  ```
16
16
 
17
17
  Para informações complementares sobre instalação, acesse **[documentação do PO Storage](https://po-ui.io/documentation/po-storage)**.
@@ -236,7 +236,7 @@ const PO_STORAGE_CONFIG_TOKEN = new InjectionToken('PO_STORAGE_CONFIG_TOKEN');
236
236
  * Para instalar o `po-storage` em sua aplicação execute o seguinte comando:
237
237
  *
238
238
  * ```shell
239
- * `ng add @po-ui/ng-storage@next`
239
+ * `ng add @po-ui/ng-storage`
240
240
  * ```
241
241
  * Será instalado o pacote `@po-ui/ng-storage` e também já importará `PoStorageModule` no módulo principal da sua aplicação, conforme abaixo:
242
242
  *
@@ -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@next`\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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"}
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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@po-ui/ng-storage",
3
- "version": "21.0.0-rc.0",
3
+ "version": "21.0.0",
4
4
  "description": "PO UI - Storage",
5
5
  "author": "PO UI",
6
6
  "license": "MIT",
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "schematics": "./schematics/collection.json",
13
13
  "dependencies": {
14
- "@po-ui/ng-schematics": "21.0.0-rc.0",
14
+ "@po-ui/ng-schematics": "21.0.0",
15
15
  "custom-idle-queue": "3.0.1",
16
16
  "localforage": "1.10.0",
17
17
  "lokijs": "1.5.12",
Binary file
@@ -87,5 +87,5 @@ Para testarmos o pacote, devemos incrementar a versão do mesmo e ter o npm regi
87
87
  Por fim, execute os comando abaixo no seu projeto Angular:
88
88
 
89
89
  ```
90
- > ng add @po-ui/ng-storage@next
90
+ > ng add @po-ui/ng-storage
91
91
  ```
@@ -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', '21.0.0-rc.0');
26
+ (0, package_config_1.addPackageToPackageJson)(tree, '@po-ui/ng-storage', '21.0.0');
27
27
  // install packages
28
28
  context.addTask(new tasks_1.NodePackageInstallTask());
29
29
  };
@@ -49,7 +49,7 @@ interface PoStorageConfig {
49
49
  * Para instalar o `po-storage` em sua aplicação execute o seguinte comando:
50
50
  *
51
51
  * ```shell
52
- * `ng add @po-ui/ng-storage@next`
52
+ * `ng add @po-ui/ng-storage`
53
53
  * ```
54
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
55
  *
Binary file