varstor 0.6.61 → 0.6.63
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 +153 -56
- package/dist/varstor-webextension.js +479 -504
- package/dist/varstor-webextension.min.js +1 -1
- package/dist/varstor.js +419 -430
- package/dist/varstor.min.js +1 -1
- package/package.json +5 -1
- package/src/actions.ts +19 -0
- package/src/constants.ts +1 -0
- package/src/helpers.ts +88 -0
- package/src/index.ts +314 -0
- package/src/listeners.ts +74 -0
- package/src/storage.ts +37 -0
- package/src/types.d.ts +44 -0
- package/src/{validation.js → validation.ts} +11 -8
- package/src/{webextension-storage.js → webextension-storage.ts} +6 -6
- package/src/{webextension.js → webextension.ts} +5 -2
- package/tsconfig.json +28 -0
- package/webpack.config.js +16 -2
- package/src/helpers.js +0 -40
- package/src/index.js +0 -283
- package/src/namespace.js +0 -35
- package/src/storage.js +0 -31
package/dist/varstor.js
CHANGED
|
@@ -12,411 +12,409 @@ return /******/ (() => { // webpackBootstrap
|
|
|
12
12
|
/******/ "use strict";
|
|
13
13
|
/******/ var __webpack_modules__ = ({
|
|
14
14
|
|
|
15
|
-
/***/ "./src/
|
|
15
|
+
/***/ "./src/actions.ts"
|
|
16
16
|
/*!************************!*\
|
|
17
|
-
!*** ./src/
|
|
17
|
+
!*** ./src/actions.ts ***!
|
|
18
18
|
\************************/
|
|
19
19
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
20
20
|
|
|
21
21
|
__webpack_require__.r(__webpack_exports__);
|
|
22
22
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
23
|
-
/* harmony export */
|
|
23
|
+
/* harmony export */ addStateActions: () => (/* binding */ addStateActions)
|
|
24
|
+
/* harmony export */ });
|
|
25
|
+
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! . */ "./src/index.ts");
|
|
26
|
+
|
|
27
|
+
function addStateActions(namespace, actions) {
|
|
28
|
+
const stateAcessor = {
|
|
29
|
+
get: ___WEBPACK_IMPORTED_MODULE_0__.getState.bind(null, namespace),
|
|
30
|
+
set: ___WEBPACK_IMPORTED_MODULE_0__.setState.bind(null, namespace),
|
|
31
|
+
reset: ___WEBPACK_IMPORTED_MODULE_0__.resetState.bind(null, namespace),
|
|
32
|
+
};
|
|
33
|
+
for (let [actionName, actionFn] of Object.entries(actions)) {
|
|
34
|
+
___WEBPACK_IMPORTED_MODULE_0__.STATE[namespace(actionName)] = {
|
|
35
|
+
key: actionName,
|
|
36
|
+
namespace,
|
|
37
|
+
value: actionFn.bind(null, stateAcessor),
|
|
38
|
+
isAction: true,
|
|
39
|
+
listeners: [],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
/***/ },
|
|
46
|
+
|
|
47
|
+
/***/ "./src/constants.ts"
|
|
48
|
+
/*!**************************!*\
|
|
49
|
+
!*** ./src/constants.ts ***!
|
|
50
|
+
\**************************/
|
|
51
|
+
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
52
|
+
|
|
53
|
+
__webpack_require__.r(__webpack_exports__);
|
|
54
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
55
|
+
/* harmony export */ NAMESPACE_DELIMITER: () => (/* binding */ NAMESPACE_DELIMITER)
|
|
56
|
+
/* harmony export */ });
|
|
57
|
+
const NAMESPACE_DELIMITER = "::";
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
/***/ },
|
|
61
|
+
|
|
62
|
+
/***/ "./src/helpers.ts"
|
|
63
|
+
/*!************************!*\
|
|
64
|
+
!*** ./src/helpers.ts ***!
|
|
65
|
+
\************************/
|
|
66
|
+
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
67
|
+
|
|
68
|
+
__webpack_require__.r(__webpack_exports__);
|
|
69
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
70
|
+
/* harmony export */ filter: () => (/* binding */ filter),
|
|
71
|
+
/* harmony export */ forEach: () => (/* binding */ forEach),
|
|
24
72
|
/* harmony export */ getParamNames: () => (/* binding */ getParamNames),
|
|
25
73
|
/* harmony export */ isArray: () => (/* binding */ isArray),
|
|
26
74
|
/* harmony export */ isFunction: () => (/* binding */ isFunction),
|
|
27
75
|
/* harmony export */ isObject: () => (/* binding */ isObject),
|
|
28
76
|
/* harmony export */ isString: () => (/* binding */ isString),
|
|
29
|
-
/* harmony export */
|
|
77
|
+
/* harmony export */ map: () => (/* binding */ map),
|
|
78
|
+
/* harmony export */ recreateStructure: () => (/* binding */ recreateStructure)
|
|
30
79
|
/* harmony export */ });
|
|
31
|
-
const STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;
|
|
32
|
-
const ARGUMENT_NAMES = /([^\s,]+)/g;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
function
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
80
|
+
const STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;
|
|
81
|
+
const ARGUMENT_NAMES = /([^\s,]+)/g;
|
|
82
|
+
function isArray(obj) {
|
|
83
|
+
return getObjectType(obj) === "[object Array]";
|
|
84
|
+
}
|
|
85
|
+
function isString(obj) {
|
|
86
|
+
return getObjectType(obj) === "[object String]";
|
|
87
|
+
}
|
|
88
|
+
function isFunction(obj) {
|
|
89
|
+
return getObjectType(obj) === "[object Function]";
|
|
90
|
+
}
|
|
91
|
+
function isObject(obj) {
|
|
92
|
+
return getObjectType(obj) === "[object Object]";
|
|
93
|
+
}
|
|
94
|
+
function getObjectType(obj) {
|
|
95
|
+
return Object.prototype.toString.call(obj);
|
|
96
|
+
}
|
|
97
|
+
function getParamNames(fn) {
|
|
98
|
+
const fnStr = fn.toString().replace(STRIP_COMMENTS, "").split("=>")[0];
|
|
99
|
+
const names = fnStr
|
|
100
|
+
.slice(fnStr.indexOf("(") + 1, fnStr.indexOf(")"))
|
|
101
|
+
.match(ARGUMENT_NAMES);
|
|
102
|
+
if (names === null) {
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
return names;
|
|
106
|
+
}
|
|
107
|
+
function map(obj, cb) {
|
|
108
|
+
const res = Object.entries(obj).map(([k, v]) => cb(k, v));
|
|
109
|
+
if (res[0]?.length === 2) {
|
|
110
|
+
return Object.fromEntries(res);
|
|
111
|
+
}
|
|
112
|
+
return res;
|
|
113
|
+
}
|
|
114
|
+
function forEach(obj, cb) {
|
|
115
|
+
Object.entries(obj || {}).forEach(([k, v]) => cb(k, v));
|
|
116
|
+
}
|
|
117
|
+
function filter(obj, cb) {
|
|
118
|
+
return Object.fromEntries(Object.entries(obj || {}).filter(([k, v]) => cb(k, v) === true));
|
|
119
|
+
}
|
|
120
|
+
function recreateStructure(value) {
|
|
121
|
+
let newValue = value;
|
|
122
|
+
if (isArray(value)) {
|
|
123
|
+
newValue = [];
|
|
124
|
+
value.forEach((v) => newValue.push(recreateStructure(v)));
|
|
125
|
+
return newValue;
|
|
126
|
+
}
|
|
127
|
+
if (isObject(value)) {
|
|
128
|
+
newValue = {};
|
|
129
|
+
for (let key in value) {
|
|
130
|
+
newValue[key] = recreateStructure(value[key]);
|
|
131
|
+
}
|
|
132
|
+
return newValue;
|
|
133
|
+
}
|
|
134
|
+
return newValue;
|
|
135
|
+
}
|
|
71
136
|
|
|
72
137
|
|
|
73
138
|
/***/ },
|
|
74
139
|
|
|
75
|
-
/***/ "./src/index.
|
|
140
|
+
/***/ "./src/index.ts"
|
|
76
141
|
/*!**********************!*\
|
|
77
|
-
!*** ./src/index.
|
|
142
|
+
!*** ./src/index.ts ***!
|
|
78
143
|
\**********************/
|
|
79
144
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
80
145
|
|
|
81
146
|
__webpack_require__.r(__webpack_exports__);
|
|
82
147
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
83
|
-
/* harmony export */
|
|
84
|
-
/* harmony export */
|
|
148
|
+
/* harmony export */ STATE: () => (/* binding */ STATE),
|
|
149
|
+
/* harmony export */ createStore: () => (/* binding */ createStore),
|
|
150
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
151
|
+
/* harmony export */ getState: () => (/* binding */ getState),
|
|
152
|
+
/* harmony export */ getValues: () => (/* binding */ getValues),
|
|
153
|
+
/* harmony export */ resetState: () => (/* binding */ resetState),
|
|
154
|
+
/* harmony export */ setState: () => (/* binding */ setState),
|
|
155
|
+
/* harmony export */ setupValue: () => (/* binding */ setupValue)
|
|
85
156
|
/* harmony export */ });
|
|
86
|
-
/* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./storage */ "./src/storage.
|
|
87
|
-
/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ "./src/helpers.
|
|
88
|
-
/* harmony import */ var
|
|
89
|
-
/* harmony import */ var
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const STATE = {};
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
if (
|
|
205
|
-
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
await ACCESSORS[namespace(k)].set(v);
|
|
277
|
-
};
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
return createStore(namespace());
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
function resetAllState (namespace) {
|
|
284
|
-
Object.entries(ACCESSORS)
|
|
285
|
-
.filter(([k]) => k.startsWith(namespace()))
|
|
286
|
-
.forEach((k, { reset }) => reset());
|
|
287
|
-
|
|
288
|
-
return createStore(namespace());
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
function addStateLitener (namespace, observables, cb) {
|
|
292
|
-
observables.forEach((key) => ACCESSORS[namespace(key)].onChange(cb));
|
|
293
|
-
|
|
294
|
-
return createStore(namespace());
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
function removeStateListener(namespace, observables, cb) {
|
|
298
|
-
observables.forEach((key) =>
|
|
299
|
-
ACCESSORS[namespace(key)].removeListener(cb),
|
|
300
|
-
);
|
|
301
|
-
|
|
302
|
-
return createStore(namespace());
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
function recreateStructure (value) {
|
|
306
|
-
let newValue = value;
|
|
307
|
-
|
|
308
|
-
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isArray)(value)) {
|
|
309
|
-
newValue = [];
|
|
310
|
-
value.forEach((v) => newValue.push(recreateStructure(v)));
|
|
311
|
-
return newValue;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isObject)(value)) {
|
|
315
|
-
newValue = {};
|
|
316
|
-
for (let key in value) {
|
|
317
|
-
newValue[key] = recreateStructure(value[key]);
|
|
318
|
-
}
|
|
319
|
-
return newValue;
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
return newValue;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
function main () {
|
|
326
|
-
const arg1 = arguments[1];
|
|
327
|
-
|
|
328
|
-
if (!arg1 || (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isFunction)(arg1) || (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isString)(arg1)) {
|
|
329
|
-
return getState.apply(null, arguments);
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
if (Array.isArray(arg1)) {
|
|
333
|
-
return addStateLitener.apply(null, arguments);
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isObject)(arg1)) {
|
|
337
|
-
return setState.apply(null, arguments);
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
function setStorageUtils(storageUtils) {
|
|
342
|
-
Object.assign(STORAGE, storageUtils);
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
function createStore (_namespace) {
|
|
346
|
-
const namespace = (key) => (0,_namespace__WEBPACK_IMPORTED_MODULE_2__.addNamespace)(_namespace, key);
|
|
347
|
-
|
|
348
|
-
return Object.assign(main.bind(null, namespace), {
|
|
349
|
-
add: (state) => addState(namespace, state, false),
|
|
350
|
-
addPersistent: (state) => addState(namespace, state, true),
|
|
351
|
-
get: (arg) => getState(namespace, arg),
|
|
352
|
-
set: async (changes) => await setState(namespace, changes),
|
|
353
|
-
resetAll: () => resetAllState(namespace),
|
|
354
|
-
onChange: (keys, cb) => addStateLitener(namespace, keys, cb),
|
|
355
|
-
removeListener: (keys, cb) => removeStateListener(namespace, keys, cb),
|
|
356
|
-
setStorageUtils,
|
|
357
|
-
onStateChange,
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createStore(""));
|
|
157
|
+
/* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./storage */ "./src/storage.ts");
|
|
158
|
+
/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ "./src/helpers.ts");
|
|
159
|
+
/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./actions */ "./src/actions.ts");
|
|
160
|
+
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
|
|
161
|
+
/* harmony import */ var _validation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./validation */ "./src/validation.ts");
|
|
162
|
+
/* harmony import */ var _listeners__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./listeners */ "./src/listeners.ts");
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
const STATE = {};
|
|
170
|
+
const STORAGE = {};
|
|
171
|
+
setStorageUtils(_storage__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
|
172
|
+
async function addState(namespace, initialState, isPersistent) {
|
|
173
|
+
const storageType = STORAGE.GET_TYPE(isPersistent);
|
|
174
|
+
const defaultValues = Object.assign({}, initialState);
|
|
175
|
+
const values = (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.map)(initialState, (k, v) => [namespace(k), v]);
|
|
176
|
+
if (STORAGE.IS_AVAILABE(storageType)) {
|
|
177
|
+
await STORAGE.UPDATE_STATE(values, storageType);
|
|
178
|
+
}
|
|
179
|
+
if (!_listeners__WEBPACK_IMPORTED_MODULE_5__.LISTENERS[namespace()]) {
|
|
180
|
+
_listeners__WEBPACK_IMPORTED_MODULE_5__.LISTENERS[namespace()] = [];
|
|
181
|
+
}
|
|
182
|
+
for (const key in initialState) {
|
|
183
|
+
const fullKey = namespace(key);
|
|
184
|
+
_validation__WEBPACK_IMPORTED_MODULE_4__.isValid.Defining(fullKey);
|
|
185
|
+
STATE[fullKey] = setupValue(key, namespace, values[fullKey], defaultValues[key], storageType);
|
|
186
|
+
}
|
|
187
|
+
return createStore(namespace());
|
|
188
|
+
}
|
|
189
|
+
function setupValue(key, namespace, value, defaultValue, storageType) {
|
|
190
|
+
const fullKey = namespace(key);
|
|
191
|
+
const isComputedValue = (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isFunction)(value);
|
|
192
|
+
const dependencies = isComputedValue
|
|
193
|
+
? (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.getParamNames)(value)
|
|
194
|
+
: [];
|
|
195
|
+
dependencies.forEach((dependency) => {
|
|
196
|
+
const fullDependencyKey = namespace(dependency);
|
|
197
|
+
if (!STATE[fullDependencyKey]) {
|
|
198
|
+
STATE[fullDependencyKey] = {
|
|
199
|
+
dependants: [],
|
|
200
|
+
dependencies: [],
|
|
201
|
+
namespace,
|
|
202
|
+
storageType,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
STATE[fullDependencyKey].dependants?.push(fullKey);
|
|
206
|
+
});
|
|
207
|
+
return {
|
|
208
|
+
key,
|
|
209
|
+
fullKey,
|
|
210
|
+
value: isComputedValue
|
|
211
|
+
? value.apply(null, getArguments(dependencies, namespace))
|
|
212
|
+
: value,
|
|
213
|
+
computeFn: isComputedValue && value,
|
|
214
|
+
dependencies,
|
|
215
|
+
dependants: [],
|
|
216
|
+
listeners: [],
|
|
217
|
+
defaultValue,
|
|
218
|
+
storageType,
|
|
219
|
+
namespace,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
function getNamespaceState(namespace) {
|
|
223
|
+
return (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.filter)(STATE, (k, { key }) => k === namespace(key));
|
|
224
|
+
}
|
|
225
|
+
function getValues(namespace) {
|
|
226
|
+
return (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.map)(getNamespaceState(namespace), (k, { key, value }) => [
|
|
227
|
+
key,
|
|
228
|
+
value,
|
|
229
|
+
]);
|
|
230
|
+
}
|
|
231
|
+
function getArguments(dependencies, namespace) {
|
|
232
|
+
const values = getValues(namespace);
|
|
233
|
+
return dependencies.map((name) => values[name]);
|
|
234
|
+
}
|
|
235
|
+
async function onStateChange(changes) {
|
|
236
|
+
const realChanges = {};
|
|
237
|
+
for (const key in changes) {
|
|
238
|
+
const prevValue = STATE[key].value;
|
|
239
|
+
const newValue = changes[key].newValue;
|
|
240
|
+
if (prevValue !== newValue) {
|
|
241
|
+
realChanges[key] = { newValue, prevValue };
|
|
242
|
+
STATE[key].value = newValue;
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
realChanges[key] = { isSame: true };
|
|
246
|
+
}
|
|
247
|
+
updateDependencies(key, changes, realChanges);
|
|
248
|
+
}
|
|
249
|
+
await (0,_listeners__WEBPACK_IMPORTED_MODULE_5__.runStateChangeListeners)((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.filter)(realChanges, (k, v) => !v.isSame));
|
|
250
|
+
}
|
|
251
|
+
function updateDependencies(key, changes, realChanges) {
|
|
252
|
+
STATE[key].dependants?.forEach((name) => {
|
|
253
|
+
const { dependencies, namespace } = STATE[name];
|
|
254
|
+
if (!isEveryDependencyReady(dependencies, namespace, Object.keys(changes), Object.keys(realChanges)) ||
|
|
255
|
+
realChanges[name]) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
const prevValue = STATE[name].value;
|
|
259
|
+
const newValue = STATE[name].computeFn?.apply(null, getArguments(dependencies, namespace));
|
|
260
|
+
if (prevValue !== newValue) {
|
|
261
|
+
realChanges[name] = { newValue, prevValue };
|
|
262
|
+
STATE[name].value = newValue;
|
|
263
|
+
updateDependencies(name, changes, realChanges);
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
function isEveryDependencyReady(dependencies, namespace, changesKeys, realChangesKeys) {
|
|
268
|
+
return dependencies.every((name) => {
|
|
269
|
+
const fullKey = namespace(name);
|
|
270
|
+
return ((changesKeys.includes(fullKey) && realChangesKeys.includes(fullKey)) ||
|
|
271
|
+
!changesKeys.includes(fullKey));
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
function getState(namespace, arg) {
|
|
275
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isString)(arg)) {
|
|
276
|
+
return createStore(arg);
|
|
277
|
+
}
|
|
278
|
+
return (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.recreateStructure)(getValues(namespace));
|
|
279
|
+
}
|
|
280
|
+
async function setState(namespace, changes) {
|
|
281
|
+
const storageChanges = {};
|
|
282
|
+
(0,_helpers__WEBPACK_IMPORTED_MODULE_1__.forEach)(changes, (k, v) => {
|
|
283
|
+
const fullKey = namespace(k);
|
|
284
|
+
const { storageType, computeFn, isAction } = STATE[fullKey];
|
|
285
|
+
if (computeFn || isAction) {
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
if (!storageChanges[storageType]) {
|
|
289
|
+
storageChanges[storageType] = {};
|
|
290
|
+
}
|
|
291
|
+
storageChanges[storageType][fullKey] = v;
|
|
292
|
+
});
|
|
293
|
+
for (let [storageType, changes] of Object.entries(storageChanges)) {
|
|
294
|
+
await setValues(storageType, changes);
|
|
295
|
+
}
|
|
296
|
+
return createStore(namespace());
|
|
297
|
+
}
|
|
298
|
+
async function setValues(storageType, changes) {
|
|
299
|
+
if (STORAGE.IS_AVAILABE(storageType)) {
|
|
300
|
+
const isAutoUpdate = await STORAGE.SET_VALUES(storageType, changes);
|
|
301
|
+
if (isAutoUpdate) {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
onStateChange((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.map)(changes, (k, newValue) => [k, { newValue }]));
|
|
306
|
+
}
|
|
307
|
+
async function resetState(namespace, keys) {
|
|
308
|
+
const namespaceState = getNamespaceState(namespace);
|
|
309
|
+
await setState(namespace, (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.map)(keys
|
|
310
|
+
? (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.filter)(namespaceState, (k, { key }) => keys.includes(key))
|
|
311
|
+
: namespaceState, (k, { key, defaultValue }) => [key, defaultValue]));
|
|
312
|
+
return createStore(namespace());
|
|
313
|
+
}
|
|
314
|
+
function main(namespace) {
|
|
315
|
+
if (!arguments[1] || (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isString)(arguments[1])) {
|
|
316
|
+
return getState.apply(null, arguments);
|
|
317
|
+
}
|
|
318
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isArray)(arguments[1])) {
|
|
319
|
+
return _listeners__WEBPACK_IMPORTED_MODULE_5__.addStateListener.apply(null, arguments);
|
|
320
|
+
}
|
|
321
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isObject)(arguments[1])) {
|
|
322
|
+
return setState.apply(null, arguments);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
function setStorageUtils(storageUtils) {
|
|
326
|
+
Object.assign(STORAGE, storageUtils);
|
|
327
|
+
}
|
|
328
|
+
function addNamespace(namespace, str) {
|
|
329
|
+
return `${namespace}${((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isString)(str) && _constants__WEBPACK_IMPORTED_MODULE_3__.NAMESPACE_DELIMITER) || ""}${str || ""}`;
|
|
330
|
+
}
|
|
331
|
+
function createStore(_namespace) {
|
|
332
|
+
const namespace = ((key) => addNamespace(_namespace, key));
|
|
333
|
+
return Object.assign(main.bind(null, namespace), {
|
|
334
|
+
add: (state) => addState(namespace, state, false),
|
|
335
|
+
addPersistent: (state) => addState(namespace, state, true),
|
|
336
|
+
get: (newNamespace) => getState(namespace, newNamespace),
|
|
337
|
+
set: async (changes) => await setState(namespace, changes),
|
|
338
|
+
reset: (keys) => resetState(namespace, keys),
|
|
339
|
+
onChange: (keys, cb) => (0,_listeners__WEBPACK_IMPORTED_MODULE_5__.addStateListener)(namespace, keys, cb),
|
|
340
|
+
removeListener: (keys, cb) => (0,_listeners__WEBPACK_IMPORTED_MODULE_5__.removeStateListener)(namespace, keys, cb),
|
|
341
|
+
actions: (actions) => (0,_actions__WEBPACK_IMPORTED_MODULE_2__.addStateActions)(namespace, actions),
|
|
342
|
+
setStorageUtils,
|
|
343
|
+
onStateChange,
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createStore(""));
|
|
362
347
|
|
|
363
348
|
|
|
364
349
|
/***/ },
|
|
365
350
|
|
|
366
|
-
/***/ "./src/
|
|
351
|
+
/***/ "./src/listeners.ts"
|
|
367
352
|
/*!**************************!*\
|
|
368
|
-
!*** ./src/
|
|
353
|
+
!*** ./src/listeners.ts ***!
|
|
369
354
|
\**************************/
|
|
370
355
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
371
356
|
|
|
372
357
|
__webpack_require__.r(__webpack_exports__);
|
|
373
358
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
374
|
-
/* harmony export */
|
|
375
|
-
/* harmony export */
|
|
376
|
-
/* harmony export */
|
|
377
|
-
/* harmony export */
|
|
359
|
+
/* harmony export */ LISTENERS: () => (/* binding */ LISTENERS),
|
|
360
|
+
/* harmony export */ addStateListener: () => (/* binding */ addStateListener),
|
|
361
|
+
/* harmony export */ removeStateListener: () => (/* binding */ removeStateListener),
|
|
362
|
+
/* harmony export */ runStateChangeListeners: () => (/* binding */ runStateChangeListeners)
|
|
378
363
|
/* harmony export */ });
|
|
379
|
-
/* harmony import */ var
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
}
|
|
364
|
+
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! . */ "./src/index.ts");
|
|
365
|
+
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
|
|
366
|
+
/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ "./src/helpers.ts");
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
const LISTENERS = {};
|
|
371
|
+
async function runStateChangeListeners(realChanges) {
|
|
372
|
+
if (Object.keys(realChanges).length) {
|
|
373
|
+
const { namespace } = ___WEBPACK_IMPORTED_MODULE_0__.STATE[Object.keys(realChanges)[0]];
|
|
374
|
+
const stateValues = (0,___WEBPACK_IMPORTED_MODULE_0__.getValues)(namespace);
|
|
375
|
+
for (let [changeKey, change] of Object.entries(realChanges)) {
|
|
376
|
+
const { listeners, key } = ___WEBPACK_IMPORTED_MODULE_0__.STATE[changeKey];
|
|
377
|
+
for (const cb of listeners) {
|
|
378
|
+
await cb([key], stateValues, change);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
const readableKeys = (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(realChanges, (k) => k.slice(_constants__WEBPACK_IMPORTED_MODULE_1__.NAMESPACE_DELIMITER.length));
|
|
382
|
+
for (const cb of LISTENERS[namespace()]) {
|
|
383
|
+
await cb(readableKeys, stateValues, (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(realChanges, (k, v) => [
|
|
384
|
+
k.slice(_constants__WEBPACK_IMPORTED_MODULE_1__.NAMESPACE_DELIMITER.length),
|
|
385
|
+
v,
|
|
386
|
+
]));
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
function addStateListener(namespace, observables, cb) {
|
|
391
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isFunction)(observables)) {
|
|
392
|
+
LISTENERS[namespace()].push(observables);
|
|
393
|
+
return (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace());
|
|
394
|
+
}
|
|
395
|
+
observables.forEach((key) => ___WEBPACK_IMPORTED_MODULE_0__.STATE[namespace(key)].listeners?.push(cb));
|
|
396
|
+
return (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace());
|
|
397
|
+
}
|
|
398
|
+
function removeStateListener(namespace, observables, removeCb) {
|
|
399
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isFunction)(observables)) {
|
|
400
|
+
const removeIdx = LISTENERS[namespace()].findIndex((cb) => cb === observables);
|
|
401
|
+
LISTENERS[namespace()].splice(removeIdx, 1);
|
|
402
|
+
return (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace());
|
|
403
|
+
}
|
|
404
|
+
observables.forEach((key) => {
|
|
405
|
+
const listeners = ___WEBPACK_IMPORTED_MODULE_0__.STATE[namespace(key)].listeners;
|
|
406
|
+
const removeIdx = listeners?.findIndex((cb) => cb === removeCb);
|
|
407
|
+
listeners?.splice(removeIdx, 1);
|
|
408
|
+
});
|
|
409
|
+
return (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace());
|
|
410
|
+
}
|
|
413
411
|
|
|
414
412
|
|
|
415
413
|
/***/ },
|
|
416
414
|
|
|
417
|
-
/***/ "./src/storage.
|
|
415
|
+
/***/ "./src/storage.ts"
|
|
418
416
|
/*!************************!*\
|
|
419
|
-
!*** ./src/storage.
|
|
417
|
+
!*** ./src/storage.ts ***!
|
|
420
418
|
\************************/
|
|
421
419
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
422
420
|
|
|
@@ -424,44 +422,41 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
424
422
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
425
423
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
426
424
|
/* harmony export */ });
|
|
427
|
-
function updateFromLocalStorage(state) {
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
function
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
UPDATE_STATE: updateFromLocalStorage,
|
|
456
|
-
SET_VALUE: setStorageValue,
|
|
457
|
-
});
|
|
425
|
+
async function updateFromLocalStorage(state) {
|
|
426
|
+
const stored = {};
|
|
427
|
+
for (const key in state) {
|
|
428
|
+
const value = localStorage.getItem(key);
|
|
429
|
+
if (value !== null) {
|
|
430
|
+
stored[key] = value;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
return Object.assign(state, stored);
|
|
434
|
+
}
|
|
435
|
+
function getStorageType(isPersistent) {
|
|
436
|
+
return isPersistent ? "localStorage" : "";
|
|
437
|
+
}
|
|
438
|
+
function isStorageAvailable(storageType) {
|
|
439
|
+
return !!storageType;
|
|
440
|
+
}
|
|
441
|
+
async function setStorageValue(storageType, changes) {
|
|
442
|
+
for (let [k, v] of Object.entries(changes)) {
|
|
443
|
+
localStorage.setItem(k, v);
|
|
444
|
+
}
|
|
445
|
+
return false;
|
|
446
|
+
}
|
|
447
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
|
|
448
|
+
GET_TYPE: getStorageType,
|
|
449
|
+
IS_AVAILABE: isStorageAvailable,
|
|
450
|
+
UPDATE_STATE: updateFromLocalStorage,
|
|
451
|
+
SET_VALUES: setStorageValue,
|
|
452
|
+
});
|
|
458
453
|
|
|
459
454
|
|
|
460
455
|
/***/ },
|
|
461
456
|
|
|
462
|
-
/***/ "./src/validation.
|
|
457
|
+
/***/ "./src/validation.ts"
|
|
463
458
|
/*!***************************!*\
|
|
464
|
-
!*** ./src/validation.
|
|
459
|
+
!*** ./src/validation.ts ***!
|
|
465
460
|
\***************************/
|
|
466
461
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
467
462
|
|
|
@@ -469,36 +464,30 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
469
464
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
470
465
|
/* harmony export */ isValid: () => (/* binding */ isValid)
|
|
471
466
|
/* harmony export */ });
|
|
472
|
-
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! . */ "./src/index.
|
|
473
|
-
/* harmony import */ var
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
return true;
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
};
|
|
467
|
+
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! . */ "./src/index.ts");
|
|
468
|
+
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
function splitFullKey(fullKey) {
|
|
472
|
+
const segments = fullKey.split(_constants__WEBPACK_IMPORTED_MODULE_1__.NAMESPACE_DELIMITER);
|
|
473
|
+
return [segments.slice(-1)[0], segments.join(_constants__WEBPACK_IMPORTED_MODULE_1__.NAMESPACE_DELIMITER)];
|
|
474
|
+
}
|
|
475
|
+
const isValid = {
|
|
476
|
+
Setting: (fullKey) => {
|
|
477
|
+
if (!___WEBPACK_IMPORTED_MODULE_0__.STATE[fullKey]) {
|
|
478
|
+
const [key, namespace] = splitFullKey(fullKey);
|
|
479
|
+
throw new Error(`Setting "${key}" key in "${namespace}" namespace. DOES NOT EXIST`);
|
|
480
|
+
}
|
|
481
|
+
return true;
|
|
482
|
+
},
|
|
483
|
+
Defining: (fullKey) => {
|
|
484
|
+
if (___WEBPACK_IMPORTED_MODULE_0__.STATE[fullKey]) {
|
|
485
|
+
const [key, namespace] = splitFullKey(fullKey);
|
|
486
|
+
throw new Error(`Redefining "${key}" key in "${namespace}" namespace. ALREADY DEFINED`);
|
|
487
|
+
}
|
|
488
|
+
return true;
|
|
489
|
+
},
|
|
490
|
+
};
|
|
502
491
|
|
|
503
492
|
|
|
504
493
|
/***/ }
|
|
@@ -584,7 +573,7 @@ const isValid = {
|
|
|
584
573
|
/******/ // startup
|
|
585
574
|
/******/ // Load entry module and return exports
|
|
586
575
|
/******/ // This entry module is referenced by other modules so it can't be inlined
|
|
587
|
-
/******/ let __webpack_exports__ = __webpack_require__("./src/index.
|
|
576
|
+
/******/ let __webpack_exports__ = __webpack_require__("./src/index.ts");
|
|
588
577
|
/******/ __webpack_exports__ = __webpack_exports__["default"];
|
|
589
578
|
/******/
|
|
590
579
|
/******/ return __webpack_exports__;
|