varstor 0.6.64 → 0.6.66
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 +44 -12
- package/dist/varstor-webextension.js +123 -70
- package/dist/varstor-webextension.min.js +1 -1
- package/dist/varstor.js +126 -71
- package/dist/varstor.min.js +1 -1
- package/package.json +3 -1
- package/src/actions.ts +7 -9
- package/src/helpers.ts +1 -1
- package/src/index.ts +75 -30
- package/src/listeners.ts +19 -20
- package/src/storage.ts +3 -1
- package/src/types.d.ts +38 -11
- package/src/webextension-storage.ts +2 -0
- package/webpack.config.js +6 -2
package/dist/varstor.js
CHANGED
|
@@ -9,36 +9,45 @@
|
|
|
9
9
|
root["Varstor"] = factory();
|
|
10
10
|
})(this, () => {
|
|
11
11
|
return /******/ (() => { // webpackBootstrap
|
|
12
|
-
/******/ "use strict";
|
|
13
12
|
/******/ var __webpack_modules__ = ({
|
|
14
13
|
|
|
14
|
+
/***/ "./src/types.d.ts"
|
|
15
|
+
/*!************************!*\
|
|
16
|
+
!*** ./src/types.d.ts ***!
|
|
17
|
+
\************************/
|
|
18
|
+
() {
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
/***/ },
|
|
23
|
+
|
|
15
24
|
/***/ "./src/actions.ts"
|
|
16
25
|
/*!************************!*\
|
|
17
26
|
!*** ./src/actions.ts ***!
|
|
18
27
|
\************************/
|
|
19
28
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
20
29
|
|
|
30
|
+
"use strict";
|
|
21
31
|
__webpack_require__.r(__webpack_exports__);
|
|
22
32
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
23
33
|
/* harmony export */ addStateActions: () => (/* binding */ addStateActions)
|
|
24
34
|
/* harmony export */ });
|
|
25
|
-
/* harmony import */ var
|
|
35
|
+
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types */ "./src/types.d.ts");
|
|
36
|
+
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_types__WEBPACK_IMPORTED_MODULE_0__);
|
|
37
|
+
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! . */ "./src/index.ts");
|
|
38
|
+
|
|
26
39
|
|
|
27
40
|
function addStateActions(namespace, actions) {
|
|
28
|
-
const
|
|
29
|
-
|
|
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)] = {
|
|
41
|
+
for (const [actionName, actionFn] of Object.entries(actions)) {
|
|
42
|
+
___WEBPACK_IMPORTED_MODULE_1__.STATE[namespace(actionName)] = {
|
|
35
43
|
key: actionName,
|
|
36
44
|
namespace,
|
|
37
|
-
value: actionFn.bind(null,
|
|
45
|
+
value: actionFn.bind(null, (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace())),
|
|
38
46
|
isAction: true,
|
|
39
47
|
listeners: [],
|
|
40
48
|
};
|
|
41
49
|
}
|
|
50
|
+
return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
|
|
42
51
|
}
|
|
43
52
|
|
|
44
53
|
|
|
@@ -50,6 +59,7 @@ function addStateActions(namespace, actions) {
|
|
|
50
59
|
\**************************/
|
|
51
60
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
52
61
|
|
|
62
|
+
"use strict";
|
|
53
63
|
__webpack_require__.r(__webpack_exports__);
|
|
54
64
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
55
65
|
/* harmony export */ NAMESPACE_DELIMITER: () => (/* binding */ NAMESPACE_DELIMITER)
|
|
@@ -65,6 +75,7 @@ const NAMESPACE_DELIMITER = "::";
|
|
|
65
75
|
\************************/
|
|
66
76
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
67
77
|
|
|
78
|
+
"use strict";
|
|
68
79
|
__webpack_require__.r(__webpack_exports__);
|
|
69
80
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
70
81
|
/* harmony export */ filter: () => (/* binding */ filter),
|
|
@@ -151,9 +162,11 @@ function uid() {
|
|
|
151
162
|
\**********************/
|
|
152
163
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
153
164
|
|
|
165
|
+
"use strict";
|
|
154
166
|
__webpack_require__.r(__webpack_exports__);
|
|
155
167
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
156
168
|
/* harmony export */ STATE: () => (/* binding */ STATE),
|
|
169
|
+
/* harmony export */ createPendingChanges: () => (/* binding */ createPendingChanges),
|
|
157
170
|
/* harmony export */ createStore: () => (/* binding */ createStore),
|
|
158
171
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
159
172
|
/* harmony export */ getState: () => (/* binding */ getState),
|
|
@@ -163,30 +176,31 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
163
176
|
/* harmony export */ setState: () => (/* binding */ setState),
|
|
164
177
|
/* harmony export */ setupValue: () => (/* binding */ setupValue)
|
|
165
178
|
/* harmony export */ });
|
|
166
|
-
/* harmony import */ var
|
|
167
|
-
/* harmony import */ var
|
|
168
|
-
/* harmony import */ var
|
|
169
|
-
/* harmony import */ var
|
|
170
|
-
/* harmony import */ var
|
|
179
|
+
/* harmony import */ var _types_d__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types.d */ "./src/types.d.ts");
|
|
180
|
+
/* harmony import */ var _types_d__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_types_d__WEBPACK_IMPORTED_MODULE_0__);
|
|
181
|
+
/* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./storage */ "./src/storage.ts");
|
|
182
|
+
/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ "./src/helpers.ts");
|
|
183
|
+
/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions */ "./src/actions.ts");
|
|
184
|
+
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
|
|
185
|
+
/* harmony import */ var _listeners__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./listeners */ "./src/listeners.ts");
|
|
186
|
+
|
|
171
187
|
|
|
172
188
|
|
|
173
189
|
|
|
174
190
|
|
|
175
191
|
|
|
176
192
|
const STATE = {};
|
|
177
|
-
const
|
|
193
|
+
const STATE_CHANGED_PIECES = {};
|
|
194
|
+
const STATE_PENDING_CHANGES = {};
|
|
178
195
|
const STORAGE = {};
|
|
179
|
-
setStorageUtils(
|
|
196
|
+
setStorageUtils(_storage__WEBPACK_IMPORTED_MODULE_1__["default"]);
|
|
180
197
|
async function addState(namespace, initialState, isPersistent) {
|
|
181
198
|
const storageType = STORAGE.GET_TYPE(isPersistent);
|
|
182
199
|
const defaultValues = Object.assign({}, initialState);
|
|
183
|
-
const values = (0,
|
|
200
|
+
const values = (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(initialState, (k, v) => [namespace(k), v]);
|
|
184
201
|
if (STORAGE.IS_AVAILABE(storageType)) {
|
|
185
202
|
await STORAGE.UPDATE_STATE(values, storageType);
|
|
186
203
|
}
|
|
187
|
-
if (!_listeners__WEBPACK_IMPORTED_MODULE_4__.LISTENERS[namespace()]) {
|
|
188
|
-
_listeners__WEBPACK_IMPORTED_MODULE_4__.LISTENERS[namespace()] = [];
|
|
189
|
-
}
|
|
190
204
|
for (const key in initialState) {
|
|
191
205
|
const fullKey = namespace(key);
|
|
192
206
|
STATE[fullKey] = setupValue(key, namespace, values[fullKey], defaultValues[key], storageType);
|
|
@@ -195,9 +209,9 @@ async function addState(namespace, initialState, isPersistent) {
|
|
|
195
209
|
}
|
|
196
210
|
function setupValue(key, namespace, value, defaultValue, storageType) {
|
|
197
211
|
const fullKey = namespace(key);
|
|
198
|
-
const isComputedValue = (0,
|
|
212
|
+
const isComputedValue = (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isFunction)(value);
|
|
199
213
|
const dependencies = isComputedValue
|
|
200
|
-
? (0,
|
|
214
|
+
? (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.getParamNames)(value)
|
|
201
215
|
: [];
|
|
202
216
|
dependencies.forEach((dependency) => {
|
|
203
217
|
const fullDependencyKey = namespace(dependency);
|
|
@@ -227,10 +241,10 @@ function setupValue(key, namespace, value, defaultValue, storageType) {
|
|
|
227
241
|
};
|
|
228
242
|
}
|
|
229
243
|
function getNamespaceState(namespace) {
|
|
230
|
-
return (0,
|
|
244
|
+
return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.filter)(STATE, (k, { key }) => k === namespace(key));
|
|
231
245
|
}
|
|
232
246
|
function getValues(namespace) {
|
|
233
|
-
return (0,
|
|
247
|
+
return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(getNamespaceState(namespace), (k, { key, value }) => [
|
|
234
248
|
key,
|
|
235
249
|
value,
|
|
236
250
|
]);
|
|
@@ -240,7 +254,7 @@ function getArguments(dependencies, namespace) {
|
|
|
240
254
|
return dependencies.map((name) => values[name]);
|
|
241
255
|
}
|
|
242
256
|
async function joinStateChanges(changesPiece) {
|
|
243
|
-
for (const [updateId, { storageTypes, readyStorageTypes, changes },] of Object.entries(
|
|
257
|
+
for (const [updateId, { storageTypes, readyStorageTypes, changes },] of Object.entries(STATE_CHANGED_PIECES)) {
|
|
244
258
|
if (changesPiece[updateId]) {
|
|
245
259
|
const storageType = changesPiece[updateId].newValue;
|
|
246
260
|
readyStorageTypes[storageType] = true;
|
|
@@ -254,7 +268,7 @@ async function joinStateChanges(changesPiece) {
|
|
|
254
268
|
return;
|
|
255
269
|
}
|
|
256
270
|
}
|
|
257
|
-
delete
|
|
271
|
+
delete STATE_CHANGED_PIECES[updateId];
|
|
258
272
|
await onStateChange(changes);
|
|
259
273
|
}
|
|
260
274
|
}
|
|
@@ -273,7 +287,7 @@ async function onStateChange(changes) {
|
|
|
273
287
|
}
|
|
274
288
|
updateDependencies(key, changes, realChanges);
|
|
275
289
|
}
|
|
276
|
-
await (0,
|
|
290
|
+
await (0,_listeners__WEBPACK_IMPORTED_MODULE_5__.runStateChangeListeners)((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.filter)(realChanges, (k, v) => !v.isSame));
|
|
277
291
|
}
|
|
278
292
|
function updateDependencies(key, changes, realChanges) {
|
|
279
293
|
STATE[key].dependants?.forEach((name) => {
|
|
@@ -299,16 +313,16 @@ function isEveryDependencyReady(dependencies, namespace, changesKeys, realChange
|
|
|
299
313
|
});
|
|
300
314
|
}
|
|
301
315
|
function getState(namespace, arg) {
|
|
302
|
-
if ((0,
|
|
316
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isString)(arg)) {
|
|
303
317
|
return createStore(arg);
|
|
304
318
|
}
|
|
305
|
-
return (0,
|
|
319
|
+
return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.recreateStructure)(getValues(namespace));
|
|
306
320
|
}
|
|
307
321
|
async function setState(namespace, changes) {
|
|
308
322
|
const storageChanges = {};
|
|
309
|
-
const updateId = (0,
|
|
323
|
+
const updateId = (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.uid)();
|
|
310
324
|
const storageTypes = {};
|
|
311
|
-
(0,
|
|
325
|
+
(0,_helpers__WEBPACK_IMPORTED_MODULE_2__.forEach)(changes, (k, v) => {
|
|
312
326
|
const fullKey = namespace(k);
|
|
313
327
|
const { storageType, computeFn, isAction } = STATE[fullKey];
|
|
314
328
|
if (computeFn || isAction) {
|
|
@@ -320,7 +334,7 @@ async function setState(namespace, changes) {
|
|
|
320
334
|
storageTypes[storageType] = true;
|
|
321
335
|
storageChanges[storageType][fullKey] = v;
|
|
322
336
|
});
|
|
323
|
-
|
|
337
|
+
STATE_CHANGED_PIECES[updateId] = {
|
|
324
338
|
storageTypes,
|
|
325
339
|
readyStorageTypes: {},
|
|
326
340
|
changes: {},
|
|
@@ -337,23 +351,41 @@ async function setValues(storageType, changes) {
|
|
|
337
351
|
return;
|
|
338
352
|
}
|
|
339
353
|
}
|
|
340
|
-
joinStateChanges((0,
|
|
354
|
+
joinStateChanges((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(changes, (k, newValue) => [k, { newValue }]));
|
|
341
355
|
}
|
|
342
356
|
async function resetState(namespace, keys) {
|
|
357
|
+
return setState(namespace, getDefaultValues(namespace, keys));
|
|
358
|
+
}
|
|
359
|
+
function getDefaultValues(namespace, keys) {
|
|
343
360
|
const namespaceState = getNamespaceState(namespace);
|
|
344
|
-
|
|
345
|
-
? (0,
|
|
346
|
-
: namespaceState, (k, { key, defaultValue }) => [key, defaultValue])
|
|
347
|
-
|
|
361
|
+
return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(keys
|
|
362
|
+
? (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.filter)(namespaceState, (k, { key }) => keys.includes(key))
|
|
363
|
+
: namespaceState, (k, { key, defaultValue }) => [key, defaultValue]);
|
|
364
|
+
}
|
|
365
|
+
function createPendingChanges(namespace) {
|
|
366
|
+
const flush = () => {
|
|
367
|
+
const changes = STATE_PENDING_CHANGES[namespace()];
|
|
368
|
+
STATE_PENDING_CHANGES[namespace()] = {};
|
|
369
|
+
return changes;
|
|
370
|
+
};
|
|
371
|
+
return {
|
|
372
|
+
add: (changes) => Object.assign(STATE_PENDING_CHANGES[namespace()], changes),
|
|
373
|
+
reset: (keys) => Object.assign(STATE_PENDING_CHANGES[namespace()], getDefaultValues(namespace, keys)),
|
|
374
|
+
get: () => STATE_PENDING_CHANGES[namespace()],
|
|
375
|
+
flush,
|
|
376
|
+
commit: () => setState(namespace, flush()),
|
|
377
|
+
};
|
|
348
378
|
}
|
|
349
379
|
function main(namespace) {
|
|
350
|
-
if (!arguments[1] || (0,
|
|
380
|
+
if (!arguments[1] || (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isString)(arguments[1])) {
|
|
351
381
|
return getState.apply(null, arguments);
|
|
352
382
|
}
|
|
353
|
-
if ((0,
|
|
354
|
-
|
|
383
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isArray)(arguments[1]) ||
|
|
384
|
+
(0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isFunction)(arguments[1]) ||
|
|
385
|
+
(0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isAsyncFunction)(arguments[1])) {
|
|
386
|
+
return _listeners__WEBPACK_IMPORTED_MODULE_5__.addStateListener.apply(null, arguments);
|
|
355
387
|
}
|
|
356
|
-
if ((0,
|
|
388
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isObject)(arguments[1])) {
|
|
357
389
|
return setState.apply(null, arguments);
|
|
358
390
|
}
|
|
359
391
|
}
|
|
@@ -361,19 +393,26 @@ function setStorageUtils(storageUtils) {
|
|
|
361
393
|
Object.assign(STORAGE, storageUtils);
|
|
362
394
|
}
|
|
363
395
|
function addNamespace(namespace, str) {
|
|
364
|
-
return `${namespace}${((0,
|
|
396
|
+
return `${namespace}${((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isString)(str) && _constants__WEBPACK_IMPORTED_MODULE_4__.NAMESPACE_DELIMITER) || ""}${str || ""}`;
|
|
365
397
|
}
|
|
366
398
|
function createStore(_namespace) {
|
|
367
399
|
const namespace = ((key) => addNamespace(_namespace, key));
|
|
400
|
+
if (!STATE_PENDING_CHANGES[namespace()]) {
|
|
401
|
+
STATE_PENDING_CHANGES[namespace()] = {};
|
|
402
|
+
}
|
|
403
|
+
if (!_listeners__WEBPACK_IMPORTED_MODULE_5__.LISTENERS[namespace()]) {
|
|
404
|
+
_listeners__WEBPACK_IMPORTED_MODULE_5__.LISTENERS[namespace()] = [];
|
|
405
|
+
}
|
|
368
406
|
return Object.assign(main.bind(null, namespace), {
|
|
369
407
|
add: (state) => addState(namespace, state, false),
|
|
370
408
|
addPersistent: (state) => addState(namespace, state, true),
|
|
371
409
|
get: (newNamespace) => getState(namespace, newNamespace),
|
|
372
|
-
set:
|
|
410
|
+
set: (changes) => setState(namespace, changes),
|
|
373
411
|
reset: (keys) => resetState(namespace, keys),
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
412
|
+
changes: createPendingChanges(namespace),
|
|
413
|
+
onChange: (keys, cb) => (0,_listeners__WEBPACK_IMPORTED_MODULE_5__.addStateListener)(namespace, keys, cb),
|
|
414
|
+
removeListener: (keys, cb) => (0,_listeners__WEBPACK_IMPORTED_MODULE_5__.removeStateListener)(namespace, keys, cb),
|
|
415
|
+
actions: (actions) => (0,_actions__WEBPACK_IMPORTED_MODULE_3__.addStateActions)(namespace, actions),
|
|
377
416
|
setStorageUtils,
|
|
378
417
|
joinStateChanges,
|
|
379
418
|
namespace,
|
|
@@ -390,6 +429,7 @@ function createStore(_namespace) {
|
|
|
390
429
|
\**************************/
|
|
391
430
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
392
431
|
|
|
432
|
+
"use strict";
|
|
393
433
|
__webpack_require__.r(__webpack_exports__);
|
|
394
434
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
395
435
|
/* harmony export */ LISTENERS: () => (/* binding */ LISTENERS),
|
|
@@ -397,22 +437,24 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
397
437
|
/* harmony export */ removeStateListener: () => (/* binding */ removeStateListener),
|
|
398
438
|
/* harmony export */ runStateChangeListeners: () => (/* binding */ runStateChangeListeners)
|
|
399
439
|
/* harmony export */ });
|
|
400
|
-
/* harmony import */ var
|
|
401
|
-
/* harmony import */ var
|
|
402
|
-
/* harmony import */ var
|
|
440
|
+
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types */ "./src/types.d.ts");
|
|
441
|
+
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_types__WEBPACK_IMPORTED_MODULE_0__);
|
|
442
|
+
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! . */ "./src/index.ts");
|
|
443
|
+
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
|
|
444
|
+
/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ "./src/helpers.ts");
|
|
445
|
+
|
|
403
446
|
|
|
404
447
|
|
|
405
448
|
|
|
406
449
|
const LISTENERS = {};
|
|
407
450
|
async function runStateChangeListeners(realChanges) {
|
|
408
451
|
if (Object.keys(realChanges).length) {
|
|
409
|
-
const { namespace } =
|
|
410
|
-
const
|
|
411
|
-
|
|
412
|
-
const { listeners, key } = ___WEBPACK_IMPORTED_MODULE_0__.STATE[changeKey];
|
|
452
|
+
const { namespace } = ___WEBPACK_IMPORTED_MODULE_1__.STATE[Object.keys(realChanges)[0]];
|
|
453
|
+
for (const [changeKey] of Object.entries(realChanges)) {
|
|
454
|
+
const { listeners, key } = ___WEBPACK_IMPORTED_MODULE_1__.STATE[changeKey];
|
|
413
455
|
for (const cb of listeners) {
|
|
414
|
-
const fn = cb.bind(null, [key],
|
|
415
|
-
if ((0,
|
|
456
|
+
const fn = cb.bind(null, [key], (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace()));
|
|
457
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isAsyncFunction)(cb)) {
|
|
416
458
|
await fn();
|
|
417
459
|
}
|
|
418
460
|
else {
|
|
@@ -420,14 +462,11 @@ async function runStateChangeListeners(realChanges) {
|
|
|
420
462
|
}
|
|
421
463
|
}
|
|
422
464
|
}
|
|
423
|
-
const namespaceLength = `${namespace()}${
|
|
424
|
-
const readableKeys = (0,
|
|
465
|
+
const namespaceLength = `${namespace()}${_constants__WEBPACK_IMPORTED_MODULE_2__.NAMESPACE_DELIMITER}`.length;
|
|
466
|
+
const readableKeys = (0,_helpers__WEBPACK_IMPORTED_MODULE_3__.map)(realChanges, (k) => k.slice(namespaceLength));
|
|
425
467
|
for (const cb of LISTENERS[namespace()]) {
|
|
426
|
-
const fn = cb.bind(null, readableKeys,
|
|
427
|
-
|
|
428
|
-
v,
|
|
429
|
-
]));
|
|
430
|
-
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isAsyncFunction)(cb)) {
|
|
468
|
+
const fn = cb.bind(null, readableKeys, (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace()));
|
|
469
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isAsyncFunction)(cb)) {
|
|
431
470
|
await fn();
|
|
432
471
|
}
|
|
433
472
|
else {
|
|
@@ -437,25 +476,25 @@ async function runStateChangeListeners(realChanges) {
|
|
|
437
476
|
}
|
|
438
477
|
}
|
|
439
478
|
function addStateListener(namespace, observables, cb) {
|
|
440
|
-
if ((0,
|
|
479
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isFunction)(observables) || (0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isAsyncFunction)(observables)) {
|
|
441
480
|
LISTENERS[namespace()].push(observables);
|
|
442
|
-
return (0,
|
|
481
|
+
return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
|
|
443
482
|
}
|
|
444
|
-
observables.forEach((key) =>
|
|
445
|
-
return (0,
|
|
483
|
+
observables.forEach((key) => ___WEBPACK_IMPORTED_MODULE_1__.STATE[namespace(key)].listeners?.push(cb));
|
|
484
|
+
return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
|
|
446
485
|
}
|
|
447
486
|
function removeStateListener(namespace, observables, removeCb) {
|
|
448
|
-
if ((0,
|
|
487
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isFunction)(observables) || (0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isAsyncFunction)(observables)) {
|
|
449
488
|
const removeIdx = LISTENERS[namespace()].findIndex((cb) => cb === observables);
|
|
450
489
|
LISTENERS[namespace()].splice(removeIdx, 1);
|
|
451
|
-
return (0,
|
|
490
|
+
return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
|
|
452
491
|
}
|
|
453
492
|
observables.forEach((key) => {
|
|
454
|
-
const listeners =
|
|
493
|
+
const listeners = ___WEBPACK_IMPORTED_MODULE_1__.STATE[namespace(key)].listeners;
|
|
455
494
|
const removeIdx = listeners?.findIndex((cb) => cb === removeCb);
|
|
456
495
|
listeners?.splice(removeIdx, 1);
|
|
457
496
|
});
|
|
458
|
-
return (0,
|
|
497
|
+
return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
|
|
459
498
|
}
|
|
460
499
|
|
|
461
500
|
|
|
@@ -467,10 +506,14 @@ function removeStateListener(namespace, observables, removeCb) {
|
|
|
467
506
|
\************************/
|
|
468
507
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
469
508
|
|
|
509
|
+
"use strict";
|
|
470
510
|
__webpack_require__.r(__webpack_exports__);
|
|
471
511
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
472
512
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
473
513
|
/* harmony export */ });
|
|
514
|
+
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types */ "./src/types.d.ts");
|
|
515
|
+
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_types__WEBPACK_IMPORTED_MODULE_0__);
|
|
516
|
+
|
|
474
517
|
async function updateFromLocalStorage(state) {
|
|
475
518
|
const stored = {};
|
|
476
519
|
for (const key in state) {
|
|
@@ -542,6 +585,18 @@ function removeStorageKey(type, key) {
|
|
|
542
585
|
/******/ }
|
|
543
586
|
/******/
|
|
544
587
|
/************************************************************************/
|
|
588
|
+
/******/ /* webpack/runtime/compat get default export */
|
|
589
|
+
/******/ (() => {
|
|
590
|
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
591
|
+
/******/ __webpack_require__.n = (module) => {
|
|
592
|
+
/******/ const getter = module && module.__esModule ?
|
|
593
|
+
/******/ () => (module['default']) :
|
|
594
|
+
/******/ () => (module);
|
|
595
|
+
/******/ __webpack_require__.d(getter, { a: getter });
|
|
596
|
+
/******/ return getter;
|
|
597
|
+
/******/ };
|
|
598
|
+
/******/ })();
|
|
599
|
+
/******/
|
|
545
600
|
/******/ /* webpack/runtime/define property getters */
|
|
546
601
|
/******/ (() => {
|
|
547
602
|
/******/ // define getter/value functions for harmony exports
|
package/dist/varstor.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see varstor.min.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Varstor=t():e.Varstor=t()}(this,()=>(()=>{
|
|
2
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Varstor=t():e.Varstor=t()}(this,()=>(()=>{var e={"./src/types.d.ts"(){},"./src/actions.ts"(e,t,n){"use strict";n.r(t),n.d(t,{addStateActions:()=>s});n("./src/types.d.ts");var r=n("./src/index.ts");function s(e,t){for(const[n,s]of Object.entries(t))r.STATE[e(n)]={key:n,namespace:e,value:s.bind(null,(0,r.createStore)(e())),isAction:!0,listeners:[]};return(0,r.createStore)(e())}},"./src/constants.ts"(e,t,n){"use strict";n.r(t),n.d(t,{NAMESPACE_DELIMITER:()=>r});const r="::"},"./src/helpers.ts"(e,t,n){"use strict";n.r(t),n.d(t,{filter:()=>S,forEach:()=>p,getParamNames:()=>f,isArray:()=>c,isAsyncFunction:()=>a,isFunction:()=>i,isObject:()=>u,isString:()=>o,map:()=>d,recreateStructure:()=>y,uid:()=>g});const r=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,s=/([^\s,]+)/g;function c(e){return"[object Array]"===l(e)}function o(e){return"[object String]"===l(e)}function i(e){return"[object Function]"===l(e)}function a(e){return"[object AsyncFunction]"===l(e)}function u(e){return"[object Object]"===l(e)}function l(e){return Object.prototype.toString.call(e)}function f(e){const t=e.toString().replace(r,"").split("=>")[0],n=t.slice(t.indexOf("(")+1,t.indexOf(")")).match(s);return null===n?[]:n}function d(e,t){const n=Object.entries(e).map(([e,n])=>t(e,n));return 2===n[0]?.length?Object.fromEntries(n):n}function p(e,t){Object.entries(e||{}).forEach(([e,n])=>t(e,n))}function S(e,t){return Object.fromEntries(Object.entries(e||{}).filter(([e,n])=>!0===t(e,n)))}function y(e){let t=e;if(c(e))return t=[],e.forEach(e=>t.push(y(e))),t;if(u(e)){t={};for(let n in e)t[n]=y(e[n]);return t}return t}function g(){return Date.now().toString(36)+Math.random().toString(36).substr(2)}},"./src/index.ts"(e,t,n){"use strict";n.r(t),n.d(t,{STATE:()=>a,createPendingChanges:()=>v,createStore:()=>V,default:()=>_,getState:()=>A,getValues:()=>y,joinStateChanges:()=>E,resetState:()=>O,setState:()=>j,setupValue:()=>p});n("./src/types.d.ts");var r=n("./src/storage.ts"),s=n("./src/helpers.ts"),c=n("./src/actions.ts"),o=n("./src/constants.ts"),i=n("./src/listeners.ts");const a={},u={},l={},f={};async function d(e,t,n){const r=f.GET_TYPE(n),c=Object.assign({},t),o=(0,s.map)(t,(t,n)=>[e(t),n]);f.IS_AVAILABE(r)&&await f.UPDATE_STATE(o,r);for(const n in t){const t=e(n);a[t]=p(n,e,o[t],c[n],r)}return V(e())}function p(e,t,n,r,c){const o=t(e),i=(0,s.isFunction)(n),u=i?(0,s.getParamNames)(n):[];return u.forEach(e=>{const n=t(e);a[n]||(a[n]={dependants:[],dependencies:[],namespace:t,storageType:c}),a[n].dependants?.push(o)}),{key:e,fullKey:o,value:i?n.apply(null,g(u,t)):n,computeFn:i&&n,dependencies:u,dependants:[],listeners:[],defaultValue:r,storageType:c,namespace:t}}function S(e){return(0,s.filter)(a,(t,{key:n})=>t===e(n))}function y(e){return(0,s.map)(S(e),(e,{key:t,value:n})=>[t,n])}function g(e,t){const n=y(t);return e.map(e=>n[e])}async function E(e){for(const[t,{storageTypes:n,readyStorageTypes:r,changes:s}]of Object.entries(u))if(e[t]){const c=e[t].newValue;r[c]=!0,delete e[t],Object.assign(s,e),f.IS_AVAILABE(c)&&f.REMOVE_KEY(c,t);for(const e in n)if(!r[e])return;delete u[t],await b(s)}}async function b(e){const t={};for(const n in e){const r=a[n].value,s=e[n].newValue;r!==s?(t[n]={newValue:s,prevValue:r},a[n].value=s):t[n]={isSame:!0},m(n,e,t)}await(0,i.runStateChangeListeners)((0,s.filter)(t,(e,t)=>!t.isSame))}function m(e,t,n){a[e].dependants?.forEach(e=>{const{dependencies:r,namespace:s}=a[e];if(!function(e,t,n,r){return e.every(e=>{const s=t(e);return n.includes(s)&&r.includes(s)||!n.includes(s)})}(r,s,Object.keys(t),Object.keys(n))||n[e])return;const c=a[e].value,o=a[e].computeFn?.apply(null,g(r,s));c!==o&&(n[e]={newValue:o,prevValue:c},a[e].value=o,m(e,t,n))})}function A(e,t){return(0,s.isString)(t)?V(t):(0,s.recreateStructure)(y(e))}async function j(e,t){const n={},r=(0,s.uid)(),c={};(0,s.forEach)(t,(t,r)=>{const s=e(t),{storageType:o,computeFn:i,isAction:u}=a[s];i||u||(n[o]||(n[o]={}),c[o]=!0,n[o][s]=r)}),u[r]={storageTypes:c,readyStorageTypes:{},changes:{}};for(let[e,t]of Object.entries(n))await T(e,{...t,[r]:e});return V(e())}async function T(e,t){if(f.IS_AVAILABE(e)){if(await f.SET_VALUES(e,t))return}E((0,s.map)(t,(e,t)=>[e,{newValue:t}]))}async function O(e,t){return j(e,h(e,t))}function h(e,t){const n=S(e);return(0,s.map)(t?(0,s.filter)(n,(e,{key:n})=>t.includes(n)):n,(e,{key:t,defaultValue:n})=>[t,n])}function v(e){const t=()=>{const t=l[e()];return l[e()]={},t};return{add:t=>Object.assign(l[e()],t),reset:t=>Object.assign(l[e()],h(e,t)),get:()=>l[e()],flush:t,commit:()=>j(e,t())}}function I(e){return!arguments[1]||(0,s.isString)(arguments[1])?A.apply(null,arguments):(0,s.isArray)(arguments[1])||(0,s.isFunction)(arguments[1])||(0,s.isAsyncFunction)(arguments[1])?i.addStateListener.apply(null,arguments):(0,s.isObject)(arguments[1])?j.apply(null,arguments):void 0}function L(e){Object.assign(f,e)}function V(e){const t=t=>function(e,t){return`${e}${(0,s.isString)(t)&&o.NAMESPACE_DELIMITER||""}${t||""}`}(e,t);return l[t()]||(l[t()]={}),i.LISTENERS[t()]||(i.LISTENERS[t()]=[]),Object.assign(I.bind(null,t),{add:e=>d(t,e,!1),addPersistent:e=>d(t,e,!0),get:e=>A(t,e),set:e=>j(t,e),reset:e=>O(t,e),changes:v(t),onChange:(e,n)=>(0,i.addStateListener)(t,e,n),removeListener:(e,n)=>(0,i.removeStateListener)(t,e,n),actions:e=>(0,c.addStateActions)(t,e),setStorageUtils:L,joinStateChanges:E,namespace:t})}L(r.default);const _=V("")},"./src/listeners.ts"(e,t,n){"use strict";n.r(t),n.d(t,{LISTENERS:()=>o,addStateListener:()=>a,removeStateListener:()=>u,runStateChangeListeners:()=>i});n("./src/types.d.ts");var r=n("./src/index.ts"),s=n("./src/constants.ts"),c=n("./src/helpers.ts");const o={};async function i(e){if(Object.keys(e).length){const{namespace:t}=r.STATE[Object.keys(e)[0]];for(const[n]of Object.entries(e)){const{listeners:e,key:s}=r.STATE[n];for(const n of e){const e=n.bind(null,[s],(0,r.createStore)(t()));(0,c.isAsyncFunction)(n)?await e():e()}}const n=`${t()}${s.NAMESPACE_DELIMITER}`.length,i=(0,c.map)(e,e=>e.slice(n));for(const e of o[t()]){const n=e.bind(null,i,(0,r.createStore)(t()));(0,c.isAsyncFunction)(e)?await n():n()}}}function a(e,t,n){return(0,c.isFunction)(t)||(0,c.isAsyncFunction)(t)?(o[e()].push(t),(0,r.createStore)(e())):(t.forEach(t=>r.STATE[e(t)].listeners?.push(n)),(0,r.createStore)(e()))}function u(e,t,n){if((0,c.isFunction)(t)||(0,c.isAsyncFunction)(t)){const n=o[e()].findIndex(e=>e===t);return o[e()].splice(n,1),(0,r.createStore)(e())}return t.forEach(t=>{const s=r.STATE[e(t)].listeners,c=s?.findIndex(e=>e===n);s?.splice(c,1)}),(0,r.createStore)(e())}},"./src/storage.ts"(e,t,n){"use strict";n.r(t),n.d(t,{default:()=>r});n("./src/types.d.ts");const r={GET_TYPE:function(e){return e?"localStorage":""},IS_AVAILABE:function(e){return!!e},UPDATE_STATE:async function(e){const t={};for(const n in e){const e=localStorage.getItem(n);null!==e&&(t[n]=e)}return Object.assign(e,t)},SET_VALUES:async function(e,t){for(let[e,n]of Object.entries(t))localStorage.setItem(e,n);return!1},REMOVE_KEY:function(e,t){e&&localStorage.removeItem(t)}}}};const t={};function n(r){const s=t[r];if(void 0!==s)return s.exports;const c=t[r]={exports:{}};if(!(r in e)){delete t[r];const e=new Error("Cannot find module '"+r+"'");throw e.code="MODULE_NOT_FOUND",e}return e[r](c,c.exports,n),c.exports}n.n=e=>{const t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{if(Array.isArray(t))for(var r=0;r<t.length;){var s=t[r++],c=t[r++];n.o(e,s)?0===c&&r++:0===c?Object.defineProperty(e,s,{enumerable:!0,value:t[r++]}):Object.defineProperty(e,s,{enumerable:!0,get:c})}else for(var s in t)n.o(t,s)&&!n.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};let r=n("./src/index.ts");return r=r.default,r})());
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "varstor",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.66",
|
|
4
4
|
"description": "State manager for web applications and webextensions, employing reactivity, wrapping, and uniting the usage of different storages' values and common variables into a simple universal interface",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Igor Morozov <ismorozs@gmail.com>",
|
|
7
7
|
"main": "./dist/varstor.js",
|
|
8
|
+
"types": "./src/types.d.ts",
|
|
8
9
|
"exports": {
|
|
9
10
|
".": "./dist/varstor.js",
|
|
10
11
|
"./min": "./dist/varstor.min.js",
|
|
@@ -18,6 +19,7 @@
|
|
|
18
19
|
"devDependencies": {
|
|
19
20
|
"@types/node": "26.6.3",
|
|
20
21
|
"@types/webpack-env": "1.18.8",
|
|
22
|
+
"ignore-loader": "^0.1.2",
|
|
21
23
|
"minimizer-webpack-plugin": "5.6.1",
|
|
22
24
|
"ts-loader": "9.6.2",
|
|
23
25
|
"typescript": "6.0.3",
|
package/src/actions.ts
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type INamespace, type IStateActions } from "./types";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
const stateAcessor = {
|
|
5
|
-
get: getState.bind(null, namespace),
|
|
6
|
-
set: setState.bind(null, namespace),
|
|
7
|
-
reset: resetState.bind(null, namespace),
|
|
8
|
-
};
|
|
3
|
+
import { STATE, createStore } from ".";
|
|
9
4
|
|
|
10
|
-
|
|
5
|
+
export function addStateActions(namespace: INamespace, actions: IStateActions) {
|
|
6
|
+
for (const [actionName, actionFn] of Object.entries(actions)) {
|
|
11
7
|
STATE[namespace(actionName)] = {
|
|
12
8
|
key: actionName,
|
|
13
9
|
namespace,
|
|
14
|
-
value: actionFn.bind(null,
|
|
10
|
+
value: actionFn.bind(null, createStore(namespace())),
|
|
15
11
|
isAction: true,
|
|
16
12
|
listeners: [],
|
|
17
13
|
};
|
|
18
14
|
}
|
|
15
|
+
|
|
16
|
+
return createStore(namespace());
|
|
19
17
|
}
|
package/src/helpers.ts
CHANGED
|
@@ -13,7 +13,7 @@ export function isFunction(obj: unknown) {
|
|
|
13
13
|
return getObjectType(obj) === "[object Function]";
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
export function isAsyncFunction
|
|
16
|
+
export function isAsyncFunction(obj: unknown) {
|
|
17
17
|
return getObjectType(obj) === "[object AsyncFunction]";
|
|
18
18
|
}
|
|
19
19
|
|