@po-ui/ng-storage 5.22.3 → 6.2.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 +16 -16
- package/{esm2015/lib/drivers/lokijs/po-loki-driver.js → esm2020/lib/drivers/lokijs/po-loki-driver.mjs} +209 -209
- package/{esm2015/lib/index.js → esm2020/lib/index.mjs} +3 -3
- package/esm2020/lib/po-storage.module.mjs +33 -0
- package/esm2020/lib/services/po-storage-config.interface.mjs +11 -0
- package/esm2020/lib/services/po-storage.service.mjs +520 -0
- package/esm2020/po-ui-ng-storage.mjs +5 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +2 -2
- package/fesm2015/{po-ui-ng-storage.js → po-ui-ng-storage.mjs} +786 -774
- package/fesm2015/po-ui-ng-storage.mjs.map +1 -0
- package/fesm2020/po-ui-ng-storage.mjs +764 -0
- package/fesm2020/po-ui-ng-storage.mjs.map +1 -0
- package/lib/drivers/lokijs/po-loki-driver.d.ts +30 -30
- package/lib/index.d.ts +3 -3
- package/lib/po-storage.module.d.ts +14 -10
- package/lib/services/po-storage-config.interface.d.ts +27 -27
- package/lib/services/po-storage.service.d.ts +381 -378
- package/package.json +28 -13
- package/po-ui-ng-storage-6.2.0.tgz +0 -0
- package/po-ui-ng-storage.d.ts +5 -5
- package/public-api.d.ts +1 -1
- package/schematics/README.md +91 -91
- package/schematics/collection.json +10 -10
- package/schematics/ng-add/index.d.ts +7 -7
- package/schematics/ng-add/index.js +28 -28
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/ng-add/index.spec.d.ts +1 -1
- package/schematics/ng-add/index.spec.js +50 -50
- package/schematics/ng-add/index.spec.js.map +1 -1
- package/schematics/ng-add/schema.json +6 -6
- package/bundles/po-ui-ng-storage.umd.js +0 -1279
- package/bundles/po-ui-ng-storage.umd.js.map +0 -1
- package/esm2015/lib/po-storage.module.js +0 -29
- package/esm2015/lib/services/po-storage-config.interface.js +0 -11
- package/esm2015/lib/services/po-storage.service.js +0 -546
- package/esm2015/po-ui-ng-storage.js +0 -6
- package/fesm2015/po-ui-ng-storage.js.map +0 -1
- package/po-ui-ng-storage-5.22.3.tgz +0 -0
- package/po-ui-ng-storage.metadata.json +0 -1
package/README.md
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
# PO Storage
|
|
2
|
-
|
|
3
|
-
O **PO Storage** é uma biblioteca para aplicações Angular que fornece um serviço para armazenamento de dados no dispositivo local, sendo semelhante ao funcionamento do IonicStorage. É possível utilizar os drivers [Websql](https://dev.w3.org/html5/webdatabase/), [Indexeddb](https://www.w3.org/TR/IndexedDB/), [LocalStorage](https://html.spec.whatwg.org/multipage/webstorage.html) e também [LokiJS](https://github.com/techfort/LokiJS/wiki).
|
|
4
|
-
|
|
5
|
-
#### Instalação
|
|
6
|
-
|
|
7
|
-
Instalando com npm:
|
|
8
|
-
```
|
|
9
|
-
npm install @po-ui/ng-storage
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
Caso prefira instalar com o yarn:
|
|
13
|
-
```
|
|
14
|
-
yarn add @po-ui/ng-storage
|
|
15
|
-
```
|
|
16
|
-
|
|
1
|
+
# PO Storage
|
|
2
|
+
|
|
3
|
+
O **PO Storage** é uma biblioteca para aplicações Angular que fornece um serviço para armazenamento de dados no dispositivo local, sendo semelhante ao funcionamento do IonicStorage. É possível utilizar os drivers [Websql](https://dev.w3.org/html5/webdatabase/), [Indexeddb](https://www.w3.org/TR/IndexedDB/), [LocalStorage](https://html.spec.whatwg.org/multipage/webstorage.html) e também [LokiJS](https://github.com/techfort/LokiJS/wiki).
|
|
4
|
+
|
|
5
|
+
#### Instalação
|
|
6
|
+
|
|
7
|
+
Instalando com npm:
|
|
8
|
+
```
|
|
9
|
+
npm install @po-ui/ng-storage
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Caso prefira instalar com o yarn:
|
|
13
|
+
```
|
|
14
|
+
yarn add @po-ui/ng-storage
|
|
15
|
+
```
|
|
16
|
+
|
|
17
17
|
Para informações complementares sobre instalação, acesse **[documentação do PO Storage](https://po-ui.io/documentation/po-storage)**.
|
|
@@ -1,209 +1,209 @@
|
|
|
1
|
-
import Loki from 'lokijs';
|
|
2
|
-
import LokiIndexedAdapter from 'lokijs/src/loki-indexed-adapter';
|
|
3
|
-
const keyField = 'key';
|
|
4
|
-
export class PoLokiDriver {
|
|
5
|
-
constructor() {
|
|
6
|
-
const self = this;
|
|
7
|
-
this.driver = {
|
|
8
|
-
_driver: 'lokijs',
|
|
9
|
-
_initStorage: function (options) {
|
|
10
|
-
return self.initStorage(options);
|
|
11
|
-
},
|
|
12
|
-
clear: function () {
|
|
13
|
-
return self.clear(this);
|
|
14
|
-
},
|
|
15
|
-
getItem: function (key) {
|
|
16
|
-
return self.getItem(this, key);
|
|
17
|
-
},
|
|
18
|
-
iterate: function (iteratorCallback) {
|
|
19
|
-
return self.iterate(this, iteratorCallback);
|
|
20
|
-
},
|
|
21
|
-
key: function (n) {
|
|
22
|
-
return self.key(this, n);
|
|
23
|
-
},
|
|
24
|
-
keys: function () {
|
|
25
|
-
return self.keys(this);
|
|
26
|
-
},
|
|
27
|
-
length: function () {
|
|
28
|
-
return self.length(this);
|
|
29
|
-
},
|
|
30
|
-
removeItem: function (key) {
|
|
31
|
-
return self.removeItem(this, key);
|
|
32
|
-
},
|
|
33
|
-
setItem: function (key, value) {
|
|
34
|
-
return self.setItem(this, key, value);
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
// Funções de iteração
|
|
39
|
-
clear(localforage) {
|
|
40
|
-
return new Promise(resolve => {
|
|
41
|
-
localforage.ready().then(() => {
|
|
42
|
-
if (this.hasCollectionAndDataInCollection()) {
|
|
43
|
-
this.clearCollection();
|
|
44
|
-
}
|
|
45
|
-
resolve(null);
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
getItem(localforage, key) {
|
|
50
|
-
return new Promise(resolve => {
|
|
51
|
-
localforage.ready().then(() => {
|
|
52
|
-
if (this.hasCollectionAndDataInCollection()) {
|
|
53
|
-
const item = this.getItemInCollectionBy(keyField, key);
|
|
54
|
-
if (item) {
|
|
55
|
-
resolve(item.value);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
resolve(null);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
initStorage(options) {
|
|
63
|
-
return new Promise(resolve => {
|
|
64
|
-
try {
|
|
65
|
-
this.configureLokiStorage(options, this.databaseInitialize.bind(this, options, resolve));
|
|
66
|
-
}
|
|
67
|
-
catch
|
|
68
|
-
throw new Error(`Cannot configure Loki Storage`);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
iterate(localforage, iteratorCallback) {
|
|
73
|
-
return new Promise(resolve => {
|
|
74
|
-
localforage.ready().then(() => {
|
|
75
|
-
if (this.hasCollectionAndDataInCollection()) {
|
|
76
|
-
this.iterateWithDataItem(iteratorCallback);
|
|
77
|
-
}
|
|
78
|
-
resolve(null);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
key(localforage, n) {
|
|
83
|
-
return new Promise(resolve => {
|
|
84
|
-
localforage.ready().then(() => {
|
|
85
|
-
if (this.hasCollection()) {
|
|
86
|
-
const map = this.getLokiMap();
|
|
87
|
-
resolve(map[n]);
|
|
88
|
-
}
|
|
89
|
-
resolve(null);
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
keys(localforage) {
|
|
94
|
-
return new Promise(resolve => {
|
|
95
|
-
localforage.ready().then(() => {
|
|
96
|
-
if (this.hasCollection()) {
|
|
97
|
-
const keys = [];
|
|
98
|
-
const map = this.getLokiMap();
|
|
99
|
-
for (const key of Object.keys(map)) {
|
|
100
|
-
keys.push(map[key]);
|
|
101
|
-
}
|
|
102
|
-
resolve(keys);
|
|
103
|
-
}
|
|
104
|
-
resolve(null);
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
length(localforage) {
|
|
109
|
-
return new Promise(resolve => {
|
|
110
|
-
localforage.ready().then(() => {
|
|
111
|
-
if (this.hasCollection()) {
|
|
112
|
-
resolve(this.getNumberItensInCollection());
|
|
113
|
-
}
|
|
114
|
-
resolve(0);
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
removeItem(localforage, key) {
|
|
119
|
-
return new Promise(resolve => {
|
|
120
|
-
localforage.ready().then(() => {
|
|
121
|
-
if (this.hasCollection()) {
|
|
122
|
-
this.findAndRemoveItem(key);
|
|
123
|
-
}
|
|
124
|
-
resolve(null);
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
setItem(localforage, key, value) {
|
|
129
|
-
return new Promise(resolve => {
|
|
130
|
-
localforage.ready().then(() => {
|
|
131
|
-
if (this.hasCollection()) {
|
|
132
|
-
let item;
|
|
133
|
-
if (this.hasDataInCollection()) {
|
|
134
|
-
item = this.getItemInCollectionBy(keyField, key);
|
|
135
|
-
}
|
|
136
|
-
this.insertOrUpdate(item, value, key);
|
|
137
|
-
}
|
|
138
|
-
resolve(value);
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
// Funções de acesso ao storage
|
|
143
|
-
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
144
|
-
getDriver() {
|
|
145
|
-
return this.driver;
|
|
146
|
-
}
|
|
147
|
-
addCollection(options) {
|
|
148
|
-
return this.db.addCollection(options.storeName, { unique: [keyField] });
|
|
149
|
-
}
|
|
150
|
-
clearCollection() {
|
|
151
|
-
this.collection.clear({ removeIndices: false });
|
|
152
|
-
}
|
|
153
|
-
configureLokiStorage(options, databaseInitialize) {
|
|
154
|
-
const idbAdapter = new LokiIndexedAdapter();
|
|
155
|
-
this.db = new Loki(options.name, {
|
|
156
|
-
adapter: idbAdapter,
|
|
157
|
-
autoload: true,
|
|
158
|
-
autoloadCallback: databaseInitialize,
|
|
159
|
-
autosave: true,
|
|
160
|
-
autosaveInterval: 4000
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
findAndRemoveItem(key) {
|
|
164
|
-
this.collection.findAndRemove({ [keyField]: key });
|
|
165
|
-
}
|
|
166
|
-
getCollection(options) {
|
|
167
|
-
return this.db.getCollection(options.storeName);
|
|
168
|
-
}
|
|
169
|
-
databaseInitialize(options, resolve) {
|
|
170
|
-
this.collection = this.getCollection(options);
|
|
171
|
-
if (!this.hasCollection()) {
|
|
172
|
-
this.collection = this.addCollection(options);
|
|
173
|
-
}
|
|
174
|
-
resolve();
|
|
175
|
-
}
|
|
176
|
-
getItemInCollectionBy(fieldKey, key) {
|
|
177
|
-
return this.collection.by(fieldKey, key);
|
|
178
|
-
}
|
|
179
|
-
getLokiMap() {
|
|
180
|
-
return this.collection.constraints.unique[keyField].lokiMap;
|
|
181
|
-
}
|
|
182
|
-
hasCollection() {
|
|
183
|
-
return this.collection;
|
|
184
|
-
}
|
|
185
|
-
hasDataInCollection() {
|
|
186
|
-
return this.collection.data && this.collection.data.length;
|
|
187
|
-
}
|
|
188
|
-
hasCollectionAndDataInCollection() {
|
|
189
|
-
return this.hasCollection() && this.hasDataInCollection();
|
|
190
|
-
}
|
|
191
|
-
insertOrUpdate(item, value, key) {
|
|
192
|
-
if (item) {
|
|
193
|
-
item.value = value;
|
|
194
|
-
this.collection.update(item);
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
this.collection.insert({ [keyField]: key, value: value });
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
iterateWithDataItem(iteratorcallback) {
|
|
201
|
-
this.collection.data.forEach(element => {
|
|
202
|
-
iteratorcallback(element.value, element[keyField], element.$loki);
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
getNumberItensInCollection() {
|
|
206
|
-
return this.collection.count();
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbG9raS1kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdG9yYWdlL3NyYy9saWIvZHJpdmVycy9sb2tpanMvcG8tbG9raS1kcml2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sUUFBUSxDQUFDO0FBQzFCLE9BQU8sa0JBQWtCLE1BQU0saUNBQWlDLENBQUM7QUFFakUsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBRXZCLE1BQU0sT0FBTyxZQUFZO0lBS3ZCO1FBQ0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixPQUFPLEVBQUUsUUFBUTtZQUNqQixZQUFZLEVBQUUsVUFBVSxPQUFZO2dCQUNsQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUNELEtBQUssRUFBRTtnQkFDTCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsQ0FBQztZQUNELE9BQU8sRUFBRSxVQUFVLEdBQVE7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUNELE9BQU8sRUFBRSxVQUFVLGdCQUFxQjtnQkFDdEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFDRCxHQUFHLEVBQUUsVUFBVSxDQUFNO2dCQUNuQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNCLENBQUM7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLENBQUM7WUFDRCxNQUFNLEVBQUU7Z0JBQ04s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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2tpIGZyb20gJ2xva2lqcyc7XHJcbmltcG9ydCBMb2tpSW5kZXhlZEFkYXB0ZXIgZnJvbSAnbG9raWpzL3NyYy9sb2tpLWluZGV4ZWQtYWRhcHRlcic7XHJcblxyXG5jb25zdCBrZXlGaWVsZCA9ICdrZXknO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvTG9raURyaXZlciB7XHJcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uO1xyXG4gIHByaXZhdGUgZGI6IGFueTtcclxuICBwcml2YXRlIGRyaXZlcjogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgdGhpcy5kcml2ZXIgPSB7XHJcbiAgICAgIF9kcml2ZXI6ICdsb2tpanMnLFxyXG4gICAgICBfaW5pdFN0b3JhZ2U6IGZ1bmN0aW9uIChvcHRpb25zOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gc2VsZi5pbml0U3RvcmFnZShvcHRpb25zKTtcclxuICAgICAgfSxcclxuICAgICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gc2VsZi5jbGVhcih0aGlzKTtcclxuICAgICAgfSxcclxuICAgICAgZ2V0SXRlbTogZnVuY3Rpb24gKGtleTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0SXRlbSh0aGlzLCBrZXkpO1xyXG4gICAgICB9LFxyXG4gICAgICBpdGVyYXRlOiBmdW5jdGlvbiAoaXRlcmF0b3JDYWxsYmFjazogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHNlbGYuaXRlcmF0ZSh0aGlzLCBpdGVyYXRvckNhbGxiYWNrKTtcclxuICAgICAgfSxcclxuICAgICAga2V5OiBmdW5jdGlvbiAobjogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHNlbGYua2V5KHRoaXMsIG4pO1xyXG4gICAgICB9LFxyXG4gICAgICBrZXlzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHNlbGYua2V5cyh0aGlzKTtcclxuICAgICAgfSxcclxuICAgICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHNlbGYubGVuZ3RoKHRoaXMpO1xyXG4gICAgICB9LFxyXG4gICAgICByZW1vdmVJdGVtOiBmdW5jdGlvbiAoa2V5OiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gc2VsZi5yZW1vdmVJdGVtKHRoaXMsIGtleSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHNldEl0ZW06IGZ1bmN0aW9uIChrZXk6IGFueSwgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBzZWxmLnNldEl0ZW0odGhpcywga2V5LCB2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyBGdW7Dp8O1ZXMgZGUgaXRlcmHDp8Ojb1xyXG5cclxuICBwcml2YXRlIGNsZWFyKGxvY2FsZm9yYWdlOiBhbnkpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgbG9jYWxmb3JhZ2UucmVhZHkoKS50aGVuKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5oYXNDb2xsZWN0aW9uQW5kRGF0YUluQ29sbGVjdGlvbigpKSB7XHJcbiAgICAgICAgICB0aGlzLmNsZWFyQ29sbGVjdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXNvbHZlKG51bGwpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJdGVtKGxvY2FsZm9yYWdlOiBhbnksIGtleTogYW55KSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIGxvY2FsZm9yYWdlLnJlYWR5KCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29sbGVjdGlvbkFuZERhdGFJbkNvbGxlY3Rpb24oKSkge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbUluQ29sbGVjdGlvbkJ5KGtleUZpZWxkLCBrZXkpO1xyXG4gICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShpdGVtLnZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFN0b3JhZ2Uob3B0aW9uczogYW55KSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmVMb2tpU3RvcmFnZShvcHRpb25zLCB0aGlzLmRhdGFiYXNlSW5pdGlhbGl6ZS5iaW5kKHRoaXMsIG9wdGlvbnMsIHJlc29sdmUpKTtcclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29uZmlndXJlIExva2kgU3RvcmFnZWApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXRlcmF0ZShsb2NhbGZvcmFnZTogYW55LCBpdGVyYXRvckNhbGxiYWNrOiBGdW5jdGlvbikge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICBsb2NhbGZvcmFnZS5yZWFkeSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NvbGxlY3Rpb25BbmREYXRhSW5Db2xsZWN0aW9uKCkpIHtcclxuICAgICAgICAgIHRoaXMuaXRlcmF0ZVdpdGhEYXRhSXRlbShpdGVyYXRvckNhbGxiYWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUga2V5KGxvY2FsZm9yYWdlOiBhbnksIG46IHN0cmluZyB8IG51bWJlcikge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICBsb2NhbGZvcmFnZS5yZWFkeSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NvbGxlY3Rpb24oKSkge1xyXG4gICAgICAgICAgY29uc3QgbWFwID0gdGhpcy5nZXRMb2tpTWFwKCk7XHJcbiAgICAgICAgICByZXNvbHZlKG1hcFtuXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc29sdmUobnVsbCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGtleXMobG9jYWxmb3JhZ2U6IGFueSkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICBsb2NhbGZvcmFnZS5yZWFkeSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NvbGxlY3Rpb24oKSkge1xyXG4gICAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xyXG4gICAgICAgICAgY29uc3QgbWFwID0gdGhpcy5nZXRMb2tpTWFwKCk7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtYXApKSB7XHJcbiAgICAgICAgICAgIGtleXMucHVzaChtYXBba2V5XSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXNvbHZlKGtleXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXNvbHZlKG51bGwpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsZW5ndGgobG9jYWxmb3JhZ2U6IGFueSkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICBsb2NhbGZvcmFnZS5yZWFkeSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NvbGxlY3Rpb24oKSkge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLmdldE51bWJlckl0ZW5zSW5Db2xsZWN0aW9uKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXNvbHZlKDApO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVJdGVtKGxvY2FsZm9yYWdlOiBhbnksIGtleTogYW55KSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIGxvY2FsZm9yYWdlLnJlYWR5KCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29sbGVjdGlvbigpKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbmRBbmRSZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc29sdmUobnVsbCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEl0ZW0obG9jYWxmb3JhZ2U6IGFueSwga2V5OiBhbnksIHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgbG9jYWxmb3JhZ2UucmVhZHkoKS50aGVuKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5oYXNDb2xsZWN0aW9uKCkpIHtcclxuICAgICAgICAgIGxldCBpdGVtOiBhbnk7XHJcbiAgICAgICAgICBpZiAodGhpcy5oYXNEYXRhSW5Db2xsZWN0aW9uKCkpIHtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuZ2V0SXRlbUluQ29sbGVjdGlvbkJ5KGtleUZpZWxkLCBrZXkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5pbnNlcnRPclVwZGF0ZShpdGVtLCB2YWx1ZSwga2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBGdW7Dp8O1ZXMgZGUgYWNlc3NvIGFvIHN0b3JhZ2VcclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcclxuICBnZXREcml2ZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kcml2ZXI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZENvbGxlY3Rpb24ob3B0aW9uczogYW55KTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmRiLmFkZENvbGxlY3Rpb24ob3B0aW9ucy5zdG9yZU5hbWUsIHsgdW5pcXVlOiBba2V5RmllbGRdIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhckNvbGxlY3Rpb24oKSB7XHJcbiAgICB0aGlzLmNvbGxlY3Rpb24uY2xlYXIoeyByZW1vdmVJbmRpY2VzOiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uZmlndXJlTG9raVN0b3JhZ2Uob3B0aW9uczogYW55LCBkYXRhYmFzZUluaXRpYWxpemU6IGFueSkge1xyXG4gICAgY29uc3QgaWRiQWRhcHRlciA9IG5ldyBMb2tpSW5kZXhlZEFkYXB0ZXIoKTtcclxuICAgIHRoaXMuZGIgPSBuZXcgTG9raShvcHRpb25zLm5hbWUsIHtcclxuICAgICAgYWRhcHRlcjogaWRiQWRhcHRlcixcclxuICAgICAgYXV0b2xvYWQ6IHRydWUsXHJcbiAgICAgIGF1dG9sb2FkQ2FsbGJhY2s6IGRhdGFiYXNlSW5pdGlhbGl6ZSxcclxuICAgICAgYXV0b3NhdmU6IHRydWUsXHJcbiAgICAgIGF1dG9zYXZlSW50ZXJ2YWw6IDQwMDBcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kQW5kUmVtb3ZlSXRlbShrZXk6IGFueSkge1xyXG4gICAgdGhpcy5jb2xsZWN0aW9uLmZpbmRBbmRSZW1vdmUoeyBba2V5RmllbGRdOiBrZXkgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvbGxlY3Rpb24ob3B0aW9uczogYW55KTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmRiLmdldENvbGxlY3Rpb24ob3B0aW9ucy5zdG9yZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkYXRhYmFzZUluaXRpYWxpemUob3B0aW9uczogYW55LCByZXNvbHZlOiBGdW5jdGlvbikge1xyXG4gICAgdGhpcy5jb2xsZWN0aW9uID0gdGhpcy5nZXRDb2xsZWN0aW9uKG9wdGlvbnMpO1xyXG4gICAgaWYgKCF0aGlzLmhhc0NvbGxlY3Rpb24oKSkge1xyXG4gICAgICB0aGlzLmNvbGxlY3Rpb24gPSB0aGlzLmFkZENvbGxlY3Rpb24ob3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICByZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEl0ZW1JbkNvbGxlY3Rpb25CeShmaWVsZEtleTogc3RyaW5nLCBrZXk6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbi5ieShmaWVsZEtleSwga2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TG9raU1hcCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24uY29uc3RyYWludHMudW5pcXVlW2tleUZpZWxkXS5sb2tpTWFwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNDb2xsZWN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzRGF0YUluQ29sbGVjdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24uZGF0YSAmJiB0aGlzLmNvbGxlY3Rpb24uZGF0YS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc0NvbGxlY3Rpb25BbmREYXRhSW5Db2xsZWN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzQ29sbGVjdGlvbigpICYmIHRoaXMuaGFzRGF0YUluQ29sbGVjdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRPclVwZGF0ZShpdGVtOiBhbnksIHZhbHVlOiBhbnksIGtleTogYW55KSB7XHJcbiAgICBpZiAoaXRlbSkge1xyXG4gICAgICBpdGVtLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuY29sbGVjdGlvbi51cGRhdGUoaXRlbSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbGxlY3Rpb24uaW5zZXJ0KHsgW2tleUZpZWxkXToga2V5LCB2YWx1ZTogdmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGl0ZXJhdGVXaXRoRGF0YUl0ZW0oaXRlcmF0b3JjYWxsYmFjazogRnVuY3Rpb24pIHtcclxuICAgIHRoaXMuY29sbGVjdGlvbi5kYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGl0ZXJhdG9yY2FsbGJhY2soZWxlbWVudC52YWx1ZSwgZWxlbWVudFtrZXlGaWVsZF0sIGVsZW1lbnQuJGxva2kpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE51bWJlckl0ZW5zSW5Db2xsZWN0aW9uKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uLmNvdW50KCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1
|
+
import Loki from 'lokijs';
|
|
2
|
+
import LokiIndexedAdapter from 'lokijs/src/loki-indexed-adapter';
|
|
3
|
+
const keyField = 'key';
|
|
4
|
+
export class PoLokiDriver {
|
|
5
|
+
constructor() {
|
|
6
|
+
const self = this;
|
|
7
|
+
this.driver = {
|
|
8
|
+
_driver: 'lokijs',
|
|
9
|
+
_initStorage: function (options) {
|
|
10
|
+
return self.initStorage(options);
|
|
11
|
+
},
|
|
12
|
+
clear: function () {
|
|
13
|
+
return self.clear(this);
|
|
14
|
+
},
|
|
15
|
+
getItem: function (key) {
|
|
16
|
+
return self.getItem(this, key);
|
|
17
|
+
},
|
|
18
|
+
iterate: function (iteratorCallback) {
|
|
19
|
+
return self.iterate(this, iteratorCallback);
|
|
20
|
+
},
|
|
21
|
+
key: function (n) {
|
|
22
|
+
return self.key(this, n);
|
|
23
|
+
},
|
|
24
|
+
keys: function () {
|
|
25
|
+
return self.keys(this);
|
|
26
|
+
},
|
|
27
|
+
length: function () {
|
|
28
|
+
return self.length(this);
|
|
29
|
+
},
|
|
30
|
+
removeItem: function (key) {
|
|
31
|
+
return self.removeItem(this, key);
|
|
32
|
+
},
|
|
33
|
+
setItem: function (key, value) {
|
|
34
|
+
return self.setItem(this, key, value);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Funções de iteração
|
|
39
|
+
clear(localforage) {
|
|
40
|
+
return new Promise(resolve => {
|
|
41
|
+
localforage.ready().then(() => {
|
|
42
|
+
if (this.hasCollectionAndDataInCollection()) {
|
|
43
|
+
this.clearCollection();
|
|
44
|
+
}
|
|
45
|
+
resolve(null);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
getItem(localforage, key) {
|
|
50
|
+
return new Promise(resolve => {
|
|
51
|
+
localforage.ready().then(() => {
|
|
52
|
+
if (this.hasCollectionAndDataInCollection()) {
|
|
53
|
+
const item = this.getItemInCollectionBy(keyField, key);
|
|
54
|
+
if (item) {
|
|
55
|
+
resolve(item.value);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
resolve(null);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
initStorage(options) {
|
|
63
|
+
return new Promise(resolve => {
|
|
64
|
+
try {
|
|
65
|
+
this.configureLokiStorage(options, this.databaseInitialize.bind(this, options, resolve));
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
throw new Error(`Cannot configure Loki Storage`);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
iterate(localforage, iteratorCallback) {
|
|
73
|
+
return new Promise(resolve => {
|
|
74
|
+
localforage.ready().then(() => {
|
|
75
|
+
if (this.hasCollectionAndDataInCollection()) {
|
|
76
|
+
this.iterateWithDataItem(iteratorCallback);
|
|
77
|
+
}
|
|
78
|
+
resolve(null);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
key(localforage, n) {
|
|
83
|
+
return new Promise(resolve => {
|
|
84
|
+
localforage.ready().then(() => {
|
|
85
|
+
if (this.hasCollection()) {
|
|
86
|
+
const map = this.getLokiMap();
|
|
87
|
+
resolve(map[n]);
|
|
88
|
+
}
|
|
89
|
+
resolve(null);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
keys(localforage) {
|
|
94
|
+
return new Promise(resolve => {
|
|
95
|
+
localforage.ready().then(() => {
|
|
96
|
+
if (this.hasCollection()) {
|
|
97
|
+
const keys = [];
|
|
98
|
+
const map = this.getLokiMap();
|
|
99
|
+
for (const key of Object.keys(map)) {
|
|
100
|
+
keys.push(map[key]);
|
|
101
|
+
}
|
|
102
|
+
resolve(keys);
|
|
103
|
+
}
|
|
104
|
+
resolve(null);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
length(localforage) {
|
|
109
|
+
return new Promise(resolve => {
|
|
110
|
+
localforage.ready().then(() => {
|
|
111
|
+
if (this.hasCollection()) {
|
|
112
|
+
resolve(this.getNumberItensInCollection());
|
|
113
|
+
}
|
|
114
|
+
resolve(0);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
removeItem(localforage, key) {
|
|
119
|
+
return new Promise(resolve => {
|
|
120
|
+
localforage.ready().then(() => {
|
|
121
|
+
if (this.hasCollection()) {
|
|
122
|
+
this.findAndRemoveItem(key);
|
|
123
|
+
}
|
|
124
|
+
resolve(null);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
setItem(localforage, key, value) {
|
|
129
|
+
return new Promise(resolve => {
|
|
130
|
+
localforage.ready().then(() => {
|
|
131
|
+
if (this.hasCollection()) {
|
|
132
|
+
let item;
|
|
133
|
+
if (this.hasDataInCollection()) {
|
|
134
|
+
item = this.getItemInCollectionBy(keyField, key);
|
|
135
|
+
}
|
|
136
|
+
this.insertOrUpdate(item, value, key);
|
|
137
|
+
}
|
|
138
|
+
resolve(value);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
// Funções de acesso ao storage
|
|
143
|
+
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
144
|
+
getDriver() {
|
|
145
|
+
return this.driver;
|
|
146
|
+
}
|
|
147
|
+
addCollection(options) {
|
|
148
|
+
return this.db.addCollection(options.storeName, { unique: [keyField] });
|
|
149
|
+
}
|
|
150
|
+
clearCollection() {
|
|
151
|
+
this.collection.clear({ removeIndices: false });
|
|
152
|
+
}
|
|
153
|
+
configureLokiStorage(options, databaseInitialize) {
|
|
154
|
+
const idbAdapter = new LokiIndexedAdapter();
|
|
155
|
+
this.db = new Loki(options.name, {
|
|
156
|
+
adapter: idbAdapter,
|
|
157
|
+
autoload: true,
|
|
158
|
+
autoloadCallback: databaseInitialize,
|
|
159
|
+
autosave: true,
|
|
160
|
+
autosaveInterval: 4000
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
findAndRemoveItem(key) {
|
|
164
|
+
this.collection.findAndRemove({ [keyField]: key });
|
|
165
|
+
}
|
|
166
|
+
getCollection(options) {
|
|
167
|
+
return this.db.getCollection(options.storeName);
|
|
168
|
+
}
|
|
169
|
+
databaseInitialize(options, resolve) {
|
|
170
|
+
this.collection = this.getCollection(options);
|
|
171
|
+
if (!this.hasCollection()) {
|
|
172
|
+
this.collection = this.addCollection(options);
|
|
173
|
+
}
|
|
174
|
+
resolve();
|
|
175
|
+
}
|
|
176
|
+
getItemInCollectionBy(fieldKey, key) {
|
|
177
|
+
return this.collection.by(fieldKey, key);
|
|
178
|
+
}
|
|
179
|
+
getLokiMap() {
|
|
180
|
+
return this.collection.constraints.unique[keyField].lokiMap;
|
|
181
|
+
}
|
|
182
|
+
hasCollection() {
|
|
183
|
+
return this.collection;
|
|
184
|
+
}
|
|
185
|
+
hasDataInCollection() {
|
|
186
|
+
return this.collection.data && this.collection.data.length;
|
|
187
|
+
}
|
|
188
|
+
hasCollectionAndDataInCollection() {
|
|
189
|
+
return this.hasCollection() && this.hasDataInCollection();
|
|
190
|
+
}
|
|
191
|
+
insertOrUpdate(item, value, key) {
|
|
192
|
+
if (item) {
|
|
193
|
+
item.value = value;
|
|
194
|
+
this.collection.update(item);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
this.collection.insert({ [keyField]: key, value: value });
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
iterateWithDataItem(iteratorcallback) {
|
|
201
|
+
this.collection.data.forEach(element => {
|
|
202
|
+
iteratorcallback(element.value, element[keyField], element.$loki);
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
getNumberItensInCollection() {
|
|
206
|
+
return this.collection.count();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbG9raS1kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdG9yYWdlL3NyYy9saWIvZHJpdmVycy9sb2tpanMvcG8tbG9raS1kcml2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sUUFBUSxDQUFDO0FBQzFCLE9BQU8sa0JBQWtCLE1BQU0saUNBQWlDLENBQUM7QUFFakUsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBRXZCLE1BQU0sT0FBTyxZQUFZO0lBS3ZCO1FBQ0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixPQUFPLEVBQUUsUUFBUTtZQUNqQixZQUFZLEVBQUUsVUFBVSxPQUFZO2dCQUNsQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUNELEtBQUssRUFBRTtnQkFDTCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsQ0FBQztZQUNELE9BQU8sRUFBRSxVQUFVLEdBQVE7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUNELE9BQU8sRUFBRSxVQUFVLGdCQUFxQjtnQkFDdEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFDRCxHQUFHLEVBQUUsVUFBVSxDQUFNO2dCQUNuQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNCLENBQUM7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLENBQUM7WUFDRCxNQUFNLEVBQUU7Z0JBQ04s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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2tpIGZyb20gJ2xva2lqcyc7XG5pbXBvcnQgTG9raUluZGV4ZWRBZGFwdGVyIGZyb20gJ2xva2lqcy9zcmMvbG9raS1pbmRleGVkLWFkYXB0ZXInO1xuXG5jb25zdCBrZXlGaWVsZCA9ICdrZXknO1xuXG5leHBvcnQgY2xhc3MgUG9Mb2tpRHJpdmVyIHtcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uO1xuICBwcml2YXRlIGRiOiBhbnk7XG4gIHByaXZhdGUgZHJpdmVyOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5kcml2ZXIgPSB7XG4gICAgICBfZHJpdmVyOiAnbG9raWpzJyxcbiAgICAgIF9pbml0U3RvcmFnZTogZnVuY3Rpb24gKG9wdGlvbnM6IGFueSkge1xuICAgICAgICByZXR1cm4gc2VsZi5pbml0U3RvcmFnZShvcHRpb25zKTtcbiAgICAgIH0sXG4gICAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gc2VsZi5jbGVhcih0aGlzKTtcbiAgICAgIH0sXG4gICAgICBnZXRJdGVtOiBmdW5jdGlvbiAoa2V5OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0SXRlbSh0aGlzLCBrZXkpO1xuICAgICAgfSxcbiAgICAgIGl0ZXJhdGU6IGZ1bmN0aW9uIChpdGVyYXRvckNhbGxiYWNrOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuaXRlcmF0ZSh0aGlzLCBpdGVyYXRvckNhbGxiYWNrKTtcbiAgICAgIH0sXG4gICAgICBrZXk6IGZ1bmN0aW9uIChuOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYua2V5KHRoaXMsIG4pO1xuICAgICAgfSxcbiAgICAgIGtleXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYua2V5cyh0aGlzKTtcbiAgICAgIH0sXG4gICAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYubGVuZ3RoKHRoaXMpO1xuICAgICAgfSxcbiAgICAgIHJlbW92ZUl0ZW06IGZ1bmN0aW9uIChrZXk6IGFueSkge1xuICAgICAgICByZXR1cm4gc2VsZi5yZW1vdmVJdGVtKHRoaXMsIGtleSk7XG4gICAgICB9LFxuICAgICAgc2V0SXRlbTogZnVuY3Rpb24gKGtleTogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiBzZWxmLnNldEl0ZW0odGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIEZ1bsOnw7VlcyBkZSBpdGVyYcOnw6NvXG5cbiAgcHJpdmF0ZSBjbGVhcihsb2NhbGZvcmFnZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgbG9jYWxmb3JhZ2UucmVhZHkoKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29sbGVjdGlvbkFuZERhdGFJbkNvbGxlY3Rpb24oKSkge1xuICAgICAgICAgIHRoaXMuY2xlYXJDb2xsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJdGVtKGxvY2FsZm9yYWdlOiBhbnksIGtleTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgbG9jYWxmb3JhZ2UucmVhZHkoKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29sbGVjdGlvbkFuZERhdGFJbkNvbGxlY3Rpb24oKSkge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW1JbkNvbGxlY3Rpb25CeShrZXlGaWVsZCwga2V5KTtcbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgcmVzb2x2ZShpdGVtLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U3RvcmFnZShvcHRpb25zOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZUxva2lTdG9yYWdlKG9wdGlvbnMsIHRoaXMuZGF0YWJhc2VJbml0aWFsaXplLmJpbmQodGhpcywgb3B0aW9ucywgcmVzb2x2ZSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbmZpZ3VyZSBMb2tpIFN0b3JhZ2VgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXRlcmF0ZShsb2NhbGZvcmFnZTogYW55LCBpdGVyYXRvckNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGxvY2FsZm9yYWdlLnJlYWR5KCkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbGxlY3Rpb25BbmREYXRhSW5Db2xsZWN0aW9uKCkpIHtcbiAgICAgICAgICB0aGlzLml0ZXJhdGVXaXRoRGF0YUl0ZW0oaXRlcmF0b3JDYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBrZXkobG9jYWxmb3JhZ2U6IGFueSwgbjogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgbG9jYWxmb3JhZ2UucmVhZHkoKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29sbGVjdGlvbigpKSB7XG4gICAgICAgICAgY29uc3QgbWFwID0gdGhpcy5nZXRMb2tpTWFwKCk7XG4gICAgICAgICAgcmVzb2x2ZShtYXBbbl0pO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUga2V5cyhsb2NhbGZvcmFnZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgbG9jYWxmb3JhZ2UucmVhZHkoKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29sbGVjdGlvbigpKSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuICAgICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuZ2V0TG9raU1hcCgpO1xuICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1hcCkpIHtcbiAgICAgICAgICAgIGtleXMucHVzaChtYXBba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmUoa2V5cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsZW5ndGgobG9jYWxmb3JhZ2U6IGFueSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGxvY2FsZm9yYWdlLnJlYWR5KCkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbGxlY3Rpb24oKSkge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5nZXROdW1iZXJJdGVuc0luQ29sbGVjdGlvbigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKDApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUl0ZW0obG9jYWxmb3JhZ2U6IGFueSwga2V5OiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBsb2NhbGZvcmFnZS5yZWFkeSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5oYXNDb2xsZWN0aW9uKCkpIHtcbiAgICAgICAgICB0aGlzLmZpbmRBbmRSZW1vdmVJdGVtKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJdGVtKGxvY2FsZm9yYWdlOiBhbnksIGtleTogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgbG9jYWxmb3JhZ2UucmVhZHkoKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29sbGVjdGlvbigpKSB7XG4gICAgICAgICAgbGV0IGl0ZW06IGFueTtcbiAgICAgICAgICBpZiAodGhpcy5oYXNEYXRhSW5Db2xsZWN0aW9uKCkpIHtcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLmdldEl0ZW1JbkNvbGxlY3Rpb25CeShrZXlGaWVsZCwga2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pbnNlcnRPclVwZGF0ZShpdGVtLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gRnVuw6fDtWVzIGRlIGFjZXNzbyBhbyBzdG9yYWdlXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcbiAgZ2V0RHJpdmVyKCkge1xuICAgIHJldHVybiB0aGlzLmRyaXZlcjtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29sbGVjdGlvbihvcHRpb25zOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmRiLmFkZENvbGxlY3Rpb24ob3B0aW9ucy5zdG9yZU5hbWUsIHsgdW5pcXVlOiBba2V5RmllbGRdIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckNvbGxlY3Rpb24oKSB7XG4gICAgdGhpcy5jb2xsZWN0aW9uLmNsZWFyKHsgcmVtb3ZlSW5kaWNlczogZmFsc2UgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZ3VyZUxva2lTdG9yYWdlKG9wdGlvbnM6IGFueSwgZGF0YWJhc2VJbml0aWFsaXplOiBhbnkpIHtcbiAgICBjb25zdCBpZGJBZGFwdGVyID0gbmV3IExva2lJbmRleGVkQWRhcHRlcigpO1xuICAgIHRoaXMuZGIgPSBuZXcgTG9raShvcHRpb25zLm5hbWUsIHtcbiAgICAgIGFkYXB0ZXI6IGlkYkFkYXB0ZXIsXG4gICAgICBhdXRvbG9hZDogdHJ1ZSxcbiAgICAgIGF1dG9sb2FkQ2FsbGJhY2s6IGRhdGFiYXNlSW5pdGlhbGl6ZSxcbiAgICAgIGF1dG9zYXZlOiB0cnVlLFxuICAgICAgYXV0b3NhdmVJbnRlcnZhbDogNDAwMFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQW5kUmVtb3ZlSXRlbShrZXk6IGFueSkge1xuICAgIHRoaXMuY29sbGVjdGlvbi5maW5kQW5kUmVtb3ZlKHsgW2tleUZpZWxkXToga2V5IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2xsZWN0aW9uKG9wdGlvbnM6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZGIuZ2V0Q29sbGVjdGlvbihvcHRpb25zLnN0b3JlTmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGRhdGFiYXNlSW5pdGlhbGl6ZShvcHRpb25zOiBhbnksIHJlc29sdmU6IEZ1bmN0aW9uKSB7XG4gICAgdGhpcy5jb2xsZWN0aW9uID0gdGhpcy5nZXRDb2xsZWN0aW9uKG9wdGlvbnMpO1xuICAgIGlmICghdGhpcy5oYXNDb2xsZWN0aW9uKCkpIHtcbiAgICAgIHRoaXMuY29sbGVjdGlvbiA9IHRoaXMuYWRkQ29sbGVjdGlvbihvcHRpb25zKTtcbiAgICB9XG4gICAgcmVzb2x2ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJdGVtSW5Db2xsZWN0aW9uQnkoZmllbGRLZXk6IHN0cmluZywga2V5OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uLmJ5KGZpZWxkS2V5LCBrZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2tpTWFwKCkge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24uY29uc3RyYWludHMudW5pcXVlW2tleUZpZWxkXS5sb2tpTWFwO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNDb2xsZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb247XG4gIH1cblxuICBwcml2YXRlIGhhc0RhdGFJbkNvbGxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbi5kYXRhICYmIHRoaXMuY29sbGVjdGlvbi5kYXRhLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzQ29sbGVjdGlvbkFuZERhdGFJbkNvbGxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQ29sbGVjdGlvbigpICYmIHRoaXMuaGFzRGF0YUluQ29sbGVjdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnRPclVwZGF0ZShpdGVtOiBhbnksIHZhbHVlOiBhbnksIGtleTogYW55KSB7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGl0ZW0udmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuY29sbGVjdGlvbi51cGRhdGUoaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sbGVjdGlvbi5pbnNlcnQoeyBba2V5RmllbGRdOiBrZXksIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGl0ZXJhdGVXaXRoRGF0YUl0ZW0oaXRlcmF0b3JjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICB0aGlzLmNvbGxlY3Rpb24uZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgaXRlcmF0b3JjYWxsYmFjayhlbGVtZW50LnZhbHVlLCBlbGVtZW50W2tleUZpZWxkXSwgZWxlbWVudC4kbG9raSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE51bWJlckl0ZW5zSW5Db2xsZWN0aW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbi5jb3VudCgpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { PoStorageService } from './services/po-storage.service';
|
|
2
|
-
export { PoStorageModule } from './po-storage.module';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export { PoStorageService } from './services/po-storage.service';
|
|
2
|
+
export { PoStorageModule } from './po-storage.module';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdG9yYWdlL3NyYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgUG9TdG9yYWdlQ29uZmlnIH0gZnJvbSAnLi9zZXJ2aWNlcy9wby1zdG9yYWdlLWNvbmZpZy5pbnRlcmZhY2UnO1xuZXhwb3J0IHsgUG9TdG9yYWdlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcG8tc3RvcmFnZS5zZXJ2aWNlJztcbmV4cG9ydCB7IFBvU3RvcmFnZU1vZHVsZSB9IGZyb20gJy4vcG8tc3RvcmFnZS5tb2R1bGUnO1xuIl19
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { PoStorageService, PO_STORAGE_CONFIG_TOKEN } from './services/po-storage.service';
|
|
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 class PoStorageModule {
|
|
10
|
+
static forRoot(storageConfig) {
|
|
11
|
+
return {
|
|
12
|
+
ngModule: PoStorageModule,
|
|
13
|
+
providers: [
|
|
14
|
+
{
|
|
15
|
+
provide: PO_STORAGE_CONFIG_TOKEN,
|
|
16
|
+
useValue: storageConfig || PoStorageService.getDefaultConfig()
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
provide: PoStorageService,
|
|
20
|
+
useFactory: PoStorageService.providePoStorage,
|
|
21
|
+
deps: [PO_STORAGE_CONFIG_TOKEN]
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
PoStorageModule.ɵfac = function PoStorageModule_Factory(t) { return new (t || PoStorageModule)(); };
|
|
28
|
+
PoStorageModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: PoStorageModule });
|
|
29
|
+
PoStorageModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({});
|
|
30
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoStorageModule, [{
|
|
31
|
+
type: NgModule
|
|
32
|
+
}], null, null); })();
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc3RvcmFnZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdG9yYWdlL3NyYy9saWIvcG8tc3RvcmFnZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBRTFGOzs7O0dBSUc7QUFHSCxNQUFNLE9BQU8sZUFBZTtJQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLGFBQStCO1FBQzVDLE9BQU87WUFDTCxRQUFRLEVBQUUsZUFBZTtZQUN6QixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLHVCQUF1QjtvQkFDaEMsUUFBUSxFQUFFLGFBQWEsSUFBSSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRTtpQkFDL0Q7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLGdCQUFnQjtvQkFDekIsVUFBVSxFQUFFLGdCQUFnQixDQUFDLGdCQUFnQjtvQkFDN0MsSUFBSSxFQUFFLENBQUMsdUJBQXVCLENBQUM7aUJBQ2hDO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzs7OEVBaEJVLGVBQWU7aUVBQWYsZUFBZTs7dUZBQWYsZUFBZTtjQUQzQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUG9TdG9yYWdlQ29uZmlnIH0gZnJvbSAnLi9zZXJ2aWNlcy9wby1zdG9yYWdlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9TdG9yYWdlU2VydmljZSwgUE9fU1RPUkFHRV9DT05GSUdfVE9LRU4gfSBmcm9tICcuL3NlcnZpY2VzL3BvLXN0b3JhZ2Uuc2VydmljZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogTcOzZHVsbyBkbyBjb21wb25lbnRlIFBvU3RvcmFnZSByZXNwb25zw6F2ZWwgcG9yIG1hbmlwdWxhciBvIHN0b3JhZ2UgZG8gYnJvd3Nlci5cbiAqL1xuXG5ATmdNb2R1bGUoKVxuZXhwb3J0IGNsYXNzIFBvU3RvcmFnZU1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KHN0b3JhZ2VDb25maWc/OiBQb1N0b3JhZ2VDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFBvU3RvcmFnZU1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogUG9TdG9yYWdlTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBQT19TVE9SQUdFX0NPTkZJR19UT0tFTixcbiAgICAgICAgICB1c2VWYWx1ZTogc3RvcmFnZUNvbmZpZyB8fCBQb1N0b3JhZ2VTZXJ2aWNlLmdldERlZmF1bHRDb25maWcoKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogUG9TdG9yYWdlU2VydmljZSxcbiAgICAgICAgICB1c2VGYWN0b3J5OiBQb1N0b3JhZ2VTZXJ2aWNlLnByb3ZpZGVQb1N0b3JhZ2UsXG4gICAgICAgICAgZGVwczogW1BPX1NUT1JBR0VfQ09ORklHX1RPS0VOXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
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 {};
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tc3RvcmFnZS1jb25maWcuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RvcmFnZS9zcmMvbGliL3NlcnZpY2VzL3BvLXN0b3JhZ2UtY29uZmlnLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHVzZWRCeSBQb1N0b3JhZ2VTZXJ2aWNlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogPGEgaWQ9XCJwby1zdG9yYWdlLWNvbmZpZ1wiPjwvYT5cbiAqXG4gKiBJbnRlcmZhY2UgcGFyYSBhcyBjb25maWd1cmHDp8O1ZXMgZGEgYmFzZSBkZSBkYWRvcyBsb2NhbCBkbyBgUG9TdG9yYWdlU2VydmljZWAuXG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBQb1N0b3JhZ2VDb25maWcge1xuICAvKipcbiAgICogT3JkZW0gZGUgcHJlZmVyw6puY2lhIGRvcyAqZHJpdmVycyogcGFyYSBncmF2YcOnw6NvIGRvcyBkYWRvcy5cbiAgICpcbiAgICogT3MgKmRyaXZlcnMqIHV0aWxpemFkb3MgcGVsbyBgUG9TdG9yYWdlU2VydmljZWAgc8OjbzpcbiAgICogLSBgaW5kZXhlZGRiYDtcbiAgICogLSBgd2Vic3FsYDtcbiAgICogLSBgbG9jYWxzdG9yYWdlYDtcbiAgICogLSBgbG9raWpzYC5cbiAgICpcbiAgICogRXhlbXBsbyBkZSBvcmRlbSBkZSBwcmVmZXLDqm5jaWE6IGBbJ2xva2lqcycsICd3ZWJzcWwnLCAnaW5kZXhlZGRiJywgJ2xvY2Fsc3RvcmFnZSddYC5cbiAgICovXG4gIGRyaXZlck9yZGVyPzogQXJyYXk8c3RyaW5nPjtcblxuICAvKiogTm9tZSBkYSBiYXNlIGRlIGRhZG9zLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBOb21lIGRhIGNvbGXDp8OjbyBvbmRlIG9zIGRhZG9zIHNlcsOjbyBhcm1hemVuYWRvcy4gRGV2ZSBzZXIgYWxmYW51bcOpcmljbyBlIGNvbnRlciBcIl9cIih1bmRlcnNjb3JlcykuICovXG4gIHN0b3JlTmFtZT86IHN0cmluZztcbn1cbiJdfQ==
|