taon-storage 19.0.3 → 19.0.4
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/browser/README.md +24 -24
- package/browser/fesm2022/taon-storage.mjs +71 -10
- package/browser/fesm2022/taon-storage.mjs.map +1 -1
- package/browser/package.json +1 -1
- package/client/README.md +24 -24
- package/client/fesm2022/taon-storage.mjs +71 -10
- package/client/fesm2022/taon-storage.mjs.map +1 -1
- package/client/package.json +1 -1
- package/index.js.map +1 -1
- package/lib/build-info._auto-generated_.d.ts +2 -1
- package/lib/build-info._auto-generated_.js +3 -2
- package/lib/build-info._auto-generated_.js.map +1 -1
- package/lib/constants.js +2 -2
- package/lib/constants.js.map +1 -1
- package/lib/file-stor.js +6 -6
- package/lib/file-stor.js.map +1 -1
- package/lib/helpers.js.map +1 -1
- package/lib/index._auto-generated_.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/models.js.map +1 -1
- package/lib/storage.js.map +1 -1
- package/migrations/index.js.map +1 -1
- package/migrations/migrations_index._auto-generated_.js.map +1 -1
- package/package.json +1 -1
- package/tmp-environment.json +4 -4
- package/websql/README.md +24 -24
- package/websql/fesm2022/taon-storage.mjs +71 -10
- package/websql/fesm2022/taon-storage.mjs.map +1 -1
- package/websql/package.json +1 -1
package/browser/README.md
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
# MyLib
|
|
2
|
-
|
|
3
|
-
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
|
|
4
|
-
|
|
5
|
-
## Code scaffolding
|
|
6
|
-
|
|
7
|
-
Run `ng generate component component-name --project my-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project my-lib`.
|
|
8
|
-
> Note: Don't forget to add `--project my-lib` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
-
|
|
10
|
-
## Build
|
|
11
|
-
|
|
12
|
-
Run `ng build my-lib` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
-
|
|
14
|
-
## Publishing
|
|
15
|
-
|
|
16
|
-
After building your library with `ng build my-lib`, go to the dist folder `cd dist/my-lib` and run `npm publish`.
|
|
17
|
-
|
|
18
|
-
## Running unit tests
|
|
19
|
-
|
|
20
|
-
Run `ng test my-lib` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
-
|
|
22
|
-
## Further help
|
|
23
|
-
|
|
24
|
-
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
1
|
+
# MyLib
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project my-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project my-lib`.
|
|
8
|
+
> Note: Don't forget to add `--project my-lib` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build my-lib` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build my-lib`, go to the dist folder `cd dist/my-lib` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test my-lib` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -12,10 +12,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
|
|
|
12
12
|
type: Component,
|
|
13
13
|
args: [{ selector: 'sample-log-cmp', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule], standalone: true, template: "<p>\n sample log component works!\n <img\n src=\"assets/assets-for/taon-storage/shared/logo.png\"\n alt=\"logo\" height=\"200\" />\n</p>\n", styles: [":host{display:block}\n"] }]
|
|
14
14
|
}] });
|
|
15
|
-
;
|
|
16
|
-
({}); // @--end-of-file-for-module=taon-storage lib/sample-log-cmp/sample-log-cmp.component.ts
|
|
17
15
|
|
|
18
16
|
const keyValue = (classFun, memberName) => {
|
|
17
|
+
// console.log('classname',classFun.name)
|
|
19
18
|
const res = `taon.localstorage.class.${classFun.name}.prop.${memberName}`;
|
|
20
19
|
return res;
|
|
21
20
|
};
|
|
@@ -23,17 +22,29 @@ const keyDefaultValueAreadySet = (classFun, memberName) => {
|
|
|
23
22
|
const res = keyValue(classFun, memberName) + 'defaultvalueisset';
|
|
24
23
|
return res;
|
|
25
24
|
};
|
|
26
|
-
({}); // @--end-of-file-for-module=taon-storage lib/helpers.ts
|
|
27
25
|
|
|
26
|
+
//#region imports
|
|
27
|
+
//#endregion
|
|
28
|
+
//#endregion
|
|
29
|
+
//#region constants / store name
|
|
28
30
|
const storeName = 'taon-storage_'
|
|
31
|
+
//#region @browser
|
|
29
32
|
+ window?.location.port;
|
|
33
|
+
//#endregion
|
|
34
|
+
//#endregion
|
|
35
|
+
//#region constants / environment
|
|
30
36
|
let environment = {};
|
|
31
37
|
/* */
|
|
32
38
|
/* */
|
|
33
39
|
/* */
|
|
40
|
+
//#region @browser
|
|
34
41
|
// @ts-ignore
|
|
35
42
|
environment = window['ENV'];
|
|
43
|
+
//#endregion
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region constant / stor local storage
|
|
36
46
|
const websql = Helpers.isWebSQL ? 'websql' : '';
|
|
47
|
+
//#region @browser
|
|
37
48
|
const storLocalStorage = localForge.createInstance({
|
|
38
49
|
driver: localForge.LOCALSTORAGE,
|
|
39
50
|
storeName: [
|
|
@@ -42,6 +53,10 @@ const storLocalStorage = localForge.createInstance({
|
|
|
42
53
|
_.kebabCase(environment?.currentProjectGenericName) + websql,
|
|
43
54
|
].join('_'), // + _.kebabCase(window.location.origin),
|
|
44
55
|
}); // TODO UNCOMMENT any
|
|
56
|
+
//#endregion
|
|
57
|
+
//#endregion
|
|
58
|
+
//#region constant / stor idndexedb storage
|
|
59
|
+
//#region @browser
|
|
45
60
|
const storIndexdDb = localForge.createInstance({
|
|
46
61
|
driver: localForge.INDEXEDDB,
|
|
47
62
|
storeName: [
|
|
@@ -50,30 +65,43 @@ const storIndexdDb = localForge.createInstance({
|
|
|
50
65
|
_.kebabCase(environment?.currentProjectGenericName) + websql,
|
|
51
66
|
].join('_')
|
|
52
67
|
}); // TODO UNCOMMENT any
|
|
53
|
-
|
|
54
|
-
|
|
68
|
+
//#endregion
|
|
69
|
+
//#endregion
|
|
55
70
|
|
|
71
|
+
//#endregion
|
|
72
|
+
//#endregion
|
|
73
|
+
//#region constants
|
|
56
74
|
const AWAITING_INTERVAL_TIME = 200;
|
|
75
|
+
//#endregion
|
|
76
|
+
//#region public api / uncahce
|
|
57
77
|
function uncache(onlyInThisComponentClass, propertyValueToDeleteFromCache) {
|
|
58
78
|
if (!onlyInThisComponentClass) { // @ts-ignore
|
|
59
79
|
onlyInThisComponentClass = { name: '__GLOBAL_NAMESPACE__' };
|
|
60
80
|
}
|
|
61
81
|
return Promise.all([
|
|
82
|
+
//#region @browser
|
|
62
83
|
storLocalStorage.removeItem(keyValue(onlyInThisComponentClass, propertyValueToDeleteFromCache)),
|
|
63
84
|
storLocalStorage.removeItem(keyDefaultValueAreadySet(onlyInThisComponentClass, propertyValueToDeleteFromCache)),
|
|
64
85
|
storIndexdDb.removeItem(keyValue(onlyInThisComponentClass, propertyValueToDeleteFromCache)),
|
|
65
86
|
storIndexdDb.removeItem(keyDefaultValueAreadySet(onlyInThisComponentClass, propertyValueToDeleteFromCache)),
|
|
87
|
+
//#endregion
|
|
66
88
|
]);
|
|
67
89
|
}
|
|
90
|
+
//#endregion
|
|
68
91
|
class TaonStorage {
|
|
69
92
|
constructor() {
|
|
70
|
-
|
|
93
|
+
//#endregion
|
|
94
|
+
//#region private methods / action
|
|
95
|
+
this.action = (defaultValue, storageEngine
|
|
96
|
+
//#endregion
|
|
97
|
+
, engine, transformFrom, transformTo) => {
|
|
71
98
|
if (!this.onlyInThisComponentClass) { // @ts-ignore
|
|
72
99
|
this.onlyInThisComponentClass = { name: '__GLOBAL_NAMESPACE__' };
|
|
73
100
|
}
|
|
74
101
|
return (target, memberName) => {
|
|
75
102
|
let currentValue = target[memberName];
|
|
76
103
|
const setItemDefaultValue = async () => {
|
|
104
|
+
//#region settin default value
|
|
77
105
|
const observe = {
|
|
78
106
|
engine,
|
|
79
107
|
id: 'setting default value'
|
|
@@ -81,13 +109,17 @@ class TaonStorage {
|
|
|
81
109
|
TaonStorage.pendingOperatins.push(observe);
|
|
82
110
|
await new Promise((resolve, reject) => {
|
|
83
111
|
storageEngine.getItem(keyValue(this.onlyInThisComponentClass, memberName), (err, valFromDb) => {
|
|
112
|
+
// target[memberName] = valFromDb;
|
|
84
113
|
currentValue = transformFrom ? transformFrom(valFromDb) : valFromDb;
|
|
114
|
+
// log.info(`["${memberName}"] set default value for `, valFromDb);
|
|
85
115
|
resolve();
|
|
86
116
|
this.endObserverAction(observe);
|
|
87
117
|
});
|
|
88
118
|
});
|
|
119
|
+
//#endregion
|
|
89
120
|
};
|
|
90
121
|
if (defaultValue !== void 0) {
|
|
122
|
+
//#region setting default value from db
|
|
91
123
|
const observe = {
|
|
92
124
|
engine,
|
|
93
125
|
id: 'setting not rivial default value'
|
|
@@ -95,6 +127,7 @@ class TaonStorage {
|
|
|
95
127
|
TaonStorage.pendingOperatins.push(observe);
|
|
96
128
|
(new Promise((resolve, reject) => {
|
|
97
129
|
storageEngine.getItem(keyDefaultValueAreadySet(this.onlyInThisComponentClass, memberName), async (err, val) => {
|
|
130
|
+
// log.info(`["${memberName}"] was set default value for ? `, val)
|
|
98
131
|
if (val) {
|
|
99
132
|
await setItemDefaultValue();
|
|
100
133
|
resolve();
|
|
@@ -111,18 +144,21 @@ class TaonStorage {
|
|
|
111
144
|
});
|
|
112
145
|
});
|
|
113
146
|
currentValue = defaultValue;
|
|
147
|
+
// log.i(`["${memberName}"] defaultValue "${memberName}"`, currentValue)
|
|
114
148
|
resolve();
|
|
115
149
|
}
|
|
116
150
|
});
|
|
117
151
|
})).then(() => {
|
|
118
152
|
this.endObserverAction(observe);
|
|
119
153
|
});
|
|
154
|
+
//#endregion
|
|
120
155
|
}
|
|
121
156
|
else {
|
|
122
157
|
setItemDefaultValue();
|
|
123
158
|
}
|
|
124
159
|
Object.defineProperty(target, memberName, {
|
|
125
160
|
set: (newValue) => {
|
|
161
|
+
//#region setting new value on setter
|
|
126
162
|
const observe = {
|
|
127
163
|
engine,
|
|
128
164
|
id: 'setting in SET not rivial default value'
|
|
@@ -135,19 +171,24 @@ class TaonStorage {
|
|
|
135
171
|
})).then(() => {
|
|
136
172
|
this.endObserverAction(observe);
|
|
137
173
|
});
|
|
174
|
+
//#endregion
|
|
138
175
|
currentValue = newValue;
|
|
139
176
|
},
|
|
140
177
|
get: () => currentValue,
|
|
141
178
|
});
|
|
142
179
|
};
|
|
143
180
|
};
|
|
181
|
+
//#endregion
|
|
182
|
+
//#endregion
|
|
144
183
|
}
|
|
184
|
+
//#region static
|
|
145
185
|
static { this.pendingOperatins = []; }
|
|
146
186
|
static { this.id = 0; }
|
|
147
187
|
/**
|
|
148
188
|
* TODO This is fine for now, but could be something smarter here
|
|
149
189
|
*/
|
|
150
190
|
static async awaitPendingOperatios(id = TaonStorage.id++) {
|
|
191
|
+
// console.log('AWAITING')
|
|
151
192
|
if (id > Number.MAX_SAFE_INTEGER - 2) {
|
|
152
193
|
TaonStorage.id = 0;
|
|
153
194
|
id = TaonStorage.id++;
|
|
@@ -177,8 +218,12 @@ class TaonStorage {
|
|
|
177
218
|
static get property() {
|
|
178
219
|
return new TaonStorage();
|
|
179
220
|
}
|
|
221
|
+
//#region private fields / file path
|
|
180
222
|
/* */
|
|
181
223
|
/* */
|
|
224
|
+
//#endregion
|
|
225
|
+
//#endregion
|
|
226
|
+
//#region public getters
|
|
182
227
|
get in() {
|
|
183
228
|
const that = this;
|
|
184
229
|
return {
|
|
@@ -206,23 +251,39 @@ class TaonStorage {
|
|
|
206
251
|
/* */
|
|
207
252
|
};
|
|
208
253
|
}
|
|
254
|
+
//#endregion
|
|
255
|
+
//#region public methods
|
|
256
|
+
//#region public methods / for
|
|
257
|
+
//#region @browser
|
|
209
258
|
for(onlyInThisComponentClass) {
|
|
210
259
|
this.onlyInThisComponentClass = onlyInThisComponentClass;
|
|
211
260
|
return this;
|
|
212
261
|
}
|
|
262
|
+
//#endregion
|
|
263
|
+
//#endregion
|
|
264
|
+
//#region public methods / with default value
|
|
213
265
|
withDefaultValue(defaultValue) {
|
|
266
|
+
// log.i(`["${}"]`)
|
|
214
267
|
return this.action(defaultValue, this.getEngine(), this.engine);
|
|
215
268
|
}
|
|
269
|
+
//#endregion
|
|
270
|
+
//#region public methods / with options
|
|
216
271
|
withOptions(options) {
|
|
217
272
|
const { defaultValue, transformFrom, transformTo } = (options || {});
|
|
218
273
|
return this.action(defaultValue ? defaultValue : this.defaultValue, this.getEngine(), this.engine, transformFrom, transformTo);
|
|
219
274
|
}
|
|
275
|
+
//#endregion
|
|
276
|
+
//#endregion
|
|
277
|
+
//#region private methods
|
|
278
|
+
//#region private methods / get engine
|
|
220
279
|
getEngine() {
|
|
221
280
|
switch (this.engine) {
|
|
281
|
+
//#region @browser
|
|
222
282
|
case 'localstorage':
|
|
223
283
|
return storLocalStorage;
|
|
224
284
|
case 'indexeddb':
|
|
225
285
|
return storIndexdDb;
|
|
286
|
+
//#endregion
|
|
226
287
|
/* */
|
|
227
288
|
/* */
|
|
228
289
|
/* */
|
|
@@ -230,16 +291,16 @@ class TaonStorage {
|
|
|
230
291
|
/* */
|
|
231
292
|
}
|
|
232
293
|
}
|
|
294
|
+
//#endregion
|
|
295
|
+
//#region private methods / end observer action
|
|
233
296
|
endObserverAction(observe) {
|
|
297
|
+
// observe.subscribers.forEach(c => typeof c?.awaitId === 'function' && c());
|
|
234
298
|
observe.isDone = true;
|
|
235
299
|
}
|
|
236
300
|
}
|
|
237
301
|
const Stor = TaonStorage;
|
|
238
|
-
;
|
|
239
|
-
({}); // @--end-of-file-for-module=taon-storage lib/storage.ts
|
|
240
302
|
|
|
241
|
-
|
|
242
|
-
({}); // @--end-of-file-for-module=taon-storage lib/index.ts
|
|
303
|
+
//#region @browser
|
|
243
304
|
|
|
244
305
|
/**
|
|
245
306
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taon-storage.mjs","sources":["../../../tmp-libs-for-dist/taon-storage/projects/taon-storage/src/lib/sample-log-cmp/sample-log-cmp.component.ts","../../../tmp-libs-for-dist/taon-storage/projects/taon-storage/src/lib/sample-log-cmp/sample-log-cmp.component.html","../../../tmp-libs-for-dist/taon-storage/projects/taon-storage/src/lib/helpers.ts","../../../tmp-libs-for-dist/taon-storage/projects/taon-storage/src/lib/constants.ts","../../../tmp-libs-for-dist/taon-storage/projects/taon-storage/src/lib/storage.ts","../../../tmp-libs-for-dist/taon-storage/projects/taon-storage/src/lib/index.ts","../../../tmp-libs-for-dist/taon-storage/projects/taon-storage/src/taon-storage.ts"],"sourcesContent":["\n\nimport { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, OnInit, Output, } from '@angular/core';/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n\nimport { Subscription } from 'rxjs';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'sample-log-cmp',\n templateUrl: './sample-log-cmp.component.html',\n styleUrls: ['./sample-log-cmp.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n standalone: true,\n})\nexport class SampleLogCmpComponent {}\n\n ;({}); // @--end-of-file-for-module=taon-storage lib/sample-log-cmp/sample-log-cmp.component.ts","<p>\n sample log component works!\n <img\n src=\"assets/assets-for/taon-storage/shared/logo.png\"\n alt=\"logo\" height=\"200\" />\n</p>\n","\n\n\nexport const keyValue = (classFun, memberName) => {\n\n const res = `taon.localstorage.class.${classFun.name}.prop.${memberName}`\n return res;\n}\n\nexport const keyDefaultValueAreadySet = (classFun, memberName) => {\n const res = keyValue(classFun, memberName) + 'defaultvalueisset';\n return res;\n}\n\n\n\n ;({}); // @--end-of-file-for-module=taon-storage lib/helpers.ts","\n\n\nimport { Helpers, _ } from \"tnp-core/browser\";\n\nimport * as localForge from 'localforage';\n\n\n\n\nexport const storeName = 'taon-storage_'\n\n + window?.location.port;\n\n\n\n\nlet environment = {} as any;\n/* */\n/* */\n/* */\n \n\n// @ts-ignore\nenvironment = window['ENV'];\n\n\n\n\nconst websql = Helpers.isWebSQL ? 'websql' : '';\n\nexport const storLocalStorage = localForge.createInstance({\n driver: localForge.LOCALSTORAGE,\n storeName: [\n storeName,\n 'LOCALSTORAGE',\n _.kebabCase(environment?.currentProjectGenericName) + websql,\n ].join('_')\n , // + _.kebabCase(window.location.origin),\n}) as any; // TODO UNCOMMENT any\n\n\n\n\n\nexport const storIndexdDb = localForge.createInstance({\n driver: localForge.INDEXEDDB,\n storeName: [\n storeName,\n 'INDEXEDDB',\n _.kebabCase(environment?.currentProjectGenericName) + websql,\n ].join('_')\n}) as any; // TODO UNCOMMENT any\n\n\n\n ;({}); // @--end-of-file-for-module=taon-storage lib/constants.ts","\n\n\nimport { _ } from 'tnp-core/browser';\nimport { keyDefaultValueAreadySet, keyValue } from './helpers';\nimport { Models } from './models';\nimport { FileStor } from './file-stor';\n\nimport { storIndexdDb, storLocalStorage } from './constants';\n\n\n\n\nconst AWAITING_INTERVAL_TIME = 200;\n\n\n\nexport function uncache<CLASS_FUNCTION = any>(onlyInThisComponentClass: CLASS_FUNCTION, propertyValueToDeleteFromCache: keyof CLASS_FUNCTION) {\n if (!onlyInThisComponentClass) { // @ts-ignore\n onlyInThisComponentClass = { name: '__GLOBAL_NAMESPACE__' };\n }\n return Promise.all([\n\n storLocalStorage.removeItem(keyValue(onlyInThisComponentClass, propertyValueToDeleteFromCache)),\n storLocalStorage.removeItem(keyDefaultValueAreadySet(onlyInThisComponentClass, propertyValueToDeleteFromCache)),\n storIndexdDb.removeItem(keyValue(onlyInThisComponentClass, propertyValueToDeleteFromCache)),\n storIndexdDb.removeItem(keyDefaultValueAreadySet(onlyInThisComponentClass, propertyValueToDeleteFromCache)),\n\n ])\n}\n\n\nclass TaonStorage {\n\n\n private static pendingOperatins: Models.PendingOperation[] = [];\n private static id = 0;\n\n /**\n * TODO This is fine for now, but could be something smarter here\n */\n public static async awaitPendingOperatios(id = TaonStorage.id++): Promise<void> {\n\n if (id > Number.MAX_SAFE_INTEGER - 2) {\n TaonStorage.id = 0;\n id = TaonStorage.id++;\n }\n const pending = this.pendingOperatins as Models.PendingOperation[];\n const toDeleteIndex = [];\n for (let index = 0; index < pending.length; index++) {\n const op = pending[index] as Models.PendingOperation;\n\n if (!op.isDone) {\n await new Promise<void>(async (resovle, reject) => {\n setTimeout(async () => {\n await this.awaitPendingOperatios(id);\n resovle();\n }, AWAITING_INTERVAL_TIME)\n })\n return;\n } else {\n toDeleteIndex.push(index);\n }\n }\n for (let index = 0; index < toDeleteIndex.length; index++) {\n const toDelete = toDeleteIndex[index];\n pending.splice(toDelete, 1);\n }\n }\n\n static get property() {\n return new TaonStorage();\n }\n\n\n\n private onlyInThisComponentClass?: Function;\n private defaultValue: any;\n private engine: Models.StorgeEngine;\n\n\n\n/* */\n/* */\n \n\n\n\n\n public get in() {\n const that = this;\n return {\n get indexedb() {\n that.engine = 'indexeddb';\n return that as Omit<TaonStorage, 'in'>;\n },\n get localstorage() {\n that.engine = 'localstorage';\n return that as Omit<TaonStorage, 'in'>;\n },\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n }\n\n\n\n\n\n\n public for(onlyInThisComponentClass?: Function): Omit<TaonStorage, 'for' | 'in'> {\n this.onlyInThisComponentClass = onlyInThisComponentClass;\n return this as Omit<TaonStorage, 'for' | 'in'>;\n }\n\n\n\n\n public withDefaultValue(defaultValue?: any): any {\n\n return this.action(defaultValue, this.getEngine(), this.engine)\n }\n\n\n\n withOptions(options: {\n /**\n * default value\n */\n defaultValue?: any;\n transformFrom?: (valueFromDb: any) => any,\n transformTo?: (valueThatGetToDB: any) => any,\n }) {\n const { defaultValue, transformFrom, transformTo } = (options || {}) as any;\n return this.action(\n defaultValue ? defaultValue : this.defaultValue,\n this.getEngine(),\n this.engine,\n transformFrom,\n transformTo,\n );\n }\n\n\n\n\n\n\n\n private getEngine() {\n switch (this.engine) {\n\n case 'localstorage':\n return storLocalStorage;\n case 'indexeddb':\n return storIndexdDb;\n\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n }\n\n\n\n private endObserverAction(observe: Models.PendingOperation) {\n\n observe.isDone = true;\n }\n\n\n\n private action = (\n defaultValue: any,\n storageEngine\n\n : Models.StorType\n\n ,\n engine: Models.StorgeEngine,\n transformFrom?,\n transformTo?,\n ) => {\n if (!this.onlyInThisComponentClass) { // @ts-ignore\n this.onlyInThisComponentClass = { name: '__GLOBAL_NAMESPACE__' };\n }\n\n return (target: any, memberName: string) => {\n let currentValue: any = target[memberName];\n\n const setItemDefaultValue = async () => {\n\n const observe = {\n engine,\n id: 'setting default value'\n } as Models.PendingOperation;\n TaonStorage.pendingOperatins.push(observe);\n\n await new Promise<void>((resolve, reject) => {\n storageEngine.getItem(keyValue(this.onlyInThisComponentClass, memberName), (err, valFromDb) => {\n\n currentValue = transformFrom ? transformFrom(valFromDb) : valFromDb;\n\n resolve();\n this.endObserverAction(observe);\n })\n });\n\n }\n\n if (defaultValue !== void 0) {\n\n const observe = {\n engine,\n id: 'setting not rivial default value'\n } as Models.PendingOperation;\n TaonStorage.pendingOperatins.push(observe);\n\n (new Promise<void>((resolve, reject) => {\n storageEngine.getItem(keyDefaultValueAreadySet(this.onlyInThisComponentClass, memberName), async (err, val) => {\n\n if (val) {\n await setItemDefaultValue();\n resolve()\n } else {\n await new Promise<void>((res, rej) => {\n storageEngine.setItem(keyDefaultValueAreadySet(this.onlyInThisComponentClass, memberName), true, (err, v) => {\n res();\n })\n });\n\n await new Promise<void>((res, rej) => {\n storageEngine.setItem(keyValue(this.onlyInThisComponentClass, memberName),\n transformTo ? transformTo(defaultValue) : defaultValue, (err, val) => {\n res();\n })\n });\n\n currentValue = defaultValue;\n\n resolve()\n }\n });\n })).then(() => {\n this.endObserverAction(observe);\n });\n\n\n } else {\n setItemDefaultValue();\n }\n\n Object.defineProperty(target, memberName, {\n set: (newValue: any) => {\n\n const observe = {\n engine,\n id: 'setting in SET not rivial default value'\n } as Models.PendingOperation;\n TaonStorage.pendingOperatins.push(observe);\n\n (new Promise<void>((resolve, reject) => {\n storageEngine.setItem(\n keyValue(this.onlyInThisComponentClass, memberName),\n transformTo ? transformTo(newValue) : newValue,\n (err, savedValue) => {\n resolve();\n }\n );\n })).then(() => {\n this.endObserverAction(observe);\n });\n\n currentValue = newValue;\n },\n get: () => currentValue,\n });\n };\n };\n\n\n\n\n}\n\nexport const Stor = TaonStorage;\n\n ;({}); // @--end-of-file-for-module=taon-storage lib/storage.ts","\n\n\nexport * from './sample-log-cmp/sample-log-cmp.component';\n\nexport * from './storage';\n\n ;({}); // @--end-of-file-for-module=taon-storage lib/index.ts","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"taon-storage.mjs","sources":["../../../tmp-libs-for-dist/taon-storage/projects/taon-storage/src/lib/sample-log-cmp/sample-log-cmp.component.ts","../../../tmp-libs-for-dist/taon-storage/projects/taon-storage/src/lib/sample-log-cmp/sample-log-cmp.component.html","../../../tmp-libs-for-dist/taon-storage/projects/taon-storage/src/lib/helpers.ts","../../../tmp-libs-for-dist/taon-storage/projects/taon-storage/src/lib/constants.ts","../../../tmp-libs-for-dist/taon-storage/projects/taon-storage/src/lib/storage.ts","../../../tmp-libs-for-dist/taon-storage/projects/taon-storage/src/lib/index.ts","../../../tmp-libs-for-dist/taon-storage/projects/taon-storage/src/taon-storage.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'sample-log-cmp',\n templateUrl: './sample-log-cmp.component.html',\n styleUrls: ['./sample-log-cmp.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n standalone: true,\n})\nexport class SampleLogCmpComponent {}\n","<p>\n sample log component works!\n <img\n src=\"assets/assets-for/taon-storage/shared/logo.png\"\n alt=\"logo\" height=\"200\" />\n</p>\n","\nexport const keyValue = (classFun, memberName) => {\n // console.log('classname',classFun.name)\n const res = `taon.localstorage.class.${classFun.name}.prop.${memberName}`\n return res;\n}\n\nexport const keyDefaultValueAreadySet = (classFun, memberName) => {\n const res = keyValue(classFun, memberName) + 'defaultvalueisset';\n return res;\n}\n\n\n","//#region imports\nimport { Helpers, _ } from \"tnp-core/browser\";\n//#region @browser\nimport * as localForge from 'localforage';\n//#endregion\n//#endregion\n\n//#region constants / store name\nexport const storeName = 'taon-storage_'\n //#region @browser\n + window?.location.port;\n//#endregion\n//#endregion\n\n//#region constants / environment\nlet environment = {} as any;\n/* */\n/* */\n/* */\n \n//#region @browser\n// @ts-ignore\nenvironment = window['ENV'];\n//#endregion\n//#endregion\n\n//#region constant / stor local storage\nconst websql = Helpers.isWebSQL ? 'websql' : '';\n//#region @browser\nexport const storLocalStorage = localForge.createInstance({\n driver: localForge.LOCALSTORAGE,\n storeName: [\n storeName,\n 'LOCALSTORAGE',\n _.kebabCase(environment?.currentProjectGenericName) + websql,\n ].join('_')\n , // + _.kebabCase(window.location.origin),\n}) as any; // TODO UNCOMMENT any\n//#endregion\n//#endregion\n\n//#region constant / stor idndexedb storage\n//#region @browser\nexport const storIndexdDb = localForge.createInstance({\n driver: localForge.INDEXEDDB,\n storeName: [\n storeName,\n 'INDEXEDDB',\n _.kebabCase(environment?.currentProjectGenericName) + websql,\n ].join('_')\n}) as any; // TODO UNCOMMENT any\n//#endregion\n//#endregion\n","//#region imports\nimport { _ } from 'tnp-core/browser';\nimport { keyDefaultValueAreadySet, keyValue } from './helpers';\nimport { Models } from './models';\nimport { FileStor } from './file-stor';\n//#region @browser\nimport { storIndexdDb, storLocalStorage } from './constants';\n//#endregion\n//#endregion\n\n//#region constants\nconst AWAITING_INTERVAL_TIME = 200;\n//#endregion\n\n//#region public api / uncahce\nexport function uncache<CLASS_FUNCTION = any>(onlyInThisComponentClass: CLASS_FUNCTION, propertyValueToDeleteFromCache: keyof CLASS_FUNCTION) {\n if (!onlyInThisComponentClass) { // @ts-ignore\n onlyInThisComponentClass = { name: '__GLOBAL_NAMESPACE__' };\n }\n return Promise.all([\n //#region @browser\n storLocalStorage.removeItem(keyValue(onlyInThisComponentClass, propertyValueToDeleteFromCache)),\n storLocalStorage.removeItem(keyDefaultValueAreadySet(onlyInThisComponentClass, propertyValueToDeleteFromCache)),\n storIndexdDb.removeItem(keyValue(onlyInThisComponentClass, propertyValueToDeleteFromCache)),\n storIndexdDb.removeItem(keyDefaultValueAreadySet(onlyInThisComponentClass, propertyValueToDeleteFromCache)),\n //#endregion\n ])\n}\n//#endregion\n\nclass TaonStorage {\n\n //#region static\n private static pendingOperatins: Models.PendingOperation[] = [];\n private static id = 0;\n\n /**\n * TODO This is fine for now, but could be something smarter here\n */\n public static async awaitPendingOperatios(id = TaonStorage.id++): Promise<void> {\n // console.log('AWAITING')\n if (id > Number.MAX_SAFE_INTEGER - 2) {\n TaonStorage.id = 0;\n id = TaonStorage.id++;\n }\n const pending = this.pendingOperatins as Models.PendingOperation[];\n const toDeleteIndex = [];\n for (let index = 0; index < pending.length; index++) {\n const op = pending[index] as Models.PendingOperation;\n\n if (!op.isDone) {\n await new Promise<void>(async (resovle, reject) => {\n setTimeout(async () => {\n await this.awaitPendingOperatios(id);\n resovle();\n }, AWAITING_INTERVAL_TIME)\n })\n return;\n } else {\n toDeleteIndex.push(index);\n }\n }\n for (let index = 0; index < toDeleteIndex.length; index++) {\n const toDelete = toDeleteIndex[index];\n pending.splice(toDelete, 1);\n }\n }\n\n static get property() {\n return new TaonStorage();\n }\n //#endregion\n\n //#region private fields\n private onlyInThisComponentClass?: Function;\n private defaultValue: any;\n private engine: Models.StorgeEngine;\n\n\n //#region private fields / file path\n/* */\n/* */\n \n //#endregion\n //#endregion\n\n //#region public getters\n public get in() {\n const that = this;\n return {\n get indexedb() {\n that.engine = 'indexeddb';\n return that as Omit<TaonStorage, 'in'>;\n },\n get localstorage() {\n that.engine = 'localstorage';\n return that as Omit<TaonStorage, 'in'>;\n },\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n }\n //#endregion\n\n //#region public methods\n\n //#region public methods / for\n //#region @browser\n public for(onlyInThisComponentClass?: Function): Omit<TaonStorage, 'for' | 'in'> {\n this.onlyInThisComponentClass = onlyInThisComponentClass;\n return this as Omit<TaonStorage, 'for' | 'in'>;\n }\n //#endregion\n //#endregion\n\n //#region public methods / with default value\n public withDefaultValue(defaultValue?: any): any {\n // log.i(`[\"${}\"]`)\n return this.action(defaultValue, this.getEngine(), this.engine)\n }\n //#endregion\n\n //#region public methods / with options\n withOptions(options: {\n /**\n * default value\n */\n defaultValue?: any;\n transformFrom?: (valueFromDb: any) => any,\n transformTo?: (valueThatGetToDB: any) => any,\n }) {\n const { defaultValue, transformFrom, transformTo } = (options || {}) as any;\n return this.action(\n defaultValue ? defaultValue : this.defaultValue,\n this.getEngine(),\n this.engine,\n transformFrom,\n transformTo,\n );\n }\n //#endregion\n\n //#endregion\n\n //#region private methods\n\n //#region private methods / get engine\n private getEngine() {\n switch (this.engine) {\n //#region @browser\n case 'localstorage':\n return storLocalStorage;\n case 'indexeddb':\n return storIndexdDb;\n //#endregion\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n }\n //#endregion\n\n //#region private methods / end observer action\n private endObserverAction(observe: Models.PendingOperation) {\n // observe.subscribers.forEach(c => typeof c?.awaitId === 'function' && c());\n observe.isDone = true;\n }\n //#endregion\n\n //#region private methods / action\n private action = (\n defaultValue: any,\n storageEngine\n //#region @browser\n : Models.StorType\n //#endregion\n ,\n engine: Models.StorgeEngine,\n transformFrom?,\n transformTo?,\n ) => {\n if (!this.onlyInThisComponentClass) { // @ts-ignore\n this.onlyInThisComponentClass = { name: '__GLOBAL_NAMESPACE__' };\n }\n\n return (target: any, memberName: string) => {\n let currentValue: any = target[memberName];\n\n const setItemDefaultValue = async () => {\n //#region settin default value\n const observe = {\n engine,\n id: 'setting default value'\n } as Models.PendingOperation;\n TaonStorage.pendingOperatins.push(observe);\n\n await new Promise<void>((resolve, reject) => {\n storageEngine.getItem(keyValue(this.onlyInThisComponentClass, memberName), (err, valFromDb) => {\n // target[memberName] = valFromDb;\n currentValue = transformFrom ? transformFrom(valFromDb) : valFromDb;\n // log.info(`[\"${memberName}\"] set default value for `, valFromDb);\n resolve();\n this.endObserverAction(observe);\n })\n });\n //#endregion\n }\n\n if (defaultValue !== void 0) {\n //#region setting default value from db\n const observe = {\n engine,\n id: 'setting not rivial default value'\n } as Models.PendingOperation;\n TaonStorage.pendingOperatins.push(observe);\n\n (new Promise<void>((resolve, reject) => {\n storageEngine.getItem(keyDefaultValueAreadySet(this.onlyInThisComponentClass, memberName), async (err, val) => {\n // log.info(`[\"${memberName}\"] was set default value for ? `, val)\n if (val) {\n await setItemDefaultValue();\n resolve()\n } else {\n await new Promise<void>((res, rej) => {\n storageEngine.setItem(keyDefaultValueAreadySet(this.onlyInThisComponentClass, memberName), true, (err, v) => {\n res();\n })\n });\n\n await new Promise<void>((res, rej) => {\n storageEngine.setItem(keyValue(this.onlyInThisComponentClass, memberName),\n transformTo ? transformTo(defaultValue) : defaultValue, (err, val) => {\n res();\n })\n });\n\n currentValue = defaultValue;\n // log.i(`[\"${memberName}\"] defaultValue \"${memberName}\"`, currentValue)\n resolve()\n }\n });\n })).then(() => {\n this.endObserverAction(observe);\n });\n\n //#endregion\n } else {\n setItemDefaultValue();\n }\n\n Object.defineProperty(target, memberName, {\n set: (newValue: any) => {\n //#region setting new value on setter\n const observe = {\n engine,\n id: 'setting in SET not rivial default value'\n } as Models.PendingOperation;\n TaonStorage.pendingOperatins.push(observe);\n\n (new Promise<void>((resolve, reject) => {\n storageEngine.setItem(\n keyValue(this.onlyInThisComponentClass, memberName),\n transformTo ? transformTo(newValue) : newValue,\n (err, savedValue) => {\n resolve();\n }\n );\n })).then(() => {\n this.endObserverAction(observe);\n });\n //#endregion\n currentValue = newValue;\n },\n get: () => currentValue,\n });\n };\n };\n //#endregion\n\n //#endregion\n\n}\n\nexport const Stor = TaonStorage;\n","//#region @browser\nexport * from './sample-log-cmp/sample-log-cmp.component';\n//#endregion\nexport * from './storage';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/browser/package.json
CHANGED
package/client/README.md
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
# MyLib
|
|
2
|
-
|
|
3
|
-
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
|
|
4
|
-
|
|
5
|
-
## Code scaffolding
|
|
6
|
-
|
|
7
|
-
Run `ng generate component component-name --project my-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project my-lib`.
|
|
8
|
-
> Note: Don't forget to add `--project my-lib` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
-
|
|
10
|
-
## Build
|
|
11
|
-
|
|
12
|
-
Run `ng build my-lib` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
-
|
|
14
|
-
## Publishing
|
|
15
|
-
|
|
16
|
-
After building your library with `ng build my-lib`, go to the dist folder `cd dist/my-lib` and run `npm publish`.
|
|
17
|
-
|
|
18
|
-
## Running unit tests
|
|
19
|
-
|
|
20
|
-
Run `ng test my-lib` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
-
|
|
22
|
-
## Further help
|
|
23
|
-
|
|
24
|
-
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
1
|
+
# MyLib
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project my-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project my-lib`.
|
|
8
|
+
> Note: Don't forget to add `--project my-lib` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build my-lib` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build my-lib`, go to the dist folder `cd dist/my-lib` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test my-lib` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|